swiftclient

OpenStack Swift Python 客户端绑定。

swiftclient.authv1

用于 keystoneauth 的身份验证插件,以支持 v1 端点。

很久以前,还没有 Keystone。Swift 使用一种现在被称为“v1”的身份验证机制,它只使用 HTTP 头部。身份验证请求和响应看起来像这样

> GET /auth/v1.0 HTTP/1.1
> Host: <swift server>
> X-Auth-User: <tenant>:<user>
> X-Auth-Key: <password>
>
< HTTP/1.1 200 OK
< X-Storage-Url: http://<swift server>/v1/<tenant account>
< X-Auth-Token: <token>
< X-Storage-Token: <token>
<

此插件提供了一种方法,使 Keystone 会话(以及使用它们的客户端,如 python-openstackclient)能够与仍然使用此机制的旧身份验证端点进行通信,例如 tempauth、swauth 或 https://identity.api.rackspacecloud.com/v1.0

class swiftclient.authv1.AccessInfoV1(auth_url, storage_url, account, username, auth_token, token_life)

用于封装原始 v1 身份验证令牌的对象。

classmethod from_state(data)

反序列化给定的状态。

返回值:

使用给定的状态创建一个新的 AccessInfoV1 对象

get_state()

序列化当前状态。

will_expire_soon(stale_duration)

确定是否即将过期。

返回值:

如果过期时间在给定的持续时间内,则返回 True

class swiftclient.authv1.PasswordLoader

用于 v1password 插件的选项处理。

property available: bool

返回插件是否可用以加载。

如果插件缺少依赖项或由于某种原因不应在当前系统上可用,则应覆盖此属性并返回 False 以将其从插件列表中排除。

返回类型:

bool

create_plugin(**kwargs: Any) T

从加载程序可用的选项创建插件。

给定加载程序指定的选项,创建适当的插件。您可以覆盖此函数以在加载程序中进行操作。

过去,通过提供 plugin_class 属性来指定此内容,但仍然支持此方法,但是指定属性不允许您根据呈现的选项选择插件类型。

如果您希望根据呈现的选项返回不同的插件,请覆盖此函数,否则可以简单地提供 plugin_class 属性。

添加于 2.9

get_options()

返回与身份验证插件关联的参数列表。

此列表可用于生成 CLI 或配置文件参数。

load_from_options(**kwargs: Any) T

从从 get_options 获取的参数创建插件。

客户端可以覆盖此函数以进行参数验证或处理注册选项与创建插件所需的选项之间的差异。

load_from_options_getter(getter: Callable[opts.Opt], Any], **kwargs: Any) T

从返回适当值的 getter 函数加载插件。

为了处理除了提供的 CONF 和 CLI 加载之外的情况,您可以指定一个自定义加载程序函数,该函数将查询选项值。getter 是一个函数,它接受一个 keystoneauth1.loading.Opt 并返回一个用于加载的值。

参数:

getter (callable) – 一个返回给定 opt 值的函数。

返回值:

一个身份验证插件。

返回类型:

keystoneauth1.plugin.BaseAuthPlugin

plugin_class

别名 PasswordPlugin

class swiftclient.authv1.PasswordPlugin(auth_url, username, password, project_name=None, reauthenticate=True)

用于使用用户名和密码进行身份验证的插件。

从 BaseIdentityPlugin 继承可以获得一些好处,例如处理身份验证期间的令牌失效和锁定。

参数:
  • auth_url (string) – 身份验证的 Identity v1 端点。

  • username (string) – 身份验证的用户名。

  • password (string) – 身份验证的密码。

  • project_name (string) – 身份验证后的 Swift 帐户。我们使用“project_name”是为了与其他身份验证插件保持一致。

  • reauthenticate (string) – 是否允许重新身份验证。

access_class

别名 AccessInfoV1

get_access(session: Session, **kwargs: Any) AccessInfo

获取或返回当前的 AccessInfo 对象。

如果存在有效的 AccessInfo,则返回它,否则将获取一个新的 AccessInfo。

参数:

session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

引发:

keystoneauth1.exceptions.http.HttpError – 来自无效 HTTP 响应的错误。

返回值:

有效的 AccessInfo

返回类型:

keystoneauth1.access.AccessInfo

get_all_version_data(session: Session, interface: str | list[str] | None = 'public', region_name: str | None = None, service_type: str | None = None) dict[str, dict[str, dict[str, list[VersionData]]]]

获取目录中所有服务的版本数据。

参数:
  • session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

  • interface – 要获取版本数据的端点类型。可以是一个单一值或一个值列表。值为 None 表示应查询所有接口。(可选,默认为 public)

  • region_name (string) – 要获取版本数据的端点区域。值为 None 表示应查询所有区域。(可选,默认为 None)

  • service_type (string) – 限制版本数据到单个服务。(可选,默认为 None)

返回值:

一个字典,键为 region_name,值为包含字典的字典,字典的键为 interface,值为 VersionData 列表。

get_api_major_version(session: Session, *, endpoint_override: str | None = None, service_type: str | None = None, interface: str | None = None, region_name: str | None = None, service_name: str | None = None, version: str | None = None, allow: dict[str, Any] | None = None, allow_version_hack: bool = True, skip_discovery: bool = False, discover_versions: bool = False, min_version: str | int | float | Iterable[str | int | float] | None = None, max_version: str | int | float | Iterable[str | int | float] | None = None, **kwargs: Any) tuple[int | float, ...] | None

获取服务的 API 主要版本。

如果不存在有效的令牌,则将使用会话和 kwargs 获取新的令牌。

version、min_version 和 max_version 都可以作为字符串或元组提供。

有效的接口类型:publicpublicURL

