{ "info": { "author": "Chris T. Berthiaume", "author_email": "chrisbee@uw.edu", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: GNU General Public License v3 (GPLv3)" ], "description": "# Seaflowpy\n\nA Python package for SeaFlow flow cytometer data.\n\n## Install\n\nThis package is compatible with Python 3.7.\n\n### Command-line tool as single-file download\n\nSingle file executables of the `seaflowpy` command-line tool\nfor MacOS and Linux can be downloaded from the project's github\n[releases page](https://github.com/armbrustlab/seaflowpy/releases).\nThis is the recommended method if only the command-line tool is required.\n\n### Docker\n\nDocker image are available from Docker Hub at `ctberthiaume/seaflowpy`.\n\n```\ndocker run -it ctberthiaume/seaflowpy seaflowpy version\n```\n\nThe Docker build file is in this repo at `/Dockerfile`.\n\n### PyPI\n\n```\npip3 install seaflowpy\n```\n\n### Source\n\nThis will clone the repo and create a new virtual environment `seaflowpy`.\n`venv` can be replaced with `virtualenv`, `conda`, etc.\n\n```sh\ngit clone https://github.com/armbrustlab/seaflowpy\ncd seaflowpy\npython3 -m venv seaflowpy\nsource seaflowpy/bin/activate\npip3 install -r requirements.txt\npip3 install .\n# Confirm the seaflowpy command-line tool is accessible\nseaflowpy version\ndeactivate\n```\n\n## Configuration\n\nTo use `seaflowpy sfl manifest` AWS credentials need to be configured.\nThe easiest way to do this is to install the `awscli` Python package\nand go through configuration.\n\n```sh\npip3 install awscli\naws configure\n```\n\nThis will store AWS configuration in `~/.aws` which `seaflowpy` will use to\naccess Seaflow data in S3 storage.\n\n## Integration with R\n\nTo call `seaflowpy` from R, update the PATH environment variable in\n`~/.Renviron`. For example:\n\n```sh\nPATH=${PATH}:${HOME}/venvs/seaflowpy/bin\n```\n\n## Testing\n\nSeaflowpy uses `pytest` for testing. Tests can be run from this directory as\n`pytest` to test the installed version of the package, or run `tox` to install\nthe source into a temporary virtual environment for testing.\n\n## Command-line interface\n\nAll `seaflowpy` CLI tools are accessible from the `seaflowpy` executable.\nRun `seaflowpy --help` to begin exploring the CLI usage documentation.\n\n### SFL validation workflow\n\nSFL validation sub-commands are available under the `seaflowpy sfl` command.\nThe usage details for each command can be accessed as `seaflowpy sfl -h`.\n\nThe basic worfkflow should be\n\n1) If starting with an SDS file, first convert to SFL with `seaflowpy sds2sfl`\n\n2) If the SFL file is output from `sds2sfl` or is a raw SeaFlow SFL file,\nconvert it to a normalized format with `seaflowpy sfl print`.\nThis command can be used to concatenate multiple SFL files,\ne.g. merge all SFL files in day-of-year directories.\n\n3) Check for potential errors or warnings with `seaflowpy sfl validate`.\n\n4) Fix errors and warnings. Duplicate file errors can be fixed with `seaflowpy sfl dedup`.\nBad lat/lon errors may be fixed with`seaflowpy sfl convert-gga`,\nassuming the bad coordinates are GGA to begin with.\nThis can be checked with with `seaflowpy sfl detect-gga`.\nOther errors or missing values may need to be fixed manually.\n\n5) (Optional) Update event rates based on true event counts and file duration\nwith `seaflowpy sfl fix-event-rate`.\nTrue event counts for raw EVT files can be determined with `seaflowpy evt count`.\nIf filtering has already been performed then event counts can be pulled from\nthe `all_count` column of the opp table in the SQLITE3 database.\ne.g. `sqlite3 -separator $'\\t' SCOPE_14.db 'SELECT file, all_count ORDER BY file'`\n\n6) (Optional) As a check for dataset completeness,\nthe list of files in an SFL file can be compared to the actual EVT files present\nwith `seaflowpy sfl manifest`. It's normal for a few files to differ,\nespecially near midnight. If a large number of files are missing it may be a\nsign that the data transfer was incomplete or the SFL file is missing some days.\n\n7) Once all errors or warnings have been fixed, do a final `seaflowpy validate`\nbefore adding the SFL file to the appropriate repository.\n\n## Development\n\n### Source code structure\n\nThis project follows the [Git feature branch workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow).\nActive development happens on the `develop` branch and on feature branches which are eventually merged into `develop`.\nCommits on the `master` branch represent stable release snapshots with version tags and build products,\nmerged from `develop` with `--no-ff` to create a single commit in `master`\nwhile keeping the complete commit history in develop.\n\n### Build\n\nTo build source tarball, wheel, PyInstaller files, and Docker image, run `./build.sh`.\nThis will\n\n* create `dist` with source tarball and wheel file\n\n* executable files in `./pyinstaller/macos/dist/seaflowpy` and `./pyinstaller/linux64/dist/seaflowpy`\n\n* Docker image named `seaflowpy:`\n\nTo remove all build files, run `git clean -fd`.\n\nPyInstaller files and Docker image create depend on the wheel file located in `dist`.\n\n### Updating requirements files\n\nCreate a new virtual environment\n\n```sh\npython3 -m venv newenv\nsource newenv/bin/activate\n```\n\nAnd install `seaflowpy`\n\n```sh\npip3 install .\n```\n\nThen freeze the requirements\n\n```sh\npip3 freeze | grep -v seaflowpy >requirements.txt\n```\n\nThen install dev dependencies and freeze\n\n```sh\npip3 install pylint pytest pytest-benchmark tox twine\npip3 freeze | grep -v seaflowpy >requirements-dev.txt\n```\n\nDo some testing, then leave this temporary virtual environment\n\n```sh\ndeactivate\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/armbrustlab/seaflowpy", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "seaflowpy", "package_url": "https://pypi.org/project/seaflowpy/", "platform": "", "project_url": "https://pypi.org/project/seaflowpy/", "project_urls": { "Homepage": "https://github.com/armbrustlab/seaflowpy" }, "release_url": "https://pypi.org/project/seaflowpy/2.1.0/", "requires_dist": [ "boto3", "click", "pandas", "fabric3" ], "requires_python": "", "summary": "A Python library for SeaFlow data.", "version": "2.1.0" }, "last_serial": 5817407, "releases": { "0.14.0": [ { "comment_text": "", "digests": { "md5": "ed33d122d0f00031bce5d93f659c89ba", "sha256": "895e494d6898310c1da1ee6169b56098f93d15c6bd270679b71522754b6eb546" }, "downloads": -1, "filename": "seaflowpy-0.14.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ed33d122d0f00031bce5d93f659c89ba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54631, "upload_time": "2019-06-01T01:03:49", "url": "https://files.pythonhosted.org/packages/49/d5/4681ff405604b58af3bbc99cdcba74bb55067cd20ecc8eee4f8ac0c36a5c/seaflowpy-0.14.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3ef0f97fe8db8bd932c26bf6a311ee1", "sha256": "8b4b39bc2a54ce9bfb1a6703e0e59c23e621c2c9caff09e4a5a4557965766387" }, "downloads": -1, "filename": "seaflowpy-0.14.0.tar.gz", "has_sig": false, "md5_digest": "d3ef0f97fe8db8bd932c26bf6a311ee1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1300775, "upload_time": "2019-06-01T01:03:52", "url": "https://files.pythonhosted.org/packages/f4/34/57c2d44361af4da62952443b8e2e70987831e984f2f28f46a24507cdd930/seaflowpy-0.14.0.tar.gz" } ], "0.15.0": [ { "comment_text": "", "digests": { "md5": "bd20649422b493849657660492c62980", "sha256": "4d1d22e253587e78f1a65877b3c263790f24078b47e21394003371c7fe18ed6b" }, "downloads": -1, "filename": "seaflowpy-0.15.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bd20649422b493849657660492c62980", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58116, "upload_time": "2019-06-19T23:37:32", "url": "https://files.pythonhosted.org/packages/98/08/252e55e945cf10d5e2d13642709c6e22303fb3918d47eaf88f0ef00d633e/seaflowpy-0.15.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "731b677ccb85d50ffe953a9b7fae410a", "sha256": "01362c90e5d1618d20225e0f7a4a4b5be198ea4f96938c6fd72457374c220864" }, "downloads": -1, "filename": "seaflowpy-0.15.0.tar.gz", "has_sig": false, "md5_digest": "731b677ccb85d50ffe953a9b7fae410a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1304400, "upload_time": "2019-06-19T23:37:34", "url": "https://files.pythonhosted.org/packages/cc/1e/366d084464030cdad665281bffb4c4cca311f3d6184594d48e69c2a1f9fe/seaflowpy-0.15.0.tar.gz" } ], "0.15.1": [ { "comment_text": "", "digests": { "md5": "04178ed2de970f56a183c23c174265ef", "sha256": "db3ee457d67cdb39d876c762147ae6e40a25cc732a4dd69e8459d1519b8780e3" }, "downloads": -1, "filename": "seaflowpy-0.15.1-py3-none-any.whl", "has_sig": false, "md5_digest": "04178ed2de970f56a183c23c174265ef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58320, "upload_time": "2019-06-20T18:03:39", "url": "https://files.pythonhosted.org/packages/a5/58/2e2ff00be8c2cc88accef1061dc81205c488d10421de5424c82e45441487/seaflowpy-0.15.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd766041b09e13cd1ae8224dacc213ef", "sha256": "62a93194056df5f7cda2c7691fd83f630f72d55f7686f21f6f9185cffad1c435" }, "downloads": -1, "filename": "seaflowpy-0.15.1.tar.gz", "has_sig": false, "md5_digest": "dd766041b09e13cd1ae8224dacc213ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1304621, "upload_time": "2019-06-20T18:03:41", "url": "https://files.pythonhosted.org/packages/60/81/02cd1d78e4ee08c0fef2292a0287b52af31d61da4d100aa4aada537a8f20/seaflowpy-0.15.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "ee0b431e171c6ca0318ce736806fd359", "sha256": "3eaba85986f62663e136b84407f05c45557dddccedb338cf7b074997e5cea1c9" }, "downloads": -1, "filename": "seaflowpy-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ee0b431e171c6ca0318ce736806fd359", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 60680, "upload_time": "2019-08-07T20:43:42", "url": "https://files.pythonhosted.org/packages/af/b7/e1837f4ef3fe5f325ccaf33f65aae574b1dc345dc73929eb2b20c5f344f3/seaflowpy-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "85f64ef32a02b14e5e277c028f37cd8f", "sha256": "4388cb2b133d2ae0acb63732065357dfdb6fb1f5f6d7ae74495976da698a28cf" }, "downloads": -1, "filename": "seaflowpy-1.0.0.tar.gz", "has_sig": false, "md5_digest": "85f64ef32a02b14e5e277c028f37cd8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1306666, "upload_time": "2019-08-07T20:43:44", "url": "https://files.pythonhosted.org/packages/c1/0d/163bc18cd3f1a13a68eb3788f04965a08d1a08966a6f7f855c04e411b4da/seaflowpy-1.0.0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "dd89080f8404315452016312baa08132", "sha256": "5f265cc53051e8f06ba5572b130707762d8454423884dc399377d4f82af35bef" }, "downloads": -1, "filename": "seaflowpy-2.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "dd89080f8404315452016312baa08132", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 61067, "upload_time": "2019-09-11T23:16:25", "url": "https://files.pythonhosted.org/packages/43/af/aff4dfd8ea3789e411eae12a7f1899977a4699cc7a4753709d796096c7cf/seaflowpy-2.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7f280ca6aa0952d497c2d673b25ee9ae", "sha256": "3e57913d20445e75ac9f02593a5e63ab37f80d667a8c24d8208196ca17917f2d" }, "downloads": -1, "filename": "seaflowpy-2.1.0.tar.gz", "has_sig": false, "md5_digest": "7f280ca6aa0952d497c2d673b25ee9ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1307281, "upload_time": "2019-09-11T23:16:27", "url": "https://files.pythonhosted.org/packages/e9/9c/d057f98960ec090de7f59debe25e0ec1494f2ad2ff6e19b3e09987c86824/seaflowpy-2.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "dd89080f8404315452016312baa08132", "sha256": "5f265cc53051e8f06ba5572b130707762d8454423884dc399377d4f82af35bef" }, "downloads": -1, "filename": "seaflowpy-2.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "dd89080f8404315452016312baa08132", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 61067, "upload_time": "2019-09-11T23:16:25", "url": "https://files.pythonhosted.org/packages/43/af/aff4dfd8ea3789e411eae12a7f1899977a4699cc7a4753709d796096c7cf/seaflowpy-2.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7f280ca6aa0952d497c2d673b25ee9ae", "sha256": "3e57913d20445e75ac9f02593a5e63ab37f80d667a8c24d8208196ca17917f2d" }, "downloads": -1, "filename": "seaflowpy-2.1.0.tar.gz", "has_sig": false, "md5_digest": "7f280ca6aa0952d497c2d673b25ee9ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1307281, "upload_time": "2019-09-11T23:16:27", "url": "https://files.pythonhosted.org/packages/e9/9c/d057f98960ec090de7f59debe25e0ec1494f2ad2ff6e19b3e09987c86824/seaflowpy-2.1.0.tar.gz" } ] }