Skip to content

Commit

Permalink
Merge pull request #272 from MetaCell/develop
Browse files Browse the repository at this point in the history
Release 1.6.0
  • Loading branch information
filippomc authored Jan 15, 2025
2 parents 4a142d1 + 3639820 commit 1072ae2
Show file tree
Hide file tree
Showing 108 changed files with 349 additions and 353 deletions.
36 changes: 36 additions & 0 deletions applications/portal/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,27 @@ paths:
-
bearerAuth: []
cookieAuth: []
/partners:
description: get the list of partners and related images
get:
responses:
'200':
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PartnerResponseObject'
examples:
Partner Response:
value:
-
name: Partner 1
url: www.partner.com
image: 'https:areg.com/media/partner/image.jpg'
description: ''
operationId: getPartners
summary: get the list of partners and related images
components:
schemas:
KeyValuePair:
Expand Down Expand Up @@ -833,6 +854,21 @@ components:
$ref: '#/components/schemas/AbstractAntibody'
-
$ref: '#/components/schemas/AntibodyCoreId'
PartnerResponseObject:
title: Root Type for PartnerResponse
description: Response of the list of partners and related images
type: object
properties:
name:
type: string
url:
type: string
image:
type: string
example:
name: Partner 1
url: www.partner.com
image: 'https:areg.com/media/partner/image.jpg'
responses:
PaginatedAntibodies:
content:
Expand Down
3 changes: 2 additions & 1 deletion applications/portal/backend/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
antibody_data
antibody_data
persistent/partners
8 changes: 7 additions & 1 deletion applications/portal/backend/api/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
Vendor,
Specie,
VendorDomain,
VendorSynonym, AntibodyFiles, CommercialType
VendorSynonym, AntibodyFiles, CommercialType,
Partner,
)
from api.import_export import AntibodyResource
from api.services.keycloak_service import KeycloakService
Expand Down Expand Up @@ -442,3 +443,8 @@ def get_deleted_objects(self, objs, request):
self._force_delete(src_vendor)
return super().get_deleted_objects(objs, request)
return super().get_deleted_objects(objs, request)


@admin.register(Partner)
class PartnerAdmin(admin.ModelAdmin):
pass
15 changes: 13 additions & 2 deletions applications/portal/backend/api/controllers/api_controller.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
from openapi.models import DataInfo
from api.services import antibody_service
from openapi.models import DataInfo, PartnerResponseObject
from api.services import antibody_service, partner_service
from typing import List
from django.conf import settings


def get_datainfo():
return DataInfo(total=antibody_service.count(), lastupdate=antibody_service.last_update())

def get_partners() -> List[PartnerResponseObject]:
return [
PartnerResponseObject(
name=partner.name,
url=partner.url,
image=f"{settings.MEDIA_URL}{partner.image}" if partner.image else None
) for partner in partner_service.get_all_partners()
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Generated by Django 4.2.11 on 2025-01-03 11:05

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
("api", "0014_remove_antibodysearch_citations_and_more"),
]

operations = [
migrations.CreateModel(
name="Partner",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(db_index=True, max_length=512)),
("url", models.URLField(db_index=True, max_length=2048)),
(
"image",
models.ImageField(blank=True, null=True, upload_to="partners"),
),
],
options={
"verbose_name_plural": "Partners",
"ordering": ("name",),
},
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Generated by Django 4.2.11 on 2025-01-03 11:11

from django.db import migrations
from django.core.files import File
import os

common_file_path_for_partners_image_data = "api/migrations/data/partners"

