From 54188c596af5aaee9b782fedf3596d0e2d46e197 Mon Sep 17 00:00:00 2001
From: Martijn Vermaat <martijn@vermaat.name>
Date: Mon, 18 May 2015 14:31:39 +0200
Subject: [PATCH] Limit input sequence length for description extractor

This is hopefully a temporary measure. At the moment we cannot accurately
predict the running time of the extractor, so we have to aggressively
limit the input based on the worst-case expectation.

As a worst-case scenario, we currently use random input sequences, where
length 1000bp yields about 500ms of running time.

In the future we hope to either:

1. Predict the running time and abort if needed.
2. Keep track of the running time and abort if needed.
3. Run the extractor in a task scheduler with a running time limit.
---
 mutalyzer/services/rpc.py                              | 5 +++++
 mutalyzer/website/templates/description-extractor.html | 9 ++++++---
 mutalyzer/website/views.py                             | 6 +++++-
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/mutalyzer/services/rpc.py b/mutalyzer/services/rpc.py
index 77027112..3e326417 100644
--- a/mutalyzer/services/rpc.py
+++ b/mutalyzer/services/rpc.py
@@ -1240,6 +1240,11 @@ class MutalyzerService(ServiceBase):
         output.addMessage(__file__, -1, 'INFO',
             'Received request descriptionExtract')
 
+        if not settings.TESTING and (len(reference) > 1000 or
+                                     len(observed) > 1000):
+            raise Fault('EMAXSIZE',
+                        'Input sequences are restricted to 1000bp.')
+
         allele = extractor.describe_dna(reference, observed)
 
         result = Allele()
diff --git a/mutalyzer/website/templates/description-extractor.html b/mutalyzer/website/templates/description-extractor.html
index ebf8ef51..5927bf3e 100644
--- a/mutalyzer/website/templates/description-extractor.html
+++ b/mutalyzer/website/templates/description-extractor.html
@@ -5,7 +5,10 @@
 
 {% block content %}
 
-<p class="alert alert-warning">Note that this is an experimental service.</p>
+<p class="alert alert-warning">
+Please note that this is an experimental service and we are currently limiting
+input sequences to 1000bp.
+</p>
 
 <p>
 Extract the HGVS variant description from a reference sequence and an observed
@@ -85,7 +88,7 @@ Please supply a reference sequence and an observed sequence.
           <div class="form-group">
             <label for="reference_accession_number">Reference accession number</label>
             <input type="text" name="reference_accession_number" id="reference_accession_number" value="{{ reference_accession_number }}" class="form-control form-pre example-target" placeholder="Reference accession number">
-            <p>Example: <code class="example-input" data-for="reference_accession_number">NM_004006.1</code></p>
+            <p>Example: <code class="example-input" data-for="reference_accession_number">NM_198697.1</code></p>
           </div>
         </div>
       </div>
@@ -140,7 +143,7 @@ Please supply a reference sequence and an observed sequence.
           <div class="form-group">
             <label for="sample_accession_number">Sample accession number</label>
             <input type="text" name="sample_accession_number" id="sample_accession_number" value="{{ sample_accession_number }}" class="form-control form-pre example-target-2" placeholder="Sample accession number">
-            <p>Example: <code class="example-input" data-for="sample_accession_number">NM_004006.2</code></p>
+            <p>Example: <code class="example-input" data-for="sample_accession_number">NM_198697.2</code></p>
           </div>
         </div>
       </div>
diff --git a/mutalyzer/website/views.py b/mutalyzer/website/views.py
index b3b63e9b..fffb8bb6 100644
--- a/mutalyzer/website/views.py
+++ b/mutalyzer/website/views.py
@@ -783,7 +783,11 @@ def description_extractor_submit():
 
     raw_vars = None
     if r and s:
-        raw_vars = extractor.describe_dna(r, s)
+        if not settings.TESTING and (len(r) > 1000 or len(s) > 1000):
+            output.addMessage(__file__, 3, 'EMAXSIZE',
+                              'Input sequences are restricted to 1000bp.')
+        else:
+            raw_vars = extractor.describe_dna(r, s)
 
     errors, warnings, summary = output.Summary()
     messages = map(util.message_info, output.getMessages())
-- 
GitLab