internalinternalURLadmin 或 ‘adminURL`

参数:
  • session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

  • endpoint_override (str) – 用于版本发现的 URL。

  • service_type (string) – 要查找端点的服务类型。如果未提供 service_type,则此插件将返回 None(失败)。

  • interface – 端点类型。可以是一个值或一个值列表。如果它是一个值列表,它们将按优先级顺序查找。也可以是 keystoneauth1.plugin.AUTH_INTERFACE,以指示应使用目录中的 auth_url 代替值。(可选,默认为 public)

  • region_name (string) – 端点应存在的区域。(可选)

  • service_name (string) – 目录中的服务名称。(可选)

  • version – 此端点所需的最低版本号。(可选)

  • allow (dict) – 发现 API 版本时传递的额外过滤器。(可选)

  • allow_version_hack (bool) – 允许 keystoneauth 破解目录 URL 以支持旧方案。(可选,默认为 True)

  • skip_discovery (bool) – 即使提供了版本,是否跳过版本发现。如果提供了 endpoint_override 或类似内容,并且获取有关端点的其他信息没有用,则此选项很有用。

  • discover_versions (bool) – 即使对于满足主要版本请求来说不是必需的,是否从版本发现文档获取版本元数据。默认为 False,因为 get_endpoint 不需要元数据。(可选,默认为 False)

  • min_version – 可接受的最低版本。与 version 互斥。如果提供了 min_version 但没有 max_version,则 max_version 就像 ‘latest’ 一样。 (可选)

  • max_version – 可接受的最高版本。与 version 互斥。如果提供了 min_version 但没有 max_version,则 max_version 就像 ‘latest’ 一样。 (可选)

引发:

keystoneauth1.exceptions.http.HttpError – 来自无效 HTTP 响应的错误。

返回值:

服务发现的 API 主要版本。

返回类型:

tuple 或 None

注意

实现说明如下。用户不需要了解这些实现说明。 get_api_major_version 应该以尽可能低的成本完成预期的事情,同时仍然尽可能地一致地返回值。

在许多情况下,可以在不实际调用发现端点的情况下满足主要版本(例如,当版本在 URL 中时)。如果用户拥有一个云,其版本化的端点 https://volume.example.com/v3 位于 block-storage 服务的目录中,并且他们执行

client = adapter.Adapter(
    session,
    service_type='block-storage',
    min_version=2,
    max_version=3,
)
volume_version = client.get_api_major_version()

版本实际上将返回,而无需进行任何 API 调用,只需获取令牌即可。因此,get_api_major_version() 首先使用 discover_versions=False 调用 get_endpoint_data()

如果他们的目录具有未版本化的端点 https://volume.example.com 用于 block-storage 服务,并且他们执行此操作

client = adapter.Adapter(session, service_type='block-storage')

客户端现在设置为“使用目录中的任何内容”。由于 URL 没有版本,因此使用 discover_versions=Falseget_endpoint_data() 将导致 api_version=None。(未请求版本,因此不需要进行往返)

为了确定端点的实际版本,我们必须进行往返。因此,如果 api_version 在第一次调用之后为 None,则 get_api_major_version() 将使用 discover_versions=True 再次调用 get_endpoint_data()

get_auth_ref(session, **kwargs)

从 v1 端点获取令牌。

不应独立调用此函数,并预计通过 do_authenticate 函数调用。

如果插件缓存的 AccessInfo 对象无效,将调用此函数。因此,插件应始终在调用时获取新的 AccessInfo。如果您只想检索当前的身份验证数据,则应使用 get_access。

参数:

session – 可以用于通信的会话对象。

返回值:

令牌访问信息。

get_auth_state()

检索插件当前的身份验证状态。

返回值:

原始 Python 数据(可以 JSON 序列化),可以移动到同一类型的另一个插件中以具有相同的身份验证状态。

get_cache_id() str | None

获取唯一标识身份验证选项的标识符。

返回的标识符不必可分解或以其他方式提供重现插件的任何方法。

此字符串必须在用于唯一标识此插件的任何参数发生更改时更改。它不应在插件重新身份验证时更改。

返回值:

选项的唯一字符串

返回类型:

如果不支持或不可用,则为 str 或 None。

get_cache_id_elements()

获取使此身份验证插件唯一化的元素。

get_connection_params(session: ks_session.Session) ConnectionParams

返回插件所需的任何其他连接参数。

参数:

session (keystoneauth1.session.Session) – 该认证插件所属的会话对象。

返回值:

传递给 requests 库的参数。只有 certverify 参数可能会被返回。

返回类型:

dict

get_discovery(*args, **kwargs)

为 URL 返回发现对象。

检查会话和插件缓存,查看是否已经对 URL 执行过发现,如果是,则返回它,否则创建一个新的发现对象,将其缓存并返回它。

此函数预计由子类使用,用户不需要使用。

参数:
  • session (keystoneauth1.session.Session) – 用于发现的会话对象。

  • url (str) – 要查找的 URL。

  • authenticated (bool) – 在发现调用中包含 token。(可选)默认为 None(如果安装了插件则使用 token)。

引发:
  • keystoneauth1.exceptions.discovery.DiscoveryFailure – 如果由于某种原因查找失败。

  • keystoneauth1.exceptions.http.HttpError – 来自无效 HTTP 响应的错误。

返回值:

包含查找该 URL 结果的发现对象。

get_endpoint(session, interface='public', **kwargs)

为客户端返回一个端点。

get_endpoint_data(session: Session, *, endpoint_override: str | None = None, discover_versions: bool = True, service_type: str | None = None, interface: str | None = None, region_name: str | None = None, service_name: str | None = None, allow: dict[str, Any] | None = None, allow_version_hack: bool = True, skip_discovery: bool = False, min_version: str | int | float | Iterable[str | int | float] | None = None, max_version: str | int | float | Iterable[str | int | float] | None = None, **kwargs: Any) EndpointData | None

为服务返回有效的端点数据。

如果不存在有效的令牌,则将使用会话和 kwargs 获取新的令牌。

version、min_version 和 max_version 都可以作为字符串或元组提供。

有效的接口类型:publicpublicURL

internalinternalURLadmin 或 ‘adminURL`

