Python唇膏包装。

baton的Python项目详细描述


Build Statuscodecov.io指挥棒python包装器

简介

python 3包装,baton, 取代[元数据检查中以前的实现] (https://github.com/wtsi-hgi/metadata-check/blob/9cd5c41b0f2e254fc1d6249a14752bd428587bb7/irods_baton/baton_wrapper.py)。

包装器提供了对baton大部分功能的访问。

如何使用

先决条件

  • python>;=3.5.2
  • 接力棒=0.16.4
  • irods=4.1.9

注意:虽然旧版本的指挥棒/irods可能可以工作,但是 库仅针对上面指定的版本。

安装

稳定版本可以通过 PyPI

$ pip3 install baton

出血边缘版本可以直接从github安装:

$ pip3 install git+https://github.com/wtsi-hgi/python-baton-wrapper.git@<commit_id_or_branch_or_tag>#egg=baton

若要将此库声明为项目的依赖项,请将其添加到 requirement.txt文件。

api

设置

要使用irods api,必须首先定义到irods的“连接” 服务器:

frombaton.apiimportconnect_to_irods_with_baton,Connection# Setup connection to iRODS using batonirods=connect_to_irods_with_baton("/where/baton/binaries/are/installed/",skip_baton_binaries_validation=False)# type: Connection

数据对象和集合

api提供了检索数据对象模型和 存储在irods服务器上的集合。类似于接力棒的json 提供,模型不包含有效载荷。但他们确实 提供对指挥棒可以检索的所有信息的访问 实体,包括访问控制列表(acl)、自定义元数据 (avus),数据对象的集合内容和信息 复制品。所有方法都提供不加载AVU的选项。

frombaton.modelsimportDataObject,Collection,SearchCriterion,ComparisonOperator# Get models of data objects or collections at the given path(s) in iRODSirods.data_object.get_by_path("/collection/data_object",load_metadata=False)# type: DataObject:irods.collection.get_by_path(["/collection","/other_collection"])# type: Sequence[Collection]:# Setup search for data objects or collections based on their metadatasearch_criterion_1=SearchCriterion("attribute","match_value",ComparisonOperator.EQUALS)search_criterion_2=SearchCriterion("other_attribute","other_match_value",ComparisonOperator.LESS_THAN)# Do search to get models of data objects or collectionsirods.data_object.get_by_metadata(search_criterion_1,zone="OptionalZoneRestriction")# type: Sequence[DataObject]irods.collection.get_by_metadata([search_criterion_1,search_criterion_2],load_metadata=False)# type: Sequence[Collection]# Get models of data objects or collections contained within a collection(s)irods.collection.get_all_in_collection("/collection",load_metadata=False)# type: Sequence[Collection]irods.data_object.get_all_in_collection(["/collection","/other_collection"])# type: Sequence[DataObject]

元数据(AVU)

api提供了检索和操作自定义 与数据对象和集合关联的元数据(AVU)。

警告:当前不支持读取/写入单元 AVUS的财产。

尽管数据对象和 收集,由于irods的工作方式,有必要知道 路径对应的实体类型,以便检索元数据。

frombaton.collectionsimportIrodsMetadatametadata_1=IrodsMetadata({"key":{"value_1"}})metadata_2=IrodsMetadata({"another_key":{"value_1","value_2"}})# Metadata (methods available for both `data_object` and `collection`)irods.data_object.metadata.get_all("/collection/data_object")# type: IrodsMetadatairods.collection.metadata.get_all(["/collection","/other_collection"])# type: Sequence[IrodsMetadata]# `metadata_1` is added to the data object with the first path in the list and `metadata_2` is added to the secondirods.data_object.metadata.add(["/collection/data_object","/other_data_object"],[metadata_1,metadata_2])irods.collection.metadata.add("/collection",metadata_1)irods.data_object.metadata.set("/collection/data_object",metadata_1)# `metadata_1` is added to both collections in the listirods.collection.metadata.set(["/collection","/other_collection"],metadata_1)irods.data_object.metadata.remove(["/collection/data_object","/other_data_object"],[metadata_1,metadata_2])irods.collection.metadata.remove("/collection",metadata_1)irods.data_object.metadata.remove_all("/collection/data_object")irods.collection.metadata.remove_all(["/collection","/other_collection"])

访问控制列表(ACL)

api提供了检索和操作访问的能力 与数据对象和集合关联的控制列表(ACL)。

frombaton.modelsimportAccessControl# ACLs. Note: it is implied that the owner is in the same zone as the entity to which the access control is appliedacl_examples=[AccessControl(User("user_1","zone_user_is_in"),AccessControl.Level.READ),AccessControl(User("group_1","zone_group_is_in"),AccessControl.Level.WRITE),AccessControl("user_1#zone_user_is_in",AccessControl.Level.OWN)]irods.data_object.access_control.get_all("/collection/data_object")# type: Set[AccessControl]irods.collection.access_control.get_all(["/collection","/another/collection"])# type: List[Set[AccessControl]]irods.data_object.access_control.add_or_replace(["/collection/data_object","/another/data_object"],acl_examples[0])irods.collection.access_control.add_or_replace("/collection",acl_examples,recursive=True)irods.data_object.access_control.set("/collection/data_object",acl_examples[1])irods.collection.access_control.set(["/collection","/another/collection"],acl_examples[0],recursive=False)irods.data_object.access_control.revoke(["/collection/data_object","/another/data_object"],acl_examples)irods.collection.access_control.revoke("/collection",acl_examples[1],recursive=True)irods.data_object.access_control.revoke_all(["/collection/data_object","/another/data_object"])irods.collection.access_control.revoke_all("/collection",recursive=True)

通过特定查询自定义对象

irods支持返回新类型对象的特定查询。在 为了通过这个库在irods中使用这些自定义对象, 应制作物体模型。那么,一个子类 BatonCustomObjectMapper需要定义以指定 可以使用特定查询(或特定查询的数量)来检索 从和/或修改irods中的对象。

api提供检索已安装的查询的能力 在irods服务器上(具有讽刺意味的是,通过使用特定的查询!):

frombaton.modelsimportSpecificQuery# Get specific queries that have been installed on the iRODS serverirods.specific_query.get_all(zone="OptionalZoneRestriction")# type: Sequence[SpecificQuery]

json序列化/反序列化

几乎所有irods对象模型都有json编码器和解码器。 在这个图书馆里。这些可以用来把模型转换成指挥棒 定义的json表示。所有序列化程序/反序列化程序都扩展 JSONEncoderJSONDecoder(大多数通过使用 hgijson库)含义 它们可以与python内置的json一起使用 包装<;https://docs.python.org/3/library/json.html>;`` uu:

importjsonfrombaton.jsonimportDataObjectJSONEncoder,DataObjectJSONDecoder,CollectionJSONEncoder,CollectionJSONDecoder,IrodsMetadataJSONEncoder,IrodsMetadataJSONDecoder,AccessControlJSONEncoder,AccessControlJSONDecoderdata_object_as_json_string=json.dumps(data_object,cls=DataObjectJSONEncoder)# type: strdata_object=json.loads(data_object_as_json_string,cls=DataObjectJSONDecoder)# type: DataObjectcollection_as_json_string=json.dumps(collection,cls=CollectionJSONEncoder)# type: strcollection=json.loads(collection_as_json_string,cls=CollectionJSONDecoder)# type: Collectionmetadata_as_json_string=json.dumps(metadata,cls=IrodsMetadataJSONEncoder)# type: strmetadata=json.loads(metadata_as_json_string,cls=IrodsMetadataJSONDecoder)# type: IrodsMetadataacl_as_json_string=json.dumps(metadata,cls=AccessControlJSONEncoder)# type: stracl=json.loads(acl_as_json_string,cls=AccessControlJSONDecoder)# type: List[AccessControl]

开发

设置

同时安装库依赖项和 测试:

$ pip3 install -q -r requirements.txt
$ pip3 install -q -r test_requirements.txt

不需要安装指挥棒。

有些测试使用Docker因此是docker 守护进程必须在测试计算机上运行,环境为 变量DOCKER_TLS_VERIFYDOCKER_HOSTDOCKER_CERT_PATH集。

测试

使用nosetests,在项目目录中,运行:

$ nosetests -v --cover-inclusive --tests baton/tests, baton/tests/_baton

要生成包含nosetests的测试覆盖率报告,请执行以下操作:

$ nosetests -v --with-coverage --cover-package=baton --cover-inclusive --tests baton/tests, baton/tests/_baton

热门话题
java解析分数   xslt捕获java中的xsl:message输出   java Spring安全性:手动恢复默认配置   考虑到夏令时,java是比较Hibernate和Oracle日期的正确方法   java如何将主线程与创建的工作线程连接?   java Intellij无法导入Gradle项目,因为存在代理   解析如何在Java中使用String对象解析输入   javajavax。邮政AuthenticationFailedException:535身份验证失败(#5.7.1)   java MouseMotionListener:鼠标和触控板给出不同的结果   MBean的java SNMP监控(snmpadaptor.sar中的attributes.xml)(JBoss)   java以特定的时间间隔刷新令牌以供API使用   Android中的正则表达式是否与Java中的正则表达式相同?   java在以“我的应用”身份打开应用时获取文件路径   java将变量从valuechanged方法传输到actionperformed   java PDF“保存”旋转?   Android Studio、Java、TextView不反映我编写的代码