Compare commits

..

18 Commits

Author SHA1 Message Date
f08e4c7d35 Pipeline will not fail if version is the same.
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
2024-07-21 04:03:36 +00:00
2f49699a23 Loosened version requirements for twine.
Some checks reported errors
ydeng/splitmsa/pipeline/head Something is wrong with the build of this commit
2024-07-21 04:01:36 +00:00
9d97ee6244 Added some extensions for the devcontainer.
Some checks failed
ydeng/splitmsa/pipeline/head There was a failure building this commit
2024-07-21 02:54:01 +00:00
bfeec68756 Added devcontainer to pipeline. 2024-07-21 02:52:25 +00:00
ba4a532784 Bumped package version
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
2023-04-24 16:23:02 -05:00
b047b6f8fc Added archiving stage to 'Jenkinsfile'
Some checks failed
ydeng/splitmsa/pipeline/head There was a failure building this commit
2023-04-24 09:42:10 -05:00
d1b3993011 Changed package version
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
2023-04-24 09:35:31 -05:00
ad8fe00479 Fixed 'Jenkinsfile'
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
2023-04-24 09:32:25 -05:00
df132814c8 Added installation test step 2023-04-24 09:25:48 -05:00
9b56853e36 Added '__init__.py'
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
2023-04-21 13:58:28 -05:00
0cc3539280 Added clean stage to 'Jenkinsfile'.
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
2023-04-20 15:47:52 -05:00
2c38d7d172 Bumped version number
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
2023-04-20 15:45:16 -05:00
3ca07feade Deleted 'requirements.txt' and updated 'setup.cfg'
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
Wrong package name given in 'setup.cfg' is now fixed.
2023-04-20 15:42:43 -05:00
cf9df14fce Removed "Gooey" as dependency and fixed "setup.cfg"
Some checks failed
ydeng/splitmsa/pipeline/head There was a failure building this commit
2023-04-20 15:39:20 -05:00
8b379198ec Prepping for implementation of quick and dirty GUI
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
2023-04-11 16:13:07 -05:00
43758c45f8 Changed Jenkins pipeline to use mamba
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
2023-04-11 13:00:04 -05:00
f74fea0b24 Updated development environment to include build tools
All checks were successful
ydeng/splitmsa/pipeline/head This commit looks good
2023-04-11 12:58:38 -05:00
eccb08153e Renamed project to "SplitMSA" and added pipeline file
Some checks failed
ydeng/splitmsa/pipeline/head There was a failure building this commit
2023-04-11 12:39:04 -05:00
14 changed files with 135 additions and 59 deletions

11
.devcontainer/Dockerfile Normal file
View File

@@ -0,0 +1,11 @@
FROM mcr.microsoft.com/devcontainers/anaconda:1-3
# Copy environment.yml (if found) to a temp location so we update the environment. Also
# copy "noop.txt" so the COPY instruction does not fail if no environment.yml exists.
COPY environment.yml* .devcontainer/noop.txt /tmp/conda-tmp/
RUN if [ -f "/tmp/conda-tmp/environment.yml" ]; then umask 0002 && /opt/conda/bin/conda env update -n base -f /tmp/conda-tmp/environment.yml; fi \
&& rm -rf /tmp/conda-tmp
# [Optional] Uncomment this section to install additional OS packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
# && apt-get -y install --no-install-recommends <your-package-list-here>

View File

@@ -0,0 +1,35 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/anaconda
{
"name": "Anaconda (Python 3)",
"build": {
"context": "..",
"dockerfile": "Dockerfile"
},
"customizations": {
"vscode": {
"extensions": [
"ms-python.debugpy",
"ms-python.python",
"ms-python.vscode-pylance",
"ms-python.black-formatter",
"ms-python.flake8"
]
}
}
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "python --version",
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}

3
.devcontainer/noop.txt Normal file
View File

@@ -0,0 +1,3 @@
This file copied into the container along with environment.yml* from the parent
folder. This file is included to prevents the Dockerfile COPY instruction from
failing if no environment.yml is found.

9
.vscode/launch.json vendored
View File

@@ -8,15 +8,16 @@
"name": "Splitter Single Gene with Translation", "name": "Splitter Single Gene with Translation",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/msa_splitter.py", "program": "${workspaceFolder}/splitmsa/splitmsa.py",
"args": [ "args": [
"${workspaceFolder}/tests/resources/test_msa-shortened.fa", "${workspaceFolder}/tests/resources/test_msa-shortened.fa",
"--gene-list", "${workspaceFolder}/tests/resources/gene_list.csv", "--gene-list",
"${workspaceFolder}/tests/resources/gene_list.csv",
"-C", "-C",
"-E", "DEBUG", "-E",
"DEBUG",
"--do-translate", "--do-translate",
"--gen-cut-stop-codon" "--gen-cut-stop-codon"
], ],
"console": "integratedTerminal", "console": "integratedTerminal",
"justMyCode": true "justMyCode": true

42
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,42 @@
pipeline {
agent {
kubernetes {
cloud 'Reslate Systems'
defaultContainer 'conda'
}
}
stages {
stage("install") {
steps {
sh 'conda update conda -y -q'
sh 'conda env update -n base --file environment.yml'
}
}
stage("build") {
steps {
sh "conda run -n base python -m build"
}
}
stage("test") {
steps {
sh "conda run -n base pip install dist/*.whl"
sh "conda run -n base splitmsa -h"
}
}
stage("archive") {
steps {
archiveArtifacts artifacts: 'dist/*.tar.gz, dist/*.whl'
}
}
stage("publish") {
when {
branch '**/master'
}
steps {
withCredentials([usernamePassword(credentialsId: 'rs-git-package-registry-ydeng', passwordVariable: 'PASS', usernameVariable: 'USER')]) {
sh returnStatus: true, script: 'conda run -n base python -m twine upload --repository-url https://git.reslate.systems/api/packages/${USER}/pypi -u ${USER} -p ${PASS} --non-interactive --disable-progress-bar --verbose dist/*'
}
}
}
}
}

