mongomancy


Namemongomancy JSON
Version 0.1.14 PyPI version JSON
download
home_page
SummaryPymongo based python client with data definition layer.
upload_time2023-09-11 12:20:09
maintainer
docs_urlNone
author
requires_python>=3.10
licenseGNU General Public License v3 (GPLv3)
keywords mongo python pymongo database nosql
VCS
bugtrack_url
requirements pymongo certifi
Travis-CI No Travis.
coveralls test coverage
            # Mongomancy

## Description

Project contains abstraction of `pymongo` driver for automatic reconnect on master switch in remote MongoDB cluster. It
also provides data definition layer.

Core of `mongo_driver` is the `Engine` class, handling queries reconnection with notification to registered reconnect
hooks.
`Database` creates `Collection`s by their definitions. Database hooks itself to engine reconnect event, so it can switch
internal state of database's collections instances.

```mermaid
    classDiagram
        Executor <|-- Engine : implements
        Database o-- Executor
        Database *-- Collection
        Database o-- CollectionDefinition
        Collection o-- Executor
        CollectionDefinition *-- Index
        CollectionDefinition *-- Document
        
        class Executor{
            <<abstract>>
            reconnect()
            register_hook(reconnect_hook_func)
            find_one(collection: pymongo.collection.Collection, ...)
            other_collection_methods(collection: pymongo.collection.Collection, ...)
        }
        
        class Engine{
            +client: MongoClient
            -_retry_command(collection, command, ...)
            dispose()
            reconnect()
            register_hook(reconnect_hook_func)
            find_one(collection: pymongo.collection.Collection, ...)
            other_collection_methods(collection: pymongo.collection.Collection, ...)
        }
    
        class Collection{
            +dialect_entity: pymongo.collection.Collection
            +engine: Executor
            +find_one(...)
            other_collection_methods()
        }
        
        class Document{
            +unique_key: Optional[BsonDict]
            +data: BsonDict
        }
    
        class CollectionDefinition{
            +name: str
            +indices: Sequence[Index]
            +default_docs: Sequence[Document]
        }
    
        class Index{
            +fields: OrderedDictType[str, Union[str, int]]
            +name: Optional[str]
            +unique: Optional[bool]
            field_for_mongo() -> List[Tuple[str, Union[str, int]]]
        }
    
        class Database{
            +engine: Executor
            +topology: List[types.CollectionDefinition]
            -_database: pymongo.database.Database
            -_collections: Dict[str, Collection]
            invalidate_cache_hook(source: Engine) 
            get_collection(name: str) -> Collection
            extend(*new_definitions: types.CollectionDefinition)
            create_all(skip_existing: bool)
            ping() -> bool
        }
```

## Installation

Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew.
However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing
specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a
specific context like a particular programming language version or operating system or has dependencies that have to be
installed manually, also add a Requirements subsection.

## Usage

```python
import logging
from mongomancy import Engine, Database, CollectionDefinition, Index

engine = Engine("localhost", 27017)
logger = logging.getLogger(__name__)
db = Database(engine=engine, logger=logger)
game = CollectionDefinition(name="game", indices=[Index(fields={"genre": 1})])
player = CollectionDefinition(name="player", indices=[Index(fields={"player_id": 1}, unique=True)])
db.add_collection(game)
db.add_collection(player)
db.create_all()
db["game"].find({"genre": "adventure"})
```

## Tests

You can run tests with coverage tracing:

```shell
python -m coverage run -m unittest tests/test_* -v 
```

To generate coverage report:

```shell
python -m coverage html   
```

## Build

Clone repo and set up your pypi repo account credentials on build for build environment.

- Move to package repo:

    ```shell
    cd ~/git/mongomancy
    ```

- Install requirements:

   ```shell
   python -m pip install -Ur requirements.txt
   ```

- Clean old build fragments:

    ```shell
    rm -rf ./dist ./build ./mongomancy/mongomancy.egg-info
    ```

- Build new package:

    ```shell
    python -m build
    ``` 

