Skip to main content

Mongo Manager (0.9.7)

Libreria para el manejo de Objetos almacenados en base de datos MongoDB.

Testeado el funcionamiento basico en Python 3.7, 3.8, 3.9, 3.10, 3.11 y 3.12 y para las versiones de Mongo 4.2, 4.4, 5.0 y 6.0.

Clases

MongoManager

Crea la conexion con la base de datos, se debe inicilizar antes de invocar ningun repositorio de objetos.

ObjetoMongoAbstract

Clase abstracta en la que se representa un objeto mongo predefinido, su constructor recibe un object _id haciendo referencia al '_id' del objeto Mongo y **kwargs con los argumentos desechados por el constructor concreto de tu clase. Es recomendable llamar al contructor padre para establecer los atributos.

Objetos internos

En caso de tener objetos interno dentro del objeto principal es necesario reescribir las funciones internas get_dict y generar_object_from_dict de forma que el objeto se transforme y destransforme en un diccionario.

En caso de que el objeto o la lista de objetos internos hereden de la clase ObjetoMongoAbstract se puede modificar el metodo get_attr_nested_objects de la siguiente manera {nombre_atributo: clase_atributo(aunque sea una lista)} y automaticamente se instanciaran y desinstanciaran solos.

RepositoryBase

Repositorio base de mongo, recibe como parametros en el constructor, la coleccion a la que se hace referencia y el objeto al que va a convertir los resultados de las query que se realicen.

En caso de querer usar una coleccion no perteneciente a la base de datos instanciada, se puede pasar el atributo connection_collection que debe ser una instancia de la conexion MongoClient para la coleccion a tratar por el repositorio.

Ejemplo 1

En este ejemplo veremos el uso de la libreria definiendo un objeto Book que hereda de ObjetoMongoAbstract y para el que implementa un RepositoryBook para poder manejar el objeto de manera más comoda.

class Book(ObjetoMongoAbstract):
        def __init__(self, name, id_mongo=None, **kwargs):
            super().__init__(id_mongo, **kwargs)
            self.name = name
    
        def __str__(self) -> str:
            return "{}".format(self.name)

class BookOverrided(ObjetoMongoAbstract):
        def __init__(self, name, id_mongo=None, **kwargs):
            super().__init__(id_mongo, **kwargs)
            self.name = name

        def get_dict(self, id_mongo=True, id_as_string=False) -> dict:
            d = super().get_dict(id_mongo, id_as_string)
            d.pop('name')
            d['nombre'] = self.name
            return d
    
        @classmethod
        def generar_object_from_dict(cls, dictionary):
            if dictionary is None:
                return None
            return cls(name=dictionary.get('nombre'))


        def __str__(self) -> str:
            return "{}".format(self.name)

class RepositoryBook(RepositoryBase[Book]):
    def __init__(self, conection_collection=None) -> None:
        super().__init__('book', Book, conection_collection)

class RepositoryBookOverrided(RepositoryBase[BookOverrided]):
    def __init__(self, conection_collection=None) -> None:
        super().__init__('book', BookOverrided, conection_collection)

def main():
    a = RepositoryBook()
    b = Book('test')
    c = RepositoryBookOverrided()
    d = BookOverrided('test')
    a.insert_one(b)
    c.insert_one(d)
    print(a.find_all()[-1])
    print(c.find_all()[-1])


if __name__ == '__main__':
    MongoManager('user', 'psw', 'bd', 'authenticationDatabase')
    main()

Aggregates

Los Aggregates se han dispuesto para poder ser creados de dos maneras distintas.

  • Usando los decoradores definidos en el fichero aggregation_decorator.py en combinacion con las clases AggregationStage y AggregationOperation cuyos hijos implementan los distintas funciones permitidas en MongoDB, asi como los parametros que reciben.

    El decorador permite a la función definida dentro de una clase que herede de RepositoryBase, recibir un AggregationExecutor que se ejecutar una vez finalizada la función, para ello todas las funciones usen estos decoradores deberán devolver dicho parametro.

    Un ejemplo se puede ver a continuación, en el que se realiza un match a todos los libros que tengan en su nombre una s mayuscula o minuscula, agrupa el resultado por nombre y cuenta los integrantes de cada grupo y finalmente genera el resultado con el formato {name: book_name_group, counter: total_books}:

    class RepositoryBook(RepositoryBase[Book]):
        def __init__(self, conection_collection=None) -> None:
            super().__init__('book', Book, conection_collection)
    
        @agg_de.aggregation_decorator
        def test_aggregation(self, agg: AggregationExecutor):
            a = agg_st.AggStMatch()
            a['nombre'] = agg_op_re.AggOpRegex('test',
                                               agg_op_re.AggOpRegex.get_options_regex(insensitive=True))
            b = agg_st.AggStGroup(id_mapping={'name': '$name'})
            b['counter'] = {'$sum': 1}
            c = agg_st.AggStProject({'name': '$_id.name', 'counter': 1})
            agg.add_steps(a, b, c)
            return agg
    
  • Usando los antigüos metodos definidos en el mongo_utils.py que sirven de ayuda para poder generar los aggregates.

Metadata

Release files for mongo-manager-juan-palma-borda 0.9.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mongo-manager-juan-palma-borda 0.9.7
File Size Uploaded
mongo_manager_juan_palma_borda-0.9.7.tar.gz 14.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mongo-manager-juan-palma-borda 0.9.7
File Interpreter ABI Platform
mongo_manager_juan_palma_borda-0.9.7-py3-none-any.whl Python 3 none any Details

Total release size: 33.3 kB

Release files / mongo_manager_juan_palma_borda-0.9.7.tar.gz

Download URL mongo_manager_juan_palma_borda-0.9.7.tar.gz
Size 14.8 kB
Tags Source
SHA-256 checksum
How to use checksums
cdfe1ec96ba2c5988d61e2f9c87a07147773a2f3fa948e2ee9adb172d10b348c
BLAKE2b-256 checksum
How to use checksums
59a002239d530a7048dc3867256cdbe082e5f8cb911425081cfe150eb0a9ef37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.7

Release files / mongo_manager_juan_palma_borda-0.9.7-py3-none-any.whl

Download URL mongo_manager_juan_palma_borda-0.9.7-py3-none-any.whl
Size 18.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ebb7db0e2775167c64bc05aabecc353cd9e84084c3f7ebd3c296d8b4f9493511
BLAKE2b-256 checksum
How to use checksums
58c651d7a189236a2661dc62aaa871681f150f113493a162204008635948ebe4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.7

Release history Release notifications | RSS feed

This release

0.9.7 This release

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.2

2 release files

0.8.0

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page