参数:
  • session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

  • endpoint_override (str) – 代替在目录中查找而使用的 URL。将跳过目录查找,但将运行版本发现。将 allow_version_hack 设置为 False(可选)

  • discover_versions (bool) – 即使不需要满足主版本请求,是否从版本发现文档获取版本元数据。(可选,默认为 True)

  • service_type (string) – 要查找端点的服务类型。如果未提供 service_type,则此插件将返回 None(失败)。

  • interface – 端点类型。可以是一个值或一个值列表。如果它是一个值列表,它们将按优先级顺序查找。也可以是 keystoneauth1.plugin.AUTH_INTERFACE,以指示应使用目录中的 auth_url 代替值。(可选,默认为 public)

  • region_name (string) – 端点应存在的区域。(可选)

  • service_name (string) – 目录中的服务名称。(可选)

  • allow (dict) – 发现 API 版本时传递的额外过滤器。(可选)

  • allow_version_hack (bool) – 允许 keystoneauth 破解目录 URL 以支持旧方案。(可选,默认为 True)

  • skip_discovery (bool) – 即使提供了版本,是否跳过版本发现。如果提供了 endpoint_override 或类似内容,并且获取有关端点的其他信息没有用,则此选项很有用。

  • min_version – 可接受的最低版本。与 version 互斥。如果提供了 min_version 但没有 max_version,则 max_version 就像 ‘latest’ 一样。 (可选)

  • max_version – 可接受的最高版本。与 version 互斥。如果提供了 min_version 但没有 max_version,则 max_version 就像 ‘latest’ 一样。 (可选)

  • kwargs – 已忽略。

引发:

keystoneauth1.exceptions.http.HttpError – 来自无效 HTTP 响应的错误。

返回值:

有效的 EndpointData 或不可用的 None。

返回类型:

keystoneauth1.discover.EndpointData 或 None

get_headers(session: ks_session.Session) dict[str, str] | None

获取消息的身份验证头。

这是旧的 get_token 的更通用的替代方案,允许插件指定与 OpenStack 标准“X-Auth-Token”头不同的或额外的身份验证头。

如何获取身份验证头由插件决定。如果头仍然有效,则可以重用、从缓存中检索,或者插件可以调用对服务器的身份验证请求。

get_headers 的默认实现调用 get_token 方法,以使旧式插件能够继续正常运行。子类可以自由地完全覆盖此函数以提供他们想要的头。

返回 None 将指示无法检索到 token,并且授权失败。可以通过返回一个空字典来实现不添加任何身份验证数据。

参数:

session (keystoneauth1.session.Session) – 该认证插件所属的会话对象。

返回值:

用于验证消息的头,或者失败的 None。请注意,空字典是一个有效的、非失败的响应。

返回类型:

dict

get_project_id(session: Session) str | None

返回插件认证到的项目 ID。

只要可能,项目 ID 应该从 token 推断出来,但是某些 URL 和其他地方需要访问当前认证的项目 ID。

参数:

session (keystoneauth1.session.Session) – 一个会话对象,以便插件可以进行 HTTP 调用。

返回值:

一个项目标识符,如果不可用则为 None。

返回类型:

str

get_sp_auth_url(*args, **kwargs)

从服务提供商对象返回 auth_url。

此 URL 用于从远程云获取未作用域的联合 token。

参数:

sp_id (string) – 要查询的服务提供商的 ID。

返回值:

一个服务提供商 auth_url,如果不可用则为 None。

返回类型:

str

get_sp_url(*args, **kwargs)

从服务提供商对象返回 sp_url。

此 URL 用于将 SAML2 断言传递到远程云。

参数:

sp_id (str) – 要查询的服务提供商的 ID。

返回值:

一个服务提供商 sp_url,如果不可用则为 None。

返回类型:

str

get_token(session: Session) str | None

返回有效的身份验证 token。

如果不存在有效的 token,则将获取一个新的 token。

参数:

session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

引发:

keystoneauth1.exceptions.http.HttpError – 来自无效 HTTP 响应的错误。

返回值:

一个有效的 token。

返回类型:

字符串

get_user_id(session: Session) str | None

返回插件的唯一用户标识符。

只要可能,用户 ID 应该从 token 推断出来,但是某些 URL 和其他地方需要访问当前认证的用户 ID。

参数:

session (keystoneauth1.session.Session) – 一个会话对象,以便插件可以进行 HTTP 调用。

返回值:

一个用户标识符,如果不可用则为 None。

返回类型:

str

invalidate() bool

使当前的身份验证数据失效。

这应该导致在下次调用时获取新的 token。

如果返回 Unauthorized HTTP 响应以指示 token 可能已被撤销或现在无效,则插件可能会失效。

返回值:

如果插件执行了某些操作以使其失效,则为 True。这意味着尝试再次是有意义的。如果未发生任何事情,则返回 False 以指示放弃。

返回类型:

bool

set_auth_state(data)

安装插件现有的身份验证状态。

获取 get_auth_state 的输出,并将该身份验证状态安装到当前的身份验证插件中。

swiftclient.client

内部使用的 OpenStack Swift 客户端库

class swiftclient.client.Connection(authurl=None, user=None, key=None, retries=5, preauthurl=None, preauthtoken=None, snet=False, starting_backoff=1, max_backoff=64, tenant_name=None, os_options=None, auth_version='1', cacert=None, insecure=False, cert=None, cert_key=None, ssl_compression=True, retry_on_ratelimit=True, timeout=None, session=None, force_auth_retry=False)

方便地进行请求的类,该请求也会重试

请求将带有 X-Auth-Token 头,其值为预先认证的 token,或者从认证服务使用构造函数作为参数提供的用户凭据获得的 token。 如果 os_options 包含 service_username,则请求还将带有 X-Service-Token 头,其值为从认证服务使用服务凭据获得的 token。 在这种情况下,请求 URL 将设置为从认证服务为服务用户获得的 storage_url,除非由 preauthurl 覆盖。