partners = [
{"name": "thermofisher", "url": "https://www.thermofisher.com/", "image": f"{common_file_path_for_partners_image_data}/thermofisher.jpg"},
{"name": "proteintech", "url": "https://www.ptglab.com/", "image": f"{common_file_path_for_partners_image_data}/proteintech.jpg"},
{"name": "biocell", "url": "https://bxcell.com/", "image": f"{common_file_path_for_partners_image_data}/biocell.jpg"},
{"name": "chromotek", "url": "http://www.chromotek.com/home-of-alpaca-antibodies/", "image": f"{common_file_path_for_partners_image_data}/chromotek.jpg"},
{"name": "jesselllab", "url": "https://jesselllab.com/", "image": f"{common_file_path_for_partners_image_data}/jesselllab.jpg"},
{"name": "encorbio", "url": "https://encorbio.com/", "image": f"{common_file_path_for_partners_image_data}/encorbio.jpg"},
{"name": "biolegend", "url": "https://www.biolegend.com/", "image": f"{common_file_path_for_partners_image_data}/biolegend.jpg"},
{"name": "leinco", "url": "https://www.leinco.com/", "image": f"{common_file_path_for_partners_image_data}/leinco.jpg"},
{"name": "jacksonimmuno", "url": "https://www.jacksonimmuno.com/", "image": f"{common_file_path_for_partners_image_data}/jacksonimmuno.jpg"},
{"name": "dshb", "url": "http://dshb.biology.uiowa.edu/", "image": f"{common_file_path_for_partners_image_data}/dshb.jpg"},
{"name": "immunostar", "url": "http://immunostar.com/", "image": f"{common_file_path_for_partners_image_data}/immunostar.jpg"},
{"name": "neuromab", "url": "http://neuromab.ucdavis.edu/", "image": f"{common_file_path_for_partners_image_data}/neuromab.jpg"},
{"name": "sysy", "url": "https://www.sysy.com/", "image": f"{common_file_path_for_partners_image_data}/sysy.jpg"},
{"name": "atlasantibodies", "url": "https://atlasantibodies.com/", "image": f"{common_file_path_for_partners_image_data}/atlasantibodies.jpg"},
{"name": "frontier", "url": "https://www.frontier-institute.com/wp/antibodies/?lang=en", "image": f"{common_file_path_for_partners_image_data}/frontier.jpg"},
{"name": "aeonianbiotech", "url": "https://aeonianbiotech.com/", "image": f"{common_file_path_for_partners_image_data}/aeonianbiotech.jpg"},
{"name": "bdbiosciences", "url": "http://www.bdbiosciences.com/us/home", "image": f"{common_file_path_for_partners_image_data}/bdbiosciences.jpg"},
{"name": "miltenyibiotec", "url": "https://www.miltenyibiotec.com/US-en/", "image": f"{common_file_path_for_partners_image_data}/miltenyibiotec.jpg"},
{"name": "revmab", "url": "https://www.revmab.com/", "image": f"{common_file_path_for_partners_image_data}/revmab.jpg"},
{"name": "southernbiotech", "url": "https://www.southernbiotech.com/", "image": f"{common_file_path_for_partners_image_data}/southernbiotech.jpg"},
{"name": "wagner", "url": "http://gwagner.med.harvard.edu/", "image": f"{common_file_path_for_partners_image_data}/wagner.jpg"},
{"name": "zebrafish", "url": "https://zebrafish.org/home/guide.php", "image": f"{common_file_path_for_partners_image_data}/zebrafish.jpg"},
{"name": "genetex", "url": "https://www.genetex.com/", "image": f"{common_file_path_for_partners_image_data}/genetex.jpg"},
{"name": "licor", "url": "https://www.licor.com/bio", "image": f"{common_file_path_for_partners_image_data}/LICORbio.png"},
{"name": "hytest", "url": "https://www.hytest.fi/home", "image": f"{common_file_path_for_partners_image_data}/hytest.jpg" },
{"name": "Ansh Labs", "url": "https://www.anshlabs.com/", "image": f"{common_file_path_for_partners_image_data}/anshlabs.png"},
{"name": "Oasis Biofarm", "url": "https://www.oasisbiofarm.net", "image": f"{common_file_path_for_partners_image_data}/oasis.png"},
{"name": "Nittobo Medical", "url": "https://www.nittobo.co.jp/", "image": f"{common_file_path_for_partners_image_data}/Nittobo.png"},
{"name": "SICGEN", "url": "https://sicgen.pt/", "image": f"{common_file_path_for_partners_image_data}/Sicgen_antibodies.png"},
{"name": "Sino Biological", "url": "https://www.sinobiological.com/", "image": f"{common_file_path_for_partners_image_data}/Sino-Biological.png"},
{"name": "Niels Danbolt University of Oslo", "url": "https://www.uio.no/", "image": f"{common_file_path_for_partners_image_data}/University_of_Oslo.png"},
{"name": "NIH", "url": "https://www.nhpreagents.org/", "image": f"{common_file_path_for_partners_image_data}/NIH.png"},
{"name": "ichorbio", "url": "https://ichor.bio/", "image": f"{common_file_path_for_partners_image_data}/ichorbio.png"},
{"name": "Antibodies Incorporated", "url": "https://www.antibodiesinc.com/", "image": f"{common_file_path_for_partners_image_data}/antibodies_incorporated.jpg"},
{"name": "HUABIO", "url": "https://www.huabio.com/", "image": f"{common_file_path_for_partners_image_data}/HUABIO.png"},
{"name": "NanoTag", "url": "https://nano-tag.com/", "image": f"{common_file_path_for_partners_image_data}/NanoTag.jpg"},
{"name": "Institute for Protein Innovation", "url": "https://proteininnovation.org/", "image": f"{common_file_path_for_partners_image_data}/Institute_for_Protein_Innovation.png"},
{"name": "Fujirebio", "url": "https://www.fujirebio.com/en", "image": f"{common_file_path_for_partners_image_data}/Fujirebio.jpeg"},
{"name": "Boster Biological Technology", "url": "https://www.bosterbio.com/", "image": f"{common_file_path_for_partners_image_data}/Boster_Biological-logo.png"},
{"name": "Fujifilm Wako USA", "url": "https://wakousa.com/", "image": f"{common_file_path_for_partners_image_data}/fujifilm-wako-chemicals-usa-corporation-logo-vector.png"},
{"name": "Active Motif", "url": "https://www.activemotif.com/", "image": f"{common_file_path_for_partners_image_data}/Active-Motif.jpg"},
{"name": "Life Canvas Technologies", "url": "https://lifecanvastech.com/", "image": f"{common_file_path_for_partners_image_data}/LifeCanvas.jpeg"},
{"name": "AdipoGen Life Sciences", "url": "https://adipogen.com/", "image": f"{common_file_path_for_partners_image_data}/AdipoGen_Logo_LIFE_SCIENCES_CMYK_2015_NEW_13cm_lowres.jpg"},
{"name": "Creative Biolabs", "url": "https://www.creativebiolabs.net/?utm_source=antibodyregistry&utm_medium=logo&utm_campaign=Creative+Biolabs-Recombinant+Antibody", "image": f"{common_file_path_for_partners_image_data}/biolabs.png"},
{"name": "Bio-techne", "url": "https://www.bio-techne.com/", "image": f"{common_file_path_for_partners_image_data}/bio-techne.png"},
{"name": "Bio-Rad", "url": "https://www.bio-rad.com/", "image": f"{common_file_path_for_partners_image_data}/bio-rad.jpg"}
]

