{ "info": { "author": "FNNDSC Developers", "author_email": "dev@babymri.com", "bugtrack_url": null, "classifiers": [], "description": "####################################\npypx - 1.0.0.0\n####################################\n\n.. image:: https://badge.fury.io/py/pypx.svg\n :target: https://badge.fury.io/py/pypx\n\n.. image:: https://travis-ci.org/FNNDSC/pypx.svg?branch=master\n :target: https://travis-ci.org/FNNDSC/pypx\n\n.. image:: https://img.shields.io/badge/python-3.5%2B-blue.svg\n :target: https://badge.fury.io/py/pypx\n\n.. contents:: Table of Contents\n\n1. Overview\n*****************\n\n``pypx`` is a *complete* client-side PACS (Picture Archive and Communications System) Query/Retrieve/Storage solution that operates in stand-alone script mode in addition to providing a set of python modules for use in other packages. The modules/API provide a simple mechanism for a python program to interact with an appropriately configured remote PACS, while the stand alone scripts offer a convenient ability to directly Query/Retrieve/Storge images from the command line.\n\n``pypx`` was mostly developed for use in the ChRIS system as part of the ``pfdcm`` microservice; however the CLI scripts of ``pypx`` and the provided docker image offer a quick and powerful means of accessing a PACS without any additional overhead.\n\n1.1 Complete **Client** Side\n============================\n\nThis solution is **client**-side and cannot operate fully independently of an appropriately configured PACS. Having said that, in the dockerized mode (either by building a local container or using the container provided on dockerhub (``fnndsc/pypx``) all the necessary infrastructure is provided to listen for and store incoming image data. Some minor post configuration might however be required.\n\n1.1.1 Quick PACS Primer\n-----------------------\n\nA PACS exists as a separate service on a network, and ``pypx`` communicates with a pre-configured PACS when asking for Query data and when Retrieving images. Importantly, from the client perspective, data is **PUSHED** from the PACS, and not **PULLED** from the client. This means that client software in essence \"asks\" the PACS for images and the PACS obliges by transmitting the images over the network to a pre-configured location.\n\nCommunications with a PACS are for the most insecure and reflected a circa 1990s view/model of internetworking. When a client communicates with a PACS, it sends along with every request string identifiers unique to the client and configured in the PACS. Typical identifiers are the ``AETitle`` and sometimes additionally the ``CalledAETitle``. The PACS examines these strings on receipt to identify/authenticate the client and also to identify a destination network ``IP:port`` to which data can be transmitted.\n\n1.1.2 Configuring a PACS\n-------------------------\n\nIn order to be fully complete, a destination PACS with which ``pypx`` modules wish to communicate needs to be configured with appropriate ``AETitle``, ``CalledAETitle``, as well as the network address IP and port of the ``pypx`` hosting machine. Configuring a PACS is obviously outside of the scope of this documentation. Consult your PACS for information on this configuration.\n\n1.1.3 Configuring ``pypx``\n---------------------------\n\nLocally, however, some configuration is required and conveniently located in the script ``PACS_QR.sh``. In the \n\n.. code-block:: bash\n\n function institution_set\n {\n ...\n }\n\nsimply add another block reflecting the variables appropriate to your remote PACS service. \n\n1.2 Components\n==============\n\nInternally, the code wraps around DCMTK utilies as well as the PyDicom module. The following modules/scripts are provided:\n\n- px-echo_: Ping the PACS to make sure it is online (``echoscu``).\n\n- px-find_: Find data on the PACS (``findscu``).\n\n- px-move_: Move data from the PACS (``movescu``).\n\n- px-listen_: Listen for incoming data from the PACS (``storescp``).\n\n2. Installation\n*****************\n\n2.1 Using docker\n================\n\nUsing the dockerized container is the recommended installation vector as the image contains a configured listener service that can receive image data without any additional software on the host system.\n\n.. code-block:: bash\n\n docker pull fnndsc/pypx\n\nAlternatively, you can build a local image with\n\n.. code-block:: bash\n\n # If behing a proxy\n PROXY=http://some.proxy.com\n docker build --build-arg http_proxy=${PROXY} --build-arg UID=$UID -t local/pypx .\n\n # otherwise...\n docker build --build-arg UID=$UID -t local/pypx .\n\n2.2 pypi\n========\n\nFor convenience, a PyPI installation is also available. Note that to be useful for image reception, services on the host machine for listening on a given port and interacting with ``px-listen`` must be manually configured. This is recommended only for advanced users.\n\n.. code-block:: bash\n\n apt-get update \\\n && apt-get install -y dcmtk \\\n && apt-get install -y python3-pip python3-dev \\\n && pip3 install --upgrade pip \\\n && pip install pypx\n\n3. Configuring the containerized version\n*******************************************\n\nThe container is preconfigured to receive image data on port 10402. This port should be accessible to the remote PACS, and note that if the docker container is run directly with the ``docker`` command be sure to publish this port with\n\n.. code-block:: bash\n\n docker run --rm -ti \\\n -p 10402:10402 \\\n ...\n\nIf necessary, this port can be changed in the ``Dockerfile`` for a local build of the container.\n\n4. Usage\n*****************\n\nPlease see the relevant wiki pages for usage instructions:\n\n- px-echo_\n- px-find_\n- px-move_\n- px-listen_\n\n5. Credits\n*****************\n \nPyDicom_\n\n- Author(s): darcymason_\n\nDCMTK_\n\n- Author(s): Dicom @ OFFIS Team\n\n.. _px-echo: https://github.com/FNNDSC/pypx/wiki/1.-px-echo\n.. _px-find: https://github.com/FNNDSC/pypx/wiki/2.-px-find\n.. _px-move: https://github.com/FNNDSC/pypx/wiki/3.-px-move\n.. _px-listen: https://github.com/FNNDSC/pypx/wiki/4.-px-listen\n.. _PyDicom: http://www.python.org/\n.. _darcymason: https://github.com/darcymason\n.. _DCMTK: http://dicom.offis.de/dcmtk.php.en\n.. _echoscu: http://support.dcmtk.org/docs/echoscu.html\n.. _findscu: http://support.dcmtk.org/docs/findscu.html\n.. _movescu: http://support.dcmtk.org/docs/movescu.html\n.. _storescp: http://support.dcmtk.org/docs/storescp.html\n.. _DICOM_Listener: https://github.com/FNNDSC/pypx/wiki/dicom_listener", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/fnndsc/pypx", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pypx", "package_url": "https://pypi.org/project/pypx/", "platform": "", "project_url": "https://pypi.org/project/pypx/", "project_urls": { "Homepage": "http://github.com/fnndsc/pypx" }, "release_url": "https://pypi.org/project/pypx/1.0.0.2/", "requires_dist": null, "requires_python": "", "summary": "Wrapper around DCMTK for PACS related actions (echo, find, move and listen)", "version": "1.0.0.2" }, "last_serial": 5907247, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "6ffe80e2af19940f05865bf4e3dae819", "sha256": "8def62815bac8485b360c46b3509021e762d6a461718908d7ce43e9e019a8a06" }, "downloads": -1, "filename": "pypx-0.1.tar.gz", "has_sig": false, "md5_digest": "6ffe80e2af19940f05865bf4e3dae819", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6485, "upload_time": "2016-10-10T11:47:30", "url": "https://files.pythonhosted.org/packages/c9/e4/2f054b80b7ea889147a18af218fd7f3f1da2d3896c42c70af89d9449a49e/pypx-0.1.tar.gz" } ], "0.10": [ { "comment_text": "", "digests": { "md5": "94abe97549123220c5226df6ff85cd9f", "sha256": "f06a2bdb7cd18b9112c5f9fc5d976c468ceaf7b6949238c1d75c78ec85802138" }, "downloads": -1, "filename": "pypx-0.10.tar.gz", "has_sig": false, "md5_digest": "94abe97549123220c5226df6ff85cd9f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11524, "upload_time": "2017-10-04T12:13:22", "url": "https://files.pythonhosted.org/packages/f1/13/a81ef14363c94484cff1a85ec58d3dac7f646d260547453f07d50bb4dfdf/pypx-0.10.tar.gz" } ], "0.11": [ { "comment_text": "", "digests": { "md5": "f31247a78b0edf8395bf417f3b0339d1", "sha256": "8b187e887e07dd1c8f4eea70591e3d3fdf39a6f3565b2d40f7eece2a2a8d3146" }, "downloads": -1, "filename": "pypx-0.11.tar.gz", "has_sig": false, "md5_digest": "f31247a78b0edf8395bf417f3b0339d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12034, "upload_time": "2017-12-07T16:27:27", "url": "https://files.pythonhosted.org/packages/3c/e0/e5916a6eaa49364ce01d8eb00f6ac084349ffcd99c1df5d81789b823dbdf/pypx-0.11.tar.gz" } ], "0.12": [ { "comment_text": "", "digests": { "md5": "22013a9bd9bcaad2107f0d4a0124304a", "sha256": "4e117ab02199ed6e1e8bb6afcf76e753bc4e46b6ed527704fa4ce2522e576b3f" }, "downloads": -1, "filename": "pypx-0.12.tar.gz", "has_sig": false, "md5_digest": "22013a9bd9bcaad2107f0d4a0124304a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11902, "upload_time": "2018-05-02T20:09:35", "url": "https://files.pythonhosted.org/packages/82/ae/bde85477aeb082567b0bdf3c3f8503c21413b3439568254b11ac1686352b/pypx-0.12.tar.gz" } ], "0.13": [ { "comment_text": "", "digests": { "md5": "5d45768d7cfd552638c21c2957b2fd8a", "sha256": "af68bab981c189dfa1cb056e9957d4f1d692c0e35fd0550cadc20eaccf04dcf5" }, "downloads": -1, "filename": "pypx-0.13.tar.gz", "has_sig": false, "md5_digest": "5d45768d7cfd552638c21c2957b2fd8a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11909, "upload_time": "2018-05-02T20:26:42", "url": "https://files.pythonhosted.org/packages/ca/a8/acc9ebce07ca9ab1fe30df6d79f5c79afa887c0738b7a692216905e2b051/pypx-0.13.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "c5a1b640ae60a8395b8cd06e538da8b7", "sha256": "0b3ac643e8e0d87d461db5c8a29f7a86a6ddc056dcf1b38a0a7bcd8b064499eb" }, "downloads": -1, "filename": "pypx-0.2.tar.gz", "has_sig": false, "md5_digest": "c5a1b640ae60a8395b8cd06e538da8b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6668, "upload_time": "2016-10-28T08:03:40", "url": "https://files.pythonhosted.org/packages/d0/0e/cf8de8c36a1a108c9d23815406520e404bd81a3c3da1922866931491e3c8/pypx-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "2b481ff354355a00e0cd6f200afee3a3", "sha256": "a52bf360e82bb5f6dc3a3b5003da6a7f64da3d64858b9cde5083742943f2081d" }, "downloads": -1, "filename": "pypx-0.3.tar.gz", "has_sig": false, "md5_digest": "2b481ff354355a00e0cd6f200afee3a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7471, "upload_time": "2016-10-28T10:01:50", "url": "https://files.pythonhosted.org/packages/42/ac/645ce552cbff9ccb43159d042282a2c5dc534f78b79bf10e992adc6fce3d/pypx-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "3d82f52a06c7ab8ef6ce284ab93b5b98", "sha256": "9becc09c748133468de9129f3344a06163b4bd2ccdd4ac11ddfbb6d0e0cda9c8" }, "downloads": -1, "filename": "pypx-0.4.tar.gz", "has_sig": false, "md5_digest": "3d82f52a06c7ab8ef6ce284ab93b5b98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7460, "upload_time": "2016-10-28T10:15:13", "url": "https://files.pythonhosted.org/packages/2a/06/5ff086223bd12696c730a34376fc501b82fd29f73313b557fe41c06d2b2c/pypx-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "5a2ceabe8d07ac809011d4bc73464358", "sha256": "d7840eb5e5d6ea6f90b33f0fee1dce634ba45ec1e4c20cb5d9daa0e5a946136f" }, "downloads": -1, "filename": "pypx-0.5.tar.gz", "has_sig": false, "md5_digest": "5a2ceabe8d07ac809011d4bc73464358", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7516, "upload_time": "2017-02-20T10:50:22", "url": "https://files.pythonhosted.org/packages/42/7a/0afd97a512b560932ba5bc49edbec126cdde3daea6772fb6c840e7394f13/pypx-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "ae60c8e35e25245f084fa1b0b1f57642", "sha256": "c70bbbad31e7359d405dae2b5afd7950ed57ff0850ead97726f7e37525b0170b" }, "downloads": -1, "filename": "pypx-0.6.tar.gz", "has_sig": false, "md5_digest": "ae60c8e35e25245f084fa1b0b1f57642", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8307, "upload_time": "2017-02-22T09:18:11", "url": "https://files.pythonhosted.org/packages/bb/e9/7ac0eacc78c77a9c9058ce3ffaba28e7372b4c221f6c5b96c9b62bfdcbe6/pypx-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "f481c683d47b715eb9bfdbecbde48ea3", "sha256": "45bdf0b18ffa31be90120a7882d7fb10ac9a2dcf7175528aa7c9d8e75b7ab166" }, "downloads": -1, "filename": "pypx-0.7.tar.gz", "has_sig": false, "md5_digest": "f481c683d47b715eb9bfdbecbde48ea3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8323, "upload_time": "2017-02-22T10:28:15", "url": "https://files.pythonhosted.org/packages/82/bb/32cd97ca01349fcea69f47930781d3f37010e8c23d621776be111f601b27/pypx-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "99269752aeda30ba0a8ac07028efa21b", "sha256": "c5ca9064db14a3f92198e764e346c7dd267f4b977790c19f88734db14f743584" }, "downloads": -1, "filename": "pypx-0.8.tar.gz", "has_sig": false, "md5_digest": "99269752aeda30ba0a8ac07028efa21b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11525, "upload_time": "2017-03-21T10:37:41", "url": "https://files.pythonhosted.org/packages/22/51/7fa9ffdcca0e4f3ee9f5d8a34b5a2502474a616887f5eab61cca00fd9c19/pypx-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "649ab2e5bb8fc32edeebd46d1917eb81", "sha256": "16eb618b37df8bcd140679be9a3523f0039b092719bfaa85cf5f09aa34511bad" }, "downloads": -1, "filename": "pypx-0.9.tar.gz", "has_sig": false, "md5_digest": "649ab2e5bb8fc32edeebd46d1917eb81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11515, "upload_time": "2017-04-04T14:10:51", "url": "https://files.pythonhosted.org/packages/c4/6a/120273bc20c184da5edefef8d7d1252c504621d293cadb1643f0c8a78156/pypx-0.9.tar.gz" } ], "1.0.0.0": [ { "comment_text": "", "digests": { "md5": "de16c73e5eb365c5c2a03f757283ca62", "sha256": "4e357b54b9ecde774a111d48ddaac535f71ef345cb83c5129f851fa96578abc3" }, "downloads": -1, "filename": "pypx-1.0.0.0.tar.gz", "has_sig": false, "md5_digest": "de16c73e5eb365c5c2a03f757283ca62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21919, "upload_time": "2019-09-28T17:10:30", "url": "https://files.pythonhosted.org/packages/c1/f6/a2f52cf807eb9e82251da8fd2f66a2ee590a2e6f30e03012d3fb491242a9/pypx-1.0.0.0.tar.gz" } ], "1.0.0.1": [ { "comment_text": "", "digests": { "md5": "5e50f778583408a8b957d40d064593eb", "sha256": "e5d7dc4181af5e31d64db896125cb3c118623e5b95b1f4e4ef49241a995f5061" }, "downloads": -1, "filename": "pypx-1.0.0.1.tar.gz", "has_sig": false, "md5_digest": "5e50f778583408a8b957d40d064593eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22358, "upload_time": "2019-09-29T16:11:33", "url": "https://files.pythonhosted.org/packages/77/54/f0584ac7c918480d77ee31da3e89bacce5ff416cc475f2b3c72a4b3d8944/pypx-1.0.0.1.tar.gz" } ], "1.0.0.2": [ { "comment_text": "", "digests": { "md5": "82e78928eb956ef5e4a140ea618af217", "sha256": "f4efb469d0f2feddc933290dc84cbc023e05cd68d023d41a1e8da4879ba32392" }, "downloads": -1, "filename": "pypx-1.0.0.2.tar.gz", "has_sig": false, "md5_digest": "82e78928eb956ef5e4a140ea618af217", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22406, "upload_time": "2019-09-30T14:45:00", "url": "https://files.pythonhosted.org/packages/4c/9c/04544c79bb87072ad2340fb88aca2a4f7bbbac2d9f2cccd43c06ef77a379/pypx-1.0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "82e78928eb956ef5e4a140ea618af217", "sha256": "f4efb469d0f2feddc933290dc84cbc023e05cd68d023d41a1e8da4879ba32392" }, "downloads": -1, "filename": "pypx-1.0.0.2.tar.gz", "has_sig": false, "md5_digest": "82e78928eb956ef5e4a140ea618af217", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22406, "upload_time": "2019-09-30T14:45:00", "url": "https://files.pythonhosted.org/packages/4c/9c/04544c79bb87072ad2340fb88aca2a4f7bbbac2d9f2cccd43c06ef77a379/pypx-1.0.0.2.tar.gz" } ] }