参数:
  • authurl – 认证 URL

  • user – 要认证的用户名

  • key – 用于认证的密钥/密码

  • retries – 在失败之前重试请求的次数

  • preauthurl – 存储 URL(如果您已经过认证)

  • preauthtoken – 认证 token(如果您已经过认证) 注意,指定 preauthtoken 时不需要 authurl/user/key/tenant_name

  • snet – 使用 SERVICENET 内部网络,默认值为 False

  • starting_backoff – 重试之间的初始延迟(秒)

  • max_backoff – 重试之间的最大延迟(秒)

  • auth_version – OpenStack 认证版本,默认值为 1.0

  • tenant_name – 租户/帐户名称,连接到 auth 2.0 系统时需要。

  • os_options – OpenStack 选项,可以包含 tenant_id、auth_token、service_type、endpoint_type、tenant_name、object_storage_url、region_name、service_username、service_project_name、service_key

  • insecure – 允许访问服务器,无需检查 SSL 证书。服务器的证书将不会被验证。

  • cert – 用于在需要 SSL 客户端证书的 SSL 服务器上连接的客户端证书文件。

  • cert_key – 客户端证书私钥文件。

  • ssl_compression – 是否启用 SSL 层的压缩。如果设置为“False”并且存在 pyOpenSSL 库,将尝试禁用 SSL 压缩。这可能会提高 https 上传/下载操作的性能。

  • retry_on_ratelimit – 默认情况下,受速率限制的连接将在退避后重试。将此参数设置为 False 将导致将异常引发给调用者。

  • timeout – HTTP 连接的连接超时时间。

  • session – 一个 keystoneauth 会话对象。

  • force_auth_retry – 即使客户端收到意外错误(401 未授权除外),也重置认证信息。

copy_object(container, obj, destination=None, headers=None, fresh_metadata=None, response_dict=None)

copy_object() 的包装

delete_container(container, response_dict=None, query_string=None, headers={})

delete_container() 的包装

delete_object(container, obj, query_string=None, response_dict=None, headers=None)

delete_object() 的包装

get_account(marker=None, limit=None, prefix=None, end_marker=None, full_listing=False, headers=None, delimiter=None)

get_account() 的包装

get_container(container, marker=None, limit=None, prefix=None, delimiter=None, end_marker=None, version_marker=None, path=None, full_listing=False, headers=None, query_string=None)

get_container() 的包装

get_object(container, obj, resp_chunk_size=None, query_string=None, response_dict=None, headers=None)

get_object() 的包装

head_account(headers=None)

head_account() 的包装

head_container(container, headers=None)

head_container() 的包装

head_object(container, obj, headers=None, query_string=None)

head_object() 的包装

post_account(headers, response_dict=None, query_string=None, data=None)

post_account() 的包装

post_container(container, headers, response_dict=None)

post_container() 的封装

post_object(container, obj, headers, response_dict=None)

post_object() 的封装

put_container(container, headers=None, response_dict=None, query_string=None)

put_container() 的封装

put_object(container, obj, contents, content_length=None, etag=None, chunk_size=None, content_type=None, headers=None, query_string=None, response_dict=None)

put_object() 的封装

swiftclient.client.LOGGER_SENSITIVE_HEADERS = ['x-auth-token', 'x-auth-key', 'x-service-token', 'x-storage-token', 'x-account-meta-temp-url-key', 'x-account-meta-temp-url-key-2', 'x-container-meta-temp-url-key', 'x-container-meta-temp-url-key-2', 'set-cookie']

需要在日志中屏蔽的敏感header列表。请注意,扩展此列表时,header名称必须全部小写。

class swiftclient.client.LowerKeyCaseInsensitiveDict(data=None, **kwargs)

返回小写键的 CaseInsensitiveDict

clear() None.  D 中删除所有项目。
get(k[, d]) D[k] 如果 k D 中,否则 d。  d 默认为 None。
items() 一个 类似于集合的对象,提供 D 的项目的视图。
keys() 一个 类似于集合的对象,提供 D 的键的视图。
lower_items()

类似于 iteritems(),但所有键都小写。

pop(k[, d]) v,删除指定的键并返回相应的值。

如果未找到键,则返回 d(如果提供),否则引发 KeyError。

popitem() (k, v),删除并返回某个 (键,值) 对

作为 2 元组;但如果 D 为空,则引发 KeyError。

setdefault(k[, d]) D.get(k,d),如果 k 不在 D 中,则设置 D[k]=d。
update([E, ]**F) None。  从映射/可迭代对象 E F 更新 D。

如果存在 E 并且具有 .keys() 方法,则执行:for k in E: D[k] = E[k] 如果存在 E 并且缺少 .keys() 方法,则执行:for (k, v) in E: D[k] = v 在任何一种情况下,之后都会执行:for k, v in F.items(): D[k] = v

values() 一个对象,提供 D 值的视图。
swiftclient.client.copy_object(url, token, container, name, destination=None, headers=None, fresh_metadata=None, http_conn=None, response_dict=None, service_token=None)

复制对象

参数:
  • url – 存储 URL

  • token – 认证令牌;如果为 None,则不会发送任何令牌

  • container – 源对象所在的容器名称

  • name – 源对象名称

  • destination – 目标对象的容器和对象名称,格式为 /container/object;如果为 None,则复制将使用源作为目标。

  • headers – 要包含在请求中的其他 header

  • fresh_metadata – 启用对象创建,省略现有的用户元数据,默认值为 None

  • http_conn – HTTP 连接对象(如果为 None,则将创建 conn 对象)

  • response_dict – 一个可选的字典,用于放置响应 - 状态、原因和 header

  • service_token – 服务认证令牌

引发:

ClientException – HTTP COPY 请求失败

swiftclient.client.delete_container(url, token, container, http_conn=None, response_dict=None, service_token=None, query_string=None, headers=None)

删除容器

参数:
  • url – 存储 URL

  • token – 认证令牌

  • container – 要删除的容器名称

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • response_dict – 一个可选的字典,用于放置响应 - 状态、原因和 header

  • service_token – 服务认证令牌

  • query_string – 如果设置,将使用 ‘?’ 将其附加到生成的路径

  • headers – 要包含在请求中的其他 header

引发:

ClientException – HTTP DELETE 请求失败

swiftclient.client.delete_object(url, token=None, container=None, name=None, http_conn=None, headers=None, proxy=None, query_string=None, response_dict=None, service_token=None)

删除对象

参数:
  • url – 存储 URL

  • token – 认证令牌;如果为 None,则不会发送任何令牌

  • container – 对象所在的容器名称;如果为 None,则容器名称应包含在 url 中

  • name – 要删除的对象名称;如果为 None,则对象名称应包含在 url 中

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • headers – 要包含在请求中的其他 header

  • proxy – 如果有,则通过的代理;默认值为 None;格式为 ‘http://127.0.0.1:8888’ 的字符串以设置一个

  • query_string – 如果设置,将使用 ‘?’ 将其附加到生成的路径

  • response_dict – 一个可选的字典,用于放置响应 - 状态、原因和 header

  • service_token – 服务认证令牌

