{ "info": { "author": "Alexander Herrmann, Martin Mrose", "author_email": "django-amazon-price-monitor@googlegroups.com", "bugtrack_url": null, "classifiers": [], "description": "|Build Status| |codecov.io| |Code issues| |Requirements Status| |Stories in Ready| |Landscape|\n\n.. contents:: Table of Contents\n\ndjango-amazon-price-monitor\n===========================\n\nMonitors prices of Amazon products via Product Advertising API.\n\nBasic structure\n---------------\n\nThis is a reusable Django app that can be plugged into your project. It\nconsists basically of this parts:\n\n- Models\n- Frontend components\n- Angular Frontend API\n- Amazon API component\n\nModels\n~~~~~~\n\n- Product\n\n - representation of an Amazon product\n\n- Price\n\n - representation of a price of an Amazon product at a specific time\n\n- Subscription\n\n - subscribe to a product at a specific price with an email\n notification\n\nFrontend components\n~~~~~~~~~~~~~~~~~~~\n\nThe frontend displays all subscribed products with additional\ninformation and some graphs for price history.\n\nThe features are the following:\n\n- list products\n- show product details\n- show product price graphs\n- add subscriptions\n- adjust subscription price value\n- delete subscriptions\n\nAngular Frontend API\n~~~~~~~~~~~~~~~~~~~~\n\nSimply the API consumed by AngularJS, based on Django REST Framework.\n\nAmazon API component\n~~~~~~~~~~~~~~~~~~~~\n\nFetches product information from Amazon Product Advertising API through\nseveral tasks powered by Celery and weaves the data into the models.\n\nLicense\n-------\n\nThis software is licensed with the MIT license. So feel free to do with\nit whatever you like.\n\nSetup\n-----\n\nPrerequisites\n~~~~~~~~~~~~~\n\n+--------+-----+------------+-----+\n| Python | 3.3 | 3.4 | 3.5 |\n+========+=====+============+=====+\n| Django | 1.8 | 1.8 or 1.9 | 1.9 |\n+--------+-----+------------+-----+\n\nFor additional used packages see `setup.py `__.\n\nIncluded angular libraries\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n- angular-django-rest-resource (`commit:\n 81d752b363668d674201c09d7a2ce6f418a44f13 `__)\n\nBasic setup\n~~~~~~~~~~~\n\nAdd the following apps to *INSTALLED\\_APPS*:\n\n::\n\n INSTALLED_APPS = (\n ...\n 'price_monitor',\n 'price_monitor.product_advertising_api',\n 'rest_framework',\n )\n\nThen migrate:\n\n::\n\n python manage.py migrate\n\nAdjust the settings appropiately, `see next chapter <#settings>`__.\n\nInclude the url configuration.\n\nSetup celery - you'll need the beat and a worker.\n\nSettings\n~~~~~~~~\n\n*The values of the following displayed settings are their default\nvalues. If the value is '...' then there is no default value.*\n\nMust have settings\n^^^^^^^^^^^^^^^^^^\n\nThe following settings are absolutely necessary to the price monitor\nrunning, please set them:\n\nCelery\n''''''\n\nYou need to have a broker and a result backend set.\n\n::\n\n BROKER_URL = ...\n CELERY_RESULT_BACKEND = ...\n\n # some additional settings\n CELERY_ACCEPT_CONTENT = ['pickle', 'json']\n CELERY_CHORD_PROPAGATES = True\n\nRest-Framework\n''''''''''''''\n\nWe use Rest-Framework for Angular frontend:\n\n::\n\n REST_FRAMEWORK = {\n 'PAGINATE_BY': 50,\n 'PAGINATE_BY_PARAM': 'page_size',\n 'MAX_PAGINATE_BY': 100,\n }\n\nSite URL\n''''''''\nSpecify the base URL under which your site will be available. Defaults to: *http://localhost:8000*\nNecessary for creating links to the site within the notification emails.\n\n::\n\n # base url to the site\n PRICE_MONITOR_BASE_URL = 'https://....'\n\nAWS and Product Advertising API credentials\n'''''''''''''''''''''''''''''''''''''''''''\n\n::\n\n # your Amazon Web Services access key id\n PRICE_MONITOR_AWS_ACCESS_KEY_ID = '...'\n\n # your Amazon Web Services secret access key\n PRICE_MONITOR_AWS_SECRET_ACCESS_KEY = '...'\n\n # the region endpoint you want to use.\n # Typically the country you'll run the price monitor in.\n # possible values: CA, CN, DE, ES, FR, IT, JP, UK, US\n PRICE_MONITOR_AMAZON_PRODUCT_API_REGION = '...'\n\n # the assoc tag of the Amazon Product Advertising API\n PRICE_MONITOR_AMAZON_PRODUCT_API_ASSOC_TAG = '...'\n\nAmazon associates\n'''''''''''''''''\nAs the links to Amazon will be affiliate links with your Amazon associate tag (see above), you have to set your name for the disclaimer\n(see `https://partnernet.amazon.de/gp/associates/agreement `__).\n\n::\n\n # name of you/your site\n PRICE_MONITOR_AMAZON_ASSOCIATE_NAME = 'name/sitename'\n # Amazon site being used, choose from on of the following\n 'Amazon.co.uk'\n 'Local.Amazon.co.uk'\n 'Amazon.de'\n 'de.BuyVIP.com'\n 'Amazon.fr'\n 'Amazon.it'\n 'it.BuyVIP.com'\n 'Amazon.es'\n 'es.BuyVIP.com'\n PRICE_MONITOR_AMAZON_ASSOCIATE_SITE = ''\n\n\nImages protocol and domain\n''''''''''''''''''''''''''\n\n::\n\n # if to use the HTTPS URLs for Amazon images.\n # if you're running the monitor on SSL, set this to True\n # INFO:\n # Product images are served directly from Amazon.\n # This is a restriction when using the Amazon Product Advertising API\n PRICE_MONITOR_IMAGES_USE_SSL = True\n\n # domain to use for image serving.\n # typically analog to the api region following the URL pattern\n # https://images-.ssl-images-amazon.com\n PRICE_MONITOR_AMAZON_SSL_IMAGE_DOMAIN = 'https://images-eu.ssl-images-amazon.com'\n\nOptional settings\n^^^^^^^^^^^^^^^^^\n\nThe following settings can be adjusted but come with reasonable default\nvalues.\n\nProduct synchronization\n'''''''''''''''''''''''\n\n::\n\n # time after which products shall be refreshed\n # Amazon only allows caching up to 24 hours, so the maximum value is 1440!\n PRICE_MONITOR_AMAZON_PRODUCT_REFRESH_THRESHOLD_MINUTES = 720 # 12 hours\n\nNotifications\n'''''''''''''\n\nTo be able to send out the notification emails, set up a proper email\nbackend (see `Django\ndocumentation `__).\n\n::\n\n # time after which to notify the user again about a price limit hit (in minutes)\n PRICE_MONITOR_SUBSCRIPTION_RENOTIFICATION_MINUTES = 10080 # 7 days\n\n # sender address of the notification email\n PRICE_MONITOR_EMAIL_SENDER = 'noreply@localhost'\n\n # currency name to use on notifications\n PRICE_MONITOR_DEFAULT_CURRENCY = 'EUR'\n\n # subject and body of the notification emails\n gettext = lambda x: x\n PRICE_MONITOR_I18N_EMAIL_NOTIFICATION_SUBJECT = gettext(\n 'Price limit for %(product)s reached'\n )\n PRICE_MONITOR_I18N_EMAIL_NOTIFICATION_BODY = gettext(\n 'The price limit of %(price_limit)0.2f %(currency)s has been reached for the '\n 'article \"%(product_title)s\" - the current price is %(price)0.2f %(currency)s.'\n '\\n\\nPlease support our platform by using this '\n 'link for buying: %(link)s\\n\\n\\nRegards,\\nThe Team'\n )\n\n # name of the site in notifications\n PRICE_MONITOR_SITENAME = 'Price Monitor'\n\nCaching\n'''''''\n\n::\n\n # key of cache (according to project config) to use for graphs\n # None disables caching.\n PRICE_MONITOR_GRAPH_CACHE_NAME = None\n\n # prefix for cache key used for graphs\n PRICE_MONITOR_GRAPH_CACHE_KEY_PREFIX = 'graph_'\n\nCelery settings\n~~~~~~~~~~~~~~~\n\nTo be able to run the required Celery tasks, Celery itself has to be set\nup. Please see the `Celery\nDocumentation `__\nabout how to setup the whole thing. You'll need a broker and a result\nbackend configured.\n\nDevelopment setup with Docker\n-----------------------------\nThe package comes with an easy to use Docker setup - you just need ``docker`` and ``docker-compose``.\nThe setup is nearly similar to the one of `treasury `__ ( a project by `darignac `__), you\ncan read the `documentation `__ there to get a better insight.\n\nStructure\n~~~~~~~~~\nThere are 5 containers:\n\n====== =======================================================================\ndb Postgres database\n------ -----------------------------------------------------------------------\nredis Celery broker\n------ -----------------------------------------------------------------------\nweb a django project containing the ``django-amazon-price-monitor`` package\n------ -----------------------------------------------------------------------\ncelery the celery for the django project\n------ -----------------------------------------------------------------------\ndata container for mounted volumes\n====== =======================================================================\n\nThe ``web`` and ``celery`` containers are using a docker image being set up under ``docker/web``.\n\nImage: base\n^^^^^^^^^^^\nBasic image with all necessary system packages and pre-installed ``lxml`` and ``psycopg2``.\nThe image can be found on `Docker Hub `__.\n\nImage: web\n^^^^^^^^^^\nIt comes with a Django project with login/logout view, that can be found under ``docker/web/project``.\nThe image derives from ``pricemonitor/base`` from above.\n\nThe directory structure within the container is the following (base dir: ``/srv/``):\n::\n\n\troot:/srv tree\n\t\u251c\u2500\u2500 logs\t\t[log files]\n\t\u251c\u2500\u2500 media\t\t[media files]\n\t\u251c\u2500\u2500 project\t\t[the django project]\n\t\u251c\u2500\u2500 static\t\t[static files]\n\t\u2514\u2500\u2500 pricemonitor\t[the pricemonitor package]\n\nStarts via the start script ``docker/web/web_run.sh`` that does migrations and the starts the ``runserver``.\n\nImage: celery\n^^^^^^^^^^^^^\nBasically the same as ``web``, but starts the Celery worker with beat.\n\nIf you want to develop anything involving tasks, see the `Usage <_docker-usage-override-settings>`__ section below.\n\nImage: data\n^^^^^^^^^^^\nThe ``data`` container mounts several paths:\n\n+--------------------------+----------------------------------+----------------------------------------------------+\n| Folder in container | Folder on host | Information |\n+==========================+==================================+====================================================+\n| /var/lib/postgresql/data | /docker/postgres | * Postgres data directory |\n| | | * Keeps the DB data even if container is removed |\n+--------------------------+----------------------------------+----------------------------------------------------+\n| /srv/logs | /docker/logs | Django logs (see project settings) |\n+--------------------------+----------------------------------+----------------------------------------------------+\n| /srv/media | /docker/media | Django media files |\n+--------------------------+----------------------------------+----------------------------------------------------+\n| /srv/project | /docker/web/project | * the Django project |\n| | | * is copied on Dockerfile to get it up and running |\n| | | * then mounted over (the copy is overwritten) |\n+--------------------------+----------------------------------+----------------------------------------------------+\n| /srv/pricemonitor | | * the ``django-amazon-price-monitor`` lib |\n| | | * is copied on Dockerfile to get it up and running |\n| | | * then mounted over (the copy is overwritten) |\n+--------------------------+----------------------------------+----------------------------------------------------+\n\nUsage\n~~~~~\n\n.. _docker-usage-override-settings:\n\nOverride settings\n^^^^^^^^^^^^^^^^^\nTo override some settings as well as to set up the **required AWS settings** you can create a ``docker-compose.override.yml`` and fill with the specific values\n(also see `docker-compose documentation `__).\n\nPlease see or adjust the ``docker\\web\\project\\settings.py`` for all settings that are read from the environment. They can be overwritten.\n\nA sample ``docker-compose.override.yml`` file could look like this:\n::\n\n\tversion: '2'\n\tservices:\n\t celery:\n\t\tcommand: /bin/true\n\t\tenvironment:\n\t\t PRICE_MONITOR_AWS_ACCESS_KEY_ID: XXX\n\t\t PRICE_MONITOR_AWS_SECRET_ACCESS_KEY: XXX\n\t\t PRICE_MONITOR_AMAZON_PRODUCT_API_REGION: DE\n\t\t PRICE_MONITOR_AMAZON_PRODUCT_API_ASSOC_TAG: XXX\n\t\t PRICE_MONITOR_AMAZON_PRODUCT_REFRESH_THRESHOLD_MINUTES: 5\n\t\t PRICE_MONITOR_SUBSCRIPTION_RENOTIFICATION_MINUTES: 60\n\nIt will avoid the automatic startup of celery (``command: /bin/true``) and set the required settings for AWS (in fact they are only needed in the celery\ncontainer). You can then manually start the container and execute celery which is quite useful if you develop anything that includes changes in the tasks and\nthus requires the celery to be restarted (execute from the ``docker`` folder!):\n::\n\n\talex@tyrion:~/projects/github/django-amazon-price-monitor/docker$ docker-compose run celery bash\n\tStarting docker_data_1\n\n\n\t# check environment variables\n\n\troot@9d64bbd23e98:/srv/project# env\n\tHOSTNAME=9d64bbd23e98\n\tEMAIL_BACKEND=django.core.mail.backends.filebased.EmailBackend\n\tPOSTGRES_DB=pm_db\n\tTERM=xterm\n\tPYTHONUNBUFFERED=1\n\tPRICE_MONITOR_SUBSCRIPTION_RENOTIFICATION_MINUTES=60\n\tPOSTGRES_PASSWORD=6i2vmzq5C6BuSf5k33A6tmMSHwKKv0Pu\n\tPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\n\tSECRET_KEY=Vceev7yWMtEQzHaTZX52\n\tPWD=/srv/project\n\tBROKER_URL=redis://redis/1\n\tC_FORCE_ROOT='True'\n\tPRICE_MONITOR_AWS_SECRET_ACCESS_KEY=XXX\n\tPOSTGRES_USER=pm_user\n\tSHLVL=1\n\tHOME=/root\n\tPRICE_MONITOR_AMAZON_PRODUCT_REFRESH_THRESHOLD_MINUTES=5\n\tPRICE_MONITOR_AMAZON_PRODUCT_API_REGION=DE\n\tPRICE_MONITOR_AMAZON_PRODUCT_API_ASSOC_TAG=XXX\n\tDEBUG='True'\n\tPRICE_MONITOR_AWS_ACCESS_KEY_ID=XXX\n\t_=/usr/bin/env\n\n\n\t# start celery (worker and beat) (can also execute /srv/celery_run.sh)\n\n\troot@9d64bbd23e98:/srv/project# celery --beat -A glue worker\n\n\t -------------- celery@9d64bbd23e98 v3.1.23 (Cipater)\n\t---- **** -----\n\t--- * *** * -- Linux-3.16.0-4-amd64-x86_64-with-debian-8.0\n\t-- * - **** ---\n\t- ** ---------- [config]\n\t- ** ---------- .> app: glue:0x7fc6b5269e10\n\t- ** ---------- .> transport: redis://redis:6379/1\n\t- ** ---------- .> results: disabled://\n\t- *** --- * --- .> concurrency: 8 (prefork)\n\t-- ******* ----\n\t--- ***** ----- [queues]\n\t -------------- .> celery exchange=celery(direct) key=celery\n\n\t[2016-03-20 10:02:26,776: WARNING/MainProcess] celery@9d64bbd23e98 ready.\n\n\nStart/Stop/Build\n^^^^^^^^^^^^^^^^\nUse the make file to execute the most common tasks. It will execute ``docker-compose`` with the project name ``pm`` resulting in the container's name pattern\n``pm_*``.\n::\n\n\tdocker-build-base: - builds the base docker image\n\tdocker-build-web: - builds the web docker image\n\tdocker-up: - uses docker-compose to bring the containers up\n\tdocker-stop: - uses docker-compose to stop the containers\n\tdocker-ps: - runs docker-compose ps\n\nA fixture with a Django user ``admin`` and the password ``password`` is loaded automatically.\n\nTemplates\n---------\nAs the fronted is done by Angular, there is only a single template with very limited possibilities to adjust, ``price_monitor/angular_index_view.html``. You\ncan extends the template and adjust the following blocks.\n\nfooter\n~~~~~~\nIs rendered on the very bottom of the page. You have to use Bootstrap compatible markup, e.g.:\n::\n\n\t{% block footer %}\n\t\t
\n\t\t\t
Additonal footer
\n\t\t
\n\t{% endblock %}\n\nManagement Commands\n-------------------\n\nprice\\_monitor\\_batch\\_create\\_products\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nA management command to batch create a number of products by providing\ntheir ASIN:\n\n::\n\n python manage.py price_monitor_batch_create_products \n\nprice\\_monitor\\_recreate\\_product\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nRecreates a product with the given asin. If product already exists, it\nis deleted. *Only use in development!*\n\n::\n\n python manage.py price_monitor_recreate_product \n\nprice\\_monitor\\_search\n~~~~~~~~~~~~~~~~~~~~~~\n\nSearches for products at Amazon (not within the database) with the given\nASINs and prints out their details.\n\n::\n\n python manage.py price_monitor_search ...\n\nLoggers\n-------\n\nprice\\_monitor\n~~~~~~~~~~~~~~\n\nThe app uses the logger \"price\\_monitor\" to log all error and info\nmessages that are not included within a dedicated other logger. Please\nsee the `Django logging\ndocumentation `__\nfor how to setup loggers.\n\nprice\\_monitor.product\\_advertising\\_api\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nLogger for everything related to the ProductAdvertisingAPI wrapper class\nthat accesses the Amazon Product Advertising API through bottlenose.\n\nprice\\_monitor.utils\n~~~~~~~~~~~~~~~~~~~~\n\nLogger for the utils module.\n\nTests\n-----\n\nCoverage\n~~~~~~~~\n\n|codecov-graph|\n\nInternals\n---------\n\nModel graph\n~~~~~~~~~~~\n\n.. figure:: https://github.com/ponyriders/django-amazon-price-monitor/raw/master/models.png\n :alt: Model Graph\n\nProduct advertising api synchronization\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTask workflow\n^^^^^^^^^^^^^\n\n.. figure:: https://raw.githubusercontent.com/ponyriders/django-amazon-price-monitor/master/docs/price_monitor.product_advertising_api.tasks.png\n :alt: Image of Product advertising api synchronization workflow\n\nImage of Product advertising api synchronization workflow\n\n.. |Build Status| image:: https://travis-ci.org/ponyriders/django-amazon-price-monitor.svg?branch=master\n :target: https://travis-ci.org/ponyriders/django-amazon-price-monitor\n.. |codecov.io| image:: http://codecov.io/github/ponyriders/django-amazon-price-monitor/coverage.svg?branch=master\n :target: http://codecov.io/github/ponyriders/django-amazon-price-monitor?branch=master\n.. |codecov-graph| image:: http://codecov.io/github/ponyriders/django-amazon-price-monitor/branch.svg?branch=master\n.. |Requirements Status| image:: https://requires.io/github/ponyriders/django-amazon-price-monitor/requirements.svg?branch=master\n :target: https://requires.io/github/ponyriders/django-amazon-price-monitor/requirements/?branch=master\n.. |Stories in Ready| image:: https://badge.waffle.io/ponyriders/django-amazon-price-monitor.png?label=ready&title=Ready\n :target: https://waffle.io/ponyriders/django-amazon-price-monitor\n.. |Code issues| image:: https://www.quantifiedcode.com/api/v1/project/67cad011c255435388ef61f3b8e018a1/badge.svg\n :target: https://www.quantifiedcode.com/app/project/67cad011c255435388ef61f3b8e018a1\n.. |Landscape| image:: https://landscape.io/github/ponyriders/django-amazon-price-monitor/master/landscape.svg?style=flat\n :target: https://landscape.io/github/ponyriders/django-amazon-price-monitor/master\n :alt: Code Health\n\n\nChange Log\n==========\n\n`0.7 `__\n----------------------------------------------------------------------\n**Features:**\n\n- footer can now be extended through template block *footer*\n- product addition in frontend improved `#79 `__ (`PR#104 `__)\n- removed ``urlpatterns`` to please Django 1.10 deprecation\n- added docker setup for development (`PR#101 `__)\n- list products with audience rating 18+ in notification mail if region is Germany and product is also 18+ `#92 `__ (`PR#93 `__)\n\n**Bugfixes:**\n\n- now catching parsing errors of returned XML from Amazon API `#96 `__\n- fixed date range of displayed prices in price graph `#90 `__\n- fixed display of old prices of price graph `#97 `__\n- updated to latest ``python-dateutil`` version, somehow refs `#95 `__\n\n`0.6.1 `__\n--------------------------------------------------------------------------\n**Bugfixes:**\n\n- StartupTask fails with exception `#94 `__\n- Tests fail if today is the last day of November `#95 `__\n\n`0.6 `__\n----------------------------------------------------------------------\n**Features:**\n\n- djangorestframework 3.2 compatibility `#86 `__ (`PR#88 `__)\n\n**Bugfixes:**\n\n- FindProductsToSynchronizeTask is rescheduled twice or more `#89 `__ (`PR#91 `__)\n- Unable to parse 2015-02 to a datetime `#57 `__\n- lots of codestyle\n- minor bugfixes\n\n`0.5 `__\n----------------------------------------------------------------------\n**Features:**\n\n- Add link to PM frontend in notification email `#76 `__\n- Django 1.9 support (see `pull request #80 `__)\n\n**Bugfixes:**\n\n- FindProductsToSynchronizeTask is not always rescheduled `#61 `__\n- Font files not included in package `#75 `__\n- Identify as Amazon associate `#77 `__\n\n**Pull requests:**\n\n- Ensured that FindProductsToSynchronizeTask will be scheduled `#78 `__ (`dArignac `__)\n- Django 1.9 support `#80 `__ (`dArignac `__)\n\n`0.4 `__\n----------------------------------------------------------------------\n**Features:**\n\n- Deprecate old frontend `#73 `__\n- Make angular the default frontend `#70 `__\n\n**Bugfixes:**\n\n- Products with the same price over graph timespae have an empty graph `#67 `__\n- Notification of music albums `#33 `__\n- Add artist for audio products `#71 `__\n\n**Pull requests:**\n\n- Remove old frontend `#74 `__ (`dArignac `__)\n- Fix for empty graphs is packaged now #67 `#72 `__ (`mmrose `__)\n\n`0.3b2 `__\n--------------------------------------------------------------------------\n**Features:**\n\n- Prepare for automatic releases `#68 `__\n- Increase performance of Amazon calls `#41 `__\n- Django 1.8 compatibility `#32 `__\n- Data reduction and clean up `#27 `__\n- Limit graphs `#26 `__\n- Show highest and lowest price ever `#25 `__\n- Implement a full-usable frontend`#8 `__\n- Add more tests `#2 `__\n\n**Bugfixes:**\n\n- Graphs empty for some products `#65 `__\n- Don't show other peoples price limits `#63 `__\n- Graphs do not render correct values `#60 `__\n- 'NoneType' object has no attribute 'url' `#59 `__\n- Rename SynchronizeSingleProductTask `#56 `__\n- Sync on product creation not working `#55 `__\n- Clear old products and prices `#47 `__\n- Deleting a product subscription does not remove it from list view `#42 `__\n- Endless synchronization queue `#38 `__\n- Mark unavailable products `#14 `__\n\n**Closed issues:**\n\n- Unpin beautifulsoup4==4.3.2 `#50 `__\n\n**Pull requests:**\n\n- fixed access of unavilable image urls #59 `#66 `__ (`dArignac `__)\n- 63 subscriptions of other users `#64 `__ (`mmrose `__)\n- Mark unavailable products `#62 `__ (`mmrose `__)\n- Sync on product creation not working `#58 `__ (`dArignac `__)\n- Products are now requeried after deletion in list view #42 `#54 `__ (`mmrose `__)\n- Show highest and lowest price (#25) `#53 `__ (`mmrose `__)\n- Now the new FKs are also set during sync #25 `#52 `__ (`mmrose `__)\n- Adding datamigration for new min, max and current price FKs #25 `#51 `__ (`mmrose `__)\n- Performance improvements on product API view `#49 `__ (`mmrose `__)\n- Remove unused data`#48 `__ (`dArignac `__)\n- Amazon query performance increase `#46 `__ (`dArignac `__)\n- Django 1.8 compatibility `#45 `__ (`dArignac `__)\n- Bugfix: Endless queue `#40 `__ (`dArignac `__)\n- waffle.io Badge `#37 `__ (`waffle-iron `__)\n\nPre-Releases\n------------\n- unfortunately everything before was not packaged and released nor tracked.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ponyriders/django-amazon-price-monitor", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-amazon-price-monitor", "package_url": "https://pypi.org/project/django-amazon-price-monitor/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-amazon-price-monitor/", "project_urls": { "Homepage": "https://github.com/ponyriders/django-amazon-price-monitor" }, "release_url": "https://pypi.org/project/django-amazon-price-monitor/0.7/", "requires_dist": [ "Django (>=1.8,<1.10)", "beautifulsoup4", "bottlenose (>=0.6.2)", "celery (>=3)", "python-dateutil (>=2.5.1)", "djangorestframework (>=3.3)", "pygal (>=2.0.7)", "lxml", "CairoSVG", "tinycss", "cssselect" ], "requires_python": "", "summary": "Monitors prices of Amazon products via Product Advertising API", "version": "0.7" }, "last_serial": 2045141, "releases": { "0.3b1": [], "0.3b2": [ { "comment_text": "", "digests": { "md5": "1431dd557d9e420d81e655e1fa04abd4", "sha256": "4e468e548f12b8f8f96021e8b5115dc5a1a2172dd9a13b893f8aed7d458af12c" }, "downloads": -1, "filename": "django_amazon_price_monitor-0.3b2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1431dd557d9e420d81e655e1fa04abd4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 235528, "upload_time": "2015-09-27T06:54:23", "url": "https://files.pythonhosted.org/packages/dc/c8/5e9ee6b34176d97e483afa9a8d0caa6886dc9b777925485e6419404811bd/django_amazon_price_monitor-0.3b2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "48ca3d7e4d8c074831d22d0bcdb9751a", "sha256": "3fe4e76dc0752203cd00babd9b303e6c0f3efdc55ca35add65543afd510b6c3d" }, "downloads": -1, "filename": "django-amazon-price-monitor-0.3b2.tar.gz", "has_sig": false, "md5_digest": "48ca3d7e4d8c074831d22d0bcdb9751a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 206598, "upload_time": "2015-09-27T06:54:29", "url": "https://files.pythonhosted.org/packages/82/ad/07d6215cb34640de98628600399a27ba6898b99d41083e5e45ce8bc8248d/django-amazon-price-monitor-0.3b2.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "85f39b72a9d58e32c57b09a02372bfec", "sha256": "a34881f9c54466cffbe47e8ff5565cd99fdb79553444c277ccb9b096d0bef3dd" }, "downloads": -1, "filename": "django_amazon_price_monitor-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "85f39b72a9d58e32c57b09a02372bfec", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 197560, "upload_time": "2015-10-26T20:09:47", "url": "https://files.pythonhosted.org/packages/65/91/04f9f805050104622caf939d08aace3ae85c08c81635c717477696840101/django_amazon_price_monitor-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "01e6f43a11360c736967ab27f3d38f95", "sha256": "cca30f5c6cb89b6fc02ecff5470f6a73a837fd6b42ffbb52f072e29766f57a35" }, "downloads": -1, "filename": "django-amazon-price-monitor-0.4.tar.gz", "has_sig": false, "md5_digest": "01e6f43a11360c736967ab27f3d38f95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 172480, "upload_time": "2015-10-26T20:09:50", "url": "https://files.pythonhosted.org/packages/2e/4f/d6954aa3a16100d3a9ce36a5948afb4ae9d9b66d39f52e59fe88670bd0e8/django-amazon-price-monitor-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "e03903ffe504ca6d4fbdb7dadc0d47f9", "sha256": "898e8a67fc636d6a37a4886275cf60cb45f88012e1304babb060fad6012f0f1e" }, "downloads": -1, "filename": "django_amazon_price_monitor-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e03903ffe504ca6d4fbdb7dadc0d47f9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 267102, "upload_time": "2015-12-14T16:46:25", "url": "https://files.pythonhosted.org/packages/a1/26/372e34c5037fa90f1ea1002c7cace311189600af76fe23588377c00ed79b/django_amazon_price_monitor-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2f3ddb117874d751938fa7da1885e540", "sha256": "0703dc2f6ef94fc7ed9b604a87a46dfed5d73eb1286f2c1560fd320f71c0506d" }, "downloads": -1, "filename": "django-amazon-price-monitor-0.5.tar.gz", "has_sig": false, "md5_digest": "2f3ddb117874d751938fa7da1885e540", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 245816, "upload_time": "2015-12-14T16:46:32", "url": "https://files.pythonhosted.org/packages/9a/93/e2ad98e0d0ec238ed6b9d707ed8442f6520fa835bd2da897f52c46da3064/django-amazon-price-monitor-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "dd546a2613933ac7b183521f0145404f", "sha256": "9969425faa0724889bdcc122304eb40e1b8cc0aaecd512cf742f435a0dade6ed" }, "downloads": -1, "filename": "django_amazon_price_monitor-0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dd546a2613933ac7b183521f0145404f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 268066, "upload_time": "2016-01-07T20:00:37", "url": "https://files.pythonhosted.org/packages/67/a0/b3b77781bb8970efe16a4b8a0501c954170aeee8d8da0c32158b3ab4cae2/django_amazon_price_monitor-0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc5137cfcab2365bbed948f6e1c77cfc", "sha256": "e1ee2c6e43ce6221d0492c3941c1f700bed2499aa51fd6786bb2a0402fe49b3d" }, "downloads": -1, "filename": "django-amazon-price-monitor-0.6.tar.gz", "has_sig": false, "md5_digest": "fc5137cfcab2365bbed948f6e1c77cfc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 246518, "upload_time": "2016-01-07T20:00:50", "url": "https://files.pythonhosted.org/packages/a9/97/4f13c31d5bf3bd4dc0588f1dd757ced261640e7d13c88d8e38b74c4dd196/django-amazon-price-monitor-0.6.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "417ceccf43cd9d2911fc6d5f424a375b", "sha256": "64ac848bb6c0dac85327bfa3bfc60467c006324f0a6b03503f211b89a501649c" }, "downloads": -1, "filename": "django_amazon_price_monitor-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "417ceccf43cd9d2911fc6d5f424a375b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 268394, "upload_time": "2016-01-31T08:42:50", "url": "https://files.pythonhosted.org/packages/72/d5/134910b9a7c3f8bf07011c08ed7bebe03187e4f52310456535d0573b80e8/django_amazon_price_monitor-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1dc11d4508195ddc12fd7c16730b09b8", "sha256": "9fd9f534b6f99cfadff4743b1a5add1e50df3ea338a8e8348dd3f8be1f7942b3" }, "downloads": -1, "filename": "django-amazon-price-monitor-0.6.1.tar.gz", "has_sig": false, "md5_digest": "1dc11d4508195ddc12fd7c16730b09b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 247103, "upload_time": "2016-01-31T08:42:57", "url": "https://files.pythonhosted.org/packages/b2/e8/f7c63e27acc3eab173329e54c38d33e783f05af9024dd106f1a5488edbcc/django-amazon-price-monitor-0.6.1.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "a7448ac2c115a6d595f58e55c3256f01", "sha256": "6ceae40b81684d7d35e64d570ecdd23b5e88e61c3c75034fe437bf1d352317fb" }, "downloads": -1, "filename": "django_amazon_price_monitor-0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a7448ac2c115a6d595f58e55c3256f01", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 276872, "upload_time": "2016-04-04T17:39:07", "url": "https://files.pythonhosted.org/packages/47/46/008a347bdd7da079fa3e9ced76fef3b2c76e86394de39479fda014dce391/django_amazon_price_monitor-0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "df84ea4c7e4e0ec70a0edd2d9776dbdc", "sha256": "762fab17b5da4b04f43f175ebfb4a0370c7168a84d7f9ba157ce1459ea2f71ad" }, "downloads": -1, "filename": "django-amazon-price-monitor-0.7.tar.gz", "has_sig": false, "md5_digest": "df84ea4c7e4e0ec70a0edd2d9776dbdc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 255862, "upload_time": "2016-04-04T17:39:24", "url": "https://files.pythonhosted.org/packages/ff/58/783d767341c56ec8db82d2df94f09896acc58cf7d93f7bab178a9e20f699/django-amazon-price-monitor-0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a7448ac2c115a6d595f58e55c3256f01", "sha256": "6ceae40b81684d7d35e64d570ecdd23b5e88e61c3c75034fe437bf1d352317fb" }, "downloads": -1, "filename": "django_amazon_price_monitor-0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a7448ac2c115a6d595f58e55c3256f01", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 276872, "upload_time": "2016-04-04T17:39:07", "url": "https://files.pythonhosted.org/packages/47/46/008a347bdd7da079fa3e9ced76fef3b2c76e86394de39479fda014dce391/django_amazon_price_monitor-0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "df84ea4c7e4e0ec70a0edd2d9776dbdc", "sha256": "762fab17b5da4b04f43f175ebfb4a0370c7168a84d7f9ba157ce1459ea2f71ad" }, "downloads": -1, "filename": "django-amazon-price-monitor-0.7.tar.gz", "has_sig": false, "md5_digest": "df84ea4c7e4e0ec70a0edd2d9776dbdc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 255862, "upload_time": "2016-04-04T17:39:24", "url": "https://files.pythonhosted.org/packages/ff/58/783d767341c56ec8db82d2df94f09896acc58cf7d93f7bab178a9e20f699/django-amazon-price-monitor-0.7.tar.gz" } ] }