From eea53fcbc7e3982fc793b20df3b0bbbf3bee4ee8 Mon Sep 17 00:00:00 2001 From: carlosribas Date: Thu, 11 Jul 2024 10:08:52 +0100 Subject: [PATCH 1/4] Temporarily disable ensembl_splice_variants --- rnacentral/portal/models/xref.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rnacentral/portal/models/xref.py b/rnacentral/portal/models/xref.py index 631eef08f..a50a734ee 100644 --- a/rnacentral/portal/models/xref.py +++ b/rnacentral/portal/models/xref.py @@ -86,7 +86,7 @@ def _fetch_all(self): ) refseq_mirna_precursors = self.get_refseq_mirna_precursor(taxid) refseq_splice_variants = self.get_refseq_splice_variants(taxid) - ensembl_splice_variants = self.get_ensembl_splice_variants(taxid) + # ensembl_splice_variants = self.get_ensembl_splice_variants(taxid) # tmrna_mates = self.get_tmrna_mate(taxid) # "annotate" xrefs queryset with additional attributes, retrieved by raw SQL queries From 15cda33cca13710f8cbe1a000357a847052bdac9 Mon Sep 17 00:00:00 2001 From: carlosribas Date: Thu, 11 Jul 2024 13:36:34 +0100 Subject: [PATCH 2/4] Add endpoint to fetch sequence using md5 field --- rnacentral/apiv1/serializers.py | 6 ++++++ rnacentral/apiv1/urls.py | 6 ++++++ rnacentral/apiv1/views.py | 9 +++++++++ 3 files changed, 21 insertions(+) diff --git a/rnacentral/apiv1/serializers.py b/rnacentral/apiv1/serializers.py index c9744c2e9..1c6e2ad42 100644 --- a/rnacentral/apiv1/serializers.py +++ b/rnacentral/apiv1/serializers.py @@ -958,3 +958,9 @@ def get_ensembl_assembly(self, obj): "example_start": obj.example_start, "example_end": obj.example_end, } + + +class Md5Serializer(serializers.Serializer): + """Serializer class to fetch sequence using md5""" + + sequence = serializers.CharField(source="get_sequence") diff --git a/rnacentral/apiv1/urls.py b/rnacentral/apiv1/urls.py index beb20411c..d9f15c52d 100644 --- a/rnacentral/apiv1/urls.py +++ b/rnacentral/apiv1/urls.py @@ -125,6 +125,12 @@ cache_page(CACHE_TIMEOUT)(views.LncrnaTargetsView.as_view()), name="rna-lncrna-targets", ), + # fetch sequence using md5 + url( + r"md5/(?P.*?)/?$", + cache_page(CACHE_TIMEOUT)(views.Md5SequenceView.as_view({"get": "retrieve"})), + name="md5-sequence", + ), # Information about the qc status for a given sequence url( r"^rna/(?PURS[0-9A-Fa-f]{10})/qc-status/(?P\d+)/?$", diff --git a/rnacentral/apiv1/views.py b/rnacentral/apiv1/views.py index fb5ec0a48..8952badbc 100644 --- a/rnacentral/apiv1/views.py +++ b/rnacentral/apiv1/views.py @@ -29,6 +29,7 @@ InteractionsSerializer, LitSummSerializer, LncrnaTargetsSerializer, + Md5Serializer, ProteinTargetsSerializer, QcStatusSerializer, RawPublicationSerializer, @@ -1102,3 +1103,11 @@ def get_queryset(self): if primary_id is not None: queryset = queryset.filter(primary_id=primary_id) return queryset + + +class Md5SequenceView(ReadOnlyModelViewSet): + """API endpoint to fetch sequence using md5 field""" + + queryset = Rna.objects.all() + serializer_class = Md5Serializer + lookup_field = "md5" From fdcd5f9ff3d6099b53daf29952c17292ba0f6a5f Mon Sep 17 00:00:00 2001 From: carlosribas Date: Thu, 11 Jul 2024 16:18:35 +0100 Subject: [PATCH 3/4] Add rnacentral_id and description --- rnacentral/apiv1/serializers.py | 2 ++ rnacentral/apiv1/urls.py | 12 ++++++------ rnacentral/apiv1/views.py | 19 +++++++++++++++---- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/rnacentral/apiv1/serializers.py b/rnacentral/apiv1/serializers.py index 1c6e2ad42..3d2da33b1 100644 --- a/rnacentral/apiv1/serializers.py +++ b/rnacentral/apiv1/serializers.py @@ -963,4 +963,6 @@ def get_ensembl_assembly(self, obj): class Md5Serializer(serializers.Serializer): """Serializer class to fetch sequence using md5""" + rnacentral_id = serializers.CharField(source="id") + description = serializers.CharField() sequence = serializers.CharField(source="get_sequence") diff --git a/rnacentral/apiv1/urls.py b/rnacentral/apiv1/urls.py index d9f15c52d..5c199120f 100644 --- a/rnacentral/apiv1/urls.py +++ b/rnacentral/apiv1/urls.py @@ -125,12 +125,6 @@ cache_page(CACHE_TIMEOUT)(views.LncrnaTargetsView.as_view()), name="rna-lncrna-targets", ), - # fetch sequence using md5 - url( - r"md5/(?P.*?)/?$", - cache_page(CACHE_TIMEOUT)(views.Md5SequenceView.as_view({"get": "retrieve"})), - name="md5-sequence", - ), # Information about the qc status for a given sequence url( r"^rna/(?PURS[0-9A-Fa-f]{10})/qc-status/(?P\d+)/?$", @@ -202,6 +196,12 @@ {}, name="litsumm-specific-id", ), + # fetch sequence using md5 + url( + r"md5/(?P.*?)/?$", + cache_page(CACHE_TIMEOUT)(views.Md5SequenceView.as_view()), + name="md5-sequence", + ), ] urlpatterns = format_suffix_patterns( diff --git a/rnacentral/apiv1/views.py b/rnacentral/apiv1/views.py index 8952badbc..72ef9a5d3 100644 --- a/rnacentral/apiv1/views.py +++ b/rnacentral/apiv1/views.py @@ -1105,9 +1105,20 @@ def get_queryset(self): return queryset -class Md5SequenceView(ReadOnlyModelViewSet): +class Md5SequenceView(APIView): """API endpoint to fetch sequence using md5 field""" - queryset = Rna.objects.all() - serializer_class = Md5Serializer - lookup_field = "md5" + permission_classes = (AllowAny,) + + def get(self, request, md5): + try: + rna = Rna.objects.get(md5=md5) + except Rna.DoesNotExist: + raise Http404 + + precomputed = RnaPrecomputed.objects.filter(upi=rna, taxid__isnull=True).first() + if not precomputed: + raise Http404 + + serializer = Md5Serializer(precomputed) + return Response(serializer.data) From 73944c31978cef81dd2ca79df05c53681573d817 Mon Sep 17 00:00:00 2001 From: carlosribas Date: Fri, 12 Jul 2024 14:35:06 +0100 Subject: [PATCH 4/4] Disable ensembl_splice_variants --- rnacentral/apiv1/serializers.py | 4 ++-- rnacentral/portal/models/xref.py | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/rnacentral/apiv1/serializers.py b/rnacentral/apiv1/serializers.py index 3d2da33b1..cd63d8ece 100644 --- a/rnacentral/apiv1/serializers.py +++ b/rnacentral/apiv1/serializers.py @@ -198,7 +198,7 @@ class XrefSerializer(serializers.HyperlinkedModelSerializer): refseq_mirna_mature_products = serializers.SerializerMethodField() refseq_mirna_precursor = serializers.SerializerMethodField() refseq_splice_variants = serializers.SerializerMethodField() - ensembl_splice_variants = serializers.SerializerMethodField() + # ensembl_splice_variants = serializers.SerializerMethodField() # tmrna_mate_upi = serializers.SerializerMethodField('get_tmrna_mate_upi') # tmrna_type = serializers.ReadOnlyField(source='get_tmrna_type') gencode_transcript_id = serializers.CharField( @@ -229,7 +229,7 @@ class Meta: "refseq_mirna_mature_products", "refseq_mirna_precursor", "refseq_splice_variants", - "ensembl_splice_variants", + # "ensembl_splice_variants", # 'tmrna_mate_upi', # 'tmrna_type', "gencode_transcript_id", diff --git a/rnacentral/portal/models/xref.py b/rnacentral/portal/models/xref.py index a50a734ee..ff8602eef 100644 --- a/rnacentral/portal/models/xref.py +++ b/rnacentral/portal/models/xref.py @@ -114,11 +114,11 @@ def _fetch_all(self): splice_variant.upi.upi for splice_variant in refseq_splice_variants[xref.id] ] - if xref.id in ensembl_splice_variants: - xref.ensembl_splice_variants = [ - splice_variant.upi.upi - for splice_variant in ensembl_splice_variants[xref.id] - ] + # if xref.id in ensembl_splice_variants: + # xref.ensembl_splice_variants = [ + # splice_variant.upi.upi + # for splice_variant in ensembl_splice_variants[xref.id] + # ] # if xref.id in tmrna_mates: # xref.tmrna_mates = [ # tmrna_mate.upi.upi for tmrna_mate in tmrna_mates[xref.id]