{ "info": { "author": "Mozilla Services", "author_email": "services-dev@mozilla.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application" ], "description": "Reading List\n============\n\n|travis| |master-coverage| |readthedocs|\n\n.. |travis| image:: https://travis-ci.org/mozilla-services/readinglist.svg?branch=master\n :target: https://travis-ci.org/mozilla-services/readinglist\n\n.. |readthedocs| image:: https://readthedocs.org/projects/readinglist/badge/?version=latest\n :target: http://readinglist.readthedocs.org/en/latest/\n :alt: Documentation Status\n\n.. |master-coverage| image::\n https://coveralls.io/repos/mozilla-services/readinglist/badge.png?branch=master\n :alt: Coverage\n :target: https://coveralls.io/r/mozilla-services/readinglist\n\n*Reading List* is a service that aims to synchronize a list of articles URLs\nbetween a set of devices owned by a same account.\n\n* `Online documentation `_\n* `Issue tracker `_\n* `Contributing `_\n\n\nChangelog\n=========\n\nThis document describes changes between each past release.\n\n2.0.0 (2015-07-22)\n------------------\n\nUpgraded to Cliquet 2.3+.\n\n**Breaking changes**\n\n- Now requires PostgreSQL 9.4+\n- Endpoints now expect articles to be posted in a ``data`` attribute\n- Endpoints responses now contain a ``data`` attribute\n- Endpoints switched from ``If-Modified-Since`` and ``If-Unmodified-Since``\n to Etags\n\n\n1.7.0 (2015-04-15)\n------------------\n\n**New feature**\n\n- Article ``title`` now allowed to be empty or null (#250 and #253)\n (Original https://bugzilla.mozilla.org/show_bug.cgi?id=1152915)\n\n**Bug fixes**\n\n- Fix ``stored_on`` not being forced on creation (fixes #215)\n\n**Internal changes**\n\n- Enabled Coveralls with failing tests if coverage less than 100%\n\n\n1.6.0 (2015-04-10)\n------------------\n\n**Deployment instructions**\n\nSome changes were introduced in database schema. Run schema migration command\nbefore starting the application:\n\n::\n\n cliquet --ini production.ini migrate\n\n**New features**\n\n- Add more info in heartbeat (fixes #229)\n- Clarify conflict docs (#244)\n- Clarify data model docs (#247)\n- Add PostgreSQL schema migration system (mozilla-services/cliquet#139)\n\nSee `every features brought by Cliquet 1.7 `_\n\n**Bug fixes**\n\n- Fix login prompt when Basic Auth is disabled (#237)\n- Fix random IndexError in load tests (#238)\n- Fix smoke tests configuration reading\n- Fix Heka logging format of objects (#199)\n- Fix performance of record insertion using ordered index (mozilla-services/cliquet#138)\n- Fix 405 errors not JSON formatted (mozilla-services/cliquet#88)\n\nSee `every bug fixes brought by Cliquet 1.7 `_\n\n\n1.5.0 (2015-03-30)\n------------------\n\n**New features**\n\n- Split schema initialization from application startup, using a command-line\n tool.\n\n::\n\n cliquet --ini production.ini init\n\n\n**Bug fixes**\n\n- Fix documentation about WSGI and Sentry\n- Fix connection pool no being shared between cache and storage (mozilla-services/cliquet#176)\n- Default connection pool size to 10 (instead of 50) (mozilla-services/cliquet#176)\n- Warn if PostgreSQL session has not UTC timezone (mozilla-services/cliquet#177)\n\n**Internal changes**\n\n- Deprecated ``cliquet.storage_pool_maxconn`` and ``cliquet.cache_pool_maxconn``\n settings (renamed to ``cliquet.storage_pool_size`` and ``cliquet.cache_pool_size``)\n\n\n1.4.0 (2015-03-27)\n------------------\n\n**New features**\n\n- Smoke test of FxA authentication using Loads (#220)\n- Mesure calls on the authentication policy (mozilla-services/cliquet#167)\n- Force default pagination to 100 if not set in settings (#214)\n- Add documentation about setting up Sentry loggers (#227)\n\n**Breaking changes**\n\n- Prefix statsd metrics with the value of `cliquet.statsd_prefix` or\n `cliquet.project_name` (mozilla-services/cliquet#162)\n- `http_scheme` setting has been replaced by `cliquet.http_scheme` and\n `cliquet.http_host` was introduced (mozilla-services/cliquet#151, mozilla-services/cliquet#166)\n- URL in the hello view now has version prefix (mozilla-services/cliquet#165)\n\n**Bug fixes**\n\n- Fix changing read position (#213)\n- Fix some PostgreSQL connection bottlenecks (mozilla-services/cliquet#170)\n- Pull monitoring dependencies during install (#218)\n\n**Internal changes**\n\n- Update of PyFxA to get it working with gevent monkey patching (mozilla-services/cliquet#168)\n\n\n1.3.0 (2015-03-25)\n------------------\n\n**Deployment instructions**\n\nUntil the database schema migration system is released (mozilla-services/cliquet#139),\nchanges on schema have to be applied manually:\n\n::\n\n ALTER FUNCTION as_epoch(TIMESTAMP) IMMUTABLE;\n CREATE INDEX idx_records_last_modified_epoch ON records(as_epoch(last_modified));\n CREATE INDEX idx_deleted_last_modified_epoch ON deleted(as_epoch(last_modified));\n\n**New features**\n\n- Add setting to enable to asynchronous PostgreSQL using `Psycogreen `_.\n (*default: disabled*). See installation documentation for more details on this.\n- Add ability to execute only action in loads tests using the ``LOAD_ACTION``\n environment variable. See contributing documentation for more details (#208).\n- Add new load tests with several kinds of batch operations (#204)\n\n**Bug fixes**\n\n- Fix pagination URL in Next-page headers (fixes #210)\n- Fix regression on records URL unicity when using ujson (#205)\n- Fix hashing of user_id for BasicAuth (mozilla-services/cliquet#128)\n- Force PostgreSQl session timezone to UTC (mozilla-services/cliquet#122)\n- Make sure the `paginate_by` setting overrides the passed `limit`\n argument (mozilla-services/cliquet#129)\n- Fix limit comparison under Python3 (mozilla-services/cliquet#143)\n- Do not serialize using JSON if not necessary (mozilla-services/cliquet#131)\n- Fix crash of classic logger with unicode (mozilla-services/cliquet#142)\n- Fix crash of CloudStorage backend when remote returns 500 (mozilla-services/cliquet#142)\n- Fix behaviour of CloudStorage with backslashes in querystring (mozilla-services/cliquet#142)\n- Fix python3.4 segmentation fault (mozilla-services/cliquet#142)\n- Add missing port in Next-Page header (mozilla-services/cliquet#147)\n\n\n**Internal changes**\n\n- Use postgres cache in loads tests (#203)\n- Use ujson again, it was removed in the 1.3.2 release (#132)\n- Add index for as_epoch(last_modified) (#130). Please add the following\n statements to SQL for the migration::\n- Prevent fetching to many records for one user collection (#130)\n- Use UPSERT for the heartbeat (#141)\n- Improve tests of basic auth (#128)\n\n\n1.2.0 (2015-03-20)\n------------------\n\n**New features**\n\n- Add PostgreSQL connection pooling, with new settings\n ``cliquet.storage_pool_maxconn`` and ``cliquet.cache_pool_maxconn``\n (*Default: 50*) (mozilla-services/cliquet#112)\n- Add `StatsD `_ support,\n enabled with ``cliquet.statsd_url = udp://server:port`` (mozilla-services/cliquet#114)\n- Add `Sentry `_ support,\n enabled with ``cliquet.sentry_url = http://user:pass@server/1`` (mozilla-services/cliquet#110)\n\n**Bug fixes**\n\n- Fix FxA verification cache not being used (mozilla-services/cliquet#103)\n- Fix heartbeat database check (mozilla-services/cliquet#109)\n- Fix PATCH endpoint crash if request has no body (mozilla-services/cliquet#115)\n\n**Internal changes**\n\n- Switch to `ujson `_ for JSON\n de/serialization optimizations (mozilla-services/cliquet#108)\n- Use async connections for psycopg (#201)\n- Imrpove the documentation layout (#200)\n\n\n1.1.0 (2015-03-18)\n------------------\n\n**Breaking changes**\n\n* `cliquet.storage.postgresql` now uses UUID as record primary key (mozilla-services/cliquet#70)\n* Settings ``cliquet.session_backend`` and ``cliquet.session_url`` were\n renamed ``cliquet.cache_backend`` and ``cliquet.cache_url`` respectively.\n* FxA user ids are not hashed anymore (mozilla-services/cliquet#82)\n* Setting ``cliquet.retry_after`` was renamed ``cliquet.retry_after_seconds``\n* OAuth2 redirect url now requires to be listed in\n ``fxa-oauth.webapp.authorized_domains`` (e.g. ``*.mozilla.com``)\n* Batch are now limited to 25 requests by default (mozilla-services/cliquet#90)\n* OAuth relier has been disabled by default (#193)\n\n**New features**\n\n* Every setting can be specified via an environment variable\n (e.g. ``cliquet.storage_url`` with ``CLIQUET_STORAGE_URL``)\n* Logging now relies on `structlog `_ (mozilla-services/cliquet#78)\n* Logging output can be configured to stream JSON (mozilla-services/cliquet#78)\n* New cache backend for PostgreSQL (mozilla-services/cliquet#44)\n* Documentation was improved on various aspects (mozilla-services/cliquet#64, mozilla-services/cliquet#86)\n* Handle every backend errors and return 503 errors (mozilla-services/cliquet#21)\n* State verification for OAuth2 dance now expires after 1 hour (mozilla-services/cliquet#83)\n* Add the preview field for an article (#156)\n* Setup the readinglist OAuth scope (#16)\n* Add a uwsgi file (#180)\n\n**Bug fixes**\n\n* FxA OAuth views errors are now JSON formatted (mozilla-services/cliquet#67)\n* Prevent error when pagination token has bad format (mozilla-services/cliquet#72)\n* List of CORS exposed headers were fixed in POST on collection (mozilla-services/cliquet#54)\n* Fix environment variables not overriding configuration (mozilla-services/cliquet#100)\n* Got rid of custom *CAST* in PostgreSQL storage backend to prevent installation\n errors without superuser (ref #174, mozilla-services/cliquet#99)\n\n\n1.0 (2015-03-03)\n----------------\n\n**Breaking changes**\n\n- Most configuration entries were renamed, see `config/readinglist.ini`\n example to port your configuration\n- Status field was removed, archived and deleted fields were added\n (requires a database flush.)\n- Remove Python 2.6 support\n\n**New features**\n\n- Add the /fxa-oauth/params endpoint\n- Add the DELETE /articles endpoint\n (Needs cliquet.delete_collection_enabled configuration)\n- Add the Response-Behavior header on PATCH /articles\n- Add HTTP requests / responses examples in the documentation\n- Use Postgresql as the default database backend\n\n**Internal changes**\n\n- Main code base was split into a separate project\n `Cliquet `_\n- Perform continuated pagination in loadtests\n- Use PostgreSQL for loadtests\n\n\n0.2.2 (2015-02-13)\n------------------\n\n**Bug fixes**\n\n- Fix CORS preflight request permissions (PR #119)\n\n\n0.2.1 (2015-02-11)\n------------------\n\n**Breaking changes**\n\n- Internal user ids for FxA are now prefixed, all existing records\n will be lost (refs #109)\n\n**Bug fixes**\n\n- Fix CORS headers on validation error responses (ref #104)\n- Fix handling of defaults in batch requests (ref #111, #112)\n\n\n0.2 (2015-02-09)\n----------------\n\n**Breaking changes**\n\n- PUT endpoint was disabled (ref #42)\n- ``_id`` field was renamed to ``id`` (ref PR #91)\n- FxA now requires a redirection URL (ref PR #69)\n\n**New features**\n\n- URLs uniques by user (ref #20)\n- Handle conflicts responses (ref #45)\n- Conditional changes for some articles attributes (ref #6)\n- Batching support (ref #2)\n- Pagination support (ref #25)\n- Online documentation available at http://readinglist.readthedocs.org (ref PR #73)\n- Basic Auth nows support any user/password combination (ref PR #78)\n\n**Bug fixes**\n\n- ``marked_read_by`` was ignored on PATCH (ref PR #72)\n- Timestamp was not incremented on DELETE (ref PR #95)\n- Fix number of bugs regarding support of CORS in error views (ref PR #105)\n- Previous Basic Auth could impersonate FxA user (ref PR #78)\n\n\n0.1 (2015-01-30)\n----------------\n\n- Allow Cors (#67)\n- Log incomming request to the console (#65)\n- Add timestamp for 304 and 412 response (#40)\n- Add time vector to GET /articles and GET /articles/ (#4)\n- Preconditions Headers for Update and Creation (#60)\n- Provide number of items in headers of GET /articles (#39)\n- Check for filter values (#58)\n- Handle article title length (#37)\n- Support min, max and no keywords filters (#43)\n- Prevent to modify read-only fields (#26)\n- Filtering and sort querystring (#44)\n- Redis storage (#50)\n- Handle errors (#24 - #49)\n- Add loadtests (#47)\n- Handle API version in URL (#33)", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": "web services", "license": "Apache License (2.0)", "maintainer": null, "maintainer_email": null, "name": "readinglist", "package_url": "https://pypi.org/project/readinglist/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/readinglist/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/readinglist/2.0.0/", "requires_dist": null, "requires_python": null, "summary": "readinglist", "version": "2.0.0" }, "last_serial": 1644521, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "3cade0c9451aee7f6b340b2ff320213d", "sha256": "a0c3ba5a158c0b0c7a6e3bd9308a0eb169a8b2875c71e0d3548e01087a21ea51" }, "downloads": -1, "filename": "readinglist-0.2.zip", "has_sig": false, "md5_digest": "3cade0c9451aee7f6b340b2ff320213d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54861, "upload_time": "2015-02-09T16:08:41", "url": "https://files.pythonhosted.org/packages/f7/8e/9f2de4e4daf56817718f834ba4473e89146027a5717533902dd961b23010/readinglist-0.2.zip" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "bead614258f39dd3998954c3a03b2d81", "sha256": "d15bad56198ef934f6b74f8399af41e4b29a4afe319c87ffa81ca2e806c50f2f" }, "downloads": -1, "filename": "readinglist-1.0.zip", "has_sig": false, "md5_digest": "bead614258f39dd3998954c3a03b2d81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17576, "upload_time": "2015-03-03T12:40:57", "url": "https://files.pythonhosted.org/packages/8d/48/387520e04c7ea9fcabc6dfd66b8c1167f0f192636ad98b34ceb7b1e18c18/readinglist-1.0.zip" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "394d655ee830b472afd4b8f10f186176", "sha256": "1aad27a27864faaf12a57acb9ff87870f9bb3779cafdbc8ec4b2561b8047d00a" }, "downloads": -1, "filename": "readinglist-1.1.0.tar.gz", "has_sig": false, "md5_digest": "394d655ee830b472afd4b8f10f186176", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16370, "upload_time": "2015-03-18T22:16:53", "url": "https://files.pythonhosted.org/packages/4d/db/388882a282ac773a55348ee0a1817520bfab5e44a1e4eb452bc31f0b357f/readinglist-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "a4d25b05268660f684746f0c7c46a2d4", "sha256": "c43ef5b6cd2071ccbc2c11c5534f16026ecdfb342695203f8d03fac4e980b00b" }, "downloads": -1, "filename": "readinglist-1.2.0.zip", "has_sig": false, "md5_digest": "a4d25b05268660f684746f0c7c46a2d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19918, "upload_time": "2015-03-19T23:12:11", "url": "https://files.pythonhosted.org/packages/07/5f/d1986e5238caae0707164855e71098904cf569b3f55f37d58fcc53be24be/readinglist-1.2.0.zip" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "ffd7a8bd7536a5739a196ce0c56cbf6b", "sha256": "2bcf946464fb613aea742b7e30816c2d61ff56e3a40fc03d2f324404c01ea830" }, "downloads": -1, "filename": "readinglist-1.3.0.tar.gz", "has_sig": false, "md5_digest": "ffd7a8bd7536a5739a196ce0c56cbf6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15348, "upload_time": "2015-03-25T22:22:57", "url": "https://files.pythonhosted.org/packages/83/f2/c41322dd86a32d5227c7c69a3b7480652e1c1cc3b1b77b520597a1bec78d/readinglist-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "6b168e9f818feccaf46c3e9c165e5f7b", "sha256": "540a4c6ffeac819e64528859113adb96b37bcb09a81ed1560550341706ec788f" }, "downloads": -1, "filename": "readinglist-1.4.0.zip", "has_sig": false, "md5_digest": "6b168e9f818feccaf46c3e9c165e5f7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23543, "upload_time": "2015-03-27T17:32:21", "url": "https://files.pythonhosted.org/packages/4b/6c/1c6196f4928de32146764a211399ba0fb2b3b99c5888b6f1e2dd8cd8af00/readinglist-1.4.0.zip" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "f7962607960ba45568c02527a381e263", "sha256": "ec35c920bf3b0d87292516c6b889691367ce445532acf892d80607489cc1e6e2" }, "downloads": -1, "filename": "readinglist-1.5.0.tar.gz", "has_sig": false, "md5_digest": "f7962607960ba45568c02527a381e263", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16739, "upload_time": "2015-03-30T16:33:30", "url": "https://files.pythonhosted.org/packages/6e/d6/1d5b0f3dd961ae87dc8c2e6b3f15a6e40fe60827e60d68bbc2289512080d/readinglist-1.5.0.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "9c7e0fb7e8a26e270800e0a3ce0b16f7", "sha256": "0911d20eb493ed778989a37d15bfdbab4bec7de3e831fadf3a220ba8d373e53f" }, "downloads": -1, "filename": "readinglist-1.6.0.tar.gz", "has_sig": false, "md5_digest": "9c7e0fb7e8a26e270800e0a3ce0b16f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17263, "upload_time": "2015-04-10T16:18:22", "url": "https://files.pythonhosted.org/packages/b1/80/e2d87946363eb41991991ad2a3ea4a7ad468cdf054f25cd5fd5f0f17efdb/readinglist-1.6.0.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "af4194d3383922a32ecc75ccedb1789e", "sha256": "86cadba191182b2342d02a9a0793aca6147c2c27f6ebba37a0590d49c15e31fd" }, "downloads": -1, "filename": "readinglist-1.7.0.tar.gz", "has_sig": false, "md5_digest": "af4194d3383922a32ecc75ccedb1789e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18244, "upload_time": "2015-04-14T22:56:15", "url": "https://files.pythonhosted.org/packages/53/13/0afb3c023c70f2a03589894c7fa8acec7726ba10a844939b3364d7916315/readinglist-1.7.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "6e05e2cf8678c8a2beb4d586f76d2727", "sha256": "b4498eb316471754dbe9a427c951ca85048e9003699d2adf86c14c711c45f04a" }, "downloads": -1, "filename": "readinglist-2.0.0.zip", "has_sig": false, "md5_digest": "6e05e2cf8678c8a2beb4d586f76d2727", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25526, "upload_time": "2015-07-22T09:23:27", "url": "https://files.pythonhosted.org/packages/36/64/3a835d3b9000a31aace92e61655a01063a32326a078ad22fcdbf0f5970df/readinglist-2.0.0.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6e05e2cf8678c8a2beb4d586f76d2727", "sha256": "b4498eb316471754dbe9a427c951ca85048e9003699d2adf86c14c711c45f04a" }, "downloads": -1, "filename": "readinglist-2.0.0.zip", "has_sig": false, "md5_digest": "6e05e2cf8678c8a2beb4d586f76d2727", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25526, "upload_time": "2015-07-22T09:23:27", "url": "https://files.pythonhosted.org/packages/36/64/3a835d3b9000a31aace92e61655a01063a32326a078ad22fcdbf0f5970df/readinglist-2.0.0.zip" } ] }