用于宏元全局边缘结构的python驱动程序

pyC8的Python项目详细描述


PYC8

欢迎来到github页面,pyc8,这是一个用于数字边缘结构的python驱动程序。

功能

  • 清理pythonic接口。
  • 很轻。

兼容性

  • 支持python版本3.4、3.5和3.6。

构建和安装

要构建,

 $ python setup.py build

要在本地安装,

 $ python setup.py build

开始

下面是一个概述示例:

fromc8importC8Clientimporttimeimportwarningswarnings.filterwarnings("ignore")region="qa1-us-east-1.eng2.macrometa.io"demo_tenant="demo"demo_fabric="demofabric"demo_user="demouser"demo_collection="employees"demo_stream="demostream"#--------------------------------------------------------------print("Create C8Client Connection...")client=C8Client(protocol='https',host=region,port=443)#--------------------------------------------------------------print("Create under demotenant, demofabric, demouser and assign permissions...")demotenant=client.tenant(name=demo_tenant,fabricname='_system',username='root',password='demo')fabric=client.tenant(name=demo_tenant,fabricname='_system',username='root',password='demo')ifnotdemotenant.has_user(demo_user):demotenant.create_user(username=demo_user,password='demouser',active=True)ifnotfabric.has_fabric(demo_fabric):fabric.create_fabric(name=demo_fabric,dclist=demotenant.dclist(detail=False))demotenant.update_permission(username=demo_user,permission='rw',fabric=demo_fabric)#--------------------------------------------------------------print("Create and populate employees collection in demofabric...")fabric=client.fabric(tenant=demo_tenant,name=demo_fabric,username=demo_user,password='demouser')#get fabric detailfabric.fabrics_detail()employees=fabric.create_collection('employees')# Create a new collection named "employees".employees.add_hash_index(fields=['email'],unique=True)# Add a hash index to the collection.employees.insert({'firstname':'Jean','lastname':'Picard','email':'jean.picard@macrometa.io'})employees.insert({'firstname':'James','lastname':'Kirk','email':'james.kirk@macrometa.io'})employees.insert({'firstname':'Han','lastname':'Solo','email':'han.solo@macrometa.io'})employees.insert({'firstname':'Bruce','lastname':'Wayne','email':'bruce.wayne@macrometa.io'})# insert data from a CSV file# path to csv file should be an absolute pathemployees.insert_from_file("~/data.csv")#--------------------------------------------------------------print("query employees collection...")cursor=fabric.c8ql.execute('FOR employee IN employees RETURN employee')# Execute a C8QL querydocs=[documentfordocumentincursor]print(docs)#--------------------------------------------------------------print("Create global & local streams in demofabric...")fabric.create_stream(demo_stream,local=False)fabric.create_stream(demo_stream,local=True)streams=fabric.streams()print("streams:",streams)#--------------------------------------------------------------

给定结构的query示例:

fromc8importC8Clientimportjsonimportwarningswarnings.filterwarnings("ignore")region="qa1-us-east-1.ops.aws.macrometa.io"#--------------------------------------------------------------print("query employees collection...")client=C8Client(protocol='https',host=region,port=443)fabric=client.fabric(tenant="demotenant",name="demofabric",username="demouser",password='poweruser')cursor=fabric.c8ql.execute('FOR employee IN employees RETURN employee')# Execute a C8QL querydocs=[documentfordocumentincursor]print(docs)

来自fabric中的集合的实时更新示例:

fromc8importC8Clientimportwarningswarnings.filterwarnings("ignore")region="qa1-us-east-1.ops.aws.macrometa.io"defcallback_fn(event):print(event)#--------------------------------------------------------------print("Subscribe to employees collection...")client=C8Client(protocol='https',host=region,port=443)fabric=client.fabric(tenant="demotenant",name="demofabric",username="demouser",password='poweruser')fabric.on_change("employees",callback=callback_fn)

示例将文档发布到流:

fromc8importC8Clientimporttimeimportwarningswarnings.filterwarnings("ignore")region="qa1-us-east-1.ops.aws.macrometa.io"#--------------------------------------------------------------print("publish messages to stream...")client=C8Client(protocol='https',host=region,port=443)fabric=client.fabric(tenant="demotenant",name="demofabric",username="demouser",password='poweruser')stream=fabric.stream()producer=stream.create_producer("demostream",local=False)foriinrange(10):msg="Hello from "+region+"("+str(i)+")"producer.send(msg.encode('utf-8'))time.sleep(10)# 10 sec

示例subscribe流中的文档:

fromc8importC8Clientimportwarningswarnings.filterwarnings("ignore")region="qa1-us-east-1.ops.aws.macrometa.io"#--------------------------------------------------------------print("consume messages from stream...")client=C8Client(protocol='https',host=region,port=443)fabric=client.fabric(tenant="demotenant",name="demofabric",username="demouser",password='poweruser')stream=fabric.stream()#you can subscribe using consumer_types option.subscriber=stream.subscribe("demostream",local=False,subscription_name="demosub",consumer_type=stream.CONSUMER_TYPES.EXCLUSIVE)foriinrange(10):msg=subscriber.receive()print("Received message '{}' id='{}'".format(msg.data(),msg.message_id()))subscriber.acknowledge(msg)

