Skip to content
Open
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
ca2a7ef
Working /api/annotation/SMART/uniprot/:name endpoint
Fabian-RY Jun 13, 2025
4c63c3c
Working /api/annotation/ENSEMBL/annotations/:name endpoint
Fabian-RY Jun 19, 2025
d413469
Finished ensembl annotation endpoint
Fabian-RY Jun 20, 2025
60b29eb
Added models for all Entities in 3DBionotes
Fabian-RY Jun 26, 2025
f64e289
added some more endpoints
Fabian-RY Jun 26, 2025
3bdd2ce
added urls for new endpoints
Fabian-RY Jun 26, 2025
4b56116
Merge branch 'ENSEMBL_annotations' into annotations
Fabian-RY Jun 30, 2025
2e330fc
Added missing endpoints to BWS
Fabian-RY Jul 11, 2025
5fd4d83
Started test suite
Fabian-RY Jul 11, 2025
3e4c092
added source_pfam.py
Fabian-RY Jul 14, 2025
dcfc279
Merge branch 'annotations' into ENSEMBL_annotations
Fabian-RY Jul 14, 2025
6404ce3
added migrations for annotations forcefully, ignoring .gitignore)
Fabian-RY Jul 14, 2025
27330f3
Added dsysmap endpoint
Fabian-RY Jul 17, 2025
b73ae74
Added lrs subroutine
Fabian-RY Jul 21, 2025
2c97004
Improved testing suit
Fabian-RY Jul 21, 2025
f3fa8a4
Fixed missing endpoints
Fabian-RY Jul 21, 2025
cbec2bd
Source phosphosite no gives an error when the id is not found in DB
Fabian-RY Jul 22, 2025
a524f79
FIX: Pfam not loading from DB existing elements and database models i…
Fabian-RY Jul 22, 2025
2b6d75a
Updated annotation model for EnsemblAnnotation
Fabian-RY Jul 22, 2025
b1e868f
Updated load from DB
Fabian-RY Jul 22, 2025
3d7ed3b
Reviewed and fix several endpoints
Fabian-RY Jul 22, 2025
a3db34b
Fixed ensembl annotations DB model
Fabian-RY Jul 23, 2025
2caeac2
Updated PFAM endpoint by parsing new uniprot external DB
Fabian-RY Jul 23, 2025
95c98d9
Fixed ensembl annotation endpoint
Fabian-RY Jul 24, 2025
c399002
Removed duplicated ENSEMBL endpoints
Fabian-RY Jul 24, 2025
405113e
Fixed biomuta endpoint
Fabian-RY Jul 24, 2025
8d8ac8e
Changed biomuta endpoint
Fabian-RY Jul 24, 2025
01aa8e5
Fixed feedback comments
Fabian-RY Jul 24, 2025
67250ac
Endpoints now return a list (not nested) and 404 error if no results …
Fabian-RY Jul 25, 2025
4dd428f
PFAM endpoint root list removed when came from DB
Fabian-RY Jul 25, 2025
a2b6c92
start and end elements returned as string and not in in json to be co…
Fabian-RY Jul 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added app/api/annotations/__init__.py
Empty file.
62 changes: 62 additions & 0 deletions app/api/annotations/lrs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#! /usr/bin/env python3

from . import serializers
from . import models

from django.core.exceptions import ValidationError
from django.http import HttpResponse, HttpResponseNotFound
from django.shortcuts import get_object_or_404
from rest_framework import generics, mixins, permissions, status, viewsets
from rest_framework.filters import OrderingFilter, SearchFilter
from rest_framework.response import Response
from rest_framework.views import APIView

from django_filters import FilterSet, ModelChoiceFilter
from django_filters import rest_framework as filters

class FeatureTrackDetailView(generics.ListAPIView):
"""
Detail View for a given FeatureTrack
"""
serializer_class = serializers.TrackDetailSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
lookup_url_kwarg = 'acc'

def get_queryset(self):
"""
This view should return a FeatureTrack by UniProt and name
Example:
/featureTracks/<ACC>/<name>/
/featureTracks/P0DTC4/Genomic_Variants_CNCB/
"""
uniprot_acc = self.kwargs['acc']
name = self.kwargs['name']
return models.FeatureTrack.objects.filter(
uniprot_entry__accession=uniprot_acc,
name=name)

class TrackDetailView(generics.RetrieveAPIView):
"""
Detail View for a given FeatureTrack
"""
queryset = models.FeatureTrack.objects.all()
serializer_class = serializers.TrackDetailSerializer
#permission_classes = [permissions.IsAuthenticatedOrReadOnly]
filter_backends = (filters.DjangoFilterBackend,
SearchFilter, OrderingFilter)
filterset_fields = ['mutationType', 'sourceType', 'mutationEffect']
search_fields = ['mutationType']
ordering_fields = ['mutationType', 'mutationEffect', 'sourceType']
ordering = ['mutationType']
lookup_url_kwarg = 'name'
multiple_lookup_fields = ['uniprot_entry', 'name']

def get_object(self):
queryset = self.get_queryset()
filter = {}
for field in self.multiple_lookup_fields:
pass #filter[field] = self.kwargs[field]

obj = get_object_or_404(queryset, **filter)
self.check_object_permissions(self.request, obj)
return obj
26 changes: 26 additions & 0 deletions app/api/annotations/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Generated by Django 4.2.8 on 2025-06-13 08:17

