{ "info": { "author": "potykion", "author_email": "potykion@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7" ], "description": "# repka\n\nPython repository pattern implementation\n\n## Installation\n\nVia pip:\n\n```\npip install repka\n```\n\nVia poetry:\n\n```\npoetry add repka\n```\n\n\n## Usage\n\n```python\nfrom typing import Any\nimport sqlalchemy as sa\nfrom aiopg.sa import create_engine\nfrom repka.api import BaseRepository, IdModel\n\n# Define SA table\nmetadata = sa.MetaData()\ntransactions_table = sa.Table(\n \"transactions\",\n metadata,\n sa.Column(\"id\", sa.Integer, primary_key=True, autoincrement=True),\n ...\n)\n\n# Define pydantic model\nclass Transaction(IdModel):\n ...\n\n\n# Define repository\nclass TransactionRepo(BaseRepository):\n table = transactions_table\n\n def deserialize(self, **kwargs: Any) -> Transaction:\n return Transaction(**kwargs)\n\n# Create SA connection\nconnection_params = dict(user='aiopg', database='aiopg', host='127.0.0.1', password='passwd')\nasync with create_engine(**connection_params) as engine:\n async with engine.acquire() as conn:\n # Instantiate repository \n repo = TransactionRepo(conn)\n # Now you can use the repo\n # Here we select first matching row from table and convert it to model\n transaction = await repo.first(transactions_table.c.id == 1)\n\n```\n\n\n## Tests \n\nTo run tests:\n\n1. Setup [database url](https://docs.sqlalchemy.org/en/13/core/engines.html#database-urls) via `DATABASE_URL` environment variable \n\n**WARNING:** Every test run will drop all tables from db\n\n2. Run tests via `pytest`\n\n## Contribution\n\n1. Create fork/branch for new feature/fix/whatever\n\n2. Install pre-commit hooks: `pre-commit install` (for manual pre-commit run use`pre-commit run -a`)\n\n3. When you done create pull request and wait for approval\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/potykion/repka", "keywords": "", "license": "MIT", "maintainer": "potykion", "maintainer_email": "potykion@gmail.com", "name": "repka", "package_url": "https://pypi.org/project/repka/", "platform": "", "project_url": "https://pypi.org/project/repka/", "project_urls": { "Homepage": "https://github.com/potykion/repka", "Repository": "https://github.com/potykion/repka" }, "release_url": "https://pypi.org/project/repka/0.7.0/", "requires_dist": [ "pydantic (>=0.31,<0.32)", "sqlalchemy (>=1.3,<2.0)", "aiopg (>=0.16.0,<0.17.0)" ], "requires_python": ">=3.7,<4.0", "summary": "Python repository pattern implementation", "version": "0.7.0" }, "last_serial": 5971540, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "187d490c257a9275e1bd1185313be819", "sha256": "17a40b92a636908b596b05d0ba0c108b4a0341703bec69afe72d118b82e6e7eb" }, "downloads": -1, "filename": "repka-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "187d490c257a9275e1bd1185313be819", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 5325, "upload_time": "2019-07-02T13:17:07", "url": "https://files.pythonhosted.org/packages/e5/05/a543cd8714e43279509876481d45fd8a23333b0b56b98fece3b640d65da5/repka-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d52e070a14f525a4a280d6da31a06842", "sha256": "eb4ebe07aca7cfe1eb50541de13825823594c7dc8139fd0f8df6decd226d4453" }, "downloads": -1, "filename": "repka-0.1.0.tar.gz", "has_sig": false, "md5_digest": "d52e070a14f525a4a280d6da31a06842", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 2706, "upload_time": "2019-07-02T13:17:09", "url": "https://files.pythonhosted.org/packages/fb/82/de3d98047c8c2632ee0eb74c4c3b349ad1067f8c05f0bdcc7e17cc623526/repka-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "102d91f2318033a49326e45c8eac63f1", "sha256": "0791341d51420f3a76ebb08d1e3d246a1d4b66d6e8bdf1501926eb2c4a10b6e6" }, "downloads": -1, "filename": "repka-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "102d91f2318033a49326e45c8eac63f1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 6386, "upload_time": "2019-07-18T15:17:03", "url": "https://files.pythonhosted.org/packages/66/aa/eac9b93d776b1c42f149b060699d7691245b68dc28e03d9147645d335501/repka-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dc7488e94f1b184e8badc26d1dae470a", "sha256": "91b8df05be19a5fdd2aca3b1ee555dd6694b339155ec1d05db4dc6239e4bd9ed" }, "downloads": -1, "filename": "repka-0.2.0.tar.gz", "has_sig": false, "md5_digest": "dc7488e94f1b184e8badc26d1dae470a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 3441, "upload_time": "2019-07-18T15:17:05", "url": "https://files.pythonhosted.org/packages/62/36/3cfee08db0d7b72e57eb97bfa7d1b5ed96ffea5ede549b8e41a827d067e7/repka-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "c2dc2a67a53aa5a84b42b742352b3377", "sha256": "005d74fbf5ec849fbd5624be670431d1e9bdad50716d3ed0862decfd5ad74cf9" }, "downloads": -1, "filename": "repka-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c2dc2a67a53aa5a84b42b742352b3377", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 6931, "upload_time": "2019-07-27T18:07:43", "url": "https://files.pythonhosted.org/packages/86/19/4626ff2f290f01b613f8b395ad0fab4f5378ca7e8dc4895c12c8417e2224/repka-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b409e8df8991f121ccda2c4300dad508", "sha256": "dd5d9412da01c5fe1d66b9c8237cfd01cb0104545abd0480f2045a702c8baf8b" }, "downloads": -1, "filename": "repka-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b409e8df8991f121ccda2c4300dad508", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 3526, "upload_time": "2019-07-27T18:07:45", "url": "https://files.pythonhosted.org/packages/80/b9/55391585dfab5a99264c71e3c994d0067a3381f84e41a7bb0e3e5fa75693/repka-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "a5d468d5d7a7ba5c962963e9441141e5", "sha256": "ec05840512b16e9a3ebb5e73a692434e21e86b1357d1d6a616d3b2111e4ce8b2" }, "downloads": -1, "filename": "repka-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a5d468d5d7a7ba5c962963e9441141e5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 8102, "upload_time": "2019-08-08T13:56:51", "url": "https://files.pythonhosted.org/packages/4e/f0/5d8f2d2e3d7711df17ac16a0bcf575e065228af01cc49893b5cc9eea18b8/repka-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "adb94cdc6c2e8810fa9f8ba473b25ab3", "sha256": "d2b4277a0934c2315d90354641ed6737ea90b548c39e81bf94b3a0a538edb327" }, "downloads": -1, "filename": "repka-0.4.0.tar.gz", "has_sig": false, "md5_digest": "adb94cdc6c2e8810fa9f8ba473b25ab3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 3843, "upload_time": "2019-08-08T13:56:53", "url": "https://files.pythonhosted.org/packages/a2/04/5a87b7bb5f78913b68b12cf805f60a3d6c69be27701ecba5e6636e1f400c/repka-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "32e8c4976aaf683af7a6463c9a4dfa80", "sha256": "8fa9f72d9d68456e9d681cdd867698244967dac15d9b0d82af1a0127089cb7f0" }, "downloads": -1, "filename": "repka-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "32e8c4976aaf683af7a6463c9a4dfa80", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 8702, "upload_time": "2019-08-26T13:25:45", "url": "https://files.pythonhosted.org/packages/05/a0/f27632c7c7651ad59be7019bc52e36cef3cbf5276f1f0b0d36afd99c205d/repka-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b8ebd359fd79849bcaa996e64d4f6c65", "sha256": "cca67d81f3094b23c0f3a39bd28f588a5cb7f516df1a8464015fc9508807ae5a" }, "downloads": -1, "filename": "repka-0.5.0.tar.gz", "has_sig": false, "md5_digest": "b8ebd359fd79849bcaa996e64d4f6c65", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 3959, "upload_time": "2019-08-26T13:25:47", "url": "https://files.pythonhosted.org/packages/a5/bc/5aeaee606b70a0d224087a5f8c03f30cd580c396c22f35fefb4d0ed848a3/repka-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "2d2747a663a7b18b4b8b608bd42bfac6", "sha256": "4a659d6ac518f4014432c7253320dbb4c727b6ed1913bbfc0588626ed413171e" }, "downloads": -1, "filename": "repka-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2d2747a663a7b18b4b8b608bd42bfac6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 8907, "upload_time": "2019-10-04T17:31:40", "url": "https://files.pythonhosted.org/packages/0b/c5/2b2c6d710a8a0aa1c716cc4b7d7b39936b25a86d0d6e6cedce3619b1625b/repka-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "94d8befc7d7ef957a8ff5f1957307478", "sha256": "7953d8ffe718b429c356cae2316182c2b9961ec5f56a2ac966d7fa0abe3455e8" }, "downloads": -1, "filename": "repka-0.6.0.tar.gz", "has_sig": false, "md5_digest": "94d8befc7d7ef957a8ff5f1957307478", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 3964, "upload_time": "2019-10-04T17:31:42", "url": "https://files.pythonhosted.org/packages/66/da/07fb2597e532bdbfcf09f379c91e871b7fae0c1cfe3d434a8943edd43058/repka-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "0221851d42dd309b98b57027d7fdac04", "sha256": "11a13353c0cff44440d674fe336787a8a18ec9d3d9417a96b7ebebbcdad8a450" }, "downloads": -1, "filename": "repka-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0221851d42dd309b98b57027d7fdac04", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 10015, "upload_time": "2019-10-14T13:27:54", "url": "https://files.pythonhosted.org/packages/98/38/e0fb6cba427161ed52dd28c4ef4da672b558c53fff06b5d1e775d5a9c3c3/repka-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6e0f51693cb0ed4aebb09c4deea528a7", "sha256": "977f8797ac374eddfef36572e144e742d6e4a48882eca6c9a648e7f5cc78b139" }, "downloads": -1, "filename": "repka-0.7.0.tar.gz", "has_sig": false, "md5_digest": "6e0f51693cb0ed4aebb09c4deea528a7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 4261, "upload_time": "2019-10-14T13:27:55", "url": "https://files.pythonhosted.org/packages/46/40/bba13a04e522d67daf8c698b1d191a167721ea8e4032ade69aa5c1af4f43/repka-0.7.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0221851d42dd309b98b57027d7fdac04", "sha256": "11a13353c0cff44440d674fe336787a8a18ec9d3d9417a96b7ebebbcdad8a450" }, "downloads": -1, "filename": "repka-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0221851d42dd309b98b57027d7fdac04", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 10015, "upload_time": "2019-10-14T13:27:54", "url": "https://files.pythonhosted.org/packages/98/38/e0fb6cba427161ed52dd28c4ef4da672b558c53fff06b5d1e775d5a9c3c3/repka-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6e0f51693cb0ed4aebb09c4deea528a7", "sha256": "977f8797ac374eddfef36572e144e742d6e4a48882eca6c9a648e7f5cc78b139" }, "downloads": -1, "filename": "repka-0.7.0.tar.gz", "has_sig": false, "md5_digest": "6e0f51693cb0ed4aebb09c4deea528a7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 4261, "upload_time": "2019-10-14T13:27:55", "url": "https://files.pythonhosted.org/packages/46/40/bba13a04e522d67daf8c698b1d191a167721ea8e4032ade69aa5c1af4f43/repka-0.7.0.tar.gz" } ] }