%global _empty_manifest_terminate_build 0 Name: python-mongodantic Version: 0.2.7b1 Release: 1 Summary: Mongo ODM, based on pydantic and pymongo License: MIT URL: https://github.com/bzdvdn/mongodantic Source0: https://mirrors.nju.edu.cn/pypi/web/packages/03/b6/37eac37832c356749caea238c2a9139e000c5dce45bab8f3e04fda28c96b/mongodantic-0.2.7b1.tar.gz BuildArch: noarch %description # mongodantic ## non stable now ## Install Install using `pip`... pip install mongodantic ##settings in your main file application ```python from mongodantic import connect connection_str = '' db_name = '' # basic connect(connection_str, db_name, max_pool_size=100) # if u use ssl connect(connection_str, db_name, max_pool_size=100, ssl=True, ssl_cert_path='') # extra params server_selection_timeout_ms = 50000 # pymongo serverSelectionTimeoutMS connect_timeout_ms = 50000 # pymongo connectTimeoutMS socket_timeout_ms = 50000 # pymongo socketTimeoutMS ``` ## Declare models ```python from mongodantic.models import MongoModel class Banner(MongoModel): banner_id: str name: str utm: dict # if you need take an existing collection, you must reimplement set_collection_name method like that class Banner(MongoModel): ... @classmethod def set_collection_name(cls) -> str: return 'banner_test' ``` ## Queries ```python banner = Banner.Q.find_one() # return a banner model obj # skip and limit banner_with_skip_and_limit = Banner.Q.find(skip_rows=10, limit_rows=10) banner_data = Banner.Q.find_one().data # return a dict banners_queryset= Banner.Q.find() # return QuerySet object banners_dict = Banner.Q.find().data list_of_banners = Banner.Q.find().list banners_generator = Banner.Q.find().generator # generator of Banner objects banners_generator_of_dicts = Banner.Q.find().data_generator # generator of Banner objects count, banners = Banner.Q.find_with_count() # return tuple(int, QuerySet) serializeble_fields = Banner.Q.find().serialize(['utm', 'banner_id', 'name']) # return list with dict like {'utm':..., 'banner_id': ..,'name': ...} generator_serializeble_fields = Banner.Q.find().serialize_generator(['utm', 'banner_id', 'name']) # return generator json_serializeble_fields = Banner.Q.find().serialize_json(['utm', 'banner_id', 'name']) # returnn json str serializeble # count count = Banner.Q.count(name='test') # insert queries Banner.Q.insert_one(banner_id=1, name='test', utm={'utm_source': 'yandex', 'utm_medium': 'cpc'}) banners = [Banner(banner_id=2, name='test2', utm={}), Banner(banner_id=3, name='test3', utm={})] Banner.Q.insert_many(banners) # list off models obj, or dicts Banner.Q.bulk_create(banners, batch_size=1000) # insert_many with batch # update queries Banner.Q.update_one(banner_id=1, name__set='updated') # parameters that end __set - been updated Banner.Q.update_many(name__set='update all names') # delete queries Banner.Q.delete_one(banner_id=1) # delete one row Banner.Q.delete_many(banner_id=1) # delete many rows # extra queries Banner.Q.find(banner_id__in=[1, 2]) # get data in list Banner.Q.find(banner_id__range=[1,10]) # get date from 1 to 10 Banner.Q.find(name__regex='^test') # regex query Banner.Q.find(name__startswith='t') # startswith query Banner.Q.find(name__endswith='t') # endswith query Banner.Q.find(name__not_startswith='t') # not startswith query Banner.Q.find(name__not_endswith='t') # not endswith query Banner.Q.find(name__nin=[1, 2]) # not in list Banner.Q.find(name__ne='test') # != test Banner.Q.find(banner_id__gte=1, banner_id__lte=10) # id >=1 and id <=10 Banner.Q.find(banner_id__gt=1, banner_id__lt=10) # id >1 and id <10 Banner.Q.find_one(banner_id=1, utm__utm_medium='cpm') # find banner where banner_id=1, and utm['utm_medium'] == 'cpm' Banner.Q.update_one(banner_id=1, utm__utm_source__set='google') # update utms['utm_source'] in Banner # find and update Banner.Q.find_and_update(banner_id=1, name__set='updated', projection_fields=['name': True]) # return {'name': 'updated} Banner.Q.find_and_update(banner_id=1, name__set='updated') # return Banner obj # find and replace Banner.Q.find_and_update(banner_id=1, Banner(banner_id=1, name='uptated'), projection={'name': True}) # return {'name': 'updated} Banner.Q.find_and_update(banner_id=1, Banner(banner_id=1, name='uptated')) # return Banner obj # bulk operations from random import randint banners = Banner.Q.find() to_update = [] for banner in banners: banner.banner_id = randint(1,100) to_update.append(banner) Banner.Q.bulk_update(banners, updated_fields=['banner_id']) # bulk update or create banners = [Banner(banner_id=23, name='new', utms={}), Banner(banner_id=1, name='test', utms={})] Banner.Q.bulk_update_or_create(banners, query_fields=['banner_id']) # aggregate with sum, min, max class Stats(MongoModel): id: int cost: float clicks: int shows: int date: str from mongodantic.aggregation import Sum, Min, Max Stats.Q.simple_aggregate(date='2020-01-20', aggregation=Sum('cost')) Stats.Q.simple_aggregate(date='2020-01-20', aggregation=Min('clicks')) Stats.Q.simple_aggregate(date='2020-01-20', aggregation=Max('shows')) # sessions from mongodantic.session import Session with Session(Banner) as session: Banner.Q.find(skip_rows=1, limit_rows=1, session=session).data # logical from mongodantic.logical import Query data = Banner.Q.find_one(Query(name='test') | Query(name__regex='testerino')) # for async queries async def get_banner() -> Optiona[Banner]: banner = await Banner.AQ.find_one() return banner ``` %package -n python3-mongodantic Summary: Mongo ODM, based on pydantic and pymongo Provides: python-mongodantic BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-mongodantic # mongodantic ## non stable now ## Install Install using `pip`... pip install mongodantic ##settings in your main file application ```python from mongodantic import connect connection_str = '' db_name = '' # basic connect(connection_str, db_name, max_pool_size=100) # if u use ssl connect(connection_str, db_name, max_pool_size=100, ssl=True, ssl_cert_path='') # extra params server_selection_timeout_ms = 50000 # pymongo serverSelectionTimeoutMS connect_timeout_ms = 50000 # pymongo connectTimeoutMS socket_timeout_ms = 50000 # pymongo socketTimeoutMS ``` ## Declare models ```python from mongodantic.models import MongoModel class Banner(MongoModel): banner_id: str name: str utm: dict # if you need take an existing collection, you must reimplement set_collection_name method like that class Banner(MongoModel): ... @classmethod def set_collection_name(cls) -> str: return 'banner_test' ``` ## Queries ```python banner = Banner.Q.find_one() # return a banner model obj # skip and limit banner_with_skip_and_limit = Banner.Q.find(skip_rows=10, limit_rows=10) banner_data = Banner.Q.find_one().data # return a dict banners_queryset= Banner.Q.find() # return QuerySet object banners_dict = Banner.Q.find().data list_of_banners = Banner.Q.find().list banners_generator = Banner.Q.find().generator # generator of Banner objects banners_generator_of_dicts = Banner.Q.find().data_generator # generator of Banner objects count, banners = Banner.Q.find_with_count() # return tuple(int, QuerySet) serializeble_fields = Banner.Q.find().serialize(['utm', 'banner_id', 'name']) # return list with dict like {'utm':..., 'banner_id': ..,'name': ...} generator_serializeble_fields = Banner.Q.find().serialize_generator(['utm', 'banner_id', 'name']) # return generator json_serializeble_fields = Banner.Q.find().serialize_json(['utm', 'banner_id', 'name']) # returnn json str serializeble # count count = Banner.Q.count(name='test') # insert queries Banner.Q.insert_one(banner_id=1, name='test', utm={'utm_source': 'yandex', 'utm_medium': 'cpc'}) banners = [Banner(banner_id=2, name='test2', utm={}), Banner(banner_id=3, name='test3', utm={})] Banner.Q.insert_many(banners) # list off models obj, or dicts Banner.Q.bulk_create(banners, batch_size=1000) # insert_many with batch # update queries Banner.Q.update_one(banner_id=1, name__set='updated') # parameters that end __set - been updated Banner.Q.update_many(name__set='update all names') # delete queries Banner.Q.delete_one(banner_id=1) # delete one row Banner.Q.delete_many(banner_id=1) # delete many rows # extra queries Banner.Q.find(banner_id__in=[1, 2]) # get data in list Banner.Q.find(banner_id__range=[1,10]) # get date from 1 to 10 Banner.Q.find(name__regex='^test') # regex query Banner.Q.find(name__startswith='t') # startswith query Banner.Q.find(name__endswith='t') # endswith query Banner.Q.find(name__not_startswith='t') # not startswith query Banner.Q.find(name__not_endswith='t') # not endswith query Banner.Q.find(name__nin=[1, 2]) # not in list Banner.Q.find(name__ne='test') # != test Banner.Q.find(banner_id__gte=1, banner_id__lte=10) # id >=1 and id <=10 Banner.Q.find(banner_id__gt=1, banner_id__lt=10) # id >1 and id <10 Banner.Q.find_one(banner_id=1, utm__utm_medium='cpm') # find banner where banner_id=1, and utm['utm_medium'] == 'cpm' Banner.Q.update_one(banner_id=1, utm__utm_source__set='google') # update utms['utm_source'] in Banner # find and update Banner.Q.find_and_update(banner_id=1, name__set='updated', projection_fields=['name': True]) # return {'name': 'updated} Banner.Q.find_and_update(banner_id=1, name__set='updated') # return Banner obj # find and replace Banner.Q.find_and_update(banner_id=1, Banner(banner_id=1, name='uptated'), projection={'name': True}) # return {'name': 'updated} Banner.Q.find_and_update(banner_id=1, Banner(banner_id=1, name='uptated')) # return Banner obj # bulk operations from random import randint banners = Banner.Q.find() to_update = [] for banner in banners: banner.banner_id = randint(1,100) to_update.append(banner) Banner.Q.bulk_update(banners, updated_fields=['banner_id']) # bulk update or create banners = [Banner(banner_id=23, name='new', utms={}), Banner(banner_id=1, name='test', utms={})] Banner.Q.bulk_update_or_create(banners, query_fields=['banner_id']) # aggregate with sum, min, max class Stats(MongoModel): id: int cost: float clicks: int shows: int date: str from mongodantic.aggregation import Sum, Min, Max Stats.Q.simple_aggregate(date='2020-01-20', aggregation=Sum('cost')) Stats.Q.simple_aggregate(date='2020-01-20', aggregation=Min('clicks')) Stats.Q.simple_aggregate(date='2020-01-20', aggregation=Max('shows')) # sessions from mongodantic.session import Session with Session(Banner) as session: Banner.Q.find(skip_rows=1, limit_rows=1, session=session).data # logical from mongodantic.logical import Query data = Banner.Q.find_one(Query(name='test') | Query(name__regex='testerino')) # for async queries async def get_banner() -> Optiona[Banner]: banner = await Banner.AQ.find_one() return banner ``` %package help Summary: Development documents and examples for mongodantic Provides: python3-mongodantic-doc %description help # mongodantic ## non stable now ## Install Install using `pip`... pip install mongodantic ##settings in your main file application ```python from mongodantic import connect connection_str = '' db_name = '' # basic connect(connection_str, db_name, max_pool_size=100) # if u use ssl connect(connection_str, db_name, max_pool_size=100, ssl=True, ssl_cert_path='') # extra params server_selection_timeout_ms = 50000 # pymongo serverSelectionTimeoutMS connect_timeout_ms = 50000 # pymongo connectTimeoutMS socket_timeout_ms = 50000 # pymongo socketTimeoutMS ``` ## Declare models ```python from mongodantic.models import MongoModel class Banner(MongoModel): banner_id: str name: str utm: dict # if you need take an existing collection, you must reimplement set_collection_name method like that class Banner(MongoModel): ... @classmethod def set_collection_name(cls) -> str: return 'banner_test' ``` ## Queries ```python banner = Banner.Q.find_one() # return a banner model obj # skip and limit banner_with_skip_and_limit = Banner.Q.find(skip_rows=10, limit_rows=10) banner_data = Banner.Q.find_one().data # return a dict banners_queryset= Banner.Q.find() # return QuerySet object banners_dict = Banner.Q.find().data list_of_banners = Banner.Q.find().list banners_generator = Banner.Q.find().generator # generator of Banner objects banners_generator_of_dicts = Banner.Q.find().data_generator # generator of Banner objects count, banners = Banner.Q.find_with_count() # return tuple(int, QuerySet) serializeble_fields = Banner.Q.find().serialize(['utm', 'banner_id', 'name']) # return list with dict like {'utm':..., 'banner_id': ..,'name': ...} generator_serializeble_fields = Banner.Q.find().serialize_generator(['utm', 'banner_id', 'name']) # return generator json_serializeble_fields = Banner.Q.find().serialize_json(['utm', 'banner_id', 'name']) # returnn json str serializeble # count count = Banner.Q.count(name='test') # insert queries Banner.Q.insert_one(banner_id=1, name='test', utm={'utm_source': 'yandex', 'utm_medium': 'cpc'}) banners = [Banner(banner_id=2, name='test2', utm={}), Banner(banner_id=3, name='test3', utm={})] Banner.Q.insert_many(banners) # list off models obj, or dicts Banner.Q.bulk_create(banners, batch_size=1000) # insert_many with batch # update queries Banner.Q.update_one(banner_id=1, name__set='updated') # parameters that end __set - been updated Banner.Q.update_many(name__set='update all names') # delete queries Banner.Q.delete_one(banner_id=1) # delete one row Banner.Q.delete_many(banner_id=1) # delete many rows # extra queries Banner.Q.find(banner_id__in=[1, 2]) # get data in list Banner.Q.find(banner_id__range=[1,10]) # get date from 1 to 10 Banner.Q.find(name__regex='^test') # regex query Banner.Q.find(name__startswith='t') # startswith query Banner.Q.find(name__endswith='t') # endswith query Banner.Q.find(name__not_startswith='t') # not startswith query Banner.Q.find(name__not_endswith='t') # not endswith query Banner.Q.find(name__nin=[1, 2]) # not in list Banner.Q.find(name__ne='test') # != test Banner.Q.find(banner_id__gte=1, banner_id__lte=10) # id >=1 and id <=10 Banner.Q.find(banner_id__gt=1, banner_id__lt=10) # id >1 and id <10 Banner.Q.find_one(banner_id=1, utm__utm_medium='cpm') # find banner where banner_id=1, and utm['utm_medium'] == 'cpm' Banner.Q.update_one(banner_id=1, utm__utm_source__set='google') # update utms['utm_source'] in Banner # find and update Banner.Q.find_and_update(banner_id=1, name__set='updated', projection_fields=['name': True]) # return {'name': 'updated} Banner.Q.find_and_update(banner_id=1, name__set='updated') # return Banner obj # find and replace Banner.Q.find_and_update(banner_id=1, Banner(banner_id=1, name='uptated'), projection={'name': True}) # return {'name': 'updated} Banner.Q.find_and_update(banner_id=1, Banner(banner_id=1, name='uptated')) # return Banner obj # bulk operations from random import randint banners = Banner.Q.find() to_update = [] for banner in banners: banner.banner_id = randint(1,100) to_update.append(banner) Banner.Q.bulk_update(banners, updated_fields=['banner_id']) # bulk update or create banners = [Banner(banner_id=23, name='new', utms={}), Banner(banner_id=1, name='test', utms={})] Banner.Q.bulk_update_or_create(banners, query_fields=['banner_id']) # aggregate with sum, min, max class Stats(MongoModel): id: int cost: float clicks: int shows: int date: str from mongodantic.aggregation import Sum, Min, Max Stats.Q.simple_aggregate(date='2020-01-20', aggregation=Sum('cost')) Stats.Q.simple_aggregate(date='2020-01-20', aggregation=Min('clicks')) Stats.Q.simple_aggregate(date='2020-01-20', aggregation=Max('shows')) # sessions from mongodantic.session import Session with Session(Banner) as session: Banner.Q.find(skip_rows=1, limit_rows=1, session=session).data # logical from mongodantic.logical import Query data = Banner.Q.find_one(Query(name='test') | Query(name__regex='testerino')) # for async queries async def get_banner() -> Optiona[Banner]: banner = await Banner.AQ.find_one() return banner ``` %prep %autosetup -n mongodantic-0.2.7b1 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-mongodantic -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Wed May 31 2023 Python_Bot - 0.2.7b1-1 - Package Spec generated