Moved CLI to automlst.cli repo
This commit is contained in:
parent
e634647774
commit
5449ae0c68
@ -12,7 +12,7 @@
|
|||||||
// "forwardPorts": [],
|
// "forwardPorts": [],
|
||||||
|
|
||||||
// Use 'postCreateCommand' to run commands after the container is created.
|
// Use 'postCreateCommand' to run commands after the container is created.
|
||||||
"postCreateCommand": "pip3 install --user -r requirements.txt && pipx install . -e",
|
"postCreateCommand": "pip3 install --user -r requirements.txt",
|
||||||
"customizations": {
|
"customizations": {
|
||||||
"vscode": {
|
"vscode": {
|
||||||
"extensions": [
|
"extensions": [
|
||||||
|
@ -3,7 +3,7 @@ requires = ["setuptools>=64", "setuptools_scm>=8"]
|
|||||||
build-backend = "setuptools.build_meta"
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "automlst"
|
name = "automlst.engine"
|
||||||
dynamic = ["version"]
|
dynamic = ["version"]
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
@ -13,9 +13,6 @@ dependencies = [
|
|||||||
requires-python = ">=3.11"
|
requires-python = ">=3.11"
|
||||||
description = "A tool to rapidly fetch fetch MLST profiles given sequences for various diseases."
|
description = "A tool to rapidly fetch fetch MLST profiles given sequences for various diseases."
|
||||||
|
|
||||||
[project.scripts]
|
|
||||||
automlst = "automlst.cli.program:run"
|
|
||||||
|
|
||||||
[tool.setuptools_scm]
|
[tool.setuptools_scm]
|
||||||
|
|
||||||
[tool.pyright]
|
[tool.pyright]
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
from argparse import ArgumentParser
|
|
||||||
import asyncio
|
|
||||||
from automlst.engine.remote.databases.bigsdb import BIGSdbIndex
|
|
||||||
|
|
||||||
|
|
||||||
def setup_parser(parser: ArgumentParser):
|
|
||||||
parser.description = "Fetches the latest BIGSdb MLST database definitions."
|
|
||||||
parser.add_argument(
|
|
||||||
"--retrieve-bigsdbs", "-l",
|
|
||||||
action="store_true",
|
|
||||||
dest="list_dbs",
|
|
||||||
required=False,
|
|
||||||
default=False,
|
|
||||||
help="Lists all known BIGSdb MLST databases (fetched from known APIs and cached)."
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--retrieve-bigsdb-schemas", "-lschemas",
|
|
||||||
nargs="+",
|
|
||||||
action="extend",
|
|
||||||
dest="list_bigsdb_schemas",
|
|
||||||
required=False,
|
|
||||||
default=[],
|
|
||||||
type=str,
|
|
||||||
help="Lists the known schema IDs for a given BIGSdb sequence definition database name. The name, and then the ID of the schema is given."
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.set_defaults(func=run_asynchronously)
|
|
||||||
|
|
||||||
async def run(args):
|
|
||||||
async with BIGSdbIndex() as bigsdb_index:
|
|
||||||
if args.list_dbs:
|
|
||||||
known_seqdef_dbs = await bigsdb_index.get_known_seqdef_dbs(force=False)
|
|
||||||
print("\n".join(known_seqdef_dbs.keys()))
|
|
||||||
|
|
||||||
for bigsdb_schema_name in args.list_bigsdb_schemas:
|
|
||||||
schemas = await bigsdb_index.get_schemas_for_seqdefdb(bigsdb_schema_name)
|
|
||||||
for schema_desc, schema_id in schemas.items():
|
|
||||||
print(f"{schema_desc}: {schema_id}")
|
|
||||||
|
|
||||||
def run_asynchronously(args):
|
|
||||||
asyncio.run(run(args))
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
def get_module_base_name(name):
|
|
||||||
return name.split(".")[-1]
|
|
@ -1,27 +0,0 @@
|
|||||||
import argparse
|
|
||||||
import asyncio
|
|
||||||
import datetime
|
|
||||||
from os import path
|
|
||||||
import os
|
|
||||||
|
|
||||||
from automlst.cli import info, st
|
|
||||||
from automlst.cli.meta import get_module_base_name
|
|
||||||
from automlst.engine.data.genomics import NamedString
|
|
||||||
from automlst.engine.local.abif import read_abif
|
|
||||||
from automlst.engine.local.csv import write_mlst_profiles_as_csv
|
|
||||||
from automlst.engine.local.fasta import read_fasta
|
|
||||||
from automlst.engine.remote.databases.bigsdb import BIGSdbIndex
|
|
||||||
|
|
||||||
root_parser = argparse.ArgumentParser()
|
|
||||||
subparsers = root_parser.add_subparsers(required=True)
|
|
||||||
|
|
||||||
info.setup_parser(subparsers.add_parser(get_module_base_name(info.__name__)))
|
|
||||||
st.setup_parser(subparsers.add_parser(get_module_base_name(st.__name__)))
|
|
||||||
|
|
||||||
|
|
||||||
def run():
|
|
||||||
args = root_parser.parse_args()
|
|
||||||
args.func(args)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
run()
|
|
@ -1,69 +0,0 @@
|
|||||||
|
|
||||||
from argparse import ArgumentParser
|
|
||||||
import asyncio
|
|
||||||
import datetime
|
|
||||||
from automlst.engine.local.csv import write_mlst_profiles_as_csv
|
|
||||||
from automlst.engine.local.fasta import read_multiple_fastas
|
|
||||||
from automlst.engine.remote.databases.bigsdb import BIGSdbIndex
|
|
||||||
|
|
||||||
|
|
||||||
def setup_parser(parser: ArgumentParser):
|
|
||||||
parser.description = "Returns MLST exact profile matches."
|
|
||||||
parser.add_argument(
|
|
||||||
"fastas",
|
|
||||||
nargs="+",
|
|
||||||
action='extend',
|
|
||||||
default=[],
|
|
||||||
type=str,
|
|
||||||
help="The FASTA files to process. Multiple can be listed."
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"seqdefdb",
|
|
||||||
help="The BIGSdb seqdef database to use for typing."
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"schema",
|
|
||||||
type=int,
|
|
||||||
help="The BIGSdb seqdef database schema ID (integer) to use for typing."
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"out",
|
|
||||||
default=f'./{datetime.datetime.now().strftime(r"%Y%m%d%H%M%S")}',
|
|
||||||
help="The output CSV name (.csv will be appended)."
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--exact", "-ex",
|
|
||||||
action="store_true",
|
|
||||||
dest="exact",
|
|
||||||
required=False,
|
|
||||||
default=False,
|
|
||||||
help="Should run exact matching rather than returning all similar ones"
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--stop-on-fail", "-sof",
|
|
||||||
action="store_true",
|
|
||||||
dest="stop_on_fail",
|
|
||||||
required=False,
|
|
||||||
default=False,
|
|
||||||
help="Should the algorithm stop in the case there are no matches (or partial matches when expecting exact matches)."
|
|
||||||
)
|
|
||||||
parser.set_defaults(func=run_asynchronously)
|
|
||||||
|
|
||||||
async def run(args):
|
|
||||||
async with BIGSdbIndex() as bigsdb_index:
|
|
||||||
gen_strings = read_multiple_fastas(args.fastas)
|
|
||||||
async with await bigsdb_index.build_profiler_from_seqdefdb(args.seqdefdb, args.schema) as mlst_profiler:
|
|
||||||
mlst_profiles = mlst_profiler.profile_multiple_strings(gen_strings, exact=args.exact)
|
|
||||||
failed = await write_mlst_profiles_as_csv(mlst_profiles, args.out)
|
|
||||||
if len(failed) > 0:
|
|
||||||
print(f"A total of {len(failed)} IDs failed:\n{"\n".join(failed)}")
|
|
||||||
print(f"Completed fetching MLSTs for {len(args.fastas)} sequences.")
|
|
||||||
|
|
||||||
def run_asynchronously(args):
|
|
||||||
asyncio.run(run(args))
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user