View File

@@ -1,4 +1,4 @@
# MSA Splitter # SplitMSA
Simple FASTA file splitter. Capable of batch trimming a large amount of sequences in the form of a MSA in a FASTA file. Simple FASTA file splitter. Capable of batch trimming a large amount of sequences in the form of a MSA in a FASTA file.

View File

@@ -1,46 +0,0 @@
name: /home/ydeng/msa-splitter/envs
channels:
- conda-forge
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_gnu
- biopython=1.81=py311h2582759_0
- black=23.3.0=py311h38be061_0
- bzip2=1.0.8=h7f98852_4
- ca-certificates=2022.12.7=ha878542_0
- click=8.1.3=unix_pyhd8ed1ab_2
- ld_impl_linux-64=2.40=h41732ed_0
- libblas=3.9.0=16_linux64_openblas
- libcblas=3.9.0=16_linux64_openblas
- libexpat=2.5.0=hcb278e6_1
- libffi=3.4.2=h7f98852_5
- libgcc-ng=12.2.0=h65d4601_19
- libgfortran-ng=12.2.0=h69a702a_19
- libgfortran5=12.2.0=h337968e_19
- libgomp=12.2.0=h65d4601_19
- liblapack=3.9.0=16_linux64_openblas
- libnsl=2.0.0=h7f98852_0
- libopenblas=0.3.21=pthreads_h78a6416_3
- libsqlite=3.40.0=h753d276_0
- libstdcxx-ng=12.2.0=h46fd767_19
- libuuid=2.38.1=h0b41bf4_0
- libzlib=1.2.13=h166bdaf_4
- mypy_extensions=1.0.0=pyha770c72_0
- ncurses=6.3=h27087fc_1
- numpy=1.24.2=py311h8e6699e_0
- openssl=3.1.0=h0b41bf4_0
- packaging=23.0=pyhd8ed1ab_0
- pathspec=0.11.1=pyhd8ed1ab_0
- pip=23.0.1=pyhd8ed1ab_0
- platformdirs=3.2.0=pyhd8ed1ab_0
- python=3.11.1=h2755cc3_0_cpython
- python_abi=3.11=3_cp311
- readline=8.2=h8228510_1
- setuptools=67.6.1=pyhd8ed1ab_0
- tk=8.6.12=h27826a3_0
- typing-extensions=4.5.0=hd8ed1ab_0
- typing_extensions=4.5.0=pyha770c72_0
- tzdata=2023c=h71feb2d_0
- wheel=0.40.0=pyhd8ed1ab_0
- xz=5.2.6=h166bdaf_0
prefix: /home/ydeng/msa-splitter/envs

9
environment.yml Normal file
View File

@@ -0,0 +1,9 @@
name: splitmsa
channels:
- conda-forge
dependencies:
- build=0.7.0
- pytest=7.2.2
- twine
- biopython=1.81
- python=3.9

3
pyproject.toml Normal file
View File

@@ -0,0 +1,3 @@
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]

View File

@@ -1 +0,0 @@
Bio==1.5.6

12
setup.cfg Normal file
View File

@@ -0,0 +1,12 @@
[metadata]
name = splitmsa
version = 0.0.4
[options]
packages = splitmsa
install_requires =
biopython ==1.81; python_version == "3.9"
[options.entry_points]
console_scripts =
splitmsa = splitmsa.splitmsa:main

3
setup.py Normal file
View File

@@ -0,0 +1,3 @@
from setuptools import setup
setup()

0
splitmsa/__init__.py Normal file
View File

View File

@@ -203,7 +203,7 @@ def trim(
) )
if perform_translation and not skip_translation: if perform_translation and not skip_translation:
if '-' in nt_sequence: if "-" in nt_sequence:
sequence_with_ambiguity = [] sequence_with_ambiguity = []
for codon_in_sequence in range(0, len(nt_sequence), 3): for codon_in_sequence in range(0, len(nt_sequence), 3):
codon = nt_sequence[codon_in_sequence : codon_in_sequence + 3] codon = nt_sequence[codon_in_sequence : codon_in_sequence + 3]
@@ -247,9 +247,7 @@ def output_as_csv(gene: str, problems: list[list[str]], output_path: str):
writer.writerows(problems) writer.writerows(problems)
def main(args): def run(args):
logging.basicConfig(level=args.log_level.upper())
msa_records = list(read_msa_file(args.input)) msa_records = list(read_msa_file(args.input))
info(f"MSA records read complete. Found {len(msa_records)} records.") info(f"MSA records read complete. Found {len(msa_records)} records.")
genes = [] genes = []
@@ -310,9 +308,9 @@ def main(args):
info(f"Completed gene {gene_name} ({start} - {end})") info(f"Completed gene {gene_name} ({start} - {end})")
if __name__ == "__main__": def main():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
prog="msa_splitter", prog="splitmsa",
description=""" description="""
The MSA splitter is a simple program that takes in two positions The MSA splitter is a simple program that takes in two positions
and a MSA file and produces two separate FASTA files and a MSA file and produces two separate FASTA files
@@ -453,4 +451,10 @@ if __name__ == "__main__":
action="store_true", action="store_true",
) )
main(parser.parse_args()) args = parser.parse_args()
logging.basicConfig(level=args.log_level.upper())
run(args)
if __name__ == "__main__":
main()