{ "info": { "author": "Alex Ward", "author_email": "alxwrd@googlemail.com", "bugtrack_url": null, "classifiers": [], "description": "# Specsavers :eyeglasses:\n_A Python wrapper around the Specsavers appointment booking API_\n\n[![Build Status](https://travis-ci.org/alxwrd/specsavers.svg?branch=master)](https://travis-ci.org/alxwrd/specsavers)\n\n> **IMPORTANT**: This project is NOT affiliated with Specsavers. Specsavers, nor this\nlibrary, should not be held responsible for any misinformation gained regarding\nappointment information during the use of this library. \n\n> **NOTE**: Whilst this is a toy project, the endpoints it connects to are very real.\nPlease be responsible if you use this library: don't spam requests, and don't spam bookings.\n\n## Example\n\n```python\n>>> import specsavers\n\n# Find local stores\n>>> stores = specsavers.locate(latitude=51.507879, longitude=0.087732)\n\n# Closest / first store\n>>> stores[0]\n\n\n# Store by name\n>>> stores[\"strand\"]\n\n\n# Lookup directly by name\n>>>other_store = specsavers.find(\"nottingham\")\n\n>>> other_store.appointments() # Implies today\n[, ]\n\n>>> other_store.appointments(\"tomorrow\")[0]\n\n```\n\n## What?\n\nThe Specsavers booking site is powered by a RESTful API. This library\naims to provide a simple, easy, and Pythonic interface to that service.\n\n\n## Why?\n\nI recently needed an eye test, and Specsavers has the ability to book online.\nI needed an appointment fairly last minute (two days before), but fortunately,\nthere was _one_ slot left. I proceeded to make the appointment, but in the\ntime it had taken to fill in my details: it had already been taken.\n\nI wanted to watch for new appointments to pop up, but frustratingly, every\ntime I refreshed the page, I was taken back to the first step of the process.\n\nSo I did some digging in the browsers dev tools. To my delight, I realised\nthat the Specsavers booking site is powered by a RESTful API. I wrote some\ncode to fetch appointments for the desired date; so I could watch to see if\nanother appointment became available.\n\nIn the end, I got an appointment for the day I wanted. I didn't want to let\nmy learnings about the API go to waste though, so I created this package!\n\n\n## Using\n\n### Installing\n\n_Not yet_.\n\n\n## Contributing\n\nIf you find any problems, you should open an\n[issue](https://github.com/alxwrd/specsavers/issues).\n\nIf you can fix an issue you've found, or another issue, you should open\na [pull request](https://github.com/alxwrd/specsavers/pulls).\n\n1. Fork this repository on GitHub to start making your changes to the master\nbranch (or branch off of it).\n2. Write a test which shows that the bug was fixed or that the feature works as expected.\n3. Send a pull request!\n\n### Development setup\n\nThis project uses [pipenv](https://docs.pipenv.org/) to manage\ndependencies, the standard library [unittest](https://docs.python.org/3/library/unittest.html)\nfor tests, and [pycodestyle](https://github.com/PyCQA/pycodestyle) (formerly pep8)\nfor style checks.\n\n```bash\n$ pip install pipenv # Install pipenv not installed\n\n$ git clone https://github.com//specsavers.git # Clone the repo from your fork\n$ cd specsavers\n$ pipenv install --dev # Install all dependencies\n$ pipenv shell # Start the new virtual enviroment\n\n$ # Make changes\n\n$ python -m unittest discover tests # Run tests\n$ pycodestyle specsavers/ tests/ # Check style\n```", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/alxwrd/specsavers", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "specsavers", "package_url": "https://pypi.org/project/specsavers/", "platform": "", "project_url": "https://pypi.org/project/specsavers/", "project_urls": { "Homepage": "https://github.com/alxwrd/specsavers" }, "release_url": "https://pypi.org/project/specsavers/1.0/", "requires_dist": null, "requires_python": ">=3.6", "summary": "A Python wrapper around the Specsavers appointment booking API", "version": "1.0" }, "last_serial": 3789368, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "50765d0f8fc80842ca60edaaee7f54d1", "sha256": "f7ad78b04e5b633fe5b49907757fac95c60c9f17d1182764e58bbfdf3ff0bd4b" }, "downloads": -1, "filename": "specsavers-1.0.tar.gz", "has_sig": false, "md5_digest": "50765d0f8fc80842ca60edaaee7f54d1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5091, "upload_time": "2018-04-22T17:15:26", "url": "https://files.pythonhosted.org/packages/ed/c0/b2610c2574fff7393c6742ad92c7b67fdb1456b2a97ee150728bceb33cc1/specsavers-1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "50765d0f8fc80842ca60edaaee7f54d1", "sha256": "f7ad78b04e5b633fe5b49907757fac95c60c9f17d1182764e58bbfdf3ff0bd4b" }, "downloads": -1, "filename": "specsavers-1.0.tar.gz", "has_sig": false, "md5_digest": "50765d0f8fc80842ca60edaaee7f54d1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5091, "upload_time": "2018-04-22T17:15:26", "url": "https://files.pythonhosted.org/packages/ed/c0/b2610c2574fff7393c6742ad92c7b67fdb1456b2a97ee150728bceb33cc1/specsavers-1.0.tar.gz" } ] }