def add_partners(apps, schema_editor):
Partner = apps.get_model('api', 'Partner')
for partner in partners:
if partner.get("image"):
image_path = partner["image"]
with open(image_path, 'rb') as image_file:
Partner.objects.create(
name=partner["name"],
url=partner["url"],
image=File(image_file, name=os.path.basename(image_path))
)
else:
Partner.objects.create(
name=partner["name"],
url=partner["url"]
)

class Migration(migrations.Migration):

dependencies = [
("api", "0015_add_partner_model"),
]

operations = [
migrations.RunPython(add_partners),
]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions applications/portal/backend/api/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -637,3 +637,16 @@ class Meta:
name='antibody_search_fts_idx'),

]


class Partner(models.Model):
name = models.CharField(max_length=VENDOR_MAX_LEN, db_index=True)
url = models.URLField(max_length=URL_MAX_LEN, db_index=True)
image = models.ImageField(upload_to='partners', null=True, blank=True)

def __str__(self):
return self.name

class Meta:
ordering = ('name',)
verbose_name_plural = "Partners"
4 changes: 4 additions & 0 deletions applications/portal/backend/api/services/partner_service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from api.models import Partner

def get_all_partners():
return Partner.objects.all()
15 changes: 12 additions & 3 deletions applications/portal/backend/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# generated by fastapi-codegen:
# filename: openapi.yaml
# timestamp: 2024-05-15T15:25:40+00:00
# timestamp: 2025-01-03T12:32:56+00:00