- Upload new package:

    ```shell
    python -m twine upload dist/* 
    ```

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "mongomancy",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "",
    "keywords": "mongo,python,pymongo,database,nosql",
    "author": "",
    "author_email": "Tom Trval <thandeus@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/6d/d4/be173f544c46b50338930eab22d77bf09241ff81fc507bf8026c92fcad51/mongomancy-0.1.14.tar.gz",
    "platform": null,
    "description": "# Mongomancy\n\n## Description\n\nProject contains abstraction of `pymongo` driver for automatic reconnect on master switch in remote MongoDB cluster. It\nalso provides data definition layer.\n\nCore of `mongo_driver` is the `Engine` class, handling queries reconnection with notification to registered reconnect\nhooks.\n`Database` creates `Collection`s by their definitions. Database hooks itself to engine reconnect event, so it can switch\ninternal state of database's collections instances.\n\n```mermaid\n    classDiagram\n        Executor <|-- Engine : implements\n        Database o-- Executor\n        Database *-- Collection\n        Database o-- CollectionDefinition\n        Collection o-- Executor\n        CollectionDefinition *-- Index\n        CollectionDefinition *-- Document\n        \n        class Executor{\n            <<abstract>>\n            reconnect()\n            register_hook(reconnect_hook_func)\n            find_one(collection: pymongo.collection.Collection, ...)\n            other_collection_methods(collection: pymongo.collection.Collection, ...)\n        }\n        \n        class Engine{\n            +client: MongoClient\n            -_retry_command(collection, command, ...)\n            dispose()\n            reconnect()\n            register_hook(reconnect_hook_func)\n            find_one(collection: pymongo.collection.Collection, ...)\n            other_collection_methods(collection: pymongo.collection.Collection, ...)\n        }\n    \n        class Collection{\n            +dialect_entity: pymongo.collection.Collection\n            +engine: Executor\n            +find_one(...)\n            other_collection_methods()\n        }\n        \n        class Document{\n            +unique_key: Optional[BsonDict]\n            +data: BsonDict\n        }\n    \n        class CollectionDefinition{\n            +name: str\n            +indices: Sequence[Index]\n            +default_docs: Sequence[Document]\n        }\n    \n        class Index{\n            +fields: OrderedDictType[str, Union[str, int]]\n            +name: Optional[str]\n            +unique: Optional[bool]\n            field_for_mongo() -> List[Tuple[str, Union[str, int]]]\n        }\n    \n        class Database{\n            +engine: Executor\n            +topology: List[types.CollectionDefinition]\n            -_database: pymongo.database.Database\n            -_collections: Dict[str, Collection]\n            invalidate_cache_hook(source: Engine) \n            get_collection(name: str) -> Collection\n            extend(*new_definitions: types.CollectionDefinition)\n            create_all(skip_existing: bool)\n            ping() -> bool\n        }\n```\n\n## Installation\n\nWithin a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew.\nHowever, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing\nspecific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a\nspecific context like a particular programming language version or operating system or has dependencies that have to be\ninstalled manually, also add a Requirements subsection.\n\n## Usage\n\n```python\nimport logging\nfrom mongomancy import Engine, Database, CollectionDefinition, Index\n\nengine = Engine(\"localhost\", 27017)\nlogger = logging.getLogger(__name__)\ndb = Database(engine=engine, logger=logger)\ngame = CollectionDefinition(name=\"game\", indices=[Index(fields={\"genre\": 1})])\nplayer = CollectionDefinition(name=\"player\", indices=[Index(fields={\"player_id\": 1}, unique=True)])\ndb.add_collection(game)\ndb.add_collection(player)\ndb.create_all()\ndb[\"game\"].find({\"genre\": \"adventure\"})\n```\n\n## Tests\n\nYou can run tests with coverage tracing:\n\n```shell\npython -m coverage run -m unittest tests/test_* -v \n```\n\nTo generate coverage report:\n\n```shell\npython -m coverage html   \n```\n\n## Build\n\nClone repo and set up your pypi repo account credentials on build for build environment.\n\n- Move to package repo:\n\n    ```shell\n    cd ~/git/mongomancy\n    ```\n\n- Install requirements:\n\n   ```shell\n   python -m pip install -Ur requirements.txt\n   ```\n\n- Clean old build fragments:\n\n    ```shell\n    rm -rf ./dist ./build ./mongomancy/mongomancy.egg-info\n    ```\n\n- Build new package:\n\n    ```shell\n    python -m build\n    ``` \n\n- Upload new package:\n\n    ```shell\n    python -m twine upload dist/* \n    ```\n",
    "bugtrack_url": null,
    "license": "GNU General Public License v3 (GPLv3)",
    "summary": "Pymongo based python client with data definition layer.",
    "version": "0.1.14",
    "project_urls": {
        "Bug Tracker": "https://github.com/Ryu-CZ/mongomancy/issues",
        "Homepage": "https://github.com/Ryu-CZ/mongomancy"
    },
    "split_keywords": [
        "mongo",
        "python",
        "pymongo",
        "database",
        "nosql"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bf1a3bc613185269e38da2fc51abf682c3832ea9847c2203dc11492f00e89345",
                "md5": "cf0c9d71953219997df8de1524650410",
                "sha256": "4e0d91ec21374668f0da1046e105dfc4149d99ba50e835df1c0705b34d9be864"
            },
            "downloads": -1,
            "filename": "mongomancy-0.1.14-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "cf0c9d71953219997df8de1524650410",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 14695,
            "upload_time": "2023-09-11T12:20:07",
            "upload_time_iso_8601": "2023-09-11T12:20:07.839345Z",
            "url": "https://files.pythonhosted.org/packages/bf/1a/3bc613185269e38da2fc51abf682c3832ea9847c2203dc11492f00e89345/mongomancy-0.1.14-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6dd4be173f544c46b50338930eab22d77bf09241ff81fc507bf8026c92fcad51",
                "md5": "57267587fa7d22bb366b999f3523690d",
                "sha256": "d3a0972191ebdbcb96ab5b9dc0bda58836f67bbec6258b5a23aff079e4ef1235"
            },
            "downloads": -1,
            "filename": "mongomancy-0.1.14.tar.gz",
            "has_sig": false,
            "md5_digest": "57267587fa7d22bb366b999f3523690d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 20509,
            "upload_time": "2023-09-11T12:20:09",
            "upload_time_iso_8601": "2023-09-11T12:20:09.642576Z",
            "url": "https://files.pythonhosted.org/packages/6d/d4/be173f544c46b50338930eab22d77bf09241ff81fc507bf8026c92fcad51/mongomancy-0.1.14.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-09-11 12:20:09",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Ryu-CZ",
    "github_project": "mongomancy",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": false,
    "requirements": [
        {
            "name": "pymongo",
            "specs": [
                [
                    ">=",
                    "4.2"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    ">=",
                    "2022"
                ]
            ]
        }
    ],
    "lcname": "mongomancy"
}
        
Elapsed time: 0.11020s