{ "info": { "author": "Azat Ibrakov", "author_email": "azatibrakov@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "rsrc\n====\n\n[![](https://travis-ci.com/lycantropos/rsrc.svg?branch=master)](https://travis-ci.com/lycantropos/rsrc \"Travis CI\")\n[![](https://dev.azure.com/lycantropos/rsrc/_apis/build/status/lycantropos.rsrc?branchName=master)](https://dev.azure.com/lycantropos/rsrc/_build/latest?definitionId=4&branchName=master \"Azure Pipelines\")\n[![](https://codecov.io/gh/lycantropos/rsrc/branch/master/graph/badge.svg)](https://codecov.io/gh/lycantropos/rsrc \"Codecov\")\n[![](https://img.shields.io/github/license/lycantropos/rsrc.svg)](https://github.com/lycantropos/rsrc/blob/master/LICENSE \"License\")\n[![](https://badge.fury.io/py/rsrc.svg)](https://badge.fury.io/py/rsrc \"PyPI\")\n\nIn what follows\n- `python` is an alias for `python3.5` or any later\nversion (`python3.6` and so on),\n- `pypy` is an alias for `pypy3.5` or any later\nversion (`pypy3.6` and so on).\n\nInstallation\n------------\n\nInstall the latest `pip` & `setuptools` packages versions:\n- with `CPython`\n ```bash\n python -m pip install --upgrade pip setuptools\n ```\n- with `PyPy`\n ```bash\n pypy -m pip install --upgrade pip setuptools\n ```\n\n### User\n\nDownload and install the latest stable version from `PyPI` repository:\n- with `CPython`\n ```bash\n python -m pip install --upgrade rsrc\n ```\n- with `PyPy`\n ```bash\n pypy -m pip install --upgrade rsrc\n ```\n\n### Developer\n\nDownload the latest version from `GitHub` repository\n```bash\ngit clone https://github.com/lycantropos/rsrc.git\ncd rsrc\n```\n\nInstall dependencies:\n- with `CPython`\n ```bash\n python -m pip install --force-reinstall -r requirements.txt\n ```\n- with `PyPy`\n ```bash\n pypy -m pip install --force-reinstall -r requirements.txt\n ```\n\nInstall:\n- with `CPython`\n ```bash\n python setup.py install\n ```\n- with `PyPy`\n ```bash\n pypy setup.py install\n ```\n\nUsage\n-----\n\nThe main idea is to use `setuptools` feature \ncalled [\"Dynamic Discovery of Services and Plugins\"](https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins).\n\nAssuming we have a package `rsrc_ftp` with structure\n\n |_ rsrc_ftp.py\n |_ setup.py\n\nwhich adds support for URLs with `ftp` scheme\n\n`rsrc_ftp.py`\n```python\nfrom rsrc.models import Resource\n\ndef deserialize(string: str) -> Resource:\n ...\n```\n\nto make it available for `rsrc` package \nwe should register its entry point \n(`rsrc_ftp::deserialize` function in our case)\n\n`setup.py`\n```python\nfrom setuptools import setup\n\nfrom rsrc import plugins\n\nplugins_entry_points = [\n plugins.to_entry_point(id_=plugins.to_id('ftp'),\n module_name='rsrc_ftp',\n function_name='deserialize'),\n]\nsetup(name='rsrc_ftp',\n py_modules=['rsrc_ftp'],\n entry_points={plugins.__name__: plugins_entry_points},\n install_requires=['rsrc'])\n```\n\nAfter that the installation of `rsrc_ftp` package \nwill register `rsrc_ftp::deserialize` function in `rsrc` package \nas an entry point for resources with `ftp` scheme\n\n```python\n>>> from rsrc.base import deserialize\n>>> ftp_resource = deserialize('ftp://path/to/resource')\n>>> ftp_resource.url\nURL('ftp', 'path', '/to/resource', '', '', '')\n```\n\nPlugins\n-------\n\n- [`rsrc_local`](https://pypi.org/project/rsrc_local) -- adds support for local/local network resources.\n- [`rsrc_web`](https://pypi.org/project/rsrc_web) -- adds support for web resources (both `http` & `https` schemes).\n\nDevelopment\n-----------\n\n### Bumping version\n\n#### Preparation\n\nInstall\n[bump2version](https://github.com/c4urself/bump2version#installation).\n\n#### Pre-release\n\nChoose which version number category to bump following [semver\nspecification](http://semver.org/).\n\nTest bumping version\n```bash\nbump2version --dry-run --verbose $CATEGORY\n```\n\nwhere `$CATEGORY` is the target version number category name, possible\nvalues are `patch`/`minor`/`major`.\n\nBump version\n```bash\nbump2version --verbose $CATEGORY\n```\n\nThis will set version to `major.minor.patch-alpha`. \n\n#### Release\n\nTest bumping version\n```bash\nbump2version --dry-run --verbose release\n```\n\nBump version\n```bash\nbump2version --verbose release\n```\n\nThis will set version to `major.minor.patch`.\n\n#### Notes\n\nTo avoid inconsistency between branches and pull requests,\nbumping version should be merged into `master` branch \nas separate pull request.\n\n### Running tests\n\nInstall dependencies:\n- with `CPython`\n ```bash\n python -m pip install --force-reinstall -r requirements-tests.txt\n ```\n- with `PyPy`\n ```bash\n pypy -m pip install --force-reinstall -r requirements-tests.txt\n ```\n\nPlain\n```bash\npytest\n```\n\nInside `Docker` container:\n- with `CPython`\n ```bash\n docker-compose --file docker-compose.cpython.yml up\n ```\n- with `PyPy`\n ```bash\n docker-compose --file docker-compose.pypy.yml up\n ```\n\n`Bash` script (e.g. can be used in `Git` hooks):\n- with `CPython`\n ```bash\n ./run-tests.sh\n ```\n or\n ```bash\n ./run-tests.sh cpython\n ```\n\n- with `PyPy`\n ```bash\n ./run-tests.sh pypy\n ```\n\n`PowerShell` script (e.g. can be used in `Git` hooks):\n- with `CPython`\n ```powershell\n .\\run-tests.ps1\n ```\n or\n ```powershell\n .\\run-tests.ps1 cpython\n ```\n- with `PyPy`\n ```powershell\n .\\run-tests.ps1 pypy\n ```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/lycantropos/rsrc/archive/master.zip", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lycantropos/rsrc/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "rsrc", "package_url": "https://pypi.org/project/rsrc/", "platform": "", "project_url": "https://pypi.org/project/rsrc/", "project_urls": { "Download": "https://github.com/lycantropos/rsrc/archive/master.zip", "Homepage": "https://github.com/lycantropos/rsrc/" }, "release_url": "https://pypi.org/project/rsrc/0.1.3/", "requires_dist": [ "memoir (>=0.0.3)", "reprit (>=0.3.0)" ], "requires_python": ">=3.5.3", "summary": "Resources management (files/directories/etc.).", "version": "0.1.3", "yanked": false, "yanked_reason": null }, "last_serial": 8501854, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "a6ff52059bd28e297758e27280dad8eb", "sha256": "acbc15c55a84e7fc855ab7eb0d1c14277ea88e2b39286993cc65fcd2d736c62b" }, "downloads": -1, "filename": "rsrc-0.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a6ff52059bd28e297758e27280dad8eb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 3167, "upload_time": "2019-06-11T16:17:56", "upload_time_iso_8601": "2019-06-11T16:17:56.347349Z", "url": "https://files.pythonhosted.org/packages/05/69/687aba3030d9afaf4272b345f5a974440588a7f414e72a008c3fd178d3ac/rsrc-0.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a947477e71202b2782424ed657f75b99", "sha256": "a5f2cfae1536e8ae6f8581c186dd177a01da94d0809b3d57f45d40f48bded818" }, "downloads": -1, "filename": "rsrc-0.0.0.tar.gz", "has_sig": false, "md5_digest": "a947477e71202b2782424ed657f75b99", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 2651, "upload_time": "2019-06-11T16:17:58", "upload_time_iso_8601": "2019-06-11T16:17:58.716416Z", "url": "https://files.pythonhosted.org/packages/49/03/d6754faffd77ddc8bb5185e2d6f8b2fde7cb800d0c4ab801e6370ae11c66/rsrc-0.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "b3902fa07fbbbf0d828ca174734ddee5", "sha256": "1ae9e27528d32c87d312d9014cdde9c5e9b17bcfe9d30ac9cf52602b9a2e1d58" }, "downloads": -1, "filename": "rsrc-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b3902fa07fbbbf0d828ca174734ddee5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 6644, "upload_time": "2019-06-14T18:27:24", "upload_time_iso_8601": "2019-06-14T18:27:24.621357Z", "url": "https://files.pythonhosted.org/packages/d4/99/ef62c49c7c4e9a030ebd92d6ebf072c8a07dae9fe0be8d6a2d2814f1e865/rsrc-0.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "500e319145e9a0ae4bdaf2b0fdb6db13", "sha256": "f337e716d640816d4400b041f28979ab84dae5b5a32d254803e3812b6d0c6549" }, "downloads": -1, "filename": "rsrc-0.0.2.tar.gz", "has_sig": false, "md5_digest": "500e319145e9a0ae4bdaf2b0fdb6db13", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 5606, "upload_time": "2019-06-14T18:27:26", "upload_time_iso_8601": "2019-06-14T18:27:26.176901Z", "url": "https://files.pythonhosted.org/packages/be/b6/36653ebada405a9356a7f5087dd7016a81b162d54b6ee85b43c559050cbb/rsrc-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "97493f6c82d32213fc025654707ca69c", "sha256": "ebb6a910540c488805c23414856e1bd9b18bc2c78706e96687c7169c48683505" }, "downloads": -1, "filename": "rsrc-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "97493f6c82d32213fc025654707ca69c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 6723, "upload_time": "2019-06-19T11:24:23", "upload_time_iso_8601": "2019-06-19T11:24:23.686943Z", "url": "https://files.pythonhosted.org/packages/c0/08/0e5ba18edb3415e5f14e275ceda33504986e9b605c7c03d9dfd46bdd0102/rsrc-0.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e4f278d86b875a255dc4bab4e7fc0c71", "sha256": "f5ed6091fcc9df72a30f76fff7152db22c8e1bcf995cb909736078e501312eb9" }, "downloads": -1, "filename": "rsrc-0.0.3.tar.gz", "has_sig": false, "md5_digest": "e4f278d86b875a255dc4bab4e7fc0c71", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 5658, "upload_time": "2019-06-19T11:24:24", "upload_time_iso_8601": "2019-06-19T11:24:24.860134Z", "url": "https://files.pythonhosted.org/packages/00/13/8656a75c2523fdcd3a39d9b5bf16d9ae1ed8cf9531c09be14a6d21472262/rsrc-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "21e2ee7970e3fcde6cab9f15f41f9055", "sha256": "306c58da8ec77e242ec11dac41a7445f4755b74d56799e7082a9ce9e0cda210c" }, "downloads": -1, "filename": "rsrc-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "21e2ee7970e3fcde6cab9f15f41f9055", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 6762, "upload_time": "2019-06-19T13:27:43", "upload_time_iso_8601": "2019-06-19T13:27:43.046979Z", "url": "https://files.pythonhosted.org/packages/0d/c2/6352eadda0914099fe11953e053995fcf45d9bfae2c27cae4a187d8f8150/rsrc-0.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9837e33e148eb2229cdb8b11f7b2a255", "sha256": "96f31e37162a922d4f096af1659be9dbf76b04ad356b8806b582703bea8c51c5" }, "downloads": -1, "filename": "rsrc-0.0.4.tar.gz", "has_sig": false, "md5_digest": "9837e33e148eb2229cdb8b11f7b2a255", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 5710, "upload_time": "2019-06-19T13:27:44", "upload_time_iso_8601": "2019-06-19T13:27:44.739497Z", "url": "https://files.pythonhosted.org/packages/42/cd/ec83f003f61899f259dbd19fcd8c056f79a0d916b5bfeb4d27cc3326a492/rsrc-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "b903d2a0a0acd323c2cbd8896e6d3746", "sha256": "a03b242130c110290c633096ca78d339bd338e9a31d6dcfe4a9e446913000d5a" }, "downloads": -1, "filename": "rsrc-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b903d2a0a0acd323c2cbd8896e6d3746", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 7044, "upload_time": "2019-10-23T15:02:31", "upload_time_iso_8601": "2019-10-23T15:02:31.206903Z", "url": "https://files.pythonhosted.org/packages/52/96/0fb851d322518ca6f90aba59f970016c5e8a5e18a72d0ac627dd41937152/rsrc-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ef6598c5db5634a9af431a8cdc28607a", "sha256": "c2e26ed2ed869ee72778d7aec6ad1e234db95bea38b14d985e16998dd497b9fb" }, "downloads": -1, "filename": "rsrc-0.1.0.tar.gz", "has_sig": false, "md5_digest": "ef6598c5db5634a9af431a8cdc28607a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 6016, "upload_time": "2019-10-23T15:02:33", "upload_time_iso_8601": "2019-10-23T15:02:33.117562Z", "url": "https://files.pythonhosted.org/packages/31/f4/715d2767bde9c6a06c6a2803f9239cc02510c9d5dead93947fed69d2b712/rsrc-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "5201b8b5a1c75b69d5f51596771982a0", "sha256": "a4e8aa07ae911966303b0d1768633b12058bec43db20439a484f1cbed935ae46" }, "downloads": -1, "filename": "rsrc-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5201b8b5a1c75b69d5f51596771982a0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 7058, "upload_time": "2019-10-23T15:43:09", "upload_time_iso_8601": "2019-10-23T15:43:09.195419Z", "url": "https://files.pythonhosted.org/packages/9e/1a/523eb7b6ec9bb09ab062b1f3b3dc080ebe0212fe1fbbaf22d93ace37577f/rsrc-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b4fb9df50c1ba4d5248445139a2ba9bf", "sha256": "551df8f19949bd680c2ba0cf12bc98a4acfffecdf35f323169b12c8b81116dc2" }, "downloads": -1, "filename": "rsrc-0.1.1.tar.gz", "has_sig": false, "md5_digest": "b4fb9df50c1ba4d5248445139a2ba9bf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 6014, "upload_time": "2019-10-23T15:43:10", "upload_time_iso_8601": "2019-10-23T15:43:10.891175Z", "url": "https://files.pythonhosted.org/packages/d7/8d/654653fe8e0c7410d4422ec2e049b53c66d0df538f9f759d208bb1dd727b/rsrc-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "2159d18eaf53c52944c6c6e3f2db342e", "sha256": "7176622f9579adccbe44609caedec68e68fe7120d718c5efa58638004fca1002" }, "downloads": -1, "filename": "rsrc-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2159d18eaf53c52944c6c6e3f2db342e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 7059, "upload_time": "2020-05-21T23:10:40", "upload_time_iso_8601": "2020-05-21T23:10:40.546761Z", "url": "https://files.pythonhosted.org/packages/72/cc/9410fe84691ea3a7d4b4dd97f77bb7273ca817147640af94060d0b8d2391/rsrc-0.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "fdedcb8233ff531b6ebb1aa1a9d83179", "sha256": "492926d58897969093905481e1f1a9dce98549696ec4405ad41a55aee4ab55a5" }, "downloads": -1, "filename": "rsrc-0.1.2.tar.gz", "has_sig": false, "md5_digest": "fdedcb8233ff531b6ebb1aa1a9d83179", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 5904, "upload_time": "2020-05-21T23:10:41", "upload_time_iso_8601": "2020-05-21T23:10:41.672306Z", "url": "https://files.pythonhosted.org/packages/11/e8/e4c7e28cb847edaccdc1d222d39b0325590517748a07c2836695c1af0824/rsrc-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "3a98ef867e97fc850a28af79dc5b901a", "sha256": "388d8c66b418fac33d19eb610bf40e5b49628b4af87a870b872f8507b4b9897a" }, "downloads": -1, "filename": "rsrc-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "3a98ef867e97fc850a28af79dc5b901a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 7048, "upload_time": "2020-10-26T11:51:17", "upload_time_iso_8601": "2020-10-26T11:51:17.081025Z", "url": "https://files.pythonhosted.org/packages/dd/bd/dbf959fd955653902548e73cfbf965f18f2bb195eb0aac6fce1c18c78e6e/rsrc-0.1.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "595c45b464f80fd57ff07f7cce8eb165", "sha256": "bba4e58b4947db30cd5c6ac8f888f84d9deb1e1b8889c0d1b040f51d5b89996b" }, "downloads": -1, "filename": "rsrc-0.1.3.tar.gz", "has_sig": false, "md5_digest": "595c45b464f80fd57ff07f7cce8eb165", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 5891, "upload_time": "2020-10-26T11:51:18", "upload_time_iso_8601": "2020-10-26T11:51:18.226097Z", "url": "https://files.pythonhosted.org/packages/c3/1a/13dba27b96a2d6e95a454f1053d980e50513bb8283f6f449712a3b3d9635/rsrc-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3a98ef867e97fc850a28af79dc5b901a", "sha256": "388d8c66b418fac33d19eb610bf40e5b49628b4af87a870b872f8507b4b9897a" }, "downloads": -1, "filename": "rsrc-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "3a98ef867e97fc850a28af79dc5b901a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.3", "size": 7048, "upload_time": "2020-10-26T11:51:17", "upload_time_iso_8601": "2020-10-26T11:51:17.081025Z", "url": "https://files.pythonhosted.org/packages/dd/bd/dbf959fd955653902548e73cfbf965f18f2bb195eb0aac6fce1c18c78e6e/rsrc-0.1.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "595c45b464f80fd57ff07f7cce8eb165", "sha256": "bba4e58b4947db30cd5c6ac8f888f84d9deb1e1b8889c0d1b040f51d5b89996b" }, "downloads": -1, "filename": "rsrc-0.1.3.tar.gz", "has_sig": false, "md5_digest": "595c45b464f80fd57ff07f7cce8eb165", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 5891, "upload_time": "2020-10-26T11:51:18", "upload_time_iso_8601": "2020-10-26T11:51:18.226097Z", "url": "https://files.pythonhosted.org/packages/c3/1a/13dba27b96a2d6e95a454f1053d980e50513bb8283f6f449712a3b3d9635/rsrc-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }