diff options
author | CoprDistGit <infra@openeuler.org> | 2023-05-31 06:15:39 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-05-31 06:15:39 +0000 |
commit | 92285d8c16aeea4e2cfffa3b7abd013487331089 (patch) | |
tree | 98921bb88cfd039b0faceba518aadf6aa5043a89 | |
parent | 93dafb5fef2fa9bf0cb03f2f9175443c2ea3c342 (diff) |
automatic import of python-mongodantic
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-mongodantic.spec | 597 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 599 insertions, 0 deletions
@@ -0,0 +1 @@ +/mongodantic-0.2.7b1.tar.gz diff --git a/python-mongodantic.spec b/python-mongodantic.spec new file mode 100644 index 0000000..16fb880 --- /dev/null +++ b/python-mongodantic.spec @@ -0,0 +1,597 @@ +%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 = '<your connection url>' +db_name = '<name of database>' + +# 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='<path to cert>') + +# 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 = '<your connection url>' +db_name = '<name of database>' + +# 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='<path to cert>') + +# 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 = '<your connection url>' +db_name = '<name of database>' + +# 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='<path to cert>') + +# 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 <Python_Bot@openeuler.org> - 0.2.7b1-1 +- Package Spec generated @@ -0,0 +1 @@ +e222c61d90129f1c74d5bfecce5462c1 mongodantic-0.2.7b1.tar.gz |