Skip to content
Snippets Groups Projects
Commit ee23cbb6 authored by Mate Balajti's avatar Mate Balajti
Browse files

feat: add CI and logging

parent b5eb326f
No related branches found
No related tags found
1 merge request!46feat: add CI and logging
Pipeline #17313 passed
Showing
with 143 additions and 130 deletions
default: # Set default
tags:
- docker
image: python:3.10-slim-buster
stages: # List of stages for jobs, and their order of execution
- build
- test
build-job: # This job runs in the build stage, which runs first.
stage: build
script:
- pip install -r requirements.txt
- pip install -r requirements_dev.txt
- pip install .
# unit-test-job: # This job runs in the test stage.
# stage: test # It only starts when the job in the build stage completes successfully.
# script:
# - pip install -r requirements.txt
# - pip install -r requirements_dev.txt
# - pip install .
# - coverage run --source primingsitepredictor -m pytest
# - coverage report -m
lint-test-job: # This job also runs in the test stage.
stage: test # It can run at the same time as unit-test-job (in parallel).
script:
- pip install -r requirements.txt
- pip install -r requirements_dev.txt
- pip install .
- flake8 --docstring-convention google primingsitepredictor/ # tests/
- pylint primingsitepredictor/ # tests/
- mypy primingsitepredictor/
File deleted
File deleted
File deleted
pepe
img/Images_Robin/IntroductionSeq.png

18.9 KiB

img/Images_Robin/Markdown.png

107 KiB

img/Images_Robin/Push&Pull -- GitRemotes!.png

21.6 KiB

# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (tests)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/primingsitepredictor.iml" filepath="$PROJECT_DIR$/.idea/primingsitepredictor.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>
\ No newline at end of file
<primer1
TTTTTTTTTTTTTTT
"""Initialize package."""
# -*- coding: utf-8 -*- """Receive command line arguments."""
"""
Changed on Fr Dec 23 16:49:50 2022
@author: RobinC
"""
import argparse import argparse
import logging import logging
import main from primingsitepredictor.prime_site_predictor import CreatePrimer
from primingsitepredictor.prime_site_predictor import PrimingSitePredictor
class CLI():
def create_parser(self): LOG = logging.getLogger(__name__)
"""This function creates the parser"""
parser = argparse.ArgumentParser( def main():
prog = 'PrimingSitePredictor', """Use CLI arguments to predict priming sites."""
description = 'Takes a cutoff energy and the predicts location of priming sites of transcripts', args = parse_args()
epilog = 'To predict or not to predict') setup_logging()
parser.add_argument('--float', type=float, required=True, help='A energy-cutoff float number') LOG.info("Starting Priming Site Predictor...")
parsed_args = parser.parse_args()
energy_cutoff = parsed_args.float if args.primer_sequence is None:
return energy_cutoff primer = CreatePrimer().create_fasta()
args.primer_sequence = primer
def letsgo(self):
"""This function creates a parser and prints the energycutoff""" predicted_sites = PrimingSitePredictor(
energy_cutoff = CLI.create_parser() args.fasta_file, args.primer_sequence, args.energy_cutoff,
print(f"Your energy cutoff is {energy_cutoff}") args.riblast_output, args.output_filename
)
if __name__ == '__main__':
predicted_sites.generate_gtf()
LOG.info("Priming Site Predictor finished.")
def setup_logging() -> None:
"""Configure logging.
Args:
verbosity: Level of logging verbosity.
"""
logging.basicConfig( logging.basicConfig(
format='[%(asctime)s: %(levelname)s] %(message)s (module "%(module)s")', format='[%(asctime)s: %(levelname)s] %(message)s \
(module "%(module)s")',
level=logging.INFO, level=logging.INFO,
)
def parse_args():
"""Parse arguments for CLI."""
parser = argparse.ArgumentParser(
description="Compute potential priming sites using RIBlast."
)
parser.add_argument(
"-f", "--fasta-file",
help="Fasta-formatted file of transcript sequences"
)
parser.add_argument(
"-p", "--primer-sequence", default=None,
help="Primer sequence"
) )
LOG = logging.getLogger(__name__) parser.add_argument(
"-e", "--energy-cutoff", type=float,
help="Energy cutoff for interactions"
)
parser.add_argument(
"-r", "--riblast-output",
help="Path to RIBlast output file"
)
parser.add_argument(
"-o", "--output-filename",
help="Path where the output gtf should be written"
)
args = parser.parse_args()
return args
if __name__ == "__main__":
main() main()
# def main():
# """Execute generate_RIBlast."""
# generate_riblast_input()
# def generate_riblast_input():
# """Create a list of the filenames for the RIBlast."""
# my_primer = CreatePrimer()
# my_primer.create_fasta()
# primer_filename = my_primer.name + ".fasta"
# transcripts_filename = "transcripts.fasta"
# return [primer_filename, transcripts_filename]
# def create_gtf():
# """Create gtf."""
# gtf_file = PostProcessRIBlast().output
# print(gtf_file)
# def create_parser():
# """Create a parser."""
# parser = argparse.ArgumentParser(
# prog='PrimingSitePredictor',
# description='Takes a cutoff energy and the predicts \
# location of priming sites of transcripts',
# epilog='To predict or not to predict')
# parser.add_argument('--float', type=float, required=True,
# help='An energy-cutoff float number')
# parsed_args = parser.parse_args()
# energy_cutoff = parsed_args.float
# return energy_cutoff
# def letsgo():
# """Create a parser and print the energycutoff."""
# energy_cutoff = create_parser()
# print(f"Your energy cutoff is {energy_cutoff}")
# -*- coding: utf-8 -*-
"""
Changed on Fr Dec 23 14:34:20 2022
@author: RobinC
"""
class CreatePrimer:
"""This Class creates an instance of a primer of a desired length and primer name
which can be saved as a fasta file. By default the length is 15 and name is primer1"""
def __init__(self, name='primer1', primerlength=15):
self.name = name
self.primer_length = primerlength
self.primer_sequence = 'T'*self.primer_length
self.lines = [f'<{self.name}', self.primer_sequence]
def create_fasta(self):
with open(f'{self.name}.fasta', 'w') as f:
for line in self.lines:
f.write(line)
f.write('\n')
"""
Changed on Tue Dec 20 14:06:20 2022
@author: RobinC
"""
import sys
from createprimer import CreatePrimer
from postprocessing import PostProcessRIBlast
def main():
generate_RIBlast_input()
def generate_RIBlast_input():
"""This function creates a list of the filenames for the RIBlast"""
my_primer = CreatePrimer()
my_primer.create_fasta()
primer_filename = my_primer.name +".fasta"
transcripts_filename = "transcripts.fasta"
return [primer_filename, transcripts_filename]
def create_gtf():
gtf_file = PostProcessRIBlast().output
print(gtf_file)
if __name__ == '__main__':
main()
<my_primer
TTTTTTTTTTTTTTTTTTTT
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment