{ "info": { "author": "Ben Turner, Robby Colvin", "author_email": "ben@delighted.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "[![Build Status](https://travis-ci.org/delighted/delighted-python.svg?branch=master)](https://travis-ci.org/delighted/delighted-python)\n\n# Delighted API Python Client\n\nOfficial Python client for the [Delighted API](https://delighted.com/docs/api).\n\n## Installation\n\n```\npip install --upgrade delighted\n```\n\nor\n\n```\neasy_install --upgrade delighted\n```\n\n### Upgrading from delighted-python\n\nIf you previously used the python package named `delighted-python`, please note that the package name is now just `delighted`.\n\n## Configuration\n\nTo get started, you need to configure the client with your secret API key.\n\n```python\nimport delighted\ndelighted.api_key = 'YOUR_API_KEY'\n```\n\nFor further options, read the [advanced configuration section](#advanced-configuration).\n\n**Note:** Your API key is secret, and you should treat it like a password. You can find your API key in your Delighted account, under *Settings* > *API*.\n\n## Usage\n\nAdding/updating people and scheduling surveys:\n\n```python\n# Add a new person, and schedule a survey immediately\nperson1 = delighted.Person.create(email='foo+test1@delighted.com')\n\n# Add a new person, and schedule a survey after 1 minute (60 seconds)\nperson2 = delighted.Person.create(email='foo+test2@delighted.com', delay=60)\n\n# Add a new person, but do not schedule a survey\nperson3 = delighted.Person.create(email='foo+test3@delighted.com', send=False)\n\n# Add a new person with full set of attributes, including a custom question\n# product name, and schedule a survey with a 30 second delay\nperson4 = delighted.Person.create(\n email='foo+test4@delighted.com',\n name='Joe Bloggs',\n properties={'customer_id': 123, 'country': 'USA',\n 'question_product_name': 'The London Trench'},\n delay=30)\n\n# Update an existing person (identified by email), adding a name, without\n# scheduling a survey\nupdated_person1 = delighted.Person.create(email='foo+test1@delighted.com',\n name='James Scott', send=False)\n```\n\nUnsubscribing people:\n\n```python\n# Unsubscribe an existing person\ndelighted.Unsubscribe.create(person_email='foo+test1@delighted.com')\n```\n\nListing people:\n\n```python\n# List all people, auto pagination\n# Note: Make sure to handle the possible rate limits error\npeople = delighted.Person.list()\nwhile True:\n try:\n for person in people.auto_paging_iter():\n # Do something with person\n except TooManyRequestsError as e:\n # Indicates how long to wait (in seconds) before making this request again\n e.retry_after\n continue\n\n# For convenience, this method can use a sleep to automatically handle rate limits\npeople = delighted.Person.list(auto_handle_rate_limits=True)\nfor person in people.auto_paging_iter():\n # Do something with person\n```\n\nListing people who have unsubscribed:\n\n```python\n# List all people who have unsubscribed, 20 per page, first 2 pages\ndelighted.Unsubscribe.all()\ndelighted.Unsubscribe.all(page=2)\n```\n\nListing people whose emails have bounced:\n\n```python\n# List all people whose emails have bounced, 20 per page, first 2 pages\ndelighted.Bounce.all()\ndelighted.Bounce.all(page=2)\n```\n\nDeleting a person and all of the data associated with them:\n\n```python\n# Delete by person id\ndelighted.Person.delete(id=42)\n# Delete by email address\ndelighted.Person.delete(email='test@example.com')\n# Delete by phone number (must be E.164 format)\ndelighted.Person.delete(phone_number='+14155551212')\n```\n\nDeleting pending survey requests\n\n```python\n# Delete all pending (scheduled but unsent) survey requests for a person, by email.\ndelighted.SurveyRequest.delete_pending(person_email='foo+test1@delighted.com')\n```\n\nAdding survey responses:\n\n```python\n# Add a survey response, score only\nsurvey_response1 = delighted.SurveyResponse.create(person=person1.id,\n score=10)\n\n# Add *another* survey response (for the same person), score and comment\nsurvey_response2 = delighted.SurveyResponse.create(person=person1.id,\n score=5,\n comment='Really nice.')\n```\n\nRetrieving a survey response:\n\n```python\n# Retrieve an existing survey response\nsurvey_response3 = delighted.SurveyResponse.retrieve('123')\n```\n\nUpdating survey responses:\n\n```python\n# Update a survey response score\nsurvey_response4 = delighted.SurveyResponse.retrieve('234')\nsurvey_response4.score = 10\nsurvey_response4.save()\n# \n\n# Update (or add) survey response properties\nsurvey_response4.person_properties = {'segment': 'Online'}\nsurvey_response4.save()\n# \n\n# Update person who recorded the survey response\nsurvey_response4.person = '321'\nsurvey_response4.save()\n# \n```\n\nListing survey responses:\n\n```python\n# List all survey responses, 20 per page, first 2 pages\nsurvey_responses_page1 = delighted.SurveyResponse.all()\nsurvey_responses_page2 = delighted.SurveyResponse.all(page=2)\n\n# List all survey responses, 20 per page, expanding person object\nsurvey_responses_page1_expanded = delighted.SurveyResponse.all(expand=['person'])\nsurvey_responses_page1_expanded[0].person\n# \n\n# List all survey responses, 20 per page, for a specific trend (ID: 123)\nsurvey_responses_page1_trend = delighted.SurveyResponse.all(trend='123')\n\n# List all survey responses, 20 per page, in reverse chronological order (newest first)\nsurvey_responses_page1_desc = delighted.SurveyResponse.all(order='desc')\n\n# List all survey responses, 100 per page, page 5, with a time range\nimport pytz\ntimezone = pytz.timezone('America/Chicago')\nfiltered_survey_responses = delighted.SurveyResponse.all(\n page=5,\n per_page=100,\n since=timezone.localize(datetime.datetime(2014, 3, 1)),\n until=timezone.localize(datetime.datetime(2014, 4, 30))\n)\n```\n\nRetrieving metrics:\n\n```python\n# Get current metrics, 30-day simple moving average, from most recent response\nmetrics = delighted.Metrics.retrieve()\n\n# Get current metrics, 30-day simple moving average, from most recent response,\n# for a specific trend (ID: 123)\nmetrics = delighted.Metrics.retrieve(trend='123')\n\n# Get metrics, for given time range\nimport pytz\ntimezone = pytz.timezone('America/Chicago')\nmetrics = delighted.Metrics.retrieve(\n since=timezone.localize(datetime.datetime(2013, 10, 1)),\n until=timezone.localize(datetime.datetime(2013, 11, 1))\n)\n```\n\nManaging Autopilot:\n\n```python\n# Get Autopilot configuration for the `email` platform\nautopilot = delighted.AutopilotConfiguration.retrieve('email')\n\n# List people in AutopilotMembership for the `email` platform\npeople_autopilot = delighted.AutopilotMembership.forEmail().list(auto_handle_rate_limits=True)\nfor person in people_autopilot.auto_paging_iter():\n # Do something with person\n\n# Add people to AutopilotMembership\nautopilot = delighted.AutopilotMembership.forEmail().create(person_email='test@example.com')\n\n# Add people to AutopilotMembership, with a full set of attributes\nproperties = {'customer_id': 123, 'country': 'USA', 'question_product_name': 'The London Trench'}\nautopilot = delighted.AutopilotMembership.forSms().create(person_phone_number='+14155551212', properties=properties)\n\n# Delete by person id\ndelighted.AutopilotMembership.forSms().delete(person_id=42)\n\n# Delete by email address\ndelighted.AutopilotMembership.forEmail().delete(person_email='test@example.com')\n\n# Delete by phone number (must be E.164 format)\ndelighted.AutopilotMembership.forSms().delete(person_phone_number='+14155551212')\n```\n\n## Rate limits\n\nIf a request is rate limited, a `TooManyRequestsError` exception is raised. You can rescue that exception to implement exponential backoff or retry strategies. The exception provides a `retry_after` attribute to tell you how many seconds you should wait before retrying. For example:\n\n```python\ntry:\n metrics = delighted.Metrics.retrieve()\nexcept delighted.errors.TooManyRequestsError as err:\n retry_after_seconds = err.retry_after\n # wait for retry_after_seconds before retrying\n # add your retry strategy here ...\n```\n\n## Advanced configuration & testing\n\nThe following options are configurable for the client:\n\n```python\ndelighted.api_key\ndelighted.api_base_url # default: 'https://api.delighted.com/v1/'\ndelighted.http_adapter # default: delighted.HTTPAdapter\n```\n\nBy default, a shared instance of `delighted.Client` is created lazily in `delighted.get_shared_client()`. If you want to create your own client, perhaps for test or if you have multiple API keys, you can:\n\n```python\n# Create an custom client instance, and pass as last argument to resource actions\nimport delighted\nfrom delighted import Client\nclient = Client(api_key='API_KEY',\n api_base_url='https://api.delighted.com/v1/',\n http_adapter=HTTPAdapter())\nmetrics_from_custom_client = delighted.Metrics.retrieve(client=client)\n\n# Or, you can set Delighted.shared_client yourself\ndelighted.shared_client = delighted.Client(\n api_key='API_KEY',\n api_base_url='https://api.delighted.com/v1/',\n http_adapter=delighted.HTTPAdapter()\n)\nmetrics_from_custom_shared_client = delighted.Metrics.retrieve()\n```\n\n## Supported versions\n\n- 2.6+, 3.3+ (PyPy supported)\n\n## Contributing\n\n1. Fork it\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Run the tests (`tox`)\n4. Commit your changes (`git commit -am 'Add some feature'`)\n5. Push to the branch (`git push origin my-new-feature`)\n6. Create new Pull Request\n\n## Releasing\n\n1. Bump the version in `delighted/__init__.py`.\n2. Update the README and CHANGELOG as needed.\n3. Tag the commit for release.\n4. Create the distribution `python setup.py sdist`\n5. Update the package against PyPI's test server with [twine](https://pypi.org/project/twine/)\n`twine upload --repository-url https://test.pypi.org/legacy/ dist/TEST_PACKAGE_NAME`.\n6. If (4 and 5) work, repeat all steps, then push to PyPI's live servers with `twine upload dist/PACKAGE_NAME`.\n\n## Author\n\nOriginally by [Jason Pearson](https://github.com/kaeawc). Graciously transfered and now officially maintained by Delighted.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://delighted.com/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "delighted", "package_url": "https://pypi.org/project/delighted/", "platform": "", "project_url": "https://pypi.org/project/delighted/", "project_urls": { "Homepage": "https://delighted.com/" }, "release_url": "https://pypi.org/project/delighted/4.1.0/", "requires_dist": null, "requires_python": "", "summary": "Delighted API Python Client.", "version": "4.1.0", "yanked": false, "yanked_reason": null }, "last_serial": 10339773, "releases": { "0.5": [ { "comment_text": "", "digests": { "md5": "e01cc6382c401e22a4d4603a26fe29dd", "sha256": "c53b2babf90b004c0c8a31ff18a78292a1dd5307bc6929d3a48d984d0f224212" }, "downloads": -1, "filename": "delighted-0.5.tar.gz", "has_sig": false, "md5_digest": "e01cc6382c401e22a4d4603a26fe29dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7140, "upload_time": "2014-04-23T06:02:18", "upload_time_iso_8601": "2014-04-23T06:02:18.709997Z", "url": "https://files.pythonhosted.org/packages/10/65/b33111f9bfcab18544bebd432172d754fe69ba2530ee81ace11bf24b92ab/delighted-0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6": [ { "comment_text": "", "digests": { "md5": "30bee9ab4ebf786a229ebd1ed3b239aa", "sha256": "f08e8f5919ea1b0893112b0d5a2ea565f099ba0a423c9476d2fd381ec05fdfeb" }, "downloads": -1, "filename": "delighted-0.6.tar.gz", "has_sig": false, "md5_digest": "30bee9ab4ebf786a229ebd1ed3b239aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7267, "upload_time": "2014-04-24T21:27:00", "upload_time_iso_8601": "2014-04-24T21:27:00.284555Z", "url": "https://files.pythonhosted.org/packages/82/c9/5ce7198d04e51a45b050d8cf224397d9e2009b72b63409dd3c83391e3dcb/delighted-0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7": [ { "comment_text": "", "digests": { "md5": "049764fbe49397775c68a76d882c898b", "sha256": "ef482ff1c43255301803d6c7a58aa9eab5555a8ae9802bd9dc72474bc858fe8c" }, "downloads": -1, "filename": "delighted-0.7.tar.gz", "has_sig": false, "md5_digest": "049764fbe49397775c68a76d882c898b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7609, "upload_time": "2014-04-25T19:14:52", "upload_time_iso_8601": "2014-04-25T19:14:52.857708Z", "url": "https://files.pythonhosted.org/packages/1b/b7/f62f5b3d6c62bf0df6c0548a689b6773717a7b856dec15f00b831e08d919/delighted-0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8": [ { "comment_text": "", "digests": { "md5": "6285484e55b7f3e902807b1451f3ca77", "sha256": "eb06e0624e8f9086c10911e81662c8eaf56b8a77a899b292bd6f4da65f5e8f30" }, "downloads": -1, "filename": "delighted-0.8.tar.gz", "has_sig": false, "md5_digest": "6285484e55b7f3e902807b1451f3ca77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7602, "upload_time": "2014-04-25T19:26:47", "upload_time_iso_8601": "2014-04-25T19:26:47.509615Z", "url": "https://files.pythonhosted.org/packages/7e/26/d31a8c96fbf2ae510cfdc73181f359e3c30603a914fabac8d8466dd6e63f/delighted-0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "3ea939a9c64b96d7cf1f1dba098e7dde", "sha256": "e01191f228ac067a57316074d1bf5e56e484d80d37ec97b9d6c1524849e04640" }, "downloads": -1, "filename": "delighted-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3ea939a9c64b96d7cf1f1dba098e7dde", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11172, "upload_time": "2015-09-29T23:38:53", "upload_time_iso_8601": "2015-09-29T23:38:53.670998Z", "url": "https://files.pythonhosted.org/packages/7b/47/67dd425fae8d0398806479a5c354d9831096f9ba996bb0d907d4474aa495/delighted-1.1.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9e709fec6a31c6f2bb4ef15e96899b00", "sha256": "252f72fd1a670f54efbe0d6389a306ac21d94242868779681fb36f4084af52a8" }, "downloads": -1, "filename": "delighted-1.1.0.tar.gz", "has_sig": false, "md5_digest": "9e709fec6a31c6f2bb4ef15e96899b00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8288, "upload_time": "2015-09-29T23:38:58", "upload_time_iso_8601": "2015-09-29T23:38:58.422721Z", "url": "https://files.pythonhosted.org/packages/d5/c9/dcd8a0bb1e7f592a03790d78d22790c4bafbcc09e3ae7589547a339c5618/delighted-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "2527e8c8d5003c33c03099bcf1eb22a2", "sha256": "a253aa492007087565fce804cac6a34c9a7a1f0cd1f85ab25b96dd7ad9c49898" }, "downloads": -1, "filename": "delighted-1.1.1.tar.gz", "has_sig": false, "md5_digest": "2527e8c8d5003c33c03099bcf1eb22a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8327, "upload_time": "2017-04-05T23:20:15", "upload_time_iso_8601": "2017-04-05T23:20:15.606263Z", "url": "https://files.pythonhosted.org/packages/b6/2c/8001754ea34c09e75b4c6c03da58a0ec02eb4349313ed8db1d032506d0bb/delighted-1.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "7c9f8eaca3ff7fe25b9a4595d89e4ea6", "sha256": "d97bd1c75b0a1c414c9c4c031fa2afe3f3e09b1bc66aef1927537b2bb82c6835" }, "downloads": -1, "filename": "delighted-1.1.2.tar.gz", "has_sig": false, "md5_digest": "7c9f8eaca3ff7fe25b9a4595d89e4ea6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8433, "upload_time": "2017-04-06T01:39:11", "upload_time_iso_8601": "2017-04-06T01:39:11.321320Z", "url": "https://files.pythonhosted.org/packages/97/aa/d56ab5250736a7e983ebb4f7de0c99128444e951e4df2bf9d9e289fbc559/delighted-1.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.0b1": [ { "comment_text": "", "digests": { "md5": "b40db26a8ae41763b6f17b9c9c9ad6cf", "sha256": "7c0dfb451112152852f14ee34cd156b5b94b2efb155c55bb7f43914d73cc8a76" }, "downloads": -1, "filename": "delighted-2.0.0b1.tar.gz", "has_sig": false, "md5_digest": "b40db26a8ae41763b6f17b9c9c9ad6cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8801, "upload_time": "2017-04-06T02:04:42", "upload_time_iso_8601": "2017-04-06T02:04:42.094461Z", "url": "https://files.pythonhosted.org/packages/6c/d6/fb49a94df0b1a2e44f9eacba7ad9e24d56f00645908a1efdf2e836932caf/delighted-2.0.0b1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "ac9c20fe540246a66987452a2744ece4", "sha256": "be398e2b5a696af07ae79b57ab34b05847ebad259c4ab992bdc67f1930d346ee" }, "downloads": -1, "filename": "delighted-2.1.0.tar.gz", "has_sig": false, "md5_digest": "ac9c20fe540246a66987452a2744ece4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9549, "upload_time": "2017-10-18T23:04:52", "upload_time_iso_8601": "2017-10-18T23:04:52.153725Z", "url": "https://files.pythonhosted.org/packages/63/3b/603b6c22776f346cecc939ab89db1cb3a2d568b7c7e1f8857320efd0a796/delighted-2.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.0rc1": [ { "comment_text": "", "digests": { "md5": "ae22fd2184bb1ac55a052381bf09c190", "sha256": "29ea239bd72bc83115ef41bf583d692b8d42a272ae9b513d5577de613ef4ccbc" }, "downloads": -1, "filename": "delighted-2.1.0rc1.tar.gz", "has_sig": false, "md5_digest": "ae22fd2184bb1ac55a052381bf09c190", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9545, "upload_time": "2017-10-18T02:09:25", "upload_time_iso_8601": "2017-10-18T02:09:25.310609Z", "url": "https://files.pythonhosted.org/packages/fa/21/34632d27f47c5ee68286e0e0047f03be416460157a40bc04dc055fe83316/delighted-2.1.0rc1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2.0rc1": [ { "comment_text": "", "digests": { "md5": "12ec7c56b2c68a754f00e829a485e5a2", "sha256": "644943b5a80beaa344360f89e236652bc50449a4a57e5d2e8f8f05e6dd4b84e0" }, "downloads": -1, "filename": "delighted-2.2.0rc1.tar.gz", "has_sig": false, "md5_digest": "12ec7c56b2c68a754f00e829a485e5a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9790, "upload_time": "2018-03-22T20:31:16", "upload_time_iso_8601": "2018-03-22T20:31:16.490250Z", "url": "https://files.pythonhosted.org/packages/dc/49/7695a6aefe6a9def033259d5456e011c1bc73e6ba21ded7a101c6ae66aa3/delighted-2.2.0rc1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.3.0": [ { "comment_text": "", "digests": { "md5": "93b05fd8367685618bb117178bdd18bc", "sha256": "3427c66295ff4db073b343998455d07c189690e121d6cfbdf0989dc249cf60d4" }, "downloads": -1, "filename": "delighted-2.3.0.tar.gz", "has_sig": false, "md5_digest": "93b05fd8367685618bb117178bdd18bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10183, "upload_time": "2018-05-23T00:09:25", "upload_time_iso_8601": "2018-05-23T00:09:25.096277Z", "url": "https://files.pythonhosted.org/packages/fb/8f/764002bad8b4adcfc27e0013915d275158774bd54b7f2196a9c458b500e4/delighted-2.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.3.0rc1": [ { "comment_text": "", "digests": { "md5": "6301f07418c1af55b1f09b53e515ae0e", "sha256": "ac674156ba70a2accb56ad8b1b9ab9fc5d7eda73fd122a8df3fbc860ae14d487" }, "downloads": -1, "filename": "delighted-2.3.0rc1.tar.gz", "has_sig": false, "md5_digest": "6301f07418c1af55b1f09b53e515ae0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10177, "upload_time": "2018-05-22T23:58:31", "upload_time_iso_8601": "2018-05-22T23:58:31.066567Z", "url": "https://files.pythonhosted.org/packages/c6/c0/1bf40eb9f164369df9c16af98769e4937f3e0ba4bc04383bfc0a3ee56dee/delighted-2.3.0rc1.tar.gz", "yanked": false, "yanked_reason": null } ], "3.0.0rc1": [ { "comment_text": "", "digests": { "md5": "35839af08c25e4c8d2bc53d1668dcaed", "sha256": "8678c92d910ddf202fd73efa1dfbb2f59b263d0688b4bc9b329a4d1bddbd7a5d" }, "downloads": -1, "filename": "delighted-3.0.0rc1.tar.gz", "has_sig": false, "md5_digest": "35839af08c25e4c8d2bc53d1668dcaed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10182, "upload_time": "2019-10-26T00:12:28", "upload_time_iso_8601": "2019-10-26T00:12:28.329840Z", "url": "https://files.pythonhosted.org/packages/c0/7f/60de8b71b97ba84d190d3e4f2756abf323fcb2ee8c79a959c966e7a1a7f4/delighted-3.0.0rc1.tar.gz", "yanked": false, "yanked_reason": null } ], "4.0.0": [ { "comment_text": "", "digests": { "md5": "73dfd69bb6d010a8b1731bc4c156b499", "sha256": "baffe36622f2f548d7e87d91c96ce83a753bf0acd78a1f816c8f31e6e7b40fea" }, "downloads": -1, "filename": "delighted-4.0.0.tar.gz", "has_sig": false, "md5_digest": "73dfd69bb6d010a8b1731bc4c156b499", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12500, "upload_time": "2020-03-18T21:58:21", "upload_time_iso_8601": "2020-03-18T21:58:21.956609Z", "url": "https://files.pythonhosted.org/packages/46/0f/c642dee942949f2a94119272634fa25f78901f357929a1011c6d2c763f3f/delighted-4.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "4.1.0": [ { "comment_text": "", "digests": { "md5": "3dbbcb301fa9e8db72b655972ca69834", "sha256": "e7e32239ab7ce19e1c4222be66a9d3cd5918cdd94cff58a9401764266161c669" }, "downloads": -1, "filename": "delighted-4.1.0.tar.gz", "has_sig": false, "md5_digest": "3dbbcb301fa9e8db72b655972ca69834", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17032, "upload_time": "2021-05-12T23:38:28", "upload_time_iso_8601": "2021-05-12T23:38:28.871963Z", "url": "https://files.pythonhosted.org/packages/37/56/7cc8b408ded2375ddb1332bb613d3226b80793b6199094d6e24fb85a5a99/delighted-4.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "4.1.0rc1": [ { "comment_text": "", "digests": { "md5": "4bec1520446bc8b7fdc35354200d4398", "sha256": "88df53c427a38d13660e25396a48e334d8945493198862cbe1a56d7cd62415e9" }, "downloads": -1, "filename": "delighted-4.1.0rc1.tar.gz", "has_sig": false, "md5_digest": "4bec1520446bc8b7fdc35354200d4398", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17047, "upload_time": "2021-05-12T23:38:30", "upload_time_iso_8601": "2021-05-12T23:38:30.628983Z", "url": "https://files.pythonhosted.org/packages/09/39/e7bf2c201e28c3028310763e35de24962224f971b05a43a71ba1aff70e44/delighted-4.1.0rc1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3dbbcb301fa9e8db72b655972ca69834", "sha256": "e7e32239ab7ce19e1c4222be66a9d3cd5918cdd94cff58a9401764266161c669" }, "downloads": -1, "filename": "delighted-4.1.0.tar.gz", "has_sig": false, "md5_digest": "3dbbcb301fa9e8db72b655972ca69834", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17032, "upload_time": "2021-05-12T23:38:28", "upload_time_iso_8601": "2021-05-12T23:38:28.871963Z", "url": "https://files.pythonhosted.org/packages/37/56/7cc8b408ded2375ddb1332bb613d3226b80793b6199094d6e24fb85a5a99/delighted-4.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }