欧洲专利局开放专利服务api的python客户端

python-epo-ops-client的Python项目详细描述


python epo ops客户端

pypi versionbuild statuscoverage status

python epo ops client是一个 访问欧洲专利局的开放专利 服务("ops")v.3.2(基于参考指南的 v 1.3.4)。

importepo_opsclient=epo_ops.Client(key='abc',secret='xyz')# Instantiate clientresponse=client.published_data(# Retrieve bibliography datareference_type='publication',# publication, application, priorityinput=epo_ops.models.Docdb('1000000','EP','A1'),# original, docdb, epodocendpoint='biblio',# optional, defaults to biblio in case of published_dataconstituents=[]# optional, list of constituents)

功能

python_epo_ops_客户端抽象了访问epo的复杂性 OPS:

  • 正确格式化请求
  • 将配额问题冒泡为正确的http错误
  • 自动处理令牌身份验证和续订
  • 正确处理节流阀
  • 添加可选缓存以将对OPS服务器的影响降至最低

python-epo-ops-client有两个主要层:client和 中间件。

客户机

客户端包含所有格式化和令牌处理逻辑,并且 您将主要与之互动的内容。

当您发出请求时,响应是a 请求。响应 对象。 如果 response.status_code!=200 然后a 请求。httperror 会有例外-你有责任处理这些 如果你想例外。处理的一个案子是 访问令牌已过期:在这种情况下,客户端将自动 处理HTTP 400状态并续订令牌。

请注意,客户端不会尝试解释 ops,所以您有责任解析 你自己的目的。

当ops配额为 超过,它们都在 epo_ops.exceptions 模块中,并且 requests.httperror 的子类,因此提供相同的 行为:

  • 需要单独报价
  • 已注册的QuotaPerWeekeXceed

同样,由您分析响应并决定要做什么。

目前客户端知道如何发出以下请求 服务:

<表> < COLGROUP > < COL/> < COL/> < COL/> <广告> 客户端方法 API终点 节流阀 < /广告> <正文> 系列(参考类型,输入,端点=无, 成分=无) 家庭 inpadoc 图像(路径,范围=1, 扩展名为tiff') 发布的数据/图像 图像 编号(参考类型、输入、输出格式) 号码服务 其他 发布的数据(参考类型,输入, 端点='biblio', 成分=无) 公布数据 检索 已发布的数据搜索(cql,range\u begin=1, 范围=25,成分=无) 发布数据/搜索 搜索 寄存器(参考类型,输入, 成分=['biblio']) 注册 其他 寄存器搜索(cql,range_begin=1, 范围=25) 注册/搜索 其他 寄存器搜索(cql,range_begin=1, 范围=25) 注册/搜索 其他 <表>

有关详细信息,请参阅 操作指南 或使用 开发人员区域 。信息 如何使用每项服务。

请通过增强 epo ops.api.client 类:

  • 法律服务
  • 批量操作

中间件

所有请求和响应都通过每个中间件对象传递 在client.middlewares中列出。请求按顺序处理 列出,并按 相反的顺序处理响应。

每个中间件都应该子类化并实现 处理请求 处理响应 方法。

有两个现成的中间件类:throttler和dogpile。 throttler负责ops节流规则,并将延迟 因此提出要求。dogpile是一个可选的缓存,它将缓存所有 HTTP状态200、404、405和413响应。

默认情况下,如果您希望 启用缓存:

importepo_opsmiddlewares=[epo_ops.middlewares.Dogpile(),epo_ops.middlewares.Throttler(),]client=epo_ops.Client(key='key',secret='secret',middlewares=middlewares,)

请注意,在大多数情况下,应该首先使用缓存中间件。

节流阀

节流器包含处理不同节流的所有逻辑 情节。因为操作限制是基于一分钟滚动窗口的, 我们必须坚持历史数据(至少在过去一分钟内如此) 以便知道正确的请求频率。每个节流阀 必须用存储对象实例化。

存储

存储对象负责:

  1. 知道如何根据每个请求更新历史记录 ( storage.update() ),确保观察一分钟滚动 窗口规则。
  2. 计算在发出下一个请求之前等待多长时间 ( 存储.delay_for() )。

目前唯一的存储后端provded是sqlite,但是你可以 轻松编写自己的存储后端(如文件、redis等)。到 使用自定义存储类型,只需在 实例化节流器对象。见 epo ops.middlewares.throttle.storages.storage 了解更多信息 实施细节。


测试

使用pytest编写测试。运行测试:

  1. 使用EPO注册OPS用户登录
  2. 创建应用程序
  3. 在apiary上查找模拟服务器url
  4. 设置apiary_url、ops_key和ops_secret环境 相应的变量
  5. 进行测试

测试必须在工作的Internet连接下运行,因为两个操作 模拟养蜂场服务已在线。

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

推荐PyPI第三方库


热门话题
java传递位置作为FragmentPagerAdapter中片段的参数   html Java Jsoup循环打印   java如何使用FileOutputStream写入数据而不丢失旧数据?   java在测试用例类/方法中执行sql before/after/in   java在javafx中注册鼠标处理程序,但处理程序不是内联的   Android嵌入了一个C++库的java代码,不需要TopPLE程序来嵌入它?   片段类内部的java ProgressBar导致setMax方法出现NullPointerException?   带有google app engine的java Activator Play框架   java如何解析星级而不是字符串?   java如何在基本实体中定义通用主键字段?   通过扩展实现Java克隆   使用CipherOutputStream的java递归加密提供一个空字节[]   在运行时提取字段值的Java服务   Java 11和spring boot从spring boot应用程序的fat jar中的依赖项jar加载资源   java尝试使用J2SE枚举所有可用的Wifi网络   使用Java库进行SWIFT MT消息解析   java拆分非逗号分隔的字符串   java为什么toString()不能是静态方法?   java在连接到集群数据库时遇到mongo异常   java访问Hashmap中存储的json有效负载值