summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-31 06:15:39 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-31 06:15:39 +0000
commit92285d8c16aeea4e2cfffa3b7abd013487331089 (patch)
tree98921bb88cfd039b0faceba518aadf6aa5043a89
parent93dafb5fef2fa9bf0cb03f2f9175443c2ea3c342 (diff)
automatic import of python-mongodantic
-rw-r--r--.gitignore1
-rw-r--r--python-mongodantic.spec597
-rw-r--r--sources1
3 files changed, 599 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..ccf581b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/sources b/sources
new file mode 100644
index 0000000..aa4c280
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+e222c61d90129f1c74d5bfecce5462c1 mongodantic-0.2.7b1.tar.gz