from __future__ import annotations

Expand All @@ -21,6 +21,7 @@
FilterRequest,
IngestRequest,
PaginatedAntibodies,
PartnerResponseObject,
UpdateAntibody,
)
from starlette.middleware.cors import CORSMiddleware
Expand Down Expand Up @@ -268,7 +269,6 @@ def get_antibody(antibody_id: int) -> List[Antibody]:

@prefix_router.get('/datainfo', response_model=DataInfo, tags=None)
def get_datainfo() -> DataInfo:

return api_controller.get_datainfo()


Expand All @@ -292,6 +292,15 @@ def live() -> str:
return test_controller.live()


@prefix_router.get('/partners', response_model=List[PartnerResponseObject], tags=None)
def get_partners() -> List[PartnerResponseObject]:
"""
get the list of partners and related images
"""

return api_controller.get_partners()


@prefix_router.get('/ping', response_model=str, tags=['test'])
def ping() -> str:
"""
Expand All @@ -318,6 +327,6 @@ def ready() -> str:
# import uvicorn
# uvicorn.run(app, host="0.0.0.0", port=8000)

from api.helpers import init_sentry # noqa: E402
from api.helpers import init_sentry # noqa E402

init_sentry()
7 changes: 7 additions & 0 deletions applications/portal/backend/openapi/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,3 +301,10 @@ class PaginatedAntibodies(BaseModel):
page: float = Field(..., description='')
totalElements: int = Field(..., description='')
items: List[Antibody] = Field(..., description='')


class PartnerResponseObject(BaseModel):
name: Optional[str] = None
url: Optional[str] = None
image: Optional[str] = None

6 changes: 6 additions & 0 deletions applications/portal/deploy/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ harness:
limits:
cpu: 4
memory: 2Gi
volume:
name: areg-persistent-files
mountpath: /usr/src/app/persistent
auto: true
size: 5Gi
usenfs: false
livenessProbe:
path: /api/live
readinessProbe:
Expand Down
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
9 changes: 0 additions & 9 deletions applications/portal/frontend/src/assets/partners/bethyl.svg
Diff not rendered.
Diff not rendered.
9 changes: 0 additions & 9 deletions applications/portal/frontend/src/assets/partners/biocell.svg
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
9 changes: 0 additions & 9 deletions applications/portal/frontend/src/assets/partners/dshb.svg
Diff not rendered.
9 changes: 0 additions & 9 deletions applications/portal/frontend/src/assets/partners/encorbio.svg
Diff not rendered.
9 changes: 0 additions & 9 deletions applications/portal/frontend/src/assets/partners/fortis.svg
Diff not rendered.
9 changes: 0 additions & 9 deletions applications/portal/frontend/src/assets/partners/frontier.svg
Diff not rendered.
9 changes: 0 additions & 9 deletions applications/portal/frontend/src/assets/partners/genetex.svg
Diff not rendered.
Loading

0 comments on commit 1072ae2

Please sign in to comment.