From 68367f04c37f57784941e87a4e7958783d0d9c49 Mon Sep 17 00:00:00 2001 From: mpabi Date: Thu, 20 Jun 2024 20:19:38 +0000 Subject: [PATCH] sequences and api are ok --- app/models.py | 3 +-- entrypoint.py | 36 +++++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/app/models.py b/app/models.py index b847657..6dd3152 100644 --- a/app/models.py +++ b/app/models.py @@ -1,7 +1,6 @@ -# app/models.py from sqlalchemy import Column, Integer, String, Text, ForeignKey from sqlalchemy.orm import relationship -from .database import Base +from app.database import Base class Sequence(Base): __tablename__ = "sequences" diff --git a/entrypoint.py b/entrypoint.py index f76d8a4..5cce905 100644 --- a/entrypoint.py +++ b/entrypoint.py @@ -1,5 +1,3 @@ -#%% -# entrypoint.py from Bio import SeqIO from sqlalchemy.orm import Session from app.database import engine, SessionLocal, Base @@ -9,7 +7,6 @@ import json # Tworzenie tabeli w bazie danych Base.metadata.create_all(bind=engine) -#%% def get_db(): db = SessionLocal() try: @@ -25,25 +22,38 @@ def load_genbank_to_db(file_path: str): # Zapisz sekwencję do bazy danych sequence_data = Sequence( name=record.name, - description=record.description, + description=record.description if 'description' in record.annotations else 'No description', sequence=str(record.seq) ) db.add(sequence_data) db.commit() + db.refresh(sequence_data) # Odśwież sekwencję, aby uzyskać jej ID # Zapisz cechy (features) do bazy danych for feature in record.features: - feature_data = Feature( - type=feature.type, - location=str(feature.location), - sequence=str(record.seq[feature.location.start:feature.location.end]), - qualifiers=json.dumps(feature.qualifiers), - sequence_id=sequence_data.id - ) - db.add(feature_data) + if feature.type in ["promoter", "RBS","CDS", "protein_bind", "misc_feature", "rep_origin", "terminator"]: + qualifiers = {} + if feature.type == "CDS": + qualifiers['gene_name'] = feature.qualifiers.get('gene', ['Unknown gene'])[0] + qualifiers['product'] = feature.qualifiers.get('product', ['Unknown product'])[0] + elif feature.type == "protein_bind": + qualifiers['binding_site'] = feature.qualifiers.get('bound_moiety', ['Unknown binding site'])[0] + elif feature.type == "misc_feature": + qualifiers['note'] = feature.qualifiers.get('note', ['No additional information'])[0] + elif feature.type == "rep_origin": + qualifiers['note'] = "This is a replication origin." + + feature_data = Feature( + type=feature.type, + location=str(feature.location), + sequence=str(record.seq[feature.location.start:feature.location.end]), + qualifiers=json.dumps(qualifiers), + sequence_id=sequence_data.id # Ustawienie poprawnego ID + ) + db.add(feature_data) db.commit() print(f"Loaded {file_path} to database.") if __name__ == "__main__": - load_genbank_to_db("data/pET-28+(a).gb") + load_genbank_to_db("data/plasmid.gb")