Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conda recipe #404

Merged
merged 4 commits into from
Dec 7, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions bin/cmat/cmat
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/usr/bin/env bash

# This is a wrapper around CMAT for packaging the Conda recipe, based largely on the
# ones in Andries Feder's Cladebreaker (https://github.com/andriesfeder/cladebreaker)
# and Robert A. Petit III's Bactopia (https://bactopia.github.io).

VERSION=3.0.6.dev3
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it worth moving the version to a text file and read that from both the setup.py and this wrapper script?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there's a chicken and egg problem, because this wrapper script uses the version to figure out where the shared files are, which presumably would include the separate text file...

Perhaps the conda build script could modify this wrapper to include the correct version number, but I'd have to think it through.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there not a better way to store the version, especially when there's also the {% set version = "3.0.6.dev3" %} at the meta.yaml file?
We end up having the same information in different places, no?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, right now the version is in 3 places, which is not great...

I think the version has to be in at least 2 places though, i.e. somewhere in this repo and in bioconda-recipes (which is what everything in the conda directory is reflecting).

I will try to get the setup.py and the wrapper script to use a single source though.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I managed to get this working with 2 sources of version without too much difficulty. I also created #406 for automating the conda release which I believe should let us have just 1 source of version, as the automated release would generate the meta.yaml file using the same VERSION file.

CONDA_ENV=$(which cmat | sed 's=bin/cmat==')
CMAT_NF="${CONDA_ENV}/share/cmat-${VERSION}/pipelines"
MAPPINGS_FILE="${CONDA_ENV}/share/cmat-${VERSION}/mappings/latest_mappings.tsv"

if [[ $# == 0 ]]; then
echo "ClinVar Mapping and Annotation Toolkit (cmat) - v${VERSION}"
echo ""
echo "Available commands (use --help to print usage):"
echo " * cmat annotate - Annotate ClinVar XML file"
echo " * cmat generate-curation - Generate term curation spreadsheet"
echo " * cmat export-curation - Export term curation spreadsheet"
echo ""
exit
fi

if [[ "$1" == "version" ]] || [[ "$1" == "--version" ]]; then
echo "cmat ${VERSION}"
exit
fi

# All other commands take an optional --mappings arg
# If not present, use the latest mappings file included with CMAT
MAPPINGS_ARG="--mappings ${MAPPINGS_FILE}"
if [[ "$*" == *"--mappings"* ]]; then
MAPPINGS_ARG=""
fi

if [[ "$1" == "annotate" ]]; then
nextflow run "${CMAT_NF}/annotation_pipeline.nf" "${@:1}" ${MAPPINGS_ARG}
elif [[ "$1" == "generate-curation" ]]; then
nextflow run "${CMAT_NF}/generate_curation_spreadsheet.nf" "${@:1}" ${MAPPINGS_ARG}
elif [[ "$1" == "export-curation" ]]; then
nextflow run "${CMAT_NF}/export_curation_spreadsheet.nf" "${@:1}" ${MAPPINGS_ARG}
fi
2 changes: 1 addition & 1 deletion cmat/consequence_prediction/common/biomart.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def process_biomart_request(query):
# If there was an HTTP error, raise an exception. This will be caught by @retry.
result.raise_for_status()
# Some errors from BioMart come back as 200 but with an error message in the content.
if result.text.lower().startswith('query error'):
if result.text.lower().startswith('query error') or result.text.lower().startswith('<html>'):
raise requests.exceptions.HTTPError(result.text)
return result.text

Expand Down
11 changes: 11 additions & 0 deletions conda/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash

$PYTHON -m pip install .

CMAT="${PREFIX}/share/${PKG_NAME}-${PKG_VERSION}"
mkdir -p ${PREFIX}/bin ${CMAT}

chmod 775 bin/cmat/*
cp bin/cmat/* ${PREFIX}/bin

mv bin/ mappings/ pipelines/ ${CMAT}
apriltuesday marked this conversation as resolved.
Show resolved Hide resolved
61 changes: 61 additions & 0 deletions conda/meta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{% set version = "3.0.6.dev3" %}

package:
name: cmat
version: {{ version }}

source:
url: https://github.com/EBIvariation/CMAT/archive/v{{version}}.tar.gz
sha256: 29bdeb28674486785c5f5825afa7d1237bd5dd2c76923145d68543f3a6bb5594

build:
number: 0
noarch: generic

requirements:
host:
- nextflow >=21.10
- python >=3.8,<3.10 # restriction from biopython
# From requirements.txt
- biopython==1.77
- coverage==6.5.0
- coveralls==3.3.1
- jsonschema==3.2.0
- numpy==1.24.3
- pandas==1.5.3
- pytest==7.2.2
- pytest-cov==2.10.0
- requests==2.31.0
- requests-mock==1.8.0
- retry==0.9.2
run:
- nextflow >=21.10.0
- python >=3.8,<3.10
- biopython==1.77
- coverage==6.5.0
- coveralls==3.3.1
- jsonschema==3.2.0
- numpy==1.24.3
- pandas==1.5.3
- pytest==7.2.2
- pytest-cov==2.10.0
- requests==2.31.0
- requests-mock==1.8.0
- retry==0.9.2
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure why these requirements have to be present in both host and run sections, but it's the only way I could get it to work...


test:
imports:
- cmat
commands:
- cmat
- cmat annotate --help

about:
home: https://github.com/EBIvariation/CMAT
summary: ClinVar Mapping and Annotation Toolkit
license: Apache-2.0
license_file: LICENSE

extra:
recipe-maintainers:
- apriltuesday
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def get_requires():
long_description = fh.read()

setup(name='cmat',
version='3.0.5',
version='3.0.6.dev3',
author_email='[email protected]',
url='https://github.com/EBIvariation/CMAT',
packages=find_packages(),
Expand Down
Loading