Skip to main content

An (even) higher-level MongoDB client

Project description

GitHub stars GitHub forks GitHub issues GitHub license

cervmongo

A convenience-based approach to MongoDB w/ Python that works as a drop-in replacement to the IO pymongo and AIO motor respective clients. Packaged due to excessive reuse in private projects, where it was used to facilitate agile, rapid development of multiple web applications. Database is intentionally loaded by default using URI (can be changed after instance is created), with an optional default collection param. Heads up, most commonly used methods of the client are in UPPERCASE, to ensure names are not taken by the parent classes and keep them nice and short.

Installation

Use the package manager pip to install cervmongo.

pip install cervmongo

Documentation

Full documentation available here.

Usage

import cervmongo

col_client = cervmongo.quick_load_client(
                                database="test_db",
                                collection="test_col",
                                replica_set=None,
                                async=False
                                ) # convenience function

col_recs = col_client.GET() # returns cursor as very cool MongoListResponse
col_recs.count() # returns number of total documents in cursor
col_recs.list() # returns list of documents in cursor
col_recs.distinct() # returns list of unique values, default field '_id'
col_recs.sort() # returns self, allows sorting
# example of creating a document
result = col_client.POST({"key": "value"}) # returns pymongo Response document
# example of fetching a document
col_client.GET(result.inserted_id) # returns the created document as dict
# example of an update (patch)
col_client.PATCH(result.inserted_id, {"$set": {"key": "newvalue"}}) # update the document
# example of a query
col_client.GET({"key": "newvalue"}) # returns the cursor resulting from query
# will replace existing document if exists, else create new document with _id provided
col_client.PUT({"_id": result.inserted_id, "key": "finalvalue"})
# will delete document
col_client.DELETE(result.inserted_id) # returns deleted document


# OPTIONALLY
count = col_client.GET(count=True) # returns number of total documents in cursor
count_of_query = col_client.GET({"key": "value"}, count=True)
distinct_values_of_field_key = col_client.GET(distinct="key")
distinct_ids = col_client.GET(distinct=True) # _id is default
distinct_ids_with_query = col_client.GET({"key": "value"}, distinct=True)
sorted_query_one = col_client.GET(key="key", sort=cervmongo.DESC) # sorts in descending order by field 'key'
sorted_query_two = col_client.GET({"key": "value"}, key="key", sort=cervmongo.DESC)


# OPTIONALLY
cervmongo.get_config().set_mongo_db("test_db")
client_class = cervmongo.get_client() # gets client class
client = client_class() # SyncIOClient (subclass of pymongo.MongoClient
# ~ motor.motor_asyncio.AsyncIOMotorClient, if async)
# same functionality as col_client above,
# but collection must be explicitly declared as first arg and
# query or record _id, if any, has to be second arg
# Example:
count = client.GET("test_col", count=True)
query_results = client.GET("test_col", {"key": "value"})


# OTHER FUNCTIONALITY
cursor_paged_results = client.PAGINATED_QUERY(after=None, before=None, limit=5) # returns cursor-based initial page
time_paged_results = client.PAGINATED_QUERY(sort="created_date", after=None, before=None, limit=5) # returns time-based initial page
offset_paged_results = client.PAGINATED_QUERY(page=1, limit=5) # returns offset-based initial page
count_of_multi_cols = client.GET(["test_col1", "test_col2"], count=True) # returns list of counts
multi_col_results = client.GET(["test_col1", "test_col2"], {
                "$or": [
                    {"child": "value"},
                    {"related_child": "value"}
                    ]}) # returns list of cursors matching query

TODO:

  1. full testing on AIO Client & Doc classes
  2. finish type hints, function hints, and docstrings for readability
  3. pydantic first-class treatment
  4. restructuring/refactoring...
  5. web api
    • datatable mongodb plugin + web endpoint
    • restful fastapi server - extra
    • possible datatable html + javascript code generator

REQUIRES

  • python 3.6+
  • python packages:
    • pymongo
    • python-dateutil
    • jsonschema
    • dataclasses

RECOMMENDED

  • motor (for aio options)
  • pydantic (for obj/model validation, ORM)
  • marshmallow (json schema validation)
  • python-dotenv 0.12.0>= (for configuration of MongoDB client and cervmongo)
    • cervmongo Settings

      • DEBUG_LEVEL (default 30, i.e. logging.WARNING)
    • mongodb Settings

      • Can optionally provide either:
        • MONGO_HOST (default "127.0.0.1")
        • MONGO_PORT (default 27017)
        • MONGO_DB (default None)
        • MONGO_REPLICA_SET (default None)
        • MONGO_MAX_POOL_SIZE (default 20)
        • MONGO_MIN_POOL_SIZE (default 10)
        • MONGO_USER (default None)
        • MONGO_PASSWORD (default None)
      • or:
        • MONGO_URI (default None, ex. "mongodb://localhost:27017/app?replicaSet=appSet")
        • For more information on a MongoDB URI, see here: Connection String URI Format.

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cervmongo-0.1.17.tar.gz (36.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cervmongo-0.1.17-py3-none-any.whl (43.6 kB view details)

Uploaded Python 3

File details

Details for the file cervmongo-0.1.17.tar.gz.

File metadata

  • Download URL: cervmongo-0.1.17.tar.gz
  • Upload date:
  • Size: 36.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.1.3 requests-toolbelt/0.8.0 tqdm/4.19.5 CPython/3.6.9

File hashes

Hashes for cervmongo-0.1.17.tar.gz
Algorithm Hash digest
SHA256 eb9ad81fc9bd5584f29147a344dd98e77433fc51bcce990eb0c037aa77760095
MD5 9b5dc074a8cd2b3bb6384407c3cfa9ac
BLAKE2b-256 62adfe18fb33011186eb21136f393c979f48f9f59b6f86e51f7ed4d149f17c99

See more details on using hashes here.

File details

Details for the file cervmongo-0.1.17-py3-none-any.whl.

File metadata

  • Download URL: cervmongo-0.1.17-py3-none-any.whl
  • Upload date:
  • Size: 43.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.1.3 requests-toolbelt/0.8.0 tqdm/4.19.5 CPython/3.6.9

File hashes

Hashes for cervmongo-0.1.17-py3-none-any.whl
Algorithm Hash digest
SHA256 33bf8dab9478c74cb5b57b8d7337c3a9305315093e140beb403a43c3f35ad4e3
MD5 3c3e389f45acab1e4f18b8182344207e
BLAKE2b-256 180fb396a42c03442687fdbc8aed8f25b8f458ada78e33e690f1559b685a1829

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page