Skip to content

Commit

Permalink
Merge pull request #36 from vinisalazar/dev
Browse files Browse the repository at this point in the history
Merge v0.1.19
  • Loading branch information
vinisalazar committed Nov 10, 2020
2 parents e2121c3 + 111c0db commit bf4fca7
Show file tree
Hide file tree
Showing 32 changed files with 559 additions and 322 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,6 +1,7 @@
# BioProv
bioprov/db.json
bioprov/provstore_api.txt
**/*.log

# Byte-compiled / optimized / DLL files
__pycache__/
Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Expand Up @@ -7,6 +7,21 @@
* .describe []
* .write_paths_to_file, .copy_files_to_dir(), .link_files_to_dir()

### v0.1.19
* Debug API endpoint (#23) [x]
* Implement logging [x]
* Implement Workflow logging [x]
* Debug Workflow Steps [x]
* Remove workflow main methods [x]
* Workflows must now be called only from the CLI [x]
* Implement post-workflow actions [x]
* Update db [x]
* Upload to ProvStore [x]
* Write PROVN [x]
* Write PDF [x]
* Add Sample.auto_update_db() methods [x]
* Remove logger call when updating Project in database [x]

### v0.1.18a
* Patch file deserializer bug [x]

Expand Down
2 changes: 1 addition & 1 deletion bioprov/__init__.py
Expand Up @@ -2,7 +2,7 @@
__license__ = "MIT"
__maintainer__ = "Vini Salazar"
__url__ = "https://github.com/vinisalazar/bioprov"
__version__ = "0.1.18a"
__version__ = "0.1.19"


"""
Expand Down
2 changes: 1 addition & 1 deletion bioprov/bioprov
Expand Up @@ -3,7 +3,7 @@ __author__ = "Vini Salazar"
__license__ = "MIT"
__maintainer__ = "Vini Salazar"
__url__ = "https://github.com/vinisalazar/bioprov"
__version__ = "0.1.18a"
__version__ = "0.1.19"

"""
Executable that goes in $PATH. Code for the command-line is on the bioprov.py module.
Expand Down
9 changes: 5 additions & 4 deletions bioprov/bioprov.py
Expand Up @@ -2,24 +2,25 @@
__license__ = "MIT"
__maintainer__ = "Vini Salazar"
__url__ = "https://github.com/vinisalazar/bioprov"
__version__ = "0.1.18a"
__version__ = "0.1.19"

"""
BioProv command-line application. This module holds the main executable.
"""

import argparse
import sys
from pathlib import Path

import bioprov.src.config as bp_config_module
from bioprov.src.config import config
from bioprov.utils import parser_help, dict_to_string
from bioprov.workflows import (
WorkflowOptionsParser,
genome_annotation,
blastn_alignment,
KaijuWorkflow,
)
from bioprov.utils import parser_help, dict_to_string
from pathlib import Path


def main(args=None):
Expand Down Expand Up @@ -90,7 +91,7 @@ def main(args=None):
try:
parser.parse_options(args) # no cover
except KeyError:
parser_help(bioprov_parser)
raise


class CommandOptionsParser:
Expand Down
2 changes: 1 addition & 1 deletion bioprov/data/__init__.py
Expand Up @@ -2,7 +2,7 @@
__license__ = "MIT"
__maintainer__ = "Vini Salazar"
__url__ = "https://github.com/vinisalazar/bioprov"
__version__ = "0.1.18a"
__version__ = "0.1.19"


"""
Expand Down
1 change: 1 addition & 0 deletions bioprov/data/datasets/genome_annotation_input.tsv
@@ -1,2 +1,3 @@
sample-id assembly
GCF_000010065.1_ASM1006v1_genomic.fna bioprov/data/genomes/GCF_000010065.1_ASM1006v1_genomic.fna
GCF_000007925.1_ASM792v1_genomic.fna bioprov/data/genomes/GCF_000007925.1_ASM792v1_genomic.fna
2 changes: 1 addition & 1 deletion bioprov/programs/__init__.py
Expand Up @@ -2,7 +2,7 @@
__license__ = "MIT"
__maintainer__ = "Vini Salazar"
__url__ = "https://github.com/vinisalazar/bioprov"
__version__ = "0.1.18a"
__version__ = "0.1.19"


from .programs import prodigal, diamond, blastn, blastp, prokka, kaiju, kaiju2table
21 changes: 12 additions & 9 deletions bioprov/programs/programs.py
Expand Up @@ -2,13 +2,15 @@
__license__ = "MIT"
__maintainer__ = "Vini Salazar"
__url__ = "https://github.com/vinisalazar/bioprov"
__version__ = "0.1.18a"
__version__ = "0.1.19"


"""
Module for holding preset instances of the Program class.
Module for holding preset instances of the Program class.
"""

import logging
from os import path
from pathlib import Path

Expand Down Expand Up @@ -117,8 +119,8 @@ def blastp(sample, db, query_tag="query", outformat=6):
:param Sample sample: Instance of BioProv.Sample.
:param str db: A string pointing to the reference database directory and title.
:param str query_tag: A tag for the query file.
:param int outformat: The output format to gather from blastn.
:return: Instance of PresetProgram for BLASTN.
:param int outformat: The output format to gather from blastp.
:return: Instance of PresetProgram for BLASTP.
:rtype: BioProv.PresetProgram.
:raises AssertionError: Path to the reference database does not exist.
"""
Expand Down Expand Up @@ -192,10 +194,12 @@ def prokka(
)

for param in params:
_prokka.add_parameter(param, _print=False)
_prokka.add_parameter(param)

if path.isdir(output_path):
print(f"Warning: {output_path} directory exists. Will overwrite.") # no cover
config.logger.warning(
f"Warning: {output_path} directory exists. Will overwrite."
) # no cover
_prokka.add_parameter(
Parameter(key="--force", value="", kind="misc")
) # no cover
Expand Down Expand Up @@ -223,8 +227,7 @@ def prokka(

# Input goes here, must be last positionally.
_prokka.add_parameter(
Parameter(key="", value=str(_sample.files[assembly]), kind="input"),
_print=False,
Parameter(key="", value=str(_sample.files[assembly]), kind="input")
)

return _prokka
Expand Down Expand Up @@ -274,7 +277,7 @@ def kaiju(
Parameter(key="-o", value=output_path, kind="output"),
)
for p in params:
kaiju_.add_parameter(p, _print=False)
kaiju_.add_parameter(p)

if add_param_str:
kaiju_.cmd += f" {add_param_str}" # no cover
Expand Down Expand Up @@ -324,7 +327,7 @@ def kaiju2table(
)

for p in params:
kaiju2table_.add_parameter(p, _print=False)
kaiju2table_.add_parameter(p)

# Add final parameter:
kaiju2table_.cmd += f" {str(_sample.files[kaiju_output])}"
Expand Down
2 changes: 1 addition & 1 deletion bioprov/src/__init__.py
Expand Up @@ -2,7 +2,7 @@
__license__ = "MIT"
__maintainer__ = "Vini Salazar"
__url__ = "https://github.com/vinisalazar/bioprov"
__version__ = "0.1.18a"
__version__ = "0.1.19"


"""
Expand Down
33 changes: 23 additions & 10 deletions bioprov/src/config.py
Expand Up @@ -2,7 +2,7 @@
__license__ = "MIT"
__maintainer__ = "Vini Salazar"
__url__ = "https://github.com/vinisalazar/bioprov"
__version__ = "0.1.18a"
__version__ = "0.1.19"


"""
Expand All @@ -12,13 +12,15 @@
"""

import os
import bioprov
from bioprov.data import data_dir, genomes_dir
from pathlib import Path

from prov.model import Namespace
from provstore.api import Api
from bioprov.utils import serializer, dict_to_sha1, serializer_filter
from tinydb import TinyDB
from pathlib import Path

from bioprov import __file__ as bp_file
from bioprov.data import data_dir, genomes_dir
from bioprov.utils import serializer, dict_to_sha1, serializer_filter, create_logger


class Config:
Expand All @@ -40,7 +42,7 @@ def __init__(self, db_path=None, threads=0):
self.db = None
self.db_path = None
self.threads = threads
self.bioprov_dir = Path(bioprov.__file__).parent
self.bioprov_dir = Path(bp_file).parent
self.data = data_dir
self.genomes = genomes_dir
if db_path is None:
Expand All @@ -52,6 +54,7 @@ def __init__(self, db_path=None, threads=0):
self._provstore_token = None
self._provstore_api = None
self._provstore_endpoint = "https://openprovenance.org/store/api/v0/"
self._logger = None

def __repr__(self):
return f"BioProv Config class set in {__file__}"
Expand All @@ -76,7 +79,7 @@ def provstore_api(self):
self._provstore_api = Api(
username=self.provstore_user, api_key=self.provstore_token
)
Api.base_url = self._provstore_endpoint
self._provstore_api.base_url = self._provstore_endpoint
return self._provstore_api

@provstore_api.setter
Expand Down Expand Up @@ -113,12 +116,22 @@ def provstore_token(self): # no cover
def provstore_token(self, value):
self._provstore_token = value

def create_provstore_file(self, user=None, token=None):
@property
def logger(self):
if self._logger is None:
self._logger = create_logger()
return self._logger

@logger.setter
def logger(self, value):
self._logger = value

def create_provstore_file(self, user=None, token=None): # no cover
with open(self.provstore_file, "w") as f:
if user is None:
user = input("Please paste your ProvStore user: ") # no cover
user = input("Please paste your ProvStore user: ")
if token is None:
token = input("Please paste your ProvStore API token: ") # no cover
token = input("Please paste your ProvStore API token: ")
f.write(user + "\n")
f.write(token + "\n")

Expand Down
21 changes: 12 additions & 9 deletions bioprov/src/files.py
Expand Up @@ -2,17 +2,20 @@
__license__ = "MIT"
__maintainer__ = "Vini Salazar"
__url__ = "https://github.com/vinisalazar/bioprov"
__version__ = "0.1.18a"
__version__ = "0.1.19"


"""
Contains the File and SeqFile classes and related functions.
"""

import numpy as np
import logging
from dataclasses import dataclass
from pathlib import Path

import numpy as np
from Bio import SeqIO, AlignIO

from bioprov.utils import (
get_size,
Warnings,
Expand Down Expand Up @@ -113,12 +116,12 @@ def replace_path(self, old_terms, new, warnings=False):
# TODO: replace these print statements for logger warning/debug level
if warnings:
if not self.exists and old_exists:
print(
f"Warning: file {self.path} was marked as existing but was not found."
logging.warning(
f"File {self.path} was marked as existing but was not found."
)
if old_hash and self.sha1 != old_hash and self.exists: # no cover
print(
f"Warning: file {self.path} previous sha1 checksum differs from the current."
logging.warning(
f"File {self.path} previous sha1 checksum differs from the current."
)

def serializer(self):
Expand Down Expand Up @@ -159,7 +162,7 @@ def replace_path(self, old_terms, new, warnings=False):
# TODO: replace these print statements for logger warning/debug level
if warnings:
if not self.exists and old_exists:
print(
logging.warning(
f"Warning: file {self.path} was marked as existing but was not found."
)

Expand Down Expand Up @@ -448,8 +451,8 @@ def seqrecordgenerator(path, format, parser="seq", warnings=False):
return records
except FileNotFoundError:
if warnings:
print(Warnings()["not_exist"](path))
print(
logging.warning(Warnings()["not_exist"](path))
logging.warning(
"The file was loaded as a BioProv object, but it does not exist on the specified path."
)
return None
Expand Down

0 comments on commit bf4fca7

Please sign in to comment.