欧洲专利局(EPO)开放专利服务API的Python客户端。
项目描述
python-epo-ops-client
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_request
和 process_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限流基于一分钟滚动窗口,我们必须持久化历史(至少过去一分钟的)限流数据,以便知道适当的请求频率。每个限流器必须与一个存储对象实例化。
存储
存储对象负责
- 知道如何更新每个请求的历史记录(
Storage.update()
),确保遵守一分钟滚动窗口规则。 - 计算发出下一个请求之前需要等待多长时间(
Storage.delay_for()
)。
目前提供的唯一存储后端是SQLite,但您可以轻松编写自己的存储后端(如文件、Redis等)。要使用自定义存储类型,只需在实例化限流器对象时传递存储对象。有关更多实现细节,请参阅epo_ops.middlewares.throttle.storages.Storage
。
项目详情
python-epo-ops-client-4.1.0.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 41f7e2fe950275922f0f5f7185627cc2fa796267b2b4da515a4e67b2eec53038 |
|
MD5 | 93562b5baf1def68f96964421c273513 |
|
BLAKE2b-256 | cecf2cc1f43d7d32e3c616178088ca4f7a6a724033f509f84545a913f4614011 |
python_epo_ops_client-4.1.0-py2.py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dcb436f1131bb09cb928100ca35ed40e896e7cdc0f11ac7824fb2e1f7d2b151f |
|
MD5 | a2d8c203e73947542edbb427e3b180fb |
|
BLAKE2b-256 | 3eeea28416ed4f1a0bea0c655700d9ead92c8d9d491513914a7624805a4a5cd5 |