带有mongo应用程序的包装类
mongodec的Python项目详细描述
#mongodec提供了一个通用的包装类,可以扩展到任何python类,并允许简单地覆盖和包装方法。在这个repo中,它被用来实现"pymongo"对象的一个扩展,这个扩展涵盖了一个常见的用例,即希望对所有数据库访问应用筛选器。
setup
安装mongodec的最简单方法是使用pip:`pip install mongodec`。尽管可以克隆此repo,并且您可以根据自己的喜好从源代码构建它。
对mongo数据库的后续访问是通过提供的"mongo config"类进行的,这些类来自mongodec import mongoconfig
"import pymongo"只用于assert
config=mongoconfig(user='dev',
password='foobar',
host='some-host-exsample.mongo db.net,
database='dbname',
port=27017)
mongo-db-obj=config.db()
assert-isinstance(mongo-db-obj,pymongo.database.database)
````
他反对将它们复制为实例化参数,可能还有其他参数。假设我们要查看与筛选器{name':'foobar'、'value':{'$gt':10}}匹配的文档。然后我们可以获取一个pymongo数据库对象并构建过滤后的数据库:
```
from mongodec import filtermongodb
mongo-db=…#pymongo.database.database的某个实例
q撸filter={'name':'foo','value':{'$gt':10}
filter撸mongo撸obj=filter mongo db(mongo db,q撸filter)
示例--使用pymongo的类插入一些伪数据
real撸collection=mongo db.collection撸name
real撸collection.insert([{'name':'foo','value':4},
{'name':'foo','value':12},
{'name':'bar','value':100}]
filter_collection_3=filter_mongo_obj.get_collection('collection_name')
assert filter_collection==filter_2
assert filter_collection==filter_3
将filter_collection操作为一个真正的集合
assert filter_collection.count()=1
assert(filter戋collection.find戋one({},{''u id':0})==
{'name':'foo','value':12})
filter戋collection.delete戋many()
assert real戋collection.count()==2
assert filter戋collection.count()==0
tion.count(no_changeling=true)==2
````
所有适用的方法都被适当地包装,我们也为批量操作提供支持。
在mongodec/changeling.py中定义,可以在mongodec/filter\mongo.py中查看"filtermongo*"类的实现
任何扩展changeling的类c都应被视为另一个类b的包装器。然后,任何c实例都应将b的实例作为实例化参数。NT。c中b的实例称为"base object",可通过"c_instance.base_object"访问。在内部,每个变更对象都使用其属性"cdict"跟踪包装方法。要用"ultrafunky"方法包装类"down2get"的"funky"方法,那么"cdict"应该是这样的:
```
{down2get方法:{funky':ultrafunky}
`````
``
{
"down2get-u-methods":{"funky":ultrafunky},
"down2get-wrap-all":和turnt
}
```
任何很难包装且应该直接重写的方法都可以在"c"的类定义中完成。
每个包装方法都有3个参数:func、cdict和callargs.
func是被包装的函数。cdict是变更实例的cdict,callargs是一个字典,其中包含func显式命名的所有参数。
mongodec/tests/test\u changeling.py中的"st_changeling"
演示如何覆盖基本对象方法的简单扩展是位于mongodec/filter\mongo.py中的"filtermongobulkooperationbuilder"
一个更复杂的示例,它封装了"c"的所有功能hangeling`是mongodec/filter\mongo.py中的'filtermongocollection'类
setup
安装mongodec的最简单方法是使用pip:`pip install mongodec`。尽管可以克隆此repo,并且您可以根据自己的喜好从源代码构建它。
对mongo数据库的后续访问是通过提供的"mongo config"类进行的,这些类来自mongodec import mongoconfig
"import pymongo"只用于assert
config=mongoconfig(user='dev',
password='foobar',
host='some-host-exsample.mongo db.net,
database='dbname',
port=27017)
mongo-db-obj=config.db()
assert-isinstance(mongo-db-obj,pymongo.database.database)
````
他反对将它们复制为实例化参数,可能还有其他参数。假设我们要查看与筛选器{name':'foobar'、'value':{'$gt':10}}匹配的文档。然后我们可以获取一个pymongo数据库对象并构建过滤后的数据库:
```
from mongodec import filtermongodb
mongo-db=…#pymongo.database.database的某个实例
q撸filter={'name':'foo','value':{'$gt':10}
filter撸mongo撸obj=filter mongo db(mongo db,q撸filter)
示例--使用pymongo的类插入一些伪数据
real撸collection=mongo db.collection撸name
real撸collection.insert([{'name':'foo','value':4},
{'name':'foo','value':12},
{'name':'bar','value':100}]
filter_collection_3=filter_mongo_obj.get_collection('collection_name')
assert filter_collection==filter_2
assert filter_collection==filter_3
将filter_collection操作为一个真正的集合
assert filter_collection.count()=1
assert(filter戋collection.find戋one({},{''u id':0})==
{'name':'foo','value':12})
filter戋collection.delete戋many()
assert real戋collection.count()==2
assert filter戋collection.count()==0
tion.count(no_changeling=true)==2
````
所有适用的方法都被适当地包装,我们也为批量操作提供支持。
在mongodec/changeling.py中定义,可以在mongodec/filter\mongo.py中查看"filtermongo*"类的实现
任何扩展changeling的类c都应被视为另一个类b的包装器。然后,任何c实例都应将b的实例作为实例化参数。NT。c中b的实例称为"base object",可通过"c_instance.base_object"访问。在内部,每个变更对象都使用其属性"cdict"跟踪包装方法。要用"ultrafunky"方法包装类"down2get"的"funky"方法,那么"cdict"应该是这样的:
```
{down2get方法:{funky':ultrafunky}
`````
``
{
"down2get-u-methods":{"funky":ultrafunky},
"down2get-wrap-all":和turnt
}
```
任何很难包装且应该直接重写的方法都可以在"c"的类定义中完成。
每个包装方法都有3个参数:func、cdict和callargs.
func是被包装的函数。cdict是变更实例的cdict,callargs是一个字典,其中包含func显式命名的所有参数。
mongodec/tests/test\u changeling.py中的"st_changeling"
演示如何覆盖基本对象方法的简单扩展是位于mongodec/filter\mongo.py中的"filtermongobulkooperationbuilder"
一个更复杂的示例,它封装了"c"的所有功能hangeling`是mongodec/filter\mongo.py中的'filtermongocollection'类