from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='SMARTentity',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('uniprotid', models.CharField(blank=True, default='', max_length=30, null=True)),
('domain', models.CharField(blank=True, default='', max_length=30, null=True)),
('start', models.IntegerField(blank=True, null=True)),
('end', models.IntegerField(blank=True, null=True)),
('evalue', models.CharField(blank=True, default='1', max_length=20, null=True)),
('type', models.CharField(default='', max_length=30, null=True)),
],
),
]
20 changes: 20 additions & 0 deletions app/api/annotations/migrations/0002_pfamentity.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 4.2.8 on 2025-06-13 10:46

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('annotations', '0001_initial'),
]

operations = [
migrations.CreateModel(
name='PFAMentity',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('pfamid', models.CharField(blank=True, default='', max_length=30, null=True)),
],
),
]
24 changes: 24 additions & 0 deletions app/api/annotations/migrations/0003_ensemblannotation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.2.8 on 2025-06-19 10:11

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('annotations', '0002_pfamentity'),
]

operations = [
migrations.CreateModel(
name='EnsemblAnnotation',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('geneName', models.CharField(blank=True, default='', max_length=30, null=True)),
('transcriptName', models.CharField(blank=True, default='', max_length=30, null=True)),
('start', models.IntegerField(blank=True, null=True)),
('end', models.IntegerField(blank=True, null=True)),
('type', models.CharField(blank=True, default='', max_length=30, null=True)),
],
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
# Generated by Django 4.2.8 on 2025-06-23 10:44

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('annotations', '0003_ensemblannotation'),
]

operations = [
migrations.CreateModel(
name='biomutanentries',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('proteinID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
],
),
migrations.CreateModel(
name='dbptmentries',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('proteinID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
],
),
migrations.CreateModel(
name='dsysmapentries',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('proteinID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
],
),
migrations.CreateModel(
name='ebifeaturesentries',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('proteinID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
('features_type', models.CharField(blank=True, default='', max_length=255, null=True)),
],
),
migrations.CreateModel(
name='EnsemblVariantEntry',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('geneID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
],
),
migrations.CreateModel(
name='intrproentries',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('proteinID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
],
),
migrations.CreateModel(
name='mobientries',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('proteinID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
],
),
migrations.CreateModel(
name='molprobityentries',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('PDBID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
],
),
migrations.CreateModel(
name='PDBEntry',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('PDBID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
],
),
migrations.CreateModel(
name='PDBRedoEntry',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('PDBID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
],
),
migrations.CreateModel(
name='PhosphoEntries',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('proteinID', models.CharField(blank=True, default='', max_length=255, null=True)),
('data', models.TextField(blank=True, default='')),
('created_at', models.DateTimeField(default=None)),
('updated_at', models.DateTimeField(default=None)),
],
),
migrations.CreateModel(
name='swissvarentries',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('uniprotid', models.CharField(blank=True, default='', max_length=30, null=True)),
('domain', models.CharField(blank=True, default='', max_length=30, null=True)),
('start', models.IntegerField(blank=True, null=True)),
('end', models.IntegerField(blank=True, null=True)),
('evalue', models.CharField(blank=True, default='1', max_length=20, null=True)),
('type', models.CharField(default='', max_length=30, null=True)),
],
),
migrations.CreateModel(
name='uniprotmappingentries',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('uniprotid', models.CharField(blank=True, default='', max_length=30, null=True)),
('domain', models.CharField(blank=True, default='', max_length=30, null=True)),
('gene', models.TextField(default=None, null=True)),
('transcript', models.TextField(default=None, null=True)),
('start', models.IntegerField(blank=True, null=True)),
('end', models.IntegerField(blank=True, null=True)),
('evalue', models.CharField(blank=True, default='1', max_length=20, null=True)),
('type', models.CharField(default='', max_length=30, null=True)),
],
),
migrations.RemoveField(
model_name='pfamentity',
name='pfamid',
),
migrations.AddField(
model_name='pfamentity',
name='created_at',
field=models.DateTimeField(default=None),
),
migrations.AddField(
model_name='pfamentity',
name='data',
field=models.TextField(blank=True, default=''),
),
migrations.AddField(
model_name='pfamentity',
name='proteinID',
field=models.CharField(blank=True, default='', max_length=255, null=True),
),
migrations.AddField(
model_name='pfamentity',
name='updated_at',
field=models.DateTimeField(default=None),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Generated by Django 4.2.8 on 2025-06-27 08:11

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('annotations', '0004_biomutanentries_dbptmentries_dsysmapentries_and_more'),
]

operations = [
migrations.DeleteModel(
name='biomutanentries',
),
migrations.DeleteModel(
name='dbptmentries',
),
migrations.DeleteModel(
name='dsysmapentries',
),
migrations.DeleteModel(
name='ebifeaturesentries',
),
migrations.DeleteModel(
name='EnsemblVariantEntry',
),
migrations.DeleteModel(
name='intrproentries',
),
migrations.DeleteModel(
name='mobientries',
),
migrations.DeleteModel(
name='molprobityentries',
),
migrations.DeleteModel(
name='PDBEntry',
),
migrations.DeleteModel(
name='PDBRedoEntry',
),
migrations.DeleteModel(
name='PhosphoEntries',
),
migrations.DeleteModel(
name='swissvarentries',
),
migrations.DeleteModel(
name='uniprotmappingentries',
),
migrations.RemoveField(
model_name='pfamentity',
name='created_at',
),
migrations.RemoveField(
model_name='pfamentity',
name='data',
),
migrations.RemoveField(
model_name='pfamentity',
name='proteinID',
),
migrations.RemoveField(
model_name='pfamentity',
name='updated_at',
),
migrations.AddField(
model_name='pfamentity',
name='pfamid',
field=models.CharField(blank=True, default='', max_length=30, null=True),
),
]
Loading