引发:

ClientException – HTTP DELETE 请求失败

swiftclient.client.encode_meta_headers(headers)

仅编码元数据头部的键

swiftclient.client.get_account(url, token, marker=None, limit=None, prefix=None, end_marker=None, http_conn=None, full_listing=False, service_token=None, headers=None, delimiter=None)

获取帐户的容器列表。

参数:
  • url – 存储 URL

  • token – 认证令牌

  • marker – marker 查询

  • limit – limit 查询

  • prefix – prefix 查询

  • end_marker – end_marker 查询

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • full_listing – 如果为 True,则返回完整列表,否则返回最多 10000 个列表

  • service_token – 服务认证令牌

  • headers – 要包含在请求中的其他 header

  • delimiter – delimiter 查询

返回值:

一个元组,包含 (响应头部,容器列表)。响应头部将是一个字典,所有头部名称都将小写。

引发:

ClientException – HTTP GET 请求失败

swiftclient.client.get_auth(auth_url, user, key, **kwargs)

获取身份验证/授权凭据。

参数:
  • auth_version – 提供的 auth 参数的 api 版本

  • os_options – 一个字典,OpenStack 身份服务选项

返回值:

一个元组,(storage_url, token)

注意:如果可选的 os_options 参数包含一个非空的 ‘object_storage_url’ 键,它将覆盖身份验证服务返回的默认存储 URL。

snet 参数用于 Rackspace 的 ServiceNet 内部网络实现。在此函数中,它只是在返回的存储 URL 的主机名前面添加 snet-。使用 Rackspace Cloud Files 时,使用此网络路径不会产生带宽费用,但要求客户端在 Rackspace 的 ServiceNet 网络上运行。

swiftclient.client.get_auth_keystone(auth_url, user, key, os_options, **kwargs)

对 Keystone 服务器进行身份验证。

我们使用 keystoneclient 库进行身份验证。

swiftclient.client.get_capabilities(http_conn)

获取集群功能信息。

参数:

http_conn – 一个元组,(解析后的 url,HTTPConnection 对象)

返回值:

一个包含集群功能的字典

引发:

ClientException – HTTP Capabilities GET 失败

swiftclient.client.get_container(url, token, container, marker=None, limit=None, prefix=None, delimiter=None, end_marker=None, version_marker=None, path=None, http_conn=None, full_listing=False, service_token=None, headers=None, query_string=None)

获取容器的对象列表。

参数:
  • url – 存储 URL

  • token – 认证令牌

  • container – 获取列表的容器名称

  • marker – marker 查询

  • limit – limit 查询

  • prefix – prefix 查询

  • delimiter – 用于分隔查询的字符串

  • end_marker – marker 查询

  • version_marker – 版本 marker 查询

  • path – path 查询(等效于“delimiter=/”和“prefix=path/”)

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • full_listing – 如果为 True,则返回完整列表,否则返回最多 10000 个列表

  • service_token – 服务认证令牌

  • headers – 要包含在请求中的其他 header

  • query_string – 如果设置,将使用 ‘?’ 将其附加到生成的路径

返回值:

一个元组,包含 (响应头部,对象列表)。响应头部将是一个字典,所有头部名称都将小写。

引发:

ClientException – HTTP GET 请求失败

swiftclient.client.get_object(url, token, container, name, http_conn=None, resp_chunk_size=None, query_string=None, response_dict=None, headers=None, service_token=None)

获取一个对象

参数:
  • url – 存储 URL

  • token – 认证令牌

  • container – 对象所在的容器名称

  • name – 要获取的对象名称

  • http_conn – 一个元组,(解析后的 url,HTTPConnection 对象),(如果为 None,它将创建 conn 对象并在读取所有内容后关闭它)

  • resp_chunk_size – 如果定义,则数据块的大小。注意:如果您指定了 resp_chunk_size,则必须在发出另一个请求之前完全读取对象的内容。

  • query_string – 如果设置,将使用 ‘?’ 将其附加到生成的路径

  • response_dict – 一个可选的字典,用于放置响应 - 状态、原因和 header

  • headers – 一个可选的字典,包含要包含在请求中的其他头部

  • service_token – 服务认证令牌

返回值:

一个元组,包含 (响应头部,对象的内容)。响应头部将是一个字典,所有头部名称都将小写。

引发:

ClientException – HTTP GET 请求失败

swiftclient.client.head_account(url, token, http_conn=None, headers=None, service_token=None)

获取帐户统计信息。

参数:
  • url – 存储 URL

  • token – 认证令牌

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • headers – 要包含在请求中的其他 header

  • service_token – 服务认证令牌

返回值:

一个字典,包含响应的头部(所有头部名称都将小写)

引发:

ClientException – HTTP HEAD 请求失败

swiftclient.client.head_container(url, token, container, http_conn=None, headers=None, service_token=None)

获取容器统计信息。

参数:
  • url – 存储 URL

  • token – 认证令牌

  • container – 获取统计信息的容器名称

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • headers – 要包含在请求中的其他 header

  • service_token – 服务认证令牌

返回值:

一个字典,包含响应的头部(所有头部名称都将小写)

引发:

ClientException – HTTP HEAD 请求失败

swiftclient.client.head_object(url, token, container, name, http_conn=None, service_token=None, headers=None, query_string=None)

获取对象信息

参数:
  • url – 存储 URL

  • token – 认证令牌

  • container – 对象所在的容器名称

  • name – 要获取信息的对象名称

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • service_token – 服务认证令牌

  • headers – 要包含在请求中的其他 header

返回值:

一个字典,包含响应的头部(所有头部名称都将小写)

引发:

ClientException – HTTP HEAD 请求失败

swiftclient.client.http_connection(*arg, **kwarg)
返回值:

tuple of (parsed url, connection object)

swiftclient.client.logger_settings = {'redact_sensitive_headers': True, 'reveal_sensitive_prefix': 16}

