{ "info": { "author": "FluxNinja", "author_email": "support@fluxninja.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9" ], "description": "

\n\ud83d\ude80 Just launched v1 of managed rate limiting service\n
Support us with your feedback and questions on Product Hunt or Discord\n
\n

\n\n

\n \"FluxNinja\n
\n \n \"Documentation\n \n \n \"Slack\n \n

\n\n# Rate Limiting for Python Applications\n\nThe `aperture-py` SDK provides an easy way to integrate your Python applications\nwith [FluxNinja Aperture](https://github.com/fluxninja/aperture). It allows flow\ncontrol functionality on fine-grained features inside service code.\n\nRefer to [documentation](https://docs.fluxninja.com/sdk/python/) for more\ndetails.\n\n## Usage\n\n### Install SDK\n\nRun the command below to install the SDK:\n\n```bash\npip install aperture-py\n```\n\n### Create Aperture Client\n\nThe next step is to create an Aperture Client instance, for which, the address\nof the organization created in Aperture Cloud and API key are needed. You can\nlocate both these details by clicking on the Aperture tab in the sidebar menu of\nAperture Cloud.\n\n```python\nfrom aperture_sdk.client import ApertureClient, FlowParams\n\nagent_address = os.getenv(\"APERTURE_AGENT_ADDRESS\", default_agent_address)\napi_key = os.getenv(\"APERTURE_API_KEY\", \"\")\ninsecure = os.getenv(\"APERTURE_AGENT_INSECURE\", \"true\").lower() == \"true\"\n\naperture_client = ApertureClient.new_client(\n address=agent_address, insecure=insecure, api_key=api_key\n)\n```\n\n### Flow Functionality\n\nThe created instance can then be used to start a flow:\n\n```python\n# business logic produces labels\n labels = {\n \"user_id\": \"some_user_id\",\n \"user_tier\": \"gold\",\n \"priority\": \"100\",\n }\n flow_params = FlowParams(\n check_timeout=timedelta(seconds=200),\n explicit_labels=labels,\n )\n # start_flow performs a flowcontrol.v1.Check call to Aperture Agent.\n # It returns a Flow or raises an error if any.\n flow = await aperture_client.start_flow(\n control_point=\"AwesomeFeature\",\n params=flow_params,\n )\n\n # Check if flow check was successful.\n if not flow.success:\n logger.info(\"Flow check failed - will fail-open\")\n\n # See whether flow was accepted by Aperture Agent.\n if flow.should_run():\n # do actual work\n pass\n else:\n # handle flow rejection by Aperture Agent\n flow.set_status(FlowStatus.Error)\n\n res = await flow.end()\n if res.get_error():\n logger.error(\"Error: {}\".format(res.get_error()))\n elif res.get_flow_end_response():\n logger.info(\"Flow End Response: {}\".format(res.get_flow_end_response()))\n\n # Simulate work being done\n await asyncio.sleep(2)\n return \"\", 202\n```\n\nThe above code snippet is making `start_flow` calls to Aperture. For this call,\nit is important to specify the control point (`AwesomeFeature` in the example)\nand `FlowParams` that will be aligned with the policy created in Aperture Cloud.\nFor request prioritization use cases, it's important to set a higher gRPC\ndeadline. This parameter specifies the maximum duration a request can remain in\nthe queue. For each flow that is started, a `should_run` decision is made,\ndetermining whether to allow the request into the system or to rate limit it. It\nis important to make the `end` call made after processing each request, to send\ntelemetry data that would provide granular visibility for each flow.\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "aperture-py", "package_url": "https://pypi.org/project/aperture-py/", "platform": null, "project_url": "https://pypi.org/project/aperture-py/", "project_urls": null, "release_url": "https://pypi.org/project/aperture-py/2.26.0/", "requires_dist": [ "grpcio (>=1.60.0,<2.0.0)", "opentelemetry-api (>=1.20.0,<2.0.0)", "opentelemetry-sdk (>=1.20.0,<2.0.0)", "opentelemetry-exporter-otlp (>=1.20.0,<2.0.0)", "protobuf (>=4.24.4,<5.0.0)", "pydoctor (>=23.9.1,<24.0.0)" ], "requires_python": ">=3.8,<4.0", "summary": "SDK to interact with the Aperture Agent", "version": "2.26.0", "yanked": false, "yanked_reason": null }, "last_serial": 21652281, "releases": { "2.19.0": [ { "comment_text": "", "digests": { "blake2b_256": "68ed67fcf2fe715c39ee2cf7d0534d477ba4f6e919238bf8f0091a9dd9d90186", "md5": "f60e8d20b53e8041554e113d254a426d", "sha256": "1c23f77b91f249f69188ccc9e8dfbec642af5e5afcfa27310268cc70b2c20e4e" }, "downloads": -1, "filename": "aperture_py-2.19.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f60e8d20b53e8041554e113d254a426d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 16748, "upload_time": "2023-10-10T15:38:18", "upload_time_iso_8601": "2023-10-10T15:38:18.128439Z", "url": "https://files.pythonhosted.org/packages/68/ed/67fcf2fe715c39ee2cf7d0534d477ba4f6e919238bf8f0091a9dd9d90186/aperture_py-2.19.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "8529c625e79c181f7ca5b0f1867701ddaba005632a48c90f07c27f270fd36bd4", "md5": "052ae4f654391443fc42d1fee929d5b6", "sha256": "5eec2ea8bddd40f17c1ae95be5ddff8ab1551d555afc3a5a9de6003b97c305d6" }, "downloads": -1, "filename": "aperture_py-2.19.0.tar.gz", "has_sig": false, "md5_digest": "052ae4f654391443fc42d1fee929d5b6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 16497, "upload_time": "2023-10-10T15:38:19", "upload_time_iso_8601": "2023-10-10T15:38:19.489093Z", "url": "https://files.pythonhosted.org/packages/85/29/c625e79c181f7ca5b0f1867701ddaba005632a48c90f07c27f270fd36bd4/aperture_py-2.19.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.22.0": [ { "comment_text": "", "digests": { "blake2b_256": "c5f0837002d95de27710c3ed826ab0e46a8294a29723e331ae6487c602005282", "md5": "9168afe15f06000ada066ade4073693b", "sha256": "2559968705932b63da69bf9d76f4382a29beeb04ec690ada1f26b0f282152c74" }, "downloads": -1, "filename": "aperture_py-2.22.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9168afe15f06000ada066ade4073693b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 16841, "upload_time": "2023-10-30T11:26:09", "upload_time_iso_8601": "2023-10-30T11:26:09.771141Z", "url": "https://files.pythonhosted.org/packages/c5/f0/837002d95de27710c3ed826ab0e46a8294a29723e331ae6487c602005282/aperture_py-2.22.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "f4f6545a831ca2154f0a7d6bc0713f09d5985621db4c239302ca0f07822333db", "md5": "29c2f1b86f3008b82b8e398f6c83b8b0", "sha256": "5342989550bc6dc01c2b47c89d86b574cebdc6338c595797298b55eb2fa89dc4" }, "downloads": -1, "filename": "aperture_py-2.22.0.tar.gz", "has_sig": false, "md5_digest": "29c2f1b86f3008b82b8e398f6c83b8b0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 16590, "upload_time": "2023-10-30T11:26:10", "upload_time_iso_8601": "2023-10-30T11:26:10.989395Z", "url": "https://files.pythonhosted.org/packages/f4/f6/545a831ca2154f0a7d6bc0713f09d5985621db4c239302ca0f07822333db/aperture_py-2.22.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.22.1": [ { "comment_text": "", "digests": { "blake2b_256": "4f3fc77e38d04b5fa0afc67fbda4f60b6edb13cb953e59ff6cc10572cbe8ca74", "md5": "e9fe9c6a1c279521785d879e5dddfafe", "sha256": "23a92915a96ef7b5697a54770df62778bf598e922913d8ff77e7733de6f28113" }, "downloads": -1, "filename": "aperture_py-2.22.1-py3-none-any.whl", "has_sig": false, "md5_digest": "e9fe9c6a1c279521785d879e5dddfafe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 20018, "upload_time": "2023-11-28T11:48:43", "upload_time_iso_8601": "2023-11-28T11:48:43.490804Z", "url": "https://files.pythonhosted.org/packages/4f/3f/c77e38d04b5fa0afc67fbda4f60b6edb13cb953e59ff6cc10572cbe8ca74/aperture_py-2.22.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "3371dabf073c44a26ced260fd3eee21cc75fb54df8cd35aaffc495ef9d93f1f4", "md5": "b89fdae25276060e122c5a8e0d4df672", "sha256": "b723e0a99c47084289a2ae8bf56d168b7b8a42ee35ed282e29a658c1603cf66f" }, "downloads": -1, "filename": "aperture_py-2.22.1.tar.gz", "has_sig": false, "md5_digest": "b89fdae25276060e122c5a8e0d4df672", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 19458, "upload_time": "2023-11-28T11:48:45", "upload_time_iso_8601": "2023-11-28T11:48:45.057453Z", "url": "https://files.pythonhosted.org/packages/33/71/dabf073c44a26ced260fd3eee21cc75fb54df8cd35aaffc495ef9d93f1f4/aperture_py-2.22.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.22.2": [ { "comment_text": "", "digests": { "blake2b_256": "e121c0bc3f6c98388a2a9d9ff32e994df561bf7a8a25d66b11b6034fd80ff1a4", "md5": "2b776f3be748635e6e3bf2b6cb78f214", "sha256": "ebd25928a3c763e4e1b120fc65232d1877c7d388c61eb8eaba1115ec5f9a1058" }, "downloads": -1, "filename": "aperture_py-2.22.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2b776f3be748635e6e3bf2b6cb78f214", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 20476, "upload_time": "2023-11-29T06:57:15", "upload_time_iso_8601": "2023-11-29T06:57:15.905962Z", "url": "https://files.pythonhosted.org/packages/e1/21/c0bc3f6c98388a2a9d9ff32e994df561bf7a8a25d66b11b6034fd80ff1a4/aperture_py-2.22.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "8581288db2eaeb0e8af2b1949ca29df379ded5cb398a447d20baf99ae51c53ec", "md5": "dc90b3680385d8cf775bca72e5db5aac", "sha256": "b4f3ff81471cb7b0c4569f99572f866ed088e479a1ec1da01e5bcf54c488dc62" }, "downloads": -1, "filename": "aperture_py-2.22.2.tar.gz", "has_sig": false, "md5_digest": "dc90b3680385d8cf775bca72e5db5aac", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 19807, "upload_time": "2023-11-29T06:57:17", "upload_time_iso_8601": "2023-11-29T06:57:17.493266Z", "url": "https://files.pythonhosted.org/packages/85/81/288db2eaeb0e8af2b1949ca29df379ded5cb398a447d20baf99ae51c53ec/aperture_py-2.22.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.22.3": [ { "comment_text": "", "digests": { "blake2b_256": "588ba472450ff8a1056118a21ea4af3bb849f50224cfd41e51bfbddb14fae3c6", "md5": "27d26ede90a84e605f0e086bf855002c", "sha256": "86cf71becbfa2c38352b831ac8f41cb17767bbaae039f33ed3bffe08f97418c2" }, "downloads": -1, "filename": "aperture_py-2.22.3-py3-none-any.whl", "has_sig": false, "md5_digest": "27d26ede90a84e605f0e086bf855002c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 20394, "upload_time": "2023-12-01T07:01:51", "upload_time_iso_8601": "2023-12-01T07:01:51.524389Z", "url": "https://files.pythonhosted.org/packages/58/8b/a472450ff8a1056118a21ea4af3bb849f50224cfd41e51bfbddb14fae3c6/aperture_py-2.22.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "ab073959ee163a1f4c3595e108891c6d73aafd8e95e3169617bfa3c8e4229139", "md5": "32bf76d3626055f78c5d40fffdfb3dd5", "sha256": "5f2f8efe42c4e7a90c8bbe9322d1fdfb199ffe0798dfb76ab46aaf7d335762dc" }, "downloads": -1, "filename": "aperture_py-2.22.3.tar.gz", "has_sig": false, "md5_digest": "32bf76d3626055f78c5d40fffdfb3dd5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 19880, "upload_time": "2023-12-01T07:01:53", "upload_time_iso_8601": "2023-12-01T07:01:53.106137Z", "url": "https://files.pythonhosted.org/packages/ab/07/3959ee163a1f4c3595e108891c6d73aafd8e95e3169617bfa3c8e4229139/aperture_py-2.22.3.tar.gz", "yanked": false, "yanked_reason": null } ], "2.23.0": [ { "comment_text": "", "digests": { "blake2b_256": "aabbb50f5cb09117d803c55052f01e1709cc281d28128bffbd8e07ab9e65a061", "md5": "91ad1585168444946c31757a13b4b403", "sha256": "0ca2681a0f1d00092e21b1fa64a929af6a3bf7ba38160404ee8b6207384c8372" }, "downloads": -1, "filename": "aperture_py-2.23.0-py3-none-any.whl", "has_sig": false, "md5_digest": "91ad1585168444946c31757a13b4b403", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 20579, "upload_time": "2023-12-06T03:22:08", "upload_time_iso_8601": "2023-12-06T03:22:08.992595Z", "url": "https://files.pythonhosted.org/packages/aa/bb/b50f5cb09117d803c55052f01e1709cc281d28128bffbd8e07ab9e65a061/aperture_py-2.23.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "5f85e41b713afae52a134422accd8a8c9112b98759399ffe130224c1f887a213", "md5": "5cca1214ddb4889172435cb6691e8c9c", "sha256": "89312887ee5d93d3e489905c92729ca22f8f61e53b00435fe90f51d564bc9980" }, "downloads": -1, "filename": "aperture_py-2.23.0.tar.gz", "has_sig": false, "md5_digest": "5cca1214ddb4889172435cb6691e8c9c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 20096, "upload_time": "2023-12-06T03:22:10", "upload_time_iso_8601": "2023-12-06T03:22:10.054169Z", "url": "https://files.pythonhosted.org/packages/5f/85/e41b713afae52a134422accd8a8c9112b98759399ffe130224c1f887a213/aperture_py-2.23.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.24.0": [ { "comment_text": "", "digests": { "blake2b_256": "7a69fbf15c89d25feaedf71fb9e880d81b181f1fab107e3e15ef6f0083e97b38", "md5": "d4acea2e649a05fe5f7b4e22f8b5cb51", "sha256": "70e5742a00793f23115c1b51d4e93e5cbb833b98549647545f25c98046cee6cc" }, "downloads": -1, "filename": "aperture_py-2.24.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d4acea2e649a05fe5f7b4e22f8b5cb51", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 20618, "upload_time": "2023-12-20T13:10:52", "upload_time_iso_8601": "2023-12-20T13:10:52.695075Z", "url": "https://files.pythonhosted.org/packages/7a/69/fbf15c89d25feaedf71fb9e880d81b181f1fab107e3e15ef6f0083e97b38/aperture_py-2.24.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "734df41d87ed71500e29ad5c59eed141c6a93568ae4e315a0fb3ced1b6675753", "md5": "c8be0250a626a0d90d53f29e36ae2542", "sha256": "f56dd7ce15e3e2ade7dfc763a2cc2bab56b583dbcaee86b03b152ab33d5f4302" }, "downloads": -1, "filename": "aperture_py-2.24.0.tar.gz", "has_sig": false, "md5_digest": "c8be0250a626a0d90d53f29e36ae2542", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 20143, "upload_time": "2023-12-20T13:10:53", "upload_time_iso_8601": "2023-12-20T13:10:53.670812Z", "url": "https://files.pythonhosted.org/packages/73/4d/f41d87ed71500e29ad5c59eed141c6a93568ae4e315a0fb3ced1b6675753/aperture_py-2.24.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.25.0": [ { "comment_text": "", "digests": { "blake2b_256": "c3d696e92af83cf4920b5e95d350c161e7a8fd03d3cee3a1343d6dfab0fb3ee5", "md5": "6f22f93bd7594e241846f87b7bad457a", "sha256": "a48de825377535f7423aa095dbea6cb3a61a1996c1a89296c873a902ca895e13" }, "downloads": -1, "filename": "aperture_py-2.25.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6f22f93bd7594e241846f87b7bad457a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 22066, "upload_time": "2023-12-26T12:52:53", "upload_time_iso_8601": "2023-12-26T12:52:53.400426Z", "url": "https://files.pythonhosted.org/packages/c3/d6/96e92af83cf4920b5e95d350c161e7a8fd03d3cee3a1343d6dfab0fb3ee5/aperture_py-2.25.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "178144ecb399456bdf71c43eb32ad68c1a57f137f24ba687878e12d537f9a87e", "md5": "f33b1c30f982e7a2257b481a41fc5c98", "sha256": "b7887cd71ba9e1f537af3a0d66a23f85d1bbd1af34d39795b58ae7f4fa548f67" }, "downloads": -1, "filename": "aperture_py-2.25.0.tar.gz", "has_sig": false, "md5_digest": "f33b1c30f982e7a2257b481a41fc5c98", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 21646, "upload_time": "2023-12-26T12:52:54", "upload_time_iso_8601": "2023-12-26T12:52:54.962096Z", "url": "https://files.pythonhosted.org/packages/17/81/44ecb399456bdf71c43eb32ad68c1a57f137f24ba687878e12d537f9a87e/aperture_py-2.25.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.25.1": [ { "comment_text": "", "digests": { "blake2b_256": "a36c183306772b009e5d9f8221793a0926d332df83812d73ea3d8ecd02c4440c", "md5": "46fe97bcbce94608ba86662256e58b44", "sha256": "f4e97939a85857ba750987b2a46666f807be32f15030514a8623147ad6cecab2" }, "downloads": -1, "filename": "aperture_py-2.25.1-py3-none-any.whl", "has_sig": false, "md5_digest": "46fe97bcbce94608ba86662256e58b44", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 22064, "upload_time": "2024-01-12T13:00:17", "upload_time_iso_8601": "2024-01-12T13:00:17.294998Z", "url": "https://files.pythonhosted.org/packages/a3/6c/183306772b009e5d9f8221793a0926d332df83812d73ea3d8ecd02c4440c/aperture_py-2.25.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "6f8d08b007984c495ba6b8860014474c649fd552b270b954e7dfa6fbb6645905", "md5": "1af13af439a627ad1ebbd80f5b08f408", "sha256": "95a4e8ba6c455aa8973ec212fa18ecba448c4f80b0922307549f86eac2c8340d" }, "downloads": -1, "filename": "aperture_py-2.25.1.tar.gz", "has_sig": false, "md5_digest": "1af13af439a627ad1ebbd80f5b08f408", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 21643, "upload_time": "2024-01-12T13:00:18", "upload_time_iso_8601": "2024-01-12T13:00:18.812073Z", "url": "https://files.pythonhosted.org/packages/6f/8d/08b007984c495ba6b8860014474c649fd552b270b954e7dfa6fbb6645905/aperture_py-2.25.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.25.2": [ { "comment_text": "", "digests": { "blake2b_256": "7e8eba37604b203ae47b4daf65928f8f84ee45f593a895bb3e3c01beddfe5813", "md5": "b90f1a742dfc01f0949d3256ea80f3f9", "sha256": "537ae82e7731bfe4fa3a6e0f811f21c8a860dab762f06b8efe93c15b46cf2f1c" }, "downloads": -1, "filename": "aperture_py-2.25.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b90f1a742dfc01f0949d3256ea80f3f9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 21958, "upload_time": "2024-01-23T18:13:20", "upload_time_iso_8601": "2024-01-23T18:13:20.039466Z", "url": "https://files.pythonhosted.org/packages/7e/8e/ba37604b203ae47b4daf65928f8f84ee45f593a895bb3e3c01beddfe5813/aperture_py-2.25.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "d29c142339ce6119e6023f46e8910e7f223c8c334f21977c3d2a9113cb061a03", "md5": "0d4b1b40d05a87547462dddcca540867", "sha256": "6f3db686117951ce5f5d50158a701b283239a477196354cf5cc42ab5c11948cc" }, "downloads": -1, "filename": "aperture_py-2.25.2.tar.gz", "has_sig": false, "md5_digest": "0d4b1b40d05a87547462dddcca540867", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 21723, "upload_time": "2024-01-23T18:13:21", "upload_time_iso_8601": "2024-01-23T18:13:21.672225Z", "url": "https://files.pythonhosted.org/packages/d2/9c/142339ce6119e6023f46e8910e7f223c8c334f21977c3d2a9113cb061a03/aperture_py-2.25.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.25.3": [ { "comment_text": "", "digests": { "blake2b_256": "3887af9aab01d7d8e1b1f80833f0ff0321109f8a007b2d2d00308dfbbc295f23", "md5": "3d60df6fe129d46ce95123717292d8e6", "sha256": "525d8430bfb9c597dc44dee4e32722919158529b5fb25d384e87823bb9f5280c" }, "downloads": -1, "filename": "aperture_py-2.25.3-py3-none-any.whl", "has_sig": false, "md5_digest": "3d60df6fe129d46ce95123717292d8e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 27600, "upload_time": "2024-01-26T11:54:23", "upload_time_iso_8601": "2024-01-26T11:54:23.703303Z", "url": "https://files.pythonhosted.org/packages/38/87/af9aab01d7d8e1b1f80833f0ff0321109f8a007b2d2d00308dfbbc295f23/aperture_py-2.25.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "3b8a092ee7fd9849da9b7978aa8c4d573d213284b5d69c5f28258b4603d2b352", "md5": "06a139044c76f245f3080b4de4d65c55", "sha256": "d70261a00167d1fbec8df717423cd9a762c85500c3dd845027aa18d11a203f3f" }, "downloads": -1, "filename": "aperture_py-2.25.3.tar.gz", "has_sig": false, "md5_digest": "06a139044c76f245f3080b4de4d65c55", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 22238, "upload_time": "2024-01-26T11:54:25", "upload_time_iso_8601": "2024-01-26T11:54:25.346294Z", "url": "https://files.pythonhosted.org/packages/3b/8a/092ee7fd9849da9b7978aa8c4d573d213284b5d69c5f28258b4603d2b352/aperture_py-2.25.3.tar.gz", "yanked": false, "yanked_reason": null } ], "2.26.0": [ { "comment_text": "", "digests": { "blake2b_256": "bc358717288ee3b7931c997c56247c2dc3ad833414850e17a603f645bdc90322", "md5": "4994c303701cf60ae5b7801e544bb3ce", "sha256": "912e66a3440fc7cf7967087417a8e3028213311b4ec944b4b5c5ec6687ad60c6" }, "downloads": -1, "filename": "aperture_py-2.26.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4994c303701cf60ae5b7801e544bb3ce", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 29150, "upload_time": "2024-01-30T11:25:02", "upload_time_iso_8601": "2024-01-30T11:25:02.033508Z", "url": "https://files.pythonhosted.org/packages/bc/35/8717288ee3b7931c997c56247c2dc3ad833414850e17a603f645bdc90322/aperture_py-2.26.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "4891bd75f4ab1c491884d55d0ed61730d31fa2bd53473f1c2597892278052df0", "md5": "d03fe5fa4664e3a146d070d972ada0da", "sha256": "93a41b3c5cc444b3b08bfa130495c44213eef53f0ec3360e63aac4e475573eee" }, "downloads": -1, "filename": "aperture_py-2.26.0.tar.gz", "has_sig": false, "md5_digest": "d03fe5fa4664e3a146d070d972ada0da", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 25076, "upload_time": "2024-01-30T11:25:04", "upload_time_iso_8601": "2024-01-30T11:25:04.252142Z", "url": "https://files.pythonhosted.org/packages/48/91/bd75f4ab1c491884d55d0ed61730d31fa2bd53473f1c2597892278052df0/aperture_py-2.26.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "blake2b_256": "bc358717288ee3b7931c997c56247c2dc3ad833414850e17a603f645bdc90322", "md5": "4994c303701cf60ae5b7801e544bb3ce", "sha256": "912e66a3440fc7cf7967087417a8e3028213311b4ec944b4b5c5ec6687ad60c6" }, "downloads": -1, "filename": "aperture_py-2.26.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4994c303701cf60ae5b7801e544bb3ce", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8,<4.0", "size": 29150, "upload_time": "2024-01-30T11:25:02", "upload_time_iso_8601": "2024-01-30T11:25:02.033508Z", "url": "https://files.pythonhosted.org/packages/bc/35/8717288ee3b7931c997c56247c2dc3ad833414850e17a603f645bdc90322/aperture_py-2.26.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "blake2b_256": "4891bd75f4ab1c491884d55d0ed61730d31fa2bd53473f1c2597892278052df0", "md5": "d03fe5fa4664e3a146d070d972ada0da", "sha256": "93a41b3c5cc444b3b08bfa130495c44213eef53f0ec3360e63aac4e475573eee" }, "downloads": -1, "filename": "aperture_py-2.26.0.tar.gz", "has_sig": false, "md5_digest": "d03fe5fa4664e3a146d070d972ada0da", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8,<4.0", "size": 25076, "upload_time": "2024-01-30T11:25:04", "upload_time_iso_8601": "2024-01-30T11:25:04.252142Z", "url": "https://files.pythonhosted.org/packages/48/91/bd75f4ab1c491884d55d0ed61730d31fa2bd53473f1c2597892278052df0/aperture_py-2.26.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }