跳转到主要内容

欧洲专利局(EPO)开放专利服务API的Python客户端。

项目描述

python-epo-ops-client

PyPI PyPI - Python Version GHA Codecov

python-epo-ops-client 是一个Apache2许可的客户端库,用于访问欧洲专利局("EPO")的开放专利服务("OPS")v.3.2(基于参考指南的v 1.3.16)。

import epo_ops

client = epo_ops.Client(key='abc', secret='xyz')  # Instantiate client
response = client.published_data(  # Retrieve bibliography data
  reference_type = 'publication',  # publication, application, priority
  input = epo_ops.models.Docdb('1000000', 'EP', 'A1'),  # original, docdb, epodoc
  endpoint = 'biblio',  # optional, defaults to biblio in case of published_data
  constituents = []  # optional, list of constituents
)

功能

python-epo-ops-client 抽象化了访问EPO OPS的复杂性

  • 正确格式化请求
  • 将配额问题作为适当的HTTP错误抛出
  • 自动处理令牌认证和续订
  • 正确处理限制
  • 为OPS服务器添加可选缓存以最小化影响

python-epo-ops-client 有两层主要结构:客户端和中间件。

客户端

客户端包含所有格式化和令牌处理逻辑,是您将与之交互的主要部分。

当您发出请求时,响应是一个 requests.Response 对象。如果 response.status_code != 200,则将引发 requests.HTTPError 异常——如果您想处理这些异常,这将是您的责任。处理的一个情况是访问令牌已过期:在这种情况下,客户端将自动处理HTTP 400状态并更新令牌。

请注意,客户端不会尝试解释OPS提供的数据,因此解析XML或JSON有效载荷以供您自己使用的责任在您身上。

以下自定义异常在OPS配额超出时引发,它们都位于 epo_ops.exceptions 模块中,并且是 requests.HTTPError 的子类,因此提供相同的行为

  • IndividualQuotaPerHourExceeded
  • RegisteredQuotaPerWeekExceeded

再次强调,解析响应并决定要做什么取决于您。

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

客户端方法 API端点 throttle
family(reference_type, input, endpoint=None, constituents=None) family inpadoc
image(path, range=1, extension='tiff') published-data/images images
number(reference_type, input, output_format) number-service other
published_data(reference_type, input, endpoint='biblio', constituents=None) published-data retrieval
published_data_search(cql, range_begin=1, range_end=25, constituents=None) published-data/search search
register(reference_type, input, constituents=['biblio']) register other
register_search(cql, range_begin=1, range_end=25) register/search other
register_search(cql, range_begin=1, range_end=25) register/search other

可以通过将有效模型列表传递给 published_data 输入字段来实现批量操作。

有关如何使用每个服务的更多信息,请参阅 OPS指南 或使用 开发者区域

请通过增强 epo_ops.api.Client 类提交以下服务的pull请求

  • 法律服务

中间件

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

每个中间件都应该继承 middlewares.Middleware 并实现 process_requestprocess_response 方法。

有两个内置中间件类:Throttler和Dogpile。Throttler负责OPS节流规则,并将相应地延迟请求。Dogpile是一个可选的缓存,它将缓存所有HTTP状态200、404、405和413响应。

默认情况下,仅启用Throttler中间件,如果您想启用缓存

import epo_ops

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

您还需要在项目中安装缓存依赖项,例如 pip install dogpile.cache

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

Dogpile

Dogpile基于(惊喜)dogpile.cache。默认情况下,它使用具有2周超时的DBMBackend区域进行实例化。

Dogpile有三个可选的实例化参数

  • region:您可以传递任何有效的dogpile.cache区域作为缓存的后端
  • kwargs_handlers:一个关键字参数处理器列表,它将使用这些处理器处理传递给请求对象的kwargs,以提取用于生成缓存键的元素。目前实现了一个处理器(默认实例化)以确保范围请求头是缓存键的一部分。
  • http_status_codes:您希望缓存的HTTP状态码列表。默认情况下,缓存200、404、405和413响应。

注意:dogpile.cache默认未安装,如果需要使用它,请在项目中执行pip install dogpile.cache

限流器

限流器包含处理不同限流场景的所有逻辑。由于OPS限流基于一分钟滚动窗口,我们必须持久化历史(至少过去一分钟的)限流数据,以便知道适当的请求频率。每个限流器必须与一个存储对象实例化。

存储

存储对象负责

  1. 知道如何更新每个请求的历史记录(Storage.update()),确保遵守一分钟滚动窗口规则。
  2. 计算发出下一个请求之前需要等待多长时间(Storage.delay_for())。

目前提供的唯一存储后端是SQLite,但您可以轻松编写自己的存储后端(如文件、Redis等)。要使用自定义存储类型,只需在实例化限流器对象时传递存储对象。有关更多实现细节,请参阅epo_ops.middlewares.throttle.storages.Storage

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

python-epo-ops-client-4.1.0.tar.gz (28.7 kB 查看哈希)

上传时间

构建分布

python_epo_ops_client-4.1.0-py2.py3-none-any.whl (20.7 kB 查看哈希)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面