默认行为是屏蔽包含密钥等敏感信息的头部值,例如 X-Auth-KeyX-Auth-Token。最多可以显示前 16 个字符。

要禁用此功能,请将 redact_sensitive_headers 的值设置为 False

当启用头部屏蔽时,reveal_sensitive_prefix 配置了发送到日志的任何敏感头部数据的最大长度。如果头部长度小于此值的两倍,则只会记录 int(len(value)/2) 个字符;如果头部长度小于 15 个字符,则记录的字符数会更少。

swiftclient.client.post_account(url, token, headers, http_conn=None, response_dict=None, service_token=None, query_string=None, data=None)

更新帐户的元数据。

参数:
  • url – 存储 URL

  • token – 认证令牌

  • headers – 要包含在请求中的其他 header

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • response_dict – 一个可选的字典,用于放置响应 - 状态、原因和 header

  • service_token – 服务认证令牌

  • query_string – 如果设置,将使用 ‘?’ 将其附加到生成的路径

  • data – 请求的消息体(可选)

引发:

ClientException – HTTP POST 请求失败

返回值:

resp_headers, body

swiftclient.client.post_container(url, token, container, headers, http_conn=None, response_dict=None, service_token=None)

更新容器的元数据。

参数:
  • url – 存储 URL

  • token – 认证令牌

  • container – 要更新的容器名称

  • headers – 要包含在请求中的其他 header

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • response_dict – 一个可选的字典,用于放置响应 - 状态、原因和 header

  • service_token – 服务认证令牌

引发:

ClientException – HTTP POST 请求失败

swiftclient.client.post_object(url, token, container, name, headers, http_conn=None, response_dict=None, service_token=None)

更新对象元数据

参数:
  • url – 存储 URL

  • token – 认证令牌

  • container – 对象所在的容器名称

  • name – 要更新的对象名称

  • headers – 要包含在请求中的其他 header

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • response_dict – 一个可选的字典,用于放置响应 - 状态、原因和 header

  • service_token – 服务认证令牌

引发:

ClientException – HTTP POST 请求失败

swiftclient.client.put_container(url, token, container, headers=None, http_conn=None, response_dict=None, service_token=None, query_string=None)

创建容器

参数:
  • url – 存储 URL

  • token – 认证令牌

  • container – 要创建的容器名称

  • headers – 要包含在请求中的其他 header

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • response_dict – 一个可选的字典,用于放置响应 - 状态、原因和 header

  • service_token – 服务认证令牌

  • query_string – 如果设置,将使用 ‘?’ 将其附加到生成的路径

引发:

ClientException – HTTP PUT 请求失败

swiftclient.client.put_object(url, token=None, container=None, name=None, contents=None, content_length=None, etag=None, chunk_size=None, content_type=None, headers=None, http_conn=None, proxy=None, query_string=None, response_dict=None, service_token=None)

上传对象

参数:
  • url – 存储 URL

  • token – 认证令牌;如果为 None,则不会发送任何令牌

  • container – 对象所在的容器名称;如果为 None,则容器名称应包含在 url 中

  • name – 要上传的对象名称;如果为 None,则对象名称应包含在 url 中

  • contents – 一个字符串、类文件对象或一个用于读取对象数据的可迭代对象;如果为 None,则将执行零字节上传

  • content_length – 要作为 content-length 头部发送的值;同时限制从 contents 读取的量;如果为 None,则将通过 contents 计算或使用分块传输编码

  • etag – contents 的 etag;如果为 None,则不会发送 etag

  • chunk_size – 数据块的大小;默认值为 65536;仅当 contents 对象具有“read”方法时使用,例如类文件对象,否则将被忽略

  • content_type – 要作为 content-type 头部发送的值,覆盖 headers 参数中包含的任何值;如果为 None 且 headers 参数中未找到任何值,则将发送一个空字符串值

  • headers – 要包含在请求中的其他头部(如果有)

  • http_conn – 一个元组,包含 (解析后的 URL,HTTPConnection 对象)(如果为 None,则将创建 conn 对象)

  • proxy – 如果有,则通过的代理;默认值为 None;格式为 ‘http://127.0.0.1:8888’ 的字符串以设置一个

  • query_string – 如果设置,将使用 ‘?’ 将其附加到生成的路径

  • response_dict – 一个可选的字典,用于放置响应 - 状态、原因和 header

  • service_token – 服务认证令牌

返回值:

etag

引发:

ClientException – HTTP PUT 请求失败

swiftclient.client.safe_value(name, value)

仅显示敏感头部中最多 logger_settings[‘reveal_sensitive_prefix’] 个字符。

参数:
  • name – 头部名称

  • value – 头部值

返回值:

安全的头部值

swiftclient.client.scrub_headers(headers)

屏蔽可能包含不应记录的敏感信息的头部值。

参数:

headers – 一个字典或一个两元素元组的可迭代对象

返回值:

删除敏感信息后的安全头部字典

swiftclient.client.store_response(resp, response_dict)

将操作信息存储到字典中

参数:
  • resp – 包含响应头部的 http 响应对象

  • response_dict – 一个字典,其中放置状态、原因和以小写形式表示的头部

swiftclient.service

class swiftclient.service.SwiftCopyObject(object_name, options=None)

用于指定对象复制的类,允许为每个对象单独指定目标/头部/元数据/fresh_metadata。destination 和 fresh_metadata 应在 options 中设置

class swiftclient.service.SwiftDeleteObject(object_name, options=None)

用于指定对象删除的类,允许为每个对象单独指定头部/元数据。

exception swiftclient.service.SwiftError(value, container=None, obj=None, segment=None, exc=None, transaction_id=None)
add_note()

Exception.add_note(note) – 向异常添加注释

with_traceback()

Exception.with_traceback(tb) – 将 self.__traceback__ 设置为 tb 并返回 self。

class swiftclient.service.SwiftPostObject(object_name, options=None)

用于指定对象 POST 的类,允许为每个对象单独指定头部/元数据。

class swiftclient.service.SwiftService(options=None)

执行 swift 操作的服务

capabilities(url=None, refresh_cache=False)

列出集群的功能。

参数:

url – 要检索功能的集群的代理 URL。

