Hello community, here is the log from the commit of package python-tinydb for openSUSE:Factory checked in at 2019-09-17 13:39:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-tinydb (Old) and /work/SRC/openSUSE:Factory/.python-tinydb.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-tinydb" Tue Sep 17 13:39:07 2019 rev:3 rq:731291 version:3.14.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-tinydb/python-tinydb.changes 2019-06-03 18:55:37.320423254 +0200 +++ /work/SRC/openSUSE:Factory/.python-tinydb.new.7948/python-tinydb.changes 2019-09-17 13:39:07.249826484 +0200 @@ -1,0 +2,8 @@ +Mon Sep 16 13:23:27 UTC 2019 - Tomáš Chvátal <[email protected]> + +- Update to 3.14.1: + * More tes fixes + * Deprecate ujson support + * Fixed various deprecation warnings + +------------------------------------------------------------------- Old: ---- tinydb-3.13.0.tar.gz New: ---- tinydb-3.14.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-tinydb.spec ++++++ --- /var/tmp/diff_new_pack.sIYv6o/_old 2019-09-17 13:39:07.821826393 +0200 +++ /var/tmp/diff_new_pack.sIYv6o/_new 2019-09-17 13:39:07.821826393 +0200 @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-tinydb -Version: 3.13.0 +Version: 3.14.1 Release: 0 Summary: A document-oriented database License: MIT @@ -28,7 +28,6 @@ BuildRequires: %{python_module PyYAML} BuildRequires: %{python_module pytest-runner} BuildRequires: %{python_module setuptools} -BuildRequires: %{python_module ujson} BuildRequires: dos2unix BuildRequires: fdupes BuildRequires: python-rpm-macros ++++++ tinydb-3.13.0.tar.gz -> tinydb-3.14.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/PKG-INFO new/tinydb-3.14.1/PKG-INFO --- old/tinydb-3.13.0/PKG-INFO 2019-03-16 14:41:29.000000000 +0100 +++ new/tinydb-3.14.1/PKG-INFO 2019-09-13 23:06:21.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: tinydb -Version: 3.13.0 +Version: 3.14.1 Summary: TinyDB is a tiny, document oriented database optimized for your happiness :) Home-page: https://github.com/msiemens/tinydb Author: Markus Siemens @@ -35,8 +35,8 @@ TinyDB is: - - **tiny:** The current source code has 1200 lines of code (with about 40% - documentation) and 1000 lines of tests. For comparison: Buzhug_ has about 2500 + - **tiny:** The current source code has 1600 lines of code (with about 33% + documentation) and 1800 lines of tests. For comparison: Buzhug_ has about 2500 lines of code (w/o tests), CodernityDB_ has about 7000 lines of code (w/o tests). @@ -50,7 +50,7 @@ e.g. `PyMongo <http://api.mongodb.org/python/current/>`_) nor any dependencies from PyPI. - - **works on Python 2.7 and 3.3 – 3.6 and PyPy:** TinyDB works on all modern + - **works on Python 2.7 and 3.3 – 3.7 and PyPy:** TinyDB works on all modern versions of Python and PyPy. - **powerfully extensible:** You can easily extend TinyDB by writing new @@ -135,14 +135,14 @@ 4. Send a pull request and bug the maintainer until it gets merged and published ☺ - .. |Build Status| image:: http://img.shields.io/travis/msiemens/tinydb.svg?style=flat-square - :target: https://travis-ci.org/msiemens/tinydb + .. |Build Status| image:: https://img.shields.io/azure-devops/build/msiemens/3e5baa75-12ec-43ac-9728-89823ee8c7e2/2.svg?style=flat-square + :target: https://dev.azure.com/msiemens/github/_build?definitionId=2 .. |Coverage| image:: http://img.shields.io/coveralls/msiemens/tinydb.svg?style=flat-square :target: https://coveralls.io/r/msiemens/tinydb .. |Version| image:: http://img.shields.io/pypi/v/tinydb.svg?style=flat-square :target: https://pypi.python.org/pypi/tinydb/ .. _Buzhug: http://buzhug.sourceforge.net/ - .. _CodernityDB: http://labs.codernity.com/codernitydb/ + .. _CodernityDB: https://github.com/perchouli/codernitydb .. _MongoDB: http://mongodb.org/ Keywords: database nosql @@ -161,6 +161,7 @@ Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Operating System :: OS Independent diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/README.rst new/tinydb-3.14.1/README.rst --- old/tinydb-3.13.0/README.rst 2019-01-07 09:59:07.000000000 +0100 +++ new/tinydb-3.14.1/README.rst 2019-07-03 21:34:20.000000000 +0200 @@ -23,8 +23,8 @@ TinyDB is: -- **tiny:** The current source code has 1200 lines of code (with about 40% - documentation) and 1000 lines of tests. For comparison: Buzhug_ has about 2500 +- **tiny:** The current source code has 1600 lines of code (with about 33% + documentation) and 1800 lines of tests. For comparison: Buzhug_ has about 2500 lines of code (w/o tests), CodernityDB_ has about 7000 lines of code (w/o tests). @@ -38,7 +38,7 @@ e.g. `PyMongo <http://api.mongodb.org/python/current/>`_) nor any dependencies from PyPI. -- **works on Python 2.7 and 3.3 – 3.6 and PyPy:** TinyDB works on all modern +- **works on Python 2.7 and 3.3 – 3.7 and PyPy:** TinyDB works on all modern versions of Python and PyPy. - **powerfully extensible:** You can easily extend TinyDB by writing new @@ -123,12 +123,12 @@ 4. Send a pull request and bug the maintainer until it gets merged and published ☺ -.. |Build Status| image:: http://img.shields.io/travis/msiemens/tinydb.svg?style=flat-square - :target: https://travis-ci.org/msiemens/tinydb +.. |Build Status| image:: https://img.shields.io/azure-devops/build/msiemens/3e5baa75-12ec-43ac-9728-89823ee8c7e2/2.svg?style=flat-square + :target: https://dev.azure.com/msiemens/github/_build?definitionId=2 .. |Coverage| image:: http://img.shields.io/coveralls/msiemens/tinydb.svg?style=flat-square :target: https://coveralls.io/r/msiemens/tinydb .. |Version| image:: http://img.shields.io/pypi/v/tinydb.svg?style=flat-square :target: https://pypi.python.org/pypi/tinydb/ .. _Buzhug: http://buzhug.sourceforge.net/ -.. _CodernityDB: http://labs.codernity.com/codernitydb/ +.. _CodernityDB: https://github.com/perchouli/codernitydb .. _MongoDB: http://mongodb.org/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/setup.py new/tinydb-3.14.1/setup.py --- old/tinydb-3.13.0/setup.py 2018-11-17 17:35:14.000000000 +0100 +++ new/tinydb-3.14.1/setup.py 2019-07-03 21:34:59.000000000 +0200 @@ -49,6 +49,7 @@ "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Operating System :: OS Independent" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/tests/test_queries.py new/tinydb-3.14.1/tests/test_queries.py --- old/tinydb-3.13.0/tests/test_queries.py 2018-09-13 12:29:14.000000000 +0200 +++ new/tinydb-3.14.1/tests/test_queries.py 2019-07-03 21:34:20.000000000 +0200 @@ -363,3 +363,20 @@ assert repr(Fruit) == "Query()" assert repr(Fruit.type == 'peach') == "QueryImpl('==', ('type',), 'peach')" + + +def test_subclass(): + # Test that a new query test method in a custom subclass is properly usable + class MyQueryClass(Query): + def equal_double(self, rhs): + return self._generate_test( + lambda value: value == rhs*2, + ('equal_double', self._path, rhs) + ) + + query = MyQueryClass().val.equal_double('42') + + assert query({'val': '4242'}) + assert not query({'val': '42'}) + assert not query({'': None}) + assert hash(query) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/tests/test_storages.py new/tinydb-3.14.1/tests/test_storages.py --- old/tinydb-3.13.0/tests/test_storages.py 2018-10-30 09:55:11.000000000 +0100 +++ new/tinydb-3.14.1/tests/test_storages.py 2019-07-03 21:34:20.000000000 +0200 @@ -13,6 +13,13 @@ random.seed() +try: + import ujson as json +except ImportError: + HAS_UJSON = False +else: + HAS_UJSON = True + doc = {'none': [None, None], 'int': 42, 'float': 3.1415899999999999, 'list': ['LITE', 'RES_ACID', 'SUS_DEXT'], 'dict': {'hp': 13, 'sp': 5}, @@ -30,6 +37,7 @@ storage.close() [email protected](HAS_UJSON, reason="not compatible with ujson") def test_json_kwargs(tmpdir): db_file = tmpdir.join('test.db') db = TinyDB(str(db_file), sort_keys=True, indent=4, separators=(',', ': ')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/tests/test_tables.py new/tinydb-3.14.1/tests/test_tables.py --- old/tinydb-3.13.0/tests/test_tables.py 2018-10-30 09:55:11.000000000 +0100 +++ new/tinydb-3.14.1/tests/test_tables.py 2019-07-03 21:34:20.000000000 +0200 @@ -115,5 +115,5 @@ assert re.match( r"<Table name=\'table4\', total=0, " - "storage=<tinydb\.database\.StorageProxy object at [a-zA-Z0-9]+>>", + r"storage=<tinydb\.database\.StorageProxy object at [a-zA-Z0-9]+>>", repr(table)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/tests/test_tinydb.py new/tinydb-3.14.1/tests/test_tinydb.py --- old/tinydb-3.13.0/tests/test_tinydb.py 2019-03-16 14:33:50.000000000 +0100 +++ new/tinydb-3.14.1/tests/test_tinydb.py 2019-09-13 23:02:50.000000000 +0200 @@ -4,10 +4,17 @@ import pytest -from tinydb import TinyDB, where +from tinydb import TinyDB, where, Query from tinydb.middlewares import Middleware, CachingMiddleware from tinydb.storages import MemoryStorage +try: + import ujson as json +except ImportError: + HAS_UJSON = False +else: + HAS_UJSON = True + def test_purge(db): db.purge() @@ -93,7 +100,7 @@ def test_insert_invalid_type_raises_error(db): - with pytest.raises(ValueError, message='Document is not a Mapping'): + with pytest.raises(ValueError, match='Document is not a Mapping'): db.insert(object()) # object() as an example of a non-mapping-type @@ -539,6 +546,7 @@ _db.insert({'int': 3}) # Does not fail [email protected](HAS_UJSON, reason="not compatible with ujson") def test_insert_invalid_dict(tmpdir): path = str(tmpdir.join('db.json')) @@ -547,7 +555,7 @@ _db.insert_multiple(data) with pytest.raises(TypeError): - _db.insert({'int': {'bark'}}) # Fails + _db.insert({'int': _db}) # Fails assert data == _db.all() @@ -583,6 +591,16 @@ TinyDB.DEFAULT_TABLE = default_table +def test_non_default_table_args(): + TinyDB.DEFAULT_TABLE_KWARGS = {'cache_size': 0} + + db = TinyDB(storage=MemoryStorage) + default_table = db.table() + assert default_table._query_cache.capacity == 0 + + TinyDB.DEFAULT_TABLE_KWARGS = {} + + def test_purge_table(): db = TinyDB(storage=MemoryStorage) assert [TinyDB.DEFAULT_TABLE] == list(db.tables()) @@ -689,6 +707,8 @@ def test_string_key(): + from collections import Mapping + from tinydb.database import Table, StorageProxy, Document from tinydb.storages import MemoryStorage @@ -712,53 +732,42 @@ self._last_id = next_id return str(next_id) - def _get_doc_id(self, document): - if not isinstance(document, dict): - raise ValueError('Document is not a dictionary') - return document.get('doc_id') or self._get_next_id() + def insert(self, document): + if not isinstance(document, Mapping): + raise ValueError('Document is not a Mapping') - db = TinyDB(storage=MemoryStorage, table_class=Table2, - storage_proxy_class=StorageProxy2) - table = db.table() - table.insert({'doc_id': 'abc'}) - assert table.get(doc_id='abc')['doc_id'] == 'abc' - assert table._last_id == 0 - table.insert({'abc': 10}) - assert table.get(doc_id='1')['abc'] == 10 - assert table._last_id == 1 + doc_id = document.get('doc_id') or self._get_next_id() + data = self._read() + data[doc_id] = dict(document) + self._write(data) -def test_string_key2(): - from tinydb.database import Table, StorageProxy, Document - from tinydb.storages import MemoryStorage + def insert_multiple(self, documents): + """ + Insert multiple documents into the table. + + :param documents: a list of documents to insert + :returns: a list containing the inserted documents' IDs + """ - class StorageProxy2(StorageProxy): - def _new_document(self, key, val): - # Don't convert the key to a number here! - return Document(val, key) + doc_ids = [] + data = self._read() - class Table2(Table): - def _init_last_id(self, data): - if data: - self._last_id = len(data) - else: - self._last_id = 0 + for document in documents: + if not isinstance(document, Mapping): + raise ValueError('Document is not a Mapping') - def _get_next_id(self): - next_id = self._last_id + 1 - data = self._read() - while str(next_id) in data: - next_id += 1 - self._last_id = next_id - return str(next_id) + doc_id = document.get('doc_id') or self._get_next_id() + doc_ids.append(doc_id) - def _get_doc_id(self, document): - if not isinstance(document, dict): - raise ValueError('Document is not a dictionary') - return document.get('doc_id') or self._get_next_id() + data[doc_id] = dict(document) - TinyDB.storage_proxy_class = StorageProxy2 - db = TinyDB(storage=MemoryStorage, table_class=Table2) + self._write(data) + + return doc_ids + + db = TinyDB(storage=MemoryStorage, table_class=Table2, + storage_proxy_class=StorageProxy2) table = db.table() table.insert({'doc_id': 'abc'}) assert table.get(doc_id='abc')['doc_id'] == 'abc' @@ -780,6 +789,21 @@ repr(TinyDB(path))) +def test_delete(tmpdir): + path = str(tmpdir.join('db.json')) + + db = TinyDB(path, ensure_ascii=False) + q = Query() + db.insert({'network': {'id': '114', 'name': 'ok', 'rpc': 'dac', + 'ticker': 'mkay'}}) + assert db.search(q.network.id == '114') == [ + {'network': {'id': '114', 'name': 'ok', 'rpc': 'dac', + 'ticker': 'mkay'}} + ] + db.remove(q.network.id == '114') + assert db.search(q.network.id == '114') == [] + + def test_insert_multiple_with_single_dict(db): with pytest.raises(ValueError): d = {'first': 'John', 'last': 'smith'} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/tinydb/database.py new/tinydb-3.14.1/tinydb/database.py --- old/tinydb-3.13.0/tinydb/database.py 2019-03-16 14:33:50.000000000 +0100 +++ new/tinydb-3.14.1/tinydb/database.py 2019-09-13 23:02:50.000000000 +0200 @@ -133,6 +133,7 @@ """ DEFAULT_TABLE = '_default' + DEFAULT_TABLE_KWARGS = {} DEFAULT_STORAGE = JSONStorage def __init__(self, *args, **kwargs): @@ -162,6 +163,7 @@ # Prepare the default table self._table_cache = {} + #: :type: Table self._table = self.table(default_table) def __repr__(self): @@ -193,7 +195,12 @@ return self._table_cache[name] table_class = options.pop('table_class', self._cls_table) - table = table_class(self._cls_storage_proxy(self._storage, name), name, **options) + + table_kwargs = self.DEFAULT_TABLE_KWARGS.copy() + table_kwargs.update(options) + + table = table_class(self._cls_storage_proxy(self._storage, name), name, + **table_kwargs) self._table_cache[name] = table @@ -393,11 +400,6 @@ return current_id - def _get_doc_id(self, document): - if not isinstance(document, Mapping): - raise ValueError('Document is not a Mapping') - return self._get_next_id() - def _read(self): """ Reading access to the DB. @@ -453,8 +455,10 @@ :param document: the document to insert :returns: the inserted document's ID """ + if not isinstance(document, Mapping): + raise ValueError('Document is not a Mapping') - doc_id = self._get_doc_id(document) + doc_id = self._get_next_id() data = self._read() data[doc_id] = dict(document) self._write(data) @@ -468,15 +472,17 @@ :param documents: a list of documents to insert :returns: a list containing the inserted documents' IDs """ - doc_ids = [] data = self._read() - for doc in documents: - doc_id = self._get_doc_id(doc) + for document in documents: + if not isinstance(document, Mapping): + raise ValueError('Document is not a Mapping') + + doc_id = self._get_next_id() doc_ids.append(doc_id) - data[doc_id] = dict(doc) + data[doc_id] = dict(document) self._write(data) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/tinydb/queries.py new/tinydb-3.14.1/tinydb/queries.py --- old/tinydb-3.13.0/tinydb/queries.py 2018-12-12 19:42:38.000000000 +0100 +++ new/tinydb-3.14.1/tinydb/queries.py 2019-07-03 21:34:20.000000000 +0200 @@ -4,8 +4,8 @@ Starting with :class:`~tinydb.queries.Query` you can construct complex queries: ->>> ((where('f1') == 5) & (where('f2') != 2)) | where('s').matches(r'^\w+$') -(('f1' == 5) and ('f2' != 2)) or ('s' ~= ^\w+$ ) +>>> ((where('f1') == 5) & (where('f2') != 2)) | where('s').matches(r'^\\w+$') +(('f1' == 5) and ('f2' != 2)) or ('s' ~= ^\\w+$ ) Queries are executed by using the ``__call__``: @@ -120,7 +120,7 @@ return super(Query, self).__hash__() def __getattr__(self, item): - query = Query() + query = type(self)() query._path = self._path + (item, ) query.hashval = ('path', query._path) @@ -265,7 +265,7 @@ """ Run a regex test against a dict value (whole string has to match). - >>> Query().f1.matches(r'^\w+$') + >>> Query().f1.matches(r'^\\w+$') :param regex: The regular expression to use for matching """ @@ -279,7 +279,7 @@ Run a regex test against a dict value (only substring string has to match). - >>> Query().f1.search(r'^\w+$') + >>> Query().f1.search(r'^\\w+$') :param regex: The regular expression to use for matching """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/tinydb/storages.py new/tinydb-3.14.1/tinydb/storages.py --- old/tinydb-3.13.0/tinydb/storages.py 2019-02-25 16:50:47.000000000 +0100 +++ new/tinydb-3.14.1/tinydb/storages.py 2019-07-03 21:34:20.000000000 +0200 @@ -2,16 +2,24 @@ Contains the :class:`base class <tinydb.storages.Storage>` for storages and implementations. """ - from abc import ABCMeta, abstractmethod import codecs import os +import warnings from .utils import with_metaclass try: import ujson as json + + warnings.warn( + 'Support for `ujson` is reprecated and will be replaced in ' + 'a future version. ' + 'See https://github.com/msiemens/tinydb/issues/263 for ' + 'details.', + DeprecationWarning + ) except ImportError: import json diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/tinydb/version.py new/tinydb-3.14.1/tinydb/version.py --- old/tinydb-3.13.0/tinydb/version.py 2019-03-16 14:37:12.000000000 +0100 +++ new/tinydb-3.14.1/tinydb/version.py 2019-09-13 23:03:46.000000000 +0200 @@ -1 +1 @@ -__version__ = '3.13.0' +__version__ = '3.14.1' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-3.13.0/tinydb.egg-info/PKG-INFO new/tinydb-3.14.1/tinydb.egg-info/PKG-INFO --- old/tinydb-3.13.0/tinydb.egg-info/PKG-INFO 2019-03-16 14:41:29.000000000 +0100 +++ new/tinydb-3.14.1/tinydb.egg-info/PKG-INFO 2019-09-13 23:06:21.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: tinydb -Version: 3.13.0 +Version: 3.14.1 Summary: TinyDB is a tiny, document oriented database optimized for your happiness :) Home-page: https://github.com/msiemens/tinydb Author: Markus Siemens @@ -35,8 +35,8 @@ TinyDB is: - - **tiny:** The current source code has 1200 lines of code (with about 40% - documentation) and 1000 lines of tests. For comparison: Buzhug_ has about 2500 + - **tiny:** The current source code has 1600 lines of code (with about 33% + documentation) and 1800 lines of tests. For comparison: Buzhug_ has about 2500 lines of code (w/o tests), CodernityDB_ has about 7000 lines of code (w/o tests). @@ -50,7 +50,7 @@ e.g. `PyMongo <http://api.mongodb.org/python/current/>`_) nor any dependencies from PyPI. - - **works on Python 2.7 and 3.3 – 3.6 and PyPy:** TinyDB works on all modern + - **works on Python 2.7 and 3.3 – 3.7 and PyPy:** TinyDB works on all modern versions of Python and PyPy. - **powerfully extensible:** You can easily extend TinyDB by writing new @@ -135,14 +135,14 @@ 4. Send a pull request and bug the maintainer until it gets merged and published ☺ - .. |Build Status| image:: http://img.shields.io/travis/msiemens/tinydb.svg?style=flat-square - :target: https://travis-ci.org/msiemens/tinydb + .. |Build Status| image:: https://img.shields.io/azure-devops/build/msiemens/3e5baa75-12ec-43ac-9728-89823ee8c7e2/2.svg?style=flat-square + :target: https://dev.azure.com/msiemens/github/_build?definitionId=2 .. |Coverage| image:: http://img.shields.io/coveralls/msiemens/tinydb.svg?style=flat-square :target: https://coveralls.io/r/msiemens/tinydb .. |Version| image:: http://img.shields.io/pypi/v/tinydb.svg?style=flat-square :target: https://pypi.python.org/pypi/tinydb/ .. _Buzhug: http://buzhug.sourceforge.net/ - .. _CodernityDB: http://labs.codernity.com/codernitydb/ + .. _CodernityDB: https://github.com/perchouli/codernitydb .. _MongoDB: http://mongodb.org/ Keywords: database nosql @@ -161,6 +161,7 @@ Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Operating System :: OS Independent
