babilonczyk commited on
Commit
cf27fed
·
verified ·
1 Parent(s): baae5c4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -9
app.py CHANGED
@@ -1,27 +1,32 @@
1
  import gradio as gr
2
  import zipfile
3
  import sqlite3
4
- import io
 
 
5
 
6
- # Load DB from ZIP in memory
7
  def get_connection_from_zip(zip_path: str, db_filename: str) -> sqlite3.Connection:
8
- with zipfile.ZipFile(zip_path) as z:
9
- with z.open(db_filename) as f:
10
- db_bytes = io.BytesIO(f.read())
11
- return sqlite3.connect(f"file:{db_filename}?mode=ro", uri=True, factory=sqlite3.Connection, database=db_bytes)
 
12
 
13
- # Open connection once at startup
 
 
14
  conn = get_connection_from_zip("proteins.db.zip", "proteins.db")
15
  cursor = conn.cursor()
16
 
17
- # Query function
18
  def search_by_sequence(seq: str) -> str:
19
  seq = seq.strip().upper()
20
  cursor.execute("SELECT * FROM proteins WHERE sequence = ?", (seq,))
21
  row = cursor.fetchone()
22
 
23
  if not row:
24
- return
25
 
26
  col_names = [desc[0] for desc in cursor.description]
27
  return "\n".join(f"{k}: {v}" for k, v in zip(col_names, row))
 
1
  import gradio as gr
2
  import zipfile
3
  import sqlite3
4
+ import tempfile
5
+ import shutil
6
+ import os
7
 
8
+ # Extract DB from ZIP to a temporary file
9
  def get_connection_from_zip(zip_path: str, db_filename: str) -> sqlite3.Connection:
10
+ with zipfile.ZipFile(zip_path, 'r') as zip_ref:
11
+ with zip_ref.open(db_filename) as db_file:
12
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".db") as tmp_file:
13
+ shutil.copyfileobj(db_file, tmp_file)
14
+ tmp_db_path = tmp_file.name
15
 
16
+ return sqlite3.connect(tmp_db_path)
17
+
18
+ # Open connection at startup
19
  conn = get_connection_from_zip("proteins.db.zip", "proteins.db")
20
  cursor = conn.cursor()
21
 
22
+ # Query by protein sequence
23
  def search_by_sequence(seq: str) -> str:
24
  seq = seq.strip().upper()
25
  cursor.execute("SELECT * FROM proteins WHERE sequence = ?", (seq,))
26
  row = cursor.fetchone()
27
 
28
  if not row:
29
+ return "No protein found for the given sequence."
30
 
31
  col_names = [desc[0] for desc in cursor.description]
32
  return "\n".join(f"{k}: {v}" for k, v in zip(col_names, row))