返回值:

包含集群功能的字典。

引发:

ClientException

copy(container, objects, options=None)

复制容器中一系列对象的操作。将创建目标容器。

参数:
  • container – 要从中复制对象的容器。

  • objects

    对象名称(字符串)列表或 SwiftCopyObject 实例,包含对象名称和选项字典(可以为 None),用于覆盖该单个复制操作的选项

    [
        'object_name',
        SwiftCopyObject(
            'object_name',
             options={
                'destination': '/container/object',
                'fresh_metadata': False,
                ...
                }),
        ...
    ]
    

    选项字典如下所述。

  • options

    一个字典,包含用于覆盖在服务对象创建期间指定的全局选项的选项。除非在每个对象的基础上覆盖,否则这些选项将应用于通过此调用执行的所有复制操作。不需要设置“destination”和“fresh_metadata”选项,在这种情况下,对象将被复制到自身,并且元数据不会被刷新。选项“destination”也可以采用“/container”的形式,在这种情况下,没有显式 destination 的对象将被复制到 destination /container/original_object_name。多个对象和采用“/container/object”形式的 destination 的组合无效。可能的选项如下

    {
        'meta': [],
        'header': [],
        'destination': '/container/object',
        'fresh_metadata': False,
    }
    

返回值:

一个生成器,返回复制给定对象列表的结果。

引发:

SwiftError

delete(container=None, objects=None, options=None)

对帐户、可选容器和可选对象列表执行删除操作。

参数:
  • container – 要删除或从中删除的容器。

  • objects

    对象名称(字符串)列表或 SwiftDeleteObject 实例,包含对象名称和选项字典(可以为 None),用于覆盖该单个删除操作的选项

    [
        'object_name',
        SwiftDeleteObject('object_name',
                          options={...}),
        ...
    ]
    

    选项字典如下所述。

  • options

    一个字典,包含用于覆盖在服务对象创建期间指定的全局选项。

    {
        'yes_all': False,
        'leave_segments': False,
        'version_id': None,
        'prefix': None,
        'versions': False,
        'header': [],
    }
    

返回值:

一个生成器,用于返回删除操作的结果。生成器产生的每个结果都是一个 ‘delete_container’、‘delete_object’、‘delete_segment’ 或 ‘bulk_delete’ 字典,包含单个删除操作的结果。

引发:
download(container=None, objects=None, options=None)

对帐户、可选容器和可选对象列表执行下载操作。

参数:
  • container – 要从中下载的容器。

  • objects – 要下载的对象名称列表(字符串列表)。

  • options

    一个字典,包含用于覆盖在服务对象创建期间指定的全局选项。

    {
        'yes_all': False,
        'marker': '',
        'prefix': None,
        'no_download': False,
        'header': [],
        'skip_identical': False,
        'version_id': None,
        'out_directory': None,
        'checksum': True,
        'out_file': None,
        'remove_prefix': False,
        'shuffle' : False
    }
    

返回值:

一个生成器,用于返回下载操作的结果。生成器产生的每个结果都是一个 ‘download_object’ 字典,包含单个文件下载的结果。

引发:
list(container=None, options=None)

对帐户、容器执行列表操作。

参数:
  • container – 要对其执行列表操作的容器。

  • options

    一个字典,包含用于覆盖在服务对象创建期间指定的全局选项。

    {
        'long': False,
        'prefix': None,
        'delimiter': None,
        'versions': False,
        'header': []
    }
    

返回值:

一个生成器,用于返回对帐户或容器执行的列表操作的结果。生成器产生的每个结果都是一个 ‘list_account_part’ 或 ‘list_container_part’,包含列表的一部分。

post(container=None, objects=None, options=None)

对帐户、容器或对象列表执行 POST 操作

参数:
  • container – 要对其执行 POST 操作的容器。

  • objects

    对象名称(字符串)列表或 SwiftPostObject 实例,包含对象名称和选项字典(可以为 None),用于覆盖该单个 POST 操作的选项

    [
        'object_name',
        SwiftPostObject('object_name', options={...}),
        ...
    ]
    

    选项字典如下所述。

  • options

    一个字典,包含用于覆盖在服务对象创建期间指定的全局选项。除非在每个对象的基础上覆盖,否则这些选项将应用于通过此调用执行的所有 POST 操作。可能的选项如下

    {
        'meta': [],
        'header': [],
        'read_acl': None,   # For containers only
        'write_acl': None,  # For containers only
        'sync_to': None,    # For containers only
        'sync_key': None    # For containers only
    }
    

返回值:

如果 POST 操作针对容器/帐户,则为单个结果字典;如果 POST 操作针对对象列表,则为返回 POST 操作结果的迭代器。

引发:

SwiftError

stat(container=None, objects=None, options=None)

获取帐户统计信息、容器统计信息或容器中对象列表的信息。

参数:
  • container – 要查询的容器。

  • objects – 要获取信息的对象路径列表(字符串列表)。

  • options

    一个字典,包含用于覆盖在服务对象创建期间指定的全局选项。这些选项将应用于通过此调用执行的所有 stat 操作

    {
        'human': False,
        'version_id': None,
        'header': []
    }
    

返回值:

包含帐户或容器统计信息的单个字典,或者返回对象列表上 stat 操作结果的迭代器。

引发:

SwiftError

upload(container, objects, options=None)

将对象列表上传到给定的容器。

参数:
  • container – 要将上传放入的容器(或伪文件夹路径)。

  • objects

    文件/目录名称(字符串)列表或 SwiftUploadObject 实例,包含创建对象的源、对象名称和选项字典(可以为 None),用于覆盖该单个上传操作的选项

    [
        '/path/to/file',
        SwiftUploadObject('/path', object_name='obj1'),
        ...
    ]
    

    选项字典如下所述。

    SwiftUploadObject 源可以是以下之一:

    • 具有读取方法的类文件对象

    • 包含本地文件或目录路径的字符串

    • None,表示我们想要一个空对象

  • options

    一个字典,包含用于覆盖在服务对象创建期间指定的全局选项。这些选项将应用于通过此调用执行的所有上传操作,除非在每个对象的基础上覆盖。可能的选项如下

    {
        'meta': [],
        'header': [],
        'segment_size': None,
        'use_slo': True,
        'segment_container': None,
        'leave_segments': False,
        'changed': None,
        'skip_identical': False,
        'skip_container_put': False,
        'fail_fast': False,
        'dir_marker': False  # Only for None sources
    }
    