示例:流管理

stream_collection=fabric.stream()#get_stream_statsstream_collection.get_stream_stats('demostream',local=False)#for global persistent stream#Skip all messages on a stream subscriptionstream_collection.skip_all_messages_for_subscription('demostream','demosub')#Skip num messages on a topic subscriptionstream_collection.skip_messages_for_subscription('demostream','demosub',10)#Expire messages for a given subscription of a stream.#expire time is in secondsstream_collection.expire_messages_for_subscription('demostream','demosub',2)#Expire messages on all subscriptions of streamstream_collection.expire_messages_for_subscriptions('demostream',2)#Reset subscription to message position to closest timestamp#time is in milli-secondsstream_collection.reset_message_subscription_by_timestamp('demostream','demosub',5)#Reset subscription to message position closest to given position#stream_collection.reset_message_for_subscription('demostream', 'demosub')#stream_collection.reset_message_subscription_by_position('demostream','demosub', 4)#Unsubscribes the given subscription on all streams on a stream fabricstream_collection.unsubscribe('demosub')#delete subscription of a stream#stream_collection.delete_stream_subscription('demostream', 'demosub' , local=False)

spot collections的工作流

fromc8importC8Client# Initialize the client for C8DB.client=C8Client(protocol='http',host='localhost',port=8529)#Step 1: Make one of the regions in the fed as the Spot Region# Connect to System adminsys_tenant=client.tenant(name=macrometa-admin,fabricname='_system',username='root',password=macrometa-password)#Make REGION-1 as spot-regionsys_tenant.assign_dc_spot('REGION-1',spot_region=True)#Make REGION-2 as spot-regionsys_tenant.assign_dc_spot('REGION-2',spot_region=True)#Step 2: Create a geo-fabric and pass one of the spot regions. You can use the SPOT_CREATION_TYPES for the same. If you use AUTOMATIC, a random spot region will be assigned by the system.# If you specify None, a geo-fabric is created without the spot properties. If you specify spot region,pass the corresponding spot region in the spot_dc parameter.dcl=sys_tenant.dclist(detail=False)fabric=client.fabric(tenant='guest',name='_system',username='root',password='guest')fabric.create_fabric('spot-geo-fabric',dclist=dcl,spot_creation_type=fabric.SPOT_CREATION_TYPES.SPOT_REGION,spot_dc='REGION-1')#Step 3: Create spot collection in 'spot-geo-fabric'spot_collection=fabric.create_collection('spot-collection',spot_collection=True)#Step 4: Update Spot primary region of the geo-fabric. To change it, we need system admin credentialssys_fabric=client.fabric(tenant=macrometa-admin,name='_system',username='root',password=macrometa-password)sys_fabric.update_spot_region('guest','spot-geo-fabric','REGION-2')

例如restql操作:

fromc8importC8Clientimportjsonimportwarningswarnings.filterwarnings("ignore")client=C8Client(protocol='https',host=region,port=443)fabric=client.fabric(tenant="demo_tenant",name='_system',username='root',password='demo')#--------------------------------------------------------------print("save restql...")data={"query":{"parameter":{},"name":"demo","value":"FOR employee IN employees RETURN employee"}}response=fabric.save_restql(data)#--------------------------------------------------------------print("execute restql without bindVars...")response=fabric.execute_restql("demo")#--------------------------------------------------------------print("execute restql with bindVars...")response=fabric.execute_restql("demo",{"bindVars":{"name":"guest.root"}})#--------------------------------------------------------------print("get all restql...")response=fabric.get_all_restql()#--------------------------------------------------------------print("update restql...")data={"query":{"parameter":{},"value":"FOR employee IN employees Filter doc.name=@name RETURN employee"}}response=fabric.update_restql("demo",data)#--------------------------------------------------------------print("delete restql...")response=fabric.delete_restql("demo")

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用唯一的按钮标签单击按钮   代码生成如何使用Java codeModel为数组的特定索引赋值   java如何批量执行Camel SQL插入   java iText 7将ltv添加到现有签名   内存管理Java应用程序突然停止几天后(810)   带MySQL的java注册表单JavaFX在intellij中失败   如何使用eclipse为windows azure java项目启用远程调试   一种通用的java输入输出设计模式   java Android XML(RSS)忽略引号(“”)   java帮助:安卓中的8 X 10 2维按钮数组   java启动Android项目   JWrapper构建java应用程序   java如何在Android应用程序中设置基于日期/时间的默认页面加载?   java循环程序在完成后返回到起点   java Hibernate:更好的整体类还是多类映射?   回溯数独解算器的递归问题[Java]   java查找类用法   java如何在SpringWebFlow中将多个模型绑定到一个视图?