返回值:

一个生成器,用于返回上传的结果。

引发:
class swiftclient.service.SwiftUploadObject(source, object_name=None, options=None)

用于指定对象上传的类,允许为每个单独的对象分别指定对象源、名称和选项。

swiftclient.service.get_conn(options)

根据选项构建连接并返回。

swiftclient.service.split_headers(options, prefix='')

拆分“Key: Value”字符串并将其作为字典返回。

参数:
  • options – 必须是以下之一:* ‘Key: Value’ 字符串的可迭代对象 * (‘Key’, ‘Value’) 对的可迭代对象 * {‘Key’: ‘Value’} 对的字典

  • prefix – 要添加到字典中所有键的前缀的字符串。报告。

swiftclient.exceptions

exception swiftclient.exceptions.ClientException(msg, http_scheme='', http_host='', http_port='', http_path='', http_query='', http_status=None, http_reason='', http_device='', http_response_content='', http_response_headers=None)
add_note()

Exception.add_note(note) – 向异常添加注释

with_traceback()

Exception.with_traceback(tb) – 将 self.__traceback__ 设置为 tb 并返回 self。

swiftclient.multithreading

swiftclient.utils

Swift 的杂项实用函数。

class swiftclient.utils.JSONableIterable(iterable)
append(object, /)

将对象附加到列表末尾。

clear()

从列表中删除所有项目。

copy()

返回列表的浅拷贝。

count(value, /)

返回值的出现次数。

extend(iterable, /)

通过附加可迭代对象中的元素来扩展列表。

index(value, start=0, stop=9223372036854775807, /)

返回值的第一个索引。

如果值不存在,则引发 ValueError。

insert(index, object, /)

在索引之前插入对象。

pop(index=-1, /)

删除并返回索引处的项目(默认情况下为最后一个)。

如果列表为空或索引超出范围,则引发 IndexError。

remove(value, /)

删除值的第一个出现项。

如果值不存在,则引发 ValueError。

reverse()

就地反转。

sort(*, key=None, reverse=False)

按升序对列表进行排序并返回 None。

排序是就地进行的(即修改列表本身)并且是稳定的(即两个相等元素的顺序保持不变)。

如果给定了键函数,则将其应用于每个列表项一次,并按其函数值升序或降序对它们进行排序。

可以设置反向标志以按降序排序。

class swiftclient.utils.LengthWrapper(readable, length, md5=False)

用最大长度包装一个类文件对象。

修复 https://github.com/kennethreitz/requests/issues/1648 的问题。 建议仅在以二进制模式打开的文件上使用此类。

参数:
  • readable – 要从中读取的类文件对象。

  • length – 可以从类文件对象读取的最大内容量,之后将模拟为空。

  • md5 – 标志,用于启用在读取内容时计算 MD5 值。

class swiftclient.utils.ReadableToIterable(content, chunk_size=65536, md5=False)

包装一个类文件对象并充当迭代器。

建议仅在以二进制模式打开的文件上使用此类。 由于 Python 3 中 Unicode 的变化,文件现在使用不适合与 md5 类一起使用的编码打开,并且由于此原因,每次调用 next 时都会发生异常。 这可能会导致问题,尤其是在使用大文件和小块大小的情况下。

参数:
  • content – 从中产生内容的类文件对象。

  • chunk_size – 每个产生项的最大大小。

  • md5 – 标志,用于启用在产生内容时计算 MD5 值。

swiftclient.utils.config_true_value(value)

如果值为 True 或 TRUE_VALUES 中的字符串,则返回 True。 否则返回 False。 此函数来自 swift.common.utils.config_true_value()

swiftclient.utils.generate_temp_url(path, seconds, key, method, absolute=False, prefix=False, iso8601=False, ip_range=None, digest='sha256')

生成一个临时 URL,该 URL 授予对 Swift 对象的未经验证的访问权限。

参数:
  • path – Swift 对象或前缀的完整路径,如果应生成基于前缀的临时 URL。 例如:/v1/AUTH_account/c/o 或 /v1/AUTH_account/c/prefix。

  • seconds – 秒数或 ISO 8601 时间戳。 如果 absolute 为 False 并且此值是整数的字符串表示形式,则此值指定临时 URL 有效的秒数。 这可能包括一个后缀来缩放该值:‘s’ 表示秒,‘m’(或 ‘min’)表示分钟,‘h’(或 ‘hr’)表示小时,或 ‘d’ 表示天。 如果 absolute 为 True,则此值指定临时 URL 将到期的绝对时间。

  • key – 设置在 Swift 集群上的秘密临时 URL 密钥。 要设置密钥,请运行 ‘swift post -m “Temp-URL-Key: <substitute tempurl key here>”’

  • method – 一个 HTTP 方法,通常是 GET 或 PUT,允许使用此临时 URL。

  • absolute – 如果为 True,则 seconds 参数将被解释为 Unix 时间戳,如果 seconds 表示整数。

  • prefix – 如果为 True,则将生成基于前缀的临时 URL。

  • iso8601 – 如果为 True,则将创建一个包含 ISO 8601 UTC 时间戳而不是 UNIX 时间戳的 URL。

  • ip_range – 如果是有效的 IP 范围,则将临时 URL 限制为 IP 范围。

  • digest – 要使用的摘要算法。 必须是 sha1sha256sha512 中的一种。

引发:

ValueError – 如果时间戳或路径格式无效,或者摘要不是 sha1sha256sha512 中的一种。

返回值:

临时 URL 的路径部分

swiftclient.utils.prt_bytes(num_bytes, human_flag)

将大于 1024 的数字转换为可打印格式,要么以 4 个字符 -h 格式显示,就像使用 ls -lh 一样,要么以 12 个字符右对齐的字符串形式返回

swiftclient.utils.report_traceback()

报告给定异常的带有完整回溯的时间戳。

返回值:

完整的回溯和时间戳。