diff --git a/README.md b/README.md new file mode 100644 index 00000000..08975782 --- /dev/null +++ b/README.md @@ -0,0 +1,228 @@ +Bem vindo ao meu projetinho malandro... + +# Criptografia Unificada feat. (Unity Catalog e DBT) +* **Criado por:** Anselmo Borges +* **Data de criação:** 12.01.2014 +* **Ultima atualização:** 14.01.2014 + +Esse projeto foi criado com o intuito de validar uma POC de integração entre clouds usando o Unity Catalog e acabou virando bem mais que isso, acabei resolvendo um problema antigo que tinha na Porto que era a ineficiencia de comunicação entre lakes Cloud. Na Porto o primeiro lake de dados nasceu na GCP e com o tempo outras fontes de dados foram surgindo como Azure e AWS, havendo hoje dados nas 3 clouds que não se falam. + +Fora isso existem dados no ambiente on premisses onde a ingestão vem ocorrendo parte na GCP e parte comigo na Azure. + +## Features destravadas +Como disse nesse projeto acabamos de fazer uma série de coisas bacanas como: +* Na Azure: + * Configuração de Storage Account e containers (Metadados e Áreas Bronze e Silver) + * Criação do connector Databricks para o Unity Catalog + * Permissionamento no Storage Acccount + * Criação de Workspace Databricks + * Criação de Azure KeyVault, atribuição de privilégios para o managed identity do Databricks e secret + +* No Databricks: + * Criação do Metastore do Unity Catalog e vinculo nas Workspaces + * Controle de acesso com grupos e usuários distintos por Workspaces + * Criação de External Storage para os Databases Bronze e Silver de acordo com os containers + * Criação de secret scope com Azure KeyVault + * Configuração do `databricks-cli` + * Criação de function SQL de criptografia no Unity Catalog + * Restrição de acessos a catalogos por Workspaces + * Restricão de usuários a determinados catalogos via Unity Catalog + * Criptografia de dados sensiveis + * Mascaramento de dados sensiveis por grupo de acesso + * Criação de External Catalogs (BigQuery e Redshift) + +* No BigQuery: + * Criação de Dataset + * Crição de funções + * Geração de key json de acesso e privilégios necessários + * Salvamento de consultas e execução remota + +* No Redshift + * Criação de ambiente Redshift + * Liberação de acesso publico via NSG + * Criação de função de criptografia + +* No DBT-CORE: + * Minha primeira experiência real com DBT core (nem é a versão paga) e tô completamente apaixonado. + * Instalação do DBT-CORE local + * Conexão com as 3 bases do projeto (Databricks, BigQuery e Redshift) + * Ingestão de dados via `dbt seed` + * Criação de módulos e vinculo entre eles + * Customização em casos de multiplos Schemas + * Criação de documentação básica + +**POUCA COISA NÉ! E ISSO ACONTECEU TUDO NUM FINAL DE SEMANA OCIOSO!** + +## Desenho do projeto +Segue abaixo um desenho para um entendimento melhor do projeto e o que vamos fazer. + +![Desenho da arquitetura proposta](imagens/criptografia_unificada.jpg "Diagrama de Dados") + +## Cronograma +O passo a passo para a construção desse ambiente vai partir do pré requisito que ja temos algumas das peças configuradas (pra efeito de uma apresentação mais rápida), com o tempo vou criando um roteirinho de como montei do zero, mas vou levar em consideração que você: + +* Já tem o Big Query, user de serviço e a chave JSON criados +* Já tem o Redshift e liberou acesso público +* Já tem o Storage Account, containers e privilégios setados +* Já criou o Unity catalog nos 2 Workspaces +* Já configurou os grupos de acessos +* Já criou os SQL Warehouses nos 2 Workspaces e já mudou pra Premium pra usar serveless +* Já tem os Tokens Databricks em mãos +* Já criou os externals Catalogs e Externals storages no Unity +* Já criou os Catalogos + * cat_bq_rescue + * cat_rs_rescue + * engenharia (o da função) + * rescue +* Ja criou os Databases no catalogo rescue + * bronze (apontando pro external storage do container bronze) + * silver (apontando pro external storage do container silver) +* Já instalou o DBT Core e os plugins para: + * Redshift + * Databricks + * Big Query +* Ja configurou as conexões com os 3 bancos + +Peço desculpas não mostrar esses pontos agora, preciso fazer a apresentação dessa solução na Porto essa semana, mas depois acrescento esses materiais não menos importantes pra que você possa simular ai no seu ambiente e ficar feliz igual eu tô. + +![Felizão](https://media.giphy.com/media/GS9pfaxQj5hPKFGGp8/giphy.gif "Felizão") + +Então sem demora vamos começar pelo BigQuery: + +### Big Query +Vamos partir do principio que o BigQuery tá zerado e você tem todos os privilégios de BigQuery Admin. + +#### Criando o schema de engenharia e a função +Nos 3 ambientes vamos criar um schema de engenharia, esse schema tem o intuito de armazenar a função de criptografia `encrypt`, a idéia e pra segmentar acesso já que ela tem uma chave que pode ser vista caso o usuário tenha acesso a ela, a ideia é que só o usuário do pipe tenha privilégio a ela e mais ninguem, ou seja, bronze e silver é de engenharia e engenharia deveria pelo menos ser autimatizada. + +Vamos rodar o script abaixo via UI do BigQuery mesmo: +``` +Create schema engenharia; + +CREATE OR REPLACE FUNCTION `integracao-bq.engenharia.encrypt`(input_string STRING) RETURNS STRING AS ( +(SELECT TO_HEX(MD5(CONCAT(input_string, 'E3GD8uPL0AFwLbYtGQx1HHqOvZ9jROnAnEbtUSLdhyI')))) +); +``` +Esse comando cria tanto o schema quanto a função. + +No BigQuery encerramos por enquanto. + +### Redshift: +No Redshift também vamos partir do principio que você tem os acessos necessários e está acessando pelo Query Editor V2 (é um editor nativo da AWS pra rodar as queries no Redshift) + +Rode o comando abaixo para criar o database `rescue`: +``` +create database "rescue"; +``` +Altere agora no Query editor o Database que você está logado vai aparecer `rescue` e `dev`, escolha `rescue` e em seguida rode esse novo comando para criar os schemas `tools`,`bronze` e `silver`. +``` +create schema tools; +create schema bronze; +create schema silver; +``` +Agora com os schemas criados crie a função: + +``` +CREATE OR REPLACE function engenharia.tools.crypto(input_string VARCHAR) +RETURNS VARCHAR +IMMUTABLE +LANGUAGE plpythonu +AS $$ +import hashlib + +key = 'E3GD8uPL0AFwLbYtGQx1HHqOvZ9jROnAnEbtUSLdhyI' + +salted_text = input_string + key +hashed_text = hashlib.md5(salted_text.encode()).hexdigest() +return hashed_text +$$; +``` +Feito isso encerramos no Redshift também por enquanto. + +### Databricks +Já deixei pronto o catalogo `rescue` e os databases `bronze`, `silver` e `gold` (sim, aqui vai ter o Gold, pois vamos criar nosso Golden Record), pois os mesmos tem uma configuração especifica que apontam para um external storage que criei. O catalogo e o database de engenharia já não tem muito luxo e podemos criar tudo via comando. + +``` +create catalog engenharia; +create schema engenharia.tools; +CREATE OR REPLACE FUNCTION engenharia.tools.encrypt(input_string STRING) +RETURNS STRING +LANGUAGE PYTHON +AS $$ + import hashlib + + key = 'E3GD8uPL0AFwLbYtGQx1HHqOvZ9jROnAnEbtUSLdhyI' + + salted_text = input_string + key + hashed_text = hashlib.md5(salted_text.encode()).hexdigest() + + return hashed_text +$$; +``` +Bem mais fácil no Databricks! Encerramos por aqui também! + +### DBT +Agora que já temos os 3 bancos das 3 cloud preparados com os databases e funções de criptografia criados, estou partindo da premissa que os 3 projetos daqui já estão configurados com seus respectivos databases: +* **bronze_adb** - Conectado com o Databricks +* **bq_create** - Conectado com o BigQuery +* **rs_create** - Conectado com o Databricks + + +A ordem que vamos rodar será a seguinte: +1. BigQuery +2. RedShift +3. Databricks + +Vamos levar em consideração que o nosso diretório rais é o `dbtzin` as respectivas pastas de cada projeto estão nesse diretório. + +#### BigQuery +Pra entrar na pasta dê um `cd bq_create` e vamos rodar 2 comandos (se você não rodar na pasta vai dar merda, pois ele não encontra o `dbt_project.yml`): +* `dbt seed` - Comando mais que malandro que já faz a ingestão do nosso dado pra tabela Bronze +* `dbt run` - Comando que roda o pipeline real, ele cria a tabela silver já usando a function de criptografia. + +Vamos rodar 2 comandinhos extra que vai gerar a documentação pra gente dar uma olhada: +* `dbt docs generate` - gera a documentação das tabelas criadas +* `dbt docs serve` - Sobe um serviço web na porta 8080 pra visualizar a documentação, pra sair basta dar `CTRL + C` + +Com isso criamos as 2 tabelas dá uma conferida lá que foda, ele cria também um schema MAIUSCULO que vou explicar quando chegar no Databricks. + +#### Redshift +Pra entrar na pasta dê um `cd rs_create` e vamos rodar 2 comandos (se você não rodar na pasta vai dar merda, pois ele não encontra o `dbt_project.yml`): +* `dbt seed` - Comando mais que malandro que já faz a ingestão do nosso dado pra tabela Bronze. Eu achei muito foda ele fazer isso no Redshift pois a primeira vez que fiz, fiz na mão, foi um parto, IAM, editor de bosta do Redshift e mais dor de cabeça, por ai o cara sobe liso e em segundos. DBT é vida <3 +* `dbt run` - Comando que roda o pipeline real, ele cria a tabela silver já usando a function de criptografia. + +Vamos rodar 2 comandinhos extra que vai gerar a documentação pra gente dar uma olhada: +* `dbt docs generate` - gera a documentação das tabelas criadas +* `dbt docs serve` - Sobe um serviço web na porta 8080 pra visualizar a documentação, pra sair basta dar `CTRL + C` + +Com isso criamos as 2 tabelas, uma no schema bronze e a criptografada na silver. + +#### Databricks: +Por fim vamos fazer tudão, mas vou explicar o que esse do Databricks faz: +1. Ele não puxa os dados usando seed, optei por fazer uma copia do external catalog do Unity com a base fo BigQuery só pra você pirar no poder disso. +2. Ele cria a camada silver já criptografando +3. Vamos rodar um outro projeto chamado `gold_adb` que vai cria nosso golden record, mas jájá falamos dele. + +Vamos por pra rodar então: +Pra entrar na pasta dê um `cd bronze_adb` (não mudei o nome que fiquei com preguiça) e vamos rodar 2 comandos (se você não rodar na pasta vai dar merda, pois ele não encontra o `dbt_project.yml`): +* `dbt run` - Comando que roda o pipeline real, ele cria a tabela silver já usando a function de criptografia e nesse caso faz a gold também. + +Vamos rodar 2 comandinhos extra que vai gerar a documentação pra gente dar uma olhada: +* `dbt docs generate` - gera a documentação das tabelas criadas +* `dbt docs serve` - Sobe um serviço web na porta 8080 pra visualizar a documentação, pra sair basta dar `CTRL + C` + +Valide se criou tudo nos 3 bancos, veja se está tudo certinho (eu sei que tá, rs) e vamos rodar a Gold que faz o que? + +**Criamos o nosso produto de dados na camado gold, fazendo um Join das 3 tabelas (Databricks, RedShift e BigQuery, fala se não é foda?). Vou além, ele faz o Join pela chave de criptografia UNICA nas 3!** + +![RECEBA](https://media.giphy.com/media/1ngaeOmc6GLqY2qly4/giphy.gif "Obrigado meu Deus!") + +Pra entrar na pasta dê um `cd gold_adb` e vamos rodar 1 comando (se você não rodar na pasta vai dar merda, pois ele não encontra o `dbt_project.yml`): +* `dbt run` - Comando que faz o Join da porra toda e gera a tabela no catalogo negócios e no database Gold. + +Vamos rodar 2 comandinhos extra que vai gerar a documentação pra gente dar uma olhada: +* `dbt docs generate` - gera a documentação das tabelas criadas +* `dbt docs serve` - Sobe um serviço web na porta 8080 pra visualizar a documentação, pra sair basta dar `CTRL + C` + + + diff --git a/bq_create/models/rescue/maiuscula/DADOS_EJA.sql b/bq_create/models/rescue/maiuscula/DADOS_EJA.sql new file mode 100644 index 00000000..a844a476 --- /dev/null +++ b/bq_create/models/rescue/maiuscula/DADOS_EJA.sql @@ -0,0 +1,33 @@ +/* + O Parametro config entra com configurações especificas desse modelo, + por exemplo, o nome desse arquivo é tbronze.sql, porém quero que a + tabela criada se chame dados_eja, outro detalhe é que a conexão padrão + com o Fatabricks foi realizada no schema 'default', eu quero que a tabela + seja criada no schema 'bronze'. + + As informações que estiverem aqui, sobressaem o arquivo dbt_preject.yml. +*/ + +/* + Ou seja no config abaixo: + - schema: quero que meu schema seja o bronze + - alias: quero que o nome dessa tabela no schema bronze seja dados_eja + - materialized: quero que o objeto gerado no banco de dados seja uma tabela +*/ + +{{ config(schema='MAIUSCULA', alias='DADOS_EJA') }} + +with dados_eja as ( + select + TOTAL_REGISTOS, + ESCOLA, + engenharia.encrypt(cast(INEP as string)) as INEP, + ANO, + VALOR_DESTINADO, + 'São Sebastião' as CIDADE, + 'São Paulo' as ESTADO + from bronze.dados_eja +) + +select * +from dados_eja \ No newline at end of file diff --git a/bq_create/models/rescue/maiuscula/schema.yml b/bq_create/models/rescue/maiuscula/schema.yml new file mode 100644 index 00000000..c4f821ab --- /dev/null +++ b/bq_create/models/rescue/maiuscula/schema.yml @@ -0,0 +1,18 @@ +models: + - name: dados_eja + description: "Tabela Silver no Big Query com dados do EJA importados da camada Bronze, adicionamos as coluna CIDADE e ESTADO e criptografamos a coluna INEP com MD5" + columns: + - name: TOTAL_REGISTOS + description: "Total de registros encontrados do incentivo" + - name: ESCOLA + description: "Escola incluida no projeto" + - name: INEP + description: "Código INEP da escola (Agora criptografado na Silver com MD5)" + - name: ANO + description: "Ano do Incentivo" + - name: VALOR_DESTINADO + description: "Valor total do incentivo" + - name: CIDADE + description: "Cidade da Escola" + - name: ESTADO + description: "Estado da Escola" diff --git a/bronze_adb/README.md b/bronze_adb/README.md index 7874ac84..9513f523 100644 --- a/bronze_adb/README.md +++ b/bronze_adb/README.md @@ -1,10 +1,63 @@ -Welcome to your new dbt project! +Bem vindo ao meu projetinho malandro... -### Using the starter project +# Criptografia Unificada feat. (Unity Catalog e DBT) +* **Criado por:** Anselmo Borges +* **Data de criação:** 12.01.2014 +* **Ultima atualização:** 14.01.2014 + +Esse projeto foi criado com o intuito de validar uma POC de integração entre clouds usando o Unity Catalog e acabou virando bem mais que isso, acabei resolvendo um problema antigo que tinha na Porto que era a ineficiencia de comunicação entre lakes Cloud. Na Porto o primeiro lake de dados nasceu na GCP e com o tempo outras fontes de dados foram surgindo como Azure e AWS, havendo hoje dados nas 3 clouds que não se falam. + +Fora isso existem dados no ambiente on premisses onde a ingestão vem ocorrendo parte na GCP e parte comigo na Azure. + +## Features destravadas +Como disse nesse projeto acabamos de fazer uma série de coisas bacanas como: +* Na Azure: + * Configuração de Storage Account e containers (Metadados e Áreas Bronze e Silver) + * Criação do connector Databricks para o Unity Catalog + * Permissionamento no Storage Acccount + * Criação de Workspace Databricks + * Criação de Azure KeyVault, atribuição de privilégios para o managed identity do Databricks e secret + +* No Databricks: + * Criação do Metastore do Unity Catalog e vinculo nas Workspaces + * Controle de acesso com grupos e usuários distintos por Workspaces + * Criação de External Storage para os Databases Bronze e Silver de acordo com os containers + * Criação de secret scope com Azure KeyVault + * Configuração do `databricks-cli` + * Criação de function SQL de criptografia no Unity Catalog + * Restrição de acessos a catalogos por Workspaces + * Restricão de usuários a determinados catalogos via Unity Catalog + * Criptografia de dados sensiveis + * Mascaramento de dados sensiveis por grupo de acesso + * Criação de External Catalogs (BigQuery e Redshift) + +* No BigQuery: + * Criação de Dataset + * Crição de funções + * Geração de key json de acesso e privilégios necessários + * Salvamento de consultas e execução remota + +* No Redshift + * Criação de ambiente Redshift + * Liberação de acesso publico via NSG + * Criação de função de criptografia + +* No DBT-CORE: + * Minha primeira experiência real com DBT core (nem é a versão paga) e tô completamente apaixonado. + * Instalação do DBT-CORE local + * Conexão com as 3 bases do projeto (Databricks, BigQuery e Redshift) + * Ingestão de dados via `dbt seed` + * Criação de módulos e vinculo entre eles + * Customização em casos de multiplos Schemas + * Criação de documentação básica + +**POUCA COISA NÉ! E ISSO ACONTECEU TUDO NUM FINAL DE SEMANA OCIOSO!** + +## Desenho do projeto +Segue abaixo um desenho para um entendimento melhor do projeto e o que vamos fazer. + +![Desenho da arquitetura proposta](imagens/criptografia_unificada.jpg "Diagrama de Dados") -Try running the following commands: -- dbt run -- dbt test ### Resources: diff --git a/bronze_adb/models/rescue/bronze/tbronze.sql b/bronze_adb/models/rescue/bronze/tbronze.sql index 3e6c54c1..c8c9fa6e 100644 --- a/bronze_adb/models/rescue/bronze/tbronze.sql +++ b/bronze_adb/models/rescue/bronze/tbronze.sql @@ -19,7 +19,7 @@ with bronze as ( select * - from cat_bq_rescue.bq_databricks.dados_eja + from cat_bq_rescue.bronze.dados_eja ) select * diff --git a/dbtzin/bin/__pycache__/jp.cpython-38.pyc b/dbtzin/bin/__pycache__/jp.cpython-38.pyc new file mode 100644 index 00000000..48c80925 Binary files /dev/null and b/dbtzin/bin/__pycache__/jp.cpython-38.pyc differ diff --git a/dbtzin/bin/jp.py b/dbtzin/bin/jp.py new file mode 100755 index 00000000..12dc7d68 --- /dev/null +++ b/dbtzin/bin/jp.py @@ -0,0 +1,54 @@ +#!/Users/Anselmo/Documents/dbtzin/dbtzin/bin/python + +import sys +import json +import argparse +from pprint import pformat + +import jmespath +from jmespath import exceptions + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('expression') + parser.add_argument('-f', '--filename', + help=('The filename containing the input data. ' + 'If a filename is not given then data is ' + 'read from stdin.')) + parser.add_argument('--ast', action='store_true', + help=('Pretty print the AST, do not search the data.')) + args = parser.parse_args() + expression = args.expression + if args.ast: + # Only print the AST + expression = jmespath.compile(args.expression) + sys.stdout.write(pformat(expression.parsed)) + sys.stdout.write('\n') + return 0 + if args.filename: + with open(args.filename, 'r') as f: + data = json.load(f) + else: + data = sys.stdin.read() + data = json.loads(data) + try: + sys.stdout.write(json.dumps( + jmespath.search(expression, data), indent=4, ensure_ascii=False)) + sys.stdout.write('\n') + except exceptions.ArityError as e: + sys.stderr.write("invalid-arity: %s\n" % e) + return 1 + except exceptions.JMESPathTypeError as e: + sys.stderr.write("invalid-type: %s\n" % e) + return 1 + except exceptions.UnknownFunctionError as e: + sys.stderr.write("unknown-function: %s\n" % e) + return 1 + except exceptions.ParseError as e: + sys.stderr.write("syntax-error: %s\n" % e) + return 1 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/INSTALLER b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/LICENSE b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/LICENSE new file mode 100644 index 00000000..07b49ae9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2022 Will Bond + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/METADATA b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/METADATA new file mode 100644 index 00000000..21f03e33 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/METADATA @@ -0,0 +1,307 @@ +Metadata-Version: 2.1 +Name: asn1crypto +Version: 1.5.1 +Summary: Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP +Home-page: https://github.com/wbond/asn1crypto +Author: wbond +Author-email: will@wbond.net +License: MIT +Keywords: asn1 crypto pki x509 certificate rsa dsa ec dh +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Security :: Cryptography +Description-Content-Type: text/markdown + +# asn1crypto + +A fast, pure Python library for parsing and serializing ASN.1 structures. + + - [Features](#features) + - [Why Another Python ASN.1 Library?](#why-another-python-asn1-library) + - [Related Crypto Libraries](#related-crypto-libraries) + - [Current Release](#current-release) + - [Dependencies](#dependencies) + - [Installation](#installation) + - [License](#license) + - [Security Policy](#security-policy) + - [Documentation](#documentation) + - [Continuous Integration](#continuous-integration) + - [Testing](#testing) + - [Development](#development) + - [CI Tasks](#ci-tasks) + +[![GitHub Actions CI](https://github.com/wbond/asn1crypto/workflows/CI/badge.svg)](https://github.com/wbond/asn1crypto/actions?workflow=CI) +[![CircleCI](https://circleci.com/gh/wbond/asn1crypto.svg?style=shield)](https://circleci.com/gh/wbond/asn1crypto) +[![PyPI](https://img.shields.io/pypi/v/asn1crypto.svg)](https://pypi.org/project/asn1crypto/) + +## Features + +In addition to an ASN.1 BER/DER decoder and DER serializer, the project includes +a bunch of ASN.1 structures for use with various common cryptography standards: + +| Standard | Module | Source | +| ---------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| X.509 | [`asn1crypto.x509`](asn1crypto/x509.py) | [RFC 5280](https://tools.ietf.org/html/rfc5280) | +| CRL | [`asn1crypto.crl`](asn1crypto/crl.py) | [RFC 5280](https://tools.ietf.org/html/rfc5280) | +| CSR | [`asn1crypto.csr`](asn1crypto/csr.py) | [RFC 2986](https://tools.ietf.org/html/rfc2986), [RFC 2985](https://tools.ietf.org/html/rfc2985) | +| OCSP | [`asn1crypto.ocsp`](asn1crypto/ocsp.py) | [RFC 6960](https://tools.ietf.org/html/rfc6960) | +| PKCS#12 | [`asn1crypto.pkcs12`](asn1crypto/pkcs12.py) | [RFC 7292](https://tools.ietf.org/html/rfc7292) | +| PKCS#8 | [`asn1crypto.keys`](asn1crypto/keys.py) | [RFC 5208](https://tools.ietf.org/html/rfc5208) | +| PKCS#1 v2.1 (RSA keys) | [`asn1crypto.keys`](asn1crypto/keys.py) | [RFC 3447](https://tools.ietf.org/html/rfc3447) | +| DSA keys | [`asn1crypto.keys`](asn1crypto/keys.py) | [RFC 3279](https://tools.ietf.org/html/rfc3279) | +| Elliptic curve keys | [`asn1crypto.keys`](asn1crypto/keys.py) | [SECG SEC1 V2](http://www.secg.org/sec1-v2.pdf) | +| PKCS#3 v1.4 | [`asn1crypto.algos`](asn1crypto/algos.py) | [PKCS#3 v1.4](ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-3.asc) | +| PKCS#5 v2.1 | [`asn1crypto.algos`](asn1crypto/algos.py) | [PKCS#5 v2.1](http://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf) | +| CMS (and PKCS#7) | [`asn1crypto.cms`](asn1crypto/cms.py) | [RFC 5652](https://tools.ietf.org/html/rfc5652), [RFC 2315](https://tools.ietf.org/html/rfc2315) | +| TSP | [`asn1crypto.tsp`](asn1crypto/tsp.py) | [RFC 3161](https://tools.ietf.org/html/rfc3161) | +| PDF signatures | [`asn1crypto.pdf`](asn1crypto/pdf.py) | [PDF 1.7](http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf) | + +## Why Another Python ASN.1 Library? + +Python has long had the [pyasn1](https://pypi.org/project/pyasn1/) and +[pyasn1_modules](https://pypi.org/project/pyasn1-modules/) available for +parsing and serializing ASN.1 structures. While the project does include a +comprehensive set of tools for parsing and serializing, the performance of the +library can be very poor, especially when dealing with bit fields and parsing +large structures such as CRLs. + +After spending extensive time using *pyasn1*, the following issues were +identified: + + 1. Poor performance + 2. Verbose, non-pythonic API + 3. Out-dated and incomplete definitions in *pyasn1-modules* + 4. No simple way to map data to native Python data structures + 5. No mechanism for overridden universal ASN.1 types + +The *pyasn1* API is largely method driven, and uses extensive configuration +objects and lowerCamelCase names. There were no consistent options for +converting types of native Python data structures. Since the project supports +out-dated versions of Python, many newer language features are unavailable +for use. + +Time was spent trying to profile issues with the performance, however the +architecture made it hard to pin down the primary source of the poor +performance. Attempts were made to improve performance by utilizing unreleased +patches and delaying parsing using the `Any` type. Even with such changes, the +performance was still unacceptably slow. + +Finally, a number of structures in the cryptographic space use universal data +types such as `BitString` and `OctetString`, but interpret the data as other +types. For instance, signatures are really byte strings, but are encoded as +`BitString`. Elliptic curve keys use both `BitString` and `OctetString` to +represent integers. Parsing these structures as the base universal types and +then re-interpreting them wastes computation. + +*asn1crypto* uses the following techniques to improve performance, especially +when extracting one or two fields from large, complex structures: + + - Delayed parsing of byte string values + - Persistence of original ASN.1 encoded data until a value is changed + - Lazy loading of child fields + - Utilization of high-level Python stdlib modules + +While there is no extensive performance test suite, the +`CRLTests.test_parse_crl` test case was used to parse a 21MB CRL file on a +late 2013 rMBP. *asn1crypto* parsed the certificate serial numbers in just +under 8 seconds. With *pyasn1*, using definitions from *pyasn1-modules*, the +same parsing took over 4,100 seconds. + +For smaller structures the performance difference can range from a few times +faster to an order of magnitude or more. + +## Related Crypto Libraries + +*asn1crypto* is part of the modularcrypto family of Python packages: + + - [asn1crypto](https://github.com/wbond/asn1crypto) + - [oscrypto](https://github.com/wbond/oscrypto) + - [csrbuilder](https://github.com/wbond/csrbuilder) + - [certbuilder](https://github.com/wbond/certbuilder) + - [crlbuilder](https://github.com/wbond/crlbuilder) + - [ocspbuilder](https://github.com/wbond/ocspbuilder) + - [certvalidator](https://github.com/wbond/certvalidator) + +## Current Release + +1.5.0 - [changelog](changelog.md) + +## Dependencies + +Python 2.6, 2.7, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10 or pypy. *No third-party +packages required.* + +## Installation + +```bash +pip install asn1crypto +``` + +## License + +*asn1crypto* is licensed under the terms of the MIT license. See the +[LICENSE](LICENSE) file for the exact license text. + +## Security Policy + +The security policies for this project are covered in +[SECURITY.md](https://github.com/wbond/asn1crypto/blob/master/SECURITY.md). + +## Documentation + +The documentation for *asn1crypto* is composed of tutorials on basic usage and +links to the source for the various pre-defined type classes. + +### Tutorials + + - [Universal Types with BER/DER Decoder and DER Encoder](docs/universal_types.md) + - [PEM Encoder and Decoder](docs/pem.md) + +### Reference + + - [Universal types](asn1crypto/core.py), `asn1crypto.core` + - [Digest, HMAC, signed digest and encryption algorithms](asn1crypto/algos.py), `asn1crypto.algos` + - [Private and public keys](asn1crypto/keys.py), `asn1crypto.keys` + - [X509 certificates](asn1crypto/x509.py), `asn1crypto.x509` + - [Certificate revocation lists (CRLs)](asn1crypto/crl.py), `asn1crypto.crl` + - [Online certificate status protocol (OCSP)](asn1crypto/ocsp.py), `asn1crypto.ocsp` + - [Certificate signing requests (CSRs)](asn1crypto/csr.py), `asn1crypto.csr` + - [Private key/certificate containers (PKCS#12)](asn1crypto/pkcs12.py), `asn1crypto.pkcs12` + - [Cryptographic message syntax (CMS, PKCS#7)](asn1crypto/cms.py), `asn1crypto.cms` + - [Time stamp protocol (TSP)](asn1crypto/tsp.py), `asn1crypto.tsp` + - [PDF signatures](asn1crypto/pdf.py), `asn1crypto.pdf` + +## Continuous Integration + +Various combinations of platforms and versions of Python are tested via: + + - [macOS, Linux, Windows](https://github.com/wbond/asn1crypto/actions/workflows/ci.yml) via GitHub Actions + - [arm64](https://circleci.com/gh/wbond/asn1crypto) via CircleCI + +## Testing + +Tests are written using `unittest` and require no third-party packages. + +Depending on what type of source is available for the package, the following +commands can be used to run the test suite. + +### Git Repository + +When working within a Git working copy, or an archive of the Git repository, +the full test suite is run via: + +```bash +python run.py tests +``` + +To run only some tests, pass a regular expression as a parameter to `tests`. + +```bash +python run.py tests ocsp +``` + +### PyPi Source Distribution + +When working within an extracted source distribution (aka `.tar.gz`) from +PyPi, the full test suite is run via: + +```bash +python setup.py test +``` + +### Package + +When the package has been installed via pip (or another method), the package +`asn1crypto_tests` may be installed and invoked to run the full test suite: + +```bash +pip install asn1crypto_tests +python -m asn1crypto_tests +``` + +## Development + +To install the package used for linting, execute: + +```bash +pip install --user -r requires/lint +``` + +The following command will run the linter: + +```bash +python run.py lint +``` + +Support for code coverage can be installed via: + +```bash +pip install --user -r requires/coverage +``` + +Coverage is measured by running: + +```bash +python run.py coverage +``` + +To change the version number of the package, run: + +```bash +python run.py version {pep440_version} +``` + +To install the necessary packages for releasing a new version on PyPI, run: + +```bash +pip install --user -r requires/release +``` + +Releases are created by: + + - Making a git tag in [PEP 440](https://www.python.org/dev/peps/pep-0440/#examples-of-compliant-version-schemes) format + - Running the command: + + ```bash + python run.py release + ``` + +Existing releases can be found at https://pypi.org/project/asn1crypto/. + +## CI Tasks + +A task named `deps` exists to download and stage all necessary testing +dependencies. On posix platforms, `curl` is used for downloads and on Windows +PowerShell with `Net.WebClient` is used. This configuration sidesteps issues +related to getting pip to work properly and messing with `site-packages` for +the version of Python being used. + +The `ci` task runs `lint` (if flake8 is available for the version of Python) and +`coverage` (or `tests` if coverage is not available for the version of Python). +If the current directory is a clean git working copy, the coverage data is +submitted to codecov.io. + +```bash +python run.py deps +python run.py ci +``` + + diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/RECORD b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/RECORD new file mode 100644 index 00000000..00c58c44 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/RECORD @@ -0,0 +1,52 @@ +asn1crypto-1.5.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +asn1crypto-1.5.1.dist-info/LICENSE,sha256=KcNCXl2lOrhCJz5fLy8GjOLjXfQmD3-hVqoaxr7QJDM,1075 +asn1crypto-1.5.1.dist-info/METADATA,sha256=KREr_KuD0K8uSUpd5OleccUeERMlXX-CU2FgNmVQ8ZQ,13184 +asn1crypto-1.5.1.dist-info/RECORD,, +asn1crypto-1.5.1.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110 +asn1crypto-1.5.1.dist-info/top_level.txt,sha256=z8-jF_Q-jgzGox7T2XYian3-yeptLS2I7MjoJLBaq1Y,11 +asn1crypto/__init__.py,sha256=a-8VLJazcxfecOBlxWH1IX4Crm6NvR-Lhko9GTpvnP0,1219 +asn1crypto/__pycache__/__init__.cpython-38.pyc,, +asn1crypto/__pycache__/_errors.cpython-38.pyc,, +asn1crypto/__pycache__/_inet.cpython-38.pyc,, +asn1crypto/__pycache__/_int.cpython-38.pyc,, +asn1crypto/__pycache__/_iri.cpython-38.pyc,, +asn1crypto/__pycache__/_ordereddict.cpython-38.pyc,, +asn1crypto/__pycache__/_teletex_codec.cpython-38.pyc,, +asn1crypto/__pycache__/_types.cpython-38.pyc,, +asn1crypto/__pycache__/algos.cpython-38.pyc,, +asn1crypto/__pycache__/cms.cpython-38.pyc,, +asn1crypto/__pycache__/core.cpython-38.pyc,, +asn1crypto/__pycache__/crl.cpython-38.pyc,, +asn1crypto/__pycache__/csr.cpython-38.pyc,, +asn1crypto/__pycache__/keys.cpython-38.pyc,, +asn1crypto/__pycache__/ocsp.cpython-38.pyc,, +asn1crypto/__pycache__/parser.cpython-38.pyc,, +asn1crypto/__pycache__/pdf.cpython-38.pyc,, +asn1crypto/__pycache__/pem.cpython-38.pyc,, +asn1crypto/__pycache__/pkcs12.cpython-38.pyc,, +asn1crypto/__pycache__/tsp.cpython-38.pyc,, +asn1crypto/__pycache__/util.cpython-38.pyc,, +asn1crypto/__pycache__/version.cpython-38.pyc,, +asn1crypto/__pycache__/x509.cpython-38.pyc,, +asn1crypto/_errors.py,sha256=v1vyVWdO49tLugVLnKvtjr9ZddLpeKoB-yrBODOw0tg,1070 +asn1crypto/_inet.py,sha256=z2K8CKxSfEQ3d0UMIIgXw5NugKLZyRS__Cn10ivbiGM,4661 +asn1crypto/_int.py,sha256=oe3cxich5zj3gQkECl6ZnAOCn-PyYTHkG117bAl21TY,494 +asn1crypto/_iri.py,sha256=2kIP8gGIh8BXt1q_0S5KhnMzUUQIvuT0FDAYNyKeqbY,8733 +asn1crypto/_ordereddict.py,sha256=5VAYLbxxEtfdZGKgjzINxlmNkYg9d_7JmZAFfr0EcAk,4533 +asn1crypto/_teletex_codec.py,sha256=LhDpkTprPaoc7UJ9i9uwnP-5Am00SVbHSQizPpCLpqE,5053 +asn1crypto/_types.py,sha256=OwsX30epv-ETI9eGrLW9GLqv0KeoiSRnJcjN92roqhQ,939 +asn1crypto/algos.py,sha256=xCk-jnAaSwQ7a6ngsKkXVClxez0v8FuPrXjttb0sl_A,35867 +asn1crypto/cms.py,sha256=lpzlcTJ97g8dq1RPhYsOSbpQIgWkI8E0ZybQskl39hY,27776 +asn1crypto/core.py,sha256=18yPagBXGAtsmCFTuqRbWKnIy1apwoiAEj_i2Zwc9F0,170716 +asn1crypto/crl.py,sha256=KJLuEn1IDJO19X4eLYhRyaM-ACnxKkimoGsyAnzGdgA,16104 +asn1crypto/csr.py,sha256=arnYGru9S2PYCmBUXBZGKpOXiGRbh4vxONNdLOi97nU,3542 +asn1crypto/keys.py,sha256=WOiO9_KoglPron1x3FUgRmb0Eohpj40si7LOTCI2iLQ,37863 +asn1crypto/ocsp.py,sha256=2qxDGgCp2XKJ5xFHEx0jlLFkHYWdKvrtUBdGLrUVPbE,19024 +asn1crypto/parser.py,sha256=gB7P_tp4GqJjgQv5zKkVOmgdmim5cJfxyIid-TIID1I,9171 +asn1crypto/pdf.py,sha256=HNybnna5WG2ftmb8Nx_T5reyLJ0E7hJXoj37DuLbpX0,2250 +asn1crypto/pem.py,sha256=s46r_KCQ9h1HENXMh4AGKTXesivQrKnWzU3-gok75uI,6145 +asn1crypto/pkcs12.py,sha256=q-KGfvaO72B8AfvolwsqhAQpjuqnkEczPddXYLBFUSE,4566 +asn1crypto/tsp.py,sha256=DjKeZE413ukBGTfYVLnOYhsM5mNGBSN52p2puxlPapk,7825 +asn1crypto/util.py,sha256=shMpHDvcOYyDcSrlFoGqTLUhHpsTHam45u4KdRO3yww,21873 +asn1crypto/version.py,sha256=qWgDOm1ayD-9GJ1Qds22S3bBgyQAFPU5eVPg1pP8FCY,152 +asn1crypto/x509.py,sha256=ocNR41Y-C50-55oStOGnbVbtcbh3kJ6dvnyFO-cSr-0,93778 diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/WHEEL b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/WHEEL new file mode 100644 index 00000000..0b18a281 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.1) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/top_level.txt b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/top_level.txt new file mode 100644 index 00000000..35a704e4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto-1.5.1.dist-info/top_level.txt @@ -0,0 +1 @@ +asn1crypto diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__init__.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/__init__.py new file mode 100644 index 00000000..2c93f00e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/__init__.py @@ -0,0 +1,47 @@ +# coding: utf-8 +from __future__ import unicode_literals, division, absolute_import, print_function + +from .version import __version__, __version_info__ + +__all__ = [ + '__version__', + '__version_info__', + 'load_order', +] + + +def load_order(): + """ + Returns a list of the module and sub-module names for asn1crypto in + dependency load order, for the sake of live reloading code + + :return: + A list of unicode strings of module names, as they would appear in + sys.modules, ordered by which module should be reloaded first + """ + + return [ + 'asn1crypto._errors', + 'asn1crypto._int', + 'asn1crypto._ordereddict', + 'asn1crypto._teletex_codec', + 'asn1crypto._types', + 'asn1crypto._inet', + 'asn1crypto._iri', + 'asn1crypto.version', + 'asn1crypto.pem', + 'asn1crypto.util', + 'asn1crypto.parser', + 'asn1crypto.core', + 'asn1crypto.algos', + 'asn1crypto.keys', + 'asn1crypto.x509', + 'asn1crypto.crl', + 'asn1crypto.csr', + 'asn1crypto.ocsp', + 'asn1crypto.cms', + 'asn1crypto.pdf', + 'asn1crypto.pkcs12', + 'asn1crypto.tsp', + 'asn1crypto', + ] diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..b74f9090 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_errors.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_errors.cpython-38.pyc new file mode 100644 index 00000000..0986cc65 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_errors.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_inet.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_inet.cpython-38.pyc new file mode 100644 index 00000000..54e61b32 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_inet.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_int.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_int.cpython-38.pyc new file mode 100644 index 00000000..a8cf0099 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_int.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_iri.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_iri.cpython-38.pyc new file mode 100644 index 00000000..b98b9576 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_iri.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_ordereddict.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_ordereddict.cpython-38.pyc new file mode 100644 index 00000000..3d925e65 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_ordereddict.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_teletex_codec.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_teletex_codec.cpython-38.pyc new file mode 100644 index 00000000..225b3410 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_teletex_codec.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_types.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_types.cpython-38.pyc new file mode 100644 index 00000000..3fa44986 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/_types.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/algos.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/algos.cpython-38.pyc new file mode 100644 index 00000000..e65bc0f2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/algos.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/cms.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/cms.cpython-38.pyc new file mode 100644 index 00000000..bfc848d3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/cms.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/core.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/core.cpython-38.pyc new file mode 100644 index 00000000..13bce0c8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/core.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/crl.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/crl.cpython-38.pyc new file mode 100644 index 00000000..eda7f366 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/crl.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/csr.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/csr.cpython-38.pyc new file mode 100644 index 00000000..ddfad032 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/csr.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/keys.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/keys.cpython-38.pyc new file mode 100644 index 00000000..4d5d3107 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/keys.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/ocsp.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/ocsp.cpython-38.pyc new file mode 100644 index 00000000..c27907ba Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/ocsp.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/parser.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/parser.cpython-38.pyc new file mode 100644 index 00000000..3bc8d665 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/parser.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/pdf.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/pdf.cpython-38.pyc new file mode 100644 index 00000000..8545df56 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/pdf.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/pem.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/pem.cpython-38.pyc new file mode 100644 index 00000000..7488b440 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/pem.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/pkcs12.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/pkcs12.cpython-38.pyc new file mode 100644 index 00000000..1dfe069b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/pkcs12.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/tsp.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/tsp.cpython-38.pyc new file mode 100644 index 00000000..8d2808bd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/tsp.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/util.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/util.cpython-38.pyc new file mode 100644 index 00000000..b175c71d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/util.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/version.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/version.cpython-38.pyc new file mode 100644 index 00000000..fe681b55 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/version.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/x509.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/x509.cpython-38.pyc new file mode 100644 index 00000000..92633475 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/asn1crypto/__pycache__/x509.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/_errors.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/_errors.py new file mode 100644 index 00000000..d8797a2f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/_errors.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" +Exports the following items: + + - unwrap() + - APIException() +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +import re +import textwrap + + +class APIException(Exception): + """ + An exception indicating an API has been removed from asn1crypto + """ + + pass + + +def unwrap(string, *params): + """ + Takes a multi-line string and does the following: + + - dedents + - converts newlines with text before and after into a single line + - strips leading and trailing whitespace + + :param string: + The string to format + + :param *params: + Params to interpolate into the string + + :return: + The formatted string + """ + + output = textwrap.dedent(string) + + # Unwrap lines, taking into account bulleted lists, ordered lists and + # underlines consisting of = signs + if output.find('\n') != -1: + output = re.sub('(?<=\\S)\n(?=[^ \n\t\\d\\*\\-=])', ' ', output) + + if params: + output = output % params + + output = output.strip() + + return output diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/_inet.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/_inet.py new file mode 100644 index 00000000..045ba561 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/_inet.py @@ -0,0 +1,170 @@ +# coding: utf-8 +from __future__ import unicode_literals, division, absolute_import, print_function + +import socket +import struct + +from ._errors import unwrap +from ._types import byte_cls, bytes_to_list, str_cls, type_name + + +def inet_ntop(address_family, packed_ip): + """ + Windows compatibility shim for socket.inet_ntop(). + + :param address_family: + socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6 + + :param packed_ip: + A byte string of the network form of an IP address + + :return: + A unicode string of the IP address + """ + + if address_family not in set([socket.AF_INET, socket.AF_INET6]): + raise ValueError(unwrap( + ''' + address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s), + not %s + ''', + repr(socket.AF_INET), + repr(socket.AF_INET6), + repr(address_family) + )) + + if not isinstance(packed_ip, byte_cls): + raise TypeError(unwrap( + ''' + packed_ip must be a byte string, not %s + ''', + type_name(packed_ip) + )) + + required_len = 4 if address_family == socket.AF_INET else 16 + if len(packed_ip) != required_len: + raise ValueError(unwrap( + ''' + packed_ip must be %d bytes long - is %d + ''', + required_len, + len(packed_ip) + )) + + if address_family == socket.AF_INET: + return '%d.%d.%d.%d' % tuple(bytes_to_list(packed_ip)) + + octets = struct.unpack(b'!HHHHHHHH', packed_ip) + + runs_of_zero = {} + longest_run = 0 + zero_index = None + for i, octet in enumerate(octets + (-1,)): + if octet != 0: + if zero_index is not None: + length = i - zero_index + if length not in runs_of_zero: + runs_of_zero[length] = zero_index + longest_run = max(longest_run, length) + zero_index = None + elif zero_index is None: + zero_index = i + + hexed = [hex(o)[2:] for o in octets] + + if longest_run < 2: + return ':'.join(hexed) + + zero_start = runs_of_zero[longest_run] + zero_end = zero_start + longest_run + + return ':'.join(hexed[:zero_start]) + '::' + ':'.join(hexed[zero_end:]) + + +def inet_pton(address_family, ip_string): + """ + Windows compatibility shim for socket.inet_ntop(). + + :param address_family: + socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6 + + :param ip_string: + A unicode string of an IP address + + :return: + A byte string of the network form of the IP address + """ + + if address_family not in set([socket.AF_INET, socket.AF_INET6]): + raise ValueError(unwrap( + ''' + address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s), + not %s + ''', + repr(socket.AF_INET), + repr(socket.AF_INET6), + repr(address_family) + )) + + if not isinstance(ip_string, str_cls): + raise TypeError(unwrap( + ''' + ip_string must be a unicode string, not %s + ''', + type_name(ip_string) + )) + + if address_family == socket.AF_INET: + octets = ip_string.split('.') + error = len(octets) != 4 + if not error: + ints = [] + for o in octets: + o = int(o) + if o > 255 or o < 0: + error = True + break + ints.append(o) + + if error: + raise ValueError(unwrap( + ''' + ip_string must be a dotted string with four integers in the + range of 0 to 255, got %s + ''', + repr(ip_string) + )) + + return struct.pack(b'!BBBB', *ints) + + error = False + omitted = ip_string.count('::') + if omitted > 1: + error = True + elif omitted == 0: + octets = ip_string.split(':') + error = len(octets) != 8 + else: + begin, end = ip_string.split('::') + begin_octets = begin.split(':') + end_octets = end.split(':') + missing = 8 - len(begin_octets) - len(end_octets) + octets = begin_octets + (['0'] * missing) + end_octets + + if not error: + ints = [] + for o in octets: + o = int(o, 16) + if o > 65535 or o < 0: + error = True + break + ints.append(o) + + return struct.pack(b'!HHHHHHHH', *ints) + + raise ValueError(unwrap( + ''' + ip_string must be a valid ipv6 string, got %s + ''', + repr(ip_string) + )) diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/_int.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/_int.py new file mode 100644 index 00000000..094fc958 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/_int.py @@ -0,0 +1,22 @@ +# coding: utf-8 +from __future__ import unicode_literals, division, absolute_import, print_function + + +def fill_width(bytes_, width): + """ + Ensure a byte string representing a positive integer is a specific width + (in bytes) + + :param bytes_: + The integer byte string + + :param width: + The desired width as an integer + + :return: + A byte string of the width specified + """ + + while len(bytes_) < width: + bytes_ = b'\x00' + bytes_ + return bytes_ diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/_iri.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/_iri.py new file mode 100644 index 00000000..7394b4d5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/_iri.py @@ -0,0 +1,291 @@ +# coding: utf-8 + +""" +Functions to convert unicode IRIs into ASCII byte string URIs and back. Exports +the following items: + + - iri_to_uri() + - uri_to_iri() +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +from encodings import idna # noqa +import codecs +import re +import sys + +from ._errors import unwrap +from ._types import byte_cls, str_cls, type_name, bytes_to_list, int_types + +if sys.version_info < (3,): + from urlparse import urlsplit, urlunsplit + from urllib import ( + quote as urlquote, + unquote as unquote_to_bytes, + ) + +else: + from urllib.parse import ( + quote as urlquote, + unquote_to_bytes, + urlsplit, + urlunsplit, + ) + + +def iri_to_uri(value, normalize=False): + """ + Encodes a unicode IRI into an ASCII byte string URI + + :param value: + A unicode string of an IRI + + :param normalize: + A bool that controls URI normalization + + :return: + A byte string of the ASCII-encoded URI + """ + + if not isinstance(value, str_cls): + raise TypeError(unwrap( + ''' + value must be a unicode string, not %s + ''', + type_name(value) + )) + + scheme = None + # Python 2.6 doesn't split properly is the URL doesn't start with http:// or https:// + if sys.version_info < (2, 7) and not value.startswith('http://') and not value.startswith('https://'): + real_prefix = None + prefix_match = re.match('^[^:]*://', value) + if prefix_match: + real_prefix = prefix_match.group(0) + value = 'http://' + value[len(real_prefix):] + parsed = urlsplit(value) + if real_prefix: + value = real_prefix + value[7:] + scheme = _urlquote(real_prefix[:-3]) + else: + parsed = urlsplit(value) + + if scheme is None: + scheme = _urlquote(parsed.scheme) + hostname = parsed.hostname + if hostname is not None: + hostname = hostname.encode('idna') + # RFC 3986 allows userinfo to contain sub-delims + username = _urlquote(parsed.username, safe='!$&\'()*+,;=') + password = _urlquote(parsed.password, safe='!$&\'()*+,;=') + port = parsed.port + if port is not None: + port = str_cls(port).encode('ascii') + + netloc = b'' + if username is not None: + netloc += username + if password: + netloc += b':' + password + netloc += b'@' + if hostname is not None: + netloc += hostname + if port is not None: + default_http = scheme == b'http' and port == b'80' + default_https = scheme == b'https' and port == b'443' + if not normalize or (not default_http and not default_https): + netloc += b':' + port + + # RFC 3986 allows a path to contain sub-delims, plus "@" and ":" + path = _urlquote(parsed.path, safe='/!$&\'()*+,;=@:') + # RFC 3986 allows the query to contain sub-delims, plus "@", ":" , "/" and "?" + query = _urlquote(parsed.query, safe='/?!$&\'()*+,;=@:') + # RFC 3986 allows the fragment to contain sub-delims, plus "@", ":" , "/" and "?" + fragment = _urlquote(parsed.fragment, safe='/?!$&\'()*+,;=@:') + + if normalize and query is None and fragment is None and path == b'/': + path = None + + # Python 2.7 compat + if path is None: + path = '' + + output = urlunsplit((scheme, netloc, path, query, fragment)) + if isinstance(output, str_cls): + output = output.encode('latin1') + return output + + +def uri_to_iri(value): + """ + Converts an ASCII URI byte string into a unicode IRI + + :param value: + An ASCII-encoded byte string of the URI + + :return: + A unicode string of the IRI + """ + + if not isinstance(value, byte_cls): + raise TypeError(unwrap( + ''' + value must be a byte string, not %s + ''', + type_name(value) + )) + + parsed = urlsplit(value) + + scheme = parsed.scheme + if scheme is not None: + scheme = scheme.decode('ascii') + + username = _urlunquote(parsed.username, remap=[':', '@']) + password = _urlunquote(parsed.password, remap=[':', '@']) + hostname = parsed.hostname + if hostname: + hostname = hostname.decode('idna') + port = parsed.port + if port and not isinstance(port, int_types): + port = port.decode('ascii') + + netloc = '' + if username is not None: + netloc += username + if password: + netloc += ':' + password + netloc += '@' + if hostname is not None: + netloc += hostname + if port is not None: + netloc += ':' + str_cls(port) + + path = _urlunquote(parsed.path, remap=['/'], preserve=True) + query = _urlunquote(parsed.query, remap=['&', '='], preserve=True) + fragment = _urlunquote(parsed.fragment) + + return urlunsplit((scheme, netloc, path, query, fragment)) + + +def _iri_utf8_errors_handler(exc): + """ + Error handler for decoding UTF-8 parts of a URI into an IRI. Leaves byte + sequences encoded in %XX format, but as part of a unicode string. + + :param exc: + The UnicodeDecodeError exception + + :return: + A 2-element tuple of (replacement unicode string, integer index to + resume at) + """ + + bytes_as_ints = bytes_to_list(exc.object[exc.start:exc.end]) + replacements = ['%%%02x' % num for num in bytes_as_ints] + return (''.join(replacements), exc.end) + + +codecs.register_error('iriutf8', _iri_utf8_errors_handler) + + +def _urlquote(string, safe=''): + """ + Quotes a unicode string for use in a URL + + :param string: + A unicode string + + :param safe: + A unicode string of character to not encode + + :return: + None (if string is None) or an ASCII byte string of the quoted string + """ + + if string is None or string == '': + return None + + # Anything already hex quoted is pulled out of the URL and unquoted if + # possible + escapes = [] + if re.search('%[0-9a-fA-F]{2}', string): + # Try to unquote any percent values, restoring them if they are not + # valid UTF-8. Also, requote any safe chars since encoded versions of + # those are functionally different than the unquoted ones. + def _try_unescape(match): + byte_string = unquote_to_bytes(match.group(0)) + unicode_string = byte_string.decode('utf-8', 'iriutf8') + for safe_char in list(safe): + unicode_string = unicode_string.replace(safe_char, '%%%02x' % ord(safe_char)) + return unicode_string + string = re.sub('(?:%[0-9a-fA-F]{2})+', _try_unescape, string) + + # Once we have the minimal set of hex quoted values, removed them from + # the string so that they are not double quoted + def _extract_escape(match): + escapes.append(match.group(0).encode('ascii')) + return '\x00' + string = re.sub('%[0-9a-fA-F]{2}', _extract_escape, string) + + output = urlquote(string.encode('utf-8'), safe=safe.encode('utf-8')) + if not isinstance(output, byte_cls): + output = output.encode('ascii') + + # Restore the existing quoted values that we extracted + if len(escapes) > 0: + def _return_escape(_): + return escapes.pop(0) + output = re.sub(b'%00', _return_escape, output) + + return output + + +def _urlunquote(byte_string, remap=None, preserve=None): + """ + Unquotes a URI portion from a byte string into unicode using UTF-8 + + :param byte_string: + A byte string of the data to unquote + + :param remap: + A list of characters (as unicode) that should be re-mapped to a + %XX encoding. This is used when characters are not valid in part of a + URL. + + :param preserve: + A bool - indicates that the chars to be remapped if they occur in + non-hex form, should be preserved. E.g. / for URL path. + + :return: + A unicode string + """ + + if byte_string is None: + return byte_string + + if byte_string == b'': + return '' + + if preserve: + replacements = ['\x1A', '\x1C', '\x1D', '\x1E', '\x1F'] + preserve_unmap = {} + for char in remap: + replacement = replacements.pop(0) + preserve_unmap[replacement] = char + byte_string = byte_string.replace(char.encode('ascii'), replacement.encode('ascii')) + + byte_string = unquote_to_bytes(byte_string) + + if remap: + for char in remap: + byte_string = byte_string.replace(char.encode('ascii'), ('%%%02x' % ord(char)).encode('ascii')) + + output = byte_string.decode('utf-8', 'iriutf8') + + if preserve: + for replacement, original in preserve_unmap.items(): + output = output.replace(replacement, original) + + return output diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/_ordereddict.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/_ordereddict.py new file mode 100644 index 00000000..2f18ab5a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/_ordereddict.py @@ -0,0 +1,135 @@ +# Copyright (c) 2009 Raymond Hettinger +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. + +import sys + +if not sys.version_info < (2, 7): + + from collections import OrderedDict + +else: + + from UserDict import DictMixin + + class OrderedDict(dict, DictMixin): + + def __init__(self, *args, **kwds): + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + try: + self.__end + except AttributeError: + self.clear() + self.update(*args, **kwds) + + def clear(self): + self.__end = end = [] + end += [None, end, end] # sentinel node for doubly linked list + self.__map = {} # key --> [key, prev, next] + dict.clear(self) + + def __setitem__(self, key, value): + if key not in self: + end = self.__end + curr = end[1] + curr[2] = end[1] = self.__map[key] = [key, curr, end] + dict.__setitem__(self, key, value) + + def __delitem__(self, key): + dict.__delitem__(self, key) + key, prev, next_ = self.__map.pop(key) + prev[2] = next_ + next_[1] = prev + + def __iter__(self): + end = self.__end + curr = end[2] + while curr is not end: + yield curr[0] + curr = curr[2] + + def __reversed__(self): + end = self.__end + curr = end[1] + while curr is not end: + yield curr[0] + curr = curr[1] + + def popitem(self, last=True): + if not self: + raise KeyError('dictionary is empty') + if last: + key = reversed(self).next() + else: + key = iter(self).next() + value = self.pop(key) + return key, value + + def __reduce__(self): + items = [[k, self[k]] for k in self] + tmp = self.__map, self.__end + del self.__map, self.__end + inst_dict = vars(self).copy() + self.__map, self.__end = tmp + if inst_dict: + return (self.__class__, (items,), inst_dict) + return self.__class__, (items,) + + def keys(self): + return list(self) + + setdefault = DictMixin.setdefault + update = DictMixin.update + pop = DictMixin.pop + values = DictMixin.values + items = DictMixin.items + iterkeys = DictMixin.iterkeys + itervalues = DictMixin.itervalues + iteritems = DictMixin.iteritems + + def __repr__(self): + if not self: + return '%s()' % (self.__class__.__name__,) + return '%s(%r)' % (self.__class__.__name__, self.items()) + + def copy(self): + return self.__class__(self) + + @classmethod + def fromkeys(cls, iterable, value=None): + d = cls() + for key in iterable: + d[key] = value + return d + + def __eq__(self, other): + if isinstance(other, OrderedDict): + if len(self) != len(other): + return False + for p, q in zip(self.items(), other.items()): + if p != q: + return False + return True + return dict.__eq__(self, other) + + def __ne__(self, other): + return not self == other diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/_teletex_codec.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/_teletex_codec.py new file mode 100644 index 00000000..b5991aaf --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/_teletex_codec.py @@ -0,0 +1,331 @@ +# coding: utf-8 + +""" +Implementation of the teletex T.61 codec. Exports the following items: + + - register() +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +import codecs + + +class TeletexCodec(codecs.Codec): + + def encode(self, input_, errors='strict'): + return codecs.charmap_encode(input_, errors, ENCODING_TABLE) + + def decode(self, input_, errors='strict'): + return codecs.charmap_decode(input_, errors, DECODING_TABLE) + + +class TeletexIncrementalEncoder(codecs.IncrementalEncoder): + + def encode(self, input_, final=False): + return codecs.charmap_encode(input_, self.errors, ENCODING_TABLE)[0] + + +class TeletexIncrementalDecoder(codecs.IncrementalDecoder): + + def decode(self, input_, final=False): + return codecs.charmap_decode(input_, self.errors, DECODING_TABLE)[0] + + +class TeletexStreamWriter(TeletexCodec, codecs.StreamWriter): + + pass + + +class TeletexStreamReader(TeletexCodec, codecs.StreamReader): + + pass + + +def teletex_search_function(name): + """ + Search function for teletex codec that is passed to codecs.register() + """ + + if name != 'teletex': + return None + + return codecs.CodecInfo( + name='teletex', + encode=TeletexCodec().encode, + decode=TeletexCodec().decode, + incrementalencoder=TeletexIncrementalEncoder, + incrementaldecoder=TeletexIncrementalDecoder, + streamreader=TeletexStreamReader, + streamwriter=TeletexStreamWriter, + ) + + +def register(): + """ + Registers the teletex codec + """ + + codecs.register(teletex_search_function) + + +# http://en.wikipedia.org/wiki/ITU_T.61 +DECODING_TABLE = ( + '\u0000' + '\u0001' + '\u0002' + '\u0003' + '\u0004' + '\u0005' + '\u0006' + '\u0007' + '\u0008' + '\u0009' + '\u000A' + '\u000B' + '\u000C' + '\u000D' + '\u000E' + '\u000F' + '\u0010' + '\u0011' + '\u0012' + '\u0013' + '\u0014' + '\u0015' + '\u0016' + '\u0017' + '\u0018' + '\u0019' + '\u001A' + '\u001B' + '\u001C' + '\u001D' + '\u001E' + '\u001F' + '\u0020' + '\u0021' + '\u0022' + '\ufffe' + '\ufffe' + '\u0025' + '\u0026' + '\u0027' + '\u0028' + '\u0029' + '\u002A' + '\u002B' + '\u002C' + '\u002D' + '\u002E' + '\u002F' + '\u0030' + '\u0031' + '\u0032' + '\u0033' + '\u0034' + '\u0035' + '\u0036' + '\u0037' + '\u0038' + '\u0039' + '\u003A' + '\u003B' + '\u003C' + '\u003D' + '\u003E' + '\u003F' + '\u0040' + '\u0041' + '\u0042' + '\u0043' + '\u0044' + '\u0045' + '\u0046' + '\u0047' + '\u0048' + '\u0049' + '\u004A' + '\u004B' + '\u004C' + '\u004D' + '\u004E' + '\u004F' + '\u0050' + '\u0051' + '\u0052' + '\u0053' + '\u0054' + '\u0055' + '\u0056' + '\u0057' + '\u0058' + '\u0059' + '\u005A' + '\u005B' + '\ufffe' + '\u005D' + '\ufffe' + '\u005F' + '\ufffe' + '\u0061' + '\u0062' + '\u0063' + '\u0064' + '\u0065' + '\u0066' + '\u0067' + '\u0068' + '\u0069' + '\u006A' + '\u006B' + '\u006C' + '\u006D' + '\u006E' + '\u006F' + '\u0070' + '\u0071' + '\u0072' + '\u0073' + '\u0074' + '\u0075' + '\u0076' + '\u0077' + '\u0078' + '\u0079' + '\u007A' + '\ufffe' + '\u007C' + '\ufffe' + '\ufffe' + '\u007F' + '\u0080' + '\u0081' + '\u0082' + '\u0083' + '\u0084' + '\u0085' + '\u0086' + '\u0087' + '\u0088' + '\u0089' + '\u008A' + '\u008B' + '\u008C' + '\u008D' + '\u008E' + '\u008F' + '\u0090' + '\u0091' + '\u0092' + '\u0093' + '\u0094' + '\u0095' + '\u0096' + '\u0097' + '\u0098' + '\u0099' + '\u009A' + '\u009B' + '\u009C' + '\u009D' + '\u009E' + '\u009F' + '\u00A0' + '\u00A1' + '\u00A2' + '\u00A3' + '\u0024' + '\u00A5' + '\u0023' + '\u00A7' + '\u00A4' + '\ufffe' + '\ufffe' + '\u00AB' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\u00B0' + '\u00B1' + '\u00B2' + '\u00B3' + '\u00D7' + '\u00B5' + '\u00B6' + '\u00B7' + '\u00F7' + '\ufffe' + '\ufffe' + '\u00BB' + '\u00BC' + '\u00BD' + '\u00BE' + '\u00BF' + '\ufffe' + '\u0300' + '\u0301' + '\u0302' + '\u0303' + '\u0304' + '\u0306' + '\u0307' + '\u0308' + '\ufffe' + '\u030A' + '\u0327' + '\u0332' + '\u030B' + '\u0328' + '\u030C' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\ufffe' + '\u2126' + '\u00C6' + '\u00D0' + '\u00AA' + '\u0126' + '\ufffe' + '\u0132' + '\u013F' + '\u0141' + '\u00D8' + '\u0152' + '\u00BA' + '\u00DE' + '\u0166' + '\u014A' + '\u0149' + '\u0138' + '\u00E6' + '\u0111' + '\u00F0' + '\u0127' + '\u0131' + '\u0133' + '\u0140' + '\u0142' + '\u00F8' + '\u0153' + '\u00DF' + '\u00FE' + '\u0167' + '\u014B' + '\ufffe' +) +ENCODING_TABLE = codecs.charmap_build(DECODING_TABLE) diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/_types.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/_types.py new file mode 100644 index 00000000..b9ca8cc7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/_types.py @@ -0,0 +1,46 @@ +# coding: utf-8 +from __future__ import unicode_literals, division, absolute_import, print_function + +import inspect +import sys + + +if sys.version_info < (3,): + str_cls = unicode # noqa + byte_cls = str + int_types = (int, long) # noqa + + def bytes_to_list(byte_string): + return [ord(b) for b in byte_string] + + chr_cls = chr + +else: + str_cls = str + byte_cls = bytes + int_types = int + + bytes_to_list = list + + def chr_cls(num): + return bytes([num]) + + +def type_name(value): + """ + Returns a user-readable name for the type of an object + + :param value: + A value to get the type name of + + :return: + A unicode string of the object's type name + """ + + if inspect.isclass(value): + cls = value + else: + cls = value.__class__ + if cls.__module__ in set(['builtins', '__builtin__']): + return cls.__name__ + return '%s.%s' % (cls.__module__, cls.__name__) diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/algos.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/algos.py new file mode 100644 index 00000000..cdd0020a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/algos.py @@ -0,0 +1,1189 @@ +# coding: utf-8 + +""" +ASN.1 type classes for various algorithms using in various aspects of public +key cryptography. Exports the following items: + + - AlgorithmIdentifier() + - AnyAlgorithmIdentifier() + - DigestAlgorithm() + - DigestInfo() + - DSASignature() + - EncryptionAlgorithm() + - HmacAlgorithm() + - KdfAlgorithm() + - Pkcs5MacAlgorithm() + - SignedDigestAlgorithm() + +Other type classes are defined that help compose the types listed above. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +from ._errors import unwrap +from ._int import fill_width +from .util import int_from_bytes, int_to_bytes +from .core import ( + Any, + Choice, + Integer, + Null, + ObjectIdentifier, + OctetString, + Sequence, + Void, +) + + +# Structures and OIDs in this file are pulled from +# https://tools.ietf.org/html/rfc3279, https://tools.ietf.org/html/rfc4055, +# https://tools.ietf.org/html/rfc5758, https://tools.ietf.org/html/rfc7292, +# http://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf + +class AlgorithmIdentifier(Sequence): + _fields = [ + ('algorithm', ObjectIdentifier), + ('parameters', Any, {'optional': True}), + ] + + +class _ForceNullParameters(object): + """ + Various structures based on AlgorithmIdentifier require that the parameters + field be core.Null() for certain OIDs. This mixin ensures that happens. + """ + + # The following attribute, plus the parameters spec callback and custom + # __setitem__ are all to handle a situation where parameters should not be + # optional and must be Null for certain OIDs. More info at + # https://tools.ietf.org/html/rfc4055#page-15 and + # https://tools.ietf.org/html/rfc4055#section-2.1 + _null_algos = set([ + '1.2.840.113549.1.1.1', # rsassa_pkcs1v15 / rsaes_pkcs1v15 / rsa + '1.2.840.113549.1.1.11', # sha256_rsa + '1.2.840.113549.1.1.12', # sha384_rsa + '1.2.840.113549.1.1.13', # sha512_rsa + '1.2.840.113549.1.1.14', # sha224_rsa + '1.3.14.3.2.26', # sha1 + '2.16.840.1.101.3.4.2.4', # sha224 + '2.16.840.1.101.3.4.2.1', # sha256 + '2.16.840.1.101.3.4.2.2', # sha384 + '2.16.840.1.101.3.4.2.3', # sha512 + ]) + + def _parameters_spec(self): + if self._oid_pair == ('algorithm', 'parameters'): + algo = self['algorithm'].native + if algo in self._oid_specs: + return self._oid_specs[algo] + + if self['algorithm'].dotted in self._null_algos: + return Null + + return None + + _spec_callbacks = { + 'parameters': _parameters_spec + } + + # We have to override this since the spec callback uses the value of + # algorithm to determine the parameter spec, however default values are + # assigned before setting a field, so a default value can't be based on + # another field value (unless it is a default also). Thus we have to + # manually check to see if the algorithm was set and parameters is unset, + # and then fix the value as appropriate. + def __setitem__(self, key, value): + res = super(_ForceNullParameters, self).__setitem__(key, value) + if key != 'algorithm': + return res + if self['algorithm'].dotted not in self._null_algos: + return res + if self['parameters'].__class__ != Void: + return res + self['parameters'] = Null() + return res + + +class HmacAlgorithmId(ObjectIdentifier): + _map = { + '1.3.14.3.2.10': 'des_mac', + '1.2.840.113549.2.7': 'sha1', + '1.2.840.113549.2.8': 'sha224', + '1.2.840.113549.2.9': 'sha256', + '1.2.840.113549.2.10': 'sha384', + '1.2.840.113549.2.11': 'sha512', + '1.2.840.113549.2.12': 'sha512_224', + '1.2.840.113549.2.13': 'sha512_256', + '2.16.840.1.101.3.4.2.13': 'sha3_224', + '2.16.840.1.101.3.4.2.14': 'sha3_256', + '2.16.840.1.101.3.4.2.15': 'sha3_384', + '2.16.840.1.101.3.4.2.16': 'sha3_512', + } + + +class HmacAlgorithm(Sequence): + _fields = [ + ('algorithm', HmacAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + +class DigestAlgorithmId(ObjectIdentifier): + _map = { + '1.2.840.113549.2.2': 'md2', + '1.2.840.113549.2.5': 'md5', + '1.3.14.3.2.26': 'sha1', + '2.16.840.1.101.3.4.2.4': 'sha224', + '2.16.840.1.101.3.4.2.1': 'sha256', + '2.16.840.1.101.3.4.2.2': 'sha384', + '2.16.840.1.101.3.4.2.3': 'sha512', + '2.16.840.1.101.3.4.2.5': 'sha512_224', + '2.16.840.1.101.3.4.2.6': 'sha512_256', + '2.16.840.1.101.3.4.2.7': 'sha3_224', + '2.16.840.1.101.3.4.2.8': 'sha3_256', + '2.16.840.1.101.3.4.2.9': 'sha3_384', + '2.16.840.1.101.3.4.2.10': 'sha3_512', + '2.16.840.1.101.3.4.2.11': 'shake128', + '2.16.840.1.101.3.4.2.12': 'shake256', + '2.16.840.1.101.3.4.2.17': 'shake128_len', + '2.16.840.1.101.3.4.2.18': 'shake256_len', + } + + +class DigestAlgorithm(_ForceNullParameters, Sequence): + _fields = [ + ('algorithm', DigestAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + +# This structure is what is signed with a SignedDigestAlgorithm +class DigestInfo(Sequence): + _fields = [ + ('digest_algorithm', DigestAlgorithm), + ('digest', OctetString), + ] + + +class MaskGenAlgorithmId(ObjectIdentifier): + _map = { + '1.2.840.113549.1.1.8': 'mgf1', + } + + +class MaskGenAlgorithm(Sequence): + _fields = [ + ('algorithm', MaskGenAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + _oid_pair = ('algorithm', 'parameters') + _oid_specs = { + 'mgf1': DigestAlgorithm + } + + +class TrailerField(Integer): + _map = { + 1: 'trailer_field_bc', + } + + +class RSASSAPSSParams(Sequence): + _fields = [ + ( + 'hash_algorithm', + DigestAlgorithm, + { + 'explicit': 0, + 'default': {'algorithm': 'sha1'}, + } + ), + ( + 'mask_gen_algorithm', + MaskGenAlgorithm, + { + 'explicit': 1, + 'default': { + 'algorithm': 'mgf1', + 'parameters': {'algorithm': 'sha1'}, + }, + } + ), + ( + 'salt_length', + Integer, + { + 'explicit': 2, + 'default': 20, + } + ), + ( + 'trailer_field', + TrailerField, + { + 'explicit': 3, + 'default': 'trailer_field_bc', + } + ), + ] + + +class SignedDigestAlgorithmId(ObjectIdentifier): + _map = { + '1.3.14.3.2.3': 'md5_rsa', + '1.3.14.3.2.29': 'sha1_rsa', + '1.3.14.7.2.3.1': 'md2_rsa', + '1.2.840.113549.1.1.2': 'md2_rsa', + '1.2.840.113549.1.1.4': 'md5_rsa', + '1.2.840.113549.1.1.5': 'sha1_rsa', + '1.2.840.113549.1.1.14': 'sha224_rsa', + '1.2.840.113549.1.1.11': 'sha256_rsa', + '1.2.840.113549.1.1.12': 'sha384_rsa', + '1.2.840.113549.1.1.13': 'sha512_rsa', + '1.2.840.113549.1.1.10': 'rsassa_pss', + '1.2.840.10040.4.3': 'sha1_dsa', + '1.3.14.3.2.13': 'sha1_dsa', + '1.3.14.3.2.27': 'sha1_dsa', + '2.16.840.1.101.3.4.3.1': 'sha224_dsa', + '2.16.840.1.101.3.4.3.2': 'sha256_dsa', + '1.2.840.10045.4.1': 'sha1_ecdsa', + '1.2.840.10045.4.3.1': 'sha224_ecdsa', + '1.2.840.10045.4.3.2': 'sha256_ecdsa', + '1.2.840.10045.4.3.3': 'sha384_ecdsa', + '1.2.840.10045.4.3.4': 'sha512_ecdsa', + '2.16.840.1.101.3.4.3.9': 'sha3_224_ecdsa', + '2.16.840.1.101.3.4.3.10': 'sha3_256_ecdsa', + '2.16.840.1.101.3.4.3.11': 'sha3_384_ecdsa', + '2.16.840.1.101.3.4.3.12': 'sha3_512_ecdsa', + # For when the digest is specified elsewhere in a Sequence + '1.2.840.113549.1.1.1': 'rsassa_pkcs1v15', + '1.2.840.10040.4.1': 'dsa', + '1.2.840.10045.4': 'ecdsa', + # RFC 8410 -- https://tools.ietf.org/html/rfc8410 + '1.3.101.112': 'ed25519', + '1.3.101.113': 'ed448', + } + + _reverse_map = { + 'dsa': '1.2.840.10040.4.1', + 'ecdsa': '1.2.840.10045.4', + 'md2_rsa': '1.2.840.113549.1.1.2', + 'md5_rsa': '1.2.840.113549.1.1.4', + 'rsassa_pkcs1v15': '1.2.840.113549.1.1.1', + 'rsassa_pss': '1.2.840.113549.1.1.10', + 'sha1_dsa': '1.2.840.10040.4.3', + 'sha1_ecdsa': '1.2.840.10045.4.1', + 'sha1_rsa': '1.2.840.113549.1.1.5', + 'sha224_dsa': '2.16.840.1.101.3.4.3.1', + 'sha224_ecdsa': '1.2.840.10045.4.3.1', + 'sha224_rsa': '1.2.840.113549.1.1.14', + 'sha256_dsa': '2.16.840.1.101.3.4.3.2', + 'sha256_ecdsa': '1.2.840.10045.4.3.2', + 'sha256_rsa': '1.2.840.113549.1.1.11', + 'sha384_ecdsa': '1.2.840.10045.4.3.3', + 'sha384_rsa': '1.2.840.113549.1.1.12', + 'sha512_ecdsa': '1.2.840.10045.4.3.4', + 'sha512_rsa': '1.2.840.113549.1.1.13', + 'sha3_224_ecdsa': '2.16.840.1.101.3.4.3.9', + 'sha3_256_ecdsa': '2.16.840.1.101.3.4.3.10', + 'sha3_384_ecdsa': '2.16.840.1.101.3.4.3.11', + 'sha3_512_ecdsa': '2.16.840.1.101.3.4.3.12', + 'ed25519': '1.3.101.112', + 'ed448': '1.3.101.113', + } + + +class SignedDigestAlgorithm(_ForceNullParameters, Sequence): + _fields = [ + ('algorithm', SignedDigestAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + _oid_pair = ('algorithm', 'parameters') + _oid_specs = { + 'rsassa_pss': RSASSAPSSParams, + } + + @property + def signature_algo(self): + """ + :return: + A unicode string of "rsassa_pkcs1v15", "rsassa_pss", "dsa", + "ecdsa", "ed25519" or "ed448" + """ + + algorithm = self['algorithm'].native + + algo_map = { + 'md2_rsa': 'rsassa_pkcs1v15', + 'md5_rsa': 'rsassa_pkcs1v15', + 'sha1_rsa': 'rsassa_pkcs1v15', + 'sha224_rsa': 'rsassa_pkcs1v15', + 'sha256_rsa': 'rsassa_pkcs1v15', + 'sha384_rsa': 'rsassa_pkcs1v15', + 'sha512_rsa': 'rsassa_pkcs1v15', + 'rsassa_pkcs1v15': 'rsassa_pkcs1v15', + 'rsassa_pss': 'rsassa_pss', + 'sha1_dsa': 'dsa', + 'sha224_dsa': 'dsa', + 'sha256_dsa': 'dsa', + 'dsa': 'dsa', + 'sha1_ecdsa': 'ecdsa', + 'sha224_ecdsa': 'ecdsa', + 'sha256_ecdsa': 'ecdsa', + 'sha384_ecdsa': 'ecdsa', + 'sha512_ecdsa': 'ecdsa', + 'sha3_224_ecdsa': 'ecdsa', + 'sha3_256_ecdsa': 'ecdsa', + 'sha3_384_ecdsa': 'ecdsa', + 'sha3_512_ecdsa': 'ecdsa', + 'ecdsa': 'ecdsa', + 'ed25519': 'ed25519', + 'ed448': 'ed448', + } + if algorithm in algo_map: + return algo_map[algorithm] + + raise ValueError(unwrap( + ''' + Signature algorithm not known for %s + ''', + algorithm + )) + + @property + def hash_algo(self): + """ + :return: + A unicode string of "md2", "md5", "sha1", "sha224", "sha256", + "sha384", "sha512", "sha512_224", "sha512_256" or "shake256" + """ + + algorithm = self['algorithm'].native + + algo_map = { + 'md2_rsa': 'md2', + 'md5_rsa': 'md5', + 'sha1_rsa': 'sha1', + 'sha224_rsa': 'sha224', + 'sha256_rsa': 'sha256', + 'sha384_rsa': 'sha384', + 'sha512_rsa': 'sha512', + 'sha1_dsa': 'sha1', + 'sha224_dsa': 'sha224', + 'sha256_dsa': 'sha256', + 'sha1_ecdsa': 'sha1', + 'sha224_ecdsa': 'sha224', + 'sha256_ecdsa': 'sha256', + 'sha384_ecdsa': 'sha384', + 'sha512_ecdsa': 'sha512', + 'ed25519': 'sha512', + 'ed448': 'shake256', + } + if algorithm in algo_map: + return algo_map[algorithm] + + if algorithm == 'rsassa_pss': + return self['parameters']['hash_algorithm']['algorithm'].native + + raise ValueError(unwrap( + ''' + Hash algorithm not known for %s + ''', + algorithm + )) + + +class Pbkdf2Salt(Choice): + _alternatives = [ + ('specified', OctetString), + ('other_source', AlgorithmIdentifier), + ] + + +class Pbkdf2Params(Sequence): + _fields = [ + ('salt', Pbkdf2Salt), + ('iteration_count', Integer), + ('key_length', Integer, {'optional': True}), + ('prf', HmacAlgorithm, {'default': {'algorithm': 'sha1'}}), + ] + + +class KdfAlgorithmId(ObjectIdentifier): + _map = { + '1.2.840.113549.1.5.12': 'pbkdf2' + } + + +class KdfAlgorithm(Sequence): + _fields = [ + ('algorithm', KdfAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + _oid_pair = ('algorithm', 'parameters') + _oid_specs = { + 'pbkdf2': Pbkdf2Params + } + + +class DHParameters(Sequence): + """ + Original Name: DHParameter + Source: ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-3.asc section 9 + """ + + _fields = [ + ('p', Integer), + ('g', Integer), + ('private_value_length', Integer, {'optional': True}), + ] + + +class KeyExchangeAlgorithmId(ObjectIdentifier): + _map = { + '1.2.840.113549.1.3.1': 'dh', + } + + +class KeyExchangeAlgorithm(Sequence): + _fields = [ + ('algorithm', KeyExchangeAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + _oid_pair = ('algorithm', 'parameters') + _oid_specs = { + 'dh': DHParameters, + } + + +class Rc2Params(Sequence): + _fields = [ + ('rc2_parameter_version', Integer, {'optional': True}), + ('iv', OctetString), + ] + + +class Rc5ParamVersion(Integer): + _map = { + 16: 'v1-0' + } + + +class Rc5Params(Sequence): + _fields = [ + ('version', Rc5ParamVersion), + ('rounds', Integer), + ('block_size_in_bits', Integer), + ('iv', OctetString, {'optional': True}), + ] + + +class Pbes1Params(Sequence): + _fields = [ + ('salt', OctetString), + ('iterations', Integer), + ] + + +class CcmParams(Sequence): + # https://tools.ietf.org/html/rfc5084 + # aes_ICVlen: 4 | 6 | 8 | 10 | 12 | 14 | 16 + _fields = [ + ('aes_nonce', OctetString), + ('aes_icvlen', Integer), + ] + + +class PSourceAlgorithmId(ObjectIdentifier): + _map = { + '1.2.840.113549.1.1.9': 'p_specified', + } + + +class PSourceAlgorithm(Sequence): + _fields = [ + ('algorithm', PSourceAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + _oid_pair = ('algorithm', 'parameters') + _oid_specs = { + 'p_specified': OctetString + } + + +class RSAESOAEPParams(Sequence): + _fields = [ + ( + 'hash_algorithm', + DigestAlgorithm, + { + 'explicit': 0, + 'default': {'algorithm': 'sha1'} + } + ), + ( + 'mask_gen_algorithm', + MaskGenAlgorithm, + { + 'explicit': 1, + 'default': { + 'algorithm': 'mgf1', + 'parameters': {'algorithm': 'sha1'} + } + } + ), + ( + 'p_source_algorithm', + PSourceAlgorithm, + { + 'explicit': 2, + 'default': { + 'algorithm': 'p_specified', + 'parameters': b'' + } + } + ), + ] + + +class DSASignature(Sequence): + """ + An ASN.1 class for translating between the OS crypto library's + representation of an (EC)DSA signature and the ASN.1 structure that is part + of various RFCs. + + Original Name: DSS-Sig-Value + Source: https://tools.ietf.org/html/rfc3279#section-2.2.2 + """ + + _fields = [ + ('r', Integer), + ('s', Integer), + ] + + @classmethod + def from_p1363(cls, data): + """ + Reads a signature from a byte string encoding accordint to IEEE P1363, + which is used by Microsoft's BCryptSignHash() function. + + :param data: + A byte string from BCryptSignHash() + + :return: + A DSASignature object + """ + + r = int_from_bytes(data[0:len(data) // 2]) + s = int_from_bytes(data[len(data) // 2:]) + return cls({'r': r, 's': s}) + + def to_p1363(self): + """ + Dumps a signature to a byte string compatible with Microsoft's + BCryptVerifySignature() function. + + :return: + A byte string compatible with BCryptVerifySignature() + """ + + r_bytes = int_to_bytes(self['r'].native) + s_bytes = int_to_bytes(self['s'].native) + + int_byte_length = max(len(r_bytes), len(s_bytes)) + r_bytes = fill_width(r_bytes, int_byte_length) + s_bytes = fill_width(s_bytes, int_byte_length) + + return r_bytes + s_bytes + + +class EncryptionAlgorithmId(ObjectIdentifier): + _map = { + '1.3.14.3.2.7': 'des', + '1.2.840.113549.3.7': 'tripledes_3key', + '1.2.840.113549.3.2': 'rc2', + '1.2.840.113549.3.4': 'rc4', + '1.2.840.113549.3.9': 'rc5', + # From http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html#AES + '2.16.840.1.101.3.4.1.1': 'aes128_ecb', + '2.16.840.1.101.3.4.1.2': 'aes128_cbc', + '2.16.840.1.101.3.4.1.3': 'aes128_ofb', + '2.16.840.1.101.3.4.1.4': 'aes128_cfb', + '2.16.840.1.101.3.4.1.5': 'aes128_wrap', + '2.16.840.1.101.3.4.1.6': 'aes128_gcm', + '2.16.840.1.101.3.4.1.7': 'aes128_ccm', + '2.16.840.1.101.3.4.1.8': 'aes128_wrap_pad', + '2.16.840.1.101.3.4.1.21': 'aes192_ecb', + '2.16.840.1.101.3.4.1.22': 'aes192_cbc', + '2.16.840.1.101.3.4.1.23': 'aes192_ofb', + '2.16.840.1.101.3.4.1.24': 'aes192_cfb', + '2.16.840.1.101.3.4.1.25': 'aes192_wrap', + '2.16.840.1.101.3.4.1.26': 'aes192_gcm', + '2.16.840.1.101.3.4.1.27': 'aes192_ccm', + '2.16.840.1.101.3.4.1.28': 'aes192_wrap_pad', + '2.16.840.1.101.3.4.1.41': 'aes256_ecb', + '2.16.840.1.101.3.4.1.42': 'aes256_cbc', + '2.16.840.1.101.3.4.1.43': 'aes256_ofb', + '2.16.840.1.101.3.4.1.44': 'aes256_cfb', + '2.16.840.1.101.3.4.1.45': 'aes256_wrap', + '2.16.840.1.101.3.4.1.46': 'aes256_gcm', + '2.16.840.1.101.3.4.1.47': 'aes256_ccm', + '2.16.840.1.101.3.4.1.48': 'aes256_wrap_pad', + # From PKCS#5 + '1.2.840.113549.1.5.13': 'pbes2', + '1.2.840.113549.1.5.1': 'pbes1_md2_des', + '1.2.840.113549.1.5.3': 'pbes1_md5_des', + '1.2.840.113549.1.5.4': 'pbes1_md2_rc2', + '1.2.840.113549.1.5.6': 'pbes1_md5_rc2', + '1.2.840.113549.1.5.10': 'pbes1_sha1_des', + '1.2.840.113549.1.5.11': 'pbes1_sha1_rc2', + # From PKCS#12 + '1.2.840.113549.1.12.1.1': 'pkcs12_sha1_rc4_128', + '1.2.840.113549.1.12.1.2': 'pkcs12_sha1_rc4_40', + '1.2.840.113549.1.12.1.3': 'pkcs12_sha1_tripledes_3key', + '1.2.840.113549.1.12.1.4': 'pkcs12_sha1_tripledes_2key', + '1.2.840.113549.1.12.1.5': 'pkcs12_sha1_rc2_128', + '1.2.840.113549.1.12.1.6': 'pkcs12_sha1_rc2_40', + # PKCS#1 v2.2 + '1.2.840.113549.1.1.1': 'rsaes_pkcs1v15', + '1.2.840.113549.1.1.7': 'rsaes_oaep', + } + + +class EncryptionAlgorithm(_ForceNullParameters, Sequence): + _fields = [ + ('algorithm', EncryptionAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + _oid_pair = ('algorithm', 'parameters') + _oid_specs = { + 'des': OctetString, + 'tripledes_3key': OctetString, + 'rc2': Rc2Params, + 'rc5': Rc5Params, + 'aes128_cbc': OctetString, + 'aes192_cbc': OctetString, + 'aes256_cbc': OctetString, + 'aes128_ofb': OctetString, + 'aes192_ofb': OctetString, + 'aes256_ofb': OctetString, + # From RFC5084 + 'aes128_ccm': CcmParams, + 'aes192_ccm': CcmParams, + 'aes256_ccm': CcmParams, + # From PKCS#5 + 'pbes1_md2_des': Pbes1Params, + 'pbes1_md5_des': Pbes1Params, + 'pbes1_md2_rc2': Pbes1Params, + 'pbes1_md5_rc2': Pbes1Params, + 'pbes1_sha1_des': Pbes1Params, + 'pbes1_sha1_rc2': Pbes1Params, + # From PKCS#12 + 'pkcs12_sha1_rc4_128': Pbes1Params, + 'pkcs12_sha1_rc4_40': Pbes1Params, + 'pkcs12_sha1_tripledes_3key': Pbes1Params, + 'pkcs12_sha1_tripledes_2key': Pbes1Params, + 'pkcs12_sha1_rc2_128': Pbes1Params, + 'pkcs12_sha1_rc2_40': Pbes1Params, + # PKCS#1 v2.2 + 'rsaes_oaep': RSAESOAEPParams, + } + + @property + def kdf(self): + """ + Returns the name of the key derivation function to use. + + :return: + A unicode from of one of the following: "pbkdf1", "pbkdf2", + "pkcs12_kdf" + """ + + encryption_algo = self['algorithm'].native + + if encryption_algo == 'pbes2': + return self['parameters']['key_derivation_func']['algorithm'].native + + if encryption_algo.find('.') == -1: + if encryption_algo.find('_') != -1: + encryption_algo, _ = encryption_algo.split('_', 1) + + if encryption_algo == 'pbes1': + return 'pbkdf1' + + if encryption_algo == 'pkcs12': + return 'pkcs12_kdf' + + raise ValueError(unwrap( + ''' + Encryption algorithm "%s" does not have a registered key + derivation function + ''', + encryption_algo + )) + + raise ValueError(unwrap( + ''' + Unrecognized encryption algorithm "%s", can not determine key + derivation function + ''', + encryption_algo + )) + + @property + def kdf_hmac(self): + """ + Returns the HMAC algorithm to use with the KDF. + + :return: + A unicode string of one of the following: "md2", "md5", "sha1", + "sha224", "sha256", "sha384", "sha512" + """ + + encryption_algo = self['algorithm'].native + + if encryption_algo == 'pbes2': + return self['parameters']['key_derivation_func']['parameters']['prf']['algorithm'].native + + if encryption_algo.find('.') == -1: + if encryption_algo.find('_') != -1: + _, hmac_algo, _ = encryption_algo.split('_', 2) + return hmac_algo + + raise ValueError(unwrap( + ''' + Encryption algorithm "%s" does not have a registered key + derivation function + ''', + encryption_algo + )) + + raise ValueError(unwrap( + ''' + Unrecognized encryption algorithm "%s", can not determine key + derivation hmac algorithm + ''', + encryption_algo + )) + + @property + def kdf_salt(self): + """ + Returns the byte string to use as the salt for the KDF. + + :return: + A byte string + """ + + encryption_algo = self['algorithm'].native + + if encryption_algo == 'pbes2': + salt = self['parameters']['key_derivation_func']['parameters']['salt'] + + if salt.name == 'other_source': + raise ValueError(unwrap( + ''' + Can not determine key derivation salt - the + reserved-for-future-use other source salt choice was + specified in the PBKDF2 params structure + ''' + )) + + return salt.native + + if encryption_algo.find('.') == -1: + if encryption_algo.find('_') != -1: + return self['parameters']['salt'].native + + raise ValueError(unwrap( + ''' + Encryption algorithm "%s" does not have a registered key + derivation function + ''', + encryption_algo + )) + + raise ValueError(unwrap( + ''' + Unrecognized encryption algorithm "%s", can not determine key + derivation salt + ''', + encryption_algo + )) + + @property + def kdf_iterations(self): + """ + Returns the number of iterations that should be run via the KDF. + + :return: + An integer + """ + + encryption_algo = self['algorithm'].native + + if encryption_algo == 'pbes2': + return self['parameters']['key_derivation_func']['parameters']['iteration_count'].native + + if encryption_algo.find('.') == -1: + if encryption_algo.find('_') != -1: + return self['parameters']['iterations'].native + + raise ValueError(unwrap( + ''' + Encryption algorithm "%s" does not have a registered key + derivation function + ''', + encryption_algo + )) + + raise ValueError(unwrap( + ''' + Unrecognized encryption algorithm "%s", can not determine key + derivation iterations + ''', + encryption_algo + )) + + @property + def key_length(self): + """ + Returns the key length to pass to the cipher/kdf. The PKCS#5 spec does + not specify a way to store the RC5 key length, however this tends not + to be a problem since OpenSSL does not support RC5 in PKCS#8 and OS X + does not provide an RC5 cipher for use in the Security Transforms + library. + + :raises: + ValueError - when the key length can not be determined + + :return: + An integer representing the length in bytes + """ + + encryption_algo = self['algorithm'].native + + if encryption_algo[0:3] == 'aes': + return { + 'aes128_': 16, + 'aes192_': 24, + 'aes256_': 32, + }[encryption_algo[0:7]] + + cipher_lengths = { + 'des': 8, + 'tripledes_3key': 24, + } + + if encryption_algo in cipher_lengths: + return cipher_lengths[encryption_algo] + + if encryption_algo == 'rc2': + rc2_parameter_version = self['parameters']['rc2_parameter_version'].native + + # See page 24 of + # http://www.emc.com/collateral/white-papers/h11302-pkcs5v2-1-password-based-cryptography-standard-wp.pdf + encoded_key_bits_map = { + 160: 5, # 40-bit + 120: 8, # 64-bit + 58: 16, # 128-bit + } + + if rc2_parameter_version in encoded_key_bits_map: + return encoded_key_bits_map[rc2_parameter_version] + + if rc2_parameter_version >= 256: + return rc2_parameter_version + + if rc2_parameter_version is None: + return 4 # 32-bit default + + raise ValueError(unwrap( + ''' + Invalid RC2 parameter version found in EncryptionAlgorithm + parameters + ''' + )) + + if encryption_algo == 'pbes2': + key_length = self['parameters']['key_derivation_func']['parameters']['key_length'].native + if key_length is not None: + return key_length + + # If the KDF params don't specify the key size, we can infer it from + # the encryption scheme for all schemes except for RC5. However, in + # practical terms, neither OpenSSL or OS X support RC5 for PKCS#8 + # so it is unlikely to be an issue that is run into. + + return self['parameters']['encryption_scheme'].key_length + + if encryption_algo.find('.') == -1: + return { + 'pbes1_md2_des': 8, + 'pbes1_md5_des': 8, + 'pbes1_md2_rc2': 8, + 'pbes1_md5_rc2': 8, + 'pbes1_sha1_des': 8, + 'pbes1_sha1_rc2': 8, + 'pkcs12_sha1_rc4_128': 16, + 'pkcs12_sha1_rc4_40': 5, + 'pkcs12_sha1_tripledes_3key': 24, + 'pkcs12_sha1_tripledes_2key': 16, + 'pkcs12_sha1_rc2_128': 16, + 'pkcs12_sha1_rc2_40': 5, + }[encryption_algo] + + raise ValueError(unwrap( + ''' + Unrecognized encryption algorithm "%s" + ''', + encryption_algo + )) + + @property + def encryption_mode(self): + """ + Returns the name of the encryption mode to use. + + :return: + A unicode string from one of the following: "cbc", "ecb", "ofb", + "cfb", "wrap", "gcm", "ccm", "wrap_pad" + """ + + encryption_algo = self['algorithm'].native + + if encryption_algo[0:7] in set(['aes128_', 'aes192_', 'aes256_']): + return encryption_algo[7:] + + if encryption_algo[0:6] == 'pbes1_': + return 'cbc' + + if encryption_algo[0:7] == 'pkcs12_': + return 'cbc' + + if encryption_algo in set(['des', 'tripledes_3key', 'rc2', 'rc5']): + return 'cbc' + + if encryption_algo == 'pbes2': + return self['parameters']['encryption_scheme'].encryption_mode + + raise ValueError(unwrap( + ''' + Unrecognized encryption algorithm "%s" + ''', + encryption_algo + )) + + @property + def encryption_cipher(self): + """ + Returns the name of the symmetric encryption cipher to use. The key + length can be retrieved via the .key_length property to disabiguate + between different variations of TripleDES, AES, and the RC* ciphers. + + :return: + A unicode string from one of the following: "rc2", "rc5", "des", + "tripledes", "aes" + """ + + encryption_algo = self['algorithm'].native + + if encryption_algo[0:7] in set(['aes128_', 'aes192_', 'aes256_']): + return 'aes' + + if encryption_algo in set(['des', 'rc2', 'rc5']): + return encryption_algo + + if encryption_algo == 'tripledes_3key': + return 'tripledes' + + if encryption_algo == 'pbes2': + return self['parameters']['encryption_scheme'].encryption_cipher + + if encryption_algo.find('.') == -1: + return { + 'pbes1_md2_des': 'des', + 'pbes1_md5_des': 'des', + 'pbes1_md2_rc2': 'rc2', + 'pbes1_md5_rc2': 'rc2', + 'pbes1_sha1_des': 'des', + 'pbes1_sha1_rc2': 'rc2', + 'pkcs12_sha1_rc4_128': 'rc4', + 'pkcs12_sha1_rc4_40': 'rc4', + 'pkcs12_sha1_tripledes_3key': 'tripledes', + 'pkcs12_sha1_tripledes_2key': 'tripledes', + 'pkcs12_sha1_rc2_128': 'rc2', + 'pkcs12_sha1_rc2_40': 'rc2', + }[encryption_algo] + + raise ValueError(unwrap( + ''' + Unrecognized encryption algorithm "%s" + ''', + encryption_algo + )) + + @property + def encryption_block_size(self): + """ + Returns the block size of the encryption cipher, in bytes. + + :return: + An integer that is the block size in bytes + """ + + encryption_algo = self['algorithm'].native + + if encryption_algo[0:7] in set(['aes128_', 'aes192_', 'aes256_']): + return 16 + + cipher_map = { + 'des': 8, + 'tripledes_3key': 8, + 'rc2': 8, + } + if encryption_algo in cipher_map: + return cipher_map[encryption_algo] + + if encryption_algo == 'rc5': + return self['parameters']['block_size_in_bits'].native // 8 + + if encryption_algo == 'pbes2': + return self['parameters']['encryption_scheme'].encryption_block_size + + if encryption_algo.find('.') == -1: + return { + 'pbes1_md2_des': 8, + 'pbes1_md5_des': 8, + 'pbes1_md2_rc2': 8, + 'pbes1_md5_rc2': 8, + 'pbes1_sha1_des': 8, + 'pbes1_sha1_rc2': 8, + 'pkcs12_sha1_rc4_128': 0, + 'pkcs12_sha1_rc4_40': 0, + 'pkcs12_sha1_tripledes_3key': 8, + 'pkcs12_sha1_tripledes_2key': 8, + 'pkcs12_sha1_rc2_128': 8, + 'pkcs12_sha1_rc2_40': 8, + }[encryption_algo] + + raise ValueError(unwrap( + ''' + Unrecognized encryption algorithm "%s" + ''', + encryption_algo + )) + + @property + def encryption_iv(self): + """ + Returns the byte string of the initialization vector for the encryption + scheme. Only the PBES2 stores the IV in the params. For PBES1, the IV + is derived from the KDF and this property will return None. + + :return: + A byte string or None + """ + + encryption_algo = self['algorithm'].native + + if encryption_algo in set(['rc2', 'rc5']): + return self['parameters']['iv'].native + + # For DES/Triple DES and AES the IV is the entirety of the parameters + octet_string_iv_oids = set([ + 'des', + 'tripledes_3key', + 'aes128_cbc', + 'aes192_cbc', + 'aes256_cbc', + 'aes128_ofb', + 'aes192_ofb', + 'aes256_ofb', + ]) + if encryption_algo in octet_string_iv_oids: + return self['parameters'].native + + if encryption_algo == 'pbes2': + return self['parameters']['encryption_scheme'].encryption_iv + + # All of the PBES1 algos use their KDF to create the IV. For the pbkdf1, + # the KDF is told to generate a key that is an extra 8 bytes long, and + # that is used for the IV. For the PKCS#12 KDF, it is called with an id + # of 2 to generate the IV. In either case, we can't return the IV + # without knowing the user's password. + if encryption_algo.find('.') == -1: + return None + + raise ValueError(unwrap( + ''' + Unrecognized encryption algorithm "%s" + ''', + encryption_algo + )) + + +class Pbes2Params(Sequence): + _fields = [ + ('key_derivation_func', KdfAlgorithm), + ('encryption_scheme', EncryptionAlgorithm), + ] + + +class Pbmac1Params(Sequence): + _fields = [ + ('key_derivation_func', KdfAlgorithm), + ('message_auth_scheme', HmacAlgorithm), + ] + + +class Pkcs5MacId(ObjectIdentifier): + _map = { + '1.2.840.113549.1.5.14': 'pbmac1', + } + + +class Pkcs5MacAlgorithm(Sequence): + _fields = [ + ('algorithm', Pkcs5MacId), + ('parameters', Any), + ] + + _oid_pair = ('algorithm', 'parameters') + _oid_specs = { + 'pbmac1': Pbmac1Params, + } + + +EncryptionAlgorithm._oid_specs['pbes2'] = Pbes2Params + + +class AnyAlgorithmId(ObjectIdentifier): + _map = {} + + def _setup(self): + _map = self.__class__._map + for other_cls in (EncryptionAlgorithmId, SignedDigestAlgorithmId, DigestAlgorithmId): + for oid, name in other_cls._map.items(): + _map[oid] = name + + +class AnyAlgorithmIdentifier(_ForceNullParameters, Sequence): + _fields = [ + ('algorithm', AnyAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + _oid_pair = ('algorithm', 'parameters') + _oid_specs = {} + + def _setup(self): + Sequence._setup(self) + specs = self.__class__._oid_specs + for other_cls in (EncryptionAlgorithm, SignedDigestAlgorithm): + for oid, spec in other_cls._oid_specs.items(): + specs[oid] = spec diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/cms.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/cms.py new file mode 100644 index 00000000..c395b227 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/cms.py @@ -0,0 +1,1003 @@ +# coding: utf-8 + +""" +ASN.1 type classes for cryptographic message syntax (CMS). Structures are also +compatible with PKCS#7. Exports the following items: + + - AuthenticatedData() + - AuthEnvelopedData() + - CompressedData() + - ContentInfo() + - DigestedData() + - EncryptedData() + - EnvelopedData() + - SignedAndEnvelopedData() + - SignedData() + +Other type classes are defined that help compose the types listed above. + +Most CMS structures in the wild are formatted as ContentInfo encapsulating one of the other types. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +try: + import zlib +except (ImportError): + zlib = None + +from .algos import ( + _ForceNullParameters, + DigestAlgorithm, + EncryptionAlgorithm, + EncryptionAlgorithmId, + HmacAlgorithm, + KdfAlgorithm, + RSAESOAEPParams, + SignedDigestAlgorithm, +) +from .core import ( + Any, + BitString, + Choice, + Enumerated, + GeneralizedTime, + Integer, + ObjectIdentifier, + OctetBitString, + OctetString, + ParsableOctetString, + Sequence, + SequenceOf, + SetOf, + UTCTime, + UTF8String, +) +from .crl import CertificateList +from .keys import PublicKeyInfo +from .ocsp import OCSPResponse +from .x509 import Attributes, Certificate, Extensions, GeneralName, GeneralNames, Name + + +# These structures are taken from +# ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-6.asc + +class ExtendedCertificateInfo(Sequence): + _fields = [ + ('version', Integer), + ('certificate', Certificate), + ('attributes', Attributes), + ] + + +class ExtendedCertificate(Sequence): + _fields = [ + ('extended_certificate_info', ExtendedCertificateInfo), + ('signature_algorithm', SignedDigestAlgorithm), + ('signature', OctetBitString), + ] + + +# These structures are taken from https://tools.ietf.org/html/rfc5652, +# https://tools.ietf.org/html/rfc5083, http://tools.ietf.org/html/rfc2315, +# https://tools.ietf.org/html/rfc5940, https://tools.ietf.org/html/rfc3274, +# https://tools.ietf.org/html/rfc3281 + + +class CMSVersion(Integer): + _map = { + 0: 'v0', + 1: 'v1', + 2: 'v2', + 3: 'v3', + 4: 'v4', + 5: 'v5', + } + + +class CMSAttributeType(ObjectIdentifier): + _map = { + '1.2.840.113549.1.9.3': 'content_type', + '1.2.840.113549.1.9.4': 'message_digest', + '1.2.840.113549.1.9.5': 'signing_time', + '1.2.840.113549.1.9.6': 'counter_signature', + # https://datatracker.ietf.org/doc/html/rfc2633#section-2.5.2 + '1.2.840.113549.1.9.15': 'smime_capabilities', + # https://tools.ietf.org/html/rfc2633#page-26 + '1.2.840.113549.1.9.16.2.11': 'encrypt_key_pref', + # https://tools.ietf.org/html/rfc3161#page-20 + '1.2.840.113549.1.9.16.2.14': 'signature_time_stamp_token', + # https://tools.ietf.org/html/rfc6211#page-5 + '1.2.840.113549.1.9.52': 'cms_algorithm_protection', + # https://docs.microsoft.com/en-us/previous-versions/hh968145(v%3Dvs.85) + '1.3.6.1.4.1.311.2.4.1': 'microsoft_nested_signature', + # Some places refer to this as SPC_RFC3161_OBJID, others szOID_RFC3161_counterSign. + # https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/ns-wincrypt-crypt_algorithm_identifier + # refers to szOID_RFC3161_counterSign as "1.2.840.113549.1.9.16.1.4", + # but that OID is also called szOID_TIMESTAMP_TOKEN. Because of there being + # no canonical source for this OID, we give it our own name + '1.3.6.1.4.1.311.3.3.1': 'microsoft_time_stamp_token', + } + + +class Time(Choice): + _alternatives = [ + ('utc_time', UTCTime), + ('generalized_time', GeneralizedTime), + ] + + +class ContentType(ObjectIdentifier): + _map = { + '1.2.840.113549.1.7.1': 'data', + '1.2.840.113549.1.7.2': 'signed_data', + '1.2.840.113549.1.7.3': 'enveloped_data', + '1.2.840.113549.1.7.4': 'signed_and_enveloped_data', + '1.2.840.113549.1.7.5': 'digested_data', + '1.2.840.113549.1.7.6': 'encrypted_data', + '1.2.840.113549.1.9.16.1.2': 'authenticated_data', + '1.2.840.113549.1.9.16.1.9': 'compressed_data', + '1.2.840.113549.1.9.16.1.23': 'authenticated_enveloped_data', + } + + +class CMSAlgorithmProtection(Sequence): + _fields = [ + ('digest_algorithm', DigestAlgorithm), + ('signature_algorithm', SignedDigestAlgorithm, {'implicit': 1, 'optional': True}), + ('mac_algorithm', HmacAlgorithm, {'implicit': 2, 'optional': True}), + ] + + +class SetOfContentType(SetOf): + _child_spec = ContentType + + +class SetOfOctetString(SetOf): + _child_spec = OctetString + + +class SetOfTime(SetOf): + _child_spec = Time + + +class SetOfAny(SetOf): + _child_spec = Any + + +class SetOfCMSAlgorithmProtection(SetOf): + _child_spec = CMSAlgorithmProtection + + +class CMSAttribute(Sequence): + _fields = [ + ('type', CMSAttributeType), + ('values', None), + ] + + _oid_specs = {} + + def _values_spec(self): + return self._oid_specs.get(self['type'].native, SetOfAny) + + _spec_callbacks = { + 'values': _values_spec + } + + +class CMSAttributes(SetOf): + _child_spec = CMSAttribute + + +class IssuerSerial(Sequence): + _fields = [ + ('issuer', GeneralNames), + ('serial', Integer), + ('issuer_uid', OctetBitString, {'optional': True}), + ] + + +class AttCertVersion(Integer): + _map = { + 0: 'v1', + 1: 'v2', + } + + +class AttCertSubject(Choice): + _alternatives = [ + ('base_certificate_id', IssuerSerial, {'explicit': 0}), + ('subject_name', GeneralNames, {'explicit': 1}), + ] + + +class AttCertValidityPeriod(Sequence): + _fields = [ + ('not_before_time', GeneralizedTime), + ('not_after_time', GeneralizedTime), + ] + + +class AttributeCertificateInfoV1(Sequence): + _fields = [ + ('version', AttCertVersion, {'default': 'v1'}), + ('subject', AttCertSubject), + ('issuer', GeneralNames), + ('signature', SignedDigestAlgorithm), + ('serial_number', Integer), + ('att_cert_validity_period', AttCertValidityPeriod), + ('attributes', Attributes), + ('issuer_unique_id', OctetBitString, {'optional': True}), + ('extensions', Extensions, {'optional': True}), + ] + + +class AttributeCertificateV1(Sequence): + _fields = [ + ('ac_info', AttributeCertificateInfoV1), + ('signature_algorithm', SignedDigestAlgorithm), + ('signature', OctetBitString), + ] + + +class DigestedObjectType(Enumerated): + _map = { + 0: 'public_key', + 1: 'public_key_cert', + 2: 'other_objy_types', + } + + +class ObjectDigestInfo(Sequence): + _fields = [ + ('digested_object_type', DigestedObjectType), + ('other_object_type_id', ObjectIdentifier, {'optional': True}), + ('digest_algorithm', DigestAlgorithm), + ('object_digest', OctetBitString), + ] + + +class Holder(Sequence): + _fields = [ + ('base_certificate_id', IssuerSerial, {'implicit': 0, 'optional': True}), + ('entity_name', GeneralNames, {'implicit': 1, 'optional': True}), + ('object_digest_info', ObjectDigestInfo, {'implicit': 2, 'optional': True}), + ] + + +class V2Form(Sequence): + _fields = [ + ('issuer_name', GeneralNames, {'optional': True}), + ('base_certificate_id', IssuerSerial, {'explicit': 0, 'optional': True}), + ('object_digest_info', ObjectDigestInfo, {'explicit': 1, 'optional': True}), + ] + + +class AttCertIssuer(Choice): + _alternatives = [ + ('v1_form', GeneralNames), + ('v2_form', V2Form, {'implicit': 0}), + ] + + +class IetfAttrValue(Choice): + _alternatives = [ + ('octets', OctetString), + ('oid', ObjectIdentifier), + ('string', UTF8String), + ] + + +class IetfAttrValues(SequenceOf): + _child_spec = IetfAttrValue + + +class IetfAttrSyntax(Sequence): + _fields = [ + ('policy_authority', GeneralNames, {'implicit': 0, 'optional': True}), + ('values', IetfAttrValues), + ] + + +class SetOfIetfAttrSyntax(SetOf): + _child_spec = IetfAttrSyntax + + +class SvceAuthInfo(Sequence): + _fields = [ + ('service', GeneralName), + ('ident', GeneralName), + ('auth_info', OctetString, {'optional': True}), + ] + + +class SetOfSvceAuthInfo(SetOf): + _child_spec = SvceAuthInfo + + +class RoleSyntax(Sequence): + _fields = [ + ('role_authority', GeneralNames, {'implicit': 0, 'optional': True}), + ('role_name', GeneralName, {'explicit': 1}), + ] + + +class SetOfRoleSyntax(SetOf): + _child_spec = RoleSyntax + + +class ClassList(BitString): + _map = { + 0: 'unmarked', + 1: 'unclassified', + 2: 'restricted', + 3: 'confidential', + 4: 'secret', + 5: 'top_secret', + } + + +class SecurityCategory(Sequence): + _fields = [ + ('type', ObjectIdentifier, {'implicit': 0}), + ('value', Any, {'explicit': 1}), + ] + + +class SetOfSecurityCategory(SetOf): + _child_spec = SecurityCategory + + +class Clearance(Sequence): + _fields = [ + ('policy_id', ObjectIdentifier), + ('class_list', ClassList, {'default': set(['unclassified'])}), + ('security_categories', SetOfSecurityCategory, {'optional': True}), + ] + + +class SetOfClearance(SetOf): + _child_spec = Clearance + + +class BigTime(Sequence): + _fields = [ + ('major', Integer), + ('fractional_seconds', Integer), + ('sign', Integer, {'optional': True}), + ] + + +class LeapData(Sequence): + _fields = [ + ('leap_time', BigTime), + ('action', Integer), + ] + + +class SetOfLeapData(SetOf): + _child_spec = LeapData + + +class TimingMetrics(Sequence): + _fields = [ + ('ntp_time', BigTime), + ('offset', BigTime), + ('delay', BigTime), + ('expiration', BigTime), + ('leap_event', SetOfLeapData, {'optional': True}), + ] + + +class SetOfTimingMetrics(SetOf): + _child_spec = TimingMetrics + + +class TimingPolicy(Sequence): + _fields = [ + ('policy_id', SequenceOf, {'spec': ObjectIdentifier}), + ('max_offset', BigTime, {'explicit': 0, 'optional': True}), + ('max_delay', BigTime, {'explicit': 1, 'optional': True}), + ] + + +class SetOfTimingPolicy(SetOf): + _child_spec = TimingPolicy + + +class AttCertAttributeType(ObjectIdentifier): + _map = { + '1.3.6.1.5.5.7.10.1': 'authentication_info', + '1.3.6.1.5.5.7.10.2': 'access_identity', + '1.3.6.1.5.5.7.10.3': 'charging_identity', + '1.3.6.1.5.5.7.10.4': 'group', + '2.5.4.72': 'role', + '2.5.4.55': 'clearance', + '1.3.6.1.4.1.601.10.4.1': 'timing_metrics', + '1.3.6.1.4.1.601.10.4.2': 'timing_policy', + } + + +class AttCertAttribute(Sequence): + _fields = [ + ('type', AttCertAttributeType), + ('values', None), + ] + + _oid_specs = { + 'authentication_info': SetOfSvceAuthInfo, + 'access_identity': SetOfSvceAuthInfo, + 'charging_identity': SetOfIetfAttrSyntax, + 'group': SetOfIetfAttrSyntax, + 'role': SetOfRoleSyntax, + 'clearance': SetOfClearance, + 'timing_metrics': SetOfTimingMetrics, + 'timing_policy': SetOfTimingPolicy, + } + + def _values_spec(self): + return self._oid_specs.get(self['type'].native, SetOfAny) + + _spec_callbacks = { + 'values': _values_spec + } + + +class AttCertAttributes(SequenceOf): + _child_spec = AttCertAttribute + + +class AttributeCertificateInfoV2(Sequence): + _fields = [ + ('version', AttCertVersion), + ('holder', Holder), + ('issuer', AttCertIssuer), + ('signature', SignedDigestAlgorithm), + ('serial_number', Integer), + ('att_cert_validity_period', AttCertValidityPeriod), + ('attributes', AttCertAttributes), + ('issuer_unique_id', OctetBitString, {'optional': True}), + ('extensions', Extensions, {'optional': True}), + ] + + +class AttributeCertificateV2(Sequence): + # Handle the situation where a V2 cert is encoded as V1 + _bad_tag = 1 + + _fields = [ + ('ac_info', AttributeCertificateInfoV2), + ('signature_algorithm', SignedDigestAlgorithm), + ('signature', OctetBitString), + ] + + +class OtherCertificateFormat(Sequence): + _fields = [ + ('other_cert_format', ObjectIdentifier), + ('other_cert', Any), + ] + + +class CertificateChoices(Choice): + _alternatives = [ + ('certificate', Certificate), + ('extended_certificate', ExtendedCertificate, {'implicit': 0}), + ('v1_attr_cert', AttributeCertificateV1, {'implicit': 1}), + ('v2_attr_cert', AttributeCertificateV2, {'implicit': 2}), + ('other', OtherCertificateFormat, {'implicit': 3}), + ] + + def validate(self, class_, tag, contents): + """ + Ensures that the class and tag specified exist as an alternative. This + custom version fixes parsing broken encodings there a V2 attribute + # certificate is encoded as a V1 + + :param class_: + The integer class_ from the encoded value header + + :param tag: + The integer tag from the encoded value header + + :param contents: + A byte string of the contents of the value - used when the object + is explicitly tagged + + :raises: + ValueError - when value is not a valid alternative + """ + + super(CertificateChoices, self).validate(class_, tag, contents) + if self._choice == 2: + if AttCertVersion.load(Sequence.load(contents)[0].dump()).native == 'v2': + self._choice = 3 + + +class CertificateSet(SetOf): + _child_spec = CertificateChoices + + +class ContentInfo(Sequence): + _fields = [ + ('content_type', ContentType), + ('content', Any, {'explicit': 0, 'optional': True}), + ] + + _oid_pair = ('content_type', 'content') + _oid_specs = {} + + +class SetOfContentInfo(SetOf): + _child_spec = ContentInfo + + +class EncapsulatedContentInfo(Sequence): + _fields = [ + ('content_type', ContentType), + ('content', ParsableOctetString, {'explicit': 0, 'optional': True}), + ] + + _oid_pair = ('content_type', 'content') + _oid_specs = {} + + +class IssuerAndSerialNumber(Sequence): + _fields = [ + ('issuer', Name), + ('serial_number', Integer), + ] + + +class SignerIdentifier(Choice): + _alternatives = [ + ('issuer_and_serial_number', IssuerAndSerialNumber), + ('subject_key_identifier', OctetString, {'implicit': 0}), + ] + + +class DigestAlgorithms(SetOf): + _child_spec = DigestAlgorithm + + +class CertificateRevocationLists(SetOf): + _child_spec = CertificateList + + +class SCVPReqRes(Sequence): + _fields = [ + ('request', ContentInfo, {'explicit': 0, 'optional': True}), + ('response', ContentInfo), + ] + + +class OtherRevInfoFormatId(ObjectIdentifier): + _map = { + '1.3.6.1.5.5.7.16.2': 'ocsp_response', + '1.3.6.1.5.5.7.16.4': 'scvp', + } + + +class OtherRevocationInfoFormat(Sequence): + _fields = [ + ('other_rev_info_format', OtherRevInfoFormatId), + ('other_rev_info', Any), + ] + + _oid_pair = ('other_rev_info_format', 'other_rev_info') + _oid_specs = { + 'ocsp_response': OCSPResponse, + 'scvp': SCVPReqRes, + } + + +class RevocationInfoChoice(Choice): + _alternatives = [ + ('crl', CertificateList), + ('other', OtherRevocationInfoFormat, {'implicit': 1}), + ] + + +class RevocationInfoChoices(SetOf): + _child_spec = RevocationInfoChoice + + +class SignerInfo(Sequence): + _fields = [ + ('version', CMSVersion), + ('sid', SignerIdentifier), + ('digest_algorithm', DigestAlgorithm), + ('signed_attrs', CMSAttributes, {'implicit': 0, 'optional': True}), + ('signature_algorithm', SignedDigestAlgorithm), + ('signature', OctetString), + ('unsigned_attrs', CMSAttributes, {'implicit': 1, 'optional': True}), + ] + + +class SignerInfos(SetOf): + _child_spec = SignerInfo + + +class SignedData(Sequence): + _fields = [ + ('version', CMSVersion), + ('digest_algorithms', DigestAlgorithms), + ('encap_content_info', None), + ('certificates', CertificateSet, {'implicit': 0, 'optional': True}), + ('crls', RevocationInfoChoices, {'implicit': 1, 'optional': True}), + ('signer_infos', SignerInfos), + ] + + def _encap_content_info_spec(self): + # If the encap_content_info is version v1, then this could be a PKCS#7 + # structure, or a CMS structure. CMS wraps the encoded value in an + # Octet String tag. + + # If the version is greater than 1, it is definite CMS + if self['version'].native != 'v1': + return EncapsulatedContentInfo + + # Otherwise, the ContentInfo spec from PKCS#7 will be compatible with + # CMS v1 (which only allows Data, an Octet String) and PKCS#7, which + # allows Any + return ContentInfo + + _spec_callbacks = { + 'encap_content_info': _encap_content_info_spec + } + + +class OriginatorInfo(Sequence): + _fields = [ + ('certs', CertificateSet, {'implicit': 0, 'optional': True}), + ('crls', RevocationInfoChoices, {'implicit': 1, 'optional': True}), + ] + + +class RecipientIdentifier(Choice): + _alternatives = [ + ('issuer_and_serial_number', IssuerAndSerialNumber), + ('subject_key_identifier', OctetString, {'implicit': 0}), + ] + + +class KeyEncryptionAlgorithmId(ObjectIdentifier): + _map = { + '1.2.840.113549.1.1.1': 'rsaes_pkcs1v15', + '1.2.840.113549.1.1.7': 'rsaes_oaep', + '2.16.840.1.101.3.4.1.5': 'aes128_wrap', + '2.16.840.1.101.3.4.1.8': 'aes128_wrap_pad', + '2.16.840.1.101.3.4.1.25': 'aes192_wrap', + '2.16.840.1.101.3.4.1.28': 'aes192_wrap_pad', + '2.16.840.1.101.3.4.1.45': 'aes256_wrap', + '2.16.840.1.101.3.4.1.48': 'aes256_wrap_pad', + } + + _reverse_map = { + 'rsa': '1.2.840.113549.1.1.1', + 'rsaes_pkcs1v15': '1.2.840.113549.1.1.1', + 'rsaes_oaep': '1.2.840.113549.1.1.7', + 'aes128_wrap': '2.16.840.1.101.3.4.1.5', + 'aes128_wrap_pad': '2.16.840.1.101.3.4.1.8', + 'aes192_wrap': '2.16.840.1.101.3.4.1.25', + 'aes192_wrap_pad': '2.16.840.1.101.3.4.1.28', + 'aes256_wrap': '2.16.840.1.101.3.4.1.45', + 'aes256_wrap_pad': '2.16.840.1.101.3.4.1.48', + } + + +class KeyEncryptionAlgorithm(_ForceNullParameters, Sequence): + _fields = [ + ('algorithm', KeyEncryptionAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + _oid_pair = ('algorithm', 'parameters') + _oid_specs = { + 'rsaes_oaep': RSAESOAEPParams, + } + + +class KeyTransRecipientInfo(Sequence): + _fields = [ + ('version', CMSVersion), + ('rid', RecipientIdentifier), + ('key_encryption_algorithm', KeyEncryptionAlgorithm), + ('encrypted_key', OctetString), + ] + + +class OriginatorIdentifierOrKey(Choice): + _alternatives = [ + ('issuer_and_serial_number', IssuerAndSerialNumber), + ('subject_key_identifier', OctetString, {'implicit': 0}), + ('originator_key', PublicKeyInfo, {'implicit': 1}), + ] + + +class OtherKeyAttribute(Sequence): + _fields = [ + ('key_attr_id', ObjectIdentifier), + ('key_attr', Any), + ] + + +class RecipientKeyIdentifier(Sequence): + _fields = [ + ('subject_key_identifier', OctetString), + ('date', GeneralizedTime, {'optional': True}), + ('other', OtherKeyAttribute, {'optional': True}), + ] + + +class KeyAgreementRecipientIdentifier(Choice): + _alternatives = [ + ('issuer_and_serial_number', IssuerAndSerialNumber), + ('r_key_id', RecipientKeyIdentifier, {'implicit': 0}), + ] + + +class RecipientEncryptedKey(Sequence): + _fields = [ + ('rid', KeyAgreementRecipientIdentifier), + ('encrypted_key', OctetString), + ] + + +class RecipientEncryptedKeys(SequenceOf): + _child_spec = RecipientEncryptedKey + + +class KeyAgreeRecipientInfo(Sequence): + _fields = [ + ('version', CMSVersion), + ('originator', OriginatorIdentifierOrKey, {'explicit': 0}), + ('ukm', OctetString, {'explicit': 1, 'optional': True}), + ('key_encryption_algorithm', KeyEncryptionAlgorithm), + ('recipient_encrypted_keys', RecipientEncryptedKeys), + ] + + +class KEKIdentifier(Sequence): + _fields = [ + ('key_identifier', OctetString), + ('date', GeneralizedTime, {'optional': True}), + ('other', OtherKeyAttribute, {'optional': True}), + ] + + +class KEKRecipientInfo(Sequence): + _fields = [ + ('version', CMSVersion), + ('kekid', KEKIdentifier), + ('key_encryption_algorithm', KeyEncryptionAlgorithm), + ('encrypted_key', OctetString), + ] + + +class PasswordRecipientInfo(Sequence): + _fields = [ + ('version', CMSVersion), + ('key_derivation_algorithm', KdfAlgorithm, {'implicit': 0, 'optional': True}), + ('key_encryption_algorithm', KeyEncryptionAlgorithm), + ('encrypted_key', OctetString), + ] + + +class OtherRecipientInfo(Sequence): + _fields = [ + ('ori_type', ObjectIdentifier), + ('ori_value', Any), + ] + + +class RecipientInfo(Choice): + _alternatives = [ + ('ktri', KeyTransRecipientInfo), + ('kari', KeyAgreeRecipientInfo, {'implicit': 1}), + ('kekri', KEKRecipientInfo, {'implicit': 2}), + ('pwri', PasswordRecipientInfo, {'implicit': 3}), + ('ori', OtherRecipientInfo, {'implicit': 4}), + ] + + +class RecipientInfos(SetOf): + _child_spec = RecipientInfo + + +class EncryptedContentInfo(Sequence): + _fields = [ + ('content_type', ContentType), + ('content_encryption_algorithm', EncryptionAlgorithm), + ('encrypted_content', OctetString, {'implicit': 0, 'optional': True}), + ] + + +class EnvelopedData(Sequence): + _fields = [ + ('version', CMSVersion), + ('originator_info', OriginatorInfo, {'implicit': 0, 'optional': True}), + ('recipient_infos', RecipientInfos), + ('encrypted_content_info', EncryptedContentInfo), + ('unprotected_attrs', CMSAttributes, {'implicit': 1, 'optional': True}), + ] + + +class SignedAndEnvelopedData(Sequence): + _fields = [ + ('version', CMSVersion), + ('recipient_infos', RecipientInfos), + ('digest_algorithms', DigestAlgorithms), + ('encrypted_content_info', EncryptedContentInfo), + ('certificates', CertificateSet, {'implicit': 0, 'optional': True}), + ('crls', CertificateRevocationLists, {'implicit': 1, 'optional': True}), + ('signer_infos', SignerInfos), + ] + + +class DigestedData(Sequence): + _fields = [ + ('version', CMSVersion), + ('digest_algorithm', DigestAlgorithm), + ('encap_content_info', None), + ('digest', OctetString), + ] + + def _encap_content_info_spec(self): + # If the encap_content_info is version v1, then this could be a PKCS#7 + # structure, or a CMS structure. CMS wraps the encoded value in an + # Octet String tag. + + # If the version is greater than 1, it is definite CMS + if self['version'].native != 'v1': + return EncapsulatedContentInfo + + # Otherwise, the ContentInfo spec from PKCS#7 will be compatible with + # CMS v1 (which only allows Data, an Octet String) and PKCS#7, which + # allows Any + return ContentInfo + + _spec_callbacks = { + 'encap_content_info': _encap_content_info_spec + } + + +class EncryptedData(Sequence): + _fields = [ + ('version', CMSVersion), + ('encrypted_content_info', EncryptedContentInfo), + ('unprotected_attrs', CMSAttributes, {'implicit': 1, 'optional': True}), + ] + + +class AuthenticatedData(Sequence): + _fields = [ + ('version', CMSVersion), + ('originator_info', OriginatorInfo, {'implicit': 0, 'optional': True}), + ('recipient_infos', RecipientInfos), + ('mac_algorithm', HmacAlgorithm), + ('digest_algorithm', DigestAlgorithm, {'implicit': 1, 'optional': True}), + # This does not require the _spec_callbacks approach of SignedData and + # DigestedData since AuthenticatedData was not part of PKCS#7 + ('encap_content_info', EncapsulatedContentInfo), + ('auth_attrs', CMSAttributes, {'implicit': 2, 'optional': True}), + ('mac', OctetString), + ('unauth_attrs', CMSAttributes, {'implicit': 3, 'optional': True}), + ] + + +class AuthEnvelopedData(Sequence): + _fields = [ + ('version', CMSVersion), + ('originator_info', OriginatorInfo, {'implicit': 0, 'optional': True}), + ('recipient_infos', RecipientInfos), + ('auth_encrypted_content_info', EncryptedContentInfo), + ('auth_attrs', CMSAttributes, {'implicit': 1, 'optional': True}), + ('mac', OctetString), + ('unauth_attrs', CMSAttributes, {'implicit': 2, 'optional': True}), + ] + + +class CompressionAlgorithmId(ObjectIdentifier): + _map = { + '1.2.840.113549.1.9.16.3.8': 'zlib', + } + + +class CompressionAlgorithm(Sequence): + _fields = [ + ('algorithm', CompressionAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + +class CompressedData(Sequence): + _fields = [ + ('version', CMSVersion), + ('compression_algorithm', CompressionAlgorithm), + ('encap_content_info', EncapsulatedContentInfo), + ] + + _decompressed = None + + @property + def decompressed(self): + if self._decompressed is None: + if zlib is None: + raise SystemError('The zlib module is not available') + self._decompressed = zlib.decompress(self['encap_content_info']['content'].native) + return self._decompressed + + +class RecipientKeyIdentifier(Sequence): + _fields = [ + ('subjectKeyIdentifier', OctetString), + ('date', GeneralizedTime, {'optional': True}), + ('other', OtherKeyAttribute, {'optional': True}), + ] + + +class SMIMEEncryptionKeyPreference(Choice): + _alternatives = [ + ('issuer_and_serial_number', IssuerAndSerialNumber, {'implicit': 0}), + ('recipientKeyId', RecipientKeyIdentifier, {'implicit': 1}), + ('subjectAltKeyIdentifier', PublicKeyInfo, {'implicit': 2}), + ] + + +class SMIMEEncryptionKeyPreferences(SetOf): + _child_spec = SMIMEEncryptionKeyPreference + + +class SMIMECapabilityIdentifier(Sequence): + _fields = [ + ('capability_id', EncryptionAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + +class SMIMECapabilites(SequenceOf): + _child_spec = SMIMECapabilityIdentifier + + +class SetOfSMIMECapabilites(SetOf): + _child_spec = SMIMECapabilites + + +ContentInfo._oid_specs = { + 'data': OctetString, + 'signed_data': SignedData, + 'enveloped_data': EnvelopedData, + 'signed_and_enveloped_data': SignedAndEnvelopedData, + 'digested_data': DigestedData, + 'encrypted_data': EncryptedData, + 'authenticated_data': AuthenticatedData, + 'compressed_data': CompressedData, + 'authenticated_enveloped_data': AuthEnvelopedData, +} + + +EncapsulatedContentInfo._oid_specs = { + 'signed_data': SignedData, + 'enveloped_data': EnvelopedData, + 'signed_and_enveloped_data': SignedAndEnvelopedData, + 'digested_data': DigestedData, + 'encrypted_data': EncryptedData, + 'authenticated_data': AuthenticatedData, + 'compressed_data': CompressedData, + 'authenticated_enveloped_data': AuthEnvelopedData, +} + + +CMSAttribute._oid_specs = { + 'content_type': SetOfContentType, + 'message_digest': SetOfOctetString, + 'signing_time': SetOfTime, + 'counter_signature': SignerInfos, + 'signature_time_stamp_token': SetOfContentInfo, + 'cms_algorithm_protection': SetOfCMSAlgorithmProtection, + 'microsoft_nested_signature': SetOfContentInfo, + 'microsoft_time_stamp_token': SetOfContentInfo, + 'encrypt_key_pref': SMIMEEncryptionKeyPreferences, + 'smime_capabilities': SetOfSMIMECapabilites, +} diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/core.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/core.py new file mode 100644 index 00000000..364c6b5c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/core.py @@ -0,0 +1,5676 @@ +# coding: utf-8 + +""" +ASN.1 type classes for universal types. Exports the following items: + + - load() + - Any() + - Asn1Value() + - BitString() + - BMPString() + - Boolean() + - CharacterString() + - Choice() + - EmbeddedPdv() + - Enumerated() + - GeneralizedTime() + - GeneralString() + - GraphicString() + - IA5String() + - InstanceOf() + - Integer() + - IntegerBitString() + - IntegerOctetString() + - Null() + - NumericString() + - ObjectDescriptor() + - ObjectIdentifier() + - OctetBitString() + - OctetString() + - PrintableString() + - Real() + - RelativeOid() + - Sequence() + - SequenceOf() + - Set() + - SetOf() + - TeletexString() + - UniversalString() + - UTCTime() + - UTF8String() + - VideotexString() + - VisibleString() + - VOID + - Void() + +Other type classes are defined that help compose the types listed above. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +from datetime import datetime, timedelta +from fractions import Fraction +import binascii +import copy +import math +import re +import sys + +from . import _teletex_codec +from ._errors import unwrap +from ._ordereddict import OrderedDict +from ._types import type_name, str_cls, byte_cls, int_types, chr_cls +from .parser import _parse, _dump_header +from .util import int_to_bytes, int_from_bytes, timezone, extended_datetime, create_timezone, utc_with_dst + +if sys.version_info <= (3,): + from cStringIO import StringIO as BytesIO + + range = xrange # noqa + _PY2 = True + +else: + from io import BytesIO + + _PY2 = False + + +_teletex_codec.register() + + +CLASS_NUM_TO_NAME_MAP = { + 0: 'universal', + 1: 'application', + 2: 'context', + 3: 'private', +} + +CLASS_NAME_TO_NUM_MAP = { + 'universal': 0, + 'application': 1, + 'context': 2, + 'private': 3, + 0: 0, + 1: 1, + 2: 2, + 3: 3, +} + +METHOD_NUM_TO_NAME_MAP = { + 0: 'primitive', + 1: 'constructed', +} + + +_OID_RE = re.compile(r'^\d+(\.\d+)*$') + + +# A global tracker to ensure that _setup() is called for every class, even +# if is has been called for a parent class. This allows different _fields +# definitions for child classes. Without such a construct, the child classes +# would just see the parent class attributes and would use them. +_SETUP_CLASSES = {} + + +def load(encoded_data, strict=False): + """ + Loads a BER/DER-encoded byte string and construct a universal object based + on the tag value: + + - 1: Boolean + - 2: Integer + - 3: BitString + - 4: OctetString + - 5: Null + - 6: ObjectIdentifier + - 7: ObjectDescriptor + - 8: InstanceOf + - 9: Real + - 10: Enumerated + - 11: EmbeddedPdv + - 12: UTF8String + - 13: RelativeOid + - 16: Sequence, + - 17: Set + - 18: NumericString + - 19: PrintableString + - 20: TeletexString + - 21: VideotexString + - 22: IA5String + - 23: UTCTime + - 24: GeneralizedTime + - 25: GraphicString + - 26: VisibleString + - 27: GeneralString + - 28: UniversalString + - 29: CharacterString + - 30: BMPString + + :param encoded_data: + A byte string of BER or DER-encoded data + + :param strict: + A boolean indicating if trailing data should be forbidden - if so, a + ValueError will be raised when trailing data exists + + :raises: + ValueError - when strict is True and trailing data is present + ValueError - when the encoded value tag a tag other than listed above + ValueError - when the ASN.1 header length is longer than the data + TypeError - when encoded_data is not a byte string + + :return: + An instance of the one of the universal classes + """ + + return Asn1Value.load(encoded_data, strict=strict) + + +class Asn1Value(object): + """ + The basis of all ASN.1 values + """ + + # The integer 0 for primitive, 1 for constructed + method = None + + # An integer 0 through 3 - see CLASS_NUM_TO_NAME_MAP for value + class_ = None + + # An integer 1 or greater indicating the tag number + tag = None + + # An alternate tag allowed for this type - used for handling broken + # structures where a string value is encoded using an incorrect tag + _bad_tag = None + + # If the value has been implicitly tagged + implicit = False + + # If explicitly tagged, a tuple of 2-element tuples containing the + # class int and tag int, from innermost to outermost + explicit = None + + # The BER/DER header bytes + _header = None + + # Raw encoded value bytes not including class, method, tag, length header + contents = None + + # The BER/DER trailer bytes + _trailer = b'' + + # The native python representation of the value - this is not used by + # some classes since they utilize _bytes or _unicode + _native = None + + @classmethod + def load(cls, encoded_data, strict=False, **kwargs): + """ + Loads a BER/DER-encoded byte string using the current class as the spec + + :param encoded_data: + A byte string of BER or DER-encoded data + + :param strict: + A boolean indicating if trailing data should be forbidden - if so, a + ValueError will be raised when trailing data exists + + :return: + An instance of the current class + """ + + if not isinstance(encoded_data, byte_cls): + raise TypeError('encoded_data must be a byte string, not %s' % type_name(encoded_data)) + + spec = None + if cls.tag is not None: + spec = cls + + value, _ = _parse_build(encoded_data, spec=spec, spec_params=kwargs, strict=strict) + return value + + def __init__(self, explicit=None, implicit=None, no_explicit=False, tag_type=None, class_=None, tag=None, + optional=None, default=None, contents=None, method=None): + """ + The optional parameter is not used, but rather included so we don't + have to delete it from the parameter dictionary when passing as keyword + args + + :param explicit: + An int tag number for explicit tagging, or a 2-element tuple of + class and tag. + + :param implicit: + An int tag number for implicit tagging, or a 2-element tuple of + class and tag. + + :param no_explicit: + If explicit tagging info should be removed from this instance. + Used internally to allow contructing the underlying value that + has been wrapped in an explicit tag. + + :param tag_type: + None for normal values, or one of "implicit", "explicit" for tagged + values. Deprecated in favor of explicit and implicit params. + + :param class_: + The class for the value - defaults to "universal" if tag_type is + None, otherwise defaults to "context". Valid values include: + - "universal" + - "application" + - "context" + - "private" + Deprecated in favor of explicit and implicit params. + + :param tag: + The integer tag to override - usually this is used with tag_type or + class_. Deprecated in favor of explicit and implicit params. + + :param optional: + Dummy parameter that allows "optional" key in spec param dicts + + :param default: + The default value to use if the value is currently None + + :param contents: + A byte string of the encoded contents of the value + + :param method: + The method for the value - no default value since this is + normally set on a class. Valid values include: + - "primitive" or 0 + - "constructed" or 1 + + :raises: + ValueError - when implicit, explicit, tag_type, class_ or tag are invalid values + """ + + try: + if self.__class__ not in _SETUP_CLASSES: + cls = self.__class__ + # Allow explicit to be specified as a simple 2-element tuple + # instead of requiring the user make a nested tuple + if cls.explicit is not None and isinstance(cls.explicit[0], int_types): + cls.explicit = (cls.explicit, ) + if hasattr(cls, '_setup'): + self._setup() + _SETUP_CLASSES[cls] = True + + # Normalize tagging values + if explicit is not None: + if isinstance(explicit, int_types): + if class_ is None: + class_ = 'context' + explicit = (class_, explicit) + # Prevent both explicit and tag_type == 'explicit' + if tag_type == 'explicit': + tag_type = None + tag = None + + if implicit is not None: + if isinstance(implicit, int_types): + if class_ is None: + class_ = 'context' + implicit = (class_, implicit) + # Prevent both implicit and tag_type == 'implicit' + if tag_type == 'implicit': + tag_type = None + tag = None + + # Convert old tag_type API to explicit/implicit params + if tag_type is not None: + if class_ is None: + class_ = 'context' + if tag_type == 'explicit': + explicit = (class_, tag) + elif tag_type == 'implicit': + implicit = (class_, tag) + else: + raise ValueError(unwrap( + ''' + tag_type must be one of "implicit", "explicit", not %s + ''', + repr(tag_type) + )) + + if explicit is not None: + # Ensure we have a tuple of 2-element tuples + if len(explicit) == 2 and isinstance(explicit[1], int_types): + explicit = (explicit, ) + for class_, tag in explicit: + invalid_class = None + if isinstance(class_, int_types): + if class_ not in CLASS_NUM_TO_NAME_MAP: + invalid_class = class_ + else: + if class_ not in CLASS_NAME_TO_NUM_MAP: + invalid_class = class_ + class_ = CLASS_NAME_TO_NUM_MAP[class_] + if invalid_class is not None: + raise ValueError(unwrap( + ''' + explicit class must be one of "universal", "application", + "context", "private", not %s + ''', + repr(invalid_class) + )) + if tag is not None: + if not isinstance(tag, int_types): + raise TypeError(unwrap( + ''' + explicit tag must be an integer, not %s + ''', + type_name(tag) + )) + if self.explicit is None: + self.explicit = ((class_, tag), ) + else: + self.explicit = self.explicit + ((class_, tag), ) + + elif implicit is not None: + class_, tag = implicit + if class_ not in CLASS_NAME_TO_NUM_MAP: + raise ValueError(unwrap( + ''' + implicit class must be one of "universal", "application", + "context", "private", not %s + ''', + repr(class_) + )) + if tag is not None: + if not isinstance(tag, int_types): + raise TypeError(unwrap( + ''' + implicit tag must be an integer, not %s + ''', + type_name(tag) + )) + self.class_ = CLASS_NAME_TO_NUM_MAP[class_] + self.tag = tag + self.implicit = True + else: + if class_ is not None: + if class_ not in CLASS_NAME_TO_NUM_MAP: + raise ValueError(unwrap( + ''' + class_ must be one of "universal", "application", + "context", "private", not %s + ''', + repr(class_) + )) + self.class_ = CLASS_NAME_TO_NUM_MAP[class_] + + if self.class_ is None: + self.class_ = 0 + + if tag is not None: + self.tag = tag + + if method is not None: + if method not in set(["primitive", 0, "constructed", 1]): + raise ValueError(unwrap( + ''' + method must be one of "primitive" or "constructed", + not %s + ''', + repr(method) + )) + if method == "primitive": + method = 0 + elif method == "constructed": + method = 1 + self.method = method + + if no_explicit: + self.explicit = None + + if contents is not None: + self.contents = contents + + elif default is not None: + self.set(default) + + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args + raise e + + def __str__(self): + """ + Since str is different in Python 2 and 3, this calls the appropriate + method, __unicode__() or __bytes__() + + :return: + A unicode string + """ + + if _PY2: + return self.__bytes__() + else: + return self.__unicode__() + + def __repr__(self): + """ + :return: + A unicode string + """ + + if _PY2: + return '<%s %s b%s>' % (type_name(self), id(self), repr(self.dump())) + else: + return '<%s %s %s>' % (type_name(self), id(self), repr(self.dump())) + + def __bytes__(self): + """ + A fall-back method for print() in Python 2 + + :return: + A byte string of the output of repr() + """ + + return self.__repr__().encode('utf-8') + + def __unicode__(self): + """ + A fall-back method for print() in Python 3 + + :return: + A unicode string of the output of repr() + """ + + return self.__repr__() + + def _new_instance(self): + """ + Constructs a new copy of the current object, preserving any tagging + + :return: + An Asn1Value object + """ + + new_obj = self.__class__() + new_obj.class_ = self.class_ + new_obj.tag = self.tag + new_obj.implicit = self.implicit + new_obj.explicit = self.explicit + return new_obj + + def __copy__(self): + """ + Implements the copy.copy() interface + + :return: + A new shallow copy of the current Asn1Value object + """ + + new_obj = self._new_instance() + new_obj._copy(self, copy.copy) + return new_obj + + def __deepcopy__(self, memo): + """ + Implements the copy.deepcopy() interface + + :param memo: + A dict for memoization + + :return: + A new deep copy of the current Asn1Value object + """ + + new_obj = self._new_instance() + memo[id(self)] = new_obj + new_obj._copy(self, copy.deepcopy) + return new_obj + + def copy(self): + """ + Copies the object, preserving any special tagging from it + + :return: + An Asn1Value object + """ + + return copy.deepcopy(self) + + def retag(self, tagging, tag=None): + """ + Copies the object, applying a new tagging to it + + :param tagging: + A dict containing the keys "explicit" and "implicit". Legacy + API allows a unicode string of "implicit" or "explicit". + + :param tag: + A integer tag number. Only used when tagging is a unicode string. + + :return: + An Asn1Value object + """ + + # This is required to preserve the old API + if not isinstance(tagging, dict): + tagging = {tagging: tag} + new_obj = self.__class__(explicit=tagging.get('explicit'), implicit=tagging.get('implicit')) + new_obj._copy(self, copy.deepcopy) + return new_obj + + def untag(self): + """ + Copies the object, removing any special tagging from it + + :return: + An Asn1Value object + """ + + new_obj = self.__class__() + new_obj._copy(self, copy.deepcopy) + return new_obj + + def _copy(self, other, copy_func): + """ + Copies the contents of another Asn1Value object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + if self.__class__ != other.__class__: + raise TypeError(unwrap( + ''' + Can not copy values from %s object to %s object + ''', + type_name(other), + type_name(self) + )) + + self.contents = other.contents + self._native = copy_func(other._native) + + def debug(self, nest_level=1): + """ + Show the binary data and parsed data in a tree structure + """ + + prefix = ' ' * nest_level + + # This interacts with Any and moves the tag, implicit, explicit, _header, + # contents, _footer to the parsed value so duplicate data isn't present + has_parsed = hasattr(self, 'parsed') + + _basic_debug(prefix, self) + if has_parsed: + self.parsed.debug(nest_level + 2) + elif hasattr(self, 'chosen'): + self.chosen.debug(nest_level + 2) + else: + if _PY2 and isinstance(self.native, byte_cls): + print('%s Native: b%s' % (prefix, repr(self.native))) + else: + print('%s Native: %s' % (prefix, self.native)) + + def dump(self, force=False): + """ + Encodes the value using DER + + :param force: + If the encoded contents already exist, clear them and regenerate + to ensure they are in DER format instead of BER format + + :return: + A byte string of the DER-encoded value + """ + + contents = self.contents + + # If the length is indefinite, force the re-encoding + if self._header is not None and self._header[-1:] == b'\x80': + force = True + + if self._header is None or force: + if isinstance(self, Constructable) and self._indefinite: + self.method = 0 + + header = _dump_header(self.class_, self.method, self.tag, self.contents) + + if self.explicit is not None: + for class_, tag in self.explicit: + header = _dump_header(class_, 1, tag, header + self.contents) + header + + self._header = header + self._trailer = b'' + + return self._header + contents + self._trailer + + +class ValueMap(): + """ + Basic functionality that allows for mapping values from ints or OIDs to + python unicode strings + """ + + # A dict from primitive value (int or OID) to unicode string. This needs + # to be defined in the source code + _map = None + + # A dict from unicode string to int/OID. This is automatically generated + # from _map the first time it is needed + _reverse_map = None + + def _setup(self): + """ + Generates _reverse_map from _map + """ + + cls = self.__class__ + if cls._map is None or cls._reverse_map is not None: + return + cls._reverse_map = {} + for key, value in cls._map.items(): + cls._reverse_map[value] = key + + +class Castable(object): + """ + A mixin to handle converting an object between different classes that + represent the same encoded value, but with different rules for converting + to and from native Python values + """ + + def cast(self, other_class): + """ + Converts the current object into an object of a different class. The + new class must use the ASN.1 encoding for the value. + + :param other_class: + The class to instantiate the new object from + + :return: + An instance of the type other_class + """ + + if other_class.tag != self.__class__.tag: + raise TypeError(unwrap( + ''' + Can not covert a value from %s object to %s object since they + use different tags: %d versus %d + ''', + type_name(other_class), + type_name(self), + other_class.tag, + self.__class__.tag + )) + + new_obj = other_class() + new_obj.class_ = self.class_ + new_obj.implicit = self.implicit + new_obj.explicit = self.explicit + new_obj._header = self._header + new_obj.contents = self.contents + new_obj._trailer = self._trailer + if isinstance(self, Constructable): + new_obj.method = self.method + new_obj._indefinite = self._indefinite + return new_obj + + +class Constructable(object): + """ + A mixin to handle string types that may be constructed from chunks + contained within an indefinite length BER-encoded container + """ + + # Instance attribute indicating if an object was indefinite + # length when parsed - affects parsing and dumping + _indefinite = False + + def _merge_chunks(self): + """ + :return: + A concatenation of the native values of the contained chunks + """ + + if not self._indefinite: + return self._as_chunk() + + pointer = 0 + contents_len = len(self.contents) + output = None + + while pointer < contents_len: + # We pass the current class as the spec so content semantics are preserved + sub_value, pointer = _parse_build(self.contents, pointer, spec=self.__class__) + if output is None: + output = sub_value._merge_chunks() + else: + output += sub_value._merge_chunks() + + if output is None: + return self._as_chunk() + + return output + + def _as_chunk(self): + """ + A method to return a chunk of data that can be combined for + constructed method values + + :return: + A native Python value that can be added together. Examples include + byte strings, unicode strings or tuples. + """ + + return self.contents + + def _setable_native(self): + """ + Returns a native value that can be round-tripped into .set(), to + result in a DER encoding. This differs from .native in that .native + is designed for the end use, and may account for the fact that the + merged value is further parsed as ASN.1, such as in the case of + ParsableOctetString() and ParsableOctetBitString(). + + :return: + A python value that is valid to pass to .set() + """ + + return self.native + + def _copy(self, other, copy_func): + """ + Copies the contents of another Constructable object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + super(Constructable, self)._copy(other, copy_func) + # We really don't want to dump BER encodings, so if we see an + # indefinite encoding, let's re-encode it + if other._indefinite: + self.set(other._setable_native()) + + +class Void(Asn1Value): + """ + A representation of an optional value that is not present. Has .native + property and .dump() method to be compatible with other value classes. + """ + + contents = b'' + + def __eq__(self, other): + """ + :param other: + The other Primitive to compare to + + :return: + A boolean + """ + + return other.__class__ == self.__class__ + + def __nonzero__(self): + return False + + def __len__(self): + return 0 + + def __iter__(self): + return iter(()) + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + None + """ + + return None + + def dump(self, force=False): + """ + Encodes the value using DER + + :param force: + If the encoded contents already exist, clear them and regenerate + to ensure they are in DER format instead of BER format + + :return: + A byte string of the DER-encoded value + """ + + return b'' + + +VOID = Void() + + +class Any(Asn1Value): + """ + A value class that can contain any value, and allows for easy parsing of + the underlying encoded value using a spec. This is normally contained in + a Structure that has an ObjectIdentifier field and _oid_pair and _oid_specs + defined. + """ + + # The parsed value object + _parsed = None + + def __init__(self, value=None, **kwargs): + """ + Sets the value of the object before passing to Asn1Value.__init__() + + :param value: + An Asn1Value object that will be set as the parsed value + """ + + Asn1Value.__init__(self, **kwargs) + + try: + if value is not None: + if not isinstance(value, Asn1Value): + raise TypeError(unwrap( + ''' + value must be an instance of Asn1Value, not %s + ''', + type_name(value) + )) + + self._parsed = (value, value.__class__, None) + self.contents = value.dump() + + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args + raise e + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + The .native value from the parsed value object + """ + + if self._parsed is None: + self.parse() + + return self._parsed[0].native + + @property + def parsed(self): + """ + Returns the parsed object from .parse() + + :return: + The object returned by .parse() + """ + + if self._parsed is None: + self.parse() + + return self._parsed[0] + + def parse(self, spec=None, spec_params=None): + """ + Parses the contents generically, or using a spec with optional params + + :param spec: + A class derived from Asn1Value that defines what class_ and tag the + value should have, and the semantics of the encoded value. The + return value will be of this type. If omitted, the encoded value + will be decoded using the standard universal tag based on the + encoded tag number. + + :param spec_params: + A dict of params to pass to the spec object + + :return: + An object of the type spec, or if not present, a child of Asn1Value + """ + + if self._parsed is None or self._parsed[1:3] != (spec, spec_params): + try: + passed_params = spec_params or {} + _tag_type_to_explicit_implicit(passed_params) + if self.explicit is not None: + if 'explicit' in passed_params: + passed_params['explicit'] = self.explicit + passed_params['explicit'] + else: + passed_params['explicit'] = self.explicit + contents = self._header + self.contents + self._trailer + parsed_value, _ = _parse_build( + contents, + spec=spec, + spec_params=passed_params + ) + self._parsed = (parsed_value, spec, spec_params) + + # Once we've parsed the Any value, clear any attributes from this object + # since they are now duplicate + self.tag = None + self.explicit = None + self.implicit = False + self._header = b'' + self.contents = contents + self._trailer = b'' + + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args + raise e + return self._parsed[0] + + def _copy(self, other, copy_func): + """ + Copies the contents of another Any object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + super(Any, self)._copy(other, copy_func) + self._parsed = copy_func(other._parsed) + + def dump(self, force=False): + """ + Encodes the value using DER + + :param force: + If the encoded contents already exist, clear them and regenerate + to ensure they are in DER format instead of BER format + + :return: + A byte string of the DER-encoded value + """ + + if self._parsed is None: + self.parse() + + return self._parsed[0].dump(force=force) + + +class Choice(Asn1Value): + """ + A class to handle when a value may be one of several options + """ + + # The index in _alternatives of the validated alternative + _choice = None + + # The name of the chosen alternative + _name = None + + # The Asn1Value object for the chosen alternative + _parsed = None + + # Choice overrides .contents to be a property so that the code expecting + # the .contents attribute will get the .contents of the chosen alternative + _contents = None + + # A list of tuples in one of the following forms. + # + # Option 1, a unicode string field name and a value class + # + # ("name", Asn1ValueClass) + # + # Option 2, same as Option 1, but with a dict of class params + # + # ("name", Asn1ValueClass, {'explicit': 5}) + _alternatives = None + + # A dict that maps tuples of (class_, tag) to an index in _alternatives + _id_map = None + + # A dict that maps alternative names to an index in _alternatives + _name_map = None + + @classmethod + def load(cls, encoded_data, strict=False, **kwargs): + """ + Loads a BER/DER-encoded byte string using the current class as the spec + + :param encoded_data: + A byte string of BER or DER encoded data + + :param strict: + A boolean indicating if trailing data should be forbidden - if so, a + ValueError will be raised when trailing data exists + + :return: + A instance of the current class + """ + + if not isinstance(encoded_data, byte_cls): + raise TypeError('encoded_data must be a byte string, not %s' % type_name(encoded_data)) + + value, _ = _parse_build(encoded_data, spec=cls, spec_params=kwargs, strict=strict) + return value + + def _setup(self): + """ + Generates _id_map from _alternatives to allow validating contents + """ + + cls = self.__class__ + cls._id_map = {} + cls._name_map = {} + for index, info in enumerate(cls._alternatives): + if len(info) < 3: + info = info + ({},) + cls._alternatives[index] = info + id_ = _build_id_tuple(info[2], info[1]) + cls._id_map[id_] = index + cls._name_map[info[0]] = index + + def __init__(self, name=None, value=None, **kwargs): + """ + Checks to ensure implicit tagging is not being used since it is + incompatible with Choice, then forwards on to Asn1Value.__init__() + + :param name: + The name of the alternative to be set - used with value. + Alternatively this may be a dict with a single key being the name + and the value being the value, or a two-element tuple of the name + and the value. + + :param value: + The alternative value to set - used with name + + :raises: + ValueError - when implicit param is passed (or legacy tag_type param is "implicit") + """ + + _tag_type_to_explicit_implicit(kwargs) + + Asn1Value.__init__(self, **kwargs) + + try: + if kwargs.get('implicit') is not None: + raise ValueError(unwrap( + ''' + The Choice type can not be implicitly tagged even if in an + implicit module - due to its nature any tagging must be + explicit + ''' + )) + + if name is not None: + if isinstance(name, dict): + if len(name) != 1: + raise ValueError(unwrap( + ''' + When passing a dict as the "name" argument to %s, + it must have a single key/value - however %d were + present + ''', + type_name(self), + len(name) + )) + name, value = list(name.items())[0] + + if isinstance(name, tuple): + if len(name) != 2: + raise ValueError(unwrap( + ''' + When passing a tuple as the "name" argument to %s, + it must have two elements, the name and value - + however %d were present + ''', + type_name(self), + len(name) + )) + value = name[1] + name = name[0] + + if name not in self._name_map: + raise ValueError(unwrap( + ''' + The name specified, "%s", is not a valid alternative + for %s + ''', + name, + type_name(self) + )) + + self._choice = self._name_map[name] + _, spec, params = self._alternatives[self._choice] + + if not isinstance(value, spec): + value = spec(value, **params) + else: + value = _fix_tagging(value, params) + self._parsed = value + + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args + raise e + + @property + def contents(self): + """ + :return: + A byte string of the DER-encoded contents of the chosen alternative + """ + + if self._parsed is not None: + return self._parsed.contents + + return self._contents + + @contents.setter + def contents(self, value): + """ + :param value: + A byte string of the DER-encoded contents of the chosen alternative + """ + + self._contents = value + + @property + def name(self): + """ + :return: + A unicode string of the field name of the chosen alternative + """ + if not self._name: + self._name = self._alternatives[self._choice][0] + return self._name + + def parse(self): + """ + Parses the detected alternative + + :return: + An Asn1Value object of the chosen alternative + """ + + if self._parsed is None: + try: + _, spec, params = self._alternatives[self._choice] + self._parsed, _ = _parse_build(self._contents, spec=spec, spec_params=params) + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args + raise e + return self._parsed + + @property + def chosen(self): + """ + :return: + An Asn1Value object of the chosen alternative + """ + + return self.parse() + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + The .native value from the contained value object + """ + + return self.chosen.native + + def validate(self, class_, tag, contents): + """ + Ensures that the class and tag specified exist as an alternative + + :param class_: + The integer class_ from the encoded value header + + :param tag: + The integer tag from the encoded value header + + :param contents: + A byte string of the contents of the value - used when the object + is explicitly tagged + + :raises: + ValueError - when value is not a valid alternative + """ + + id_ = (class_, tag) + + if self.explicit is not None: + if self.explicit[-1] != id_: + raise ValueError(unwrap( + ''' + %s was explicitly tagged, but the value provided does not + match the class and tag + ''', + type_name(self) + )) + + ((class_, _, tag, _, _, _), _) = _parse(contents, len(contents)) + id_ = (class_, tag) + + if id_ in self._id_map: + self._choice = self._id_map[id_] + return + + # This means the Choice was implicitly tagged + if self.class_ is not None and self.tag is not None: + if len(self._alternatives) > 1: + raise ValueError(unwrap( + ''' + %s was implicitly tagged, but more than one alternative + exists + ''', + type_name(self) + )) + if id_ == (self.class_, self.tag): + self._choice = 0 + return + + asn1 = self._format_class_tag(class_, tag) + asn1s = [self._format_class_tag(pair[0], pair[1]) for pair in self._id_map] + + raise ValueError(unwrap( + ''' + Value %s did not match the class and tag of any of the alternatives + in %s: %s + ''', + asn1, + type_name(self), + ', '.join(asn1s) + )) + + def _format_class_tag(self, class_, tag): + """ + :return: + A unicode string of a human-friendly representation of the class and tag + """ + + return '[%s %s]' % (CLASS_NUM_TO_NAME_MAP[class_].upper(), tag) + + def _copy(self, other, copy_func): + """ + Copies the contents of another Choice object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + super(Choice, self)._copy(other, copy_func) + self._choice = other._choice + self._name = other._name + self._parsed = copy_func(other._parsed) + + def dump(self, force=False): + """ + Encodes the value using DER + + :param force: + If the encoded contents already exist, clear them and regenerate + to ensure they are in DER format instead of BER format + + :return: + A byte string of the DER-encoded value + """ + + # If the length is indefinite, force the re-encoding + if self._header is not None and self._header[-1:] == b'\x80': + force = True + + self._contents = self.chosen.dump(force=force) + if self._header is None or force: + self._header = b'' + if self.explicit is not None: + for class_, tag in self.explicit: + self._header = _dump_header(class_, 1, tag, self._header + self._contents) + self._header + return self._header + self._contents + + +class Concat(object): + """ + A class that contains two or more encoded child values concatentated + together. THIS IS NOT PART OF THE ASN.1 SPECIFICATION! This exists to handle + the x509.TrustedCertificate() class for OpenSSL certificates containing + extra information. + """ + + # A list of the specs of the concatenated values + _child_specs = None + + _children = None + + @classmethod + def load(cls, encoded_data, strict=False): + """ + Loads a BER/DER-encoded byte string using the current class as the spec + + :param encoded_data: + A byte string of BER or DER encoded data + + :param strict: + A boolean indicating if trailing data should be forbidden - if so, a + ValueError will be raised when trailing data exists + + :return: + A Concat object + """ + + return cls(contents=encoded_data, strict=strict) + + def __init__(self, value=None, contents=None, strict=False): + """ + :param value: + A native Python datatype to initialize the object value with + + :param contents: + A byte string of the encoded contents of the value + + :param strict: + A boolean indicating if trailing data should be forbidden - if so, a + ValueError will be raised when trailing data exists in contents + + :raises: + ValueError - when an error occurs with one of the children + TypeError - when an error occurs with one of the children + """ + + if contents is not None: + try: + contents_len = len(contents) + self._children = [] + + offset = 0 + for spec in self._child_specs: + if offset < contents_len: + child_value, offset = _parse_build(contents, pointer=offset, spec=spec) + else: + child_value = spec() + self._children.append(child_value) + + if strict and offset != contents_len: + extra_bytes = contents_len - offset + raise ValueError('Extra data - %d bytes of trailing data were provided' % extra_bytes) + + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args + raise e + + if value is not None: + if self._children is None: + self._children = [None] * len(self._child_specs) + for index, data in enumerate(value): + self.__setitem__(index, data) + + def __str__(self): + """ + Since str is different in Python 2 and 3, this calls the appropriate + method, __unicode__() or __bytes__() + + :return: + A unicode string + """ + + if _PY2: + return self.__bytes__() + else: + return self.__unicode__() + + def __bytes__(self): + """ + A byte string of the DER-encoded contents + """ + + return self.dump() + + def __unicode__(self): + """ + :return: + A unicode string + """ + + return repr(self) + + def __repr__(self): + """ + :return: + A unicode string + """ + + return '<%s %s %s>' % (type_name(self), id(self), repr(self.dump())) + + def __copy__(self): + """ + Implements the copy.copy() interface + + :return: + A new shallow copy of the Concat object + """ + + new_obj = self.__class__() + new_obj._copy(self, copy.copy) + return new_obj + + def __deepcopy__(self, memo): + """ + Implements the copy.deepcopy() interface + + :param memo: + A dict for memoization + + :return: + A new deep copy of the Concat object and all child objects + """ + + new_obj = self.__class__() + memo[id(self)] = new_obj + new_obj._copy(self, copy.deepcopy) + return new_obj + + def copy(self): + """ + Copies the object + + :return: + A Concat object + """ + + return copy.deepcopy(self) + + def _copy(self, other, copy_func): + """ + Copies the contents of another Concat object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + if self.__class__ != other.__class__: + raise TypeError(unwrap( + ''' + Can not copy values from %s object to %s object + ''', + type_name(other), + type_name(self) + )) + + self._children = copy_func(other._children) + + def debug(self, nest_level=1): + """ + Show the binary data and parsed data in a tree structure + """ + + prefix = ' ' * nest_level + print('%s%s Object #%s' % (prefix, type_name(self), id(self))) + print('%s Children:' % (prefix,)) + for child in self._children: + child.debug(nest_level + 2) + + def dump(self, force=False): + """ + Encodes the value using DER + + :param force: + If the encoded contents already exist, clear them and regenerate + to ensure they are in DER format instead of BER format + + :return: + A byte string of the DER-encoded value + """ + + contents = b'' + for child in self._children: + contents += child.dump(force=force) + return contents + + @property + def contents(self): + """ + :return: + A byte string of the DER-encoded contents of the children + """ + + return self.dump() + + def __len__(self): + """ + :return: + Integer + """ + + return len(self._children) + + def __getitem__(self, key): + """ + Allows accessing children by index + + :param key: + An integer of the child index + + :raises: + KeyError - when an index is invalid + + :return: + The Asn1Value object of the child specified + """ + + if key > len(self._child_specs) - 1 or key < 0: + raise KeyError(unwrap( + ''' + No child is definition for position %d of %s + ''', + key, + type_name(self) + )) + + return self._children[key] + + def __setitem__(self, key, value): + """ + Allows settings children by index + + :param key: + An integer of the child index + + :param value: + An Asn1Value object to set the child to + + :raises: + KeyError - when an index is invalid + ValueError - when the value is not an instance of Asn1Value + """ + + if key > len(self._child_specs) - 1 or key < 0: + raise KeyError(unwrap( + ''' + No child is defined for position %d of %s + ''', + key, + type_name(self) + )) + + if not isinstance(value, Asn1Value): + raise ValueError(unwrap( + ''' + Value for child %s of %s is not an instance of + asn1crypto.core.Asn1Value + ''', + key, + type_name(self) + )) + + self._children[key] = value + + def __iter__(self): + """ + :return: + An iterator of child values + """ + + return iter(self._children) + + +class Primitive(Asn1Value): + """ + Sets the class_ and method attributes for primitive, universal values + """ + + class_ = 0 + + method = 0 + + def __init__(self, value=None, default=None, contents=None, **kwargs): + """ + Sets the value of the object before passing to Asn1Value.__init__() + + :param value: + A native Python datatype to initialize the object value with + + :param default: + The default value if no value is specified + + :param contents: + A byte string of the encoded contents of the value + """ + + Asn1Value.__init__(self, **kwargs) + + try: + if contents is not None: + self.contents = contents + + elif value is not None: + self.set(value) + + elif default is not None: + self.set(default) + + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args + raise e + + def set(self, value): + """ + Sets the value of the object + + :param value: + A byte string + """ + + if not isinstance(value, byte_cls): + raise TypeError(unwrap( + ''' + %s value must be a byte string, not %s + ''', + type_name(self), + type_name(value) + )) + + self._native = value + self.contents = value + self._header = None + if self._trailer != b'': + self._trailer = b'' + + def dump(self, force=False): + """ + Encodes the value using DER + + :param force: + If the encoded contents already exist, clear them and regenerate + to ensure they are in DER format instead of BER format + + :return: + A byte string of the DER-encoded value + """ + + # If the length is indefinite, force the re-encoding + if self._header is not None and self._header[-1:] == b'\x80': + force = True + + if force: + native = self.native + self.contents = None + self.set(native) + + return Asn1Value.dump(self) + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + """ + :param other: + The other Primitive to compare to + + :return: + A boolean + """ + + if not isinstance(other, Primitive): + return False + + if self.contents != other.contents: + return False + + # We compare class tag numbers since object tag numbers could be + # different due to implicit or explicit tagging + if self.__class__.tag != other.__class__.tag: + return False + + if self.__class__ == other.__class__ and self.contents == other.contents: + return True + + # If the objects share a common base class that is not too low-level + # then we can compare the contents + self_bases = (set(self.__class__.__bases__) | set([self.__class__])) - set([Asn1Value, Primitive, ValueMap]) + other_bases = (set(other.__class__.__bases__) | set([other.__class__])) - set([Asn1Value, Primitive, ValueMap]) + if self_bases | other_bases: + return self.contents == other.contents + + # When tagging is going on, do the extra work of constructing new + # objects to see if the dumped representation are the same + if self.implicit or self.explicit or other.implicit or other.explicit: + return self.untag().dump() == other.untag().dump() + + return self.dump() == other.dump() + + +class AbstractString(Constructable, Primitive): + """ + A base class for all strings that have a known encoding. In general, we do + not worry ourselves with confirming that the decoded values match a specific + set of characters, only that they are decoded into a Python unicode string + """ + + # The Python encoding name to use when decoding or encoded the contents + _encoding = 'latin1' + + # Instance attribute of (possibly-merged) unicode string + _unicode = None + + def set(self, value): + """ + Sets the value of the string + + :param value: + A unicode string + """ + + if not isinstance(value, str_cls): + raise TypeError(unwrap( + ''' + %s value must be a unicode string, not %s + ''', + type_name(self), + type_name(value) + )) + + self._unicode = value + self.contents = value.encode(self._encoding) + self._header = None + if self._indefinite: + self._indefinite = False + self.method = 0 + if self._trailer != b'': + self._trailer = b'' + + def __unicode__(self): + """ + :return: + A unicode string + """ + + if self.contents is None: + return '' + if self._unicode is None: + self._unicode = self._merge_chunks().decode(self._encoding) + return self._unicode + + def _copy(self, other, copy_func): + """ + Copies the contents of another AbstractString object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + super(AbstractString, self)._copy(other, copy_func) + self._unicode = other._unicode + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + A unicode string or None + """ + + if self.contents is None: + return None + + return self.__unicode__() + + +class Boolean(Primitive): + """ + Represents a boolean in both ASN.1 and Python + """ + + tag = 1 + + def set(self, value): + """ + Sets the value of the object + + :param value: + True, False or another value that works with bool() + """ + + self._native = bool(value) + self.contents = b'\x00' if not value else b'\xff' + self._header = None + if self._trailer != b'': + self._trailer = b'' + + # Python 2 + def __nonzero__(self): + """ + :return: + True or False + """ + return self.__bool__() + + def __bool__(self): + """ + :return: + True or False + """ + return self.contents != b'\x00' + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + True, False or None + """ + + if self.contents is None: + return None + + if self._native is None: + self._native = self.__bool__() + return self._native + + +class Integer(Primitive, ValueMap): + """ + Represents an integer in both ASN.1 and Python + """ + + tag = 2 + + def set(self, value): + """ + Sets the value of the object + + :param value: + An integer, or a unicode string if _map is set + + :raises: + ValueError - when an invalid value is passed + """ + + if isinstance(value, str_cls): + if self._map is None: + raise ValueError(unwrap( + ''' + %s value is a unicode string, but no _map provided + ''', + type_name(self) + )) + + if value not in self._reverse_map: + raise ValueError(unwrap( + ''' + %s value, %s, is not present in the _map + ''', + type_name(self), + value + )) + + value = self._reverse_map[value] + + elif not isinstance(value, int_types): + raise TypeError(unwrap( + ''' + %s value must be an integer or unicode string when a name_map + is provided, not %s + ''', + type_name(self), + type_name(value) + )) + + self._native = self._map[value] if self._map and value in self._map else value + + self.contents = int_to_bytes(value, signed=True) + self._header = None + if self._trailer != b'': + self._trailer = b'' + + def __int__(self): + """ + :return: + An integer + """ + return int_from_bytes(self.contents, signed=True) + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + An integer or None + """ + + if self.contents is None: + return None + + if self._native is None: + self._native = self.__int__() + if self._map is not None and self._native in self._map: + self._native = self._map[self._native] + return self._native + + +class _IntegerBitString(object): + """ + A mixin for IntegerBitString and BitString to parse the contents as an integer. + """ + + # Tuple of 1s and 0s; set through native + _unused_bits = () + + def _as_chunk(self): + """ + Parse the contents of a primitive BitString encoding as an integer value. + Allows reconstructing indefinite length values. + + :raises: + ValueError - when an invalid value is passed + + :return: + A list with one tuple (value, bits, unused_bits) where value is an integer + with the value of the BitString, bits is the bit count of value and + unused_bits is a tuple of 1s and 0s. + """ + + if self._indefinite: + # return an empty chunk, for cases like \x23\x80\x00\x00 + return [] + + unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0] + value = int_from_bytes(self.contents[1:]) + bits = (len(self.contents) - 1) * 8 + + if not unused_bits_len: + return [(value, bits, ())] + + if len(self.contents) == 1: + # Disallowed by X.690 §8.6.2.3 + raise ValueError('Empty bit string has {0} unused bits'.format(unused_bits_len)) + + if unused_bits_len > 7: + # Disallowed by X.690 §8.6.2.2 + raise ValueError('Bit string has {0} unused bits'.format(unused_bits_len)) + + unused_bits = _int_to_bit_tuple(value & ((1 << unused_bits_len) - 1), unused_bits_len) + value >>= unused_bits_len + bits -= unused_bits_len + + return [(value, bits, unused_bits)] + + def _chunks_to_int(self): + """ + Combines the chunks into a single value. + + :raises: + ValueError - when an invalid value is passed + + :return: + A tuple (value, bits, unused_bits) where value is an integer with the + value of the BitString, bits is the bit count of value and unused_bits + is a tuple of 1s and 0s. + """ + + if not self._indefinite: + # Fast path + return self._as_chunk()[0] + + value = 0 + total_bits = 0 + unused_bits = () + + # X.690 §8.6.3 allows empty indefinite encodings + for chunk, bits, unused_bits in self._merge_chunks(): + if total_bits & 7: + # Disallowed by X.690 §8.6.4 + raise ValueError('Only last chunk in a bit string may have unused bits') + total_bits += bits + value = (value << bits) | chunk + + return value, total_bits, unused_bits + + def _copy(self, other, copy_func): + """ + Copies the contents of another _IntegerBitString object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + super(_IntegerBitString, self)._copy(other, copy_func) + self._unused_bits = other._unused_bits + + @property + def unused_bits(self): + """ + The unused bits of the bit string encoding. + + :return: + A tuple of 1s and 0s + """ + + # call native to set _unused_bits + self.native + + return self._unused_bits + + +class BitString(_IntegerBitString, Constructable, Castable, Primitive, ValueMap): + """ + Represents a bit string from ASN.1 as a Python tuple of 1s and 0s + """ + + tag = 3 + + _size = None + + def _setup(self): + """ + Generates _reverse_map from _map + """ + + ValueMap._setup(self) + + cls = self.__class__ + if cls._map is not None: + cls._size = max(self._map.keys()) + 1 + + def set(self, value): + """ + Sets the value of the object + + :param value: + An integer or a tuple of integers 0 and 1 + + :raises: + ValueError - when an invalid value is passed + """ + + if isinstance(value, set): + if self._map is None: + raise ValueError(unwrap( + ''' + %s._map has not been defined + ''', + type_name(self) + )) + + bits = [0] * self._size + self._native = value + for index in range(0, self._size): + key = self._map.get(index) + if key is None: + continue + if key in value: + bits[index] = 1 + + value = ''.join(map(str_cls, bits)) + + elif value.__class__ == tuple: + if self._map is None: + self._native = value + else: + self._native = set() + for index, bit in enumerate(value): + if bit: + name = self._map.get(index, index) + self._native.add(name) + value = ''.join(map(str_cls, value)) + + else: + raise TypeError(unwrap( + ''' + %s value must be a tuple of ones and zeros or a set of unicode + strings, not %s + ''', + type_name(self), + type_name(value) + )) + + if self._map is not None: + if len(value) > self._size: + raise ValueError(unwrap( + ''' + %s value must be at most %s bits long, specified was %s long + ''', + type_name(self), + self._size, + len(value) + )) + # A NamedBitList must have trailing zero bit truncated. See + # https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf + # section 11.2, + # https://tools.ietf.org/html/rfc5280#page-134 and + # https://www.ietf.org/mail-archive/web/pkix/current/msg10443.html + value = value.rstrip('0') + size = len(value) + + size_mod = size % 8 + extra_bits = 0 + if size_mod != 0: + extra_bits = 8 - size_mod + value += '0' * extra_bits + + size_in_bytes = int(math.ceil(size / 8)) + + if extra_bits: + extra_bits_byte = int_to_bytes(extra_bits) + else: + extra_bits_byte = b'\x00' + + if value == '': + value_bytes = b'' + else: + value_bytes = int_to_bytes(int(value, 2)) + if len(value_bytes) != size_in_bytes: + value_bytes = (b'\x00' * (size_in_bytes - len(value_bytes))) + value_bytes + + self.contents = extra_bits_byte + value_bytes + self._unused_bits = (0,) * extra_bits + self._header = None + if self._indefinite: + self._indefinite = False + self.method = 0 + if self._trailer != b'': + self._trailer = b'' + + def __getitem__(self, key): + """ + Retrieves a boolean version of one of the bits based on a name from the + _map + + :param key: + The unicode string of one of the bit names + + :raises: + ValueError - when _map is not set or the key name is invalid + + :return: + A boolean if the bit is set + """ + + is_int = isinstance(key, int_types) + if not is_int: + if not isinstance(self._map, dict): + raise ValueError(unwrap( + ''' + %s._map has not been defined + ''', + type_name(self) + )) + + if key not in self._reverse_map: + raise ValueError(unwrap( + ''' + %s._map does not contain an entry for "%s" + ''', + type_name(self), + key + )) + + if self._native is None: + self.native + + if self._map is None: + if len(self._native) >= key + 1: + return bool(self._native[key]) + return False + + if is_int: + key = self._map.get(key, key) + + return key in self._native + + def __setitem__(self, key, value): + """ + Sets one of the bits based on a name from the _map + + :param key: + The unicode string of one of the bit names + + :param value: + A boolean value + + :raises: + ValueError - when _map is not set or the key name is invalid + """ + + is_int = isinstance(key, int_types) + if not is_int: + if self._map is None: + raise ValueError(unwrap( + ''' + %s._map has not been defined + ''', + type_name(self) + )) + + if key not in self._reverse_map: + raise ValueError(unwrap( + ''' + %s._map does not contain an entry for "%s" + ''', + type_name(self), + key + )) + + if self._native is None: + self.native + + if self._map is None: + new_native = list(self._native) + max_key = len(new_native) - 1 + if key > max_key: + new_native.extend([0] * (key - max_key)) + new_native[key] = 1 if value else 0 + self._native = tuple(new_native) + + else: + if is_int: + key = self._map.get(key, key) + + if value: + if key not in self._native: + self._native.add(key) + else: + if key in self._native: + self._native.remove(key) + + self.set(self._native) + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + If a _map is set, a set of names, or if no _map is set, a tuple of + integers 1 and 0. None if no value. + """ + + # For BitString we default the value to be all zeros + if self.contents is None: + if self._map is None: + self.set(()) + else: + self.set(set()) + + if self._native is None: + int_value, bit_count, self._unused_bits = self._chunks_to_int() + bits = _int_to_bit_tuple(int_value, bit_count) + + if self._map: + self._native = set() + for index, bit in enumerate(bits): + if bit: + name = self._map.get(index, index) + self._native.add(name) + else: + self._native = bits + return self._native + + +class OctetBitString(Constructable, Castable, Primitive): + """ + Represents a bit string in ASN.1 as a Python byte string + """ + + tag = 3 + + # Instance attribute of (possibly-merged) byte string + _bytes = None + + # Tuple of 1s and 0s; set through native + _unused_bits = () + + def set(self, value): + """ + Sets the value of the object + + :param value: + A byte string + + :raises: + ValueError - when an invalid value is passed + """ + + if not isinstance(value, byte_cls): + raise TypeError(unwrap( + ''' + %s value must be a byte string, not %s + ''', + type_name(self), + type_name(value) + )) + + self._bytes = value + # Set the unused bits to 0 + self.contents = b'\x00' + value + self._unused_bits = () + self._header = None + if self._indefinite: + self._indefinite = False + self.method = 0 + if self._trailer != b'': + self._trailer = b'' + + def __bytes__(self): + """ + :return: + A byte string + """ + + if self.contents is None: + return b'' + if self._bytes is None: + if not self._indefinite: + self._bytes, self._unused_bits = self._as_chunk()[0] + else: + chunks = self._merge_chunks() + self._unused_bits = () + for chunk in chunks: + if self._unused_bits: + # Disallowed by X.690 §8.6.4 + raise ValueError('Only last chunk in a bit string may have unused bits') + self._unused_bits = chunk[1] + self._bytes = b''.join(chunk[0] for chunk in chunks) + + return self._bytes + + def _copy(self, other, copy_func): + """ + Copies the contents of another OctetBitString object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + super(OctetBitString, self)._copy(other, copy_func) + self._bytes = other._bytes + self._unused_bits = other._unused_bits + + def _as_chunk(self): + """ + Allows reconstructing indefinite length values + + :raises: + ValueError - when an invalid value is passed + + :return: + List with one tuple, consisting of a byte string and an integer (unused bits) + """ + + unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0] + if not unused_bits_len: + return [(self.contents[1:], ())] + + if len(self.contents) == 1: + # Disallowed by X.690 §8.6.2.3 + raise ValueError('Empty bit string has {0} unused bits'.format(unused_bits_len)) + + if unused_bits_len > 7: + # Disallowed by X.690 §8.6.2.2 + raise ValueError('Bit string has {0} unused bits'.format(unused_bits_len)) + + mask = (1 << unused_bits_len) - 1 + last_byte = ord(self.contents[-1]) if _PY2 else self.contents[-1] + + # zero out the unused bits in the last byte. + zeroed_byte = last_byte & ~mask + value = self.contents[1:-1] + (chr(zeroed_byte) if _PY2 else bytes((zeroed_byte,))) + + unused_bits = _int_to_bit_tuple(last_byte & mask, unused_bits_len) + + return [(value, unused_bits)] + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + A byte string or None + """ + + if self.contents is None: + return None + + return self.__bytes__() + + @property + def unused_bits(self): + """ + The unused bits of the bit string encoding. + + :return: + A tuple of 1s and 0s + """ + + # call native to set _unused_bits + self.native + + return self._unused_bits + + +class IntegerBitString(_IntegerBitString, Constructable, Castable, Primitive): + """ + Represents a bit string in ASN.1 as a Python integer + """ + + tag = 3 + + def set(self, value): + """ + Sets the value of the object + + :param value: + An integer + + :raises: + ValueError - when an invalid value is passed + """ + + if not isinstance(value, int_types): + raise TypeError(unwrap( + ''' + %s value must be a positive integer, not %s + ''', + type_name(self), + type_name(value) + )) + + if value < 0: + raise ValueError(unwrap( + ''' + %s value must be a positive integer, not %d + ''', + type_name(self), + value + )) + + self._native = value + # Set the unused bits to 0 + self.contents = b'\x00' + int_to_bytes(value, signed=True) + self._unused_bits = () + self._header = None + if self._indefinite: + self._indefinite = False + self.method = 0 + if self._trailer != b'': + self._trailer = b'' + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + An integer or None + """ + + if self.contents is None: + return None + + if self._native is None: + self._native, __, self._unused_bits = self._chunks_to_int() + + return self._native + + +class OctetString(Constructable, Castable, Primitive): + """ + Represents a byte string in both ASN.1 and Python + """ + + tag = 4 + + # Instance attribute of (possibly-merged) byte string + _bytes = None + + def set(self, value): + """ + Sets the value of the object + + :param value: + A byte string + """ + + if not isinstance(value, byte_cls): + raise TypeError(unwrap( + ''' + %s value must be a byte string, not %s + ''', + type_name(self), + type_name(value) + )) + + self._bytes = value + self.contents = value + self._header = None + if self._indefinite: + self._indefinite = False + self.method = 0 + if self._trailer != b'': + self._trailer = b'' + + def __bytes__(self): + """ + :return: + A byte string + """ + + if self.contents is None: + return b'' + if self._bytes is None: + self._bytes = self._merge_chunks() + return self._bytes + + def _copy(self, other, copy_func): + """ + Copies the contents of another OctetString object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + super(OctetString, self)._copy(other, copy_func) + self._bytes = other._bytes + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + A byte string or None + """ + + if self.contents is None: + return None + + return self.__bytes__() + + +class IntegerOctetString(Constructable, Castable, Primitive): + """ + Represents a byte string in ASN.1 as a Python integer + """ + + tag = 4 + + # An explicit length in bytes the integer should be encoded to. This should + # generally not be used since DER defines a canonical encoding, however some + # use of this, such as when storing elliptic curve private keys, requires an + # exact number of bytes, even if the leading bytes are null. + _encoded_width = None + + def set(self, value): + """ + Sets the value of the object + + :param value: + An integer + + :raises: + ValueError - when an invalid value is passed + """ + + if not isinstance(value, int_types): + raise TypeError(unwrap( + ''' + %s value must be a positive integer, not %s + ''', + type_name(self), + type_name(value) + )) + + if value < 0: + raise ValueError(unwrap( + ''' + %s value must be a positive integer, not %d + ''', + type_name(self), + value + )) + + self._native = value + self.contents = int_to_bytes(value, signed=False, width=self._encoded_width) + self._header = None + if self._indefinite: + self._indefinite = False + self.method = 0 + if self._trailer != b'': + self._trailer = b'' + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + An integer or None + """ + + if self.contents is None: + return None + + if self._native is None: + self._native = int_from_bytes(self._merge_chunks()) + return self._native + + def set_encoded_width(self, width): + """ + Set the explicit enoding width for the integer + + :param width: + An integer byte width to encode the integer to + """ + + self._encoded_width = width + # Make sure the encoded value is up-to-date with the proper width + if self.contents is not None and len(self.contents) != width: + self.set(self.native) + + +class ParsableOctetString(Constructable, Castable, Primitive): + + tag = 4 + + _parsed = None + + # Instance attribute of (possibly-merged) byte string + _bytes = None + + def __init__(self, value=None, parsed=None, **kwargs): + """ + Allows providing a parsed object that will be serialized to get the + byte string value + + :param value: + A native Python datatype to initialize the object value with + + :param parsed: + If value is None and this is an Asn1Value object, this will be + set as the parsed value, and the value will be obtained by calling + .dump() on this object. + """ + + set_parsed = False + if value is None and parsed is not None and isinstance(parsed, Asn1Value): + value = parsed.dump() + set_parsed = True + + Primitive.__init__(self, value=value, **kwargs) + + if set_parsed: + self._parsed = (parsed, parsed.__class__, None) + + def set(self, value): + """ + Sets the value of the object + + :param value: + A byte string + """ + + if not isinstance(value, byte_cls): + raise TypeError(unwrap( + ''' + %s value must be a byte string, not %s + ''', + type_name(self), + type_name(value) + )) + + self._bytes = value + self.contents = value + self._header = None + if self._indefinite: + self._indefinite = False + self.method = 0 + if self._trailer != b'': + self._trailer = b'' + + def parse(self, spec=None, spec_params=None): + """ + Parses the contents generically, or using a spec with optional params + + :param spec: + A class derived from Asn1Value that defines what class_ and tag the + value should have, and the semantics of the encoded value. The + return value will be of this type. If omitted, the encoded value + will be decoded using the standard universal tag based on the + encoded tag number. + + :param spec_params: + A dict of params to pass to the spec object + + :return: + An object of the type spec, or if not present, a child of Asn1Value + """ + + if self._parsed is None or self._parsed[1:3] != (spec, spec_params): + parsed_value, _ = _parse_build(self.__bytes__(), spec=spec, spec_params=spec_params) + self._parsed = (parsed_value, spec, spec_params) + return self._parsed[0] + + def __bytes__(self): + """ + :return: + A byte string + """ + + if self.contents is None: + return b'' + if self._bytes is None: + self._bytes = self._merge_chunks() + return self._bytes + + def _setable_native(self): + """ + Returns a byte string that can be passed into .set() + + :return: + A python value that is valid to pass to .set() + """ + + return self.__bytes__() + + def _copy(self, other, copy_func): + """ + Copies the contents of another ParsableOctetString object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + super(ParsableOctetString, self)._copy(other, copy_func) + self._bytes = other._bytes + self._parsed = copy_func(other._parsed) + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + A byte string or None + """ + + if self.contents is None: + return None + + if self._parsed is not None: + return self._parsed[0].native + else: + return self.__bytes__() + + @property + def parsed(self): + """ + Returns the parsed object from .parse() + + :return: + The object returned by .parse() + """ + + if self._parsed is None: + self.parse() + + return self._parsed[0] + + def dump(self, force=False): + """ + Encodes the value using DER + + :param force: + If the encoded contents already exist, clear them and regenerate + to ensure they are in DER format instead of BER format + + :return: + A byte string of the DER-encoded value + """ + + # If the length is indefinite, force the re-encoding + if self._indefinite: + force = True + + if force: + if self._parsed is not None: + native = self.parsed.dump(force=force) + else: + native = self.native + self.contents = None + self.set(native) + + return Asn1Value.dump(self) + + +class ParsableOctetBitString(ParsableOctetString): + + tag = 3 + + def set(self, value): + """ + Sets the value of the object + + :param value: + A byte string + + :raises: + ValueError - when an invalid value is passed + """ + + if not isinstance(value, byte_cls): + raise TypeError(unwrap( + ''' + %s value must be a byte string, not %s + ''', + type_name(self), + type_name(value) + )) + + self._bytes = value + # Set the unused bits to 0 + self.contents = b'\x00' + value + self._header = None + if self._indefinite: + self._indefinite = False + self.method = 0 + if self._trailer != b'': + self._trailer = b'' + + def _as_chunk(self): + """ + Allows reconstructing indefinite length values + + :raises: + ValueError - when an invalid value is passed + + :return: + A byte string + """ + + unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0] + if unused_bits_len: + raise ValueError('ParsableOctetBitString should have no unused bits') + + return self.contents[1:] + + +class Null(Primitive): + """ + Represents a null value in ASN.1 as None in Python + """ + + tag = 5 + + contents = b'' + + def set(self, value): + """ + Sets the value of the object + + :param value: + None + """ + + self.contents = b'' + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + None + """ + + return None + + +class ObjectIdentifier(Primitive, ValueMap): + """ + Represents an object identifier in ASN.1 as a Python unicode dotted + integer string + """ + + tag = 6 + + # A unicode string of the dotted form of the object identifier + _dotted = None + + @classmethod + def map(cls, value): + """ + Converts a dotted unicode string OID into a mapped unicode string + + :param value: + A dotted unicode string OID + + :raises: + ValueError - when no _map dict has been defined on the class + TypeError - when value is not a unicode string + + :return: + A mapped unicode string + """ + + if cls._map is None: + raise ValueError(unwrap( + ''' + %s._map has not been defined + ''', + type_name(cls) + )) + + if not isinstance(value, str_cls): + raise TypeError(unwrap( + ''' + value must be a unicode string, not %s + ''', + type_name(value) + )) + + return cls._map.get(value, value) + + @classmethod + def unmap(cls, value): + """ + Converts a mapped unicode string value into a dotted unicode string OID + + :param value: + A mapped unicode string OR dotted unicode string OID + + :raises: + ValueError - when no _map dict has been defined on the class or the value can't be unmapped + TypeError - when value is not a unicode string + + :return: + A dotted unicode string OID + """ + + if cls not in _SETUP_CLASSES: + cls()._setup() + _SETUP_CLASSES[cls] = True + + if cls._map is None: + raise ValueError(unwrap( + ''' + %s._map has not been defined + ''', + type_name(cls) + )) + + if not isinstance(value, str_cls): + raise TypeError(unwrap( + ''' + value must be a unicode string, not %s + ''', + type_name(value) + )) + + if value in cls._reverse_map: + return cls._reverse_map[value] + + if not _OID_RE.match(value): + raise ValueError(unwrap( + ''' + %s._map does not contain an entry for "%s" + ''', + type_name(cls), + value + )) + + return value + + def set(self, value): + """ + Sets the value of the object + + :param value: + A unicode string. May be a dotted integer string, or if _map is + provided, one of the mapped values. + + :raises: + ValueError - when an invalid value is passed + """ + + if not isinstance(value, str_cls): + raise TypeError(unwrap( + ''' + %s value must be a unicode string, not %s + ''', + type_name(self), + type_name(value) + )) + + self._native = value + + if self._map is not None: + if value in self._reverse_map: + value = self._reverse_map[value] + + self.contents = b'' + first = None + for index, part in enumerate(value.split('.')): + part = int(part) + + # The first two parts are merged into a single byte + if index == 0: + first = part + continue + elif index == 1: + if first > 2: + raise ValueError(unwrap( + ''' + First arc must be one of 0, 1 or 2, not %s + ''', + repr(first) + )) + elif first < 2 and part >= 40: + raise ValueError(unwrap( + ''' + Second arc must be less than 40 if first arc is 0 or + 1, not %s + ''', + repr(part) + )) + part = (first * 40) + part + + encoded_part = chr_cls(0x7F & part) + part = part >> 7 + while part > 0: + encoded_part = chr_cls(0x80 | (0x7F & part)) + encoded_part + part = part >> 7 + self.contents += encoded_part + + self._header = None + if self._trailer != b'': + self._trailer = b'' + + def __unicode__(self): + """ + :return: + A unicode string + """ + + return self.dotted + + @property + def dotted(self): + """ + :return: + A unicode string of the object identifier in dotted notation, thus + ignoring any mapped value + """ + + if self._dotted is None: + output = [] + + part = 0 + for byte in self.contents: + if _PY2: + byte = ord(byte) + part = part * 128 + part += byte & 127 + # Last byte in subidentifier has the eighth bit set to 0 + if byte & 0x80 == 0: + if len(output) == 0: + if part >= 80: + output.append(str_cls(2)) + output.append(str_cls(part - 80)) + elif part >= 40: + output.append(str_cls(1)) + output.append(str_cls(part - 40)) + else: + output.append(str_cls(0)) + output.append(str_cls(part)) + else: + output.append(str_cls(part)) + part = 0 + + self._dotted = '.'.join(output) + return self._dotted + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + A unicode string or None. If _map is not defined, the unicode string + is a string of dotted integers. If _map is defined and the dotted + string is present in the _map, the mapped value is returned. + """ + + if self.contents is None: + return None + + if self._native is None: + self._native = self.dotted + if self._map is not None and self._native in self._map: + self._native = self._map[self._native] + return self._native + + +class ObjectDescriptor(Primitive): + """ + Represents an object descriptor from ASN.1 - no Python implementation + """ + + tag = 7 + + +class InstanceOf(Primitive): + """ + Represents an instance from ASN.1 - no Python implementation + """ + + tag = 8 + + +class Real(Primitive): + """ + Represents a real number from ASN.1 - no Python implementation + """ + + tag = 9 + + +class Enumerated(Integer): + """ + Represents a enumerated list of integers from ASN.1 as a Python + unicode string + """ + + tag = 10 + + def set(self, value): + """ + Sets the value of the object + + :param value: + An integer or a unicode string from _map + + :raises: + ValueError - when an invalid value is passed + """ + + if not isinstance(value, int_types) and not isinstance(value, str_cls): + raise TypeError(unwrap( + ''' + %s value must be an integer or a unicode string, not %s + ''', + type_name(self), + type_name(value) + )) + + if isinstance(value, str_cls): + if value not in self._reverse_map: + raise ValueError(unwrap( + ''' + %s value "%s" is not a valid value + ''', + type_name(self), + value + )) + + value = self._reverse_map[value] + + elif value not in self._map: + raise ValueError(unwrap( + ''' + %s value %s is not a valid value + ''', + type_name(self), + value + )) + + Integer.set(self, value) + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + A unicode string or None + """ + + if self.contents is None: + return None + + if self._native is None: + self._native = self._map[self.__int__()] + return self._native + + +class UTF8String(AbstractString): + """ + Represents a UTF-8 string from ASN.1 as a Python unicode string + """ + + tag = 12 + _encoding = 'utf-8' + + +class RelativeOid(ObjectIdentifier): + """ + Represents an object identifier in ASN.1 as a Python unicode dotted + integer string + """ + + tag = 13 + + +class Sequence(Asn1Value): + """ + Represents a sequence of fields from ASN.1 as a Python object with a + dict-like interface + """ + + tag = 16 + + class_ = 0 + method = 1 + + # A list of child objects, in order of _fields + children = None + + # Sequence overrides .contents to be a property so that the mutated state + # of child objects can be checked to ensure everything is up-to-date + _contents = None + + # Variable to track if the object has been mutated + _mutated = False + + # A list of tuples in one of the following forms. + # + # Option 1, a unicode string field name and a value class + # + # ("name", Asn1ValueClass) + # + # Option 2, same as Option 1, but with a dict of class params + # + # ("name", Asn1ValueClass, {'explicit': 5}) + _fields = [] + + # A dict with keys being the name of a field and the value being a unicode + # string of the method name on self to call to get the spec for that field + _spec_callbacks = None + + # A dict that maps unicode string field names to an index in _fields + _field_map = None + + # A list in the same order as _fields that has tuples in the form (class_, tag) + _field_ids = None + + # An optional 2-element tuple that defines the field names of an OID field + # and the field that the OID should be used to help decode. Works with the + # _oid_specs attribute. + _oid_pair = None + + # A dict with keys that are unicode string OID values and values that are + # Asn1Value classes to use for decoding a variable-type field. + _oid_specs = None + + # A 2-element tuple of the indexes in _fields of the OID and value fields + _oid_nums = None + + # Predetermined field specs to optimize away calls to _determine_spec() + _precomputed_specs = None + + def __init__(self, value=None, default=None, **kwargs): + """ + Allows setting field values before passing everything else along to + Asn1Value.__init__() + + :param value: + A native Python datatype to initialize the object value with + + :param default: + The default value if no value is specified + """ + + Asn1Value.__init__(self, **kwargs) + + check_existing = False + if value is None and default is not None: + check_existing = True + if self.children is None: + if self.contents is None: + check_existing = False + else: + self._parse_children() + value = default + + if value is not None: + try: + # Fields are iterated in definition order to allow things like + # OID-based specs. Otherwise sometimes the value would be processed + # before the OID field, resulting in invalid value object creation. + if self._fields: + keys = [info[0] for info in self._fields] + unused_keys = set(value.keys()) + else: + keys = value.keys() + unused_keys = set(keys) + + for key in keys: + # If we are setting defaults, but a real value has already + # been set for the field, then skip it + if check_existing: + index = self._field_map[key] + if index < len(self.children) and self.children[index] is not VOID: + if key in unused_keys: + unused_keys.remove(key) + continue + + if key in value: + self.__setitem__(key, value[key]) + unused_keys.remove(key) + + if len(unused_keys): + raise ValueError(unwrap( + ''' + One or more unknown fields was passed to the constructor + of %s: %s + ''', + type_name(self), + ', '.join(sorted(list(unused_keys))) + )) + + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args + raise e + + @property + def contents(self): + """ + :return: + A byte string of the DER-encoded contents of the sequence + """ + + if self.children is None: + return self._contents + + if self._is_mutated(): + self._set_contents() + + return self._contents + + @contents.setter + def contents(self, value): + """ + :param value: + A byte string of the DER-encoded contents of the sequence + """ + + self._contents = value + + def _is_mutated(self): + """ + :return: + A boolean - if the sequence or any children (recursively) have been + mutated + """ + + mutated = self._mutated + if self.children is not None: + for child in self.children: + if isinstance(child, Sequence) or isinstance(child, SequenceOf): + mutated = mutated or child._is_mutated() + + return mutated + + def _lazy_child(self, index): + """ + Builds a child object if the child has only been parsed into a tuple so far + """ + + child = self.children[index] + if child.__class__ == tuple: + child = self.children[index] = _build(*child) + return child + + def __len__(self): + """ + :return: + Integer + """ + # We inline this check to prevent method invocation each time + if self.children is None: + self._parse_children() + + return len(self.children) + + def __getitem__(self, key): + """ + Allows accessing fields by name or index + + :param key: + A unicode string of the field name, or an integer of the field index + + :raises: + KeyError - when a field name or index is invalid + + :return: + The Asn1Value object of the field specified + """ + + # We inline this check to prevent method invocation each time + if self.children is None: + self._parse_children() + + if not isinstance(key, int_types): + if key not in self._field_map: + raise KeyError(unwrap( + ''' + No field named "%s" defined for %s + ''', + key, + type_name(self) + )) + key = self._field_map[key] + + if key >= len(self.children): + raise KeyError(unwrap( + ''' + No field numbered %s is present in this %s + ''', + key, + type_name(self) + )) + + try: + return self._lazy_child(key) + + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args + raise e + + def __setitem__(self, key, value): + """ + Allows settings fields by name or index + + :param key: + A unicode string of the field name, or an integer of the field index + + :param value: + A native Python datatype to set the field value to. This method will + construct the appropriate Asn1Value object from _fields. + + :raises: + ValueError - when a field name or index is invalid + """ + + # We inline this check to prevent method invocation each time + if self.children is None: + self._parse_children() + + if not isinstance(key, int_types): + if key not in self._field_map: + raise KeyError(unwrap( + ''' + No field named "%s" defined for %s + ''', + key, + type_name(self) + )) + key = self._field_map[key] + + field_name, field_spec, value_spec, field_params, _ = self._determine_spec(key) + + new_value = self._make_value(field_name, field_spec, value_spec, field_params, value) + + invalid_value = False + if isinstance(new_value, Any): + invalid_value = new_value.parsed is None + else: + invalid_value = new_value.contents is None + + if invalid_value: + raise ValueError(unwrap( + ''' + Value for field "%s" of %s is not set + ''', + field_name, + type_name(self) + )) + + self.children[key] = new_value + + if self._native is not None: + self._native[self._fields[key][0]] = self.children[key].native + self._mutated = True + + def __delitem__(self, key): + """ + Allows deleting optional or default fields by name or index + + :param key: + A unicode string of the field name, or an integer of the field index + + :raises: + ValueError - when a field name or index is invalid, or the field is not optional or defaulted + """ + + # We inline this check to prevent method invocation each time + if self.children is None: + self._parse_children() + + if not isinstance(key, int_types): + if key not in self._field_map: + raise KeyError(unwrap( + ''' + No field named "%s" defined for %s + ''', + key, + type_name(self) + )) + key = self._field_map[key] + + name, _, params = self._fields[key] + if not params or ('default' not in params and 'optional' not in params): + raise ValueError(unwrap( + ''' + Can not delete the value for the field "%s" of %s since it is + not optional or defaulted + ''', + name, + type_name(self) + )) + + if 'optional' in params: + self.children[key] = VOID + if self._native is not None: + self._native[name] = None + else: + self.__setitem__(key, None) + self._mutated = True + + def __iter__(self): + """ + :return: + An iterator of field key names + """ + + for info in self._fields: + yield info[0] + + def _set_contents(self, force=False): + """ + Updates the .contents attribute of the value with the encoded value of + all of the child objects + + :param force: + Ensure all contents are in DER format instead of possibly using + cached BER-encoded data + """ + + if self.children is None: + self._parse_children() + + contents = BytesIO() + for index, info in enumerate(self._fields): + child = self.children[index] + if child is None: + child_dump = b'' + elif child.__class__ == tuple: + if force: + child_dump = self._lazy_child(index).dump(force=force) + else: + child_dump = child[3] + child[4] + child[5] + else: + child_dump = child.dump(force=force) + # Skip values that are the same as the default + if info[2] and 'default' in info[2]: + default_value = info[1](**info[2]) + if default_value.dump() == child_dump: + continue + contents.write(child_dump) + self._contents = contents.getvalue() + + self._header = None + if self._trailer != b'': + self._trailer = b'' + + def _setup(self): + """ + Generates _field_map, _field_ids and _oid_nums for use in parsing + """ + + cls = self.__class__ + cls._field_map = {} + cls._field_ids = [] + cls._precomputed_specs = [] + for index, field in enumerate(cls._fields): + if len(field) < 3: + field = field + ({},) + cls._fields[index] = field + cls._field_map[field[0]] = index + cls._field_ids.append(_build_id_tuple(field[2], field[1])) + + if cls._oid_pair is not None: + cls._oid_nums = (cls._field_map[cls._oid_pair[0]], cls._field_map[cls._oid_pair[1]]) + + for index, field in enumerate(cls._fields): + has_callback = cls._spec_callbacks is not None and field[0] in cls._spec_callbacks + is_mapped_oid = cls._oid_nums is not None and cls._oid_nums[1] == index + if has_callback or is_mapped_oid: + cls._precomputed_specs.append(None) + else: + cls._precomputed_specs.append((field[0], field[1], field[1], field[2], None)) + + def _determine_spec(self, index): + """ + Determine how a value for a field should be constructed + + :param index: + The field number + + :return: + A tuple containing the following elements: + - unicode string of the field name + - Asn1Value class of the field spec + - Asn1Value class of the value spec + - None or dict of params to pass to the field spec + - None or Asn1Value class indicating the value spec was derived from an OID or a spec callback + """ + + name, field_spec, field_params = self._fields[index] + value_spec = field_spec + spec_override = None + + if self._spec_callbacks is not None and name in self._spec_callbacks: + callback = self._spec_callbacks[name] + spec_override = callback(self) + if spec_override: + # Allow a spec callback to specify both the base spec and + # the override, for situations such as OctetString and parse_as + if spec_override.__class__ == tuple and len(spec_override) == 2: + field_spec, value_spec = spec_override + if value_spec is None: + value_spec = field_spec + spec_override = None + # When no field spec is specified, use a single return value as that + elif field_spec is None: + field_spec = spec_override + value_spec = field_spec + spec_override = None + else: + value_spec = spec_override + + elif self._oid_nums is not None and self._oid_nums[1] == index: + oid = self._lazy_child(self._oid_nums[0]).native + if oid in self._oid_specs: + spec_override = self._oid_specs[oid] + value_spec = spec_override + + return (name, field_spec, value_spec, field_params, spec_override) + + def _make_value(self, field_name, field_spec, value_spec, field_params, value): + """ + Contructs an appropriate Asn1Value object for a field + + :param field_name: + A unicode string of the field name + + :param field_spec: + An Asn1Value class that is the field spec + + :param value_spec: + An Asn1Value class that is the vaue spec + + :param field_params: + None or a dict of params for the field spec + + :param value: + The value to construct an Asn1Value object from + + :return: + An instance of a child class of Asn1Value + """ + + if value is None and 'optional' in field_params: + return VOID + + specs_different = field_spec != value_spec + is_any = issubclass(field_spec, Any) + + if issubclass(value_spec, Choice): + is_asn1value = isinstance(value, Asn1Value) + is_tuple = isinstance(value, tuple) and len(value) == 2 + is_dict = isinstance(value, dict) and len(value) == 1 + if not is_asn1value and not is_tuple and not is_dict: + raise ValueError(unwrap( + ''' + Can not set a native python value to %s, which has the + choice type of %s - value must be an instance of Asn1Value + ''', + field_name, + type_name(value_spec) + )) + if is_tuple or is_dict: + value = value_spec(value) + if not isinstance(value, value_spec): + wrapper = value_spec() + wrapper.validate(value.class_, value.tag, value.contents) + wrapper._parsed = value + new_value = wrapper + else: + new_value = value + + elif isinstance(value, field_spec): + new_value = value + if specs_different: + new_value.parse(value_spec) + + elif (not specs_different or is_any) and not isinstance(value, value_spec): + if (not is_any or specs_different) and isinstance(value, Asn1Value): + raise TypeError(unwrap( + ''' + %s value must be %s, not %s + ''', + field_name, + type_name(value_spec), + type_name(value) + )) + new_value = value_spec(value, **field_params) + + else: + if isinstance(value, value_spec): + new_value = value + else: + if isinstance(value, Asn1Value): + raise TypeError(unwrap( + ''' + %s value must be %s, not %s + ''', + field_name, + type_name(value_spec), + type_name(value) + )) + new_value = value_spec(value) + + # For when the field is OctetString or OctetBitString with embedded + # values we need to wrap the value in the field spec to get the + # appropriate encoded value. + if specs_different and not is_any: + wrapper = field_spec(value=new_value.dump(), **field_params) + wrapper._parsed = (new_value, new_value.__class__, None) + new_value = wrapper + + new_value = _fix_tagging(new_value, field_params) + + return new_value + + def _parse_children(self, recurse=False): + """ + Parses the contents and generates Asn1Value objects based on the + definitions from _fields. + + :param recurse: + If child objects that are Sequence or SequenceOf objects should + be recursively parsed + + :raises: + ValueError - when an error occurs parsing child objects + """ + + cls = self.__class__ + if self._contents is None: + if self._fields: + self.children = [VOID] * len(self._fields) + for index, (_, _, params) in enumerate(self._fields): + if 'default' in params: + if cls._precomputed_specs[index]: + field_name, field_spec, value_spec, field_params, _ = cls._precomputed_specs[index] + else: + field_name, field_spec, value_spec, field_params, _ = self._determine_spec(index) + self.children[index] = self._make_value(field_name, field_spec, value_spec, field_params, None) + return + + try: + self.children = [] + contents_length = len(self._contents) + child_pointer = 0 + field = 0 + field_len = len(self._fields) + parts = None + again = child_pointer < contents_length + while again: + if parts is None: + parts, child_pointer = _parse(self._contents, contents_length, pointer=child_pointer) + again = child_pointer < contents_length + + if field < field_len: + _, field_spec, value_spec, field_params, spec_override = ( + cls._precomputed_specs[field] or self._determine_spec(field)) + + # If the next value is optional or default, allow it to be absent + if field_params and ('optional' in field_params or 'default' in field_params): + if self._field_ids[field] != (parts[0], parts[2]) and field_spec != Any: + + # See if the value is a valid choice before assuming + # that we have a missing optional or default value + choice_match = False + if issubclass(field_spec, Choice): + try: + tester = field_spec(**field_params) + tester.validate(parts[0], parts[2], parts[4]) + choice_match = True + except (ValueError): + pass + + if not choice_match: + if 'optional' in field_params: + self.children.append(VOID) + else: + self.children.append(field_spec(**field_params)) + field += 1 + again = True + continue + + if field_spec is None or (spec_override and issubclass(field_spec, Any)): + field_spec = value_spec + spec_override = None + + if spec_override: + child = parts + (field_spec, field_params, value_spec) + else: + child = parts + (field_spec, field_params) + + # Handle situations where an optional or defaulted field definition is incorrect + elif field_len > 0 and field + 1 <= field_len: + missed_fields = [] + prev_field = field - 1 + while prev_field >= 0: + prev_field_info = self._fields[prev_field] + if len(prev_field_info) < 3: + break + if 'optional' in prev_field_info[2] or 'default' in prev_field_info[2]: + missed_fields.append(prev_field_info[0]) + prev_field -= 1 + plural = 's' if len(missed_fields) > 1 else '' + missed_field_names = ', '.join(missed_fields) + raise ValueError(unwrap( + ''' + Data for field %s (%s class, %s method, tag %s) does + not match the field definition%s of %s + ''', + field + 1, + CLASS_NUM_TO_NAME_MAP.get(parts[0]), + METHOD_NUM_TO_NAME_MAP.get(parts[1]), + parts[2], + plural, + missed_field_names + )) + + else: + child = parts + + if recurse: + child = _build(*child) + if isinstance(child, (Sequence, SequenceOf)): + child._parse_children(recurse=True) + + self.children.append(child) + field += 1 + parts = None + + index = len(self.children) + while index < field_len: + name, field_spec, field_params = self._fields[index] + if 'default' in field_params: + self.children.append(field_spec(**field_params)) + elif 'optional' in field_params: + self.children.append(VOID) + else: + raise ValueError(unwrap( + ''' + Field "%s" is missing from structure + ''', + name + )) + index += 1 + + except (ValueError, TypeError) as e: + self.children = None + args = e.args[1:] + e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args + raise e + + def spec(self, field_name): + """ + Determines the spec to use for the field specified. Depending on how + the spec is determined (_oid_pair or _spec_callbacks), it may be + necessary to set preceding field values before calling this. Usually + specs, if dynamic, are controlled by a preceding ObjectIdentifier + field. + + :param field_name: + A unicode string of the field name to get the spec for + + :return: + A child class of asn1crypto.core.Asn1Value that the field must be + encoded using + """ + + if not isinstance(field_name, str_cls): + raise TypeError(unwrap( + ''' + field_name must be a unicode string, not %s + ''', + type_name(field_name) + )) + + if self._fields is None: + raise ValueError(unwrap( + ''' + Unable to retrieve spec for field %s in the class %s because + _fields has not been set + ''', + repr(field_name), + type_name(self) + )) + + index = self._field_map[field_name] + info = self._determine_spec(index) + + return info[2] + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + An OrderedDict or None. If an OrderedDict, all child values are + recursively converted to native representation also. + """ + + if self.contents is None: + return None + + if self._native is None: + if self.children is None: + self._parse_children(recurse=True) + try: + self._native = OrderedDict() + for index, child in enumerate(self.children): + if child.__class__ == tuple: + child = _build(*child) + self.children[index] = child + try: + name = self._fields[index][0] + except (IndexError): + name = str_cls(index) + self._native[name] = child.native + except (ValueError, TypeError) as e: + self._native = None + args = e.args[1:] + e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args + raise e + return self._native + + def _copy(self, other, copy_func): + """ + Copies the contents of another Sequence object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + super(Sequence, self)._copy(other, copy_func) + if self.children is not None: + self.children = [] + for child in other.children: + if child.__class__ == tuple: + self.children.append(child) + else: + self.children.append(child.copy()) + + def debug(self, nest_level=1): + """ + Show the binary data and parsed data in a tree structure + """ + + if self.children is None: + self._parse_children() + + prefix = ' ' * nest_level + _basic_debug(prefix, self) + for field_name in self: + child = self._lazy_child(self._field_map[field_name]) + if child is not VOID: + print('%s Field "%s"' % (prefix, field_name)) + child.debug(nest_level + 3) + + def dump(self, force=False): + """ + Encodes the value using DER + + :param force: + If the encoded contents already exist, clear them and regenerate + to ensure they are in DER format instead of BER format + + :return: + A byte string of the DER-encoded value + """ + + # If the length is indefinite, force the re-encoding + if self._header is not None and self._header[-1:] == b'\x80': + force = True + + # We can't force encoding if we don't have a spec + if force and self._fields == [] and self.__class__ is Sequence: + force = False + + if force: + self._set_contents(force=force) + + if self._fields and self.children is not None: + for index, (field_name, _, params) in enumerate(self._fields): + if self.children[index] is not VOID: + continue + if 'default' in params or 'optional' in params: + continue + raise ValueError(unwrap( + ''' + Field "%s" is missing from structure + ''', + field_name + )) + + return Asn1Value.dump(self) + + +class SequenceOf(Asn1Value): + """ + Represents a sequence (ordered) of a single type of values from ASN.1 as a + Python object with a list-like interface + """ + + tag = 16 + + class_ = 0 + method = 1 + + # A list of child objects + children = None + + # SequenceOf overrides .contents to be a property so that the mutated state + # of child objects can be checked to ensure everything is up-to-date + _contents = None + + # Variable to track if the object has been mutated + _mutated = False + + # An Asn1Value class to use when parsing children + _child_spec = None + + def __init__(self, value=None, default=None, contents=None, spec=None, **kwargs): + """ + Allows setting child objects and the _child_spec via the spec parameter + before passing everything else along to Asn1Value.__init__() + + :param value: + A native Python datatype to initialize the object value with + + :param default: + The default value if no value is specified + + :param contents: + A byte string of the encoded contents of the value + + :param spec: + A class derived from Asn1Value to use to parse children + """ + + if spec: + self._child_spec = spec + + Asn1Value.__init__(self, **kwargs) + + try: + if contents is not None: + self.contents = contents + else: + if value is None and default is not None: + value = default + + if value is not None: + for index, child in enumerate(value): + self.__setitem__(index, child) + + # Make sure a blank list is serialized + if self.contents is None: + self._set_contents() + + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while constructing %s' % type_name(self),) + args + raise e + + @property + def contents(self): + """ + :return: + A byte string of the DER-encoded contents of the sequence + """ + + if self.children is None: + return self._contents + + if self._is_mutated(): + self._set_contents() + + return self._contents + + @contents.setter + def contents(self, value): + """ + :param value: + A byte string of the DER-encoded contents of the sequence + """ + + self._contents = value + + def _is_mutated(self): + """ + :return: + A boolean - if the sequence or any children (recursively) have been + mutated + """ + + mutated = self._mutated + if self.children is not None: + for child in self.children: + if isinstance(child, Sequence) or isinstance(child, SequenceOf): + mutated = mutated or child._is_mutated() + + return mutated + + def _lazy_child(self, index): + """ + Builds a child object if the child has only been parsed into a tuple so far + """ + + child = self.children[index] + if child.__class__ == tuple: + child = _build(*child) + self.children[index] = child + return child + + def _make_value(self, value): + """ + Constructs a _child_spec value from a native Python data type, or + an appropriate Asn1Value object + + :param value: + A native Python value, or some child of Asn1Value + + :return: + An object of type _child_spec + """ + + if isinstance(value, self._child_spec): + new_value = value + + elif issubclass(self._child_spec, Any): + if isinstance(value, Asn1Value): + new_value = value + else: + raise ValueError(unwrap( + ''' + Can not set a native python value to %s where the + _child_spec is Any - value must be an instance of Asn1Value + ''', + type_name(self) + )) + + elif issubclass(self._child_spec, Choice): + if not isinstance(value, Asn1Value): + raise ValueError(unwrap( + ''' + Can not set a native python value to %s where the + _child_spec is the choice type %s - value must be an + instance of Asn1Value + ''', + type_name(self), + self._child_spec.__name__ + )) + if not isinstance(value, self._child_spec): + wrapper = self._child_spec() + wrapper.validate(value.class_, value.tag, value.contents) + wrapper._parsed = value + value = wrapper + new_value = value + + else: + return self._child_spec(value=value) + + params = {} + if self._child_spec.explicit: + params['explicit'] = self._child_spec.explicit + if self._child_spec.implicit: + params['implicit'] = (self._child_spec.class_, self._child_spec.tag) + return _fix_tagging(new_value, params) + + def __len__(self): + """ + :return: + An integer + """ + # We inline this checks to prevent method invocation each time + if self.children is None: + self._parse_children() + + return len(self.children) + + def __getitem__(self, key): + """ + Allows accessing children via index + + :param key: + Integer index of child + """ + + # We inline this checks to prevent method invocation each time + if self.children is None: + self._parse_children() + + return self._lazy_child(key) + + def __setitem__(self, key, value): + """ + Allows overriding a child via index + + :param key: + Integer index of child + + :param value: + Native python datatype that will be passed to _child_spec to create + new child object + """ + + # We inline this checks to prevent method invocation each time + if self.children is None: + self._parse_children() + + new_value = self._make_value(value) + + # If adding at the end, create a space for the new value + if key == len(self.children): + self.children.append(None) + if self._native is not None: + self._native.append(None) + + self.children[key] = new_value + + if self._native is not None: + self._native[key] = self.children[key].native + + self._mutated = True + + def __delitem__(self, key): + """ + Allows removing a child via index + + :param key: + Integer index of child + """ + + # We inline this checks to prevent method invocation each time + if self.children is None: + self._parse_children() + + self.children.pop(key) + if self._native is not None: + self._native.pop(key) + + self._mutated = True + + def __iter__(self): + """ + :return: + An iter() of child objects + """ + + # We inline this checks to prevent method invocation each time + if self.children is None: + self._parse_children() + + for index in range(0, len(self.children)): + yield self._lazy_child(index) + + def __contains__(self, item): + """ + :param item: + An object of the type cls._child_spec + + :return: + A boolean if the item is contained in this SequenceOf + """ + + if item is None or item is VOID: + return False + + if not isinstance(item, self._child_spec): + raise TypeError(unwrap( + ''' + Checking membership in %s is only available for instances of + %s, not %s + ''', + type_name(self), + type_name(self._child_spec), + type_name(item) + )) + + for child in self: + if child == item: + return True + + return False + + def append(self, value): + """ + Allows adding a child to the end of the sequence + + :param value: + Native python datatype that will be passed to _child_spec to create + new child object + """ + + # We inline this checks to prevent method invocation each time + if self.children is None: + self._parse_children() + + self.children.append(self._make_value(value)) + + if self._native is not None: + self._native.append(self.children[-1].native) + + self._mutated = True + + def _set_contents(self, force=False): + """ + Encodes all child objects into the contents for this object + + :param force: + Ensure all contents are in DER format instead of possibly using + cached BER-encoded data + """ + + if self.children is None: + self._parse_children() + + contents = BytesIO() + for child in self: + contents.write(child.dump(force=force)) + self._contents = contents.getvalue() + self._header = None + if self._trailer != b'': + self._trailer = b'' + + def _parse_children(self, recurse=False): + """ + Parses the contents and generates Asn1Value objects based on the + definitions from _child_spec. + + :param recurse: + If child objects that are Sequence or SequenceOf objects should + be recursively parsed + + :raises: + ValueError - when an error occurs parsing child objects + """ + + try: + self.children = [] + if self._contents is None: + return + contents_length = len(self._contents) + child_pointer = 0 + while child_pointer < contents_length: + parts, child_pointer = _parse(self._contents, contents_length, pointer=child_pointer) + if self._child_spec: + child = parts + (self._child_spec,) + else: + child = parts + if recurse: + child = _build(*child) + if isinstance(child, (Sequence, SequenceOf)): + child._parse_children(recurse=True) + self.children.append(child) + except (ValueError, TypeError) as e: + self.children = None + args = e.args[1:] + e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args + raise e + + def spec(self): + """ + Determines the spec to use for child values. + + :return: + A child class of asn1crypto.core.Asn1Value that child values must be + encoded using + """ + + return self._child_spec + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + A list or None. If a list, all child values are recursively + converted to native representation also. + """ + + if self.contents is None: + return None + + if self._native is None: + if self.children is None: + self._parse_children(recurse=True) + try: + self._native = [child.native for child in self] + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args + raise e + return self._native + + def _copy(self, other, copy_func): + """ + Copies the contents of another SequenceOf object to itself + + :param object: + Another instance of the same class + + :param copy_func: + An reference of copy.copy() or copy.deepcopy() to use when copying + lists, dicts and objects + """ + + super(SequenceOf, self)._copy(other, copy_func) + if self.children is not None: + self.children = [] + for child in other.children: + if child.__class__ == tuple: + self.children.append(child) + else: + self.children.append(child.copy()) + + def debug(self, nest_level=1): + """ + Show the binary data and parsed data in a tree structure + """ + + if self.children is None: + self._parse_children() + + prefix = ' ' * nest_level + _basic_debug(prefix, self) + for child in self: + child.debug(nest_level + 1) + + def dump(self, force=False): + """ + Encodes the value using DER + + :param force: + If the encoded contents already exist, clear them and regenerate + to ensure they are in DER format instead of BER format + + :return: + A byte string of the DER-encoded value + """ + + # If the length is indefinite, force the re-encoding + if self._header is not None and self._header[-1:] == b'\x80': + force = True + + if force: + self._set_contents(force=force) + + return Asn1Value.dump(self) + + +class Set(Sequence): + """ + Represents a set of fields (unordered) from ASN.1 as a Python object with a + dict-like interface + """ + + method = 1 + class_ = 0 + tag = 17 + + # A dict of 2-element tuples in the form (class_, tag) as keys and integers + # as values that are the index of the field in _fields + _field_ids = None + + def _setup(self): + """ + Generates _field_map, _field_ids and _oid_nums for use in parsing + """ + + cls = self.__class__ + cls._field_map = {} + cls._field_ids = {} + cls._precomputed_specs = [] + for index, field in enumerate(cls._fields): + if len(field) < 3: + field = field + ({},) + cls._fields[index] = field + cls._field_map[field[0]] = index + cls._field_ids[_build_id_tuple(field[2], field[1])] = index + + if cls._oid_pair is not None: + cls._oid_nums = (cls._field_map[cls._oid_pair[0]], cls._field_map[cls._oid_pair[1]]) + + for index, field in enumerate(cls._fields): + has_callback = cls._spec_callbacks is not None and field[0] in cls._spec_callbacks + is_mapped_oid = cls._oid_nums is not None and cls._oid_nums[1] == index + if has_callback or is_mapped_oid: + cls._precomputed_specs.append(None) + else: + cls._precomputed_specs.append((field[0], field[1], field[1], field[2], None)) + + def _parse_children(self, recurse=False): + """ + Parses the contents and generates Asn1Value objects based on the + definitions from _fields. + + :param recurse: + If child objects that are Sequence or SequenceOf objects should + be recursively parsed + + :raises: + ValueError - when an error occurs parsing child objects + """ + + cls = self.__class__ + if self._contents is None: + if self._fields: + self.children = [VOID] * len(self._fields) + for index, (_, _, params) in enumerate(self._fields): + if 'default' in params: + if cls._precomputed_specs[index]: + field_name, field_spec, value_spec, field_params, _ = cls._precomputed_specs[index] + else: + field_name, field_spec, value_spec, field_params, _ = self._determine_spec(index) + self.children[index] = self._make_value(field_name, field_spec, value_spec, field_params, None) + return + + try: + child_map = {} + contents_length = len(self.contents) + child_pointer = 0 + seen_field = 0 + while child_pointer < contents_length: + parts, child_pointer = _parse(self.contents, contents_length, pointer=child_pointer) + + id_ = (parts[0], parts[2]) + + field = self._field_ids.get(id_) + if field is None: + raise ValueError(unwrap( + ''' + Data for field %s (%s class, %s method, tag %s) does + not match any of the field definitions + ''', + seen_field, + CLASS_NUM_TO_NAME_MAP.get(parts[0]), + METHOD_NUM_TO_NAME_MAP.get(parts[1]), + parts[2], + )) + + _, field_spec, value_spec, field_params, spec_override = ( + cls._precomputed_specs[field] or self._determine_spec(field)) + + if field_spec is None or (spec_override and issubclass(field_spec, Any)): + field_spec = value_spec + spec_override = None + + if spec_override: + child = parts + (field_spec, field_params, value_spec) + else: + child = parts + (field_spec, field_params) + + if recurse: + child = _build(*child) + if isinstance(child, (Sequence, SequenceOf)): + child._parse_children(recurse=True) + + child_map[field] = child + seen_field += 1 + + total_fields = len(self._fields) + + for index in range(0, total_fields): + if index in child_map: + continue + + name, field_spec, value_spec, field_params, spec_override = ( + cls._precomputed_specs[index] or self._determine_spec(index)) + + if field_spec is None or (spec_override and issubclass(field_spec, Any)): + field_spec = value_spec + spec_override = None + + missing = False + + if not field_params: + missing = True + elif 'optional' not in field_params and 'default' not in field_params: + missing = True + elif 'optional' in field_params: + child_map[index] = VOID + elif 'default' in field_params: + child_map[index] = field_spec(**field_params) + + if missing: + raise ValueError(unwrap( + ''' + Missing required field "%s" from %s + ''', + name, + type_name(self) + )) + + self.children = [] + for index in range(0, total_fields): + self.children.append(child_map[index]) + + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while parsing %s' % type_name(self),) + args + raise e + + def _set_contents(self, force=False): + """ + Encodes all child objects into the contents for this object. + + This method is overridden because a Set needs to be encoded by + removing defaulted fields and then sorting the fields by tag. + + :param force: + Ensure all contents are in DER format instead of possibly using + cached BER-encoded data + """ + + if self.children is None: + self._parse_children() + + child_tag_encodings = [] + for index, child in enumerate(self.children): + child_encoding = child.dump(force=force) + + # Skip encoding defaulted children + name, spec, field_params = self._fields[index] + if 'default' in field_params: + if spec(**field_params).dump() == child_encoding: + continue + + child_tag_encodings.append((child.tag, child_encoding)) + child_tag_encodings.sort(key=lambda ct: ct[0]) + + self._contents = b''.join([ct[1] for ct in child_tag_encodings]) + self._header = None + if self._trailer != b'': + self._trailer = b'' + + +class SetOf(SequenceOf): + """ + Represents a set (unordered) of a single type of values from ASN.1 as a + Python object with a list-like interface + """ + + tag = 17 + + def _set_contents(self, force=False): + """ + Encodes all child objects into the contents for this object. + + This method is overridden because a SetOf needs to be encoded by + sorting the child encodings. + + :param force: + Ensure all contents are in DER format instead of possibly using + cached BER-encoded data + """ + + if self.children is None: + self._parse_children() + + child_encodings = [] + for child in self: + child_encodings.append(child.dump(force=force)) + + self._contents = b''.join(sorted(child_encodings)) + self._header = None + if self._trailer != b'': + self._trailer = b'' + + +class EmbeddedPdv(Sequence): + """ + A sequence structure + """ + + tag = 11 + + +class NumericString(AbstractString): + """ + Represents a numeric string from ASN.1 as a Python unicode string + """ + + tag = 18 + _encoding = 'latin1' + + +class PrintableString(AbstractString): + """ + Represents a printable string from ASN.1 as a Python unicode string + """ + + tag = 19 + _encoding = 'latin1' + + +class TeletexString(AbstractString): + """ + Represents a teletex string from ASN.1 as a Python unicode string + """ + + tag = 20 + _encoding = 'teletex' + + +class VideotexString(OctetString): + """ + Represents a videotex string from ASN.1 as a Python byte string + """ + + tag = 21 + + +class IA5String(AbstractString): + """ + Represents an IA5 string from ASN.1 as a Python unicode string + """ + + tag = 22 + _encoding = 'ascii' + + +class AbstractTime(AbstractString): + """ + Represents a time from ASN.1 as a Python datetime.datetime object + """ + + @property + def _parsed_time(self): + """ + The parsed datetime string. + + :raises: + ValueError - when an invalid value is passed + + :return: + A dict with the parsed values + """ + + string = str_cls(self) + + m = self._TIMESTRING_RE.match(string) + if not m: + raise ValueError(unwrap( + ''' + Error parsing %s to a %s + ''', + string, + type_name(self), + )) + + groups = m.groupdict() + + tz = None + if groups['zulu']: + tz = timezone.utc + elif groups['dsign']: + sign = 1 if groups['dsign'] == '+' else -1 + tz = create_timezone(sign * timedelta( + hours=int(groups['dhour']), + minutes=int(groups['dminute'] or 0) + )) + + if groups['fraction']: + # Compute fraction in microseconds + fract = Fraction( + int(groups['fraction']), + 10 ** len(groups['fraction']) + ) * 1000000 + + if groups['minute'] is None: + fract *= 3600 + elif groups['second'] is None: + fract *= 60 + + fract_usec = int(fract.limit_denominator(1)) + + else: + fract_usec = 0 + + return { + 'year': int(groups['year']), + 'month': int(groups['month']), + 'day': int(groups['day']), + 'hour': int(groups['hour']), + 'minute': int(groups['minute'] or 0), + 'second': int(groups['second'] or 0), + 'tzinfo': tz, + 'fraction': fract_usec, + } + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + A datetime.datetime object, asn1crypto.util.extended_datetime object or + None. The datetime object is usually timezone aware. If it's naive, then + it's in the sender's local time; see X.680 sect. 42.3 + """ + + if self.contents is None: + return None + + if self._native is None: + parsed = self._parsed_time + + fraction = parsed.pop('fraction', 0) + + value = self._get_datetime(parsed) + + if fraction: + value += timedelta(microseconds=fraction) + + self._native = value + + return self._native + + +class UTCTime(AbstractTime): + """ + Represents a UTC time from ASN.1 as a timezone aware Python datetime.datetime object + """ + + tag = 23 + + # Regular expression for UTCTime as described in X.680 sect. 43 and ISO 8601 + _TIMESTRING_RE = re.compile(r''' + ^ + # YYMMDD + (?P\d{2}) + (?P\d{2}) + (?P\d{2}) + + # hhmm or hhmmss + (?P\d{2}) + (?P\d{2}) + (?P\d{2})? + + # Matches nothing, needed because GeneralizedTime uses this. + (?P) + + # Z or [-+]hhmm + (?: + (?PZ) + | + (?: + (?P[-+]) + (?P\d{2}) + (?P\d{2}) + ) + ) + $ + ''', re.X) + + def set(self, value): + """ + Sets the value of the object + + :param value: + A unicode string or a datetime.datetime object + + :raises: + ValueError - when an invalid value is passed + """ + + if isinstance(value, datetime): + if not value.tzinfo: + raise ValueError('Must be timezone aware') + + # Convert value to UTC. + value = value.astimezone(utc_with_dst) + + if not 1950 <= value.year <= 2049: + raise ValueError('Year of the UTCTime is not in range [1950, 2049], use GeneralizedTime instead') + + value = value.strftime('%y%m%d%H%M%SZ') + if _PY2: + value = value.decode('ascii') + + AbstractString.set(self, value) + # Set it to None and let the class take care of converting the next + # time that .native is called + self._native = None + + def _get_datetime(self, parsed): + """ + Create a datetime object from the parsed time. + + :return: + An aware datetime.datetime object + """ + + # X.680 only specifies that UTCTime is not using a century. + # So "18" could as well mean 2118 or 1318. + # X.509 and CMS specify to use UTCTime for years earlier than 2050. + # Assume that UTCTime is only used for years [1950, 2049]. + if parsed['year'] < 50: + parsed['year'] += 2000 + else: + parsed['year'] += 1900 + + return datetime(**parsed) + + +class GeneralizedTime(AbstractTime): + """ + Represents a generalized time from ASN.1 as a Python datetime.datetime + object or asn1crypto.util.extended_datetime object in UTC + """ + + tag = 24 + + # Regular expression for GeneralizedTime as described in X.680 sect. 42 and ISO 8601 + _TIMESTRING_RE = re.compile(r''' + ^ + # YYYYMMDD + (?P\d{4}) + (?P\d{2}) + (?P\d{2}) + + # hh or hhmm or hhmmss + (?P\d{2}) + (?: + (?P\d{2}) + (?P\d{2})? + )? + + # Optional fraction; [.,]dddd (one or more decimals) + # If Seconds are given, it's fractions of Seconds. + # Else if Minutes are given, it's fractions of Minutes. + # Else it's fractions of Hours. + (?: + [,.] + (?P\d+) + )? + + # Optional timezone. If left out, the time is in local time. + # Z or [-+]hh or [-+]hhmm + (?: + (?PZ) + | + (?: + (?P[-+]) + (?P\d{2}) + (?P\d{2})? + ) + )? + $ + ''', re.X) + + def set(self, value): + """ + Sets the value of the object + + :param value: + A unicode string, a datetime.datetime object or an + asn1crypto.util.extended_datetime object + + :raises: + ValueError - when an invalid value is passed + """ + + if isinstance(value, (datetime, extended_datetime)): + if not value.tzinfo: + raise ValueError('Must be timezone aware') + + # Convert value to UTC. + value = value.astimezone(utc_with_dst) + + if value.microsecond: + fraction = '.' + str(value.microsecond).zfill(6).rstrip('0') + else: + fraction = '' + + value = value.strftime('%Y%m%d%H%M%S') + fraction + 'Z' + if _PY2: + value = value.decode('ascii') + + AbstractString.set(self, value) + # Set it to None and let the class take care of converting the next + # time that .native is called + self._native = None + + def _get_datetime(self, parsed): + """ + Create a datetime object from the parsed time. + + :return: + A datetime.datetime object or asn1crypto.util.extended_datetime object. + It may or may not be aware. + """ + + if parsed['year'] == 0: + # datetime does not support year 0. Use extended_datetime instead. + return extended_datetime(**parsed) + else: + return datetime(**parsed) + + +class GraphicString(AbstractString): + """ + Represents a graphic string from ASN.1 as a Python unicode string + """ + + tag = 25 + # This is technically not correct since this type can contain any charset + _encoding = 'latin1' + + +class VisibleString(AbstractString): + """ + Represents a visible string from ASN.1 as a Python unicode string + """ + + tag = 26 + _encoding = 'latin1' + + +class GeneralString(AbstractString): + """ + Represents a general string from ASN.1 as a Python unicode string + """ + + tag = 27 + # This is technically not correct since this type can contain any charset + _encoding = 'latin1' + + +class UniversalString(AbstractString): + """ + Represents a universal string from ASN.1 as a Python unicode string + """ + + tag = 28 + _encoding = 'utf-32-be' + + +class CharacterString(AbstractString): + """ + Represents a character string from ASN.1 as a Python unicode string + """ + + tag = 29 + # This is technically not correct since this type can contain any charset + _encoding = 'latin1' + + +class BMPString(AbstractString): + """ + Represents a BMP string from ASN.1 as a Python unicode string + """ + + tag = 30 + _encoding = 'utf-16-be' + + +def _basic_debug(prefix, self): + """ + Prints out basic information about an Asn1Value object. Extracted for reuse + among different classes that customize the debug information. + + :param prefix: + A unicode string of spaces to prefix output line with + + :param self: + The object to print the debugging information about + """ + + print('%s%s Object #%s' % (prefix, type_name(self), id(self))) + if self._header: + print('%s Header: 0x%s' % (prefix, binascii.hexlify(self._header or b'').decode('utf-8'))) + + has_header = self.method is not None and self.class_ is not None and self.tag is not None + if has_header: + method_name = METHOD_NUM_TO_NAME_MAP.get(self.method) + class_name = CLASS_NUM_TO_NAME_MAP.get(self.class_) + + if self.explicit is not None: + for class_, tag in self.explicit: + print( + '%s %s tag %s (explicitly tagged)' % + ( + prefix, + CLASS_NUM_TO_NAME_MAP.get(class_), + tag + ) + ) + if has_header: + print('%s %s %s %s' % (prefix, method_name, class_name, self.tag)) + + elif self.implicit: + if has_header: + print('%s %s %s tag %s (implicitly tagged)' % (prefix, method_name, class_name, self.tag)) + + elif has_header: + print('%s %s %s tag %s' % (prefix, method_name, class_name, self.tag)) + + if self._trailer: + print('%s Trailer: 0x%s' % (prefix, binascii.hexlify(self._trailer or b'').decode('utf-8'))) + + print('%s Data: 0x%s' % (prefix, binascii.hexlify(self.contents or b'').decode('utf-8'))) + + +def _tag_type_to_explicit_implicit(params): + """ + Converts old-style "tag_type" and "tag" params to "explicit" and "implicit" + + :param params: + A dict of parameters to convert from tag_type/tag to explicit/implicit + """ + + if 'tag_type' in params: + if params['tag_type'] == 'explicit': + params['explicit'] = (params.get('class', 2), params['tag']) + elif params['tag_type'] == 'implicit': + params['implicit'] = (params.get('class', 2), params['tag']) + del params['tag_type'] + del params['tag'] + if 'class' in params: + del params['class'] + + +def _fix_tagging(value, params): + """ + Checks if a value is properly tagged based on the spec, and re/untags as + necessary + + :param value: + An Asn1Value object + + :param params: + A dict of spec params + + :return: + An Asn1Value that is properly tagged + """ + + _tag_type_to_explicit_implicit(params) + + retag = False + if 'implicit' not in params: + if value.implicit is not False: + retag = True + else: + if isinstance(params['implicit'], tuple): + class_, tag = params['implicit'] + else: + tag = params['implicit'] + class_ = 'context' + if value.implicit is False: + retag = True + elif value.class_ != CLASS_NAME_TO_NUM_MAP[class_] or value.tag != tag: + retag = True + + if params.get('explicit') != value.explicit: + retag = True + + if retag: + return value.retag(params) + return value + + +def _build_id_tuple(params, spec): + """ + Builds a 2-element tuple used to identify fields by grabbing the class_ + and tag from an Asn1Value class and the params dict being passed to it + + :param params: + A dict of params to pass to spec + + :param spec: + An Asn1Value class + + :return: + A 2-element integer tuple in the form (class_, tag) + """ + + # Handle situations where the spec is not known at setup time + if spec is None: + return (None, None) + + required_class = spec.class_ + required_tag = spec.tag + + _tag_type_to_explicit_implicit(params) + + if 'explicit' in params: + if isinstance(params['explicit'], tuple): + required_class, required_tag = params['explicit'] + else: + required_class = 2 + required_tag = params['explicit'] + elif 'implicit' in params: + if isinstance(params['implicit'], tuple): + required_class, required_tag = params['implicit'] + else: + required_class = 2 + required_tag = params['implicit'] + if required_class is not None and not isinstance(required_class, int_types): + required_class = CLASS_NAME_TO_NUM_MAP[required_class] + + required_class = params.get('class_', required_class) + required_tag = params.get('tag', required_tag) + + return (required_class, required_tag) + + +def _int_to_bit_tuple(value, bits): + """ + Format value as a tuple of 1s and 0s. + + :param value: + A non-negative integer to format + + :param bits: + Number of bits in the output + + :return: + A tuple of 1s and 0s with bits members. + """ + + if not value and not bits: + return () + + result = tuple(map(int, format(value, '0{0}b'.format(bits)))) + if len(result) != bits: + raise ValueError('Result too large: {0} > {1}'.format(len(result), bits)) + + return result + + +_UNIVERSAL_SPECS = { + 1: Boolean, + 2: Integer, + 3: BitString, + 4: OctetString, + 5: Null, + 6: ObjectIdentifier, + 7: ObjectDescriptor, + 8: InstanceOf, + 9: Real, + 10: Enumerated, + 11: EmbeddedPdv, + 12: UTF8String, + 13: RelativeOid, + 16: Sequence, + 17: Set, + 18: NumericString, + 19: PrintableString, + 20: TeletexString, + 21: VideotexString, + 22: IA5String, + 23: UTCTime, + 24: GeneralizedTime, + 25: GraphicString, + 26: VisibleString, + 27: GeneralString, + 28: UniversalString, + 29: CharacterString, + 30: BMPString +} + + +def _build(class_, method, tag, header, contents, trailer, spec=None, spec_params=None, nested_spec=None): + """ + Builds an Asn1Value object generically, or using a spec with optional params + + :param class_: + An integer representing the ASN.1 class + + :param method: + An integer representing the ASN.1 method + + :param tag: + An integer representing the ASN.1 tag + + :param header: + A byte string of the ASN.1 header (class, method, tag, length) + + :param contents: + A byte string of the ASN.1 value + + :param trailer: + A byte string of any ASN.1 trailer (only used by indefinite length encodings) + + :param spec: + A class derived from Asn1Value that defines what class_ and tag the + value should have, and the semantics of the encoded value. The + return value will be of this type. If omitted, the encoded value + will be decoded using the standard universal tag based on the + encoded tag number. + + :param spec_params: + A dict of params to pass to the spec object + + :param nested_spec: + For certain Asn1Value classes (such as OctetString and BitString), the + contents can be further parsed and interpreted as another Asn1Value. + This parameter controls the spec for that sub-parsing. + + :return: + An object of the type spec, or if not specified, a child of Asn1Value + """ + + if spec_params is not None: + _tag_type_to_explicit_implicit(spec_params) + + if header is None: + return VOID + + header_set = False + + # If an explicit specification was passed in, make sure it matches + if spec is not None: + # If there is explicit tagging and contents, we have to split + # the header and trailer off before we do the parsing + no_explicit = spec_params and 'no_explicit' in spec_params + if not no_explicit and (spec.explicit or (spec_params and 'explicit' in spec_params)): + if spec_params: + value = spec(**spec_params) + else: + value = spec() + original_explicit = value.explicit + explicit_info = reversed(original_explicit) + parsed_class = class_ + parsed_method = method + parsed_tag = tag + to_parse = contents + explicit_header = header + explicit_trailer = trailer or b'' + for expected_class, expected_tag in explicit_info: + if parsed_class != expected_class: + raise ValueError(unwrap( + ''' + Error parsing %s - explicitly-tagged class should have been + %s, but %s was found + ''', + type_name(value), + CLASS_NUM_TO_NAME_MAP.get(expected_class), + CLASS_NUM_TO_NAME_MAP.get(parsed_class, parsed_class) + )) + if parsed_method != 1: + raise ValueError(unwrap( + ''' + Error parsing %s - explicitly-tagged method should have + been %s, but %s was found + ''', + type_name(value), + METHOD_NUM_TO_NAME_MAP.get(1), + METHOD_NUM_TO_NAME_MAP.get(parsed_method, parsed_method) + )) + if parsed_tag != expected_tag: + raise ValueError(unwrap( + ''' + Error parsing %s - explicitly-tagged tag should have been + %s, but %s was found + ''', + type_name(value), + expected_tag, + parsed_tag + )) + info, _ = _parse(to_parse, len(to_parse)) + parsed_class, parsed_method, parsed_tag, parsed_header, to_parse, parsed_trailer = info + + if not isinstance(value, Choice): + explicit_header += parsed_header + explicit_trailer = parsed_trailer + explicit_trailer + + value = _build(*info, spec=spec, spec_params={'no_explicit': True}) + value._header = explicit_header + value._trailer = explicit_trailer + value.explicit = original_explicit + header_set = True + else: + if spec_params: + value = spec(contents=contents, **spec_params) + else: + value = spec(contents=contents) + + if spec is Any: + pass + + elif isinstance(value, Choice): + value.validate(class_, tag, contents) + try: + # Force parsing the Choice now + value.contents = header + value.contents + header = b'' + value.parse() + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while parsing %s' % type_name(value),) + args + raise e + + else: + if class_ != value.class_: + raise ValueError(unwrap( + ''' + Error parsing %s - class should have been %s, but %s was + found + ''', + type_name(value), + CLASS_NUM_TO_NAME_MAP.get(value.class_), + CLASS_NUM_TO_NAME_MAP.get(class_, class_) + )) + if method != value.method: + # Allow parsing a primitive method as constructed if the value + # is indefinite length. This is to allow parsing BER. + ber_indef = method == 1 and value.method == 0 and trailer == b'\x00\x00' + if not ber_indef or not isinstance(value, Constructable): + raise ValueError(unwrap( + ''' + Error parsing %s - method should have been %s, but %s was found + ''', + type_name(value), + METHOD_NUM_TO_NAME_MAP.get(value.method), + METHOD_NUM_TO_NAME_MAP.get(method, method) + )) + else: + value.method = method + value._indefinite = True + if tag != value.tag: + if isinstance(value._bad_tag, tuple): + is_bad_tag = tag in value._bad_tag + else: + is_bad_tag = tag == value._bad_tag + if not is_bad_tag: + raise ValueError(unwrap( + ''' + Error parsing %s - tag should have been %s, but %s was found + ''', + type_name(value), + value.tag, + tag + )) + + # For explicitly tagged, un-speced parsings, we use a generic container + # since we will be parsing the contents and discarding the outer object + # anyway a little further on + elif spec_params and 'explicit' in spec_params: + original_value = Asn1Value(contents=contents, **spec_params) + original_explicit = original_value.explicit + + to_parse = contents + explicit_header = header + explicit_trailer = trailer or b'' + for expected_class, expected_tag in reversed(original_explicit): + info, _ = _parse(to_parse, len(to_parse)) + _, _, _, parsed_header, to_parse, parsed_trailer = info + explicit_header += parsed_header + explicit_trailer = parsed_trailer + explicit_trailer + value = _build(*info, spec=spec, spec_params={'no_explicit': True}) + value._header = header + value._header + value._trailer += trailer or b'' + value.explicit = original_explicit + header_set = True + + # If no spec was specified, allow anything and just process what + # is in the input data + else: + if tag not in _UNIVERSAL_SPECS: + raise ValueError(unwrap( + ''' + Unknown element - %s class, %s method, tag %s + ''', + CLASS_NUM_TO_NAME_MAP.get(class_), + METHOD_NUM_TO_NAME_MAP.get(method), + tag + )) + + spec = _UNIVERSAL_SPECS[tag] + + value = spec(contents=contents, class_=class_) + ber_indef = method == 1 and value.method == 0 and trailer == b'\x00\x00' + if ber_indef and isinstance(value, Constructable): + value._indefinite = True + value.method = method + + if not header_set: + value._header = header + value._trailer = trailer or b'' + + # Destroy any default value that our contents have overwritten + value._native = None + + if nested_spec: + try: + value.parse(nested_spec) + except (ValueError, TypeError) as e: + args = e.args[1:] + e.args = (e.args[0] + '\n while parsing %s' % type_name(value),) + args + raise e + + return value + + +def _parse_build(encoded_data, pointer=0, spec=None, spec_params=None, strict=False): + """ + Parses a byte string generically, or using a spec with optional params + + :param encoded_data: + A byte string that contains BER-encoded data + + :param pointer: + The index in the byte string to parse from + + :param spec: + A class derived from Asn1Value that defines what class_ and tag the + value should have, and the semantics of the encoded value. The + return value will be of this type. If omitted, the encoded value + will be decoded using the standard universal tag based on the + encoded tag number. + + :param spec_params: + A dict of params to pass to the spec object + + :param strict: + A boolean indicating if trailing data should be forbidden - if so, a + ValueError will be raised when trailing data exists + + :return: + A 2-element tuple: + - 0: An object of the type spec, or if not specified, a child of Asn1Value + - 1: An integer indicating how many bytes were consumed + """ + + encoded_len = len(encoded_data) + info, new_pointer = _parse(encoded_data, encoded_len, pointer) + if strict and new_pointer != pointer + encoded_len: + extra_bytes = pointer + encoded_len - new_pointer + raise ValueError('Extra data - %d bytes of trailing data were provided' % extra_bytes) + return (_build(*info, spec=spec, spec_params=spec_params), new_pointer) diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/crl.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/crl.py new file mode 100644 index 00000000..84cb1683 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/crl.py @@ -0,0 +1,536 @@ +# coding: utf-8 + +""" +ASN.1 type classes for certificate revocation lists (CRL). Exports the +following items: + + - CertificateList() + +Other type classes are defined that help compose the types listed above. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +import hashlib + +from .algos import SignedDigestAlgorithm +from .core import ( + Boolean, + Enumerated, + GeneralizedTime, + Integer, + ObjectIdentifier, + OctetBitString, + ParsableOctetString, + Sequence, + SequenceOf, +) +from .x509 import ( + AuthorityInfoAccessSyntax, + AuthorityKeyIdentifier, + CRLDistributionPoints, + DistributionPointName, + GeneralNames, + Name, + ReasonFlags, + Time, +) + + +# The structures in this file are taken from https://tools.ietf.org/html/rfc5280 + + +class Version(Integer): + _map = { + 0: 'v1', + 1: 'v2', + 2: 'v3', + } + + +class IssuingDistributionPoint(Sequence): + _fields = [ + ('distribution_point', DistributionPointName, {'explicit': 0, 'optional': True}), + ('only_contains_user_certs', Boolean, {'implicit': 1, 'default': False}), + ('only_contains_ca_certs', Boolean, {'implicit': 2, 'default': False}), + ('only_some_reasons', ReasonFlags, {'implicit': 3, 'optional': True}), + ('indirect_crl', Boolean, {'implicit': 4, 'default': False}), + ('only_contains_attribute_certs', Boolean, {'implicit': 5, 'default': False}), + ] + + +class TBSCertListExtensionId(ObjectIdentifier): + _map = { + '2.5.29.18': 'issuer_alt_name', + '2.5.29.20': 'crl_number', + '2.5.29.27': 'delta_crl_indicator', + '2.5.29.28': 'issuing_distribution_point', + '2.5.29.35': 'authority_key_identifier', + '2.5.29.46': 'freshest_crl', + '1.3.6.1.5.5.7.1.1': 'authority_information_access', + } + + +class TBSCertListExtension(Sequence): + _fields = [ + ('extn_id', TBSCertListExtensionId), + ('critical', Boolean, {'default': False}), + ('extn_value', ParsableOctetString), + ] + + _oid_pair = ('extn_id', 'extn_value') + _oid_specs = { + 'issuer_alt_name': GeneralNames, + 'crl_number': Integer, + 'delta_crl_indicator': Integer, + 'issuing_distribution_point': IssuingDistributionPoint, + 'authority_key_identifier': AuthorityKeyIdentifier, + 'freshest_crl': CRLDistributionPoints, + 'authority_information_access': AuthorityInfoAccessSyntax, + } + + +class TBSCertListExtensions(SequenceOf): + _child_spec = TBSCertListExtension + + +class CRLReason(Enumerated): + _map = { + 0: 'unspecified', + 1: 'key_compromise', + 2: 'ca_compromise', + 3: 'affiliation_changed', + 4: 'superseded', + 5: 'cessation_of_operation', + 6: 'certificate_hold', + 8: 'remove_from_crl', + 9: 'privilege_withdrawn', + 10: 'aa_compromise', + } + + @property + def human_friendly(self): + """ + :return: + A unicode string with revocation description that is suitable to + show to end-users. Starts with a lower case letter and phrased in + such a way that it makes sense after the phrase "because of" or + "due to". + """ + + return { + 'unspecified': 'an unspecified reason', + 'key_compromise': 'a compromised key', + 'ca_compromise': 'the CA being compromised', + 'affiliation_changed': 'an affiliation change', + 'superseded': 'certificate supersession', + 'cessation_of_operation': 'a cessation of operation', + 'certificate_hold': 'a certificate hold', + 'remove_from_crl': 'removal from the CRL', + 'privilege_withdrawn': 'privilege withdrawl', + 'aa_compromise': 'the AA being compromised', + }[self.native] + + +class CRLEntryExtensionId(ObjectIdentifier): + _map = { + '2.5.29.21': 'crl_reason', + '2.5.29.23': 'hold_instruction_code', + '2.5.29.24': 'invalidity_date', + '2.5.29.29': 'certificate_issuer', + } + + +class CRLEntryExtension(Sequence): + _fields = [ + ('extn_id', CRLEntryExtensionId), + ('critical', Boolean, {'default': False}), + ('extn_value', ParsableOctetString), + ] + + _oid_pair = ('extn_id', 'extn_value') + _oid_specs = { + 'crl_reason': CRLReason, + 'hold_instruction_code': ObjectIdentifier, + 'invalidity_date': GeneralizedTime, + 'certificate_issuer': GeneralNames, + } + + +class CRLEntryExtensions(SequenceOf): + _child_spec = CRLEntryExtension + + +class RevokedCertificate(Sequence): + _fields = [ + ('user_certificate', Integer), + ('revocation_date', Time), + ('crl_entry_extensions', CRLEntryExtensions, {'optional': True}), + ] + + _processed_extensions = False + _critical_extensions = None + _crl_reason_value = None + _invalidity_date_value = None + _certificate_issuer_value = None + _issuer_name = False + + def _set_extensions(self): + """ + Sets common named extensions to private attributes and creates a list + of critical extensions + """ + + self._critical_extensions = set() + + for extension in self['crl_entry_extensions']: + name = extension['extn_id'].native + attribute_name = '_%s_value' % name + if hasattr(self, attribute_name): + setattr(self, attribute_name, extension['extn_value'].parsed) + if extension['critical'].native: + self._critical_extensions.add(name) + + self._processed_extensions = True + + @property + def critical_extensions(self): + """ + Returns a set of the names (or OID if not a known extension) of the + extensions marked as critical + + :return: + A set of unicode strings + """ + + if not self._processed_extensions: + self._set_extensions() + return self._critical_extensions + + @property + def crl_reason_value(self): + """ + This extension indicates the reason that a certificate was revoked. + + :return: + None or a CRLReason object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._crl_reason_value + + @property + def invalidity_date_value(self): + """ + This extension indicates the suspected date/time the private key was + compromised or the certificate became invalid. This would usually be + before the revocation date, which is when the CA processed the + revocation. + + :return: + None or a GeneralizedTime object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._invalidity_date_value + + @property + def certificate_issuer_value(self): + """ + This extension indicates the issuer of the certificate in question, + and is used in indirect CRLs. CRL entries without this extension are + for certificates issued from the last seen issuer. + + :return: + None or an x509.GeneralNames object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._certificate_issuer_value + + @property + def issuer_name(self): + """ + :return: + None, or an asn1crypto.x509.Name object for the issuer of the cert + """ + + if self._issuer_name is False: + self._issuer_name = None + if self.certificate_issuer_value: + for general_name in self.certificate_issuer_value: + if general_name.name == 'directory_name': + self._issuer_name = general_name.chosen + break + return self._issuer_name + + +class RevokedCertificates(SequenceOf): + _child_spec = RevokedCertificate + + +class TbsCertList(Sequence): + _fields = [ + ('version', Version, {'optional': True}), + ('signature', SignedDigestAlgorithm), + ('issuer', Name), + ('this_update', Time), + ('next_update', Time, {'optional': True}), + ('revoked_certificates', RevokedCertificates, {'optional': True}), + ('crl_extensions', TBSCertListExtensions, {'explicit': 0, 'optional': True}), + ] + + +class CertificateList(Sequence): + _fields = [ + ('tbs_cert_list', TbsCertList), + ('signature_algorithm', SignedDigestAlgorithm), + ('signature', OctetBitString), + ] + + _processed_extensions = False + _critical_extensions = None + _issuer_alt_name_value = None + _crl_number_value = None + _delta_crl_indicator_value = None + _issuing_distribution_point_value = None + _authority_key_identifier_value = None + _freshest_crl_value = None + _authority_information_access_value = None + _issuer_cert_urls = None + _delta_crl_distribution_points = None + _sha1 = None + _sha256 = None + + def _set_extensions(self): + """ + Sets common named extensions to private attributes and creates a list + of critical extensions + """ + + self._critical_extensions = set() + + for extension in self['tbs_cert_list']['crl_extensions']: + name = extension['extn_id'].native + attribute_name = '_%s_value' % name + if hasattr(self, attribute_name): + setattr(self, attribute_name, extension['extn_value'].parsed) + if extension['critical'].native: + self._critical_extensions.add(name) + + self._processed_extensions = True + + @property + def critical_extensions(self): + """ + Returns a set of the names (or OID if not a known extension) of the + extensions marked as critical + + :return: + A set of unicode strings + """ + + if not self._processed_extensions: + self._set_extensions() + return self._critical_extensions + + @property + def issuer_alt_name_value(self): + """ + This extension allows associating one or more alternative names with + the issuer of the CRL. + + :return: + None or an x509.GeneralNames object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._issuer_alt_name_value + + @property + def crl_number_value(self): + """ + This extension adds a monotonically increasing number to the CRL and is + used to distinguish different versions of the CRL. + + :return: + None or an Integer object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._crl_number_value + + @property + def delta_crl_indicator_value(self): + """ + This extension indicates a CRL is a delta CRL, and contains the CRL + number of the base CRL that it is a delta from. + + :return: + None or an Integer object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._delta_crl_indicator_value + + @property + def issuing_distribution_point_value(self): + """ + This extension includes information about what types of revocations + and certificates are part of the CRL. + + :return: + None or an IssuingDistributionPoint object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._issuing_distribution_point_value + + @property + def authority_key_identifier_value(self): + """ + This extension helps in identifying the public key with which to + validate the authenticity of the CRL. + + :return: + None or an AuthorityKeyIdentifier object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._authority_key_identifier_value + + @property + def freshest_crl_value(self): + """ + This extension is used in complete CRLs to indicate where a delta CRL + may be located. + + :return: + None or a CRLDistributionPoints object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._freshest_crl_value + + @property + def authority_information_access_value(self): + """ + This extension is used to provide a URL with which to download the + certificate used to sign this CRL. + + :return: + None or an AuthorityInfoAccessSyntax object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._authority_information_access_value + + @property + def issuer(self): + """ + :return: + An asn1crypto.x509.Name object for the issuer of the CRL + """ + + return self['tbs_cert_list']['issuer'] + + @property + def authority_key_identifier(self): + """ + :return: + None or a byte string of the key_identifier from the authority key + identifier extension + """ + + if not self.authority_key_identifier_value: + return None + + return self.authority_key_identifier_value['key_identifier'].native + + @property + def issuer_cert_urls(self): + """ + :return: + A list of unicode strings that are URLs that should contain either + an individual DER-encoded X.509 certificate, or a DER-encoded CMS + message containing multiple certificates + """ + + if self._issuer_cert_urls is None: + self._issuer_cert_urls = [] + if self.authority_information_access_value: + for entry in self.authority_information_access_value: + if entry['access_method'].native == 'ca_issuers': + location = entry['access_location'] + if location.name != 'uniform_resource_identifier': + continue + url = location.native + if url.lower()[0:7] == 'http://': + self._issuer_cert_urls.append(url) + return self._issuer_cert_urls + + @property + def delta_crl_distribution_points(self): + """ + Returns delta CRL URLs - only applies to complete CRLs + + :return: + A list of zero or more DistributionPoint objects + """ + + if self._delta_crl_distribution_points is None: + self._delta_crl_distribution_points = [] + + if self.freshest_crl_value is not None: + for distribution_point in self.freshest_crl_value: + distribution_point_name = distribution_point['distribution_point'] + # RFC 5280 indicates conforming CA should not use the relative form + if distribution_point_name.name == 'name_relative_to_crl_issuer': + continue + # This library is currently only concerned with HTTP-based CRLs + for general_name in distribution_point_name.chosen: + if general_name.name == 'uniform_resource_identifier': + self._delta_crl_distribution_points.append(distribution_point) + + return self._delta_crl_distribution_points + + @property + def signature(self): + """ + :return: + A byte string of the signature + """ + + return self['signature'].native + + @property + def sha1(self): + """ + :return: + The SHA1 hash of the DER-encoded bytes of this certificate list + """ + + if self._sha1 is None: + self._sha1 = hashlib.sha1(self.dump()).digest() + return self._sha1 + + @property + def sha256(self): + """ + :return: + The SHA-256 hash of the DER-encoded bytes of this certificate list + """ + + if self._sha256 is None: + self._sha256 = hashlib.sha256(self.dump()).digest() + return self._sha256 diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/csr.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/csr.py new file mode 100644 index 00000000..7d5ba447 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/csr.py @@ -0,0 +1,133 @@ +# coding: utf-8 + +""" +ASN.1 type classes for certificate signing requests (CSR). Exports the +following items: + + - CertificationRequest() + +Other type classes are defined that help compose the types listed above. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +from .algos import SignedDigestAlgorithm +from .core import ( + Any, + BitString, + BMPString, + Integer, + ObjectIdentifier, + OctetBitString, + Sequence, + SetOf, + UTF8String +) +from .keys import PublicKeyInfo +from .x509 import DirectoryString, Extensions, Name + + +# The structures in this file are taken from https://tools.ietf.org/html/rfc2986 +# and https://tools.ietf.org/html/rfc2985 + + +class Version(Integer): + _map = { + 0: 'v1', + } + + +class CSRAttributeType(ObjectIdentifier): + _map = { + '1.2.840.113549.1.9.7': 'challenge_password', + '1.2.840.113549.1.9.9': 'extended_certificate_attributes', + '1.2.840.113549.1.9.14': 'extension_request', + # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/a5eaae36-e9f3-4dc5-a687-bfa7115954f1 + '1.3.6.1.4.1.311.13.2.2': 'microsoft_enrollment_csp_provider', + # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/7c677cba-030d-48be-ba2b-01e407705f34 + '1.3.6.1.4.1.311.13.2.3': 'microsoft_os_version', + # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/64e5ff6d-c6dd-4578-92f7-b3d895f9b9c7 + '1.3.6.1.4.1.311.21.20': 'microsoft_request_client_info', + } + + +class SetOfDirectoryString(SetOf): + _child_spec = DirectoryString + + +class Attribute(Sequence): + _fields = [ + ('type', ObjectIdentifier), + ('values', SetOf, {'spec': Any}), + ] + + +class SetOfAttributes(SetOf): + _child_spec = Attribute + + +class SetOfExtensions(SetOf): + _child_spec = Extensions + + +class MicrosoftEnrollmentCSProvider(Sequence): + _fields = [ + ('keyspec', Integer), + ('cspname', BMPString), # cryptographic service provider name + ('signature', BitString), + ] + + +class SetOfMicrosoftEnrollmentCSProvider(SetOf): + _child_spec = MicrosoftEnrollmentCSProvider + + +class MicrosoftRequestClientInfo(Sequence): + _fields = [ + ('clientid', Integer), + ('machinename', UTF8String), + ('username', UTF8String), + ('processname', UTF8String), + ] + + +class SetOfMicrosoftRequestClientInfo(SetOf): + _child_spec = MicrosoftRequestClientInfo + + +class CRIAttribute(Sequence): + _fields = [ + ('type', CSRAttributeType), + ('values', Any), + ] + + _oid_pair = ('type', 'values') + _oid_specs = { + 'challenge_password': SetOfDirectoryString, + 'extended_certificate_attributes': SetOfAttributes, + 'extension_request': SetOfExtensions, + 'microsoft_enrollment_csp_provider': SetOfMicrosoftEnrollmentCSProvider, + 'microsoft_os_version': SetOfDirectoryString, + 'microsoft_request_client_info': SetOfMicrosoftRequestClientInfo, + } + + +class CRIAttributes(SetOf): + _child_spec = CRIAttribute + + +class CertificationRequestInfo(Sequence): + _fields = [ + ('version', Version), + ('subject', Name), + ('subject_pk_info', PublicKeyInfo), + ('attributes', CRIAttributes, {'implicit': 0, 'optional': True}), + ] + + +class CertificationRequest(Sequence): + _fields = [ + ('certification_request_info', CertificationRequestInfo), + ('signature_algorithm', SignedDigestAlgorithm), + ('signature', OctetBitString), + ] diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/keys.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/keys.py new file mode 100644 index 00000000..b4a87aea --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/keys.py @@ -0,0 +1,1301 @@ +# coding: utf-8 + +""" +ASN.1 type classes for public and private keys. Exports the following items: + + - DSAPrivateKey() + - ECPrivateKey() + - EncryptedPrivateKeyInfo() + - PrivateKeyInfo() + - PublicKeyInfo() + - RSAPrivateKey() + - RSAPublicKey() + +Other type classes are defined that help compose the types listed above. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +import hashlib +import math + +from ._errors import unwrap, APIException +from ._types import type_name, byte_cls +from .algos import _ForceNullParameters, DigestAlgorithm, EncryptionAlgorithm, RSAESOAEPParams, RSASSAPSSParams +from .core import ( + Any, + Asn1Value, + BitString, + Choice, + Integer, + IntegerOctetString, + Null, + ObjectIdentifier, + OctetBitString, + OctetString, + ParsableOctetString, + ParsableOctetBitString, + Sequence, + SequenceOf, + SetOf, +) +from .util import int_from_bytes, int_to_bytes + + +class OtherPrimeInfo(Sequence): + """ + Source: https://tools.ietf.org/html/rfc3447#page-46 + """ + + _fields = [ + ('prime', Integer), + ('exponent', Integer), + ('coefficient', Integer), + ] + + +class OtherPrimeInfos(SequenceOf): + """ + Source: https://tools.ietf.org/html/rfc3447#page-46 + """ + + _child_spec = OtherPrimeInfo + + +class RSAPrivateKeyVersion(Integer): + """ + Original Name: Version + Source: https://tools.ietf.org/html/rfc3447#page-45 + """ + + _map = { + 0: 'two-prime', + 1: 'multi', + } + + +class RSAPrivateKey(Sequence): + """ + Source: https://tools.ietf.org/html/rfc3447#page-45 + """ + + _fields = [ + ('version', RSAPrivateKeyVersion), + ('modulus', Integer), + ('public_exponent', Integer), + ('private_exponent', Integer), + ('prime1', Integer), + ('prime2', Integer), + ('exponent1', Integer), + ('exponent2', Integer), + ('coefficient', Integer), + ('other_prime_infos', OtherPrimeInfos, {'optional': True}) + ] + + +class RSAPublicKey(Sequence): + """ + Source: https://tools.ietf.org/html/rfc3447#page-44 + """ + + _fields = [ + ('modulus', Integer), + ('public_exponent', Integer) + ] + + +class DSAPrivateKey(Sequence): + """ + The ASN.1 structure that OpenSSL uses to store a DSA private key that is + not part of a PKCS#8 structure. Reversed engineered from english-language + description on linked OpenSSL documentation page. + + Original Name: None + Source: https://www.openssl.org/docs/apps/dsa.html + """ + + _fields = [ + ('version', Integer), + ('p', Integer), + ('q', Integer), + ('g', Integer), + ('public_key', Integer), + ('private_key', Integer), + ] + + +class _ECPoint(): + """ + In both PublicKeyInfo and PrivateKeyInfo, the EC public key is a byte + string that is encoded as a bit string. This class adds convenience + methods for converting to and from the byte string to a pair of integers + that are the X and Y coordinates. + """ + + @classmethod + def from_coords(cls, x, y): + """ + Creates an ECPoint object from the X and Y integer coordinates of the + point + + :param x: + The X coordinate, as an integer + + :param y: + The Y coordinate, as an integer + + :return: + An ECPoint object + """ + + x_bytes = int(math.ceil(math.log(x, 2) / 8.0)) + y_bytes = int(math.ceil(math.log(y, 2) / 8.0)) + + num_bytes = max(x_bytes, y_bytes) + + byte_string = b'\x04' + byte_string += int_to_bytes(x, width=num_bytes) + byte_string += int_to_bytes(y, width=num_bytes) + + return cls(byte_string) + + def to_coords(self): + """ + Returns the X and Y coordinates for this EC point, as native Python + integers + + :return: + A 2-element tuple containing integers (X, Y) + """ + + data = self.native + first_byte = data[0:1] + + # Uncompressed + if first_byte == b'\x04': + remaining = data[1:] + field_len = len(remaining) // 2 + x = int_from_bytes(remaining[0:field_len]) + y = int_from_bytes(remaining[field_len:]) + return (x, y) + + if first_byte not in set([b'\x02', b'\x03']): + raise ValueError(unwrap( + ''' + Invalid EC public key - first byte is incorrect + ''' + )) + + raise ValueError(unwrap( + ''' + Compressed representations of EC public keys are not supported due + to patent US6252960 + ''' + )) + + +class ECPoint(OctetString, _ECPoint): + + pass + + +class ECPointBitString(OctetBitString, _ECPoint): + + pass + + +class SpecifiedECDomainVersion(Integer): + """ + Source: http://www.secg.org/sec1-v2.pdf page 104 + """ + _map = { + 1: 'ecdpVer1', + 2: 'ecdpVer2', + 3: 'ecdpVer3', + } + + +class FieldType(ObjectIdentifier): + """ + Original Name: None + Source: http://www.secg.org/sec1-v2.pdf page 101 + """ + + _map = { + '1.2.840.10045.1.1': 'prime_field', + '1.2.840.10045.1.2': 'characteristic_two_field', + } + + +class CharacteristicTwoBasis(ObjectIdentifier): + """ + Original Name: None + Source: http://www.secg.org/sec1-v2.pdf page 102 + """ + + _map = { + '1.2.840.10045.1.2.1.1': 'gn_basis', + '1.2.840.10045.1.2.1.2': 'tp_basis', + '1.2.840.10045.1.2.1.3': 'pp_basis', + } + + +class Pentanomial(Sequence): + """ + Source: http://www.secg.org/sec1-v2.pdf page 102 + """ + + _fields = [ + ('k1', Integer), + ('k2', Integer), + ('k3', Integer), + ] + + +class CharacteristicTwo(Sequence): + """ + Original Name: Characteristic-two + Source: http://www.secg.org/sec1-v2.pdf page 101 + """ + + _fields = [ + ('m', Integer), + ('basis', CharacteristicTwoBasis), + ('parameters', Any), + ] + + _oid_pair = ('basis', 'parameters') + _oid_specs = { + 'gn_basis': Null, + 'tp_basis': Integer, + 'pp_basis': Pentanomial, + } + + +class FieldID(Sequence): + """ + Source: http://www.secg.org/sec1-v2.pdf page 100 + """ + + _fields = [ + ('field_type', FieldType), + ('parameters', Any), + ] + + _oid_pair = ('field_type', 'parameters') + _oid_specs = { + 'prime_field': Integer, + 'characteristic_two_field': CharacteristicTwo, + } + + +class Curve(Sequence): + """ + Source: http://www.secg.org/sec1-v2.pdf page 104 + """ + + _fields = [ + ('a', OctetString), + ('b', OctetString), + ('seed', OctetBitString, {'optional': True}), + ] + + +class SpecifiedECDomain(Sequence): + """ + Source: http://www.secg.org/sec1-v2.pdf page 103 + """ + + _fields = [ + ('version', SpecifiedECDomainVersion), + ('field_id', FieldID), + ('curve', Curve), + ('base', ECPoint), + ('order', Integer), + ('cofactor', Integer, {'optional': True}), + ('hash', DigestAlgorithm, {'optional': True}), + ] + + +class NamedCurve(ObjectIdentifier): + """ + Various named curves + + Original Name: None + Source: https://tools.ietf.org/html/rfc3279#page-23, + https://tools.ietf.org/html/rfc5480#page-5 + """ + + _map = { + # https://tools.ietf.org/html/rfc3279#page-23 + '1.2.840.10045.3.0.1': 'c2pnb163v1', + '1.2.840.10045.3.0.2': 'c2pnb163v2', + '1.2.840.10045.3.0.3': 'c2pnb163v3', + '1.2.840.10045.3.0.4': 'c2pnb176w1', + '1.2.840.10045.3.0.5': 'c2tnb191v1', + '1.2.840.10045.3.0.6': 'c2tnb191v2', + '1.2.840.10045.3.0.7': 'c2tnb191v3', + '1.2.840.10045.3.0.8': 'c2onb191v4', + '1.2.840.10045.3.0.9': 'c2onb191v5', + '1.2.840.10045.3.0.10': 'c2pnb208w1', + '1.2.840.10045.3.0.11': 'c2tnb239v1', + '1.2.840.10045.3.0.12': 'c2tnb239v2', + '1.2.840.10045.3.0.13': 'c2tnb239v3', + '1.2.840.10045.3.0.14': 'c2onb239v4', + '1.2.840.10045.3.0.15': 'c2onb239v5', + '1.2.840.10045.3.0.16': 'c2pnb272w1', + '1.2.840.10045.3.0.17': 'c2pnb304w1', + '1.2.840.10045.3.0.18': 'c2tnb359v1', + '1.2.840.10045.3.0.19': 'c2pnb368w1', + '1.2.840.10045.3.0.20': 'c2tnb431r1', + '1.2.840.10045.3.1.2': 'prime192v2', + '1.2.840.10045.3.1.3': 'prime192v3', + '1.2.840.10045.3.1.4': 'prime239v1', + '1.2.840.10045.3.1.5': 'prime239v2', + '1.2.840.10045.3.1.6': 'prime239v3', + # https://tools.ietf.org/html/rfc5480#page-5 + # http://www.secg.org/SEC2-Ver-1.0.pdf + '1.2.840.10045.3.1.1': 'secp192r1', + '1.2.840.10045.3.1.7': 'secp256r1', + '1.3.132.0.1': 'sect163k1', + '1.3.132.0.2': 'sect163r1', + '1.3.132.0.3': 'sect239k1', + '1.3.132.0.4': 'sect113r1', + '1.3.132.0.5': 'sect113r2', + '1.3.132.0.6': 'secp112r1', + '1.3.132.0.7': 'secp112r2', + '1.3.132.0.8': 'secp160r1', + '1.3.132.0.9': 'secp160k1', + '1.3.132.0.10': 'secp256k1', + '1.3.132.0.15': 'sect163r2', + '1.3.132.0.16': 'sect283k1', + '1.3.132.0.17': 'sect283r1', + '1.3.132.0.22': 'sect131r1', + '1.3.132.0.23': 'sect131r2', + '1.3.132.0.24': 'sect193r1', + '1.3.132.0.25': 'sect193r2', + '1.3.132.0.26': 'sect233k1', + '1.3.132.0.27': 'sect233r1', + '1.3.132.0.28': 'secp128r1', + '1.3.132.0.29': 'secp128r2', + '1.3.132.0.30': 'secp160r2', + '1.3.132.0.31': 'secp192k1', + '1.3.132.0.32': 'secp224k1', + '1.3.132.0.33': 'secp224r1', + '1.3.132.0.34': 'secp384r1', + '1.3.132.0.35': 'secp521r1', + '1.3.132.0.36': 'sect409k1', + '1.3.132.0.37': 'sect409r1', + '1.3.132.0.38': 'sect571k1', + '1.3.132.0.39': 'sect571r1', + # https://tools.ietf.org/html/rfc5639#section-4.1 + '1.3.36.3.3.2.8.1.1.1': 'brainpoolp160r1', + '1.3.36.3.3.2.8.1.1.2': 'brainpoolp160t1', + '1.3.36.3.3.2.8.1.1.3': 'brainpoolp192r1', + '1.3.36.3.3.2.8.1.1.4': 'brainpoolp192t1', + '1.3.36.3.3.2.8.1.1.5': 'brainpoolp224r1', + '1.3.36.3.3.2.8.1.1.6': 'brainpoolp224t1', + '1.3.36.3.3.2.8.1.1.7': 'brainpoolp256r1', + '1.3.36.3.3.2.8.1.1.8': 'brainpoolp256t1', + '1.3.36.3.3.2.8.1.1.9': 'brainpoolp320r1', + '1.3.36.3.3.2.8.1.1.10': 'brainpoolp320t1', + '1.3.36.3.3.2.8.1.1.11': 'brainpoolp384r1', + '1.3.36.3.3.2.8.1.1.12': 'brainpoolp384t1', + '1.3.36.3.3.2.8.1.1.13': 'brainpoolp512r1', + '1.3.36.3.3.2.8.1.1.14': 'brainpoolp512t1', + } + + _key_sizes = { + # Order values used to compute these sourced from + # http://cr.openjdk.java.net/~vinnie/7194075/webrev-3/src/share/classes/sun/security/ec/CurveDB.java.html + '1.2.840.10045.3.0.1': 21, + '1.2.840.10045.3.0.2': 21, + '1.2.840.10045.3.0.3': 21, + '1.2.840.10045.3.0.4': 21, + '1.2.840.10045.3.0.5': 24, + '1.2.840.10045.3.0.6': 24, + '1.2.840.10045.3.0.7': 24, + '1.2.840.10045.3.0.8': 24, + '1.2.840.10045.3.0.9': 24, + '1.2.840.10045.3.0.10': 25, + '1.2.840.10045.3.0.11': 30, + '1.2.840.10045.3.0.12': 30, + '1.2.840.10045.3.0.13': 30, + '1.2.840.10045.3.0.14': 30, + '1.2.840.10045.3.0.15': 30, + '1.2.840.10045.3.0.16': 33, + '1.2.840.10045.3.0.17': 37, + '1.2.840.10045.3.0.18': 45, + '1.2.840.10045.3.0.19': 45, + '1.2.840.10045.3.0.20': 53, + '1.2.840.10045.3.1.2': 24, + '1.2.840.10045.3.1.3': 24, + '1.2.840.10045.3.1.4': 30, + '1.2.840.10045.3.1.5': 30, + '1.2.840.10045.3.1.6': 30, + # Order values used to compute these sourced from + # http://www.secg.org/SEC2-Ver-1.0.pdf + # ceil(n.bit_length() / 8) + '1.2.840.10045.3.1.1': 24, + '1.2.840.10045.3.1.7': 32, + '1.3.132.0.1': 21, + '1.3.132.0.2': 21, + '1.3.132.0.3': 30, + '1.3.132.0.4': 15, + '1.3.132.0.5': 15, + '1.3.132.0.6': 14, + '1.3.132.0.7': 14, + '1.3.132.0.8': 21, + '1.3.132.0.9': 21, + '1.3.132.0.10': 32, + '1.3.132.0.15': 21, + '1.3.132.0.16': 36, + '1.3.132.0.17': 36, + '1.3.132.0.22': 17, + '1.3.132.0.23': 17, + '1.3.132.0.24': 25, + '1.3.132.0.25': 25, + '1.3.132.0.26': 29, + '1.3.132.0.27': 30, + '1.3.132.0.28': 16, + '1.3.132.0.29': 16, + '1.3.132.0.30': 21, + '1.3.132.0.31': 24, + '1.3.132.0.32': 29, + '1.3.132.0.33': 28, + '1.3.132.0.34': 48, + '1.3.132.0.35': 66, + '1.3.132.0.36': 51, + '1.3.132.0.37': 52, + '1.3.132.0.38': 72, + '1.3.132.0.39': 72, + # Order values used to compute these sourced from + # https://tools.ietf.org/html/rfc5639#section-3 + # ceil(q.bit_length() / 8) + '1.3.36.3.3.2.8.1.1.1': 20, + '1.3.36.3.3.2.8.1.1.2': 20, + '1.3.36.3.3.2.8.1.1.3': 24, + '1.3.36.3.3.2.8.1.1.4': 24, + '1.3.36.3.3.2.8.1.1.5': 28, + '1.3.36.3.3.2.8.1.1.6': 28, + '1.3.36.3.3.2.8.1.1.7': 32, + '1.3.36.3.3.2.8.1.1.8': 32, + '1.3.36.3.3.2.8.1.1.9': 40, + '1.3.36.3.3.2.8.1.1.10': 40, + '1.3.36.3.3.2.8.1.1.11': 48, + '1.3.36.3.3.2.8.1.1.12': 48, + '1.3.36.3.3.2.8.1.1.13': 64, + '1.3.36.3.3.2.8.1.1.14': 64, + } + + @classmethod + def register(cls, name, oid, key_size): + """ + Registers a new named elliptic curve that is not included in the + default list of named curves + + :param name: + A unicode string of the curve name + + :param oid: + A unicode string of the dotted format OID + + :param key_size: + An integer of the number of bytes the private key should be + encoded to + """ + + cls._map[oid] = name + if cls._reverse_map is not None: + cls._reverse_map[name] = oid + cls._key_sizes[oid] = key_size + + +class ECDomainParameters(Choice): + """ + Source: http://www.secg.org/sec1-v2.pdf page 102 + """ + + _alternatives = [ + ('specified', SpecifiedECDomain), + ('named', NamedCurve), + ('implicit_ca', Null), + ] + + @property + def key_size(self): + if self.name == 'implicit_ca': + raise ValueError(unwrap( + ''' + Unable to calculate key_size from ECDomainParameters + that are implicitly defined by the CA key + ''' + )) + + if self.name == 'specified': + order = self.chosen['order'].native + return math.ceil(math.log(order, 2.0) / 8.0) + + oid = self.chosen.dotted + if oid not in NamedCurve._key_sizes: + raise ValueError(unwrap( + ''' + The asn1crypto.keys.NamedCurve %s does not have a registered key length, + please call asn1crypto.keys.NamedCurve.register() + ''', + repr(oid) + )) + return NamedCurve._key_sizes[oid] + + +class ECPrivateKeyVersion(Integer): + """ + Original Name: None + Source: http://www.secg.org/sec1-v2.pdf page 108 + """ + + _map = { + 1: 'ecPrivkeyVer1', + } + + +class ECPrivateKey(Sequence): + """ + Source: http://www.secg.org/sec1-v2.pdf page 108 + """ + + _fields = [ + ('version', ECPrivateKeyVersion), + ('private_key', IntegerOctetString), + ('parameters', ECDomainParameters, {'explicit': 0, 'optional': True}), + ('public_key', ECPointBitString, {'explicit': 1, 'optional': True}), + ] + + # Ensures the key is set to the correct length when encoding + _key_size = None + + # This is necessary to ensure the private_key IntegerOctetString is encoded properly + def __setitem__(self, key, value): + res = super(ECPrivateKey, self).__setitem__(key, value) + + if key == 'private_key': + if self._key_size is None: + # Infer the key_size from the existing private key if possible + pkey_contents = self['private_key'].contents + if isinstance(pkey_contents, byte_cls) and len(pkey_contents) > 1: + self.set_key_size(len(self['private_key'].contents)) + + elif self._key_size is not None: + self._update_key_size() + + elif key == 'parameters' and isinstance(self['parameters'], ECDomainParameters) and \ + self['parameters'].name != 'implicit_ca': + self.set_key_size(self['parameters'].key_size) + + return res + + def set_key_size(self, key_size): + """ + Sets the key_size to ensure the private key is encoded to the proper length + + :param key_size: + An integer byte length to encode the private_key to + """ + + self._key_size = key_size + self._update_key_size() + + def _update_key_size(self): + """ + Ensure the private_key explicit encoding width is set + """ + + if self._key_size is not None and isinstance(self['private_key'], IntegerOctetString): + self['private_key'].set_encoded_width(self._key_size) + + +class DSAParams(Sequence): + """ + Parameters for a DSA public or private key + + Original Name: Dss-Parms + Source: https://tools.ietf.org/html/rfc3279#page-9 + """ + + _fields = [ + ('p', Integer), + ('q', Integer), + ('g', Integer), + ] + + +class Attribute(Sequence): + """ + Source: https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.501-198811-S!!PDF-E&type=items page 8 + """ + + _fields = [ + ('type', ObjectIdentifier), + ('values', SetOf, {'spec': Any}), + ] + + +class Attributes(SetOf): + """ + Source: https://tools.ietf.org/html/rfc5208#page-3 + """ + + _child_spec = Attribute + + +class PrivateKeyAlgorithmId(ObjectIdentifier): + """ + These OIDs for various public keys are reused when storing private keys + inside of a PKCS#8 structure + + Original Name: None + Source: https://tools.ietf.org/html/rfc3279 + """ + + _map = { + # https://tools.ietf.org/html/rfc3279#page-19 + '1.2.840.113549.1.1.1': 'rsa', + # https://tools.ietf.org/html/rfc4055#page-8 + '1.2.840.113549.1.1.10': 'rsassa_pss', + # https://tools.ietf.org/html/rfc3279#page-18 + '1.2.840.10040.4.1': 'dsa', + # https://tools.ietf.org/html/rfc3279#page-13 + '1.2.840.10045.2.1': 'ec', + # https://tools.ietf.org/html/rfc8410#section-9 + '1.3.101.110': 'x25519', + '1.3.101.111': 'x448', + '1.3.101.112': 'ed25519', + '1.3.101.113': 'ed448', + } + + +class PrivateKeyAlgorithm(_ForceNullParameters, Sequence): + """ + Original Name: PrivateKeyAlgorithmIdentifier + Source: https://tools.ietf.org/html/rfc5208#page-3 + """ + + _fields = [ + ('algorithm', PrivateKeyAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + _oid_pair = ('algorithm', 'parameters') + _oid_specs = { + 'dsa': DSAParams, + 'ec': ECDomainParameters, + 'rsassa_pss': RSASSAPSSParams, + } + + +class PrivateKeyInfo(Sequence): + """ + Source: https://tools.ietf.org/html/rfc5208#page-3 + """ + + _fields = [ + ('version', Integer), + ('private_key_algorithm', PrivateKeyAlgorithm), + ('private_key', ParsableOctetString), + ('attributes', Attributes, {'implicit': 0, 'optional': True}), + ] + + def _private_key_spec(self): + algorithm = self['private_key_algorithm']['algorithm'].native + return { + 'rsa': RSAPrivateKey, + 'rsassa_pss': RSAPrivateKey, + 'dsa': Integer, + 'ec': ECPrivateKey, + # These should be treated as opaque octet strings according + # to RFC 8410 + 'x25519': OctetString, + 'x448': OctetString, + 'ed25519': OctetString, + 'ed448': OctetString, + }[algorithm] + + _spec_callbacks = { + 'private_key': _private_key_spec + } + + _algorithm = None + _bit_size = None + _public_key = None + _fingerprint = None + + @classmethod + def wrap(cls, private_key, algorithm): + """ + Wraps a private key in a PrivateKeyInfo structure + + :param private_key: + A byte string or Asn1Value object of the private key + + :param algorithm: + A unicode string of "rsa", "dsa" or "ec" + + :return: + A PrivateKeyInfo object + """ + + if not isinstance(private_key, byte_cls) and not isinstance(private_key, Asn1Value): + raise TypeError(unwrap( + ''' + private_key must be a byte string or Asn1Value, not %s + ''', + type_name(private_key) + )) + + if algorithm == 'rsa' or algorithm == 'rsassa_pss': + if not isinstance(private_key, RSAPrivateKey): + private_key = RSAPrivateKey.load(private_key) + params = Null() + elif algorithm == 'dsa': + if not isinstance(private_key, DSAPrivateKey): + private_key = DSAPrivateKey.load(private_key) + params = DSAParams() + params['p'] = private_key['p'] + params['q'] = private_key['q'] + params['g'] = private_key['g'] + public_key = private_key['public_key'] + private_key = private_key['private_key'] + elif algorithm == 'ec': + if not isinstance(private_key, ECPrivateKey): + private_key = ECPrivateKey.load(private_key) + else: + private_key = private_key.copy() + params = private_key['parameters'] + del private_key['parameters'] + else: + raise ValueError(unwrap( + ''' + algorithm must be one of "rsa", "dsa", "ec", not %s + ''', + repr(algorithm) + )) + + private_key_algo = PrivateKeyAlgorithm() + private_key_algo['algorithm'] = PrivateKeyAlgorithmId(algorithm) + private_key_algo['parameters'] = params + + container = cls() + container._algorithm = algorithm + container['version'] = Integer(0) + container['private_key_algorithm'] = private_key_algo + container['private_key'] = private_key + + # Here we save the DSA public key if possible since it is not contained + # within the PKCS#8 structure for a DSA key + if algorithm == 'dsa': + container._public_key = public_key + + return container + + # This is necessary to ensure any contained ECPrivateKey is the + # correct size + def __setitem__(self, key, value): + res = super(PrivateKeyInfo, self).__setitem__(key, value) + + algorithm = self['private_key_algorithm'] + + # When possible, use the parameter info to make sure the private key encoding + # retains any necessary leading bytes, instead of them being dropped + if (key == 'private_key_algorithm' or key == 'private_key') and \ + algorithm['algorithm'].native == 'ec' and \ + isinstance(algorithm['parameters'], ECDomainParameters) and \ + algorithm['parameters'].name != 'implicit_ca' and \ + isinstance(self['private_key'], ParsableOctetString) and \ + isinstance(self['private_key'].parsed, ECPrivateKey): + self['private_key'].parsed.set_key_size(algorithm['parameters'].key_size) + + return res + + def unwrap(self): + """ + Unwraps the private key into an RSAPrivateKey, DSAPrivateKey or + ECPrivateKey object + + :return: + An RSAPrivateKey, DSAPrivateKey or ECPrivateKey object + """ + + raise APIException( + 'asn1crypto.keys.PrivateKeyInfo().unwrap() has been removed, ' + 'please use oscrypto.asymmetric.PrivateKey().unwrap() instead') + + @property + def curve(self): + """ + Returns information about the curve used for an EC key + + :raises: + ValueError - when the key is not an EC key + + :return: + A two-element tuple, with the first element being a unicode string + of "implicit_ca", "specified" or "named". If the first element is + "implicit_ca", the second is None. If "specified", the second is + an OrderedDict that is the native version of SpecifiedECDomain. If + "named", the second is a unicode string of the curve name. + """ + + if self.algorithm != 'ec': + raise ValueError(unwrap( + ''' + Only EC keys have a curve, this key is %s + ''', + self.algorithm.upper() + )) + + params = self['private_key_algorithm']['parameters'] + chosen = params.chosen + + if params.name == 'implicit_ca': + value = None + else: + value = chosen.native + + return (params.name, value) + + @property + def hash_algo(self): + """ + Returns the name of the family of hash algorithms used to generate a + DSA key + + :raises: + ValueError - when the key is not a DSA key + + :return: + A unicode string of "sha1" or "sha2" + """ + + if self.algorithm != 'dsa': + raise ValueError(unwrap( + ''' + Only DSA keys are generated using a hash algorithm, this key is + %s + ''', + self.algorithm.upper() + )) + + byte_len = math.log(self['private_key_algorithm']['parameters']['q'].native, 2) / 8 + + return 'sha1' if byte_len <= 20 else 'sha2' + + @property + def algorithm(self): + """ + :return: + A unicode string of "rsa", "rsassa_pss", "dsa" or "ec" + """ + + if self._algorithm is None: + self._algorithm = self['private_key_algorithm']['algorithm'].native + return self._algorithm + + @property + def bit_size(self): + """ + :return: + The bit size of the private key, as an integer + """ + + if self._bit_size is None: + if self.algorithm == 'rsa' or self.algorithm == 'rsassa_pss': + prime = self['private_key'].parsed['modulus'].native + elif self.algorithm == 'dsa': + prime = self['private_key_algorithm']['parameters']['p'].native + elif self.algorithm == 'ec': + prime = self['private_key'].parsed['private_key'].native + self._bit_size = int(math.ceil(math.log(prime, 2))) + modulus = self._bit_size % 8 + if modulus != 0: + self._bit_size += 8 - modulus + return self._bit_size + + @property + def byte_size(self): + """ + :return: + The byte size of the private key, as an integer + """ + + return int(math.ceil(self.bit_size / 8)) + + @property + def public_key(self): + """ + :return: + If an RSA key, an RSAPublicKey object. If a DSA key, an Integer + object. If an EC key, an ECPointBitString object. + """ + + raise APIException( + 'asn1crypto.keys.PrivateKeyInfo().public_key has been removed, ' + 'please use oscrypto.asymmetric.PrivateKey().public_key.unwrap() instead') + + @property + def public_key_info(self): + """ + :return: + A PublicKeyInfo object derived from this private key. + """ + + raise APIException( + 'asn1crypto.keys.PrivateKeyInfo().public_key_info has been removed, ' + 'please use oscrypto.asymmetric.PrivateKey().public_key.asn1 instead') + + @property + def fingerprint(self): + """ + Creates a fingerprint that can be compared with a public key to see if + the two form a pair. + + This fingerprint is not compatible with fingerprints generated by any + other software. + + :return: + A byte string that is a sha256 hash of selected components (based + on the key type) + """ + + raise APIException( + 'asn1crypto.keys.PrivateKeyInfo().fingerprint has been removed, ' + 'please use oscrypto.asymmetric.PrivateKey().fingerprint instead') + + +class EncryptedPrivateKeyInfo(Sequence): + """ + Source: https://tools.ietf.org/html/rfc5208#page-4 + """ + + _fields = [ + ('encryption_algorithm', EncryptionAlgorithm), + ('encrypted_data', OctetString), + ] + + +# These structures are from https://tools.ietf.org/html/rfc3279 + +class ValidationParms(Sequence): + """ + Source: https://tools.ietf.org/html/rfc3279#page-10 + """ + + _fields = [ + ('seed', BitString), + ('pgen_counter', Integer), + ] + + +class DomainParameters(Sequence): + """ + Source: https://tools.ietf.org/html/rfc3279#page-10 + """ + + _fields = [ + ('p', Integer), + ('g', Integer), + ('q', Integer), + ('j', Integer, {'optional': True}), + ('validation_params', ValidationParms, {'optional': True}), + ] + + +class PublicKeyAlgorithmId(ObjectIdentifier): + """ + Original Name: None + Source: https://tools.ietf.org/html/rfc3279 + """ + + _map = { + # https://tools.ietf.org/html/rfc3279#page-19 + '1.2.840.113549.1.1.1': 'rsa', + # https://tools.ietf.org/html/rfc3447#page-47 + '1.2.840.113549.1.1.7': 'rsaes_oaep', + # https://tools.ietf.org/html/rfc4055#page-8 + '1.2.840.113549.1.1.10': 'rsassa_pss', + # https://tools.ietf.org/html/rfc3279#page-18 + '1.2.840.10040.4.1': 'dsa', + # https://tools.ietf.org/html/rfc3279#page-13 + '1.2.840.10045.2.1': 'ec', + # https://tools.ietf.org/html/rfc3279#page-10 + '1.2.840.10046.2.1': 'dh', + # https://tools.ietf.org/html/rfc8410#section-9 + '1.3.101.110': 'x25519', + '1.3.101.111': 'x448', + '1.3.101.112': 'ed25519', + '1.3.101.113': 'ed448', + } + + +class PublicKeyAlgorithm(_ForceNullParameters, Sequence): + """ + Original Name: AlgorithmIdentifier + Source: https://tools.ietf.org/html/rfc5280#page-18 + """ + + _fields = [ + ('algorithm', PublicKeyAlgorithmId), + ('parameters', Any, {'optional': True}), + ] + + _oid_pair = ('algorithm', 'parameters') + _oid_specs = { + 'dsa': DSAParams, + 'ec': ECDomainParameters, + 'dh': DomainParameters, + 'rsaes_oaep': RSAESOAEPParams, + 'rsassa_pss': RSASSAPSSParams, + } + + +class PublicKeyInfo(Sequence): + """ + Original Name: SubjectPublicKeyInfo + Source: https://tools.ietf.org/html/rfc5280#page-17 + """ + + _fields = [ + ('algorithm', PublicKeyAlgorithm), + ('public_key', ParsableOctetBitString), + ] + + def _public_key_spec(self): + algorithm = self['algorithm']['algorithm'].native + return { + 'rsa': RSAPublicKey, + 'rsaes_oaep': RSAPublicKey, + 'rsassa_pss': RSAPublicKey, + 'dsa': Integer, + # We override the field spec with ECPoint so that users can easily + # decompose the byte string into the constituent X and Y coords + 'ec': (ECPointBitString, None), + 'dh': Integer, + # These should be treated as opaque bit strings according + # to RFC 8410, and need not even be valid ASN.1 + 'x25519': (OctetBitString, None), + 'x448': (OctetBitString, None), + 'ed25519': (OctetBitString, None), + 'ed448': (OctetBitString, None), + }[algorithm] + + _spec_callbacks = { + 'public_key': _public_key_spec + } + + _algorithm = None + _bit_size = None + _fingerprint = None + _sha1 = None + _sha256 = None + + @classmethod + def wrap(cls, public_key, algorithm): + """ + Wraps a public key in a PublicKeyInfo structure + + :param public_key: + A byte string or Asn1Value object of the public key + + :param algorithm: + A unicode string of "rsa" + + :return: + A PublicKeyInfo object + """ + + if not isinstance(public_key, byte_cls) and not isinstance(public_key, Asn1Value): + raise TypeError(unwrap( + ''' + public_key must be a byte string or Asn1Value, not %s + ''', + type_name(public_key) + )) + + if algorithm != 'rsa' and algorithm != 'rsassa_pss': + raise ValueError(unwrap( + ''' + algorithm must "rsa", not %s + ''', + repr(algorithm) + )) + + algo = PublicKeyAlgorithm() + algo['algorithm'] = PublicKeyAlgorithmId(algorithm) + algo['parameters'] = Null() + + container = cls() + container['algorithm'] = algo + if isinstance(public_key, Asn1Value): + public_key = public_key.untag().dump() + container['public_key'] = ParsableOctetBitString(public_key) + + return container + + def unwrap(self): + """ + Unwraps an RSA public key into an RSAPublicKey object. Does not support + DSA or EC public keys since they do not have an unwrapped form. + + :return: + An RSAPublicKey object + """ + + raise APIException( + 'asn1crypto.keys.PublicKeyInfo().unwrap() has been removed, ' + 'please use oscrypto.asymmetric.PublicKey().unwrap() instead') + + @property + def curve(self): + """ + Returns information about the curve used for an EC key + + :raises: + ValueError - when the key is not an EC key + + :return: + A two-element tuple, with the first element being a unicode string + of "implicit_ca", "specified" or "named". If the first element is + "implicit_ca", the second is None. If "specified", the second is + an OrderedDict that is the native version of SpecifiedECDomain. If + "named", the second is a unicode string of the curve name. + """ + + if self.algorithm != 'ec': + raise ValueError(unwrap( + ''' + Only EC keys have a curve, this key is %s + ''', + self.algorithm.upper() + )) + + params = self['algorithm']['parameters'] + chosen = params.chosen + + if params.name == 'implicit_ca': + value = None + else: + value = chosen.native + + return (params.name, value) + + @property + def hash_algo(self): + """ + Returns the name of the family of hash algorithms used to generate a + DSA key + + :raises: + ValueError - when the key is not a DSA key + + :return: + A unicode string of "sha1" or "sha2" or None if no parameters are + present + """ + + if self.algorithm != 'dsa': + raise ValueError(unwrap( + ''' + Only DSA keys are generated using a hash algorithm, this key is + %s + ''', + self.algorithm.upper() + )) + + parameters = self['algorithm']['parameters'] + if parameters.native is None: + return None + + byte_len = math.log(parameters['q'].native, 2) / 8 + + return 'sha1' if byte_len <= 20 else 'sha2' + + @property + def algorithm(self): + """ + :return: + A unicode string of "rsa", "rsassa_pss", "dsa" or "ec" + """ + + if self._algorithm is None: + self._algorithm = self['algorithm']['algorithm'].native + return self._algorithm + + @property + def bit_size(self): + """ + :return: + The bit size of the public key, as an integer + """ + + if self._bit_size is None: + if self.algorithm == 'ec': + self._bit_size = int(((len(self['public_key'].native) - 1) / 2) * 8) + else: + if self.algorithm == 'rsa' or self.algorithm == 'rsassa_pss': + prime = self['public_key'].parsed['modulus'].native + elif self.algorithm == 'dsa': + prime = self['algorithm']['parameters']['p'].native + self._bit_size = int(math.ceil(math.log(prime, 2))) + modulus = self._bit_size % 8 + if modulus != 0: + self._bit_size += 8 - modulus + + return self._bit_size + + @property + def byte_size(self): + """ + :return: + The byte size of the public key, as an integer + """ + + return int(math.ceil(self.bit_size / 8)) + + @property + def sha1(self): + """ + :return: + The SHA1 hash of the DER-encoded bytes of this public key info + """ + + if self._sha1 is None: + self._sha1 = hashlib.sha1(byte_cls(self['public_key'])).digest() + return self._sha1 + + @property + def sha256(self): + """ + :return: + The SHA-256 hash of the DER-encoded bytes of this public key info + """ + + if self._sha256 is None: + self._sha256 = hashlib.sha256(byte_cls(self['public_key'])).digest() + return self._sha256 + + @property + def fingerprint(self): + """ + Creates a fingerprint that can be compared with a private key to see if + the two form a pair. + + This fingerprint is not compatible with fingerprints generated by any + other software. + + :return: + A byte string that is a sha256 hash of selected components (based + on the key type) + """ + + raise APIException( + 'asn1crypto.keys.PublicKeyInfo().fingerprint has been removed, ' + 'please use oscrypto.asymmetric.PublicKey().fingerprint instead') diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/ocsp.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/ocsp.py new file mode 100644 index 00000000..91c7fbf3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/ocsp.py @@ -0,0 +1,703 @@ +# coding: utf-8 + +""" +ASN.1 type classes for the online certificate status protocol (OCSP). Exports +the following items: + + - OCSPRequest() + - OCSPResponse() + +Other type classes are defined that help compose the types listed above. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +from ._errors import unwrap +from .algos import DigestAlgorithm, SignedDigestAlgorithm +from .core import ( + Boolean, + Choice, + Enumerated, + GeneralizedTime, + IA5String, + Integer, + Null, + ObjectIdentifier, + OctetBitString, + OctetString, + ParsableOctetString, + Sequence, + SequenceOf, +) +from .crl import AuthorityInfoAccessSyntax, CRLReason +from .keys import PublicKeyAlgorithm +from .x509 import Certificate, GeneralName, GeneralNames, Name + + +# The structures in this file are taken from https://tools.ietf.org/html/rfc6960 + + +class Version(Integer): + _map = { + 0: 'v1' + } + + +class CertId(Sequence): + _fields = [ + ('hash_algorithm', DigestAlgorithm), + ('issuer_name_hash', OctetString), + ('issuer_key_hash', OctetString), + ('serial_number', Integer), + ] + + +class ServiceLocator(Sequence): + _fields = [ + ('issuer', Name), + ('locator', AuthorityInfoAccessSyntax), + ] + + +class RequestExtensionId(ObjectIdentifier): + _map = { + '1.3.6.1.5.5.7.48.1.7': 'service_locator', + } + + +class RequestExtension(Sequence): + _fields = [ + ('extn_id', RequestExtensionId), + ('critical', Boolean, {'default': False}), + ('extn_value', ParsableOctetString), + ] + + _oid_pair = ('extn_id', 'extn_value') + _oid_specs = { + 'service_locator': ServiceLocator, + } + + +class RequestExtensions(SequenceOf): + _child_spec = RequestExtension + + +class Request(Sequence): + _fields = [ + ('req_cert', CertId), + ('single_request_extensions', RequestExtensions, {'explicit': 0, 'optional': True}), + ] + + _processed_extensions = False + _critical_extensions = None + _service_locator_value = None + + def _set_extensions(self): + """ + Sets common named extensions to private attributes and creates a list + of critical extensions + """ + + self._critical_extensions = set() + + for extension in self['single_request_extensions']: + name = extension['extn_id'].native + attribute_name = '_%s_value' % name + if hasattr(self, attribute_name): + setattr(self, attribute_name, extension['extn_value'].parsed) + if extension['critical'].native: + self._critical_extensions.add(name) + + self._processed_extensions = True + + @property + def critical_extensions(self): + """ + Returns a set of the names (or OID if not a known extension) of the + extensions marked as critical + + :return: + A set of unicode strings + """ + + if not self._processed_extensions: + self._set_extensions() + return self._critical_extensions + + @property + def service_locator_value(self): + """ + This extension is used when communicating with an OCSP responder that + acts as a proxy for OCSP requests + + :return: + None or a ServiceLocator object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._service_locator_value + + +class Requests(SequenceOf): + _child_spec = Request + + +class ResponseType(ObjectIdentifier): + _map = { + '1.3.6.1.5.5.7.48.1.1': 'basic_ocsp_response', + } + + +class AcceptableResponses(SequenceOf): + _child_spec = ResponseType + + +class PreferredSignatureAlgorithm(Sequence): + _fields = [ + ('sig_identifier', SignedDigestAlgorithm), + ('cert_identifier', PublicKeyAlgorithm, {'optional': True}), + ] + + +class PreferredSignatureAlgorithms(SequenceOf): + _child_spec = PreferredSignatureAlgorithm + + +class TBSRequestExtensionId(ObjectIdentifier): + _map = { + '1.3.6.1.5.5.7.48.1.2': 'nonce', + '1.3.6.1.5.5.7.48.1.4': 'acceptable_responses', + '1.3.6.1.5.5.7.48.1.8': 'preferred_signature_algorithms', + } + + +class TBSRequestExtension(Sequence): + _fields = [ + ('extn_id', TBSRequestExtensionId), + ('critical', Boolean, {'default': False}), + ('extn_value', ParsableOctetString), + ] + + _oid_pair = ('extn_id', 'extn_value') + _oid_specs = { + 'nonce': OctetString, + 'acceptable_responses': AcceptableResponses, + 'preferred_signature_algorithms': PreferredSignatureAlgorithms, + } + + +class TBSRequestExtensions(SequenceOf): + _child_spec = TBSRequestExtension + + +class TBSRequest(Sequence): + _fields = [ + ('version', Version, {'explicit': 0, 'default': 'v1'}), + ('requestor_name', GeneralName, {'explicit': 1, 'optional': True}), + ('request_list', Requests), + ('request_extensions', TBSRequestExtensions, {'explicit': 2, 'optional': True}), + ] + + +class Certificates(SequenceOf): + _child_spec = Certificate + + +class Signature(Sequence): + _fields = [ + ('signature_algorithm', SignedDigestAlgorithm), + ('signature', OctetBitString), + ('certs', Certificates, {'explicit': 0, 'optional': True}), + ] + + +class OCSPRequest(Sequence): + _fields = [ + ('tbs_request', TBSRequest), + ('optional_signature', Signature, {'explicit': 0, 'optional': True}), + ] + + _processed_extensions = False + _critical_extensions = None + _nonce_value = None + _acceptable_responses_value = None + _preferred_signature_algorithms_value = None + + def _set_extensions(self): + """ + Sets common named extensions to private attributes and creates a list + of critical extensions + """ + + self._critical_extensions = set() + + for extension in self['tbs_request']['request_extensions']: + name = extension['extn_id'].native + attribute_name = '_%s_value' % name + if hasattr(self, attribute_name): + setattr(self, attribute_name, extension['extn_value'].parsed) + if extension['critical'].native: + self._critical_extensions.add(name) + + self._processed_extensions = True + + @property + def critical_extensions(self): + """ + Returns a set of the names (or OID if not a known extension) of the + extensions marked as critical + + :return: + A set of unicode strings + """ + + if not self._processed_extensions: + self._set_extensions() + return self._critical_extensions + + @property + def nonce_value(self): + """ + This extension is used to prevent replay attacks by including a unique, + random value with each request/response pair + + :return: + None or an OctetString object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._nonce_value + + @property + def acceptable_responses_value(self): + """ + This extension is used to allow the client and server to communicate + with alternative response formats other than just basic_ocsp_response, + although no other formats are defined in the standard. + + :return: + None or an AcceptableResponses object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._acceptable_responses_value + + @property + def preferred_signature_algorithms_value(self): + """ + This extension is used by the client to define what signature algorithms + are preferred, including both the hash algorithm and the public key + algorithm, with a level of detail down to even the public key algorithm + parameters, such as curve name. + + :return: + None or a PreferredSignatureAlgorithms object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._preferred_signature_algorithms_value + + +class OCSPResponseStatus(Enumerated): + _map = { + 0: 'successful', + 1: 'malformed_request', + 2: 'internal_error', + 3: 'try_later', + 5: 'sign_required', + 6: 'unauthorized', + } + + +class ResponderId(Choice): + _alternatives = [ + ('by_name', Name, {'explicit': 1}), + ('by_key', OctetString, {'explicit': 2}), + ] + + +# Custom class to return a meaningful .native attribute from CertStatus() +class StatusGood(Null): + def set(self, value): + """ + Sets the value of the object + + :param value: + None or 'good' + """ + + if value is not None and value != 'good' and not isinstance(value, Null): + raise ValueError(unwrap( + ''' + value must be one of None, "good", not %s + ''', + repr(value) + )) + + self.contents = b'' + + @property + def native(self): + return 'good' + + +# Custom class to return a meaningful .native attribute from CertStatus() +class StatusUnknown(Null): + def set(self, value): + """ + Sets the value of the object + + :param value: + None or 'unknown' + """ + + if value is not None and value != 'unknown' and not isinstance(value, Null): + raise ValueError(unwrap( + ''' + value must be one of None, "unknown", not %s + ''', + repr(value) + )) + + self.contents = b'' + + @property + def native(self): + return 'unknown' + + +class RevokedInfo(Sequence): + _fields = [ + ('revocation_time', GeneralizedTime), + ('revocation_reason', CRLReason, {'explicit': 0, 'optional': True}), + ] + + +class CertStatus(Choice): + _alternatives = [ + ('good', StatusGood, {'implicit': 0}), + ('revoked', RevokedInfo, {'implicit': 1}), + ('unknown', StatusUnknown, {'implicit': 2}), + ] + + +class CrlId(Sequence): + _fields = [ + ('crl_url', IA5String, {'explicit': 0, 'optional': True}), + ('crl_num', Integer, {'explicit': 1, 'optional': True}), + ('crl_time', GeneralizedTime, {'explicit': 2, 'optional': True}), + ] + + +class SingleResponseExtensionId(ObjectIdentifier): + _map = { + '1.3.6.1.5.5.7.48.1.3': 'crl', + '1.3.6.1.5.5.7.48.1.6': 'archive_cutoff', + # These are CRLEntryExtension values from + # https://tools.ietf.org/html/rfc5280 + '2.5.29.21': 'crl_reason', + '2.5.29.24': 'invalidity_date', + '2.5.29.29': 'certificate_issuer', + # https://tools.ietf.org/html/rfc6962.html#page-13 + '1.3.6.1.4.1.11129.2.4.5': 'signed_certificate_timestamp_list', + } + + +class SingleResponseExtension(Sequence): + _fields = [ + ('extn_id', SingleResponseExtensionId), + ('critical', Boolean, {'default': False}), + ('extn_value', ParsableOctetString), + ] + + _oid_pair = ('extn_id', 'extn_value') + _oid_specs = { + 'crl': CrlId, + 'archive_cutoff': GeneralizedTime, + 'crl_reason': CRLReason, + 'invalidity_date': GeneralizedTime, + 'certificate_issuer': GeneralNames, + 'signed_certificate_timestamp_list': OctetString, + } + + +class SingleResponseExtensions(SequenceOf): + _child_spec = SingleResponseExtension + + +class SingleResponse(Sequence): + _fields = [ + ('cert_id', CertId), + ('cert_status', CertStatus), + ('this_update', GeneralizedTime), + ('next_update', GeneralizedTime, {'explicit': 0, 'optional': True}), + ('single_extensions', SingleResponseExtensions, {'explicit': 1, 'optional': True}), + ] + + _processed_extensions = False + _critical_extensions = None + _crl_value = None + _archive_cutoff_value = None + _crl_reason_value = None + _invalidity_date_value = None + _certificate_issuer_value = None + + def _set_extensions(self): + """ + Sets common named extensions to private attributes and creates a list + of critical extensions + """ + + self._critical_extensions = set() + + for extension in self['single_extensions']: + name = extension['extn_id'].native + attribute_name = '_%s_value' % name + if hasattr(self, attribute_name): + setattr(self, attribute_name, extension['extn_value'].parsed) + if extension['critical'].native: + self._critical_extensions.add(name) + + self._processed_extensions = True + + @property + def critical_extensions(self): + """ + Returns a set of the names (or OID if not a known extension) of the + extensions marked as critical + + :return: + A set of unicode strings + """ + + if not self._processed_extensions: + self._set_extensions() + return self._critical_extensions + + @property + def crl_value(self): + """ + This extension is used to locate the CRL that a certificate's revocation + is contained within. + + :return: + None or a CrlId object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._crl_value + + @property + def archive_cutoff_value(self): + """ + This extension is used to indicate the date at which an archived + (historical) certificate status entry will no longer be available. + + :return: + None or a GeneralizedTime object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._archive_cutoff_value + + @property + def crl_reason_value(self): + """ + This extension indicates the reason that a certificate was revoked. + + :return: + None or a CRLReason object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._crl_reason_value + + @property + def invalidity_date_value(self): + """ + This extension indicates the suspected date/time the private key was + compromised or the certificate became invalid. This would usually be + before the revocation date, which is when the CA processed the + revocation. + + :return: + None or a GeneralizedTime object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._invalidity_date_value + + @property + def certificate_issuer_value(self): + """ + This extension indicates the issuer of the certificate in question. + + :return: + None or an x509.GeneralNames object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._certificate_issuer_value + + +class Responses(SequenceOf): + _child_spec = SingleResponse + + +class ResponseDataExtensionId(ObjectIdentifier): + _map = { + '1.3.6.1.5.5.7.48.1.2': 'nonce', + '1.3.6.1.5.5.7.48.1.9': 'extended_revoke', + } + + +class ResponseDataExtension(Sequence): + _fields = [ + ('extn_id', ResponseDataExtensionId), + ('critical', Boolean, {'default': False}), + ('extn_value', ParsableOctetString), + ] + + _oid_pair = ('extn_id', 'extn_value') + _oid_specs = { + 'nonce': OctetString, + 'extended_revoke': Null, + } + + +class ResponseDataExtensions(SequenceOf): + _child_spec = ResponseDataExtension + + +class ResponseData(Sequence): + _fields = [ + ('version', Version, {'explicit': 0, 'default': 'v1'}), + ('responder_id', ResponderId), + ('produced_at', GeneralizedTime), + ('responses', Responses), + ('response_extensions', ResponseDataExtensions, {'explicit': 1, 'optional': True}), + ] + + +class BasicOCSPResponse(Sequence): + _fields = [ + ('tbs_response_data', ResponseData), + ('signature_algorithm', SignedDigestAlgorithm), + ('signature', OctetBitString), + ('certs', Certificates, {'explicit': 0, 'optional': True}), + ] + + +class ResponseBytes(Sequence): + _fields = [ + ('response_type', ResponseType), + ('response', ParsableOctetString), + ] + + _oid_pair = ('response_type', 'response') + _oid_specs = { + 'basic_ocsp_response': BasicOCSPResponse, + } + + +class OCSPResponse(Sequence): + _fields = [ + ('response_status', OCSPResponseStatus), + ('response_bytes', ResponseBytes, {'explicit': 0, 'optional': True}), + ] + + _processed_extensions = False + _critical_extensions = None + _nonce_value = None + _extended_revoke_value = None + + def _set_extensions(self): + """ + Sets common named extensions to private attributes and creates a list + of critical extensions + """ + + self._critical_extensions = set() + + for extension in self['response_bytes']['response'].parsed['tbs_response_data']['response_extensions']: + name = extension['extn_id'].native + attribute_name = '_%s_value' % name + if hasattr(self, attribute_name): + setattr(self, attribute_name, extension['extn_value'].parsed) + if extension['critical'].native: + self._critical_extensions.add(name) + + self._processed_extensions = True + + @property + def critical_extensions(self): + """ + Returns a set of the names (or OID if not a known extension) of the + extensions marked as critical + + :return: + A set of unicode strings + """ + + if not self._processed_extensions: + self._set_extensions() + return self._critical_extensions + + @property + def nonce_value(self): + """ + This extension is used to prevent replay attacks on the request/response + exchange + + :return: + None or an OctetString object + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._nonce_value + + @property + def extended_revoke_value(self): + """ + This extension is used to signal that the responder will return a + "revoked" status for non-issued certificates. + + :return: + None or a Null object (if present) + """ + + if self._processed_extensions is False: + self._set_extensions() + return self._extended_revoke_value + + @property + def basic_ocsp_response(self): + """ + A shortcut into the BasicOCSPResponse sequence + + :return: + None or an asn1crypto.ocsp.BasicOCSPResponse object + """ + + return self['response_bytes']['response'].parsed + + @property + def response_data(self): + """ + A shortcut into the parsed, ResponseData sequence + + :return: + None or an asn1crypto.ocsp.ResponseData object + """ + + return self['response_bytes']['response'].parsed['tbs_response_data'] diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/parser.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/parser.py new file mode 100644 index 00000000..2f5a63e1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/parser.py @@ -0,0 +1,292 @@ +# coding: utf-8 + +""" +Functions for parsing and dumping using the ASN.1 DER encoding. Exports the +following items: + + - emit() + - parse() + - peek() + +Other type classes are defined that help compose the types listed above. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +import sys + +from ._types import byte_cls, chr_cls, type_name +from .util import int_from_bytes, int_to_bytes + +_PY2 = sys.version_info <= (3,) +_INSUFFICIENT_DATA_MESSAGE = 'Insufficient data - %s bytes requested but only %s available' +_MAX_DEPTH = 10 + + +def emit(class_, method, tag, contents): + """ + Constructs a byte string of an ASN.1 DER-encoded value + + This is typically not useful. Instead, use one of the standard classes from + asn1crypto.core, or construct a new class with specific fields, and call the + .dump() method. + + :param class_: + An integer ASN.1 class value: 0 (universal), 1 (application), + 2 (context), 3 (private) + + :param method: + An integer ASN.1 method value: 0 (primitive), 1 (constructed) + + :param tag: + An integer ASN.1 tag value + + :param contents: + A byte string of the encoded byte contents + + :return: + A byte string of the ASN.1 DER value (header and contents) + """ + + if not isinstance(class_, int): + raise TypeError('class_ must be an integer, not %s' % type_name(class_)) + + if class_ < 0 or class_ > 3: + raise ValueError('class_ must be one of 0, 1, 2 or 3, not %s' % class_) + + if not isinstance(method, int): + raise TypeError('method must be an integer, not %s' % type_name(method)) + + if method < 0 or method > 1: + raise ValueError('method must be 0 or 1, not %s' % method) + + if not isinstance(tag, int): + raise TypeError('tag must be an integer, not %s' % type_name(tag)) + + if tag < 0: + raise ValueError('tag must be greater than zero, not %s' % tag) + + if not isinstance(contents, byte_cls): + raise TypeError('contents must be a byte string, not %s' % type_name(contents)) + + return _dump_header(class_, method, tag, contents) + contents + + +def parse(contents, strict=False): + """ + Parses a byte string of ASN.1 BER/DER-encoded data. + + This is typically not useful. Instead, use one of the standard classes from + asn1crypto.core, or construct a new class with specific fields, and call the + .load() class method. + + :param contents: + A byte string of BER/DER-encoded data + + :param strict: + A boolean indicating if trailing data should be forbidden - if so, a + ValueError will be raised when trailing data exists + + :raises: + ValueError - when the contents do not contain an ASN.1 header or are truncated in some way + TypeError - when contents is not a byte string + + :return: + A 6-element tuple: + - 0: integer class (0 to 3) + - 1: integer method + - 2: integer tag + - 3: byte string header + - 4: byte string content + - 5: byte string trailer + """ + + if not isinstance(contents, byte_cls): + raise TypeError('contents must be a byte string, not %s' % type_name(contents)) + + contents_len = len(contents) + info, consumed = _parse(contents, contents_len) + if strict and consumed != contents_len: + raise ValueError('Extra data - %d bytes of trailing data were provided' % (contents_len - consumed)) + return info + + +def peek(contents): + """ + Parses a byte string of ASN.1 BER/DER-encoded data to find the length + + This is typically used to look into an encoded value to see how long the + next chunk of ASN.1-encoded data is. Primarily it is useful when a + value is a concatenation of multiple values. + + :param contents: + A byte string of BER/DER-encoded data + + :raises: + ValueError - when the contents do not contain an ASN.1 header or are truncated in some way + TypeError - when contents is not a byte string + + :return: + An integer with the number of bytes occupied by the ASN.1 value + """ + + if not isinstance(contents, byte_cls): + raise TypeError('contents must be a byte string, not %s' % type_name(contents)) + + info, consumed = _parse(contents, len(contents)) + return consumed + + +def _parse(encoded_data, data_len, pointer=0, lengths_only=False, depth=0): + """ + Parses a byte string into component parts + + :param encoded_data: + A byte string that contains BER-encoded data + + :param data_len: + The integer length of the encoded data + + :param pointer: + The index in the byte string to parse from + + :param lengths_only: + A boolean to cause the call to return a 2-element tuple of the integer + number of bytes in the header and the integer number of bytes in the + contents. Internal use only. + + :param depth: + The recursion depth when evaluating indefinite-length encoding. + + :return: + A 2-element tuple: + - 0: A tuple of (class_, method, tag, header, content, trailer) + - 1: An integer indicating how many bytes were consumed + """ + + if depth > _MAX_DEPTH: + raise ValueError('Indefinite-length recursion limit exceeded') + + start = pointer + + if data_len < pointer + 1: + raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer)) + first_octet = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer] + + pointer += 1 + + tag = first_octet & 31 + constructed = (first_octet >> 5) & 1 + # Base 128 length using 8th bit as continuation indicator + if tag == 31: + tag = 0 + while True: + if data_len < pointer + 1: + raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer)) + num = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer] + pointer += 1 + if num == 0x80 and tag == 0: + raise ValueError('Non-minimal tag encoding') + tag *= 128 + tag += num & 127 + if num >> 7 == 0: + break + if tag < 31: + raise ValueError('Non-minimal tag encoding') + + if data_len < pointer + 1: + raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer)) + length_octet = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer] + pointer += 1 + trailer = b'' + + if length_octet >> 7 == 0: + contents_end = pointer + (length_octet & 127) + + else: + length_octets = length_octet & 127 + if length_octets: + if data_len < pointer + length_octets: + raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (length_octets, data_len - pointer)) + pointer += length_octets + contents_end = pointer + int_from_bytes(encoded_data[pointer - length_octets:pointer], signed=False) + + else: + # To properly parse indefinite length values, we need to scan forward + # parsing headers until we find a value with a length of zero. If we + # just scanned looking for \x00\x00, nested indefinite length values + # would not work. + if not constructed: + raise ValueError('Indefinite-length element must be constructed') + contents_end = pointer + while data_len < contents_end + 2 or encoded_data[contents_end:contents_end+2] != b'\x00\x00': + _, contents_end = _parse(encoded_data, data_len, contents_end, lengths_only=True, depth=depth+1) + contents_end += 2 + trailer = b'\x00\x00' + + if contents_end > data_len: + raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (contents_end - pointer, data_len - pointer)) + + if lengths_only: + return (pointer, contents_end) + + return ( + ( + first_octet >> 6, + constructed, + tag, + encoded_data[start:pointer], + encoded_data[pointer:contents_end-len(trailer)], + trailer + ), + contents_end + ) + + +def _dump_header(class_, method, tag, contents): + """ + Constructs the header bytes for an ASN.1 object + + :param class_: + An integer ASN.1 class value: 0 (universal), 1 (application), + 2 (context), 3 (private) + + :param method: + An integer ASN.1 method value: 0 (primitive), 1 (constructed) + + :param tag: + An integer ASN.1 tag value + + :param contents: + A byte string of the encoded byte contents + + :return: + A byte string of the ASN.1 DER header + """ + + header = b'' + + id_num = 0 + id_num |= class_ << 6 + id_num |= method << 5 + + if tag >= 31: + cont_bit = 0 + while tag > 0: + header = chr_cls(cont_bit | (tag & 0x7f)) + header + if not cont_bit: + cont_bit = 0x80 + tag = tag >> 7 + header = chr_cls(id_num | 31) + header + else: + header += chr_cls(id_num | tag) + + length = len(contents) + if length <= 127: + header += chr_cls(length) + else: + length_bytes = int_to_bytes(length) + header += chr_cls(0x80 | len(length_bytes)) + header += length_bytes + + return header diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/pdf.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/pdf.py new file mode 100644 index 00000000..b72c886c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/pdf.py @@ -0,0 +1,84 @@ +# coding: utf-8 + +""" +ASN.1 type classes for PDF signature structures. Adds extra oid mapping and +value parsing to asn1crypto.x509.Extension() and asn1crypto.xms.CMSAttribute(). +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +from .cms import CMSAttributeType, CMSAttribute +from .core import ( + Boolean, + Integer, + Null, + ObjectIdentifier, + OctetString, + Sequence, + SequenceOf, + SetOf, +) +from .crl import CertificateList +from .ocsp import OCSPResponse +from .x509 import ( + Extension, + ExtensionId, + GeneralName, + KeyPurposeId, +) + + +class AdobeArchiveRevInfo(Sequence): + _fields = [ + ('version', Integer) + ] + + +class AdobeTimestamp(Sequence): + _fields = [ + ('version', Integer), + ('location', GeneralName), + ('requires_auth', Boolean, {'optional': True, 'default': False}), + ] + + +class OtherRevInfo(Sequence): + _fields = [ + ('type', ObjectIdentifier), + ('value', OctetString), + ] + + +class SequenceOfCertificateList(SequenceOf): + _child_spec = CertificateList + + +class SequenceOfOCSPResponse(SequenceOf): + _child_spec = OCSPResponse + + +class SequenceOfOtherRevInfo(SequenceOf): + _child_spec = OtherRevInfo + + +class RevocationInfoArchival(Sequence): + _fields = [ + ('crl', SequenceOfCertificateList, {'explicit': 0, 'optional': True}), + ('ocsp', SequenceOfOCSPResponse, {'explicit': 1, 'optional': True}), + ('other_rev_info', SequenceOfOtherRevInfo, {'explicit': 2, 'optional': True}), + ] + + +class SetOfRevocationInfoArchival(SetOf): + _child_spec = RevocationInfoArchival + + +ExtensionId._map['1.2.840.113583.1.1.9.2'] = 'adobe_archive_rev_info' +ExtensionId._map['1.2.840.113583.1.1.9.1'] = 'adobe_timestamp' +ExtensionId._map['1.2.840.113583.1.1.10'] = 'adobe_ppklite_credential' +Extension._oid_specs['adobe_archive_rev_info'] = AdobeArchiveRevInfo +Extension._oid_specs['adobe_timestamp'] = AdobeTimestamp +Extension._oid_specs['adobe_ppklite_credential'] = Null +KeyPurposeId._map['1.2.840.113583.1.1.5'] = 'pdf_signing' +CMSAttributeType._map['1.2.840.113583.1.1.8'] = 'adobe_revocation_info_archival' +CMSAttribute._oid_specs['adobe_revocation_info_archival'] = SetOfRevocationInfoArchival diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/pem.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/pem.py new file mode 100644 index 00000000..511ea4b5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/pem.py @@ -0,0 +1,222 @@ +# coding: utf-8 + +""" +Encoding DER to PEM and decoding PEM to DER. Exports the following items: + + - armor() + - detect() + - unarmor() + +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +import base64 +import re +import sys + +from ._errors import unwrap +from ._types import type_name as _type_name, str_cls, byte_cls + +if sys.version_info < (3,): + from cStringIO import StringIO as BytesIO +else: + from io import BytesIO + + +def detect(byte_string): + """ + Detect if a byte string seems to contain a PEM-encoded block + + :param byte_string: + A byte string to look through + + :return: + A boolean, indicating if a PEM-encoded block is contained in the byte + string + """ + + if not isinstance(byte_string, byte_cls): + raise TypeError(unwrap( + ''' + byte_string must be a byte string, not %s + ''', + _type_name(byte_string) + )) + + return byte_string.find(b'-----BEGIN') != -1 or byte_string.find(b'---- BEGIN') != -1 + + +def armor(type_name, der_bytes, headers=None): + """ + Armors a DER-encoded byte string in PEM + + :param type_name: + A unicode string that will be capitalized and placed in the header + and footer of the block. E.g. "CERTIFICATE", "PRIVATE KEY", etc. This + will appear as "-----BEGIN CERTIFICATE-----" and + "-----END CERTIFICATE-----". + + :param der_bytes: + A byte string to be armored + + :param headers: + An OrderedDict of the header lines to write after the BEGIN line + + :return: + A byte string of the PEM block + """ + + if not isinstance(der_bytes, byte_cls): + raise TypeError(unwrap( + ''' + der_bytes must be a byte string, not %s + ''' % _type_name(der_bytes) + )) + + if not isinstance(type_name, str_cls): + raise TypeError(unwrap( + ''' + type_name must be a unicode string, not %s + ''', + _type_name(type_name) + )) + + type_name = type_name.upper().encode('ascii') + + output = BytesIO() + output.write(b'-----BEGIN ') + output.write(type_name) + output.write(b'-----\n') + if headers: + for key in headers: + output.write(key.encode('ascii')) + output.write(b': ') + output.write(headers[key].encode('ascii')) + output.write(b'\n') + output.write(b'\n') + b64_bytes = base64.b64encode(der_bytes) + b64_len = len(b64_bytes) + i = 0 + while i < b64_len: + output.write(b64_bytes[i:i + 64]) + output.write(b'\n') + i += 64 + output.write(b'-----END ') + output.write(type_name) + output.write(b'-----\n') + + return output.getvalue() + + +def _unarmor(pem_bytes): + """ + Convert a PEM-encoded byte string into one or more DER-encoded byte strings + + :param pem_bytes: + A byte string of the PEM-encoded data + + :raises: + ValueError - when the pem_bytes do not appear to be PEM-encoded bytes + + :return: + A generator of 3-element tuples in the format: (object_type, headers, + der_bytes). The object_type is a unicode string of what is between + "-----BEGIN " and "-----". Examples include: "CERTIFICATE", + "PUBLIC KEY", "PRIVATE KEY". The headers is a dict containing any lines + in the form "Name: Value" that are right after the begin line. + """ + + if not isinstance(pem_bytes, byte_cls): + raise TypeError(unwrap( + ''' + pem_bytes must be a byte string, not %s + ''', + _type_name(pem_bytes) + )) + + # Valid states include: "trash", "headers", "body" + state = 'trash' + headers = {} + base64_data = b'' + object_type = None + + found_start = False + found_end = False + + for line in pem_bytes.splitlines(False): + if line == b'': + continue + + if state == "trash": + # Look for a starting line since some CA cert bundle show the cert + # into in a parsed format above each PEM block + type_name_match = re.match(b'^(?:---- |-----)BEGIN ([A-Z0-9 ]+)(?: ----|-----)', line) + if not type_name_match: + continue + object_type = type_name_match.group(1).decode('ascii') + + found_start = True + state = 'headers' + continue + + if state == 'headers': + if line.find(b':') == -1: + state = 'body' + else: + decoded_line = line.decode('ascii') + name, value = decoded_line.split(':', 1) + headers[name] = value.strip() + continue + + if state == 'body': + if line[0:5] in (b'-----', b'---- '): + der_bytes = base64.b64decode(base64_data) + + yield (object_type, headers, der_bytes) + + state = 'trash' + headers = {} + base64_data = b'' + object_type = None + found_end = True + continue + + base64_data += line + + if not found_start or not found_end: + raise ValueError(unwrap( + ''' + pem_bytes does not appear to contain PEM-encoded data - no + BEGIN/END combination found + ''' + )) + + +def unarmor(pem_bytes, multiple=False): + """ + Convert a PEM-encoded byte string into a DER-encoded byte string + + :param pem_bytes: + A byte string of the PEM-encoded data + + :param multiple: + If True, function will return a generator + + :raises: + ValueError - when the pem_bytes do not appear to be PEM-encoded bytes + + :return: + A 3-element tuple (object_name, headers, der_bytes). The object_name is + a unicode string of what is between "-----BEGIN " and "-----". Examples + include: "CERTIFICATE", "PUBLIC KEY", "PRIVATE KEY". The headers is a + dict containing any lines in the form "Name: Value" that are right + after the begin line. + """ + + generator = _unarmor(pem_bytes) + + if not multiple: + return next(generator) + + return generator diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/pkcs12.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/pkcs12.py new file mode 100644 index 00000000..7ebcefeb --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/pkcs12.py @@ -0,0 +1,193 @@ +# coding: utf-8 + +""" +ASN.1 type classes for PKCS#12 files. Exports the following items: + + - CertBag() + - CrlBag() + - Pfx() + - SafeBag() + - SecretBag() + +Other type classes are defined that help compose the types listed above. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +from .algos import DigestInfo +from .cms import ContentInfo, SignedData +from .core import ( + Any, + BMPString, + Integer, + ObjectIdentifier, + OctetString, + ParsableOctetString, + Sequence, + SequenceOf, + SetOf, +) +from .keys import PrivateKeyInfo, EncryptedPrivateKeyInfo +from .x509 import Certificate, KeyPurposeId + + +# The structures in this file are taken from https://tools.ietf.org/html/rfc7292 + +class MacData(Sequence): + _fields = [ + ('mac', DigestInfo), + ('mac_salt', OctetString), + ('iterations', Integer, {'default': 1}), + ] + + +class Version(Integer): + _map = { + 3: 'v3' + } + + +class AttributeType(ObjectIdentifier): + _map = { + # https://tools.ietf.org/html/rfc2985#page-18 + '1.2.840.113549.1.9.20': 'friendly_name', + '1.2.840.113549.1.9.21': 'local_key_id', + # https://support.microsoft.com/en-us/kb/287547 + '1.3.6.1.4.1.311.17.1': 'microsoft_local_machine_keyset', + # https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java + # this is a set of OIDs, representing key usage, the usual value is a SET of one element OID 2.5.29.37.0 + '2.16.840.1.113894.746875.1.1': 'trusted_key_usage', + } + + +class SetOfAny(SetOf): + _child_spec = Any + + +class SetOfBMPString(SetOf): + _child_spec = BMPString + + +class SetOfOctetString(SetOf): + _child_spec = OctetString + + +class SetOfKeyPurposeId(SetOf): + _child_spec = KeyPurposeId + + +class Attribute(Sequence): + _fields = [ + ('type', AttributeType), + ('values', None), + ] + + _oid_specs = { + 'friendly_name': SetOfBMPString, + 'local_key_id': SetOfOctetString, + 'microsoft_csp_name': SetOfBMPString, + 'trusted_key_usage': SetOfKeyPurposeId, + } + + def _values_spec(self): + return self._oid_specs.get(self['type'].native, SetOfAny) + + _spec_callbacks = { + 'values': _values_spec + } + + +class Attributes(SetOf): + _child_spec = Attribute + + +class Pfx(Sequence): + _fields = [ + ('version', Version), + ('auth_safe', ContentInfo), + ('mac_data', MacData, {'optional': True}) + ] + + _authenticated_safe = None + + @property + def authenticated_safe(self): + if self._authenticated_safe is None: + content = self['auth_safe']['content'] + if isinstance(content, SignedData): + content = content['content_info']['content'] + self._authenticated_safe = AuthenticatedSafe.load(content.native) + return self._authenticated_safe + + +class AuthenticatedSafe(SequenceOf): + _child_spec = ContentInfo + + +class BagId(ObjectIdentifier): + _map = { + '1.2.840.113549.1.12.10.1.1': 'key_bag', + '1.2.840.113549.1.12.10.1.2': 'pkcs8_shrouded_key_bag', + '1.2.840.113549.1.12.10.1.3': 'cert_bag', + '1.2.840.113549.1.12.10.1.4': 'crl_bag', + '1.2.840.113549.1.12.10.1.5': 'secret_bag', + '1.2.840.113549.1.12.10.1.6': 'safe_contents', + } + + +class CertId(ObjectIdentifier): + _map = { + '1.2.840.113549.1.9.22.1': 'x509', + '1.2.840.113549.1.9.22.2': 'sdsi', + } + + +class CertBag(Sequence): + _fields = [ + ('cert_id', CertId), + ('cert_value', ParsableOctetString, {'explicit': 0}), + ] + + _oid_pair = ('cert_id', 'cert_value') + _oid_specs = { + 'x509': Certificate, + } + + +class CrlBag(Sequence): + _fields = [ + ('crl_id', ObjectIdentifier), + ('crl_value', OctetString, {'explicit': 0}), + ] + + +class SecretBag(Sequence): + _fields = [ + ('secret_type_id', ObjectIdentifier), + ('secret_value', OctetString, {'explicit': 0}), + ] + + +class SafeContents(SequenceOf): + pass + + +class SafeBag(Sequence): + _fields = [ + ('bag_id', BagId), + ('bag_value', Any, {'explicit': 0}), + ('bag_attributes', Attributes, {'optional': True}), + ] + + _oid_pair = ('bag_id', 'bag_value') + _oid_specs = { + 'key_bag': PrivateKeyInfo, + 'pkcs8_shrouded_key_bag': EncryptedPrivateKeyInfo, + 'cert_bag': CertBag, + 'crl_bag': CrlBag, + 'secret_bag': SecretBag, + 'safe_contents': SafeContents + } + + +SafeContents._child_spec = SafeBag diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/tsp.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/tsp.py new file mode 100644 index 00000000..f006da99 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/tsp.py @@ -0,0 +1,310 @@ +# coding: utf-8 + +""" +ASN.1 type classes for the time stamp protocol (TSP). Exports the following +items: + + - TimeStampReq() + - TimeStampResp() + +Also adds TimeStampedData() support to asn1crypto.cms.ContentInfo(), +TimeStampedData() and TSTInfo() support to +asn1crypto.cms.EncapsulatedContentInfo() and some oids and value parsers to +asn1crypto.cms.CMSAttribute(). + +Other type classes are defined that help compose the types listed above. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +from .algos import DigestAlgorithm +from .cms import ( + CMSAttribute, + CMSAttributeType, + ContentInfo, + ContentType, + EncapsulatedContentInfo, +) +from .core import ( + Any, + BitString, + Boolean, + Choice, + GeneralizedTime, + IA5String, + Integer, + ObjectIdentifier, + OctetString, + Sequence, + SequenceOf, + SetOf, + UTF8String, +) +from .crl import CertificateList +from .x509 import ( + Attributes, + CertificatePolicies, + GeneralName, + GeneralNames, +) + + +# The structures in this file are based on https://tools.ietf.org/html/rfc3161, +# https://tools.ietf.org/html/rfc4998, https://tools.ietf.org/html/rfc5544, +# https://tools.ietf.org/html/rfc5035, https://tools.ietf.org/html/rfc2634 + +class Version(Integer): + _map = { + 0: 'v0', + 1: 'v1', + 2: 'v2', + 3: 'v3', + 4: 'v4', + 5: 'v5', + } + + +class MessageImprint(Sequence): + _fields = [ + ('hash_algorithm', DigestAlgorithm), + ('hashed_message', OctetString), + ] + + +class Accuracy(Sequence): + _fields = [ + ('seconds', Integer, {'optional': True}), + ('millis', Integer, {'implicit': 0, 'optional': True}), + ('micros', Integer, {'implicit': 1, 'optional': True}), + ] + + +class Extension(Sequence): + _fields = [ + ('extn_id', ObjectIdentifier), + ('critical', Boolean, {'default': False}), + ('extn_value', OctetString), + ] + + +class Extensions(SequenceOf): + _child_spec = Extension + + +class TSTInfo(Sequence): + _fields = [ + ('version', Version), + ('policy', ObjectIdentifier), + ('message_imprint', MessageImprint), + ('serial_number', Integer), + ('gen_time', GeneralizedTime), + ('accuracy', Accuracy, {'optional': True}), + ('ordering', Boolean, {'default': False}), + ('nonce', Integer, {'optional': True}), + ('tsa', GeneralName, {'explicit': 0, 'optional': True}), + ('extensions', Extensions, {'implicit': 1, 'optional': True}), + ] + + +class TimeStampReq(Sequence): + _fields = [ + ('version', Version), + ('message_imprint', MessageImprint), + ('req_policy', ObjectIdentifier, {'optional': True}), + ('nonce', Integer, {'optional': True}), + ('cert_req', Boolean, {'default': False}), + ('extensions', Extensions, {'implicit': 0, 'optional': True}), + ] + + +class PKIStatus(Integer): + _map = { + 0: 'granted', + 1: 'granted_with_mods', + 2: 'rejection', + 3: 'waiting', + 4: 'revocation_warning', + 5: 'revocation_notification', + } + + +class PKIFreeText(SequenceOf): + _child_spec = UTF8String + + +class PKIFailureInfo(BitString): + _map = { + 0: 'bad_alg', + 2: 'bad_request', + 5: 'bad_data_format', + 14: 'time_not_available', + 15: 'unaccepted_policy', + 16: 'unaccepted_extensions', + 17: 'add_info_not_available', + 25: 'system_failure', + } + + +class PKIStatusInfo(Sequence): + _fields = [ + ('status', PKIStatus), + ('status_string', PKIFreeText, {'optional': True}), + ('fail_info', PKIFailureInfo, {'optional': True}), + ] + + +class TimeStampResp(Sequence): + _fields = [ + ('status', PKIStatusInfo), + ('time_stamp_token', ContentInfo), + ] + + +class MetaData(Sequence): + _fields = [ + ('hash_protected', Boolean), + ('file_name', UTF8String, {'optional': True}), + ('media_type', IA5String, {'optional': True}), + ('other_meta_data', Attributes, {'optional': True}), + ] + + +class TimeStampAndCRL(Sequence): + _fields = [ + ('time_stamp', EncapsulatedContentInfo), + ('crl', CertificateList, {'optional': True}), + ] + + +class TimeStampTokenEvidence(SequenceOf): + _child_spec = TimeStampAndCRL + + +class DigestAlgorithms(SequenceOf): + _child_spec = DigestAlgorithm + + +class EncryptionInfo(Sequence): + _fields = [ + ('encryption_info_type', ObjectIdentifier), + ('encryption_info_value', Any), + ] + + +class PartialHashtree(SequenceOf): + _child_spec = OctetString + + +class PartialHashtrees(SequenceOf): + _child_spec = PartialHashtree + + +class ArchiveTimeStamp(Sequence): + _fields = [ + ('digest_algorithm', DigestAlgorithm, {'implicit': 0, 'optional': True}), + ('attributes', Attributes, {'implicit': 1, 'optional': True}), + ('reduced_hashtree', PartialHashtrees, {'implicit': 2, 'optional': True}), + ('time_stamp', ContentInfo), + ] + + +class ArchiveTimeStampSequence(SequenceOf): + _child_spec = ArchiveTimeStamp + + +class EvidenceRecord(Sequence): + _fields = [ + ('version', Version), + ('digest_algorithms', DigestAlgorithms), + ('crypto_infos', Attributes, {'implicit': 0, 'optional': True}), + ('encryption_info', EncryptionInfo, {'implicit': 1, 'optional': True}), + ('archive_time_stamp_sequence', ArchiveTimeStampSequence), + ] + + +class OtherEvidence(Sequence): + _fields = [ + ('oe_type', ObjectIdentifier), + ('oe_value', Any), + ] + + +class Evidence(Choice): + _alternatives = [ + ('tst_evidence', TimeStampTokenEvidence, {'implicit': 0}), + ('ers_evidence', EvidenceRecord, {'implicit': 1}), + ('other_evidence', OtherEvidence, {'implicit': 2}), + ] + + +class TimeStampedData(Sequence): + _fields = [ + ('version', Version), + ('data_uri', IA5String, {'optional': True}), + ('meta_data', MetaData, {'optional': True}), + ('content', OctetString, {'optional': True}), + ('temporal_evidence', Evidence), + ] + + +class IssuerSerial(Sequence): + _fields = [ + ('issuer', GeneralNames), + ('serial_number', Integer), + ] + + +class ESSCertID(Sequence): + _fields = [ + ('cert_hash', OctetString), + ('issuer_serial', IssuerSerial, {'optional': True}), + ] + + +class ESSCertIDs(SequenceOf): + _child_spec = ESSCertID + + +class SigningCertificate(Sequence): + _fields = [ + ('certs', ESSCertIDs), + ('policies', CertificatePolicies, {'optional': True}), + ] + + +class SetOfSigningCertificates(SetOf): + _child_spec = SigningCertificate + + +class ESSCertIDv2(Sequence): + _fields = [ + ('hash_algorithm', DigestAlgorithm, {'default': {'algorithm': 'sha256'}}), + ('cert_hash', OctetString), + ('issuer_serial', IssuerSerial, {'optional': True}), + ] + + +class ESSCertIDv2s(SequenceOf): + _child_spec = ESSCertIDv2 + + +class SigningCertificateV2(Sequence): + _fields = [ + ('certs', ESSCertIDv2s), + ('policies', CertificatePolicies, {'optional': True}), + ] + + +class SetOfSigningCertificatesV2(SetOf): + _child_spec = SigningCertificateV2 + + +EncapsulatedContentInfo._oid_specs['tst_info'] = TSTInfo +EncapsulatedContentInfo._oid_specs['timestamped_data'] = TimeStampedData +ContentInfo._oid_specs['timestamped_data'] = TimeStampedData +ContentType._map['1.2.840.113549.1.9.16.1.4'] = 'tst_info' +ContentType._map['1.2.840.113549.1.9.16.1.31'] = 'timestamped_data' +CMSAttributeType._map['1.2.840.113549.1.9.16.2.12'] = 'signing_certificate' +CMSAttribute._oid_specs['signing_certificate'] = SetOfSigningCertificates +CMSAttributeType._map['1.2.840.113549.1.9.16.2.47'] = 'signing_certificate_v2' +CMSAttribute._oid_specs['signing_certificate_v2'] = SetOfSigningCertificatesV2 diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/util.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/util.py new file mode 100644 index 00000000..7196897c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/util.py @@ -0,0 +1,878 @@ +# coding: utf-8 + +""" +Miscellaneous data helpers, including functions for converting integers to and +from bytes and UTC timezone. Exports the following items: + + - OrderedDict() + - int_from_bytes() + - int_to_bytes() + - timezone.utc + - utc_with_dst + - create_timezone() + - inet_ntop() + - inet_pton() + - uri_to_iri() + - iri_to_uri() +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +import math +import sys +from datetime import datetime, date, timedelta, tzinfo + +from ._errors import unwrap +from ._iri import iri_to_uri, uri_to_iri # noqa +from ._ordereddict import OrderedDict # noqa +from ._types import type_name + +if sys.platform == 'win32': + from ._inet import inet_ntop, inet_pton +else: + from socket import inet_ntop, inet_pton # noqa + + +# Python 2 +if sys.version_info <= (3,): + + def int_to_bytes(value, signed=False, width=None): + """ + Converts an integer to a byte string + + :param value: + The integer to convert + + :param signed: + If the byte string should be encoded using two's complement + + :param width: + If None, the minimal possible size (but at least 1), + otherwise an integer of the byte width for the return value + + :return: + A byte string + """ + + if value == 0 and width == 0: + return b'' + + # Handle negatives in two's complement + is_neg = False + if signed and value < 0: + is_neg = True + bits = int(math.ceil(len('%x' % abs(value)) / 2.0) * 8) + value = (value + (1 << bits)) % (1 << bits) + + hex_str = '%x' % value + if len(hex_str) & 1: + hex_str = '0' + hex_str + + output = hex_str.decode('hex') + + if signed and not is_neg and ord(output[0:1]) & 0x80: + output = b'\x00' + output + + if width is not None: + if len(output) > width: + raise OverflowError('int too big to convert') + if is_neg: + pad_char = b'\xFF' + else: + pad_char = b'\x00' + output = (pad_char * (width - len(output))) + output + elif is_neg and ord(output[0:1]) & 0x80 == 0: + output = b'\xFF' + output + + return output + + def int_from_bytes(value, signed=False): + """ + Converts a byte string to an integer + + :param value: + The byte string to convert + + :param signed: + If the byte string should be interpreted using two's complement + + :return: + An integer + """ + + if value == b'': + return 0 + + num = long(value.encode("hex"), 16) # noqa + + if not signed: + return num + + # Check for sign bit and handle two's complement + if ord(value[0:1]) & 0x80: + bit_len = len(value) * 8 + return num - (1 << bit_len) + + return num + + class timezone(tzinfo): # noqa + """ + Implements datetime.timezone for py2. + Only full minute offsets are supported. + DST is not supported. + """ + + def __init__(self, offset, name=None): + """ + :param offset: + A timedelta with this timezone's offset from UTC + + :param name: + Name of the timezone; if None, generate one. + """ + + if not timedelta(hours=-24) < offset < timedelta(hours=24): + raise ValueError('Offset must be in [-23:59, 23:59]') + + if offset.seconds % 60 or offset.microseconds: + raise ValueError('Offset must be full minutes') + + self._offset = offset + + if name is not None: + self._name = name + elif not offset: + self._name = 'UTC' + else: + self._name = 'UTC' + _format_offset(offset) + + def __eq__(self, other): + """ + Compare two timezones + + :param other: + The other timezone to compare to + + :return: + A boolean + """ + + if type(other) != timezone: + return False + return self._offset == other._offset + + def __getinitargs__(self): + """ + Called by tzinfo.__reduce__ to support pickle and copy. + + :return: + offset and name, to be used for __init__ + """ + + return self._offset, self._name + + def tzname(self, dt): + """ + :param dt: + A datetime object; ignored. + + :return: + Name of this timezone + """ + + return self._name + + def utcoffset(self, dt): + """ + :param dt: + A datetime object; ignored. + + :return: + A timedelta object with the offset from UTC + """ + + return self._offset + + def dst(self, dt): + """ + :param dt: + A datetime object; ignored. + + :return: + Zero timedelta + """ + + return timedelta(0) + + timezone.utc = timezone(timedelta(0)) + +# Python 3 +else: + + from datetime import timezone # noqa + + def int_to_bytes(value, signed=False, width=None): + """ + Converts an integer to a byte string + + :param value: + The integer to convert + + :param signed: + If the byte string should be encoded using two's complement + + :param width: + If None, the minimal possible size (but at least 1), + otherwise an integer of the byte width for the return value + + :return: + A byte string + """ + + if width is None: + if signed: + if value < 0: + bits_required = abs(value + 1).bit_length() + else: + bits_required = value.bit_length() + if bits_required % 8 == 0: + bits_required += 1 + else: + bits_required = value.bit_length() + width = math.ceil(bits_required / 8) or 1 + return value.to_bytes(width, byteorder='big', signed=signed) + + def int_from_bytes(value, signed=False): + """ + Converts a byte string to an integer + + :param value: + The byte string to convert + + :param signed: + If the byte string should be interpreted using two's complement + + :return: + An integer + """ + + return int.from_bytes(value, 'big', signed=signed) + + +def _format_offset(off): + """ + Format a timedelta into "[+-]HH:MM" format or "" for None + """ + + if off is None: + return '' + mins = off.days * 24 * 60 + off.seconds // 60 + sign = '-' if mins < 0 else '+' + return sign + '%02d:%02d' % divmod(abs(mins), 60) + + +class _UtcWithDst(tzinfo): + """ + Utc class where dst does not return None; required for astimezone + """ + + def tzname(self, dt): + return 'UTC' + + def utcoffset(self, dt): + return timedelta(0) + + def dst(self, dt): + return timedelta(0) + + +utc_with_dst = _UtcWithDst() + +_timezone_cache = {} + + +def create_timezone(offset): + """ + Returns a new datetime.timezone object with the given offset. + Uses cached objects if possible. + + :param offset: + A datetime.timedelta object; It needs to be in full minutes and between -23:59 and +23:59. + + :return: + A datetime.timezone object + """ + + try: + tz = _timezone_cache[offset] + except KeyError: + tz = _timezone_cache[offset] = timezone(offset) + return tz + + +class extended_date(object): + """ + A datetime.datetime-like object that represents the year 0. This is just + to handle 0000-01-01 found in some certificates. Python's datetime does + not support year 0. + + The proleptic gregorian calendar repeats itself every 400 years. Therefore, + the simplest way to format is to substitute year 2000. + """ + + def __init__(self, year, month, day): + """ + :param year: + The integer 0 + + :param month: + An integer from 1 to 12 + + :param day: + An integer from 1 to 31 + """ + + if year != 0: + raise ValueError('year must be 0') + + self._y2k = date(2000, month, day) + + @property + def year(self): + """ + :return: + The integer 0 + """ + + return 0 + + @property + def month(self): + """ + :return: + An integer from 1 to 12 + """ + + return self._y2k.month + + @property + def day(self): + """ + :return: + An integer from 1 to 31 + """ + + return self._y2k.day + + def strftime(self, format): + """ + Formats the date using strftime() + + :param format: + A strftime() format string + + :return: + A str, the formatted date as a unicode string + in Python 3 and a byte string in Python 2 + """ + + # Format the date twice, once with year 2000, once with year 4000. + # The only differences in the result will be in the millennium. Find them and replace by zeros. + y2k = self._y2k.strftime(format) + y4k = self._y2k.replace(year=4000).strftime(format) + return ''.join('0' if (c2, c4) == ('2', '4') else c2 for c2, c4 in zip(y2k, y4k)) + + def isoformat(self): + """ + Formats the date as %Y-%m-%d + + :return: + The date formatted to %Y-%m-%d as a unicode string in Python 3 + and a byte string in Python 2 + """ + + return self.strftime('0000-%m-%d') + + def replace(self, year=None, month=None, day=None): + """ + Returns a new datetime.date or asn1crypto.util.extended_date + object with the specified components replaced + + :return: + A datetime.date or asn1crypto.util.extended_date object + """ + + if year is None: + year = self.year + if month is None: + month = self.month + if day is None: + day = self.day + + if year > 0: + cls = date + else: + cls = extended_date + + return cls( + year, + month, + day + ) + + def __str__(self): + """ + :return: + A str representing this extended_date, e.g. "0000-01-01" + """ + + return self.strftime('%Y-%m-%d') + + def __eq__(self, other): + """ + Compare two extended_date objects + + :param other: + The other extended_date to compare to + + :return: + A boolean + """ + + # datetime.date object wouldn't compare equal because it can't be year 0 + if not isinstance(other, self.__class__): + return False + return self.__cmp__(other) == 0 + + def __ne__(self, other): + """ + Compare two extended_date objects + + :param other: + The other extended_date to compare to + + :return: + A boolean + """ + + return not self.__eq__(other) + + def _comparison_error(self, other): + raise TypeError(unwrap( + ''' + An asn1crypto.util.extended_date object can only be compared to + an asn1crypto.util.extended_date or datetime.date object, not %s + ''', + type_name(other) + )) + + def __cmp__(self, other): + """ + Compare two extended_date or datetime.date objects + + :param other: + The other extended_date object to compare to + + :return: + An integer smaller than, equal to, or larger than 0 + """ + + # self is year 0, other is >= year 1 + if isinstance(other, date): + return -1 + + if not isinstance(other, self.__class__): + self._comparison_error(other) + + if self._y2k < other._y2k: + return -1 + if self._y2k > other._y2k: + return 1 + return 0 + + def __lt__(self, other): + return self.__cmp__(other) < 0 + + def __le__(self, other): + return self.__cmp__(other) <= 0 + + def __gt__(self, other): + return self.__cmp__(other) > 0 + + def __ge__(self, other): + return self.__cmp__(other) >= 0 + + +class extended_datetime(object): + """ + A datetime.datetime-like object that represents the year 0. This is just + to handle 0000-01-01 found in some certificates. Python's datetime does + not support year 0. + + The proleptic gregorian calendar repeats itself every 400 years. Therefore, + the simplest way to format is to substitute year 2000. + """ + + # There are 97 leap days during 400 years. + DAYS_IN_400_YEARS = 400 * 365 + 97 + DAYS_IN_2000_YEARS = 5 * DAYS_IN_400_YEARS + + def __init__(self, year, *args, **kwargs): + """ + :param year: + The integer 0 + + :param args: + Other positional arguments; see datetime.datetime. + + :param kwargs: + Other keyword arguments; see datetime.datetime. + """ + + if year != 0: + raise ValueError('year must be 0') + + self._y2k = datetime(2000, *args, **kwargs) + + @property + def year(self): + """ + :return: + The integer 0 + """ + + return 0 + + @property + def month(self): + """ + :return: + An integer from 1 to 12 + """ + + return self._y2k.month + + @property + def day(self): + """ + :return: + An integer from 1 to 31 + """ + + return self._y2k.day + + @property + def hour(self): + """ + :return: + An integer from 1 to 24 + """ + + return self._y2k.hour + + @property + def minute(self): + """ + :return: + An integer from 1 to 60 + """ + + return self._y2k.minute + + @property + def second(self): + """ + :return: + An integer from 1 to 60 + """ + + return self._y2k.second + + @property + def microsecond(self): + """ + :return: + An integer from 0 to 999999 + """ + + return self._y2k.microsecond + + @property + def tzinfo(self): + """ + :return: + If object is timezone aware, a datetime.tzinfo object, else None. + """ + + return self._y2k.tzinfo + + def utcoffset(self): + """ + :return: + If object is timezone aware, a datetime.timedelta object, else None. + """ + + return self._y2k.utcoffset() + + def time(self): + """ + :return: + A datetime.time object + """ + + return self._y2k.time() + + def date(self): + """ + :return: + An asn1crypto.util.extended_date of the date + """ + + return extended_date(0, self.month, self.day) + + def strftime(self, format): + """ + Performs strftime(), always returning a str + + :param format: + A strftime() format string + + :return: + A str of the formatted datetime + """ + + # Format the datetime twice, once with year 2000, once with year 4000. + # The only differences in the result will be in the millennium. Find them and replace by zeros. + y2k = self._y2k.strftime(format) + y4k = self._y2k.replace(year=4000).strftime(format) + return ''.join('0' if (c2, c4) == ('2', '4') else c2 for c2, c4 in zip(y2k, y4k)) + + def isoformat(self, sep='T'): + """ + Formats the date as "%Y-%m-%d %H:%M:%S" with the sep param between the + date and time portions + + :param set: + A single character of the separator to place between the date and + time + + :return: + The formatted datetime as a unicode string in Python 3 and a byte + string in Python 2 + """ + + s = '0000-%02d-%02d%c%02d:%02d:%02d' % (self.month, self.day, sep, self.hour, self.minute, self.second) + if self.microsecond: + s += '.%06d' % self.microsecond + return s + _format_offset(self.utcoffset()) + + def replace(self, year=None, *args, **kwargs): + """ + Returns a new datetime.datetime or asn1crypto.util.extended_datetime + object with the specified components replaced + + :param year: + The new year to substitute. None to keep it. + + :param args: + Other positional arguments; see datetime.datetime.replace. + + :param kwargs: + Other keyword arguments; see datetime.datetime.replace. + + :return: + A datetime.datetime or asn1crypto.util.extended_datetime object + """ + + if year: + return self._y2k.replace(year, *args, **kwargs) + + return extended_datetime.from_y2k(self._y2k.replace(2000, *args, **kwargs)) + + def astimezone(self, tz): + """ + Convert this extended_datetime to another timezone. + + :param tz: + A datetime.tzinfo object. + + :return: + A new extended_datetime or datetime.datetime object + """ + + return extended_datetime.from_y2k(self._y2k.astimezone(tz)) + + def timestamp(self): + """ + Return POSIX timestamp. Only supported in python >= 3.3 + + :return: + A float representing the seconds since 1970-01-01 UTC. This will be a negative value. + """ + + return self._y2k.timestamp() - self.DAYS_IN_2000_YEARS * 86400 + + def __str__(self): + """ + :return: + A str representing this extended_datetime, e.g. "0000-01-01 00:00:00.000001-10:00" + """ + + return self.isoformat(sep=' ') + + def __eq__(self, other): + """ + Compare two extended_datetime objects + + :param other: + The other extended_datetime to compare to + + :return: + A boolean + """ + + # Only compare against other datetime or extended_datetime objects + if not isinstance(other, (self.__class__, datetime)): + return False + + # Offset-naive and offset-aware datetimes are never the same + if (self.tzinfo is None) != (other.tzinfo is None): + return False + + return self.__cmp__(other) == 0 + + def __ne__(self, other): + """ + Compare two extended_datetime objects + + :param other: + The other extended_datetime to compare to + + :return: + A boolean + """ + + return not self.__eq__(other) + + def _comparison_error(self, other): + """ + Raises a TypeError about the other object not being suitable for + comparison + + :param other: + The object being compared to + """ + + raise TypeError(unwrap( + ''' + An asn1crypto.util.extended_datetime object can only be compared to + an asn1crypto.util.extended_datetime or datetime.datetime object, + not %s + ''', + type_name(other) + )) + + def __cmp__(self, other): + """ + Compare two extended_datetime or datetime.datetime objects + + :param other: + The other extended_datetime or datetime.datetime object to compare to + + :return: + An integer smaller than, equal to, or larger than 0 + """ + + if not isinstance(other, (self.__class__, datetime)): + self._comparison_error(other) + + if (self.tzinfo is None) != (other.tzinfo is None): + raise TypeError("can't compare offset-naive and offset-aware datetimes") + + diff = self - other + zero = timedelta(0) + if diff < zero: + return -1 + if diff > zero: + return 1 + return 0 + + def __lt__(self, other): + return self.__cmp__(other) < 0 + + def __le__(self, other): + return self.__cmp__(other) <= 0 + + def __gt__(self, other): + return self.__cmp__(other) > 0 + + def __ge__(self, other): + return self.__cmp__(other) >= 0 + + def __add__(self, other): + """ + Adds a timedelta + + :param other: + A datetime.timedelta object to add. + + :return: + A new extended_datetime or datetime.datetime object. + """ + + return extended_datetime.from_y2k(self._y2k + other) + + def __sub__(self, other): + """ + Subtracts a timedelta or another datetime. + + :param other: + A datetime.timedelta or datetime.datetime or extended_datetime object to subtract. + + :return: + If a timedelta is passed, a new extended_datetime or datetime.datetime object. + Else a datetime.timedelta object. + """ + + if isinstance(other, timedelta): + return extended_datetime.from_y2k(self._y2k - other) + + if isinstance(other, extended_datetime): + return self._y2k - other._y2k + + if isinstance(other, datetime): + return self._y2k - other - timedelta(days=self.DAYS_IN_2000_YEARS) + + return NotImplemented + + def __rsub__(self, other): + return -(self - other) + + @classmethod + def from_y2k(cls, value): + """ + Revert substitution of year 2000. + + :param value: + A datetime.datetime object which is 2000 years in the future. + :return: + A new extended_datetime or datetime.datetime object. + """ + + year = value.year - 2000 + + if year > 0: + new_cls = datetime + else: + new_cls = cls + + return new_cls( + year, + value.month, + value.day, + value.hour, + value.minute, + value.second, + value.microsecond, + value.tzinfo + ) diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/version.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/version.py new file mode 100644 index 00000000..966b57a5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/version.py @@ -0,0 +1,6 @@ +# coding: utf-8 +from __future__ import unicode_literals, division, absolute_import, print_function + + +__version__ = '1.5.1' +__version_info__ = (1, 5, 1) diff --git a/dbtzin/lib/python3.8/site-packages/asn1crypto/x509.py b/dbtzin/lib/python3.8/site-packages/asn1crypto/x509.py new file mode 100644 index 00000000..8cfb2c78 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/asn1crypto/x509.py @@ -0,0 +1,3036 @@ +# coding: utf-8 + +""" +ASN.1 type classes for X.509 certificates. Exports the following items: + + - Attributes() + - Certificate() + - Extensions() + - GeneralName() + - GeneralNames() + - Name() + +Other type classes are defined that help compose the types listed above. +""" + +from __future__ import unicode_literals, division, absolute_import, print_function + +from contextlib import contextmanager +from encodings import idna # noqa +import hashlib +import re +import socket +import stringprep +import sys +import unicodedata + +from ._errors import unwrap +from ._iri import iri_to_uri, uri_to_iri +from ._ordereddict import OrderedDict +from ._types import type_name, str_cls, bytes_to_list +from .algos import AlgorithmIdentifier, AnyAlgorithmIdentifier, DigestAlgorithm, SignedDigestAlgorithm +from .core import ( + Any, + BitString, + BMPString, + Boolean, + Choice, + Concat, + Enumerated, + GeneralizedTime, + GeneralString, + IA5String, + Integer, + Null, + NumericString, + ObjectIdentifier, + OctetBitString, + OctetString, + ParsableOctetString, + PrintableString, + Sequence, + SequenceOf, + Set, + SetOf, + TeletexString, + UniversalString, + UTCTime, + UTF8String, + VisibleString, + VOID, +) +from .keys import PublicKeyInfo +from .util import int_to_bytes, int_from_bytes, inet_ntop, inet_pton + + +# The structures in this file are taken from https://tools.ietf.org/html/rfc5280 +# and a few other supplementary sources, mostly due to extra supported +# extension and name OIDs + + +class DNSName(IA5String): + + _encoding = 'idna' + _bad_tag = (12, 19) + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + """ + Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.2 + + :param other: + Another DNSName object + + :return: + A boolean + """ + + if not isinstance(other, DNSName): + return False + + return self.__unicode__().lower() == other.__unicode__().lower() + + def set(self, value): + """ + Sets the value of the DNS name + + :param value: + A unicode string + """ + + if not isinstance(value, str_cls): + raise TypeError(unwrap( + ''' + %s value must be a unicode string, not %s + ''', + type_name(self), + type_name(value) + )) + + if value.startswith('.'): + encoded_value = b'.' + value[1:].encode(self._encoding) + else: + encoded_value = value.encode(self._encoding) + + self._unicode = value + self.contents = encoded_value + self._header = None + if self._trailer != b'': + self._trailer = b'' + + +class URI(IA5String): + + def set(self, value): + """ + Sets the value of the string + + :param value: + A unicode string + """ + + if not isinstance(value, str_cls): + raise TypeError(unwrap( + ''' + %s value must be a unicode string, not %s + ''', + type_name(self), + type_name(value) + )) + + self._unicode = value + self.contents = iri_to_uri(value) + self._header = None + if self._trailer != b'': + self._trailer = b'' + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + """ + Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.4 + + :param other: + Another URI object + + :return: + A boolean + """ + + if not isinstance(other, URI): + return False + + return iri_to_uri(self.native, True) == iri_to_uri(other.native, True) + + def __unicode__(self): + """ + :return: + A unicode string + """ + + if self.contents is None: + return '' + if self._unicode is None: + self._unicode = uri_to_iri(self._merge_chunks()) + return self._unicode + + +class EmailAddress(IA5String): + + _contents = None + + # If the value has gone through the .set() method, thus normalizing it + _normalized = False + + # In the wild we've seen this encoded as a UTF8String and PrintableString + _bad_tag = (12, 19) + + @property + def contents(self): + """ + :return: + A byte string of the DER-encoded contents of the sequence + """ + + return self._contents + + @contents.setter + def contents(self, value): + """ + :param value: + A byte string of the DER-encoded contents of the sequence + """ + + self._normalized = False + self._contents = value + + def set(self, value): + """ + Sets the value of the string + + :param value: + A unicode string + """ + + if not isinstance(value, str_cls): + raise TypeError(unwrap( + ''' + %s value must be a unicode string, not %s + ''', + type_name(self), + type_name(value) + )) + + if value.find('@') != -1: + mailbox, hostname = value.rsplit('@', 1) + encoded_value = mailbox.encode('ascii') + b'@' + hostname.encode('idna') + else: + encoded_value = value.encode('ascii') + + self._normalized = True + self._unicode = value + self.contents = encoded_value + self._header = None + if self._trailer != b'': + self._trailer = b'' + + def __unicode__(self): + """ + :return: + A unicode string + """ + + # We've seen this in the wild as a PrintableString, and since ascii is a + # subset of cp1252, we use the later for decoding to be more user friendly + if self._unicode is None: + contents = self._merge_chunks() + if contents.find(b'@') == -1: + self._unicode = contents.decode('cp1252') + else: + mailbox, hostname = contents.rsplit(b'@', 1) + self._unicode = mailbox.decode('cp1252') + '@' + hostname.decode('idna') + return self._unicode + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + """ + Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.5 + + :param other: + Another EmailAddress object + + :return: + A boolean + """ + + if not isinstance(other, EmailAddress): + return False + + if not self._normalized: + self.set(self.native) + if not other._normalized: + other.set(other.native) + + if self._contents.find(b'@') == -1 or other._contents.find(b'@') == -1: + return self._contents == other._contents + + other_mailbox, other_hostname = other._contents.rsplit(b'@', 1) + mailbox, hostname = self._contents.rsplit(b'@', 1) + + if mailbox != other_mailbox: + return False + + if hostname.lower() != other_hostname.lower(): + return False + + return True + + +class IPAddress(OctetString): + def parse(self, spec=None, spec_params=None): + """ + This method is not applicable to IP addresses + """ + + raise ValueError(unwrap( + ''' + IP address values can not be parsed + ''' + )) + + def set(self, value): + """ + Sets the value of the object + + :param value: + A unicode string containing an IPv4 address, IPv4 address with CIDR, + an IPv6 address or IPv6 address with CIDR + """ + + if not isinstance(value, str_cls): + raise TypeError(unwrap( + ''' + %s value must be a unicode string, not %s + ''', + type_name(self), + type_name(value) + )) + + original_value = value + + has_cidr = value.find('/') != -1 + cidr = 0 + if has_cidr: + parts = value.split('/', 1) + value = parts[0] + cidr = int(parts[1]) + if cidr < 0: + raise ValueError(unwrap( + ''' + %s value contains a CIDR range less than 0 + ''', + type_name(self) + )) + + if value.find(':') != -1: + family = socket.AF_INET6 + if cidr > 128: + raise ValueError(unwrap( + ''' + %s value contains a CIDR range bigger than 128, the maximum + value for an IPv6 address + ''', + type_name(self) + )) + cidr_size = 128 + else: + family = socket.AF_INET + if cidr > 32: + raise ValueError(unwrap( + ''' + %s value contains a CIDR range bigger than 32, the maximum + value for an IPv4 address + ''', + type_name(self) + )) + cidr_size = 32 + + cidr_bytes = b'' + if has_cidr: + cidr_mask = '1' * cidr + cidr_mask += '0' * (cidr_size - len(cidr_mask)) + cidr_bytes = int_to_bytes(int(cidr_mask, 2)) + cidr_bytes = (b'\x00' * ((cidr_size // 8) - len(cidr_bytes))) + cidr_bytes + + self._native = original_value + self.contents = inet_pton(family, value) + cidr_bytes + self._bytes = self.contents + self._header = None + if self._trailer != b'': + self._trailer = b'' + + @property + def native(self): + """ + The native Python datatype representation of this value + + :return: + A unicode string or None + """ + + if self.contents is None: + return None + + if self._native is None: + byte_string = self.__bytes__() + byte_len = len(byte_string) + value = None + cidr_int = None + if byte_len in set([32, 16]): + value = inet_ntop(socket.AF_INET6, byte_string[0:16]) + if byte_len > 16: + cidr_int = int_from_bytes(byte_string[16:]) + elif byte_len in set([8, 4]): + value = inet_ntop(socket.AF_INET, byte_string[0:4]) + if byte_len > 4: + cidr_int = int_from_bytes(byte_string[4:]) + if cidr_int is not None: + cidr_bits = '{0:b}'.format(cidr_int) + cidr = len(cidr_bits.rstrip('0')) + value = value + '/' + str_cls(cidr) + self._native = value + return self._native + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + """ + :param other: + Another IPAddress object + + :return: + A boolean + """ + + if not isinstance(other, IPAddress): + return False + + return self.__bytes__() == other.__bytes__() + + +class Attribute(Sequence): + _fields = [ + ('type', ObjectIdentifier), + ('values', SetOf, {'spec': Any}), + ] + + +class Attributes(SequenceOf): + _child_spec = Attribute + + +class KeyUsage(BitString): + _map = { + 0: 'digital_signature', + 1: 'non_repudiation', + 2: 'key_encipherment', + 3: 'data_encipherment', + 4: 'key_agreement', + 5: 'key_cert_sign', + 6: 'crl_sign', + 7: 'encipher_only', + 8: 'decipher_only', + } + + +class PrivateKeyUsagePeriod(Sequence): + _fields = [ + ('not_before', GeneralizedTime, {'implicit': 0, 'optional': True}), + ('not_after', GeneralizedTime, {'implicit': 1, 'optional': True}), + ] + + +class NotReallyTeletexString(TeletexString): + """ + OpenSSL (and probably some other libraries) puts ISO-8859-1 + into TeletexString instead of ITU T.61. We use Windows-1252 when + decoding since it is a superset of ISO-8859-1, and less likely to + cause encoding issues, but we stay strict with encoding to prevent + us from creating bad data. + """ + + _decoding_encoding = 'cp1252' + + def __unicode__(self): + """ + :return: + A unicode string + """ + + if self.contents is None: + return '' + if self._unicode is None: + self._unicode = self._merge_chunks().decode(self._decoding_encoding) + return self._unicode + + +@contextmanager +def strict_teletex(): + try: + NotReallyTeletexString._decoding_encoding = 'teletex' + yield + finally: + NotReallyTeletexString._decoding_encoding = 'cp1252' + + +class DirectoryString(Choice): + _alternatives = [ + ('teletex_string', NotReallyTeletexString), + ('printable_string', PrintableString), + ('universal_string', UniversalString), + ('utf8_string', UTF8String), + ('bmp_string', BMPString), + # This is an invalid/bad alternative, but some broken certs use it + ('ia5_string', IA5String), + ] + + +class NameType(ObjectIdentifier): + _map = { + '2.5.4.3': 'common_name', + '2.5.4.4': 'surname', + '2.5.4.5': 'serial_number', + '2.5.4.6': 'country_name', + '2.5.4.7': 'locality_name', + '2.5.4.8': 'state_or_province_name', + '2.5.4.9': 'street_address', + '2.5.4.10': 'organization_name', + '2.5.4.11': 'organizational_unit_name', + '2.5.4.12': 'title', + '2.5.4.15': 'business_category', + '2.5.4.17': 'postal_code', + '2.5.4.20': 'telephone_number', + '2.5.4.41': 'name', + '2.5.4.42': 'given_name', + '2.5.4.43': 'initials', + '2.5.4.44': 'generation_qualifier', + '2.5.4.45': 'unique_identifier', + '2.5.4.46': 'dn_qualifier', + '2.5.4.65': 'pseudonym', + '2.5.4.97': 'organization_identifier', + # https://www.trustedcomputinggroup.org/wp-content/uploads/Credential_Profile_EK_V2.0_R14_published.pdf + '2.23.133.2.1': 'tpm_manufacturer', + '2.23.133.2.2': 'tpm_model', + '2.23.133.2.3': 'tpm_version', + '2.23.133.2.4': 'platform_manufacturer', + '2.23.133.2.5': 'platform_model', + '2.23.133.2.6': 'platform_version', + # https://tools.ietf.org/html/rfc2985#page-26 + '1.2.840.113549.1.9.1': 'email_address', + # Page 10 of https://cabforum.org/wp-content/uploads/EV-V1_5_5.pdf + '1.3.6.1.4.1.311.60.2.1.1': 'incorporation_locality', + '1.3.6.1.4.1.311.60.2.1.2': 'incorporation_state_or_province', + '1.3.6.1.4.1.311.60.2.1.3': 'incorporation_country', + # https://tools.ietf.org/html/rfc4519#section-2.39 + '0.9.2342.19200300.100.1.1': 'user_id', + # https://tools.ietf.org/html/rfc2247#section-4 + '0.9.2342.19200300.100.1.25': 'domain_component', + # http://www.alvestrand.no/objectid/0.2.262.1.10.7.20.html + '0.2.262.1.10.7.20': 'name_distinguisher', + } + + # This order is largely based on observed order seen in EV certs from + # Symantec and DigiCert. Some of the uncommon name-related fields are + # just placed in what seems like a reasonable order. + preferred_order = [ + 'incorporation_country', + 'incorporation_state_or_province', + 'incorporation_locality', + 'business_category', + 'serial_number', + 'country_name', + 'postal_code', + 'state_or_province_name', + 'locality_name', + 'street_address', + 'organization_name', + 'organizational_unit_name', + 'title', + 'common_name', + 'user_id', + 'initials', + 'generation_qualifier', + 'surname', + 'given_name', + 'name', + 'pseudonym', + 'dn_qualifier', + 'telephone_number', + 'email_address', + 'domain_component', + 'name_distinguisher', + 'organization_identifier', + 'tpm_manufacturer', + 'tpm_model', + 'tpm_version', + 'platform_manufacturer', + 'platform_model', + 'platform_version', + ] + + @classmethod + def preferred_ordinal(cls, attr_name): + """ + Returns an ordering value for a particular attribute key. + + Unrecognized attributes and OIDs will be sorted lexically at the end. + + :return: + An orderable value. + + """ + + attr_name = cls.map(attr_name) + if attr_name in cls.preferred_order: + ordinal = cls.preferred_order.index(attr_name) + else: + ordinal = len(cls.preferred_order) + + return (ordinal, attr_name) + + @property + def human_friendly(self): + """ + :return: + A human-friendly unicode string to display to users + """ + + return { + 'common_name': 'Common Name', + 'surname': 'Surname', + 'serial_number': 'Serial Number', + 'country_name': 'Country', + 'locality_name': 'Locality', + 'state_or_province_name': 'State/Province', + 'street_address': 'Street Address', + 'organization_name': 'Organization', + 'organizational_unit_name': 'Organizational Unit', + 'title': 'Title', + 'business_category': 'Business Category', + 'postal_code': 'Postal Code', + 'telephone_number': 'Telephone Number', + 'name': 'Name', + 'given_name': 'Given Name', + 'initials': 'Initials', + 'generation_qualifier': 'Generation Qualifier', + 'unique_identifier': 'Unique Identifier', + 'dn_qualifier': 'DN Qualifier', + 'pseudonym': 'Pseudonym', + 'email_address': 'Email Address', + 'incorporation_locality': 'Incorporation Locality', + 'incorporation_state_or_province': 'Incorporation State/Province', + 'incorporation_country': 'Incorporation Country', + 'domain_component': 'Domain Component', + 'name_distinguisher': 'Name Distinguisher', + 'organization_identifier': 'Organization Identifier', + 'tpm_manufacturer': 'TPM Manufacturer', + 'tpm_model': 'TPM Model', + 'tpm_version': 'TPM Version', + 'platform_manufacturer': 'Platform Manufacturer', + 'platform_model': 'Platform Model', + 'platform_version': 'Platform Version', + 'user_id': 'User ID', + }.get(self.native, self.native) + + +class NameTypeAndValue(Sequence): + _fields = [ + ('type', NameType), + ('value', Any), + ] + + _oid_pair = ('type', 'value') + _oid_specs = { + 'common_name': DirectoryString, + 'surname': DirectoryString, + 'serial_number': DirectoryString, + 'country_name': DirectoryString, + 'locality_name': DirectoryString, + 'state_or_province_name': DirectoryString, + 'street_address': DirectoryString, + 'organization_name': DirectoryString, + 'organizational_unit_name': DirectoryString, + 'title': DirectoryString, + 'business_category': DirectoryString, + 'postal_code': DirectoryString, + 'telephone_number': PrintableString, + 'name': DirectoryString, + 'given_name': DirectoryString, + 'initials': DirectoryString, + 'generation_qualifier': DirectoryString, + 'unique_identifier': OctetBitString, + 'dn_qualifier': DirectoryString, + 'pseudonym': DirectoryString, + # https://tools.ietf.org/html/rfc2985#page-26 + 'email_address': EmailAddress, + # Page 10 of https://cabforum.org/wp-content/uploads/EV-V1_5_5.pdf + 'incorporation_locality': DirectoryString, + 'incorporation_state_or_province': DirectoryString, + 'incorporation_country': DirectoryString, + 'domain_component': DNSName, + 'name_distinguisher': DirectoryString, + 'organization_identifier': DirectoryString, + 'tpm_manufacturer': UTF8String, + 'tpm_model': UTF8String, + 'tpm_version': UTF8String, + 'platform_manufacturer': UTF8String, + 'platform_model': UTF8String, + 'platform_version': UTF8String, + 'user_id': DirectoryString, + } + + _prepped = None + + @property + def prepped_value(self): + """ + Returns the value after being processed by the internationalized string + preparation as specified by RFC 5280 + + :return: + A unicode string + """ + + if self._prepped is None: + self._prepped = self._ldap_string_prep(self['value'].native) + return self._prepped + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + """ + Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1 + + :param other: + Another NameTypeAndValue object + + :return: + A boolean + """ + + if not isinstance(other, NameTypeAndValue): + return False + + if other['type'].native != self['type'].native: + return False + + return other.prepped_value == self.prepped_value + + def _ldap_string_prep(self, string): + """ + Implements the internationalized string preparation algorithm from + RFC 4518. https://tools.ietf.org/html/rfc4518#section-2 + + :param string: + A unicode string to prepare + + :return: + A prepared unicode string, ready for comparison + """ + + # Map step + string = re.sub('[\u00ad\u1806\u034f\u180b-\u180d\ufe0f-\uff00\ufffc]+', '', string) + string = re.sub('[\u0009\u000a\u000b\u000c\u000d\u0085]', ' ', string) + if sys.maxunicode == 0xffff: + # Some installs of Python 2.7 don't support 8-digit unicode escape + # ranges, so we have to break them into pieces + # Original was: \U0001D173-\U0001D17A and \U000E0020-\U000E007F + string = re.sub('\ud834[\udd73-\udd7a]|\udb40[\udc20-\udc7f]|\U000e0001', '', string) + else: + string = re.sub('[\U0001D173-\U0001D17A\U000E0020-\U000E007F\U000e0001]', '', string) + string = re.sub( + '[\u0000-\u0008\u000e-\u001f\u007f-\u0084\u0086-\u009f\u06dd\u070f\u180e\u200c-\u200f' + '\u202a-\u202e\u2060-\u2063\u206a-\u206f\ufeff\ufff9-\ufffb]+', + '', + string + ) + string = string.replace('\u200b', '') + string = re.sub('[\u00a0\u1680\u2000-\u200a\u2028-\u2029\u202f\u205f\u3000]', ' ', string) + + string = ''.join(map(stringprep.map_table_b2, string)) + + # Normalize step + string = unicodedata.normalize('NFKC', string) + + # Prohibit step + for char in string: + if stringprep.in_table_a1(char): + raise ValueError(unwrap( + ''' + X.509 Name objects may not contain unassigned code points + ''' + )) + + if stringprep.in_table_c8(char): + raise ValueError(unwrap( + ''' + X.509 Name objects may not contain change display or + zzzzdeprecated characters + ''' + )) + + if stringprep.in_table_c3(char): + raise ValueError(unwrap( + ''' + X.509 Name objects may not contain private use characters + ''' + )) + + if stringprep.in_table_c4(char): + raise ValueError(unwrap( + ''' + X.509 Name objects may not contain non-character code points + ''' + )) + + if stringprep.in_table_c5(char): + raise ValueError(unwrap( + ''' + X.509 Name objects may not contain surrogate code points + ''' + )) + + if char == '\ufffd': + raise ValueError(unwrap( + ''' + X.509 Name objects may not contain the replacement character + ''' + )) + + # Check bidirectional step - here we ensure that we are not mixing + # left-to-right and right-to-left text in the string + has_r_and_al_cat = False + has_l_cat = False + for char in string: + if stringprep.in_table_d1(char): + has_r_and_al_cat = True + elif stringprep.in_table_d2(char): + has_l_cat = True + + if has_r_and_al_cat: + first_is_r_and_al = stringprep.in_table_d1(string[0]) + last_is_r_and_al = stringprep.in_table_d1(string[-1]) + + if has_l_cat or not first_is_r_and_al or not last_is_r_and_al: + raise ValueError(unwrap( + ''' + X.509 Name object contains a malformed bidirectional + sequence + ''' + )) + + # Insignificant space handling step + string = ' ' + re.sub(' +', ' ', string).strip() + ' ' + + return string + + +class RelativeDistinguishedName(SetOf): + _child_spec = NameTypeAndValue + + @property + def hashable(self): + """ + :return: + A unicode string that can be used as a dict key or in a set + """ + + output = [] + values = self._get_values(self) + for key in sorted(values.keys()): + output.append('%s: %s' % (key, values[key])) + # Unit separator is used here since the normalization process for + # values moves any such character, and the keys are all dotted integers + # or under_score_words + return '\x1F'.join(output) + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + """ + Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1 + + :param other: + Another RelativeDistinguishedName object + + :return: + A boolean + """ + + if not isinstance(other, RelativeDistinguishedName): + return False + + if len(self) != len(other): + return False + + self_types = self._get_types(self) + other_types = self._get_types(other) + + if self_types != other_types: + return False + + self_values = self._get_values(self) + other_values = self._get_values(other) + + for type_name_ in self_types: + if self_values[type_name_] != other_values[type_name_]: + return False + + return True + + def _get_types(self, rdn): + """ + Returns a set of types contained in an RDN + + :param rdn: + A RelativeDistinguishedName object + + :return: + A set object with unicode strings of NameTypeAndValue type field + values + """ + + return set([ntv['type'].native for ntv in rdn]) + + def _get_values(self, rdn): + """ + Returns a dict of prepped values contained in an RDN + + :param rdn: + A RelativeDistinguishedName object + + :return: + A dict object with unicode strings of NameTypeAndValue value field + values that have been prepped for comparison + """ + + output = {} + [output.update([(ntv['type'].native, ntv.prepped_value)]) for ntv in rdn] + return output + + +class RDNSequence(SequenceOf): + _child_spec = RelativeDistinguishedName + + @property + def hashable(self): + """ + :return: + A unicode string that can be used as a dict key or in a set + """ + + # Record separator is used here since the normalization process for + # values moves any such character, and the keys are all dotted integers + # or under_score_words + return '\x1E'.join(rdn.hashable for rdn in self) + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + """ + Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1 + + :param other: + Another RDNSequence object + + :return: + A boolean + """ + + if not isinstance(other, RDNSequence): + return False + + if len(self) != len(other): + return False + + for index, self_rdn in enumerate(self): + if other[index] != self_rdn: + return False + + return True + + +class Name(Choice): + _alternatives = [ + ('', RDNSequence), + ] + + _human_friendly = None + _sha1 = None + _sha256 = None + + @classmethod + def build(cls, name_dict, use_printable=False): + """ + Creates a Name object from a dict of unicode string keys and values. + The keys should be from NameType._map, or a dotted-integer OID unicode + string. + + :param name_dict: + A dict of name information, e.g. {"common_name": "Will Bond", + "country_name": "US", "organization_name": "Codex Non Sufficit LC"} + + :param use_printable: + A bool - if PrintableString should be used for encoding instead of + UTF8String. This is for backwards compatibility with old software. + + :return: + An x509.Name object + """ + + rdns = [] + if not use_printable: + encoding_name = 'utf8_string' + encoding_class = UTF8String + else: + encoding_name = 'printable_string' + encoding_class = PrintableString + + # Sort the attributes according to NameType.preferred_order + name_dict = OrderedDict( + sorted( + name_dict.items(), + key=lambda item: NameType.preferred_ordinal(item[0]) + ) + ) + + for attribute_name, attribute_value in name_dict.items(): + attribute_name = NameType.map(attribute_name) + if attribute_name == 'email_address': + value = EmailAddress(attribute_value) + elif attribute_name == 'domain_component': + value = DNSName(attribute_value) + elif attribute_name in set(['dn_qualifier', 'country_name', 'serial_number']): + value = DirectoryString( + name='printable_string', + value=PrintableString(attribute_value) + ) + else: + value = DirectoryString( + name=encoding_name, + value=encoding_class(attribute_value) + ) + + rdns.append(RelativeDistinguishedName([ + NameTypeAndValue({ + 'type': attribute_name, + 'value': value + }) + ])) + + return cls(name='', value=RDNSequence(rdns)) + + @property + def hashable(self): + """ + :return: + A unicode string that can be used as a dict key or in a set + """ + + return self.chosen.hashable + + def __len__(self): + return len(self.chosen) + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + """ + Equality as defined by https://tools.ietf.org/html/rfc5280#section-7.1 + + :param other: + Another Name object + + :return: + A boolean + """ + + if not isinstance(other, Name): + return False + return self.chosen == other.chosen + + @property + def native(self): + if self._native is None: + self._native = OrderedDict() + for rdn in self.chosen.native: + for type_val in rdn: + field_name = type_val['type'] + if field_name in self._native: + existing = self._native[field_name] + if not isinstance(existing, list): + existing = self._native[field_name] = [existing] + existing.append(type_val['value']) + else: + self._native[field_name] = type_val['value'] + return self._native + + @property + def human_friendly(self): + """ + :return: + A human-friendly unicode string containing the parts of the name + """ + + if self._human_friendly is None: + data = OrderedDict() + last_field = None + for rdn in self.chosen: + for type_val in rdn: + field_name = type_val['type'].human_friendly + last_field = field_name + if field_name in data: + data[field_name] = [data[field_name]] + data[field_name].append(type_val['value']) + else: + data[field_name] = type_val['value'] + to_join = [] + keys = data.keys() + if last_field == 'Country': + keys = reversed(list(keys)) + for key in keys: + value = data[key] + native_value = self._recursive_humanize(value) + to_join.append('%s: %s' % (key, native_value)) + + has_comma = False + for element in to_join: + if element.find(',') != -1: + has_comma = True + break + + separator = ', ' if not has_comma else '; ' + self._human_friendly = separator.join(to_join[::-1]) + + return self._human_friendly + + def _recursive_humanize(self, value): + """ + Recursively serializes data compiled from the RDNSequence + + :param value: + An Asn1Value object, or a list of Asn1Value objects + + :return: + A unicode string + """ + + if isinstance(value, list): + return ', '.join( + reversed([self._recursive_humanize(sub_value) for sub_value in value]) + ) + return value.native + + @property + def sha1(self): + """ + :return: + The SHA1 hash of the DER-encoded bytes of this name + """ + + if self._sha1 is None: + self._sha1 = hashlib.sha1(self.dump()).digest() + return self._sha1 + + @property + def sha256(self): + """ + :return: + The SHA-256 hash of the DER-encoded bytes of this name + """ + + if self._sha256 is None: + self._sha256 = hashlib.sha256(self.dump()).digest() + return self._sha256 + + +class AnotherName(Sequence): + _fields = [ + ('type_id', ObjectIdentifier), + ('value', Any, {'explicit': 0}), + ] + + +class CountryName(Choice): + class_ = 1 + tag = 1 + + _alternatives = [ + ('x121_dcc_code', NumericString), + ('iso_3166_alpha2_code', PrintableString), + ] + + +class AdministrationDomainName(Choice): + class_ = 1 + tag = 2 + + _alternatives = [ + ('numeric', NumericString), + ('printable', PrintableString), + ] + + +class PrivateDomainName(Choice): + _alternatives = [ + ('numeric', NumericString), + ('printable', PrintableString), + ] + + +class PersonalName(Set): + _fields = [ + ('surname', PrintableString, {'implicit': 0}), + ('given_name', PrintableString, {'implicit': 1, 'optional': True}), + ('initials', PrintableString, {'implicit': 2, 'optional': True}), + ('generation_qualifier', PrintableString, {'implicit': 3, 'optional': True}), + ] + + +class TeletexPersonalName(Set): + _fields = [ + ('surname', TeletexString, {'implicit': 0}), + ('given_name', TeletexString, {'implicit': 1, 'optional': True}), + ('initials', TeletexString, {'implicit': 2, 'optional': True}), + ('generation_qualifier', TeletexString, {'implicit': 3, 'optional': True}), + ] + + +class OrganizationalUnitNames(SequenceOf): + _child_spec = PrintableString + + +class TeletexOrganizationalUnitNames(SequenceOf): + _child_spec = TeletexString + + +class BuiltInStandardAttributes(Sequence): + _fields = [ + ('country_name', CountryName, {'optional': True}), + ('administration_domain_name', AdministrationDomainName, {'optional': True}), + ('network_address', NumericString, {'implicit': 0, 'optional': True}), + ('terminal_identifier', PrintableString, {'implicit': 1, 'optional': True}), + ('private_domain_name', PrivateDomainName, {'explicit': 2, 'optional': True}), + ('organization_name', PrintableString, {'implicit': 3, 'optional': True}), + ('numeric_user_identifier', NumericString, {'implicit': 4, 'optional': True}), + ('personal_name', PersonalName, {'implicit': 5, 'optional': True}), + ('organizational_unit_names', OrganizationalUnitNames, {'implicit': 6, 'optional': True}), + ] + + +class BuiltInDomainDefinedAttribute(Sequence): + _fields = [ + ('type', PrintableString), + ('value', PrintableString), + ] + + +class BuiltInDomainDefinedAttributes(SequenceOf): + _child_spec = BuiltInDomainDefinedAttribute + + +class TeletexDomainDefinedAttribute(Sequence): + _fields = [ + ('type', TeletexString), + ('value', TeletexString), + ] + + +class TeletexDomainDefinedAttributes(SequenceOf): + _child_spec = TeletexDomainDefinedAttribute + + +class PhysicalDeliveryCountryName(Choice): + _alternatives = [ + ('x121_dcc_code', NumericString), + ('iso_3166_alpha2_code', PrintableString), + ] + + +class PostalCode(Choice): + _alternatives = [ + ('numeric_code', NumericString), + ('printable_code', PrintableString), + ] + + +class PDSParameter(Set): + _fields = [ + ('printable_string', PrintableString, {'optional': True}), + ('teletex_string', TeletexString, {'optional': True}), + ] + + +class PrintableAddress(SequenceOf): + _child_spec = PrintableString + + +class UnformattedPostalAddress(Set): + _fields = [ + ('printable_address', PrintableAddress, {'optional': True}), + ('teletex_string', TeletexString, {'optional': True}), + ] + + +class E1634Address(Sequence): + _fields = [ + ('number', NumericString, {'implicit': 0}), + ('sub_address', NumericString, {'implicit': 1, 'optional': True}), + ] + + +class NAddresses(SetOf): + _child_spec = OctetString + + +class PresentationAddress(Sequence): + _fields = [ + ('p_selector', OctetString, {'explicit': 0, 'optional': True}), + ('s_selector', OctetString, {'explicit': 1, 'optional': True}), + ('t_selector', OctetString, {'explicit': 2, 'optional': True}), + ('n_addresses', NAddresses, {'explicit': 3}), + ] + + +class ExtendedNetworkAddress(Choice): + _alternatives = [ + ('e163_4_address', E1634Address), + ('psap_address', PresentationAddress, {'implicit': 0}) + ] + + +class TerminalType(Integer): + _map = { + 3: 'telex', + 4: 'teletex', + 5: 'g3_facsimile', + 6: 'g4_facsimile', + 7: 'ia5_terminal', + 8: 'videotex', + } + + +class ExtensionAttributeType(Integer): + _map = { + 1: 'common_name', + 2: 'teletex_common_name', + 3: 'teletex_organization_name', + 4: 'teletex_personal_name', + 5: 'teletex_organization_unit_names', + 6: 'teletex_domain_defined_attributes', + 7: 'pds_name', + 8: 'physical_delivery_country_name', + 9: 'postal_code', + 10: 'physical_delivery_office_name', + 11: 'physical_delivery_office_number', + 12: 'extension_of_address_components', + 13: 'physical_delivery_personal_name', + 14: 'physical_delivery_organization_name', + 15: 'extension_physical_delivery_address_components', + 16: 'unformatted_postal_address', + 17: 'street_address', + 18: 'post_office_box_address', + 19: 'poste_restante_address', + 20: 'unique_postal_name', + 21: 'local_postal_attributes', + 22: 'extended_network_address', + 23: 'terminal_type', + } + + +class ExtensionAttribute(Sequence): + _fields = [ + ('extension_attribute_type', ExtensionAttributeType, {'implicit': 0}), + ('extension_attribute_value', Any, {'explicit': 1}), + ] + + _oid_pair = ('extension_attribute_type', 'extension_attribute_value') + _oid_specs = { + 'common_name': PrintableString, + 'teletex_common_name': TeletexString, + 'teletex_organization_name': TeletexString, + 'teletex_personal_name': TeletexPersonalName, + 'teletex_organization_unit_names': TeletexOrganizationalUnitNames, + 'teletex_domain_defined_attributes': TeletexDomainDefinedAttributes, + 'pds_name': PrintableString, + 'physical_delivery_country_name': PhysicalDeliveryCountryName, + 'postal_code': PostalCode, + 'physical_delivery_office_name': PDSParameter, + 'physical_delivery_office_number': PDSParameter, + 'extension_of_address_components': PDSParameter, + 'physical_delivery_personal_name': PDSParameter, + 'physical_delivery_organization_name': PDSParameter, + 'extension_physical_delivery_address_components': PDSParameter, + 'unformatted_postal_address': UnformattedPostalAddress, + 'street_address': PDSParameter, + 'post_office_box_address': PDSParameter, + 'poste_restante_address': PDSParameter, + 'unique_postal_name': PDSParameter, + 'local_postal_attributes': PDSParameter, + 'extended_network_address': ExtendedNetworkAddress, + 'terminal_type': TerminalType, + } + + +class ExtensionAttributes(SequenceOf): + _child_spec = ExtensionAttribute + + +class ORAddress(Sequence): + _fields = [ + ('built_in_standard_attributes', BuiltInStandardAttributes), + ('built_in_domain_defined_attributes', BuiltInDomainDefinedAttributes, {'optional': True}), + ('extension_attributes', ExtensionAttributes, {'optional': True}), + ] + + +class EDIPartyName(Sequence): + _fields = [ + ('name_assigner', DirectoryString, {'implicit': 0, 'optional': True}), + ('party_name', DirectoryString, {'implicit': 1}), + ] + + +class GeneralName(Choice): + _alternatives = [ + ('other_name', AnotherName, {'implicit': 0}), + ('rfc822_name', EmailAddress, {'implicit': 1}), + ('dns_name', DNSName, {'implicit': 2}), + ('x400_address', ORAddress, {'implicit': 3}), + ('directory_name', Name, {'explicit': 4}), + ('edi_party_name', EDIPartyName, {'implicit': 5}), + ('uniform_resource_identifier', URI, {'implicit': 6}), + ('ip_address', IPAddress, {'implicit': 7}), + ('registered_id', ObjectIdentifier, {'implicit': 8}), + ] + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + """ + Does not support other_name, x400_address or edi_party_name + + :param other: + The other GeneralName to compare to + + :return: + A boolean + """ + + if self.name in ('other_name', 'x400_address', 'edi_party_name'): + raise ValueError(unwrap( + ''' + Comparison is not supported for GeneralName objects of + choice %s + ''', + self.name + )) + + if other.name in ('other_name', 'x400_address', 'edi_party_name'): + raise ValueError(unwrap( + ''' + Comparison is not supported for GeneralName objects of choice + %s''', + other.name + )) + + if self.name != other.name: + return False + + return self.chosen == other.chosen + + +class GeneralNames(SequenceOf): + _child_spec = GeneralName + + +class Time(Choice): + _alternatives = [ + ('utc_time', UTCTime), + ('general_time', GeneralizedTime), + ] + + +class Validity(Sequence): + _fields = [ + ('not_before', Time), + ('not_after', Time), + ] + + +class BasicConstraints(Sequence): + _fields = [ + ('ca', Boolean, {'default': False}), + ('path_len_constraint', Integer, {'optional': True}), + ] + + +class AuthorityKeyIdentifier(Sequence): + _fields = [ + ('key_identifier', OctetString, {'implicit': 0, 'optional': True}), + ('authority_cert_issuer', GeneralNames, {'implicit': 1, 'optional': True}), + ('authority_cert_serial_number', Integer, {'implicit': 2, 'optional': True}), + ] + + +class DistributionPointName(Choice): + _alternatives = [ + ('full_name', GeneralNames, {'implicit': 0}), + ('name_relative_to_crl_issuer', RelativeDistinguishedName, {'implicit': 1}), + ] + + +class ReasonFlags(BitString): + _map = { + 0: 'unused', + 1: 'key_compromise', + 2: 'ca_compromise', + 3: 'affiliation_changed', + 4: 'superseded', + 5: 'cessation_of_operation', + 6: 'certificate_hold', + 7: 'privilege_withdrawn', + 8: 'aa_compromise', + } + + +class GeneralSubtree(Sequence): + _fields = [ + ('base', GeneralName), + ('minimum', Integer, {'implicit': 0, 'default': 0}), + ('maximum', Integer, {'implicit': 1, 'optional': True}), + ] + + +class GeneralSubtrees(SequenceOf): + _child_spec = GeneralSubtree + + +class NameConstraints(Sequence): + _fields = [ + ('permitted_subtrees', GeneralSubtrees, {'implicit': 0, 'optional': True}), + ('excluded_subtrees', GeneralSubtrees, {'implicit': 1, 'optional': True}), + ] + + +class DistributionPoint(Sequence): + _fields = [ + ('distribution_point', DistributionPointName, {'explicit': 0, 'optional': True}), + ('reasons', ReasonFlags, {'implicit': 1, 'optional': True}), + ('crl_issuer', GeneralNames, {'implicit': 2, 'optional': True}), + ] + + _url = False + + @property + def url(self): + """ + :return: + None or a unicode string of the distribution point's URL + """ + + if self._url is False: + self._url = None + name = self['distribution_point'] + if name.name != 'full_name': + raise ValueError(unwrap( + ''' + CRL distribution points that are relative to the issuer are + not supported + ''' + )) + + for general_name in name.chosen: + if general_name.name == 'uniform_resource_identifier': + url = general_name.native + if url.lower().startswith(('http://', 'https://', 'ldap://', 'ldaps://')): + self._url = url + break + + return self._url + + +class CRLDistributionPoints(SequenceOf): + _child_spec = DistributionPoint + + +class DisplayText(Choice): + _alternatives = [ + ('ia5_string', IA5String), + ('visible_string', VisibleString), + ('bmp_string', BMPString), + ('utf8_string', UTF8String), + ] + + +class NoticeNumbers(SequenceOf): + _child_spec = Integer + + +class NoticeReference(Sequence): + _fields = [ + ('organization', DisplayText), + ('notice_numbers', NoticeNumbers), + ] + + +class UserNotice(Sequence): + _fields = [ + ('notice_ref', NoticeReference, {'optional': True}), + ('explicit_text', DisplayText, {'optional': True}), + ] + + +class PolicyQualifierId(ObjectIdentifier): + _map = { + '1.3.6.1.5.5.7.2.1': 'certification_practice_statement', + '1.3.6.1.5.5.7.2.2': 'user_notice', + } + + +class PolicyQualifierInfo(Sequence): + _fields = [ + ('policy_qualifier_id', PolicyQualifierId), + ('qualifier', Any), + ] + + _oid_pair = ('policy_qualifier_id', 'qualifier') + _oid_specs = { + 'certification_practice_statement': IA5String, + 'user_notice': UserNotice, + } + + +class PolicyQualifierInfos(SequenceOf): + _child_spec = PolicyQualifierInfo + + +class PolicyIdentifier(ObjectIdentifier): + _map = { + '2.5.29.32.0': 'any_policy', + } + + +class PolicyInformation(Sequence): + _fields = [ + ('policy_identifier', PolicyIdentifier), + ('policy_qualifiers', PolicyQualifierInfos, {'optional': True}) + ] + + +class CertificatePolicies(SequenceOf): + _child_spec = PolicyInformation + + +class PolicyMapping(Sequence): + _fields = [ + ('issuer_domain_policy', PolicyIdentifier), + ('subject_domain_policy', PolicyIdentifier), + ] + + +class PolicyMappings(SequenceOf): + _child_spec = PolicyMapping + + +class PolicyConstraints(Sequence): + _fields = [ + ('require_explicit_policy', Integer, {'implicit': 0, 'optional': True}), + ('inhibit_policy_mapping', Integer, {'implicit': 1, 'optional': True}), + ] + + +class KeyPurposeId(ObjectIdentifier): + _map = { + # https://tools.ietf.org/html/rfc5280#page-45 + '2.5.29.37.0': 'any_extended_key_usage', + '1.3.6.1.5.5.7.3.1': 'server_auth', + '1.3.6.1.5.5.7.3.2': 'client_auth', + '1.3.6.1.5.5.7.3.3': 'code_signing', + '1.3.6.1.5.5.7.3.4': 'email_protection', + '1.3.6.1.5.5.7.3.5': 'ipsec_end_system', + '1.3.6.1.5.5.7.3.6': 'ipsec_tunnel', + '1.3.6.1.5.5.7.3.7': 'ipsec_user', + '1.3.6.1.5.5.7.3.8': 'time_stamping', + '1.3.6.1.5.5.7.3.9': 'ocsp_signing', + # http://tools.ietf.org/html/rfc3029.html#page-9 + '1.3.6.1.5.5.7.3.10': 'dvcs', + # http://tools.ietf.org/html/rfc6268.html#page-16 + '1.3.6.1.5.5.7.3.13': 'eap_over_ppp', + '1.3.6.1.5.5.7.3.14': 'eap_over_lan', + # https://tools.ietf.org/html/rfc5055#page-76 + '1.3.6.1.5.5.7.3.15': 'scvp_server', + '1.3.6.1.5.5.7.3.16': 'scvp_client', + # https://tools.ietf.org/html/rfc4945#page-31 + '1.3.6.1.5.5.7.3.17': 'ipsec_ike', + # https://tools.ietf.org/html/rfc5415#page-38 + '1.3.6.1.5.5.7.3.18': 'capwap_ac', + '1.3.6.1.5.5.7.3.19': 'capwap_wtp', + # https://tools.ietf.org/html/rfc5924#page-8 + '1.3.6.1.5.5.7.3.20': 'sip_domain', + # https://tools.ietf.org/html/rfc6187#page-7 + '1.3.6.1.5.5.7.3.21': 'secure_shell_client', + '1.3.6.1.5.5.7.3.22': 'secure_shell_server', + # https://tools.ietf.org/html/rfc6494#page-7 + '1.3.6.1.5.5.7.3.23': 'send_router', + '1.3.6.1.5.5.7.3.24': 'send_proxied_router', + '1.3.6.1.5.5.7.3.25': 'send_owner', + '1.3.6.1.5.5.7.3.26': 'send_proxied_owner', + # https://tools.ietf.org/html/rfc6402#page-10 + '1.3.6.1.5.5.7.3.27': 'cmc_ca', + '1.3.6.1.5.5.7.3.28': 'cmc_ra', + '1.3.6.1.5.5.7.3.29': 'cmc_archive', + # https://tools.ietf.org/html/draft-ietf-sidr-bgpsec-pki-profiles-15#page-6 + '1.3.6.1.5.5.7.3.30': 'bgpspec_router', + # https://www.ietf.org/proceedings/44/I-D/draft-ietf-ipsec-pki-req-01.txt + '1.3.6.1.5.5.8.2.2': 'ike_intermediate', + # https://msdn.microsoft.com/en-us/library/windows/desktop/aa378132(v=vs.85).aspx + # and https://support.microsoft.com/en-us/kb/287547 + '1.3.6.1.4.1.311.10.3.1': 'microsoft_trust_list_signing', + '1.3.6.1.4.1.311.10.3.2': 'microsoft_time_stamp_signing', + '1.3.6.1.4.1.311.10.3.3': 'microsoft_server_gated', + '1.3.6.1.4.1.311.10.3.3.1': 'microsoft_serialized', + '1.3.6.1.4.1.311.10.3.4': 'microsoft_efs', + '1.3.6.1.4.1.311.10.3.4.1': 'microsoft_efs_recovery', + '1.3.6.1.4.1.311.10.3.5': 'microsoft_whql', + '1.3.6.1.4.1.311.10.3.6': 'microsoft_nt5', + '1.3.6.1.4.1.311.10.3.7': 'microsoft_oem_whql', + '1.3.6.1.4.1.311.10.3.8': 'microsoft_embedded_nt', + '1.3.6.1.4.1.311.10.3.9': 'microsoft_root_list_signer', + '1.3.6.1.4.1.311.10.3.10': 'microsoft_qualified_subordination', + '1.3.6.1.4.1.311.10.3.11': 'microsoft_key_recovery', + '1.3.6.1.4.1.311.10.3.12': 'microsoft_document_signing', + '1.3.6.1.4.1.311.10.3.13': 'microsoft_lifetime_signing', + '1.3.6.1.4.1.311.10.3.14': 'microsoft_mobile_device_software', + # https://support.microsoft.com/en-us/help/287547/object-ids-associated-with-microsoft-cryptography + '1.3.6.1.4.1.311.20.2.2': 'microsoft_smart_card_logon', + # https://opensource.apple.com/source + # - /Security/Security-57031.40.6/Security/libsecurity_keychain/lib/SecPolicy.cpp + # - /libsecurity_cssm/libsecurity_cssm-36064/lib/oidsalg.c + '1.2.840.113635.100.1.2': 'apple_x509_basic', + '1.2.840.113635.100.1.3': 'apple_ssl', + '1.2.840.113635.100.1.4': 'apple_local_cert_gen', + '1.2.840.113635.100.1.5': 'apple_csr_gen', + '1.2.840.113635.100.1.6': 'apple_revocation_crl', + '1.2.840.113635.100.1.7': 'apple_revocation_ocsp', + '1.2.840.113635.100.1.8': 'apple_smime', + '1.2.840.113635.100.1.9': 'apple_eap', + '1.2.840.113635.100.1.10': 'apple_software_update_signing', + '1.2.840.113635.100.1.11': 'apple_ipsec', + '1.2.840.113635.100.1.12': 'apple_ichat', + '1.2.840.113635.100.1.13': 'apple_resource_signing', + '1.2.840.113635.100.1.14': 'apple_pkinit_client', + '1.2.840.113635.100.1.15': 'apple_pkinit_server', + '1.2.840.113635.100.1.16': 'apple_code_signing', + '1.2.840.113635.100.1.17': 'apple_package_signing', + '1.2.840.113635.100.1.18': 'apple_id_validation', + '1.2.840.113635.100.1.20': 'apple_time_stamping', + '1.2.840.113635.100.1.21': 'apple_revocation', + '1.2.840.113635.100.1.22': 'apple_passbook_signing', + '1.2.840.113635.100.1.23': 'apple_mobile_store', + '1.2.840.113635.100.1.24': 'apple_escrow_service', + '1.2.840.113635.100.1.25': 'apple_profile_signer', + '1.2.840.113635.100.1.26': 'apple_qa_profile_signer', + '1.2.840.113635.100.1.27': 'apple_test_mobile_store', + '1.2.840.113635.100.1.28': 'apple_otapki_signer', + '1.2.840.113635.100.1.29': 'apple_test_otapki_signer', + '1.2.840.113625.100.1.30': 'apple_id_validation_record_signing_policy', + '1.2.840.113625.100.1.31': 'apple_smp_encryption', + '1.2.840.113625.100.1.32': 'apple_test_smp_encryption', + '1.2.840.113635.100.1.33': 'apple_server_authentication', + '1.2.840.113635.100.1.34': 'apple_pcs_escrow_service', + # http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.201-2.pdf + '2.16.840.1.101.3.6.8': 'piv_card_authentication', + '2.16.840.1.101.3.6.7': 'piv_content_signing', + # https://tools.ietf.org/html/rfc4556.html + '1.3.6.1.5.2.3.4': 'pkinit_kpclientauth', + '1.3.6.1.5.2.3.5': 'pkinit_kpkdc', + # https://www.adobe.com/devnet-docs/acrobatetk/tools/DigSig/changes.html + '1.2.840.113583.1.1.5': 'adobe_authentic_documents_trust', + # https://www.idmanagement.gov/wp-content/uploads/sites/1171/uploads/fpki-pivi-cert-profiles.pdf + '2.16.840.1.101.3.8.7': 'fpki_pivi_content_signing' + } + + +class ExtKeyUsageSyntax(SequenceOf): + _child_spec = KeyPurposeId + + +class AccessMethod(ObjectIdentifier): + _map = { + '1.3.6.1.5.5.7.48.1': 'ocsp', + '1.3.6.1.5.5.7.48.2': 'ca_issuers', + '1.3.6.1.5.5.7.48.3': 'time_stamping', + '1.3.6.1.5.5.7.48.5': 'ca_repository', + } + + +class AccessDescription(Sequence): + _fields = [ + ('access_method', AccessMethod), + ('access_location', GeneralName), + ] + + +class AuthorityInfoAccessSyntax(SequenceOf): + _child_spec = AccessDescription + + +class SubjectInfoAccessSyntax(SequenceOf): + _child_spec = AccessDescription + + +# https://tools.ietf.org/html/rfc7633 +class Features(SequenceOf): + _child_spec = Integer + + +class EntrustVersionInfo(Sequence): + _fields = [ + ('entrust_vers', GeneralString), + ('entrust_info_flags', BitString) + ] + + +class NetscapeCertificateType(BitString): + _map = { + 0: 'ssl_client', + 1: 'ssl_server', + 2: 'email', + 3: 'object_signing', + 4: 'reserved', + 5: 'ssl_ca', + 6: 'email_ca', + 7: 'object_signing_ca', + } + + +class Version(Integer): + _map = { + 0: 'v1', + 1: 'v2', + 2: 'v3', + } + + +class TPMSpecification(Sequence): + _fields = [ + ('family', UTF8String), + ('level', Integer), + ('revision', Integer), + ] + + +class SetOfTPMSpecification(SetOf): + _child_spec = TPMSpecification + + +class TCGSpecificationVersion(Sequence): + _fields = [ + ('major_version', Integer), + ('minor_version', Integer), + ('revision', Integer), + ] + + +class TCGPlatformSpecification(Sequence): + _fields = [ + ('version', TCGSpecificationVersion), + ('platform_class', OctetString), + ] + + +class SetOfTCGPlatformSpecification(SetOf): + _child_spec = TCGPlatformSpecification + + +class EKGenerationType(Enumerated): + _map = { + 0: 'internal', + 1: 'injected', + 2: 'internal_revocable', + 3: 'injected_revocable', + } + + +class EKGenerationLocation(Enumerated): + _map = { + 0: 'tpm_manufacturer', + 1: 'platform_manufacturer', + 2: 'ek_cert_signer', + } + + +class EKCertificateGenerationLocation(Enumerated): + _map = { + 0: 'tpm_manufacturer', + 1: 'platform_manufacturer', + 2: 'ek_cert_signer', + } + + +class EvaluationAssuranceLevel(Enumerated): + _map = { + 1: 'level1', + 2: 'level2', + 3: 'level3', + 4: 'level4', + 5: 'level5', + 6: 'level6', + 7: 'level7', + } + + +class EvaluationStatus(Enumerated): + _map = { + 0: 'designed_to_meet', + 1: 'evaluation_in_progress', + 2: 'evaluation_completed', + } + + +class StrengthOfFunction(Enumerated): + _map = { + 0: 'basic', + 1: 'medium', + 2: 'high', + } + + +class URIReference(Sequence): + _fields = [ + ('uniform_resource_identifier', IA5String), + ('hash_algorithm', DigestAlgorithm, {'optional': True}), + ('hash_value', BitString, {'optional': True}), + ] + + +class CommonCriteriaMeasures(Sequence): + _fields = [ + ('version', IA5String), + ('assurance_level', EvaluationAssuranceLevel), + ('evaluation_status', EvaluationStatus), + ('plus', Boolean, {'default': False}), + ('strengh_of_function', StrengthOfFunction, {'implicit': 0, 'optional': True}), + ('profile_oid', ObjectIdentifier, {'implicit': 1, 'optional': True}), + ('profile_url', URIReference, {'implicit': 2, 'optional': True}), + ('target_oid', ObjectIdentifier, {'implicit': 3, 'optional': True}), + ('target_uri', URIReference, {'implicit': 4, 'optional': True}), + ] + + +class SecurityLevel(Enumerated): + _map = { + 1: 'level1', + 2: 'level2', + 3: 'level3', + 4: 'level4', + } + + +class FIPSLevel(Sequence): + _fields = [ + ('version', IA5String), + ('level', SecurityLevel), + ('plus', Boolean, {'default': False}), + ] + + +class TPMSecurityAssertions(Sequence): + _fields = [ + ('version', Version, {'default': 'v1'}), + ('field_upgradable', Boolean, {'default': False}), + ('ek_generation_type', EKGenerationType, {'implicit': 0, 'optional': True}), + ('ek_generation_location', EKGenerationLocation, {'implicit': 1, 'optional': True}), + ('ek_certificate_generation_location', EKCertificateGenerationLocation, {'implicit': 2, 'optional': True}), + ('cc_info', CommonCriteriaMeasures, {'implicit': 3, 'optional': True}), + ('fips_level', FIPSLevel, {'implicit': 4, 'optional': True}), + ('iso_9000_certified', Boolean, {'implicit': 5, 'default': False}), + ('iso_9000_uri', IA5String, {'optional': True}), + ] + + +class SetOfTPMSecurityAssertions(SetOf): + _child_spec = TPMSecurityAssertions + + +class SubjectDirectoryAttributeId(ObjectIdentifier): + _map = { + # https://tools.ietf.org/html/rfc2256#page-11 + '2.5.4.52': 'supported_algorithms', + # https://www.trustedcomputinggroup.org/wp-content/uploads/Credential_Profile_EK_V2.0_R14_published.pdf + '2.23.133.2.16': 'tpm_specification', + '2.23.133.2.17': 'tcg_platform_specification', + '2.23.133.2.18': 'tpm_security_assertions', + # https://tools.ietf.org/html/rfc3739#page-18 + '1.3.6.1.5.5.7.9.1': 'pda_date_of_birth', + '1.3.6.1.5.5.7.9.2': 'pda_place_of_birth', + '1.3.6.1.5.5.7.9.3': 'pda_gender', + '1.3.6.1.5.5.7.9.4': 'pda_country_of_citizenship', + '1.3.6.1.5.5.7.9.5': 'pda_country_of_residence', + # https://holtstrom.com/michael/tools/asn1decoder.php + '1.2.840.113533.7.68.29': 'entrust_user_role', + } + + +class SetOfGeneralizedTime(SetOf): + _child_spec = GeneralizedTime + + +class SetOfDirectoryString(SetOf): + _child_spec = DirectoryString + + +class SetOfPrintableString(SetOf): + _child_spec = PrintableString + + +class SupportedAlgorithm(Sequence): + _fields = [ + ('algorithm_identifier', AnyAlgorithmIdentifier), + ('intended_usage', KeyUsage, {'explicit': 0, 'optional': True}), + ('intended_certificate_policies', CertificatePolicies, {'explicit': 1, 'optional': True}), + ] + + +class SetOfSupportedAlgorithm(SetOf): + _child_spec = SupportedAlgorithm + + +class SubjectDirectoryAttribute(Sequence): + _fields = [ + ('type', SubjectDirectoryAttributeId), + ('values', Any), + ] + + _oid_pair = ('type', 'values') + _oid_specs = { + 'supported_algorithms': SetOfSupportedAlgorithm, + 'tpm_specification': SetOfTPMSpecification, + 'tcg_platform_specification': SetOfTCGPlatformSpecification, + 'tpm_security_assertions': SetOfTPMSecurityAssertions, + 'pda_date_of_birth': SetOfGeneralizedTime, + 'pda_place_of_birth': SetOfDirectoryString, + 'pda_gender': SetOfPrintableString, + 'pda_country_of_citizenship': SetOfPrintableString, + 'pda_country_of_residence': SetOfPrintableString, + } + + def _values_spec(self): + type_ = self['type'].native + if type_ in self._oid_specs: + return self._oid_specs[type_] + return SetOf + + _spec_callbacks = { + 'values': _values_spec + } + + +class SubjectDirectoryAttributes(SequenceOf): + _child_spec = SubjectDirectoryAttribute + + +class ExtensionId(ObjectIdentifier): + _map = { + '2.5.29.9': 'subject_directory_attributes', + '2.5.29.14': 'key_identifier', + '2.5.29.15': 'key_usage', + '2.5.29.16': 'private_key_usage_period', + '2.5.29.17': 'subject_alt_name', + '2.5.29.18': 'issuer_alt_name', + '2.5.29.19': 'basic_constraints', + '2.5.29.30': 'name_constraints', + '2.5.29.31': 'crl_distribution_points', + '2.5.29.32': 'certificate_policies', + '2.5.29.33': 'policy_mappings', + '2.5.29.35': 'authority_key_identifier', + '2.5.29.36': 'policy_constraints', + '2.5.29.37': 'extended_key_usage', + '2.5.29.46': 'freshest_crl', + '2.5.29.54': 'inhibit_any_policy', + '1.3.6.1.5.5.7.1.1': 'authority_information_access', + '1.3.6.1.5.5.7.1.11': 'subject_information_access', + # https://tools.ietf.org/html/rfc7633 + '1.3.6.1.5.5.7.1.24': 'tls_feature', + '1.3.6.1.5.5.7.48.1.5': 'ocsp_no_check', + '1.2.840.113533.7.65.0': 'entrust_version_extension', + '2.16.840.1.113730.1.1': 'netscape_certificate_type', + # https://tools.ietf.org/html/rfc6962.html#page-14 + '1.3.6.1.4.1.11129.2.4.2': 'signed_certificate_timestamp_list', + # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/3aec3e50-511a-42f9-a5d5-240af503e470 + '1.3.6.1.4.1.311.20.2': 'microsoft_enroll_certtype', + } + + +class Extension(Sequence): + _fields = [ + ('extn_id', ExtensionId), + ('critical', Boolean, {'default': False}), + ('extn_value', ParsableOctetString), + ] + + _oid_pair = ('extn_id', 'extn_value') + _oid_specs = { + 'subject_directory_attributes': SubjectDirectoryAttributes, + 'key_identifier': OctetString, + 'key_usage': KeyUsage, + 'private_key_usage_period': PrivateKeyUsagePeriod, + 'subject_alt_name': GeneralNames, + 'issuer_alt_name': GeneralNames, + 'basic_constraints': BasicConstraints, + 'name_constraints': NameConstraints, + 'crl_distribution_points': CRLDistributionPoints, + 'certificate_policies': CertificatePolicies, + 'policy_mappings': PolicyMappings, + 'authority_key_identifier': AuthorityKeyIdentifier, + 'policy_constraints': PolicyConstraints, + 'extended_key_usage': ExtKeyUsageSyntax, + 'freshest_crl': CRLDistributionPoints, + 'inhibit_any_policy': Integer, + 'authority_information_access': AuthorityInfoAccessSyntax, + 'subject_information_access': SubjectInfoAccessSyntax, + 'tls_feature': Features, + 'ocsp_no_check': Null, + 'entrust_version_extension': EntrustVersionInfo, + 'netscape_certificate_type': NetscapeCertificateType, + 'signed_certificate_timestamp_list': OctetString, + # Not UTF8String as Microsofts docs claim, see: + # https://www.alvestrand.no/objectid/1.3.6.1.4.1.311.20.2.html + 'microsoft_enroll_certtype': BMPString, + } + + +class Extensions(SequenceOf): + _child_spec = Extension + + +class TbsCertificate(Sequence): + _fields = [ + ('version', Version, {'explicit': 0, 'default': 'v1'}), + ('serial_number', Integer), + ('signature', SignedDigestAlgorithm), + ('issuer', Name), + ('validity', Validity), + ('subject', Name), + ('subject_public_key_info', PublicKeyInfo), + ('issuer_unique_id', OctetBitString, {'implicit': 1, 'optional': True}), + ('subject_unique_id', OctetBitString, {'implicit': 2, 'optional': True}), + ('extensions', Extensions, {'explicit': 3, 'optional': True}), + ] + + +class Certificate(Sequence): + _fields = [ + ('tbs_certificate', TbsCertificate), + ('signature_algorithm', SignedDigestAlgorithm), + ('signature_value', OctetBitString), + ] + + _processed_extensions = False + _critical_extensions = None + _subject_directory_attributes_value = None + _key_identifier_value = None + _key_usage_value = None + _subject_alt_name_value = None + _issuer_alt_name_value = None + _basic_constraints_value = None + _name_constraints_value = None + _crl_distribution_points_value = None + _certificate_policies_value = None + _policy_mappings_value = None + _authority_key_identifier_value = None + _policy_constraints_value = None + _freshest_crl_value = None + _inhibit_any_policy_value = None + _extended_key_usage_value = None + _authority_information_access_value = None + _subject_information_access_value = None + _private_key_usage_period_value = None + _tls_feature_value = None + _ocsp_no_check_value = None + _issuer_serial = None + _authority_issuer_serial = False + _crl_distribution_points = None + _delta_crl_distribution_points = None + _valid_domains = None + _valid_ips = None + _self_issued = None + _self_signed = None + _sha1 = None + _sha256 = None + + def _set_extensions(self): + """ + Sets common named extensions to private attributes and creates a list + of critical extensions + """ + + self._critical_extensions = set() + + for extension in self['tbs_certificate']['extensions']: + name = extension['extn_id'].native + attribute_name = '_%s_value' % name + if hasattr(self, attribute_name): + setattr(self, attribute_name, extension['extn_value'].parsed) + if extension['critical'].native: + self._critical_extensions.add(name) + + self._processed_extensions = True + + @property + def critical_extensions(self): + """ + Returns a set of the names (or OID if not a known extension) of the + extensions marked as critical + + :return: + A set of unicode strings + """ + + if not self._processed_extensions: + self._set_extensions() + return self._critical_extensions + + @property + def private_key_usage_period_value(self): + """ + This extension is used to constrain the period over which the subject + private key may be used + + :return: + None or a PrivateKeyUsagePeriod object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._private_key_usage_period_value + + @property + def subject_directory_attributes_value(self): + """ + This extension is used to contain additional identification attributes + about the subject. + + :return: + None or a SubjectDirectoryAttributes object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._subject_directory_attributes_value + + @property + def key_identifier_value(self): + """ + This extension is used to help in creating certificate validation paths. + It contains an identifier that should generally, but is not guaranteed + to, be unique. + + :return: + None or an OctetString object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._key_identifier_value + + @property + def key_usage_value(self): + """ + This extension is used to define the purpose of the public key + contained within the certificate. + + :return: + None or a KeyUsage + """ + + if not self._processed_extensions: + self._set_extensions() + return self._key_usage_value + + @property + def subject_alt_name_value(self): + """ + This extension allows for additional names to be associate with the + subject of the certificate. While it may contain a whole host of + possible names, it is usually used to allow certificates to be used + with multiple different domain names. + + :return: + None or a GeneralNames object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._subject_alt_name_value + + @property + def issuer_alt_name_value(self): + """ + This extension allows associating one or more alternative names with + the issuer of the certificate. + + :return: + None or an x509.GeneralNames object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._issuer_alt_name_value + + @property + def basic_constraints_value(self): + """ + This extension is used to determine if the subject of the certificate + is a CA, and if so, what the maximum number of intermediate CA certs + after this are, before an end-entity certificate is found. + + :return: + None or a BasicConstraints object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._basic_constraints_value + + @property + def name_constraints_value(self): + """ + This extension is used in CA certificates, and is used to limit the + possible names of certificates issued. + + :return: + None or a NameConstraints object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._name_constraints_value + + @property + def crl_distribution_points_value(self): + """ + This extension is used to help in locating the CRL for this certificate. + + :return: + None or a CRLDistributionPoints object + extension + """ + + if not self._processed_extensions: + self._set_extensions() + return self._crl_distribution_points_value + + @property + def certificate_policies_value(self): + """ + This extension defines policies in CA certificates under which + certificates may be issued. In end-entity certificates, the inclusion + of a policy indicates the issuance of the certificate follows the + policy. + + :return: + None or a CertificatePolicies object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._certificate_policies_value + + @property + def policy_mappings_value(self): + """ + This extension allows mapping policy OIDs to other OIDs. This is used + to allow different policies to be treated as equivalent in the process + of validation. + + :return: + None or a PolicyMappings object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._policy_mappings_value + + @property + def authority_key_identifier_value(self): + """ + This extension helps in identifying the public key with which to + validate the authenticity of the certificate. + + :return: + None or an AuthorityKeyIdentifier object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._authority_key_identifier_value + + @property + def policy_constraints_value(self): + """ + This extension is used to control if policy mapping is allowed and + when policies are required. + + :return: + None or a PolicyConstraints object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._policy_constraints_value + + @property + def freshest_crl_value(self): + """ + This extension is used to help locate any available delta CRLs + + :return: + None or an CRLDistributionPoints object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._freshest_crl_value + + @property + def inhibit_any_policy_value(self): + """ + This extension is used to prevent mapping of the any policy to + specific requirements + + :return: + None or a Integer object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._inhibit_any_policy_value + + @property + def extended_key_usage_value(self): + """ + This extension is used to define additional purposes for the public key + beyond what is contained in the basic constraints. + + :return: + None or an ExtKeyUsageSyntax object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._extended_key_usage_value + + @property + def authority_information_access_value(self): + """ + This extension is used to locate the CA certificate used to sign this + certificate, or the OCSP responder for this certificate. + + :return: + None or an AuthorityInfoAccessSyntax object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._authority_information_access_value + + @property + def subject_information_access_value(self): + """ + This extension is used to access information about the subject of this + certificate. + + :return: + None or a SubjectInfoAccessSyntax object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._subject_information_access_value + + @property + def tls_feature_value(self): + """ + This extension is used to list the TLS features a server must respond + with if a client initiates a request supporting them. + + :return: + None or a Features object + """ + + if not self._processed_extensions: + self._set_extensions() + return self._tls_feature_value + + @property + def ocsp_no_check_value(self): + """ + This extension is used on certificates of OCSP responders, indicating + that revocation information for the certificate should never need to + be verified, thus preventing possible loops in path validation. + + :return: + None or a Null object (if present) + """ + + if not self._processed_extensions: + self._set_extensions() + return self._ocsp_no_check_value + + @property + def signature(self): + """ + :return: + A byte string of the signature + """ + + return self['signature_value'].native + + @property + def signature_algo(self): + """ + :return: + A unicode string of "rsassa_pkcs1v15", "rsassa_pss", "dsa", "ecdsa" + """ + + return self['signature_algorithm'].signature_algo + + @property + def hash_algo(self): + """ + :return: + A unicode string of "md2", "md5", "sha1", "sha224", "sha256", + "sha384", "sha512", "sha512_224", "sha512_256" + """ + + return self['signature_algorithm'].hash_algo + + @property + def public_key(self): + """ + :return: + The PublicKeyInfo object for this certificate + """ + + return self['tbs_certificate']['subject_public_key_info'] + + @property + def subject(self): + """ + :return: + The Name object for the subject of this certificate + """ + + return self['tbs_certificate']['subject'] + + @property + def issuer(self): + """ + :return: + The Name object for the issuer of this certificate + """ + + return self['tbs_certificate']['issuer'] + + @property + def serial_number(self): + """ + :return: + An integer of the certificate's serial number + """ + + return self['tbs_certificate']['serial_number'].native + + @property + def key_identifier(self): + """ + :return: + None or a byte string of the certificate's key identifier from the + key identifier extension + """ + + if not self.key_identifier_value: + return None + + return self.key_identifier_value.native + + @property + def issuer_serial(self): + """ + :return: + A byte string of the SHA-256 hash of the issuer concatenated with + the ascii character ":", concatenated with the serial number as + an ascii string + """ + + if self._issuer_serial is None: + self._issuer_serial = self.issuer.sha256 + b':' + str_cls(self.serial_number).encode('ascii') + return self._issuer_serial + + @property + def not_valid_after(self): + """ + :return: + A datetime of latest time when the certificate is still valid + """ + return self['tbs_certificate']['validity']['not_after'].native + + @property + def not_valid_before(self): + """ + :return: + A datetime of the earliest time when the certificate is valid + """ + return self['tbs_certificate']['validity']['not_before'].native + + @property + def authority_key_identifier(self): + """ + :return: + None or a byte string of the key_identifier from the authority key + identifier extension + """ + + if not self.authority_key_identifier_value: + return None + + return self.authority_key_identifier_value['key_identifier'].native + + @property + def authority_issuer_serial(self): + """ + :return: + None or a byte string of the SHA-256 hash of the isser from the + authority key identifier extension concatenated with the ascii + character ":", concatenated with the serial number from the + authority key identifier extension as an ascii string + """ + + if self._authority_issuer_serial is False: + akiv = self.authority_key_identifier_value + if akiv and akiv['authority_cert_issuer'].native: + issuer = self.authority_key_identifier_value['authority_cert_issuer'][0].chosen + # We untag the element since it is tagged via being a choice from GeneralName + issuer = issuer.untag() + authority_serial = self.authority_key_identifier_value['authority_cert_serial_number'].native + self._authority_issuer_serial = issuer.sha256 + b':' + str_cls(authority_serial).encode('ascii') + else: + self._authority_issuer_serial = None + return self._authority_issuer_serial + + @property + def crl_distribution_points(self): + """ + Returns complete CRL URLs - does not include delta CRLs + + :return: + A list of zero or more DistributionPoint objects + """ + + if self._crl_distribution_points is None: + self._crl_distribution_points = self._get_http_crl_distribution_points(self.crl_distribution_points_value) + return self._crl_distribution_points + + @property + def delta_crl_distribution_points(self): + """ + Returns delta CRL URLs - does not include complete CRLs + + :return: + A list of zero or more DistributionPoint objects + """ + + if self._delta_crl_distribution_points is None: + self._delta_crl_distribution_points = self._get_http_crl_distribution_points(self.freshest_crl_value) + return self._delta_crl_distribution_points + + def _get_http_crl_distribution_points(self, crl_distribution_points): + """ + Fetches the DistributionPoint object for non-relative, HTTP CRLs + referenced by the certificate + + :param crl_distribution_points: + A CRLDistributionPoints object to grab the DistributionPoints from + + :return: + A list of zero or more DistributionPoint objects + """ + + output = [] + + if crl_distribution_points is None: + return [] + + for distribution_point in crl_distribution_points: + distribution_point_name = distribution_point['distribution_point'] + if distribution_point_name is VOID: + continue + # RFC 5280 indicates conforming CA should not use the relative form + if distribution_point_name.name == 'name_relative_to_crl_issuer': + continue + # This library is currently only concerned with HTTP-based CRLs + for general_name in distribution_point_name.chosen: + if general_name.name == 'uniform_resource_identifier': + output.append(distribution_point) + + return output + + @property + def ocsp_urls(self): + """ + :return: + A list of zero or more unicode strings of the OCSP URLs for this + cert + """ + + if not self.authority_information_access_value: + return [] + + output = [] + for entry in self.authority_information_access_value: + if entry['access_method'].native == 'ocsp': + location = entry['access_location'] + if location.name != 'uniform_resource_identifier': + continue + url = location.native + if url.lower().startswith(('http://', 'https://', 'ldap://', 'ldaps://')): + output.append(url) + return output + + @property + def valid_domains(self): + """ + :return: + A list of unicode strings of valid domain names for the certificate. + Wildcard certificates will have a domain in the form: *.example.com + """ + + if self._valid_domains is None: + self._valid_domains = [] + + # For the subject alt name extension, we can look at the name of + # the choice selected since it distinguishes between domain names, + # email addresses, IPs, etc + if self.subject_alt_name_value: + for general_name in self.subject_alt_name_value: + if general_name.name == 'dns_name' and general_name.native not in self._valid_domains: + self._valid_domains.append(general_name.native) + + # If there was no subject alt name extension, and the common name + # in the subject looks like a domain, that is considered the valid + # list. This is done because according to + # https://tools.ietf.org/html/rfc6125#section-6.4.4, the common + # name should not be used if the subject alt name is present. + else: + pattern = re.compile('^(\\*\\.)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$') + for rdn in self.subject.chosen: + for name_type_value in rdn: + if name_type_value['type'].native == 'common_name': + value = name_type_value['value'].native + if pattern.match(value): + self._valid_domains.append(value) + + return self._valid_domains + + @property + def valid_ips(self): + """ + :return: + A list of unicode strings of valid IP addresses for the certificate + """ + + if self._valid_ips is None: + self._valid_ips = [] + + if self.subject_alt_name_value: + for general_name in self.subject_alt_name_value: + if general_name.name == 'ip_address': + self._valid_ips.append(general_name.native) + + return self._valid_ips + + @property + def ca(self): + """ + :return; + A boolean - if the certificate is marked as a CA + """ + + return self.basic_constraints_value and self.basic_constraints_value['ca'].native + + @property + def max_path_length(self): + """ + :return; + None or an integer of the maximum path length + """ + + if not self.ca: + return None + return self.basic_constraints_value['path_len_constraint'].native + + @property + def self_issued(self): + """ + :return: + A boolean - if the certificate is self-issued, as defined by RFC + 5280 + """ + + if self._self_issued is None: + self._self_issued = self.subject == self.issuer + return self._self_issued + + @property + def self_signed(self): + """ + :return: + A unicode string of "no" or "maybe". The "maybe" result will + be returned if the certificate issuer and subject are the same. + If a key identifier and authority key identifier are present, + they will need to match otherwise "no" will be returned. + + To verify is a certificate is truly self-signed, the signature + will need to be verified. See the certvalidator package for + one possible solution. + """ + + if self._self_signed is None: + self._self_signed = 'no' + if self.self_issued: + if self.key_identifier: + if not self.authority_key_identifier: + self._self_signed = 'maybe' + elif self.authority_key_identifier == self.key_identifier: + self._self_signed = 'maybe' + else: + self._self_signed = 'maybe' + return self._self_signed + + @property + def sha1(self): + """ + :return: + The SHA-1 hash of the DER-encoded bytes of this complete certificate + """ + + if self._sha1 is None: + self._sha1 = hashlib.sha1(self.dump()).digest() + return self._sha1 + + @property + def sha1_fingerprint(self): + """ + :return: + A unicode string of the SHA-1 hash, formatted using hex encoding + with a space between each pair of characters, all uppercase + """ + + return ' '.join('%02X' % c for c in bytes_to_list(self.sha1)) + + @property + def sha256(self): + """ + :return: + The SHA-256 hash of the DER-encoded bytes of this complete + certificate + """ + + if self._sha256 is None: + self._sha256 = hashlib.sha256(self.dump()).digest() + return self._sha256 + + @property + def sha256_fingerprint(self): + """ + :return: + A unicode string of the SHA-256 hash, formatted using hex encoding + with a space between each pair of characters, all uppercase + """ + + return ' '.join('%02X' % c for c in bytes_to_list(self.sha256)) + + def is_valid_domain_ip(self, domain_ip): + """ + Check if a domain name or IP address is valid according to the + certificate + + :param domain_ip: + A unicode string of a domain name or IP address + + :return: + A boolean - if the domain or IP is valid for the certificate + """ + + if not isinstance(domain_ip, str_cls): + raise TypeError(unwrap( + ''' + domain_ip must be a unicode string, not %s + ''', + type_name(domain_ip) + )) + + encoded_domain_ip = domain_ip.encode('idna').decode('ascii').lower() + + is_ipv6 = encoded_domain_ip.find(':') != -1 + is_ipv4 = not is_ipv6 and re.match('^\\d+\\.\\d+\\.\\d+\\.\\d+$', encoded_domain_ip) + is_domain = not is_ipv6 and not is_ipv4 + + # Handle domain name checks + if is_domain: + if not self.valid_domains: + return False + + domain_labels = encoded_domain_ip.split('.') + + for valid_domain in self.valid_domains: + encoded_valid_domain = valid_domain.encode('idna').decode('ascii').lower() + valid_domain_labels = encoded_valid_domain.split('.') + + # The domain must be equal in label length to match + if len(valid_domain_labels) != len(domain_labels): + continue + + if valid_domain_labels == domain_labels: + return True + + is_wildcard = self._is_wildcard_domain(encoded_valid_domain) + if is_wildcard and self._is_wildcard_match(domain_labels, valid_domain_labels): + return True + + return False + + # Handle IP address checks + if not self.valid_ips: + return False + + family = socket.AF_INET if is_ipv4 else socket.AF_INET6 + normalized_ip = inet_pton(family, encoded_domain_ip) + + for valid_ip in self.valid_ips: + valid_family = socket.AF_INET if valid_ip.find('.') != -1 else socket.AF_INET6 + normalized_valid_ip = inet_pton(valid_family, valid_ip) + + if normalized_valid_ip == normalized_ip: + return True + + return False + + def _is_wildcard_domain(self, domain): + """ + Checks if a domain is a valid wildcard according to + https://tools.ietf.org/html/rfc6125#section-6.4.3 + + :param domain: + A unicode string of the domain name, where any U-labels from an IDN + have been converted to A-labels + + :return: + A boolean - if the domain is a valid wildcard domain + """ + + # The * character must be present for a wildcard match, and if there is + # most than one, it is an invalid wildcard specification + if domain.count('*') != 1: + return False + + labels = domain.lower().split('.') + + if not labels: + return False + + # Wildcards may only appear in the left-most label + if labels[0].find('*') == -1: + return False + + # Wildcards may not be embedded in an A-label from an IDN + if labels[0][0:4] == 'xn--': + return False + + return True + + def _is_wildcard_match(self, domain_labels, valid_domain_labels): + """ + Determines if the labels in a domain are a match for labels from a + wildcard valid domain name + + :param domain_labels: + A list of unicode strings, with A-label form for IDNs, of the labels + in the domain name to check + + :param valid_domain_labels: + A list of unicode strings, with A-label form for IDNs, of the labels + in a wildcard domain pattern + + :return: + A boolean - if the domain matches the valid domain + """ + + first_domain_label = domain_labels[0] + other_domain_labels = domain_labels[1:] + + wildcard_label = valid_domain_labels[0] + other_valid_domain_labels = valid_domain_labels[1:] + + # The wildcard is only allowed in the first label, so if + # The subsequent labels are not equal, there is no match + if other_domain_labels != other_valid_domain_labels: + return False + + if wildcard_label == '*': + return True + + wildcard_regex = re.compile('^' + wildcard_label.replace('*', '.*') + '$') + if wildcard_regex.match(first_domain_label): + return True + + return False + + +# The structures are taken from the OpenSSL source file x_x509a.c, and specify +# extra information that is added to X.509 certificates to store trust +# information about the certificate. + +class KeyPurposeIdentifiers(SequenceOf): + _child_spec = KeyPurposeId + + +class SequenceOfAlgorithmIdentifiers(SequenceOf): + _child_spec = AlgorithmIdentifier + + +class CertificateAux(Sequence): + _fields = [ + ('trust', KeyPurposeIdentifiers, {'optional': True}), + ('reject', KeyPurposeIdentifiers, {'implicit': 0, 'optional': True}), + ('alias', UTF8String, {'optional': True}), + ('keyid', OctetString, {'optional': True}), + ('other', SequenceOfAlgorithmIdentifiers, {'implicit': 1, 'optional': True}), + ] + + +class TrustedCertificate(Concat): + _child_specs = [Certificate, CertificateAux] diff --git a/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/INSTALLER b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/METADATA b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/METADATA new file mode 100644 index 00000000..f1d72046 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/METADATA @@ -0,0 +1,116 @@ +Metadata-Version: 2.1 +Name: beautifulsoup4 +Version: 4.12.2 +Summary: Screen-scraping library +Project-URL: Download, https://www.crummy.com/software/BeautifulSoup/bs4/download/ +Project-URL: Homepage, https://www.crummy.com/software/BeautifulSoup/bs4/ +Author-email: Leonard Richardson +License-Expression: MIT +License-File: AUTHORS +License-File: LICENSE +Keywords: HTML,XML,parse,soup +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup :: HTML +Classifier: Topic :: Text Processing :: Markup :: SGML +Classifier: Topic :: Text Processing :: Markup :: XML +Requires-Python: >=3.6.0 +Requires-Dist: soupsieve>1.2 +Provides-Extra: html5lib +Requires-Dist: html5lib; extra == 'html5lib' +Provides-Extra: lxml +Requires-Dist: lxml; extra == 'lxml' +Description-Content-Type: text/markdown + +Beautiful Soup is a library that makes it easy to scrape information +from web pages. It sits atop an HTML or XML parser, providing Pythonic +idioms for iterating, searching, and modifying the parse tree. + +# Quick start + +``` +>>> from bs4 import BeautifulSoup +>>> soup = BeautifulSoup("

SomebadHTML") +>>> print(soup.prettify()) + + +

+ Some + + bad + + HTML + + +

+ + +>>> soup.find(text="bad") +'bad' +>>> soup.i +HTML +# +>>> soup = BeautifulSoup("SomebadXML", "xml") +# +>>> print(soup.prettify()) + + + Some + + bad + + XML + + +``` + +To go beyond the basics, [comprehensive documentation is available](https://www.crummy.com/software/BeautifulSoup/bs4/doc/). + +# Links + +* [Homepage](https://www.crummy.com/software/BeautifulSoup/bs4/) +* [Documentation](https://www.crummy.com/software/BeautifulSoup/bs4/doc/) +* [Discussion group](https://groups.google.com/group/beautifulsoup/) +* [Development](https://code.launchpad.net/beautifulsoup/) +* [Bug tracker](https://bugs.launchpad.net/beautifulsoup/) +* [Complete changelog](https://bazaar.launchpad.net/~leonardr/beautifulsoup/bs4/view/head:/CHANGELOG) + +# Note on Python 2 sunsetting + +Beautiful Soup's support for Python 2 was discontinued on December 31, +2020: one year after the sunset date for Python 2 itself. From this +point onward, new Beautiful Soup development will exclusively target +Python 3. The final release of Beautiful Soup 4 to support Python 2 +was 4.9.3. + +# Supporting the project + +If you use Beautiful Soup as part of your professional work, please consider a +[Tidelift subscription](https://tidelift.com/subscription/pkg/pypi-beautifulsoup4?utm_source=pypi-beautifulsoup4&utm_medium=referral&utm_campaign=readme). +This will support many of the free software projects your organization +depends on, not just Beautiful Soup. + +If you use Beautiful Soup for personal projects, the best way to say +thank you is to read +[Tool Safety](https://www.crummy.com/software/BeautifulSoup/zine/), a zine I +wrote about what Beautiful Soup has taught me about software +development. + +# Building the documentation + +The bs4/doc/ directory contains full documentation in Sphinx +format. Run `make html` in that directory to create HTML +documentation. + +# Running the unit tests + +Beautiful Soup supports unit test discovery using Pytest: + +``` +$ pytest +``` + diff --git a/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/RECORD b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/RECORD new file mode 100644 index 00000000..b683ed53 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/RECORD @@ -0,0 +1,71 @@ +beautifulsoup4-4.12.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +beautifulsoup4-4.12.2.dist-info/METADATA,sha256=M6TF9wpbgywQQvtehBohLTEr2f8e7cw909PZ3Xsk3N4,3556 +beautifulsoup4-4.12.2.dist-info/RECORD,, +beautifulsoup4-4.12.2.dist-info/WHEEL,sha256=Fd6mP6ydyRguakwUJ05oBE7fh2IPxgtDN9IwHJ9OqJQ,87 +beautifulsoup4-4.12.2.dist-info/licenses/AUTHORS,sha256=uSIdbrBb1sobdXl7VrlUvuvim2dN9kF3MH4Edn0WKGE,2176 +beautifulsoup4-4.12.2.dist-info/licenses/LICENSE,sha256=VbTY1LHlvIbRDvrJG3TIe8t3UmsPW57a-LnNKtxzl7I,1441 +bs4/__init__.py,sha256=4QO9qbbubMeEQw46YDLWEYS1yAebwKYR5l_Se9E_Gxo,33822 +bs4/__pycache__/__init__.cpython-38.pyc,, +bs4/__pycache__/css.cpython-38.pyc,, +bs4/__pycache__/dammit.cpython-38.pyc,, +bs4/__pycache__/diagnose.cpython-38.pyc,, +bs4/__pycache__/element.cpython-38.pyc,, +bs4/__pycache__/formatter.cpython-38.pyc,, +bs4/builder/__init__.py,sha256=KGBl_FgX1KV1wBIshW4EXlWjP3KLcRiF2opZ-zVcyAc,24393 +bs4/builder/__pycache__/__init__.cpython-38.pyc,, +bs4/builder/__pycache__/_html5lib.cpython-38.pyc,, +bs4/builder/__pycache__/_htmlparser.cpython-38.pyc,, +bs4/builder/__pycache__/_lxml.cpython-38.pyc,, +bs4/builder/_html5lib.py,sha256=LnhimXrUdKujKoHHbmzwNk8OBb11YfTRFXUwhZjwqow,19078 +bs4/builder/_htmlparser.py,sha256=2j4Kj0dFi86vD-OblQRaFFCsRXuWb1VdBGJVPxKKEUc,14919 +bs4/builder/_lxml.py,sha256=ik6BFGnxAzV2-21S_Wc-7ZeA174muSA_ZhmpnAe3g0E,14904 +bs4/css.py,sha256=gqGaHRrKeCRF3gDqxzeU0uclOCeSsTpuW9gUaSnJeWc,10077 +bs4/dammit.py,sha256=G0cQfsEqfwJ-FIQMkXgCJwSHMn7t9vPepCrud6fZEKk,41158 +bs4/diagnose.py,sha256=uAwdDugL_67tB-BIwDIFLFbiuzGxP2wQzJJ4_bGYUrA,7195 +bs4/element.py,sha256=R-HP8gtZPFJ71Rl4ieIBct1I9VTErTAD9FW64Jtg6Sc,92716 +bs4/formatter.py,sha256=fE8Xf9SrHvTZcv_zDpgtOGWk3OIWENPoeKcwhuMJnDs,7184 +bs4/tests/__init__.py,sha256=usdUEP_PwnDfhCdx9rQw9HLWRyc4k9goB6ErZT9aAc0,48391 +bs4/tests/__pycache__/__init__.cpython-38.pyc,, +bs4/tests/__pycache__/test_builder.cpython-38.pyc,, +bs4/tests/__pycache__/test_builder_registry.cpython-38.pyc,, +bs4/tests/__pycache__/test_css.cpython-38.pyc,, +bs4/tests/__pycache__/test_dammit.cpython-38.pyc,, +bs4/tests/__pycache__/test_docs.cpython-38.pyc,, +bs4/tests/__pycache__/test_element.cpython-38.pyc,, +bs4/tests/__pycache__/test_formatter.cpython-38.pyc,, +bs4/tests/__pycache__/test_fuzz.cpython-38.pyc,, +bs4/tests/__pycache__/test_html5lib.cpython-38.pyc,, +bs4/tests/__pycache__/test_htmlparser.cpython-38.pyc,, +bs4/tests/__pycache__/test_lxml.cpython-38.pyc,, +bs4/tests/__pycache__/test_navigablestring.cpython-38.pyc,, +bs4/tests/__pycache__/test_pageelement.cpython-38.pyc,, +bs4/tests/__pycache__/test_soup.cpython-38.pyc,, +bs4/tests/__pycache__/test_tag.cpython-38.pyc,, +bs4/tests/__pycache__/test_tree.cpython-38.pyc,, +bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase,sha256=Uv_dx4a43TSfoNkjU-jHW2nSXkqHFg4XdAw7SWVObUk,23 +bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase,sha256=OEyVA0Ej4FxswOElrUNt0In4s4YhrmtaxE_NHGZvGtg,30 +bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase,sha256=3d8z65o4p7Rur-RmCHoOjzqaYQ8EAtjmiBYTHNyAdl4,19469 +bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase,sha256=2bq3S8KxZgk8EajLReHD8m4_0Lj_nrkyJAxB_z_U0D0,5 +bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase,sha256=MZDu31LPLfgu6jP9IZkrlwNes3f_sL8WFP5BChkUKdY,35 +bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase,sha256=w58r-s6besG5JwPXpnz37W2YTj9-_qxFbk6hiEnKeIQ,51495 +bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase,sha256=q8rkdMECEXKcqVhOf5zWHkSBTQeOPt0JiLg2TZiPCuk,10380 +bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase,sha256=QfzoOxKwNuqG-4xIrea6MOQLXhfAAOQJ0r9u-J6kSNs,19 +bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase,sha256=EItOpSdeD4ewK-qgJ9vtxennwn_huguzXgctrUT7fqE,3546 +bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase,sha256=a2aJTG4FceGSJXsjtxoS8S4jk_8rZsS3aznLkeO2_dY,124 +bs4/tests/fuzz/crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase,sha256=jRFRtCKlP3-3EDLc_iVRTcE6JNymv0rYcVM6qRaPrxI,2607 +bs4/tests/test_builder.py,sha256=nc2JE5EMrEf-p24qhf2R8qAV5PpFiOuNpYCmtmCjlTI,1115 +bs4/tests/test_builder_registry.py,sha256=7WLj2prjSHGphebnrjQuI6JYr03Uy_c9_CkaFSQ9HRo,5114 +bs4/tests/test_css.py,sha256=jCcgIWem3lyPa5AjhAk9S6fWI07hk1rg0v8coD7bEtI,17279 +bs4/tests/test_dammit.py,sha256=MbSmRN6VEP0Rm56-w6Ja0TW8eC-8ZxOJ-wXWVf_hRi8,15451 +bs4/tests/test_docs.py,sha256=xoAxnUfoQ7aRqGImwW_9BJDU8WNMZHIuvWqVepvWXt8,1127 +bs4/tests/test_element.py,sha256=92oRSRoGk8gIXAbAGHErKzocx2MK32TqcQdUJ-dGQMo,2377 +bs4/tests/test_formatter.py,sha256=eTzj91Lmhv90z-WiHjK3sBJZm0hRk0crFY1TZaXstCY,4148 +bs4/tests/test_fuzz.py,sha256=wXfic-J9-sv4C3upnTeZju_PIa9NxktOD_zw3Ek0u9w,3637 +bs4/tests/test_html5lib.py,sha256=2-ipm-_MaPt37WTxEd5DodUTNhS4EbLFKPRaO6XSCW4,8322 +bs4/tests/test_htmlparser.py,sha256=wnngcIlzjEwH21JFfu_mgt6JdpLt0ncJfLcGT7HeGw0,6256 +bs4/tests/test_lxml.py,sha256=nQCmLt7bWk0id7xMumZw--PzEe1xF9PTQn3lvHyNC6I,7635 +bs4/tests/test_navigablestring.py,sha256=RGSgziNf7cZnYdEPsoqL1B2I68TUJp1JmEQVxbh_ryA,5081 +bs4/tests/test_pageelement.py,sha256=VdGjUxx3RhjqmNsJ92ao6VZC_YD7T8mdLkDZjosOYeE,14274 +bs4/tests/test_soup.py,sha256=JmnAPLE1_GXm0wmwEUN7icdvBz9HDch-qoU2mT_TDrs,19877 +bs4/tests/test_tag.py,sha256=f19uie7QehvgvhIqNWfjDRR4TKa-ftm_RRoo6LXZyqk,9016 +bs4/tests/test_tree.py,sha256=n9nTQOzJb3-ZnZ6AkmMdZQ5TYcTUPnqHoVgal0mYXfg,48129 diff --git a/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/WHEEL b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/WHEEL new file mode 100644 index 00000000..9d727675 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: hatchling 1.13.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/licenses/AUTHORS b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/licenses/AUTHORS new file mode 100644 index 00000000..1f14fe07 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/licenses/AUTHORS @@ -0,0 +1,49 @@ +Behold, mortal, the origins of Beautiful Soup... +================================================ + +Leonard Richardson is the primary maintainer. + +Aaron DeVore and Isaac Muse have made significant contributions to the +code base. + +Mark Pilgrim provided the encoding detection code that forms the base +of UnicodeDammit. + +Thomas Kluyver and Ezio Melotti finished the work of getting Beautiful +Soup 4 working under Python 3. + +Simon Willison wrote soupselect, which was used to make Beautiful Soup +support CSS selectors. Isaac Muse wrote SoupSieve, which made it +possible to _remove_ the CSS selector code from Beautiful Soup. + +Sam Ruby helped with a lot of edge cases. + +Jonathan Ellis was awarded the prestigious Beau Potage D'Or for his +work in solving the nestable tags conundrum. + +An incomplete list of people have contributed patches to Beautiful +Soup: + + Istvan Albert, Andrew Lin, Anthony Baxter, Oliver Beattie, Andrew +Boyko, Tony Chang, Francisco Canas, "Delong", Zephyr Fang, Fuzzy, +Roman Gaufman, Yoni Gilad, Richie Hindle, Toshihiro Kamiya, Peteris +Krumins, Kent Johnson, Marek Kapolka, Andreas Kostyrka, Roel Kramer, +Ben Last, Robert Leftwich, Stefaan Lippens, "liquider", Staffan +Malmgren, Ksenia Marasanova, JP Moins, Adam Monsen, John Nagle, "Jon", +Ed Oskiewicz, Martijn Peters, Greg Phillips, Giles Radford, Stefano +Revera, Arthur Rudolph, Marko Samastur, James Salter, Jouni Seppnen, +Alexander Schmolck, Tim Shirley, Geoffrey Sneddon, Ville Skytt, +"Vikas", Jens Svalgaard, Andy Theyers, Eric Weiser, Glyn Webster, John +Wiseman, Paul Wright, Danny Yoo + +An incomplete list of people who made suggestions or found bugs or +found ways to break Beautiful Soup: + + Hanno Bck, Matteo Bertini, Chris Curvey, Simon Cusack, Bruce Eckel, + Matt Ernst, Michael Foord, Tom Harris, Bill de hOra, Donald Howes, + Matt Patterson, Scott Roberts, Steve Strassmann, Mike Williams, + warchild at redho dot com, Sami Kuisma, Carlos Rocha, Bob Hutchison, + Joren Mc, Michal Migurski, John Kleven, Tim Heaney, Tripp Lilley, Ed + Summers, Dennis Sutch, Chris Smith, Aaron Swartz, Stuart + Turner, Greg Edwards, Kevin J Kalupson, Nikos Kouremenos, Artur de + Sousa Rocha, Yichun Wei, Per Vognsen diff --git a/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/licenses/LICENSE b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/licenses/LICENSE new file mode 100644 index 00000000..08e3a9cf --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/beautifulsoup4-4.12.2.dist-info/licenses/LICENSE @@ -0,0 +1,31 @@ +Beautiful Soup is made available under the MIT license: + + Copyright (c) Leonard Richardson + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +Beautiful Soup incorporates code from the html5lib library, which is +also made available under the MIT license. Copyright (c) James Graham +and other contributors + +Beautiful Soup has an optional dependency on the soupsieve library, +which is also made available under the MIT license. Copyright (c) +Isaac Muse diff --git a/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/INSTALLER b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/LICENSE b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/LICENSE new file mode 100644 index 00000000..f433b1a5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/METADATA b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/METADATA new file mode 100644 index 00000000..799e5013 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/METADATA @@ -0,0 +1,183 @@ +Metadata-Version: 2.1 +Name: boto3 +Version: 1.34.19 +Summary: The AWS SDK for Python +Home-page: https://github.com/boto/boto3 +Author: Amazon Web Services +License: Apache License 2.0 +Project-URL: Documentation, https://boto3.amazonaws.com/v1/documentation/api/latest/index.html +Project-URL: Source, https://github.com/boto/boto3 +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Natural Language :: English +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Requires-Python: >= 3.8 +License-File: LICENSE +License-File: NOTICE +Requires-Dist: botocore (<1.35.0,>=1.34.19) +Requires-Dist: jmespath (<2.0.0,>=0.7.1) +Requires-Dist: s3transfer (<0.11.0,>=0.10.0) +Provides-Extra: crt +Requires-Dist: botocore[crt] (<2.0a0,>=1.21.0) ; extra == 'crt' + +=============================== +Boto3 - The AWS SDK for Python +=============================== + +|Version| |Python| |License| + +Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for +Python, which allows Python developers to write software that makes use +of services like Amazon S3 and Amazon EC2. You can find the latest, most +up to date, documentation at our `doc site`_, including a list of +services that are supported. + +Boto3 is maintained and published by `Amazon Web Services`_. + +Boto (pronounced boh-toh) was named after the fresh water dolphin native to the Amazon river. The name was chosen by the author of the original Boto library, Mitch Garnaat, as a reference to the company. + +Notices +------- + +On 2023-12-13, support for Python 3.7 ended for Boto3. This follows the +Python Software Foundation `end of support `__ +for the runtime which occurred on 2023-06-27. +For more information, see this `blog post `__. + +.. _boto: https://docs.pythonboto.org/ +.. _`doc site`: https://boto3.amazonaws.com/v1/documentation/api/latest/index.html +.. _`Amazon Web Services`: https://aws.amazon.com/what-is-aws/ +.. |Python| image:: https://img.shields.io/pypi/pyversions/boto3.svg?style=flat + :target: https://pypi.python.org/pypi/boto3/ + :alt: Python Versions +.. |Version| image:: http://img.shields.io/pypi/v/boto3.svg?style=flat + :target: https://pypi.python.org/pypi/boto3/ + :alt: Package Version +.. |License| image:: http://img.shields.io/pypi/l/boto3.svg?style=flat + :target: https://github.com/boto/boto3/blob/develop/LICENSE + :alt: License + +Getting Started +--------------- +Assuming that you have a supported version of Python installed, you can first +set up your environment with: + +.. code-block:: sh + + $ python -m venv .venv + ... + $ . .venv/bin/activate + +Then, you can install boto3 from PyPI with: + +.. code-block:: sh + + $ python -m pip install boto3 + +or install from source with: + +.. code-block:: sh + + $ git clone https://github.com/boto/boto3.git + $ cd boto3 + $ python -m pip install -r requirements.txt + $ python -m pip install -e . + + +Using Boto3 +~~~~~~~~~~~~~~ +After installing boto3 + +Next, set up credentials (in e.g. ``~/.aws/credentials``): + +.. code-block:: ini + + [default] + aws_access_key_id = YOUR_KEY + aws_secret_access_key = YOUR_SECRET + +Then, set up a default region (in e.g. ``~/.aws/config``): + +.. code-block:: ini + + [default] + region=us-east-1 + +Other credential configuration methods can be found `here `__ + +Then, from a Python interpreter: + +.. code-block:: python + + >>> import boto3 + >>> s3 = boto3.resource('s3') + >>> for bucket in s3.buckets.all(): + print(bucket.name) + +Running Tests +~~~~~~~~~~~~~ +You can run tests in all supported Python versions using ``tox``. By default, +it will run all of the unit and functional tests, but you can also specify your own +``pytest`` options. Note that this requires that you have all supported +versions of Python installed, otherwise you must pass ``-e`` or run the +``pytest`` command directly: + +.. code-block:: sh + + $ tox + $ tox -- unit/test_session.py + $ tox -e py26,py33 -- integration/ + +You can also run individual tests with your default Python version: + +.. code-block:: sh + + $ pytest tests/unit + + +Getting Help +------------ + +We use GitHub issues for tracking bugs and feature requests and have limited +bandwidth to address them. Please use these community resources for getting +help: + +* Ask a question on `Stack Overflow `__ and tag it with `boto3 `__ +* Open a support ticket with `AWS Support `__ +* If it turns out that you may have found a bug, please `open an issue `__ + + +Contributing +------------ + +We value feedback and contributions from our community. Whether it's a bug report, new feature, correction, or additional documentation, we welcome your issues and pull requests. Please read through this `CONTRIBUTING `__ document before submitting any issues or pull requests to ensure we have all the necessary information to effectively respond to your contribution. + + +Maintenance and Support for SDK Major Versions +---------------------------------------------- + +Boto3 was made generally available on 06/22/2015 and is currently in the full support phase of the availability life cycle. + +For information about maintenance and support for SDK major versions and their underlying dependencies, see the following in the AWS SDKs and Tools Shared Configuration and Credentials Reference Guide: + +* `AWS SDKs and Tools Maintenance Policy `__ +* `AWS SDKs and Tools Version Support Matrix `__ + + +More Resources +-------------- + +* `NOTICE `__ +* `Changelog `__ +* `License `__ + + diff --git a/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/NOTICE b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/NOTICE new file mode 100644 index 00000000..eff609f2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/NOTICE @@ -0,0 +1,2 @@ +boto3 +Copyright 2013-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/RECORD b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/RECORD new file mode 100644 index 00000000..ebe41d2d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/RECORD @@ -0,0 +1,103 @@ +boto3-1.34.19.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +boto3-1.34.19.dist-info/LICENSE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174 +boto3-1.34.19.dist-info/METADATA,sha256=cESe9bF1pjz1BOglhlsJs69Kn0wF9jIqCPq4LRrtw1w,6620 +boto3-1.34.19.dist-info/NOTICE,sha256=BPseYUhKeBDxugm7QrwByljJrzOSfXxaIVVuTE0cf6Q,83 +boto3-1.34.19.dist-info/RECORD,, +boto3-1.34.19.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92 +boto3-1.34.19.dist-info/top_level.txt,sha256=MP6_SI1GcPseXodd3Ykt5F_mCBsrUksiziLxjEZKGUU,6 +boto3/__init__.py,sha256=7iD6XfLjpiFovxF645eC4eR7wgMYO5C1dqwUvlORbt0,3420 +boto3/__pycache__/__init__.cpython-38.pyc,, +boto3/__pycache__/compat.cpython-38.pyc,, +boto3/__pycache__/crt.cpython-38.pyc,, +boto3/__pycache__/exceptions.cpython-38.pyc,, +boto3/__pycache__/session.cpython-38.pyc,, +boto3/__pycache__/utils.cpython-38.pyc,, +boto3/compat.py,sha256=1T-LvBYqd0z-L9hI-soU7O7v-678tyWWR2pztF055u0,2887 +boto3/crt.py,sha256=VFstUtHMZrZ6eHJJ-YdXb4vqfIOcHbv1l51fdeY5cS0,5407 +boto3/data/cloudformation/2010-05-15/resources-1.json,sha256=5mFVKJVtbVoHyPdHSyNfZ5mpkgCAws5PhnveSu4qzdI,5110 +boto3/data/cloudwatch/2010-08-01/resources-1.json,sha256=q4AgE8F4pbscd-2U3NYSGAzK55zpMyOQGr83JUxbZXI,11690 +boto3/data/dynamodb/2012-08-10/resources-1.json,sha256=hBLa1Jt7bdT557U9A7UcSi8SCpONKzdbtDRTzjM1-Y0,3849 +boto3/data/ec2/2014-10-01/resources-1.json,sha256=tMG1AMYP2ksnPWY6-3l8DB-EhKsSNtAO9YHhvHqBKu0,68469 +boto3/data/ec2/2015-03-01/resources-1.json,sha256=tMG1AMYP2ksnPWY6-3l8DB-EhKsSNtAO9YHhvHqBKu0,68469 +boto3/data/ec2/2015-04-15/resources-1.json,sha256=tMG1AMYP2ksnPWY6-3l8DB-EhKsSNtAO9YHhvHqBKu0,68469 +boto3/data/ec2/2015-10-01/resources-1.json,sha256=SOfYX2c1KgvnxMO2FCdJpV42rJWNMwVhlFAXhvUPTzA,76564 +boto3/data/ec2/2016-04-01/resources-1.json,sha256=SOfYX2c1KgvnxMO2FCdJpV42rJWNMwVhlFAXhvUPTzA,76564 +boto3/data/ec2/2016-09-15/resources-1.json,sha256=SOfYX2c1KgvnxMO2FCdJpV42rJWNMwVhlFAXhvUPTzA,76564 +boto3/data/ec2/2016-11-15/resources-1.json,sha256=vx7YiL-sUvBFeo4SZ81G7Qa2Hy-y6xY4z2YlSx7_wEw,76922 +boto3/data/glacier/2012-06-01/resources-1.json,sha256=GT5qWQLGeXtrHgTDNG23Mrpyweg6O0Udgd139BuNTVs,19940 +boto3/data/iam/2010-05-08/resources-1.json,sha256=PsOT9yBqSJtluBFHCVRsg6k6Ly2VkSYODnYxSl0DVOc,50357 +boto3/data/opsworks/2013-02-18/resources-1.json,sha256=Y6ygEyegsbYA1gGZn-Ad2yuDd3jUCOt2UKrW_b2YBeM,4136 +boto3/data/s3/2006-03-01/resources-1.json,sha256=VeKALhMRqv7fyDHMLOM5_RzXUEuDdg_n6OIRi3sdB-o,37204 +boto3/data/sns/2010-03-31/resources-1.json,sha256=7zmKQhafgsRDu4U1yiw3NXHz-zJhHKrOmtuoYlxQP-s,9091 +boto3/data/sqs/2012-11-05/resources-1.json,sha256=LRIIr5BId3UDeuBfLn-vRiWsSZCM9_ynqdxF8uzHgy8,6545 +boto3/docs/__init__.py,sha256=ncXQfWgitU2kFSghqy2lezeeW1RneKZ-3wcsvEddsr0,1845 +boto3/docs/__pycache__/__init__.cpython-38.pyc,, +boto3/docs/__pycache__/action.cpython-38.pyc,, +boto3/docs/__pycache__/attr.cpython-38.pyc,, +boto3/docs/__pycache__/base.cpython-38.pyc,, +boto3/docs/__pycache__/client.cpython-38.pyc,, +boto3/docs/__pycache__/collection.cpython-38.pyc,, +boto3/docs/__pycache__/docstring.cpython-38.pyc,, +boto3/docs/__pycache__/method.cpython-38.pyc,, +boto3/docs/__pycache__/resource.cpython-38.pyc,, +boto3/docs/__pycache__/service.cpython-38.pyc,, +boto3/docs/__pycache__/subresource.cpython-38.pyc,, +boto3/docs/__pycache__/utils.cpython-38.pyc,, +boto3/docs/__pycache__/waiter.cpython-38.pyc,, +boto3/docs/action.py,sha256=5ZQ2C9vIZdk8grFlnej-cwpVoNz0drcMiirKzqHczck,8178 +boto3/docs/attr.py,sha256=BnG3tR1KKQvvY58aeJiWQ5W5DiMnJ_9jUjmG6tDbFiU,2500 +boto3/docs/base.py,sha256=nOrQSCeUSIZPkn-I59o7CfjEthgdkpCt_rXtE9zQnXc,2103 +boto3/docs/client.py,sha256=RpCngTolE4OtGIPvvJvkw8FJCqh5-7b-Q0QN5mVE7to,1078 +boto3/docs/collection.py,sha256=pWO9I9LTMyhyYyCT_alrO4hZpqNI1228IwABotYTqBU,11679 +boto3/docs/docstring.py,sha256=oPugaubdAXY6aNa-kXGI51lP1xE2s4AnfTsLhibf7-E,2511 +boto3/docs/method.py,sha256=kJ3UJS2JBSt6SB_3TsEf3lxcjda5TAAfmocrLmxtSLc,2733 +boto3/docs/resource.py,sha256=HBFq7c-tio19Da2Wb60j99EcW-I9M5-_C-9IjTuWrok,15376 +boto3/docs/service.py,sha256=bCd2LPfZOeTkDOKggTyXJYXXPkuYUy91x5KYyqPPQnE,8544 +boto3/docs/subresource.py,sha256=W19brjJjeW55ssyYhCnFaZICfp2LjOoC4BP_jW2ViC8,5864 +boto3/docs/utils.py,sha256=H0UeVvmVbYBZ6F-CVEUxVggLMBOIoA5q8y8hxBFnRKE,5436 +boto3/docs/waiter.py,sha256=xfnXtbMTOCyNG9vTNZW7Alsy77ZXuJCFcQcq0sNtg8Q,5175 +boto3/dynamodb/__init__.py,sha256=GkSq-WxXWfVHu1SEcMrlJbzkfw9ACgF3UdCL6fPpTmY,562 +boto3/dynamodb/__pycache__/__init__.cpython-38.pyc,, +boto3/dynamodb/__pycache__/conditions.cpython-38.pyc,, +boto3/dynamodb/__pycache__/table.cpython-38.pyc,, +boto3/dynamodb/__pycache__/transform.cpython-38.pyc,, +boto3/dynamodb/__pycache__/types.cpython-38.pyc,, +boto3/dynamodb/conditions.py,sha256=sjkd0kIqFP_h8aUvysZQel0zts5HF22ogqKiv0t0KRw,15045 +boto3/dynamodb/table.py,sha256=us79dxZSQSno8gsUoAdQyzc2oBJL2riUpN6RGc8vQk8,6343 +boto3/dynamodb/transform.py,sha256=JnW5ZzPIfxEcDszSvXKUZmp_1rw445tsddS3FG--JwA,12909 +boto3/dynamodb/types.py,sha256=ch0vIKaAYexjL42S_OJWyvjWMcb0UbNrmkKGcz76O3c,9541 +boto3/ec2/__init__.py,sha256=GkSq-WxXWfVHu1SEcMrlJbzkfw9ACgF3UdCL6fPpTmY,562 +boto3/ec2/__pycache__/__init__.cpython-38.pyc,, +boto3/ec2/__pycache__/createtags.cpython-38.pyc,, +boto3/ec2/__pycache__/deletetags.cpython-38.pyc,, +boto3/ec2/createtags.py,sha256=pUPJOYn7m0Jcch9UL-DEVGgbQHoyAemECPBhzyBx28c,1577 +boto3/ec2/deletetags.py,sha256=KaYcqSt8FFM_TW0g0pZ14qDjVnmRCPV0sMe6DprEtvo,1217 +boto3/examples/cloudfront.rst,sha256=K-sBWZxoLjABCZHrqAZs57cYefwPmDir03pm6PE_mh4,1390 +boto3/examples/s3.rst,sha256=jCfgEDfpw08nFtCizCN2OGg15zQRkx3DiJXZUfqhE2s,5486 +boto3/exceptions.py,sha256=i13QpGxoFizxAGCzA2qmF9ldbI5IfBpn37DH75ddRF8,4127 +boto3/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +boto3/resources/__pycache__/__init__.cpython-38.pyc,, +boto3/resources/__pycache__/action.cpython-38.pyc,, +boto3/resources/__pycache__/base.cpython-38.pyc,, +boto3/resources/__pycache__/collection.cpython-38.pyc,, +boto3/resources/__pycache__/factory.cpython-38.pyc,, +boto3/resources/__pycache__/model.cpython-38.pyc,, +boto3/resources/__pycache__/params.cpython-38.pyc,, +boto3/resources/__pycache__/response.cpython-38.pyc,, +boto3/resources/action.py,sha256=vPfVHVgXiGqhwpgRSCC7lSsY3vGjgsSiYhXa14CMAqw,9600 +boto3/resources/base.py,sha256=Nf5Anssquo3urPDyWLAN8di379z5oafjwzl3gD9WbsI,5044 +boto3/resources/collection.py,sha256=bSV0353zcTRLEPws2qqMFd2Xure8I8LgU-IDR-TM3sI,19242 +boto3/resources/factory.py,sha256=iXV5l7UZePNIfkkUMgUNC0tIdJhxr_65m9KYdwIOfKA,22708 +boto3/resources/model.py,sha256=3mCNSvnmCKPzjK-hW4yEv0PjKYb0hxBsAE9nopY-3bU,20394 +boto3/resources/params.py,sha256=i6KAjOzjzou7ouViYbRZCz0CwqB6fA_6gOJFDIruTV8,6112 +boto3/resources/response.py,sha256=aC1AZuO08qtb1psJtbrc5Na32AQ9WI-Il4DpVxsUtXs,11694 +boto3/s3/__init__.py,sha256=GkSq-WxXWfVHu1SEcMrlJbzkfw9ACgF3UdCL6fPpTmY,562 +boto3/s3/__pycache__/__init__.cpython-38.pyc,, +boto3/s3/__pycache__/constants.cpython-38.pyc,, +boto3/s3/__pycache__/inject.cpython-38.pyc,, +boto3/s3/__pycache__/transfer.cpython-38.pyc,, +boto3/s3/constants.py,sha256=ZaYknNwqGwsJEGkL92GXaBs9kjfRbyCDFt89wei8t7E,690 +boto3/s3/inject.py,sha256=t1XiGqUIB_BNtJSiKgqu1hfzhfCntWzmUSxWgCPv4bU,28205 +boto3/s3/transfer.py,sha256=FPQQ-ov8foEmA4DY6CYjitY7BchyGSzCpfBRPPhNj-0,15928 +boto3/session.py,sha256=ITqrFauYJ74IfZrpPS411rLaKNNVQKgCe388fpnUV-0,20758 +boto3/utils.py,sha256=dBw0Eu23TOhDsP1Lkrp4uOVMn5DS8s0kRGwVRiCD_KM,3141 diff --git a/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/WHEEL b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/WHEEL new file mode 100644 index 00000000..5bad85fd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/top_level.txt b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/top_level.txt new file mode 100644 index 00000000..30ddf823 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3-1.34.19.dist-info/top_level.txt @@ -0,0 +1 @@ +boto3 diff --git a/dbtzin/lib/python3.8/site-packages/boto3/__init__.py b/dbtzin/lib/python3.8/site-packages/boto3/__init__.py new file mode 100644 index 00000000..4a21e299 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/__init__.py @@ -0,0 +1,111 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import logging + +from boto3.compat import _warn_deprecated_python +from boto3.session import Session + +__author__ = 'Amazon Web Services' +__version__ = '1.34.19' + + +# The default Boto3 session; autoloaded when needed. +DEFAULT_SESSION = None + + +def setup_default_session(**kwargs): + """ + Set up a default session, passing through any parameters to the session + constructor. There is no need to call this unless you wish to pass custom + parameters, because a default session will be created for you. + """ + global DEFAULT_SESSION + DEFAULT_SESSION = Session(**kwargs) + + +def set_stream_logger(name='boto3', level=logging.DEBUG, format_string=None): + """ + Add a stream handler for the given name and level to the logging module. + By default, this logs all boto3 messages to ``stdout``. + + >>> import boto3 + >>> boto3.set_stream_logger('boto3.resources', logging.INFO) + + For debugging purposes a good choice is to set the stream logger to ``''`` + which is equivalent to saying "log everything". + + .. WARNING:: + Be aware that when logging anything from ``'botocore'`` the full wire + trace will appear in your logs. If your payloads contain sensitive data + this should not be used in production. + + :type name: string + :param name: Log name + :type level: int + :param level: Logging level, e.g. ``logging.INFO`` + :type format_string: str + :param format_string: Log message format + """ + if format_string is None: + format_string = "%(asctime)s %(name)s [%(levelname)s] %(message)s" + + logger = logging.getLogger(name) + logger.setLevel(level) + handler = logging.StreamHandler() + handler.setLevel(level) + formatter = logging.Formatter(format_string) + handler.setFormatter(formatter) + logger.addHandler(handler) + + +def _get_default_session(): + """ + Get the default session, creating one if needed. + + :rtype: :py:class:`~boto3.session.Session` + :return: The default session + """ + if DEFAULT_SESSION is None: + setup_default_session() + _warn_deprecated_python() + + return DEFAULT_SESSION + + +def client(*args, **kwargs): + """ + Create a low-level service client by name using the default session. + + See :py:meth:`boto3.session.Session.client`. + """ + return _get_default_session().client(*args, **kwargs) + + +def resource(*args, **kwargs): + """ + Create a resource service client by name using the default session. + + See :py:meth:`boto3.session.Session.resource`. + """ + return _get_default_session().resource(*args, **kwargs) + + +# Set up logging to ``/dev/null`` like a library is supposed to. +# https://docs.python.org/3.3/howto/logging.html#configuring-logging-for-a-library +class NullHandler(logging.Handler): + def emit(self, record): + pass + + +logging.getLogger('boto3').addHandler(NullHandler()) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..f6c1d5c3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/compat.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/compat.cpython-38.pyc new file mode 100644 index 00000000..3dbdd4ef Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/compat.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/crt.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/crt.cpython-38.pyc new file mode 100644 index 00000000..a61dfa56 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/crt.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/exceptions.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/exceptions.cpython-38.pyc new file mode 100644 index 00000000..e040a38d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/exceptions.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/session.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/session.cpython-38.pyc new file mode 100644 index 00000000..ee0f9448 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/session.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/utils.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/utils.cpython-38.pyc new file mode 100644 index 00000000..bb527b3e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/__pycache__/utils.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/compat.py b/dbtzin/lib/python3.8/site-packages/boto3/compat.py new file mode 100644 index 00000000..ec53a998 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/compat.py @@ -0,0 +1,82 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import sys +import os +import errno +import socket +import warnings + +from boto3.exceptions import PythonDeprecationWarning + +# In python3, socket.error is OSError, which is too general +# for what we want (i.e FileNotFoundError is a subclass of OSError). +# In py3 all the socket related errors are in a newly created +# ConnectionError +SOCKET_ERROR = ConnectionError + +import collections.abc as collections_abc + + +if sys.platform.startswith('win'): + def rename_file(current_filename, new_filename): + try: + os.remove(new_filename) + except OSError as e: + if not e.errno == errno.ENOENT: + # We only want to a ignore trying to remove + # a file that does not exist. If it fails + # for any other reason we should be propagating + # that exception. + raise + os.rename(current_filename, new_filename) +else: + rename_file = os.rename + + +def filter_python_deprecation_warnings(): + """ + Invoking this filter acknowledges your runtime will soon be deprecated + at which time you will stop receiving all updates to your client. + """ + warnings.filterwarnings( + 'ignore', + message=".*Boto3 will no longer support Python.*", + category=PythonDeprecationWarning, + module=r".*boto3\.compat" + ) + + +def _warn_deprecated_python(): + """Use this template for future deprecation campaigns as needed.""" + py_37_params = { + 'date': 'December 13, 2023', + 'blog_link': ( + 'https://aws.amazon.com/blogs/developer/' + 'python-support-policy-updates-for-aws-sdks-and-tools/' + ) + } + deprecated_versions = { + # Example template for future deprecations + (3, 7): py_37_params, + } + py_version = sys.version_info[:2] + + if py_version in deprecated_versions: + params = deprecated_versions[py_version] + warning = ( + "Boto3 will no longer support Python {}.{} " + "starting {}. To continue receiving service updates, " + "bug fixes, and security updates please upgrade to Python 3.8 or " + "later. More information can be found here: {}" + ).format(py_version[0], py_version[1], params['date'], params['blog_link']) + warnings.warn(warning, PythonDeprecationWarning) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/crt.py b/dbtzin/lib/python3.8/site-packages/boto3/crt.py new file mode 100644 index 00000000..4b8df314 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/crt.py @@ -0,0 +1,167 @@ +# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +""" +This file contains private functionality for interacting with the AWS +Common Runtime library (awscrt) in boto3. + +All code contained within this file is for internal usage within this +project and is not intended for external consumption. All interfaces +contained within are subject to abrupt breaking changes. +""" + +import threading + +import botocore.exceptions +from botocore.session import Session +from s3transfer.crt import ( + BotocoreCRTCredentialsWrapper, + BotocoreCRTRequestSerializer, + CRTTransferManager, + acquire_crt_s3_process_lock, + create_s3_crt_client, +) + +# Singletons for CRT-backed transfers +CRT_S3_CLIENT = None +BOTOCORE_CRT_SERIALIZER = None + +CLIENT_CREATION_LOCK = threading.Lock() +PROCESS_LOCK_NAME = 'boto3' + + +def _create_crt_client(session, config, region_name, cred_provider): + """Create a CRT S3 Client for file transfer. + + Instantiating many of these may lead to degraded performance or + system resource exhaustion. + """ + create_crt_client_kwargs = { + 'region': region_name, + 'use_ssl': True, + 'crt_credentials_provider': cred_provider, + } + return create_s3_crt_client(**create_crt_client_kwargs) + + +def _create_crt_request_serializer(session, region_name): + return BotocoreCRTRequestSerializer( + session, {'region_name': region_name, 'endpoint_url': None} + ) + + +def _create_crt_s3_client( + session, config, region_name, credentials, lock, **kwargs +): + """Create boto3 wrapper class to manage crt lock reference and S3 client.""" + cred_wrapper = BotocoreCRTCredentialsWrapper(credentials) + cred_provider = cred_wrapper.to_crt_credentials_provider() + return CRTS3Client( + _create_crt_client(session, config, region_name, cred_provider), + lock, + region_name, + cred_wrapper, + ) + + +def _initialize_crt_transfer_primatives(client, config): + lock = acquire_crt_s3_process_lock(PROCESS_LOCK_NAME) + if lock is None: + # If we're unable to acquire the lock, we cannot + # use the CRT in this process and should default to + # the classic s3transfer manager. + return None, None + + session = Session() + region_name = client.meta.region_name + credentials = client._get_credentials() + + serializer = _create_crt_request_serializer(session, region_name) + s3_client = _create_crt_s3_client( + session, config, region_name, credentials, lock + ) + return serializer, s3_client + + +def get_crt_s3_client(client, config): + global CRT_S3_CLIENT + global BOTOCORE_CRT_SERIALIZER + + with CLIENT_CREATION_LOCK: + if CRT_S3_CLIENT is None: + serializer, s3_client = _initialize_crt_transfer_primatives( + client, config + ) + BOTOCORE_CRT_SERIALIZER = serializer + CRT_S3_CLIENT = s3_client + + return CRT_S3_CLIENT + + +class CRTS3Client: + """ + This wrapper keeps track of our underlying CRT client, the lock used to + acquire it and the region we've used to instantiate the client. + + Due to limitations in the existing CRT interfaces, we can only make calls + in a single region and does not support redirects. We track the region to + ensure we don't use the CRT client when a successful request cannot be made. + """ + + def __init__(self, crt_client, process_lock, region, cred_provider): + self.crt_client = crt_client + self.process_lock = process_lock + self.region = region + self.cred_provider = cred_provider + + +def is_crt_compatible_request(client, crt_s3_client): + """ + Boto3 client must use same signing region and credentials + as the CRT_S3_CLIENT singleton. Otherwise fallback to classic. + """ + if crt_s3_client is None: + return False + + boto3_creds = client._get_credentials() + if boto3_creds is None: + return False + + is_same_identity = compare_identity( + boto3_creds.get_frozen_credentials(), crt_s3_client.cred_provider + ) + is_same_region = client.meta.region_name == crt_s3_client.region + return is_same_region and is_same_identity + + +def compare_identity(boto3_creds, crt_s3_creds): + try: + crt_creds = crt_s3_creds() + except botocore.exceptions.NoCredentialsError: + return False + + is_matching_identity = ( + boto3_creds.access_key == crt_creds.access_key_id + and boto3_creds.secret_key == crt_creds.secret_access_key + and boto3_creds.token == crt_creds.session_token + ) + return is_matching_identity + + +def create_crt_transfer_manager(client, config): + """Create a CRTTransferManager for optimized data transfer.""" + crt_s3_client = get_crt_s3_client(client, config) + if is_crt_compatible_request(client, crt_s3_client): + return CRTTransferManager( + crt_s3_client.crt_client, BOTOCORE_CRT_SERIALIZER + ) + return None diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/cloudformation/2010-05-15/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/cloudformation/2010-05-15/resources-1.json new file mode 100644 index 00000000..fd439375 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/cloudformation/2010-05-15/resources-1.json @@ -0,0 +1,195 @@ +{ + "service": { + "actions": { + "CreateStack": { + "request": { "operation": "CreateStack" }, + "resource": { + "type": "Stack", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "StackName" } + ] + } + } + }, + "has": { + "Event": { + "resource": { + "type": "Event", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Stack": { + "resource": { + "type": "Stack", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + } + }, + "hasMany": { + "Stacks": { + "request": { "operation": "DescribeStacks" }, + "resource": { + "type": "Stack", + "identifiers": [ + { "target": "Name", "source": "response", "path": "Stacks[].StackName" } + ], + "path": "Stacks[]" + } + } + } + }, + "resources": { + "Event": { + "identifiers": [ + { + "name": "Id", + "memberName": "EventId" + } + ], + "shape": "StackEvent" + }, + "Stack": { + "identifiers": [ + { + "name": "Name", + "memberName": "StackName" + } + ], + "shape": "Stack", + "load": { + "request": { + "operation": "DescribeStacks", + "params": [ + { "target": "StackName", "source": "identifier", "name": "Name" } + ] + }, + "path": "Stacks[0]" + }, + "actions": { + "CancelUpdate": { + "request": { + "operation": "CancelUpdateStack", + "params": [ + { "target": "StackName", "source": "identifier", "name": "Name" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteStack", + "params": [ + { "target": "StackName", "source": "identifier", "name": "Name" } + ] + } + }, + "Update": { + "request": { + "operation": "UpdateStack", + "params": [ + { "target": "StackName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "has": { + "Resource": { + "resource": { + "type": "StackResource", + "identifiers": [ + { "target": "StackName", "source": "identifier", "name": "Name" }, + { "target": "LogicalId", "source": "input" } + ] + } + } + }, + "hasMany": { + "Events": { + "request": { + "operation": "DescribeStackEvents", + "params": [ + { "target": "StackName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Event", + "identifiers": [ + { "target": "Id", "source": "response", "path": "StackEvents[].EventId" } + ], + "path": "StackEvents[]" + } + }, + "ResourceSummaries": { + "request": { + "operation": "ListStackResources", + "params": [ + { "target": "StackName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "StackResourceSummary", + "identifiers": [ + { "target": "LogicalId", "source": "response", "path": "StackResourceSummaries[].LogicalResourceId" }, + { "target": "StackName", "source": "requestParameter", "path": "StackName" } + ], + "path": "StackResourceSummaries[]" + } + } + } + }, + "StackResource": { + "identifiers": [ + { "name": "StackName" }, + { + "name": "LogicalId", + "memberName": "LogicalResourceId" + } + ], + "shape": "StackResourceDetail", + "load": { + "request": { + "operation": "DescribeStackResource", + "params": [ + { "target": "LogicalResourceId", "source": "identifier", "name": "LogicalId" }, + { "target": "StackName", "source": "identifier", "name": "StackName" } + ] + }, + "path": "StackResourceDetail" + }, + "has": { + "Stack": { + "resource": { + "type": "Stack", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "StackName" } + ] + } + } + } + }, + "StackResourceSummary": { + "identifiers": [ + { "name": "StackName" }, + { + "name": "LogicalId", + "memberName": "LogicalResourceId" + } + ], + "shape": "StackResourceSummary", + "has": { + "Resource": { + "resource": { + "type": "StackResource", + "identifiers": [ + { "target": "LogicalId", "source": "identifier", "name": "LogicalId" }, + { "target": "StackName", "source": "identifier", "name": "StackName" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/cloudwatch/2010-08-01/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/cloudwatch/2010-08-01/resources-1.json new file mode 100644 index 00000000..e0746d04 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/cloudwatch/2010-08-01/resources-1.json @@ -0,0 +1,334 @@ +{ + "service": { + "has": { + "Alarm": { + "resource": { + "type": "Alarm", + "identifiers": [ + { + "target": "Name", + "source": "input" + } + ] + } + }, + "Metric": { + "resource": { + "type": "Metric", + "identifiers": [ + { + "target": "Namespace", + "source": "input" + }, + { + "target": "Name", + "source": "input" + } + ] + } + } + }, + "hasMany": { + "Alarms": { + "request": { "operation": "DescribeAlarms" }, + "resource": { + "type": "Alarm", + "identifiers": [ + { + "target": "Name", + "source": "response", + "path": "MetricAlarms[].AlarmName" + } + ], + "path": "MetricAlarms[]" + } + }, + "Metrics": { + "request": { "operation": "ListMetrics" }, + "resource": { + "type": "Metric", + "identifiers": [ + { + "target": "Namespace", + "source": "response", + "path": "Metrics[].Namespace" + }, + { + "target": "Name", + "source": "response", + "path": "Metrics[].MetricName" + } + ], + "path": "Metrics[]" + } + } + } + }, + "resources": { + "Alarm": { + "identifiers": [ + { + "name": "Name", + "memberName": "AlarmName" + } + ], + "shape": "MetricAlarm", + "load": { + "request": { + "operation": "DescribeAlarms", + "params": [ + { + "target": "AlarmNames[0]", + "source": "identifier", + "name": "Name" + } + ] + }, + "path": "MetricAlarms[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteAlarms", + "params": [ + { + "target": "AlarmNames[0]", + "source": "identifier", + "name": "Name" + } + ] + } + }, + "DescribeHistory": { + "request": { + "operation": "DescribeAlarmHistory", + "params": [ + { + "target": "AlarmName", + "source": "identifier", + "name": "Name" + } + ] + } + }, + "DisableActions": { + "request": { + "operation": "DisableAlarmActions", + "params": [ + { + "target": "AlarmNames[0]", + "source": "identifier", + "name": "Name" + } + ] + } + }, + "EnableActions": { + "request": { + "operation": "EnableAlarmActions", + "params": [ + { + "target": "AlarmNames[0]", + "source": "identifier", + "name": "Name" + } + ] + } + }, + "SetState": { + "request": { + "operation": "SetAlarmState", + "params": [ + { + "target": "AlarmName", + "source": "identifier", + "name": "Name" + } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteAlarms", + "params": [ + { + "target": "AlarmNames[]", + "source": "identifier", + "name": "Name" + } + ] + } + }, + "DisableActions": { + "request": { + "operation": "DisableAlarmActions", + "params": [ + { + "target": "AlarmNames[]", + "source": "identifier", + "name": "Name" + } + ] + } + }, + "EnableActions": { + "request": { + "operation": "EnableAlarmActions", + "params": [ + { + "target": "AlarmNames[]", + "source": "identifier", + "name": "Name" + } + ] + } + } + }, + "has": { + "Metric": { + "resource": { + "type": "Metric", + "identifiers": [ + { + "target": "Namespace", + "source": "data", + "path": "Namespace" + }, + { + "target": "Name", + "source": "data", + "path": "MetricName" + } + ] + } + } + } + }, + "Metric": { + "identifiers": [ + { + "name": "Namespace", + "memberName": "Namespace" + }, + { + "name": "Name", + "memberName": "MetricName" + } + ], + "shape": "Metric", + "load": { + "request": { + "operation": "ListMetrics", + "params": [ + { + "target": "MetricName", + "source": "identifier", + "name": "Name" + }, + { + "target": "Namespace", + "source": "identifier", + "name": "Namespace" + } + ] + }, + "path": "Metrics[0]" + }, + "actions": { + "GetStatistics": { + "request": { + "operation": "GetMetricStatistics", + "params": [ + { + "target": "Namespace", + "source": "identifier", + "name": "Namespace" + }, + { + "target": "MetricName", + "source": "identifier", + "name": "Name" + } + ] + } + }, + "PutAlarm": { + "request": { + "operation": "PutMetricAlarm", + "params": [ + { + "target": "Namespace", + "source": "identifier", + "name": "Namespace" + }, + { + "target": "MetricName", + "source": "identifier", + "name": "Name" + } + ] + }, + "resource": { + "type": "Alarm", + "identifiers": [ + { + "target": "Name", + "source": "requestParameter", + "path": "AlarmName" + } + ] + } + }, + "PutData": { + "request": { + "operation": "PutMetricData", + "params": [ + { + "target": "Namespace", + "source": "identifier", + "name": "Namespace" + }, + { + "target": "MetricData[].MetricName", + "source": "identifier", + "name": "Name" + } + ] + } + } + }, + "hasMany": { + "Alarms": { + "request": { + "operation": "DescribeAlarmsForMetric", + "params": [ + { + "target": "Namespace", + "source": "identifier", + "name": "Namespace" + }, + { + "target": "MetricName", + "source": "identifier", + "name": "Name" + } + ] + }, + "resource": { + "type": "Alarm", + "identifiers": [ + { + "target": "Name", + "source": "response", + "path": "MetricAlarms[].AlarmName" + } + ], + "path": "MetricAlarms[]" + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/dynamodb/2012-08-10/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/dynamodb/2012-08-10/resources-1.json new file mode 100644 index 00000000..b79994e2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/dynamodb/2012-08-10/resources-1.json @@ -0,0 +1,150 @@ +{ + "service": { + "actions": { + "BatchGetItem": { + "request": { "operation": "BatchGetItem" } + }, + "BatchWriteItem": { + "request": { "operation": "BatchWriteItem" } + }, + "CreateTable": { + "request": { "operation": "CreateTable" }, + "resource": { + "type": "Table", + "identifiers": [ + { "target": "Name", "source": "response", "path": "TableDescription.TableName" } + ], + "path": "TableDescription" + } + } + }, + "has": { + "Table": { + "resource": { + "type": "Table", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + } + }, + "hasMany": { + "Tables": { + "request": { "operation": "ListTables" }, + "resource": { + "type": "Table", + "identifiers": [ + { "target": "Name", "source": "response", "path": "TableNames[]" } + ] + } + } + } + }, + "resources": { + "Table": { + "identifiers": [ + { + "name": "Name", + "memberName": "TableName" + } + ], + "shape": "TableDescription", + "load": { + "request": { + "operation": "DescribeTable", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + }, + "path": "Table" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteTable", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + } + }, + "DeleteItem": { + "request": { + "operation": "DeleteItem", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + } + }, + "GetItem": { + "request": { + "operation": "GetItem", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + } + }, + "PutItem": { + "request": { + "operation": "PutItem", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + } + }, + "Query": { + "request": { + "operation": "Query", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + } + }, + "Scan": { + "request": { + "operation": "Scan", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + } + }, + "Update": { + "request": { + "operation": "UpdateTable", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Table", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "Name" } + ], + "path": "TableDescription" + } + }, + "UpdateItem": { + "request": { + "operation": "UpdateItem", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "waiters":{ + "Exists": { + "waiterName": "TableExists", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + }, + "NotExists": { + "waiterName": "TableNotExists", + "params": [ + { "target": "TableName", "source": "identifier", "name": "Name" } + ] + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2014-10-01/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2014-10-01/resources-1.json new file mode 100644 index 00000000..8ccf160a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2014-10-01/resources-1.json @@ -0,0 +1,2289 @@ +{ + "service": { + "actions": { + "CreateDhcpOptions": { + "request": { "operation": "CreateDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions.DhcpOptionsId" } + ], + "path": "DhcpOptions" + } + }, + "CreateInstances": { + "request": { "operation": "RunInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateInternetGateway": { + "request": { "operation": "CreateInternetGateway" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateway.InternetGatewayId" } + ], + "path": "InternetGateway" + } + }, + "CreateKeyPair": { + "request": { "operation": "CreateKeyPair" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ] + } + }, + "CreateNetworkAcl": { + "request": { "operation": "CreateNetworkAcl" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateNetworkInterface": { + "request": { "operation": "CreateNetworkInterface" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreatePlacementGroup": { + "request": { "operation": "CreatePlacementGroup" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "GroupName" } + ] + } + }, + "CreateRouteTable": { + "request": { "operation": "CreateRouteTable" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { "operation": "CreateSecurityGroup" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSnapshot": { + "request": { "operation": "CreateSnapshot" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateSubnet": { + "request": { "operation": "CreateSubnet" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { "operation": "CreateTags" }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "requestParameter", "path": "Resources[]" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "CreateVolume": { + "request": { "operation": "CreateVolume" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VolumeId" } + ], + "path": "@" + } + }, + "CreateVpc": { + "request": { "operation": "CreateVpc" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpc.VpcId" } + ], + "path": "Vpc" + } + }, + "CreateVpcPeeringConnection": { + "request": { "operation": "CreateVpcPeeringConnection" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + }, + "DisassociateRouteTable": { + "request": { "operation": "DisassociateRouteTable" } + }, + "ImportKeyPair": { + "request": { "operation": "ImportKeyPair" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ] + } + }, + "RegisterImage": { + "request": { "operation": "RegisterImage" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Instance": { + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "InternetGateway": { + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "NetworkAcl": { + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "NetworkInterface": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "RouteTableAssociation": { + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "SecurityGroup": { + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Snapshot": { + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "VpcPeeringConnection": { + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + } + }, + "hasMany": { + "DhcpOptionsSets": { + "request": { "operation": "DescribeDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions[].DhcpOptionsId" } + ], + "path": "DhcpOptions[]" + } + }, + "Images": { + "request": { "operation": "DescribeImages" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Images[].ImageId" } + ], + "path": "Images[]" + } + }, + "Instances": { + "request": { "operation": "DescribeInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { "operation": "DescribeInternetGateways" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "KeyPairs": { + "request": { "operation": "DescribeKeyPairs" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyPairs[].KeyName" } + ], + "path": "KeyPairs[]" + } + }, + "NetworkAcls": { + "request": { "operation": "DescribeNetworkAcls" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { "operation": "DescribeNetworkInterfaces" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroups": { + "request": { "operation": "DescribePlacementGroups" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "response", "path": "PlacementGroups[].GroupName" } + ], + "path": "PlacementGroups[]" + } + }, + "RouteTables": { + "request": { "operation": "DescribeRouteTables" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { "operation": "DescribeSecurityGroups" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Snapshots": { + "request": { "operation": "DescribeSnapshots" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + }, + "Subnets": { + "request": { "operation": "DescribeSubnets" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + }, + "Volumes": { + "request": { "operation": "DescribeVolumes" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcPeeringConnections": { + "request": { "operation": "DescribeVpcPeeringConnections" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Vpcs": { + "request": { "operation": "DescribeVpcs" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpcs[].VpcId" } + ], + "path": "Vpcs[]" + } + } + } + }, + "resources": { + "DhcpOptions": { + "identifiers": [ + { + "name": "Id", + "memberName": "DhcpOptionsId" + } + ], + "shape": "DhcpOptions", + "load": { + "request": { + "operation": "DescribeDhcpOptions", + "params": [ + { "target": "DhcpOptionsIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "DhcpOptions[0]" + }, + "actions": { + "AssociateWithVpc": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Image": { + "identifiers": [ + { + "name": "Id", + "memberName": "ImageId" + } + ], + "shape": "Image", + "load": { + "request": { + "operation": "DescribeImages", + "params": [ + { "target": "ImageIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Images[0]" + }, + "actions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Deregister": { + "request": { + "operation": "DeregisterImage", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Instance": { + "identifiers": [ + { + "name": "Id", + "memberName": "InstanceId" + } + ], + "shape": "Instance", + "load": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Reservations[0].Instances[0]" + }, + "actions": { + "AttachClassicLinkVpc": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachVolume": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ConsoleOutput": { + "request": { + "operation": "GetConsoleOutput", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateImage": { + "request": { + "operation": "CreateImage", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkVpc": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachVolume": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "PasswordData": { + "request": { + "operation": "GetPasswordData", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ReportStatus": { + "request": { + "operation": "ReportInstanceStatus", + "params": [ + { "target": "Instances[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetKernel": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "kernel" } + ] + } + }, + "ResetRamdisk": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "ramdisk" } + ] + } + }, + "ResetSourceDestCheck": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "sourceDestCheck" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "batchActions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "InstanceExists", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Running": { + "waiterName": "InstanceRunning", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Stopped": { + "waiterName": "InstanceStopped", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Terminated": { + "waiterName": "InstanceTerminated", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + } + }, + "has": { + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "data", "path": "ImageId" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "data", "path": "KeyName" } + ] + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "data", "path": "Placement.GroupName" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Volumes": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + } + } + }, + "InternetGateway": { + "identifiers": [ + { + "name": "Id", + "memberName": "InternetGatewayId" + } + ], + "shape": "InternetGateway", + "load": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "InternetGatewayIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "InternetGateways[0]" + }, + "actions": { + "AttachToVpc": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromVpc": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "KeyPair": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPairInfo", + "load": { + "request": { + "operation": "DescribeKeyPairs", + "params": [ + { "target": "KeyNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "KeyPairs[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "NetworkAcl": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkAclId" + } + ], + "shape": "NetworkAcl", + "load": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "NetworkAclIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkAcls[0]" + }, + "actions": { + "CreateEntry": { + "request": { + "operation": "CreateNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkAcl", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "DeleteEntry": { + "request": { + "operation": "DeleteNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceAssociation": { + "request": { + "operation": "ReplaceNetworkAclAssociation", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceEntry": { + "request": { + "operation": "ReplaceNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterface": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkInterfaceId" + } + ], + "shape": "NetworkInterface", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "NetworkInterfaceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0]" + }, + "actions": { + "AssignPrivateIpAddresses": { + "request": { + "operation": "AssignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Attach": { + "request": { + "operation": "AttachNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Detach": { + "request": { + "operation": "DetachNetworkInterface", + "params": [ + { "target": "AttachmentId", "source": "data", "path": "Attachment.AttachmentId" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "UnassignPrivateIpAddresses": { + "request": { + "operation": "UnassignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "PlacementGroup": { + "identifiers": [ + { + "name": "Name", + "memberName": "GroupName" + } + ], + "shape": "PlacementGroup", + "load": { + "request": { + "operation": "DescribePlacementGroups", + "params": [ + { "target": "GroupNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "PlacementGroups[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeletePlacementGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "placement-group-name" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + } + } + }, + "RouteTable": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableId" + } + ], + "shape": "RouteTable", + "load": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "RouteTables[0]" + }, + "actions": { + "AssociateWithSubnet": { + "request": { + "operation": "AssociateRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "AssociationId" } + ] + } + }, + "CreateRoute": { + "request": { + "operation": "CreateRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Associations": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[0].Associations[].RouteTableAssociationId" } + ], + "path": "RouteTables[0].Associations[]" + } + } + } + }, + "RouteTableAssociation": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableAssociationId" + } + ], + "shape": "RouteTableAssociation", + "actions": { + "Delete": { + "request": { + "operation": "DisassociateRouteTable", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceSubnet": { + "request": { + "operation": "ReplaceRouteTableAssociation", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NewAssociationId" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RouteTableId" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + } + } + }, + "SecurityGroup": { + "identifiers": [ + { + "name": "Id", + "memberName": "GroupId" + } + ], + "shape": "SecurityGroup", + "load": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "GroupIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "SecurityGroups[0]" + }, + "actions": { + "AuthorizeEgress": { + "request": { + "operation": "AuthorizeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "AuthorizeIngress": { + "request": { + "operation": "AuthorizeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSecurityGroup", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeEgress": { + "request": { + "operation": "RevokeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeIngress": { + "request": { + "operation": "RevokeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Snapshot": { + "identifiers": [ + { + "name": "Id", + "memberName": "SnapshotId" + } + ], + "shape": "Snapshot", + "load": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "SnapshotIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Snapshots[0]" + }, + "actions": { + "Copy": { + "request": { + "operation": "CopySnapshot", + "params": [ + { "target": "SourceSnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSnapshot", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifySnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Completed": { + "waiterName": "SnapshotCompleted", + "params": [ + { "target": "SnapshotIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Snapshots[]" + } + }, + "has": { + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VolumeId" } + ] + } + } + } + }, + "Subnet": { + "identifiers": [ + { + "name": "Id", + "memberName": "SubnetId" + } + ], + "shape": "Subnet", + "load": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "SubnetIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Subnets[0]" + }, + "actions": { + "CreateInstances": { + "request": { + "operation": "RunInstances", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateNetworkInterface": { + "request": { + "operation": "CreateNetworkInterface", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSubnet", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + } + } + }, + "Tag": { + "identifiers": [ + { + "name": "ResourceId", + "memberName": "ResourceId" + }, + { + "name": "Key", + "memberName": "Key" + }, + { + "name": "Value", + "memberName": "Value" + } + ], + "shape": "TagDescription", + "load": { + "request": { + "operation": "DescribeTags", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "key" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Key" }, + { "target": "Filters[1].Name", "source": "string", "value": "value" }, + { "target": "Filters[1].Values[0]", "source": "identifier", "name": "Value" } + ] + }, + "path": "Tags[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[0].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[0].Value", "source": "identifier", "name": "Value" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[*].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[*].Value", "source": "identifier", "name": "Value" } + ] + } + } + } + }, + "Volume": { + "identifiers": [ + { + "name": "Id", + "memberName": "VolumeId" + } + ], + "shape": "Volume", + "load": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Volumes[0]" + }, + "actions": { + "AttachToInstance": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateSnapshot": { + "request": { + "operation": "CreateSnapshot", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeStatus": { + "request": { + "operation": "DescribeVolumeStatus", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromInstance": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableIo": { + "request": { + "operation": "EnableVolumeIO", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "hasMany": { + "Snapshots": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "volume-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + } + } + }, + "Vpc": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcId" + } + ], + "shape": "Vpc", + "load": { + "request": { + "operation": "DescribeVpcs", + "params": [ + { "target": "VpcIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Vpcs[0]" + }, + "actions": { + "AssociateDhcpOptions": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachClassicLinkInstance": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachInternetGateway": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateNetworkAcl": { + "request": { + "operation": "CreateNetworkAcl", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateRouteTable": { + "request": { + "operation": "CreateRouteTable", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { + "operation": "CreateSecurityGroup", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSubnet": { + "request": { + "operation": "CreateSubnet", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkInstance": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachInternetGateway": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DisableClassicLink": { + "request": { + "operation": "DisableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableClassicLink": { + "request": { + "operation": "EnableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "RequestVpcPeeringConnection": { + "request": { + "operation": "CreateVpcPeeringConnection", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "data", "path": "DhcpOptionsId" } + ] + } + } + }, + "hasMany": { + "AcceptedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "accepter-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "NetworkAcls": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "RequestedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "requester-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "RouteTables": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Subnets": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + } + } + }, + "VpcPeeringConnection": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcPeeringConnectionId" + } + ], + "shape": "VpcPeeringConnection", + "load": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "VpcPeeringConnectionIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "VpcPeeringConnections[0]" + }, + "actions": { + "Accept": { + "request": { + "operation": "AcceptVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reject": { + "request": { + "operation": "RejectVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "AccepterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AccepterVpcInfo.VpcId" } + ] + } + }, + "RequesterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RequesterVpcInfo.VpcId" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2015-03-01/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2015-03-01/resources-1.json new file mode 100644 index 00000000..8ccf160a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2015-03-01/resources-1.json @@ -0,0 +1,2289 @@ +{ + "service": { + "actions": { + "CreateDhcpOptions": { + "request": { "operation": "CreateDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions.DhcpOptionsId" } + ], + "path": "DhcpOptions" + } + }, + "CreateInstances": { + "request": { "operation": "RunInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateInternetGateway": { + "request": { "operation": "CreateInternetGateway" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateway.InternetGatewayId" } + ], + "path": "InternetGateway" + } + }, + "CreateKeyPair": { + "request": { "operation": "CreateKeyPair" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ] + } + }, + "CreateNetworkAcl": { + "request": { "operation": "CreateNetworkAcl" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateNetworkInterface": { + "request": { "operation": "CreateNetworkInterface" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreatePlacementGroup": { + "request": { "operation": "CreatePlacementGroup" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "GroupName" } + ] + } + }, + "CreateRouteTable": { + "request": { "operation": "CreateRouteTable" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { "operation": "CreateSecurityGroup" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSnapshot": { + "request": { "operation": "CreateSnapshot" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateSubnet": { + "request": { "operation": "CreateSubnet" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { "operation": "CreateTags" }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "requestParameter", "path": "Resources[]" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "CreateVolume": { + "request": { "operation": "CreateVolume" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VolumeId" } + ], + "path": "@" + } + }, + "CreateVpc": { + "request": { "operation": "CreateVpc" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpc.VpcId" } + ], + "path": "Vpc" + } + }, + "CreateVpcPeeringConnection": { + "request": { "operation": "CreateVpcPeeringConnection" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + }, + "DisassociateRouteTable": { + "request": { "operation": "DisassociateRouteTable" } + }, + "ImportKeyPair": { + "request": { "operation": "ImportKeyPair" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ] + } + }, + "RegisterImage": { + "request": { "operation": "RegisterImage" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Instance": { + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "InternetGateway": { + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "NetworkAcl": { + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "NetworkInterface": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "RouteTableAssociation": { + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "SecurityGroup": { + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Snapshot": { + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "VpcPeeringConnection": { + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + } + }, + "hasMany": { + "DhcpOptionsSets": { + "request": { "operation": "DescribeDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions[].DhcpOptionsId" } + ], + "path": "DhcpOptions[]" + } + }, + "Images": { + "request": { "operation": "DescribeImages" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Images[].ImageId" } + ], + "path": "Images[]" + } + }, + "Instances": { + "request": { "operation": "DescribeInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { "operation": "DescribeInternetGateways" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "KeyPairs": { + "request": { "operation": "DescribeKeyPairs" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyPairs[].KeyName" } + ], + "path": "KeyPairs[]" + } + }, + "NetworkAcls": { + "request": { "operation": "DescribeNetworkAcls" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { "operation": "DescribeNetworkInterfaces" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroups": { + "request": { "operation": "DescribePlacementGroups" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "response", "path": "PlacementGroups[].GroupName" } + ], + "path": "PlacementGroups[]" + } + }, + "RouteTables": { + "request": { "operation": "DescribeRouteTables" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { "operation": "DescribeSecurityGroups" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Snapshots": { + "request": { "operation": "DescribeSnapshots" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + }, + "Subnets": { + "request": { "operation": "DescribeSubnets" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + }, + "Volumes": { + "request": { "operation": "DescribeVolumes" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcPeeringConnections": { + "request": { "operation": "DescribeVpcPeeringConnections" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Vpcs": { + "request": { "operation": "DescribeVpcs" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpcs[].VpcId" } + ], + "path": "Vpcs[]" + } + } + } + }, + "resources": { + "DhcpOptions": { + "identifiers": [ + { + "name": "Id", + "memberName": "DhcpOptionsId" + } + ], + "shape": "DhcpOptions", + "load": { + "request": { + "operation": "DescribeDhcpOptions", + "params": [ + { "target": "DhcpOptionsIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "DhcpOptions[0]" + }, + "actions": { + "AssociateWithVpc": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Image": { + "identifiers": [ + { + "name": "Id", + "memberName": "ImageId" + } + ], + "shape": "Image", + "load": { + "request": { + "operation": "DescribeImages", + "params": [ + { "target": "ImageIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Images[0]" + }, + "actions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Deregister": { + "request": { + "operation": "DeregisterImage", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Instance": { + "identifiers": [ + { + "name": "Id", + "memberName": "InstanceId" + } + ], + "shape": "Instance", + "load": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Reservations[0].Instances[0]" + }, + "actions": { + "AttachClassicLinkVpc": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachVolume": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ConsoleOutput": { + "request": { + "operation": "GetConsoleOutput", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateImage": { + "request": { + "operation": "CreateImage", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkVpc": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachVolume": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "PasswordData": { + "request": { + "operation": "GetPasswordData", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ReportStatus": { + "request": { + "operation": "ReportInstanceStatus", + "params": [ + { "target": "Instances[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetKernel": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "kernel" } + ] + } + }, + "ResetRamdisk": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "ramdisk" } + ] + } + }, + "ResetSourceDestCheck": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "sourceDestCheck" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "batchActions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "InstanceExists", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Running": { + "waiterName": "InstanceRunning", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Stopped": { + "waiterName": "InstanceStopped", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Terminated": { + "waiterName": "InstanceTerminated", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + } + }, + "has": { + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "data", "path": "ImageId" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "data", "path": "KeyName" } + ] + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "data", "path": "Placement.GroupName" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Volumes": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + } + } + }, + "InternetGateway": { + "identifiers": [ + { + "name": "Id", + "memberName": "InternetGatewayId" + } + ], + "shape": "InternetGateway", + "load": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "InternetGatewayIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "InternetGateways[0]" + }, + "actions": { + "AttachToVpc": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromVpc": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "KeyPair": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPairInfo", + "load": { + "request": { + "operation": "DescribeKeyPairs", + "params": [ + { "target": "KeyNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "KeyPairs[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "NetworkAcl": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkAclId" + } + ], + "shape": "NetworkAcl", + "load": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "NetworkAclIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkAcls[0]" + }, + "actions": { + "CreateEntry": { + "request": { + "operation": "CreateNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkAcl", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "DeleteEntry": { + "request": { + "operation": "DeleteNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceAssociation": { + "request": { + "operation": "ReplaceNetworkAclAssociation", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceEntry": { + "request": { + "operation": "ReplaceNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterface": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkInterfaceId" + } + ], + "shape": "NetworkInterface", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "NetworkInterfaceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0]" + }, + "actions": { + "AssignPrivateIpAddresses": { + "request": { + "operation": "AssignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Attach": { + "request": { + "operation": "AttachNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Detach": { + "request": { + "operation": "DetachNetworkInterface", + "params": [ + { "target": "AttachmentId", "source": "data", "path": "Attachment.AttachmentId" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "UnassignPrivateIpAddresses": { + "request": { + "operation": "UnassignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "PlacementGroup": { + "identifiers": [ + { + "name": "Name", + "memberName": "GroupName" + } + ], + "shape": "PlacementGroup", + "load": { + "request": { + "operation": "DescribePlacementGroups", + "params": [ + { "target": "GroupNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "PlacementGroups[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeletePlacementGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "placement-group-name" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + } + } + }, + "RouteTable": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableId" + } + ], + "shape": "RouteTable", + "load": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "RouteTables[0]" + }, + "actions": { + "AssociateWithSubnet": { + "request": { + "operation": "AssociateRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "AssociationId" } + ] + } + }, + "CreateRoute": { + "request": { + "operation": "CreateRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Associations": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[0].Associations[].RouteTableAssociationId" } + ], + "path": "RouteTables[0].Associations[]" + } + } + } + }, + "RouteTableAssociation": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableAssociationId" + } + ], + "shape": "RouteTableAssociation", + "actions": { + "Delete": { + "request": { + "operation": "DisassociateRouteTable", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceSubnet": { + "request": { + "operation": "ReplaceRouteTableAssociation", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NewAssociationId" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RouteTableId" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + } + } + }, + "SecurityGroup": { + "identifiers": [ + { + "name": "Id", + "memberName": "GroupId" + } + ], + "shape": "SecurityGroup", + "load": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "GroupIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "SecurityGroups[0]" + }, + "actions": { + "AuthorizeEgress": { + "request": { + "operation": "AuthorizeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "AuthorizeIngress": { + "request": { + "operation": "AuthorizeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSecurityGroup", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeEgress": { + "request": { + "operation": "RevokeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeIngress": { + "request": { + "operation": "RevokeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Snapshot": { + "identifiers": [ + { + "name": "Id", + "memberName": "SnapshotId" + } + ], + "shape": "Snapshot", + "load": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "SnapshotIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Snapshots[0]" + }, + "actions": { + "Copy": { + "request": { + "operation": "CopySnapshot", + "params": [ + { "target": "SourceSnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSnapshot", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifySnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Completed": { + "waiterName": "SnapshotCompleted", + "params": [ + { "target": "SnapshotIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Snapshots[]" + } + }, + "has": { + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VolumeId" } + ] + } + } + } + }, + "Subnet": { + "identifiers": [ + { + "name": "Id", + "memberName": "SubnetId" + } + ], + "shape": "Subnet", + "load": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "SubnetIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Subnets[0]" + }, + "actions": { + "CreateInstances": { + "request": { + "operation": "RunInstances", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateNetworkInterface": { + "request": { + "operation": "CreateNetworkInterface", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSubnet", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + } + } + }, + "Tag": { + "identifiers": [ + { + "name": "ResourceId", + "memberName": "ResourceId" + }, + { + "name": "Key", + "memberName": "Key" + }, + { + "name": "Value", + "memberName": "Value" + } + ], + "shape": "TagDescription", + "load": { + "request": { + "operation": "DescribeTags", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "key" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Key" }, + { "target": "Filters[1].Name", "source": "string", "value": "value" }, + { "target": "Filters[1].Values[0]", "source": "identifier", "name": "Value" } + ] + }, + "path": "Tags[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[0].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[0].Value", "source": "identifier", "name": "Value" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[*].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[*].Value", "source": "identifier", "name": "Value" } + ] + } + } + } + }, + "Volume": { + "identifiers": [ + { + "name": "Id", + "memberName": "VolumeId" + } + ], + "shape": "Volume", + "load": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Volumes[0]" + }, + "actions": { + "AttachToInstance": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateSnapshot": { + "request": { + "operation": "CreateSnapshot", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeStatus": { + "request": { + "operation": "DescribeVolumeStatus", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromInstance": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableIo": { + "request": { + "operation": "EnableVolumeIO", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "hasMany": { + "Snapshots": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "volume-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + } + } + }, + "Vpc": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcId" + } + ], + "shape": "Vpc", + "load": { + "request": { + "operation": "DescribeVpcs", + "params": [ + { "target": "VpcIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Vpcs[0]" + }, + "actions": { + "AssociateDhcpOptions": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachClassicLinkInstance": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachInternetGateway": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateNetworkAcl": { + "request": { + "operation": "CreateNetworkAcl", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateRouteTable": { + "request": { + "operation": "CreateRouteTable", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { + "operation": "CreateSecurityGroup", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSubnet": { + "request": { + "operation": "CreateSubnet", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkInstance": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachInternetGateway": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DisableClassicLink": { + "request": { + "operation": "DisableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableClassicLink": { + "request": { + "operation": "EnableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "RequestVpcPeeringConnection": { + "request": { + "operation": "CreateVpcPeeringConnection", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "data", "path": "DhcpOptionsId" } + ] + } + } + }, + "hasMany": { + "AcceptedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "accepter-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "NetworkAcls": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "RequestedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "requester-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "RouteTables": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Subnets": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + } + } + }, + "VpcPeeringConnection": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcPeeringConnectionId" + } + ], + "shape": "VpcPeeringConnection", + "load": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "VpcPeeringConnectionIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "VpcPeeringConnections[0]" + }, + "actions": { + "Accept": { + "request": { + "operation": "AcceptVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reject": { + "request": { + "operation": "RejectVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "AccepterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AccepterVpcInfo.VpcId" } + ] + } + }, + "RequesterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RequesterVpcInfo.VpcId" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2015-04-15/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2015-04-15/resources-1.json new file mode 100644 index 00000000..8ccf160a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2015-04-15/resources-1.json @@ -0,0 +1,2289 @@ +{ + "service": { + "actions": { + "CreateDhcpOptions": { + "request": { "operation": "CreateDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions.DhcpOptionsId" } + ], + "path": "DhcpOptions" + } + }, + "CreateInstances": { + "request": { "operation": "RunInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateInternetGateway": { + "request": { "operation": "CreateInternetGateway" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateway.InternetGatewayId" } + ], + "path": "InternetGateway" + } + }, + "CreateKeyPair": { + "request": { "operation": "CreateKeyPair" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ] + } + }, + "CreateNetworkAcl": { + "request": { "operation": "CreateNetworkAcl" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateNetworkInterface": { + "request": { "operation": "CreateNetworkInterface" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreatePlacementGroup": { + "request": { "operation": "CreatePlacementGroup" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "GroupName" } + ] + } + }, + "CreateRouteTable": { + "request": { "operation": "CreateRouteTable" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { "operation": "CreateSecurityGroup" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSnapshot": { + "request": { "operation": "CreateSnapshot" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateSubnet": { + "request": { "operation": "CreateSubnet" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { "operation": "CreateTags" }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "requestParameter", "path": "Resources[]" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "CreateVolume": { + "request": { "operation": "CreateVolume" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VolumeId" } + ], + "path": "@" + } + }, + "CreateVpc": { + "request": { "operation": "CreateVpc" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpc.VpcId" } + ], + "path": "Vpc" + } + }, + "CreateVpcPeeringConnection": { + "request": { "operation": "CreateVpcPeeringConnection" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + }, + "DisassociateRouteTable": { + "request": { "operation": "DisassociateRouteTable" } + }, + "ImportKeyPair": { + "request": { "operation": "ImportKeyPair" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ] + } + }, + "RegisterImage": { + "request": { "operation": "RegisterImage" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Instance": { + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "InternetGateway": { + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "NetworkAcl": { + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "NetworkInterface": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "RouteTableAssociation": { + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "SecurityGroup": { + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Snapshot": { + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "VpcPeeringConnection": { + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + } + }, + "hasMany": { + "DhcpOptionsSets": { + "request": { "operation": "DescribeDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions[].DhcpOptionsId" } + ], + "path": "DhcpOptions[]" + } + }, + "Images": { + "request": { "operation": "DescribeImages" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Images[].ImageId" } + ], + "path": "Images[]" + } + }, + "Instances": { + "request": { "operation": "DescribeInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { "operation": "DescribeInternetGateways" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "KeyPairs": { + "request": { "operation": "DescribeKeyPairs" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyPairs[].KeyName" } + ], + "path": "KeyPairs[]" + } + }, + "NetworkAcls": { + "request": { "operation": "DescribeNetworkAcls" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { "operation": "DescribeNetworkInterfaces" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroups": { + "request": { "operation": "DescribePlacementGroups" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "response", "path": "PlacementGroups[].GroupName" } + ], + "path": "PlacementGroups[]" + } + }, + "RouteTables": { + "request": { "operation": "DescribeRouteTables" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { "operation": "DescribeSecurityGroups" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Snapshots": { + "request": { "operation": "DescribeSnapshots" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + }, + "Subnets": { + "request": { "operation": "DescribeSubnets" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + }, + "Volumes": { + "request": { "operation": "DescribeVolumes" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcPeeringConnections": { + "request": { "operation": "DescribeVpcPeeringConnections" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Vpcs": { + "request": { "operation": "DescribeVpcs" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpcs[].VpcId" } + ], + "path": "Vpcs[]" + } + } + } + }, + "resources": { + "DhcpOptions": { + "identifiers": [ + { + "name": "Id", + "memberName": "DhcpOptionsId" + } + ], + "shape": "DhcpOptions", + "load": { + "request": { + "operation": "DescribeDhcpOptions", + "params": [ + { "target": "DhcpOptionsIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "DhcpOptions[0]" + }, + "actions": { + "AssociateWithVpc": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Image": { + "identifiers": [ + { + "name": "Id", + "memberName": "ImageId" + } + ], + "shape": "Image", + "load": { + "request": { + "operation": "DescribeImages", + "params": [ + { "target": "ImageIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Images[0]" + }, + "actions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Deregister": { + "request": { + "operation": "DeregisterImage", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Instance": { + "identifiers": [ + { + "name": "Id", + "memberName": "InstanceId" + } + ], + "shape": "Instance", + "load": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Reservations[0].Instances[0]" + }, + "actions": { + "AttachClassicLinkVpc": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachVolume": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ConsoleOutput": { + "request": { + "operation": "GetConsoleOutput", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateImage": { + "request": { + "operation": "CreateImage", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkVpc": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachVolume": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "PasswordData": { + "request": { + "operation": "GetPasswordData", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ReportStatus": { + "request": { + "operation": "ReportInstanceStatus", + "params": [ + { "target": "Instances[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetKernel": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "kernel" } + ] + } + }, + "ResetRamdisk": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "ramdisk" } + ] + } + }, + "ResetSourceDestCheck": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "sourceDestCheck" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "batchActions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "InstanceExists", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Running": { + "waiterName": "InstanceRunning", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Stopped": { + "waiterName": "InstanceStopped", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Terminated": { + "waiterName": "InstanceTerminated", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + } + }, + "has": { + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "data", "path": "ImageId" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "data", "path": "KeyName" } + ] + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "data", "path": "Placement.GroupName" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Volumes": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + } + } + }, + "InternetGateway": { + "identifiers": [ + { + "name": "Id", + "memberName": "InternetGatewayId" + } + ], + "shape": "InternetGateway", + "load": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "InternetGatewayIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "InternetGateways[0]" + }, + "actions": { + "AttachToVpc": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromVpc": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "KeyPair": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPairInfo", + "load": { + "request": { + "operation": "DescribeKeyPairs", + "params": [ + { "target": "KeyNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "KeyPairs[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "NetworkAcl": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkAclId" + } + ], + "shape": "NetworkAcl", + "load": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "NetworkAclIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkAcls[0]" + }, + "actions": { + "CreateEntry": { + "request": { + "operation": "CreateNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkAcl", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "DeleteEntry": { + "request": { + "operation": "DeleteNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceAssociation": { + "request": { + "operation": "ReplaceNetworkAclAssociation", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceEntry": { + "request": { + "operation": "ReplaceNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterface": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkInterfaceId" + } + ], + "shape": "NetworkInterface", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "NetworkInterfaceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0]" + }, + "actions": { + "AssignPrivateIpAddresses": { + "request": { + "operation": "AssignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Attach": { + "request": { + "operation": "AttachNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Detach": { + "request": { + "operation": "DetachNetworkInterface", + "params": [ + { "target": "AttachmentId", "source": "data", "path": "Attachment.AttachmentId" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "UnassignPrivateIpAddresses": { + "request": { + "operation": "UnassignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "PlacementGroup": { + "identifiers": [ + { + "name": "Name", + "memberName": "GroupName" + } + ], + "shape": "PlacementGroup", + "load": { + "request": { + "operation": "DescribePlacementGroups", + "params": [ + { "target": "GroupNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "PlacementGroups[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeletePlacementGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "placement-group-name" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + } + } + }, + "RouteTable": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableId" + } + ], + "shape": "RouteTable", + "load": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "RouteTables[0]" + }, + "actions": { + "AssociateWithSubnet": { + "request": { + "operation": "AssociateRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "AssociationId" } + ] + } + }, + "CreateRoute": { + "request": { + "operation": "CreateRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Associations": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[0].Associations[].RouteTableAssociationId" } + ], + "path": "RouteTables[0].Associations[]" + } + } + } + }, + "RouteTableAssociation": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableAssociationId" + } + ], + "shape": "RouteTableAssociation", + "actions": { + "Delete": { + "request": { + "operation": "DisassociateRouteTable", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceSubnet": { + "request": { + "operation": "ReplaceRouteTableAssociation", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NewAssociationId" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RouteTableId" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + } + } + }, + "SecurityGroup": { + "identifiers": [ + { + "name": "Id", + "memberName": "GroupId" + } + ], + "shape": "SecurityGroup", + "load": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "GroupIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "SecurityGroups[0]" + }, + "actions": { + "AuthorizeEgress": { + "request": { + "operation": "AuthorizeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "AuthorizeIngress": { + "request": { + "operation": "AuthorizeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSecurityGroup", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeEgress": { + "request": { + "operation": "RevokeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeIngress": { + "request": { + "operation": "RevokeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Snapshot": { + "identifiers": [ + { + "name": "Id", + "memberName": "SnapshotId" + } + ], + "shape": "Snapshot", + "load": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "SnapshotIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Snapshots[0]" + }, + "actions": { + "Copy": { + "request": { + "operation": "CopySnapshot", + "params": [ + { "target": "SourceSnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSnapshot", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifySnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Completed": { + "waiterName": "SnapshotCompleted", + "params": [ + { "target": "SnapshotIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Snapshots[]" + } + }, + "has": { + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VolumeId" } + ] + } + } + } + }, + "Subnet": { + "identifiers": [ + { + "name": "Id", + "memberName": "SubnetId" + } + ], + "shape": "Subnet", + "load": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "SubnetIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Subnets[0]" + }, + "actions": { + "CreateInstances": { + "request": { + "operation": "RunInstances", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateNetworkInterface": { + "request": { + "operation": "CreateNetworkInterface", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSubnet", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + } + } + }, + "Tag": { + "identifiers": [ + { + "name": "ResourceId", + "memberName": "ResourceId" + }, + { + "name": "Key", + "memberName": "Key" + }, + { + "name": "Value", + "memberName": "Value" + } + ], + "shape": "TagDescription", + "load": { + "request": { + "operation": "DescribeTags", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "key" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Key" }, + { "target": "Filters[1].Name", "source": "string", "value": "value" }, + { "target": "Filters[1].Values[0]", "source": "identifier", "name": "Value" } + ] + }, + "path": "Tags[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[0].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[0].Value", "source": "identifier", "name": "Value" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[*].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[*].Value", "source": "identifier", "name": "Value" } + ] + } + } + } + }, + "Volume": { + "identifiers": [ + { + "name": "Id", + "memberName": "VolumeId" + } + ], + "shape": "Volume", + "load": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Volumes[0]" + }, + "actions": { + "AttachToInstance": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateSnapshot": { + "request": { + "operation": "CreateSnapshot", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeStatus": { + "request": { + "operation": "DescribeVolumeStatus", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromInstance": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableIo": { + "request": { + "operation": "EnableVolumeIO", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "hasMany": { + "Snapshots": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "volume-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + } + } + }, + "Vpc": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcId" + } + ], + "shape": "Vpc", + "load": { + "request": { + "operation": "DescribeVpcs", + "params": [ + { "target": "VpcIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Vpcs[0]" + }, + "actions": { + "AssociateDhcpOptions": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachClassicLinkInstance": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachInternetGateway": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateNetworkAcl": { + "request": { + "operation": "CreateNetworkAcl", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateRouteTable": { + "request": { + "operation": "CreateRouteTable", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { + "operation": "CreateSecurityGroup", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSubnet": { + "request": { + "operation": "CreateSubnet", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkInstance": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachInternetGateway": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DisableClassicLink": { + "request": { + "operation": "DisableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableClassicLink": { + "request": { + "operation": "EnableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "RequestVpcPeeringConnection": { + "request": { + "operation": "CreateVpcPeeringConnection", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "data", "path": "DhcpOptionsId" } + ] + } + } + }, + "hasMany": { + "AcceptedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "accepter-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "NetworkAcls": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "RequestedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "requester-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "RouteTables": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Subnets": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + } + } + }, + "VpcPeeringConnection": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcPeeringConnectionId" + } + ], + "shape": "VpcPeeringConnection", + "load": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "VpcPeeringConnectionIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "VpcPeeringConnections[0]" + }, + "actions": { + "Accept": { + "request": { + "operation": "AcceptVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reject": { + "request": { + "operation": "RejectVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "AccepterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AccepterVpcInfo.VpcId" } + ] + } + }, + "RequesterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RequesterVpcInfo.VpcId" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2015-10-01/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2015-10-01/resources-1.json new file mode 100644 index 00000000..4831a36b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2015-10-01/resources-1.json @@ -0,0 +1,2567 @@ +{ + "service": { + "actions": { + "CreateDhcpOptions": { + "request": { "operation": "CreateDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions.DhcpOptionsId" } + ], + "path": "DhcpOptions" + } + }, + "CreateInstances": { + "request": { "operation": "RunInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateInternetGateway": { + "request": { "operation": "CreateInternetGateway" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateway.InternetGatewayId" } + ], + "path": "InternetGateway" + } + }, + "CreateKeyPair": { + "request": { "operation": "CreateKeyPair" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ], + "path": "@" + } + }, + "CreateNetworkAcl": { + "request": { "operation": "CreateNetworkAcl" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateNetworkInterface": { + "request": { "operation": "CreateNetworkInterface" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreatePlacementGroup": { + "request": { "operation": "CreatePlacementGroup" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "GroupName" } + ] + } + }, + "CreateRouteTable": { + "request": { "operation": "CreateRouteTable" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { "operation": "CreateSecurityGroup" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSnapshot": { + "request": { "operation": "CreateSnapshot" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateSubnet": { + "request": { "operation": "CreateSubnet" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { "operation": "CreateTags" } + }, + "CreateVolume": { + "request": { "operation": "CreateVolume" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VolumeId" } + ], + "path": "@" + } + }, + "CreateVpc": { + "request": { "operation": "CreateVpc" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpc.VpcId" } + ], + "path": "Vpc" + } + }, + "CreateVpcPeeringConnection": { + "request": { "operation": "CreateVpcPeeringConnection" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + }, + "DisassociateRouteTable": { + "request": { "operation": "DisassociateRouteTable" } + }, + "ImportKeyPair": { + "request": { "operation": "ImportKeyPair" }, + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ] + } + }, + "RegisterImage": { + "request": { "operation": "RegisterImage" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Instance": { + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "InternetGateway": { + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "NetworkAcl": { + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "NetworkInterface": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "RouteTableAssociation": { + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "SecurityGroup": { + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Snapshot": { + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "VpcPeeringConnection": { + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + } + }, + "hasMany": { + "ClassicAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "domain" }, + { "target": "Filters[0].Values[0]", "source": "string", "value": "standard" } + ] + }, + "resource": { + "type": "ClassicAddress", + "identifiers": [ + { "target": "PublicIp", "source": "response", "path": "Addresses[].PublicIp" } + ], + "path": "Addresses[]" + } + }, + "DhcpOptionsSets": { + "request": { "operation": "DescribeDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions[].DhcpOptionsId" } + ], + "path": "DhcpOptions[]" + } + }, + "Images": { + "request": { "operation": "DescribeImages" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Images[].ImageId" } + ], + "path": "Images[]" + } + }, + "Instances": { + "request": { "operation": "DescribeInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { "operation": "DescribeInternetGateways" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "KeyPairs": { + "request": { "operation": "DescribeKeyPairs" }, + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyPairs[].KeyName" } + ], + "path": "KeyPairs[]" + } + }, + "NetworkAcls": { + "request": { "operation": "DescribeNetworkAcls" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { "operation": "DescribeNetworkInterfaces" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroups": { + "request": { "operation": "DescribePlacementGroups" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "response", "path": "PlacementGroups[].GroupName" } + ], + "path": "PlacementGroups[]" + } + }, + "RouteTables": { + "request": { "operation": "DescribeRouteTables" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { "operation": "DescribeSecurityGroups" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Snapshots": { + "request": { "operation": "DescribeSnapshots" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + }, + "Subnets": { + "request": { "operation": "DescribeSubnets" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + }, + "Volumes": { + "request": { "operation": "DescribeVolumes" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "domain" }, + { "target": "Filters[0].Values[0]", "source": "string", "value": "vpc" } + ] + }, + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "response", "path": "Addresses[].AllocationId" } + ], + "path": "Addresses[]" + } + }, + "VpcPeeringConnections": { + "request": { "operation": "DescribeVpcPeeringConnections" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Vpcs": { + "request": { "operation": "DescribeVpcs" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpcs[].VpcId" } + ], + "path": "Vpcs[]" + } + } + } + }, + "resources": { + "ClassicAddress": { + "identifiers": [ + { + "name": "PublicIp" + } + ], + "shape": "Address", + "load": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "PublicIps[]", "source": "identifier", "name": "PublicIp" } + ] + }, + "path": "Addresses[0]" + }, + "actions": { + "Associate": { + "request": { + "operation": "AssociateAddress", + "params": [ + { "target": "PublicIp", "source": "identifier", "name": "PublicIp" } + ] + } + }, + "Disassociate": { + "request": { + "operation": "DisassociateAddress", + "params": [ + { "target": "PublicIp", "source": "data", "path": "PublicIp" } + ] + } + }, + "Release": { + "request": { + "operation": "ReleaseAddress", + "params": [ + { "target": "PublicIp", "source": "data", "path": "PublicIp" } + ] + } + } + } + }, + "DhcpOptions": { + "identifiers": [ + { + "name": "Id", + "memberName": "DhcpOptionsId" + } + ], + "shape": "DhcpOptions", + "load": { + "request": { + "operation": "DescribeDhcpOptions", + "params": [ + { "target": "DhcpOptionsIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "DhcpOptions[0]" + }, + "actions": { + "AssociateWithVpc": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Image": { + "identifiers": [ + { + "name": "Id", + "memberName": "ImageId" + } + ], + "shape": "Image", + "load": { + "request": { + "operation": "DescribeImages", + "params": [ + { "target": "ImageIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Images[0]" + }, + "actions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Deregister": { + "request": { + "operation": "DeregisterImage", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Instance": { + "identifiers": [ + { + "name": "Id", + "memberName": "InstanceId" + } + ], + "shape": "Instance", + "load": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Reservations[0].Instances[0]" + }, + "actions": { + "AttachClassicLinkVpc": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachVolume": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ConsoleOutput": { + "request": { + "operation": "GetConsoleOutput", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateImage": { + "request": { + "operation": "CreateImage", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkVpc": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachVolume": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "PasswordData": { + "request": { + "operation": "GetPasswordData", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ReportStatus": { + "request": { + "operation": "ReportInstanceStatus", + "params": [ + { "target": "Instances[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetKernel": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "kernel" } + ] + } + }, + "ResetRamdisk": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "ramdisk" } + ] + } + }, + "ResetSourceDestCheck": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "sourceDestCheck" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "batchActions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "InstanceExists", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Running": { + "waiterName": "InstanceRunning", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Stopped": { + "waiterName": "InstanceStopped", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Terminated": { + "waiterName": "InstanceTerminated", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + } + }, + "has": { + "ClassicAddress": { + "resource": { + "type": "ClassicAddress", + "identifiers": [ + { "target": "PublicIp", "source": "data", "path": "PublicIpAddress" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "data", "path": "ImageId" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "data", "path": "KeyName" } + ] + } + }, + "NetworkInterfaces": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "data", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "data", "path": "Placement.GroupName" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Volumes": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "response", "path": "Addresses[].AllocationId" } + ], + "path": "Addresses[]" + } + } + } + }, + "InternetGateway": { + "identifiers": [ + { + "name": "Id", + "memberName": "InternetGatewayId" + } + ], + "shape": "InternetGateway", + "load": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "InternetGatewayIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "InternetGateways[0]" + }, + "actions": { + "AttachToVpc": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromVpc": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "KeyPair": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPair", + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "KeyPairInfo": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPairInfo", + "load": { + "request": { + "operation": "DescribeKeyPairs", + "params": [ + { "target": "KeyNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "KeyPairs[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "NetworkAcl": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkAclId" + } + ], + "shape": "NetworkAcl", + "load": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "NetworkAclIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkAcls[0]" + }, + "actions": { + "CreateEntry": { + "request": { + "operation": "CreateNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkAcl", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "DeleteEntry": { + "request": { + "operation": "DeleteNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceAssociation": { + "request": { + "operation": "ReplaceNetworkAclAssociation", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceEntry": { + "request": { + "operation": "ReplaceNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterface": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkInterfaceId" + } + ], + "shape": "NetworkInterface", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "NetworkInterfaceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0]" + }, + "actions": { + "AssignPrivateIpAddresses": { + "request": { + "operation": "AssignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Attach": { + "request": { + "operation": "AttachNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Detach": { + "request": { + "operation": "DetachNetworkInterface", + "params": [ + { "target": "AttachmentId", "source": "data", "path": "Attachment.AttachmentId" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "UnassignPrivateIpAddresses": { + "request": { + "operation": "UnassignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Association": { + "resource": { + "type": "NetworkInterfaceAssociation", + "identifiers": [ + { "target": "Id", "source": "data", "path": "Association.AssociationId" } + ], + "path": "Association" + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterfaceAssociation": { + "identifiers": [ + { + "name": "Id" + } + ], + "shape": "InstanceNetworkInterfaceAssociation", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "association.association-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0].Association" + }, + "actions": { + "Delete": { + "request": { + "operation": "DisassociateAddress", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Address": { + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "data", "path": "AllocationId" } + ] + } + } + } + }, + "PlacementGroup": { + "identifiers": [ + { + "name": "Name", + "memberName": "GroupName" + } + ], + "shape": "PlacementGroup", + "load": { + "request": { + "operation": "DescribePlacementGroups", + "params": [ + { "target": "GroupNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "PlacementGroups[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeletePlacementGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "placement-group-name" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + } + } + }, + "Route": { + "identifiers": [ + { "name": "RouteTableId" }, + { + "name": "DestinationCidrBlock", + "memberName": "DestinationCidrBlock" + } + ], + "shape": "Route", + "actions": { + "Delete": { + "request": { + "operation": "DeleteRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "RouteTableId" }, + { "target": "DestinationCidrBlock", "source": "identifier", "name": "DestinationCidrBlock" } + ] + } + }, + "Replace": { + "request": { + "operation": "ReplaceRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "RouteTableId" }, + { "target": "DestinationCidrBlock", "source": "identifier", "name": "DestinationCidrBlock" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "identifier", "name": "RouteTableId" } + ] + } + } + } + }, + "RouteTable": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableId" + } + ], + "shape": "RouteTable", + "load": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "RouteTables[0]" + }, + "actions": { + "AssociateWithSubnet": { + "request": { + "operation": "AssociateRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "AssociationId" } + ] + } + }, + "CreateRoute": { + "request": { + "operation": "CreateRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Route", + "identifiers": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" }, + { "target": "DestinationCidrBlock", "source": "requestParameter", "path": "DestinationCidrBlock" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Routes": { + "resource": { + "type": "Route", + "identifiers": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" }, + { "target": "DestinationCidrBlock", "source": "data", "path": "Routes[].DestinationCidrBlock" } + ], + "path": "Routes[]" + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Associations": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[0].Associations[].RouteTableAssociationId" } + ], + "path": "RouteTables[0].Associations[]" + } + } + } + }, + "RouteTableAssociation": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableAssociationId" + } + ], + "shape": "RouteTableAssociation", + "actions": { + "Delete": { + "request": { + "operation": "DisassociateRouteTable", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceSubnet": { + "request": { + "operation": "ReplaceRouteTableAssociation", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NewAssociationId" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RouteTableId" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + } + } + }, + "SecurityGroup": { + "identifiers": [ + { + "name": "Id", + "memberName": "GroupId" + } + ], + "shape": "SecurityGroup", + "load": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "GroupIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "SecurityGroups[0]" + }, + "actions": { + "AuthorizeEgress": { + "request": { + "operation": "AuthorizeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "AuthorizeIngress": { + "request": { + "operation": "AuthorizeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSecurityGroup", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeEgress": { + "request": { + "operation": "RevokeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeIngress": { + "request": { + "operation": "RevokeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Snapshot": { + "identifiers": [ + { + "name": "Id", + "memberName": "SnapshotId" + } + ], + "shape": "Snapshot", + "load": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "SnapshotIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Snapshots[0]" + }, + "actions": { + "Copy": { + "request": { + "operation": "CopySnapshot", + "params": [ + { "target": "SourceSnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSnapshot", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifySnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Completed": { + "waiterName": "SnapshotCompleted", + "params": [ + { "target": "SnapshotIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Snapshots[]" + } + }, + "has": { + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VolumeId" } + ] + } + } + } + }, + "Subnet": { + "identifiers": [ + { + "name": "Id", + "memberName": "SubnetId" + } + ], + "shape": "Subnet", + "load": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "SubnetIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Subnets[0]" + }, + "actions": { + "CreateInstances": { + "request": { + "operation": "RunInstances", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateNetworkInterface": { + "request": { + "operation": "CreateNetworkInterface", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSubnet", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + } + } + }, + "Tag": { + "identifiers": [ + { + "name": "ResourceId", + "memberName": "ResourceId" + }, + { + "name": "Key", + "memberName": "Key" + }, + { + "name": "Value", + "memberName": "Value" + } + ], + "shape": "TagDescription", + "load": { + "request": { + "operation": "DescribeTags", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "key" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Key" }, + { "target": "Filters[1].Name", "source": "string", "value": "value" }, + { "target": "Filters[1].Values[0]", "source": "identifier", "name": "Value" } + ] + }, + "path": "Tags[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[0].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[0].Value", "source": "identifier", "name": "Value" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[*].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[*].Value", "source": "identifier", "name": "Value" } + ] + } + } + } + }, + "Volume": { + "identifiers": [ + { + "name": "Id", + "memberName": "VolumeId" + } + ], + "shape": "Volume", + "load": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Volumes[0]" + }, + "actions": { + "AttachToInstance": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateSnapshot": { + "request": { + "operation": "CreateSnapshot", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeStatus": { + "request": { + "operation": "DescribeVolumeStatus", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromInstance": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableIo": { + "request": { + "operation": "EnableVolumeIO", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "hasMany": { + "Snapshots": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "volume-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + } + } + }, + "Vpc": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcId" + } + ], + "shape": "Vpc", + "load": { + "request": { + "operation": "DescribeVpcs", + "params": [ + { "target": "VpcIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Vpcs[0]" + }, + "actions": { + "AssociateDhcpOptions": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachClassicLinkInstance": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachInternetGateway": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateNetworkAcl": { + "request": { + "operation": "CreateNetworkAcl", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateRouteTable": { + "request": { + "operation": "CreateRouteTable", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { + "operation": "CreateSecurityGroup", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSubnet": { + "request": { + "operation": "CreateSubnet", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkInstance": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachInternetGateway": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DisableClassicLink": { + "request": { + "operation": "DisableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableClassicLink": { + "request": { + "operation": "EnableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "RequestVpcPeeringConnection": { + "request": { + "operation": "CreateVpcPeeringConnection", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "data", "path": "DhcpOptionsId" } + ] + } + } + }, + "hasMany": { + "AcceptedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "accepter-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "NetworkAcls": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "RequestedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "requester-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "RouteTables": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Subnets": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + } + } + }, + "VpcPeeringConnection": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcPeeringConnectionId" + } + ], + "shape": "VpcPeeringConnection", + "load": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "VpcPeeringConnectionIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "VpcPeeringConnections[0]" + }, + "actions": { + "Accept": { + "request": { + "operation": "AcceptVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reject": { + "request": { + "operation": "RejectVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "VpcPeeringConnectionExists", + "params": [ + { "target": "VpcPeeringConnectionIds[]", "source": "identifier", "name": "Id" } + ], + "path": "VpcPeeringConnections[0]" + } + }, + "has": { + "AccepterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AccepterVpcInfo.VpcId" } + ] + } + }, + "RequesterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RequesterVpcInfo.VpcId" } + ] + } + } + } + }, + "VpcAddress": { + "identifiers": [ + { + "name": "AllocationId" + } + ], + "shape": "Address", + "load": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "AllocationIds[0]", "source": "identifier", "name": "AllocationId" } + ] + }, + "path": "Addresses[0]" + }, + "actions": { + "Associate": { + "request": { + "operation": "AssociateAddress", + "params": [ + { "target": "AllocationId", "source": "identifier", "name": "AllocationId" } + ] + } + }, + "Release": { + "request": { + "operation": "ReleaseAddress", + "params": [ + { "target": "AllocationId", "source": "data", "path": "AllocationId" } + ] + } + } + }, + "has": { + "Association": { + "resource": { + "type": "NetworkInterfaceAssociation", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AssociationId" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2016-04-01/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2016-04-01/resources-1.json new file mode 100644 index 00000000..4831a36b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2016-04-01/resources-1.json @@ -0,0 +1,2567 @@ +{ + "service": { + "actions": { + "CreateDhcpOptions": { + "request": { "operation": "CreateDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions.DhcpOptionsId" } + ], + "path": "DhcpOptions" + } + }, + "CreateInstances": { + "request": { "operation": "RunInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateInternetGateway": { + "request": { "operation": "CreateInternetGateway" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateway.InternetGatewayId" } + ], + "path": "InternetGateway" + } + }, + "CreateKeyPair": { + "request": { "operation": "CreateKeyPair" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ], + "path": "@" + } + }, + "CreateNetworkAcl": { + "request": { "operation": "CreateNetworkAcl" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateNetworkInterface": { + "request": { "operation": "CreateNetworkInterface" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreatePlacementGroup": { + "request": { "operation": "CreatePlacementGroup" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "GroupName" } + ] + } + }, + "CreateRouteTable": { + "request": { "operation": "CreateRouteTable" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { "operation": "CreateSecurityGroup" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSnapshot": { + "request": { "operation": "CreateSnapshot" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateSubnet": { + "request": { "operation": "CreateSubnet" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { "operation": "CreateTags" } + }, + "CreateVolume": { + "request": { "operation": "CreateVolume" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VolumeId" } + ], + "path": "@" + } + }, + "CreateVpc": { + "request": { "operation": "CreateVpc" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpc.VpcId" } + ], + "path": "Vpc" + } + }, + "CreateVpcPeeringConnection": { + "request": { "operation": "CreateVpcPeeringConnection" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + }, + "DisassociateRouteTable": { + "request": { "operation": "DisassociateRouteTable" } + }, + "ImportKeyPair": { + "request": { "operation": "ImportKeyPair" }, + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ] + } + }, + "RegisterImage": { + "request": { "operation": "RegisterImage" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Instance": { + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "InternetGateway": { + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "NetworkAcl": { + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "NetworkInterface": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "RouteTableAssociation": { + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "SecurityGroup": { + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Snapshot": { + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "VpcPeeringConnection": { + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + } + }, + "hasMany": { + "ClassicAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "domain" }, + { "target": "Filters[0].Values[0]", "source": "string", "value": "standard" } + ] + }, + "resource": { + "type": "ClassicAddress", + "identifiers": [ + { "target": "PublicIp", "source": "response", "path": "Addresses[].PublicIp" } + ], + "path": "Addresses[]" + } + }, + "DhcpOptionsSets": { + "request": { "operation": "DescribeDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions[].DhcpOptionsId" } + ], + "path": "DhcpOptions[]" + } + }, + "Images": { + "request": { "operation": "DescribeImages" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Images[].ImageId" } + ], + "path": "Images[]" + } + }, + "Instances": { + "request": { "operation": "DescribeInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { "operation": "DescribeInternetGateways" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "KeyPairs": { + "request": { "operation": "DescribeKeyPairs" }, + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyPairs[].KeyName" } + ], + "path": "KeyPairs[]" + } + }, + "NetworkAcls": { + "request": { "operation": "DescribeNetworkAcls" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { "operation": "DescribeNetworkInterfaces" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroups": { + "request": { "operation": "DescribePlacementGroups" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "response", "path": "PlacementGroups[].GroupName" } + ], + "path": "PlacementGroups[]" + } + }, + "RouteTables": { + "request": { "operation": "DescribeRouteTables" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { "operation": "DescribeSecurityGroups" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Snapshots": { + "request": { "operation": "DescribeSnapshots" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + }, + "Subnets": { + "request": { "operation": "DescribeSubnets" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + }, + "Volumes": { + "request": { "operation": "DescribeVolumes" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "domain" }, + { "target": "Filters[0].Values[0]", "source": "string", "value": "vpc" } + ] + }, + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "response", "path": "Addresses[].AllocationId" } + ], + "path": "Addresses[]" + } + }, + "VpcPeeringConnections": { + "request": { "operation": "DescribeVpcPeeringConnections" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Vpcs": { + "request": { "operation": "DescribeVpcs" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpcs[].VpcId" } + ], + "path": "Vpcs[]" + } + } + } + }, + "resources": { + "ClassicAddress": { + "identifiers": [ + { + "name": "PublicIp" + } + ], + "shape": "Address", + "load": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "PublicIps[]", "source": "identifier", "name": "PublicIp" } + ] + }, + "path": "Addresses[0]" + }, + "actions": { + "Associate": { + "request": { + "operation": "AssociateAddress", + "params": [ + { "target": "PublicIp", "source": "identifier", "name": "PublicIp" } + ] + } + }, + "Disassociate": { + "request": { + "operation": "DisassociateAddress", + "params": [ + { "target": "PublicIp", "source": "data", "path": "PublicIp" } + ] + } + }, + "Release": { + "request": { + "operation": "ReleaseAddress", + "params": [ + { "target": "PublicIp", "source": "data", "path": "PublicIp" } + ] + } + } + } + }, + "DhcpOptions": { + "identifiers": [ + { + "name": "Id", + "memberName": "DhcpOptionsId" + } + ], + "shape": "DhcpOptions", + "load": { + "request": { + "operation": "DescribeDhcpOptions", + "params": [ + { "target": "DhcpOptionsIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "DhcpOptions[0]" + }, + "actions": { + "AssociateWithVpc": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Image": { + "identifiers": [ + { + "name": "Id", + "memberName": "ImageId" + } + ], + "shape": "Image", + "load": { + "request": { + "operation": "DescribeImages", + "params": [ + { "target": "ImageIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Images[0]" + }, + "actions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Deregister": { + "request": { + "operation": "DeregisterImage", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Instance": { + "identifiers": [ + { + "name": "Id", + "memberName": "InstanceId" + } + ], + "shape": "Instance", + "load": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Reservations[0].Instances[0]" + }, + "actions": { + "AttachClassicLinkVpc": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachVolume": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ConsoleOutput": { + "request": { + "operation": "GetConsoleOutput", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateImage": { + "request": { + "operation": "CreateImage", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkVpc": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachVolume": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "PasswordData": { + "request": { + "operation": "GetPasswordData", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ReportStatus": { + "request": { + "operation": "ReportInstanceStatus", + "params": [ + { "target": "Instances[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetKernel": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "kernel" } + ] + } + }, + "ResetRamdisk": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "ramdisk" } + ] + } + }, + "ResetSourceDestCheck": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "sourceDestCheck" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "batchActions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "InstanceExists", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Running": { + "waiterName": "InstanceRunning", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Stopped": { + "waiterName": "InstanceStopped", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Terminated": { + "waiterName": "InstanceTerminated", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + } + }, + "has": { + "ClassicAddress": { + "resource": { + "type": "ClassicAddress", + "identifiers": [ + { "target": "PublicIp", "source": "data", "path": "PublicIpAddress" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "data", "path": "ImageId" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "data", "path": "KeyName" } + ] + } + }, + "NetworkInterfaces": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "data", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "data", "path": "Placement.GroupName" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Volumes": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "response", "path": "Addresses[].AllocationId" } + ], + "path": "Addresses[]" + } + } + } + }, + "InternetGateway": { + "identifiers": [ + { + "name": "Id", + "memberName": "InternetGatewayId" + } + ], + "shape": "InternetGateway", + "load": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "InternetGatewayIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "InternetGateways[0]" + }, + "actions": { + "AttachToVpc": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromVpc": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "KeyPair": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPair", + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "KeyPairInfo": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPairInfo", + "load": { + "request": { + "operation": "DescribeKeyPairs", + "params": [ + { "target": "KeyNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "KeyPairs[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "NetworkAcl": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkAclId" + } + ], + "shape": "NetworkAcl", + "load": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "NetworkAclIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkAcls[0]" + }, + "actions": { + "CreateEntry": { + "request": { + "operation": "CreateNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkAcl", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "DeleteEntry": { + "request": { + "operation": "DeleteNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceAssociation": { + "request": { + "operation": "ReplaceNetworkAclAssociation", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceEntry": { + "request": { + "operation": "ReplaceNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterface": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkInterfaceId" + } + ], + "shape": "NetworkInterface", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "NetworkInterfaceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0]" + }, + "actions": { + "AssignPrivateIpAddresses": { + "request": { + "operation": "AssignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Attach": { + "request": { + "operation": "AttachNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Detach": { + "request": { + "operation": "DetachNetworkInterface", + "params": [ + { "target": "AttachmentId", "source": "data", "path": "Attachment.AttachmentId" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "UnassignPrivateIpAddresses": { + "request": { + "operation": "UnassignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Association": { + "resource": { + "type": "NetworkInterfaceAssociation", + "identifiers": [ + { "target": "Id", "source": "data", "path": "Association.AssociationId" } + ], + "path": "Association" + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterfaceAssociation": { + "identifiers": [ + { + "name": "Id" + } + ], + "shape": "InstanceNetworkInterfaceAssociation", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "association.association-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0].Association" + }, + "actions": { + "Delete": { + "request": { + "operation": "DisassociateAddress", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Address": { + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "data", "path": "AllocationId" } + ] + } + } + } + }, + "PlacementGroup": { + "identifiers": [ + { + "name": "Name", + "memberName": "GroupName" + } + ], + "shape": "PlacementGroup", + "load": { + "request": { + "operation": "DescribePlacementGroups", + "params": [ + { "target": "GroupNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "PlacementGroups[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeletePlacementGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "placement-group-name" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + } + } + }, + "Route": { + "identifiers": [ + { "name": "RouteTableId" }, + { + "name": "DestinationCidrBlock", + "memberName": "DestinationCidrBlock" + } + ], + "shape": "Route", + "actions": { + "Delete": { + "request": { + "operation": "DeleteRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "RouteTableId" }, + { "target": "DestinationCidrBlock", "source": "identifier", "name": "DestinationCidrBlock" } + ] + } + }, + "Replace": { + "request": { + "operation": "ReplaceRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "RouteTableId" }, + { "target": "DestinationCidrBlock", "source": "identifier", "name": "DestinationCidrBlock" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "identifier", "name": "RouteTableId" } + ] + } + } + } + }, + "RouteTable": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableId" + } + ], + "shape": "RouteTable", + "load": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "RouteTables[0]" + }, + "actions": { + "AssociateWithSubnet": { + "request": { + "operation": "AssociateRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "AssociationId" } + ] + } + }, + "CreateRoute": { + "request": { + "operation": "CreateRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Route", + "identifiers": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" }, + { "target": "DestinationCidrBlock", "source": "requestParameter", "path": "DestinationCidrBlock" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Routes": { + "resource": { + "type": "Route", + "identifiers": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" }, + { "target": "DestinationCidrBlock", "source": "data", "path": "Routes[].DestinationCidrBlock" } + ], + "path": "Routes[]" + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Associations": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[0].Associations[].RouteTableAssociationId" } + ], + "path": "RouteTables[0].Associations[]" + } + } + } + }, + "RouteTableAssociation": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableAssociationId" + } + ], + "shape": "RouteTableAssociation", + "actions": { + "Delete": { + "request": { + "operation": "DisassociateRouteTable", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceSubnet": { + "request": { + "operation": "ReplaceRouteTableAssociation", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NewAssociationId" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RouteTableId" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + } + } + }, + "SecurityGroup": { + "identifiers": [ + { + "name": "Id", + "memberName": "GroupId" + } + ], + "shape": "SecurityGroup", + "load": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "GroupIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "SecurityGroups[0]" + }, + "actions": { + "AuthorizeEgress": { + "request": { + "operation": "AuthorizeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "AuthorizeIngress": { + "request": { + "operation": "AuthorizeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSecurityGroup", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeEgress": { + "request": { + "operation": "RevokeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeIngress": { + "request": { + "operation": "RevokeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Snapshot": { + "identifiers": [ + { + "name": "Id", + "memberName": "SnapshotId" + } + ], + "shape": "Snapshot", + "load": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "SnapshotIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Snapshots[0]" + }, + "actions": { + "Copy": { + "request": { + "operation": "CopySnapshot", + "params": [ + { "target": "SourceSnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSnapshot", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifySnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Completed": { + "waiterName": "SnapshotCompleted", + "params": [ + { "target": "SnapshotIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Snapshots[]" + } + }, + "has": { + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VolumeId" } + ] + } + } + } + }, + "Subnet": { + "identifiers": [ + { + "name": "Id", + "memberName": "SubnetId" + } + ], + "shape": "Subnet", + "load": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "SubnetIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Subnets[0]" + }, + "actions": { + "CreateInstances": { + "request": { + "operation": "RunInstances", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateNetworkInterface": { + "request": { + "operation": "CreateNetworkInterface", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSubnet", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + } + } + }, + "Tag": { + "identifiers": [ + { + "name": "ResourceId", + "memberName": "ResourceId" + }, + { + "name": "Key", + "memberName": "Key" + }, + { + "name": "Value", + "memberName": "Value" + } + ], + "shape": "TagDescription", + "load": { + "request": { + "operation": "DescribeTags", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "key" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Key" }, + { "target": "Filters[1].Name", "source": "string", "value": "value" }, + { "target": "Filters[1].Values[0]", "source": "identifier", "name": "Value" } + ] + }, + "path": "Tags[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[0].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[0].Value", "source": "identifier", "name": "Value" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[*].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[*].Value", "source": "identifier", "name": "Value" } + ] + } + } + } + }, + "Volume": { + "identifiers": [ + { + "name": "Id", + "memberName": "VolumeId" + } + ], + "shape": "Volume", + "load": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Volumes[0]" + }, + "actions": { + "AttachToInstance": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateSnapshot": { + "request": { + "operation": "CreateSnapshot", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeStatus": { + "request": { + "operation": "DescribeVolumeStatus", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromInstance": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableIo": { + "request": { + "operation": "EnableVolumeIO", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "hasMany": { + "Snapshots": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "volume-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + } + } + }, + "Vpc": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcId" + } + ], + "shape": "Vpc", + "load": { + "request": { + "operation": "DescribeVpcs", + "params": [ + { "target": "VpcIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Vpcs[0]" + }, + "actions": { + "AssociateDhcpOptions": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachClassicLinkInstance": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachInternetGateway": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateNetworkAcl": { + "request": { + "operation": "CreateNetworkAcl", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateRouteTable": { + "request": { + "operation": "CreateRouteTable", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { + "operation": "CreateSecurityGroup", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSubnet": { + "request": { + "operation": "CreateSubnet", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkInstance": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachInternetGateway": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DisableClassicLink": { + "request": { + "operation": "DisableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableClassicLink": { + "request": { + "operation": "EnableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "RequestVpcPeeringConnection": { + "request": { + "operation": "CreateVpcPeeringConnection", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "data", "path": "DhcpOptionsId" } + ] + } + } + }, + "hasMany": { + "AcceptedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "accepter-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "NetworkAcls": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "RequestedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "requester-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "RouteTables": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Subnets": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + } + } + }, + "VpcPeeringConnection": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcPeeringConnectionId" + } + ], + "shape": "VpcPeeringConnection", + "load": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "VpcPeeringConnectionIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "VpcPeeringConnections[0]" + }, + "actions": { + "Accept": { + "request": { + "operation": "AcceptVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reject": { + "request": { + "operation": "RejectVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "VpcPeeringConnectionExists", + "params": [ + { "target": "VpcPeeringConnectionIds[]", "source": "identifier", "name": "Id" } + ], + "path": "VpcPeeringConnections[0]" + } + }, + "has": { + "AccepterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AccepterVpcInfo.VpcId" } + ] + } + }, + "RequesterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RequesterVpcInfo.VpcId" } + ] + } + } + } + }, + "VpcAddress": { + "identifiers": [ + { + "name": "AllocationId" + } + ], + "shape": "Address", + "load": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "AllocationIds[0]", "source": "identifier", "name": "AllocationId" } + ] + }, + "path": "Addresses[0]" + }, + "actions": { + "Associate": { + "request": { + "operation": "AssociateAddress", + "params": [ + { "target": "AllocationId", "source": "identifier", "name": "AllocationId" } + ] + } + }, + "Release": { + "request": { + "operation": "ReleaseAddress", + "params": [ + { "target": "AllocationId", "source": "data", "path": "AllocationId" } + ] + } + } + }, + "has": { + "Association": { + "resource": { + "type": "NetworkInterfaceAssociation", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AssociationId" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2016-09-15/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2016-09-15/resources-1.json new file mode 100644 index 00000000..4831a36b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2016-09-15/resources-1.json @@ -0,0 +1,2567 @@ +{ + "service": { + "actions": { + "CreateDhcpOptions": { + "request": { "operation": "CreateDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions.DhcpOptionsId" } + ], + "path": "DhcpOptions" + } + }, + "CreateInstances": { + "request": { "operation": "RunInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateInternetGateway": { + "request": { "operation": "CreateInternetGateway" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateway.InternetGatewayId" } + ], + "path": "InternetGateway" + } + }, + "CreateKeyPair": { + "request": { "operation": "CreateKeyPair" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ], + "path": "@" + } + }, + "CreateNetworkAcl": { + "request": { "operation": "CreateNetworkAcl" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateNetworkInterface": { + "request": { "operation": "CreateNetworkInterface" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreatePlacementGroup": { + "request": { "operation": "CreatePlacementGroup" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "GroupName" } + ] + } + }, + "CreateRouteTable": { + "request": { "operation": "CreateRouteTable" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { "operation": "CreateSecurityGroup" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSnapshot": { + "request": { "operation": "CreateSnapshot" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateSubnet": { + "request": { "operation": "CreateSubnet" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { "operation": "CreateTags" } + }, + "CreateVolume": { + "request": { "operation": "CreateVolume" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VolumeId" } + ], + "path": "@" + } + }, + "CreateVpc": { + "request": { "operation": "CreateVpc" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpc.VpcId" } + ], + "path": "Vpc" + } + }, + "CreateVpcPeeringConnection": { + "request": { "operation": "CreateVpcPeeringConnection" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + }, + "DisassociateRouteTable": { + "request": { "operation": "DisassociateRouteTable" } + }, + "ImportKeyPair": { + "request": { "operation": "ImportKeyPair" }, + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ] + } + }, + "RegisterImage": { + "request": { "operation": "RegisterImage" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Instance": { + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "InternetGateway": { + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "NetworkAcl": { + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "NetworkInterface": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "RouteTableAssociation": { + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "SecurityGroup": { + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Snapshot": { + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "VpcPeeringConnection": { + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + } + }, + "hasMany": { + "ClassicAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "domain" }, + { "target": "Filters[0].Values[0]", "source": "string", "value": "standard" } + ] + }, + "resource": { + "type": "ClassicAddress", + "identifiers": [ + { "target": "PublicIp", "source": "response", "path": "Addresses[].PublicIp" } + ], + "path": "Addresses[]" + } + }, + "DhcpOptionsSets": { + "request": { "operation": "DescribeDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions[].DhcpOptionsId" } + ], + "path": "DhcpOptions[]" + } + }, + "Images": { + "request": { "operation": "DescribeImages" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Images[].ImageId" } + ], + "path": "Images[]" + } + }, + "Instances": { + "request": { "operation": "DescribeInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { "operation": "DescribeInternetGateways" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "KeyPairs": { + "request": { "operation": "DescribeKeyPairs" }, + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyPairs[].KeyName" } + ], + "path": "KeyPairs[]" + } + }, + "NetworkAcls": { + "request": { "operation": "DescribeNetworkAcls" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { "operation": "DescribeNetworkInterfaces" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroups": { + "request": { "operation": "DescribePlacementGroups" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "response", "path": "PlacementGroups[].GroupName" } + ], + "path": "PlacementGroups[]" + } + }, + "RouteTables": { + "request": { "operation": "DescribeRouteTables" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { "operation": "DescribeSecurityGroups" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Snapshots": { + "request": { "operation": "DescribeSnapshots" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + }, + "Subnets": { + "request": { "operation": "DescribeSubnets" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + }, + "Volumes": { + "request": { "operation": "DescribeVolumes" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "domain" }, + { "target": "Filters[0].Values[0]", "source": "string", "value": "vpc" } + ] + }, + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "response", "path": "Addresses[].AllocationId" } + ], + "path": "Addresses[]" + } + }, + "VpcPeeringConnections": { + "request": { "operation": "DescribeVpcPeeringConnections" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Vpcs": { + "request": { "operation": "DescribeVpcs" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpcs[].VpcId" } + ], + "path": "Vpcs[]" + } + } + } + }, + "resources": { + "ClassicAddress": { + "identifiers": [ + { + "name": "PublicIp" + } + ], + "shape": "Address", + "load": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "PublicIps[]", "source": "identifier", "name": "PublicIp" } + ] + }, + "path": "Addresses[0]" + }, + "actions": { + "Associate": { + "request": { + "operation": "AssociateAddress", + "params": [ + { "target": "PublicIp", "source": "identifier", "name": "PublicIp" } + ] + } + }, + "Disassociate": { + "request": { + "operation": "DisassociateAddress", + "params": [ + { "target": "PublicIp", "source": "data", "path": "PublicIp" } + ] + } + }, + "Release": { + "request": { + "operation": "ReleaseAddress", + "params": [ + { "target": "PublicIp", "source": "data", "path": "PublicIp" } + ] + } + } + } + }, + "DhcpOptions": { + "identifiers": [ + { + "name": "Id", + "memberName": "DhcpOptionsId" + } + ], + "shape": "DhcpOptions", + "load": { + "request": { + "operation": "DescribeDhcpOptions", + "params": [ + { "target": "DhcpOptionsIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "DhcpOptions[0]" + }, + "actions": { + "AssociateWithVpc": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Image": { + "identifiers": [ + { + "name": "Id", + "memberName": "ImageId" + } + ], + "shape": "Image", + "load": { + "request": { + "operation": "DescribeImages", + "params": [ + { "target": "ImageIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Images[0]" + }, + "actions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Deregister": { + "request": { + "operation": "DeregisterImage", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Instance": { + "identifiers": [ + { + "name": "Id", + "memberName": "InstanceId" + } + ], + "shape": "Instance", + "load": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Reservations[0].Instances[0]" + }, + "actions": { + "AttachClassicLinkVpc": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachVolume": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ConsoleOutput": { + "request": { + "operation": "GetConsoleOutput", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateImage": { + "request": { + "operation": "CreateImage", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkVpc": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachVolume": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "PasswordData": { + "request": { + "operation": "GetPasswordData", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ReportStatus": { + "request": { + "operation": "ReportInstanceStatus", + "params": [ + { "target": "Instances[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetKernel": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "kernel" } + ] + } + }, + "ResetRamdisk": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "ramdisk" } + ] + } + }, + "ResetSourceDestCheck": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "sourceDestCheck" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "batchActions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "InstanceExists", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Running": { + "waiterName": "InstanceRunning", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Stopped": { + "waiterName": "InstanceStopped", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Terminated": { + "waiterName": "InstanceTerminated", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + } + }, + "has": { + "ClassicAddress": { + "resource": { + "type": "ClassicAddress", + "identifiers": [ + { "target": "PublicIp", "source": "data", "path": "PublicIpAddress" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "data", "path": "ImageId" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "data", "path": "KeyName" } + ] + } + }, + "NetworkInterfaces": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "data", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "data", "path": "Placement.GroupName" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Volumes": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "response", "path": "Addresses[].AllocationId" } + ], + "path": "Addresses[]" + } + } + } + }, + "InternetGateway": { + "identifiers": [ + { + "name": "Id", + "memberName": "InternetGatewayId" + } + ], + "shape": "InternetGateway", + "load": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "InternetGatewayIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "InternetGateways[0]" + }, + "actions": { + "AttachToVpc": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromVpc": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "KeyPair": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPair", + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "KeyPairInfo": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPairInfo", + "load": { + "request": { + "operation": "DescribeKeyPairs", + "params": [ + { "target": "KeyNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "KeyPairs[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "NetworkAcl": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkAclId" + } + ], + "shape": "NetworkAcl", + "load": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "NetworkAclIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkAcls[0]" + }, + "actions": { + "CreateEntry": { + "request": { + "operation": "CreateNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkAcl", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "DeleteEntry": { + "request": { + "operation": "DeleteNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceAssociation": { + "request": { + "operation": "ReplaceNetworkAclAssociation", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceEntry": { + "request": { + "operation": "ReplaceNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterface": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkInterfaceId" + } + ], + "shape": "NetworkInterface", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "NetworkInterfaceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0]" + }, + "actions": { + "AssignPrivateIpAddresses": { + "request": { + "operation": "AssignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Attach": { + "request": { + "operation": "AttachNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Detach": { + "request": { + "operation": "DetachNetworkInterface", + "params": [ + { "target": "AttachmentId", "source": "data", "path": "Attachment.AttachmentId" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "UnassignPrivateIpAddresses": { + "request": { + "operation": "UnassignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Association": { + "resource": { + "type": "NetworkInterfaceAssociation", + "identifiers": [ + { "target": "Id", "source": "data", "path": "Association.AssociationId" } + ], + "path": "Association" + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterfaceAssociation": { + "identifiers": [ + { + "name": "Id" + } + ], + "shape": "InstanceNetworkInterfaceAssociation", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "association.association-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0].Association" + }, + "actions": { + "Delete": { + "request": { + "operation": "DisassociateAddress", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Address": { + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "data", "path": "AllocationId" } + ] + } + } + } + }, + "PlacementGroup": { + "identifiers": [ + { + "name": "Name", + "memberName": "GroupName" + } + ], + "shape": "PlacementGroup", + "load": { + "request": { + "operation": "DescribePlacementGroups", + "params": [ + { "target": "GroupNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "PlacementGroups[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeletePlacementGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "placement-group-name" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + } + } + }, + "Route": { + "identifiers": [ + { "name": "RouteTableId" }, + { + "name": "DestinationCidrBlock", + "memberName": "DestinationCidrBlock" + } + ], + "shape": "Route", + "actions": { + "Delete": { + "request": { + "operation": "DeleteRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "RouteTableId" }, + { "target": "DestinationCidrBlock", "source": "identifier", "name": "DestinationCidrBlock" } + ] + } + }, + "Replace": { + "request": { + "operation": "ReplaceRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "RouteTableId" }, + { "target": "DestinationCidrBlock", "source": "identifier", "name": "DestinationCidrBlock" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "identifier", "name": "RouteTableId" } + ] + } + } + } + }, + "RouteTable": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableId" + } + ], + "shape": "RouteTable", + "load": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "RouteTables[0]" + }, + "actions": { + "AssociateWithSubnet": { + "request": { + "operation": "AssociateRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "AssociationId" } + ] + } + }, + "CreateRoute": { + "request": { + "operation": "CreateRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Route", + "identifiers": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" }, + { "target": "DestinationCidrBlock", "source": "requestParameter", "path": "DestinationCidrBlock" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Routes": { + "resource": { + "type": "Route", + "identifiers": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" }, + { "target": "DestinationCidrBlock", "source": "data", "path": "Routes[].DestinationCidrBlock" } + ], + "path": "Routes[]" + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Associations": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[0].Associations[].RouteTableAssociationId" } + ], + "path": "RouteTables[0].Associations[]" + } + } + } + }, + "RouteTableAssociation": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableAssociationId" + } + ], + "shape": "RouteTableAssociation", + "actions": { + "Delete": { + "request": { + "operation": "DisassociateRouteTable", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceSubnet": { + "request": { + "operation": "ReplaceRouteTableAssociation", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NewAssociationId" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RouteTableId" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + } + } + }, + "SecurityGroup": { + "identifiers": [ + { + "name": "Id", + "memberName": "GroupId" + } + ], + "shape": "SecurityGroup", + "load": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "GroupIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "SecurityGroups[0]" + }, + "actions": { + "AuthorizeEgress": { + "request": { + "operation": "AuthorizeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "AuthorizeIngress": { + "request": { + "operation": "AuthorizeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSecurityGroup", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeEgress": { + "request": { + "operation": "RevokeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeIngress": { + "request": { + "operation": "RevokeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Snapshot": { + "identifiers": [ + { + "name": "Id", + "memberName": "SnapshotId" + } + ], + "shape": "Snapshot", + "load": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "SnapshotIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Snapshots[0]" + }, + "actions": { + "Copy": { + "request": { + "operation": "CopySnapshot", + "params": [ + { "target": "SourceSnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSnapshot", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifySnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Completed": { + "waiterName": "SnapshotCompleted", + "params": [ + { "target": "SnapshotIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Snapshots[]" + } + }, + "has": { + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VolumeId" } + ] + } + } + } + }, + "Subnet": { + "identifiers": [ + { + "name": "Id", + "memberName": "SubnetId" + } + ], + "shape": "Subnet", + "load": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "SubnetIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Subnets[0]" + }, + "actions": { + "CreateInstances": { + "request": { + "operation": "RunInstances", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateNetworkInterface": { + "request": { + "operation": "CreateNetworkInterface", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSubnet", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + } + } + }, + "Tag": { + "identifiers": [ + { + "name": "ResourceId", + "memberName": "ResourceId" + }, + { + "name": "Key", + "memberName": "Key" + }, + { + "name": "Value", + "memberName": "Value" + } + ], + "shape": "TagDescription", + "load": { + "request": { + "operation": "DescribeTags", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "key" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Key" }, + { "target": "Filters[1].Name", "source": "string", "value": "value" }, + { "target": "Filters[1].Values[0]", "source": "identifier", "name": "Value" } + ] + }, + "path": "Tags[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[0].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[0].Value", "source": "identifier", "name": "Value" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[*].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[*].Value", "source": "identifier", "name": "Value" } + ] + } + } + } + }, + "Volume": { + "identifiers": [ + { + "name": "Id", + "memberName": "VolumeId" + } + ], + "shape": "Volume", + "load": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Volumes[0]" + }, + "actions": { + "AttachToInstance": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateSnapshot": { + "request": { + "operation": "CreateSnapshot", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeStatus": { + "request": { + "operation": "DescribeVolumeStatus", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromInstance": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableIo": { + "request": { + "operation": "EnableVolumeIO", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "hasMany": { + "Snapshots": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "volume-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + } + } + }, + "Vpc": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcId" + } + ], + "shape": "Vpc", + "load": { + "request": { + "operation": "DescribeVpcs", + "params": [ + { "target": "VpcIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Vpcs[0]" + }, + "actions": { + "AssociateDhcpOptions": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachClassicLinkInstance": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachInternetGateway": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateNetworkAcl": { + "request": { + "operation": "CreateNetworkAcl", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateRouteTable": { + "request": { + "operation": "CreateRouteTable", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { + "operation": "CreateSecurityGroup", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSubnet": { + "request": { + "operation": "CreateSubnet", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkInstance": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachInternetGateway": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DisableClassicLink": { + "request": { + "operation": "DisableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableClassicLink": { + "request": { + "operation": "EnableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "RequestVpcPeeringConnection": { + "request": { + "operation": "CreateVpcPeeringConnection", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "data", "path": "DhcpOptionsId" } + ] + } + } + }, + "hasMany": { + "AcceptedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "accepter-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "NetworkAcls": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "RequestedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "requester-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "RouteTables": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Subnets": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + } + } + }, + "VpcPeeringConnection": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcPeeringConnectionId" + } + ], + "shape": "VpcPeeringConnection", + "load": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "VpcPeeringConnectionIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "VpcPeeringConnections[0]" + }, + "actions": { + "Accept": { + "request": { + "operation": "AcceptVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reject": { + "request": { + "operation": "RejectVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "VpcPeeringConnectionExists", + "params": [ + { "target": "VpcPeeringConnectionIds[]", "source": "identifier", "name": "Id" } + ], + "path": "VpcPeeringConnections[0]" + } + }, + "has": { + "AccepterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AccepterVpcInfo.VpcId" } + ] + } + }, + "RequesterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RequesterVpcInfo.VpcId" } + ] + } + } + } + }, + "VpcAddress": { + "identifiers": [ + { + "name": "AllocationId" + } + ], + "shape": "Address", + "load": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "AllocationIds[0]", "source": "identifier", "name": "AllocationId" } + ] + }, + "path": "Addresses[0]" + }, + "actions": { + "Associate": { + "request": { + "operation": "AssociateAddress", + "params": [ + { "target": "AllocationId", "source": "identifier", "name": "AllocationId" } + ] + } + }, + "Release": { + "request": { + "operation": "ReleaseAddress", + "params": [ + { "target": "AllocationId", "source": "data", "path": "AllocationId" } + ] + } + } + }, + "has": { + "Association": { + "resource": { + "type": "NetworkInterfaceAssociation", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AssociationId" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2016-11-15/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2016-11-15/resources-1.json new file mode 100644 index 00000000..9872201d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/ec2/2016-11-15/resources-1.json @@ -0,0 +1,2582 @@ +{ + "service": { + "actions": { + "CreateDhcpOptions": { + "request": { "operation": "CreateDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions.DhcpOptionsId" } + ], + "path": "DhcpOptions" + } + }, + "CreateInstances": { + "request": { "operation": "RunInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateInternetGateway": { + "request": { "operation": "CreateInternetGateway" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateway.InternetGatewayId" } + ], + "path": "InternetGateway" + } + }, + "CreateKeyPair": { + "request": { "operation": "CreateKeyPair" }, + "resource": { + "type": "KeyPair", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ], + "path": "@" + } + }, + "CreateNetworkAcl": { + "request": { "operation": "CreateNetworkAcl" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateNetworkInterface": { + "request": { "operation": "CreateNetworkInterface" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreatePlacementGroup": { + "request": { "operation": "CreatePlacementGroup" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "GroupName" } + ] + } + }, + "CreateRouteTable": { + "request": { "operation": "CreateRouteTable" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { "operation": "CreateSecurityGroup" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSnapshot": { + "request": { "operation": "CreateSnapshot" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateSubnet": { + "request": { "operation": "CreateSubnet" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { "operation": "CreateTags" } + }, + "CreateVolume": { + "request": { "operation": "CreateVolume" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VolumeId" } + ], + "path": "@" + } + }, + "CreateVpc": { + "request": { "operation": "CreateVpc" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpc.VpcId" } + ], + "path": "Vpc" + } + }, + "CreateVpcPeeringConnection": { + "request": { "operation": "CreateVpcPeeringConnection" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + }, + "DisassociateRouteTable": { + "request": { "operation": "DisassociateRouteTable" } + }, + "ImportKeyPair": { + "request": { "operation": "ImportKeyPair" }, + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyName" } + ] + } + }, + "RegisterImage": { + "request": { "operation": "RegisterImage" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Instance": { + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "InternetGateway": { + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "NetworkAcl": { + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "NetworkInterface": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "RouteTableAssociation": { + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "SecurityGroup": { + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Snapshot": { + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "VpcPeeringConnection": { + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + } + }, + "hasMany": { + "ClassicAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "domain" }, + { "target": "Filters[0].Values[0]", "source": "string", "value": "standard" } + ] + }, + "resource": { + "type": "ClassicAddress", + "identifiers": [ + { "target": "PublicIp", "source": "response", "path": "Addresses[].PublicIp" } + ], + "path": "Addresses[]" + } + }, + "DhcpOptionsSets": { + "request": { "operation": "DescribeDhcpOptions" }, + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "response", "path": "DhcpOptions[].DhcpOptionsId" } + ], + "path": "DhcpOptions[]" + } + }, + "Images": { + "request": { "operation": "DescribeImages" }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Images[].ImageId" } + ], + "path": "Images[]" + } + }, + "Instances": { + "request": { "operation": "DescribeInstances" }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { "operation": "DescribeInternetGateways" }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "KeyPairs": { + "request": { "operation": "DescribeKeyPairs" }, + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "response", "path": "KeyPairs[].KeyName" } + ], + "path": "KeyPairs[]" + } + }, + "NetworkAcls": { + "request": { "operation": "DescribeNetworkAcls" }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { "operation": "DescribeNetworkInterfaces" }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroups": { + "request": { "operation": "DescribePlacementGroups" }, + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "response", "path": "PlacementGroups[].GroupName" } + ], + "path": "PlacementGroups[]" + } + }, + "RouteTables": { + "request": { "operation": "DescribeRouteTables" }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { "operation": "DescribeSecurityGroups" }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Snapshots": { + "request": { "operation": "DescribeSnapshots" }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + }, + "Subnets": { + "request": { "operation": "DescribeSubnets" }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + }, + "Volumes": { + "request": { "operation": "DescribeVolumes" }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "domain" }, + { "target": "Filters[0].Values[0]", "source": "string", "value": "vpc" } + ] + }, + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "response", "path": "Addresses[].AllocationId" } + ], + "path": "Addresses[]" + } + }, + "VpcPeeringConnections": { + "request": { "operation": "DescribeVpcPeeringConnections" }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Vpcs": { + "request": { "operation": "DescribeVpcs" }, + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Vpcs[].VpcId" } + ], + "path": "Vpcs[]" + } + } + } + }, + "resources": { + "ClassicAddress": { + "identifiers": [ + { + "name": "PublicIp" + } + ], + "shape": "Address", + "load": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "PublicIps[]", "source": "identifier", "name": "PublicIp" } + ] + }, + "path": "Addresses[0]" + }, + "actions": { + "Associate": { + "request": { + "operation": "AssociateAddress", + "params": [ + { "target": "PublicIp", "source": "identifier", "name": "PublicIp" } + ] + } + }, + "Disassociate": { + "request": { + "operation": "DisassociateAddress", + "params": [ + { "target": "PublicIp", "source": "data", "path": "PublicIp" } + ] + } + }, + "Release": { + "request": { + "operation": "ReleaseAddress", + "params": [ + { "target": "PublicIp", "source": "data", "path": "PublicIp" } + ] + } + } + } + }, + "DhcpOptions": { + "identifiers": [ + { + "name": "Id", + "memberName": "DhcpOptionsId" + } + ], + "shape": "DhcpOptions", + "load": { + "request": { + "operation": "DescribeDhcpOptions", + "params": [ + { "target": "DhcpOptionsIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "DhcpOptions[0]" + }, + "actions": { + "AssociateWithVpc": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteDhcpOptions", + "params": [ + { "target": "DhcpOptionsId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Image": { + "identifiers": [ + { + "name": "Id", + "memberName": "ImageId" + } + ], + "shape": "Image", + "load": { + "request": { + "operation": "DescribeImages", + "params": [ + { "target": "ImageIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Images[0]" + }, + "actions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Deregister": { + "request": { + "operation": "DeregisterImage", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetImageAttribute", + "params": [ + { "target": "ImageId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "ImageExists", + "params": [ + { "target": "ImageIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Images[0]" + } + } + }, + "Instance": { + "identifiers": [ + { + "name": "Id", + "memberName": "InstanceId" + } + ], + "shape": "Instance", + "load": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Reservations[0].Instances[0]" + }, + "actions": { + "AttachClassicLinkVpc": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachVolume": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ConsoleOutput": { + "request": { + "operation": "GetConsoleOutput", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateImage": { + "request": { + "operation": "CreateImage", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "response", "path": "ImageId" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkVpc": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachVolume": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "PasswordData": { + "request": { + "operation": "GetPasswordData", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ReportStatus": { + "request": { + "operation": "ReportInstanceStatus", + "params": [ + { "target": "Instances[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetKernel": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "kernel" } + ] + } + }, + "ResetRamdisk": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "ramdisk" } + ] + } + }, + "ResetSourceDestCheck": { + "request": { + "operation": "ResetInstanceAttribute", + "params": [ + { "target": "InstanceId", "source": "identifier", "name": "Id" }, + { "target": "Attribute", "source": "string", "value": "sourceDestCheck" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[0]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "batchActions": { + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Monitor": { + "request": { + "operation": "MonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Reboot": { + "request": { + "operation": "RebootInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Start": { + "request": { + "operation": "StartInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Stop": { + "request": { + "operation": "StopInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Terminate": { + "request": { + "operation": "TerminateInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "Unmonitor": { + "request": { + "operation": "UnmonitorInstances", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "InstanceExists", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Running": { + "waiterName": "InstanceRunning", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Stopped": { + "waiterName": "InstanceStopped", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + }, + "Terminated": { + "waiterName": "InstanceTerminated", + "params": [ + { "target": "InstanceIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Reservations[0].Instances[0]" + } + }, + "has": { + "ClassicAddress": { + "resource": { + "type": "ClassicAddress", + "identifiers": [ + { "target": "PublicIp", "source": "data", "path": "PublicIpAddress" } + ] + } + }, + "Image": { + "resource": { + "type": "Image", + "identifiers": [ + { "target": "Id", "source": "data", "path": "ImageId" } + ] + } + }, + "KeyPair": { + "resource": { + "type": "KeyPairInfo", + "identifiers": [ + { "target": "Name", "source": "data", "path": "KeyName" } + ] + } + }, + "NetworkInterfaces": { + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "data", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "PlacementGroup": { + "resource": { + "type": "PlacementGroup", + "identifiers": [ + { "target": "Name", "source": "data", "path": "Placement.GroupName" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Volumes": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Volumes[].VolumeId" } + ], + "path": "Volumes[]" + } + }, + "VpcAddresses": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "instance-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "response", "path": "Addresses[].AllocationId" } + ], + "path": "Addresses[]" + } + } + } + }, + "InternetGateway": { + "identifiers": [ + { + "name": "Id", + "memberName": "InternetGatewayId" + } + ], + "shape": "InternetGateway", + "load": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "InternetGatewayIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "InternetGateways[0]" + }, + "actions": { + "AttachToVpc": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromVpc": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "InternetGatewayId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "KeyPair": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPair", + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "KeyPairInfo": { + "identifiers": [ + { + "name": "Name", + "memberName": "KeyName" + } + ], + "shape": "KeyPairInfo", + "load": { + "request": { + "operation": "DescribeKeyPairs", + "params": [ + { "target": "KeyNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "KeyPairs[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteKeyPair", + "params": [ + { "target": "KeyName", "source": "identifier", "name": "Name" } + ] + } + } + } + }, + "NetworkAcl": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkAclId" + } + ], + "shape": "NetworkAcl", + "load": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "NetworkAclIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkAcls[0]" + }, + "actions": { + "CreateEntry": { + "request": { + "operation": "CreateNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkAcl", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "DeleteEntry": { + "request": { + "operation": "DeleteNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceAssociation": { + "request": { + "operation": "ReplaceNetworkAclAssociation", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceEntry": { + "request": { + "operation": "ReplaceNetworkAclEntry", + "params": [ + { "target": "NetworkAclId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterface": { + "identifiers": [ + { + "name": "Id", + "memberName": "NetworkInterfaceId" + } + ], + "shape": "NetworkInterface", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "NetworkInterfaceIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0]" + }, + "actions": { + "AssignPrivateIpAddresses": { + "request": { + "operation": "AssignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Attach": { + "request": { + "operation": "AttachNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteNetworkInterface", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "Detach": { + "request": { + "operation": "DetachNetworkInterface", + "params": [ + { "target": "AttachmentId", "source": "data", "path": "Attachment.AttachmentId" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetNetworkInterfaceAttribute", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + }, + "UnassignPrivateIpAddresses": { + "request": { + "operation": "UnassignPrivateIpAddresses", + "params": [ + { "target": "NetworkInterfaceId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Association": { + "resource": { + "type": "NetworkInterfaceAssociation", + "identifiers": [ + { "target": "Id", "source": "data", "path": "Association.AssociationId" } + ], + "path": "Association" + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "NetworkInterfaceAssociation": { + "identifiers": [ + { + "name": "Id" + } + ], + "shape": "InstanceNetworkInterfaceAssociation", + "load": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "association.association-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "NetworkInterfaces[0].Association" + }, + "actions": { + "Delete": { + "request": { + "operation": "DisassociateAddress", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Address": { + "resource": { + "type": "VpcAddress", + "identifiers": [ + { "target": "AllocationId", "source": "data", "path": "AllocationId" } + ] + } + } + } + }, + "PlacementGroup": { + "identifiers": [ + { + "name": "Name", + "memberName": "GroupName" + } + ], + "shape": "PlacementGroup", + "load": { + "request": { + "operation": "DescribePlacementGroups", + "params": [ + { "target": "GroupNames[0]", "source": "identifier", "name": "Name" } + ] + }, + "path": "PlacementGroups[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeletePlacementGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "placement-group-name" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + } + } + }, + "Route": { + "identifiers": [ + { "name": "RouteTableId" }, + { + "name": "DestinationCidrBlock", + "memberName": "DestinationCidrBlock" + } + ], + "shape": "Route", + "actions": { + "Delete": { + "request": { + "operation": "DeleteRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "RouteTableId" }, + { "target": "DestinationCidrBlock", "source": "identifier", "name": "DestinationCidrBlock" } + ] + } + }, + "Replace": { + "request": { + "operation": "ReplaceRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "RouteTableId" }, + { "target": "DestinationCidrBlock", "source": "identifier", "name": "DestinationCidrBlock" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "identifier", "name": "RouteTableId" } + ] + } + } + } + }, + "RouteTable": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableId" + } + ], + "shape": "RouteTable", + "load": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "RouteTableIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "RouteTables[0]" + }, + "actions": { + "AssociateWithSubnet": { + "request": { + "operation": "AssociateRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "AssociationId" } + ] + } + }, + "CreateRoute": { + "request": { + "operation": "CreateRoute", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Route", + "identifiers": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" }, + { "target": "DestinationCidrBlock", "source": "requestParameter", "path": "DestinationCidrBlock" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteRouteTable", + "params": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Associations": { + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "data", "path": "Associations[].RouteTableAssociationId" } + ], + "path": "Associations[]" + } + }, + "Routes": { + "resource": { + "type": "Route", + "identifiers": [ + { "target": "RouteTableId", "source": "identifier", "name": "Id" }, + { "target": "DestinationCidrBlock", "source": "data", "path": "Routes[].DestinationCidrBlock" } + ], + "path": "Routes[]" + } + }, + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + } + }, + "RouteTableAssociation": { + "identifiers": [ + { + "name": "Id", + "memberName": "RouteTableAssociationId" + } + ], + "shape": "RouteTableAssociation", + "actions": { + "Delete": { + "request": { + "operation": "DisassociateRouteTable", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + } + }, + "ReplaceSubnet": { + "request": { + "operation": "ReplaceRouteTableAssociation", + "params": [ + { "target": "AssociationId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTableAssociation", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NewAssociationId" } + ] + } + } + }, + "has": { + "RouteTable": { + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RouteTableId" } + ] + } + }, + "Subnet": { + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "data", "path": "SubnetId" } + ] + } + } + } + }, + "SecurityGroup": { + "identifiers": [ + { + "name": "Id", + "memberName": "GroupId" + } + ], + "shape": "SecurityGroup", + "load": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "GroupIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "SecurityGroups[0]" + }, + "actions": { + "AuthorizeEgress": { + "request": { + "operation": "AuthorizeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "AuthorizeIngress": { + "request": { + "operation": "AuthorizeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSecurityGroup", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeEgress": { + "request": { + "operation": "RevokeSecurityGroupEgress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + }, + "RevokeIngress": { + "request": { + "operation": "RevokeSecurityGroupIngress", + "params": [ + { "target": "GroupId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "Snapshot": { + "identifiers": [ + { + "name": "Id", + "memberName": "SnapshotId" + } + ], + "shape": "Snapshot", + "load": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "SnapshotIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Snapshots[0]" + }, + "actions": { + "Copy": { + "request": { + "operation": "CopySnapshot", + "params": [ + { "target": "SourceSnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSnapshot", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifySnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + }, + "ResetAttribute": { + "request": { + "operation": "ResetSnapshotAttribute", + "params": [ + { "target": "SnapshotId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Completed": { + "waiterName": "SnapshotCompleted", + "params": [ + { "target": "SnapshotIds[]", "source": "identifier", "name": "Id" } + ], + "path": "Snapshots[]" + } + }, + "has": { + "Volume": { + "resource": { + "type": "Volume", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VolumeId" } + ] + } + } + } + }, + "Subnet": { + "identifiers": [ + { + "name": "Id", + "memberName": "SubnetId" + } + ], + "shape": "Subnet", + "load": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "SubnetIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Subnets[0]" + }, + "actions": { + "CreateInstances": { + "request": { + "operation": "RunInstances", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Instances[].InstanceId" } + ], + "path": "Instances[]" + } + }, + "CreateNetworkInterface": { + "request": { + "operation": "CreateNetworkInterface", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterface.NetworkInterfaceId" } + ], + "path": "NetworkInterface" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSubnet", + "params": [ + { "target": "SubnetId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "VpcId" } + ] + } + } + }, + "hasMany": { + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "subnet-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + } + } + }, + "Tag": { + "identifiers": [ + { + "name": "ResourceId", + "memberName": "ResourceId" + }, + { + "name": "Key", + "memberName": "Key" + }, + { + "name": "Value", + "memberName": "Value" + } + ], + "shape": "TagDescription", + "load": { + "request": { + "operation": "DescribeTags", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "key" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Key" }, + { "target": "Filters[1].Name", "source": "string", "value": "value" }, + { "target": "Filters[1].Values[0]", "source": "identifier", "name": "Value" } + ] + }, + "path": "Tags[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[0].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[0].Value", "source": "identifier", "name": "Value" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteTags", + "params": [ + { "target": "Resources[]", "source": "identifier", "name": "ResourceId" }, + { "target": "Tags[*].Key", "source": "identifier", "name": "Key" }, + { "target": "Tags[*].Value", "source": "identifier", "name": "Value" } + ] + } + } + } + }, + "Volume": { + "identifiers": [ + { + "name": "Id", + "memberName": "VolumeId" + } + ], + "shape": "Volume", + "load": { + "request": { + "operation": "DescribeVolumes", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Volumes[0]" + }, + "actions": { + "AttachToInstance": { + "request": { + "operation": "AttachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateSnapshot": { + "request": { + "operation": "CreateSnapshot", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SnapshotId" } + ], + "path": "@" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeStatus": { + "request": { + "operation": "DescribeVolumeStatus", + "params": [ + { "target": "VolumeIds[0]", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachFromInstance": { + "request": { + "operation": "DetachVolume", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableIo": { + "request": { + "operation": "EnableVolumeIO", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVolumeAttribute", + "params": [ + { "target": "VolumeId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "hasMany": { + "Snapshots": { + "request": { + "operation": "DescribeSnapshots", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "volume-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Snapshot", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Snapshots[].SnapshotId" } + ], + "path": "Snapshots[]" + } + } + } + }, + "Vpc": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcId" + } + ], + "shape": "Vpc", + "load": { + "request": { + "operation": "DescribeVpcs", + "params": [ + { "target": "VpcIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Vpcs[0]" + }, + "actions": { + "AssociateDhcpOptions": { + "request": { + "operation": "AssociateDhcpOptions", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachClassicLinkInstance": { + "request": { + "operation": "AttachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "AttachInternetGateway": { + "request": { + "operation": "AttachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "CreateNetworkAcl": { + "request": { + "operation": "CreateNetworkAcl", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcl.NetworkAclId" } + ], + "path": "NetworkAcl" + } + }, + "CreateRouteTable": { + "request": { + "operation": "CreateRouteTable", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTable.RouteTableId" } + ], + "path": "RouteTable" + } + }, + "CreateSecurityGroup": { + "request": { + "operation": "CreateSecurityGroup", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "GroupId" } + ] + } + }, + "CreateSubnet": { + "request": { + "operation": "CreateSubnet", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnet.SubnetId" } + ], + "path": "Subnet" + } + }, + "CreateTags": { + "request": { + "operation": "CreateTags", + "params": [ + { "target": "Resources[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Tag", + "identifiers": [ + { "target": "ResourceId", "source": "identifier", "name": "Id" }, + { "target": "Key", "source": "requestParameter", "path": "Tags[].Key" }, + { "target": "Value", "source": "requestParameter", "path": "Tags[].Value" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DescribeAttribute": { + "request": { + "operation": "DescribeVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachClassicLinkInstance": { + "request": { + "operation": "DetachClassicLinkVpc", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DetachInternetGateway": { + "request": { + "operation": "DetachInternetGateway", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "DisableClassicLink": { + "request": { + "operation": "DisableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "EnableClassicLink": { + "request": { + "operation": "EnableVpcClassicLink", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "ModifyAttribute": { + "request": { + "operation": "ModifyVpcAttribute", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + } + }, + "RequestVpcPeeringConnection": { + "request": { + "operation": "CreateVpcPeeringConnection", + "params": [ + { "target": "VpcId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnection.VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnection" + } + } + }, + "waiters": { + "Available": { + "waiterName": "VpcAvailable", + "params": [ + { "target": "VpcIds[]", "source": "identifier", "name": "Id" } + ] + }, + "Exists": { + "waiterName": "VpcExists", + "params": [ + { "target": "VpcIds[]", "source": "identifier", "name": "Id" } + ] + } + }, + "has": { + "DhcpOptions": { + "resource": { + "type": "DhcpOptions", + "identifiers": [ + { "target": "Id", "source": "data", "path": "DhcpOptionsId" } + ] + } + } + }, + "hasMany": { + "AcceptedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "accepter-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "Instances": { + "request": { + "operation": "DescribeInstances", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Instance", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Reservations[].Instances[].InstanceId" } + ], + "path": "Reservations[].Instances[]" + } + }, + "InternetGateways": { + "request": { + "operation": "DescribeInternetGateways", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "attachment.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "InternetGateway", + "identifiers": [ + { "target": "Id", "source": "response", "path": "InternetGateways[].InternetGatewayId" } + ], + "path": "InternetGateways[]" + } + }, + "NetworkAcls": { + "request": { + "operation": "DescribeNetworkAcls", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkAcl", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkAcls[].NetworkAclId" } + ], + "path": "NetworkAcls[]" + } + }, + "NetworkInterfaces": { + "request": { + "operation": "DescribeNetworkInterfaces", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "NetworkInterface", + "identifiers": [ + { "target": "Id", "source": "response", "path": "NetworkInterfaces[].NetworkInterfaceId" } + ], + "path": "NetworkInterfaces[]" + } + }, + "RequestedVpcPeeringConnections": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "requester-vpc-info.vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "VpcPeeringConnection", + "identifiers": [ + { "target": "Id", "source": "response", "path": "VpcPeeringConnections[].VpcPeeringConnectionId" } + ], + "path": "VpcPeeringConnections[]" + } + }, + "RouteTables": { + "request": { + "operation": "DescribeRouteTables", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "RouteTable", + "identifiers": [ + { "target": "Id", "source": "response", "path": "RouteTables[].RouteTableId" } + ], + "path": "RouteTables[]" + } + }, + "SecurityGroups": { + "request": { + "operation": "DescribeSecurityGroups", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "SecurityGroup", + "identifiers": [ + { "target": "Id", "source": "response", "path": "SecurityGroups[].GroupId" } + ], + "path": "SecurityGroups[]" + } + }, + "Subnets": { + "request": { + "operation": "DescribeSubnets", + "params": [ + { "target": "Filters[0].Name", "source": "string", "value": "vpc-id" }, + { "target": "Filters[0].Values[0]", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Subnet", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Subnets[].SubnetId" } + ], + "path": "Subnets[]" + } + } + } + }, + "VpcPeeringConnection": { + "identifiers": [ + { + "name": "Id", + "memberName": "VpcPeeringConnectionId" + } + ], + "shape": "VpcPeeringConnection", + "load": { + "request": { + "operation": "DescribeVpcPeeringConnections", + "params": [ + { "target": "VpcPeeringConnectionIds[0]", "source": "identifier", "name": "Id" } + ] + }, + "path": "VpcPeeringConnections[0]" + }, + "actions": { + "Accept": { + "request": { + "operation": "AcceptVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Reject": { + "request": { + "operation": "RejectVpcPeeringConnection", + "params": [ + { "target": "VpcPeeringConnectionId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "VpcPeeringConnectionExists", + "params": [ + { "target": "VpcPeeringConnectionIds[]", "source": "identifier", "name": "Id" } + ], + "path": "VpcPeeringConnections[0]" + } + }, + "has": { + "AccepterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AccepterVpcInfo.VpcId" } + ] + } + }, + "RequesterVpc": { + "resource": { + "type": "Vpc", + "identifiers": [ + { "target": "Id", "source": "data", "path": "RequesterVpcInfo.VpcId" } + ] + } + } + } + }, + "VpcAddress": { + "identifiers": [ + { + "name": "AllocationId" + } + ], + "shape": "Address", + "load": { + "request": { + "operation": "DescribeAddresses", + "params": [ + { "target": "AllocationIds[0]", "source": "identifier", "name": "AllocationId" } + ] + }, + "path": "Addresses[0]" + }, + "actions": { + "Associate": { + "request": { + "operation": "AssociateAddress", + "params": [ + { "target": "AllocationId", "source": "identifier", "name": "AllocationId" } + ] + } + }, + "Release": { + "request": { + "operation": "ReleaseAddress", + "params": [ + { "target": "AllocationId", "source": "data", "path": "AllocationId" } + ] + } + } + }, + "has": { + "Association": { + "resource": { + "type": "NetworkInterfaceAssociation", + "identifiers": [ + { "target": "Id", "source": "data", "path": "AssociationId" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/glacier/2012-06-01/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/glacier/2012-06-01/resources-1.json new file mode 100644 index 00000000..d1ed48f4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/glacier/2012-06-01/resources-1.json @@ -0,0 +1,581 @@ +{ + "service": { + "actions": { + "CreateVault": { + "request": { + "operation": "CreateVault", + "params": [ + { "target": "accountId", "source": "string", "value": "-" } + ] + }, + "resource": { + "type": "Vault", + "identifiers": [ + { "target": "AccountId", "source": "requestParameter", "path": "accountId" }, + { "target": "Name", "source": "requestParameter", "path": "vaultName" } + ] + } + } + }, + "has": { + "Account": { + "resource": { + "type": "Account", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + } + }, + "hasMany": { + "Vaults": { + "request": { + "operation": "ListVaults", + "params": [ + { "target": "accountId", "source": "string", "value": "-" } + ] + }, + "resource": { + "type": "Vault", + "identifiers": [ + { "target": "AccountId", "source": "requestParameter", "path": "accountId" }, + { "target": "Name", "source": "response", "path": "VaultList[].VaultName" } + ], + "path": "VaultList[]" + } + } + } + }, + "resources": { + "Account": { + "identifiers": [ + { "name": "Id" } + ], + "actions": { + "CreateVault": { + "request": { + "operation": "CreateVault", + "params": [ + { "target": "accountId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Vault", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "Id" }, + { "target": "Name", "source": "requestParameter", "path": "vaultName" } + ] + } + } + }, + "has": { + "Vault": { + "resource": { + "type": "Vault", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "Id" }, + { "target": "Name", "source": "input" } + ] + } + } + }, + "hasMany": { + "Vaults": { + "request": { + "operation": "ListVaults", + "params": [ + { "target": "accountId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Vault", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "Id" }, + { "target": "Name", "source": "response", "path": "VaultList[].VaultName" } + ], + "path": "VaultList[]" + } + } + } + }, + "Archive": { + "identifiers": [ + { "name": "AccountId" }, + { "name": "VaultName" }, + { "name": "Id" } + ], + "actions": { + "Delete": { + "request": { + "operation": "DeleteArchive", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "VaultName" }, + { "target": "archiveId", "source": "identifier", "name": "Id" } + ] + } + }, + "InitiateArchiveRetrieval": { + "request": { + "operation": "InitiateJob", + "params": [ + { "target": "vaultName", "source": "identifier", "name": "VaultName" }, + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "jobParameters.Type", "source": "string", "value": "archive-retrieval" }, + { "target": "jobParameters.ArchiveId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Job", + "identifiers": [ + { "target": "Id", "source": "response", "path": "jobId" }, + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "VaultName" } + ] + } + } + }, + "has": { + "Vault": { + "resource": { + "type": "Vault", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "Name", "source": "identifier", "name": "VaultName" } + ] + } + } + } + }, + "Job": { + "identifiers": [ + { "name": "AccountId" }, + { "name": "VaultName" }, + { + "name": "Id", + "memberName": "JobId" + } + ], + "shape": "GlacierJobDescription", + "load": { + "request": { + "operation": "DescribeJob", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "VaultName" }, + { "target": "jobId", "source": "identifier", "name": "Id" } + ] + }, + "path": "@" + }, + "actions": { + "GetOutput": { + "request": { + "operation": "GetJobOutput", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "VaultName" }, + { "target": "jobId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vault": { + "resource": { + "type": "Vault", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "Name", "source": "identifier", "name": "VaultName" } + ] + } + } + } + }, + "MultipartUpload": { + "identifiers": [ + { "name": "AccountId" }, + { "name": "VaultName" }, + { + "name": "Id", + "memberName": "MultipartUploadId" + } + ], + "shape": "UploadListElement", + "actions": { + "Abort": { + "request": { + "operation": "AbortMultipartUpload", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "VaultName" }, + { "target": "uploadId", "source": "identifier", "name": "Id" } + ] + } + }, + "Complete": { + "request": { + "operation": "CompleteMultipartUpload", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "VaultName" }, + { "target": "uploadId", "source": "identifier", "name": "Id" } + ] + } + }, + "Parts": { + "request": { + "operation": "ListParts", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "VaultName" }, + { "target": "uploadId", "source": "identifier", "name": "Id" } + ] + } + }, + "UploadPart": { + "request": { + "operation": "UploadMultipartPart", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "VaultName" }, + { "target": "uploadId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Vault": { + "resource": { + "type": "Vault", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "Name", "source": "identifier", "name": "VaultName" } + ] + } + } + } + }, + "Notification": { + "identifiers": [ + { "name": "AccountId" }, + { "name": "VaultName" } + ], + "shape": "VaultNotificationConfig", + "load": { + "request": { + "operation": "GetVaultNotifications", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "VaultName" } + ] + }, + "path": "vaultNotificationConfig" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteVaultNotifications", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "VaultName" } + ] + } + }, + "Set": { + "request": { + "operation": "SetVaultNotifications", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "VaultName" } + ] + } + } + }, + "has": { + "Vault": { + "resource": { + "type": "Vault", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "Name", "source": "identifier", "name": "VaultName" } + ] + } + } + } + }, + "Vault": { + "identifiers": [ + { "name": "AccountId" }, + { + "name": "Name", + "memberName": "VaultName" + } + ], + "shape": "DescribeVaultOutput", + "load": { + "request": { + "operation": "DescribeVault", + "params": [ + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "accountId", "source": "identifier", "name": "AccountId" } + ] + }, + "path": "@" + }, + "actions": { + "Create": { + "request": { + "operation": "CreateVault", + "params": [ + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "accountId", "source": "identifier", "name": "AccountId" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteVault", + "params": [ + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "accountId", "source": "identifier", "name": "AccountId" } + ] + } + }, + "InitiateInventoryRetrieval": { + "request": { + "operation": "InitiateJob", + "params": [ + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "jobParameters.Type", "source": "string", "value": "inventory-retrieval" } + ] + }, + "resource": { + "type": "Job", + "identifiers": [ + { "target": "Id", "source": "response", "path": "jobId" }, + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" } + ] + } + }, + "InitiateMultipartUpload": { + "request": { + "operation": "InitiateMultipartUpload", + "params": [ + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "accountId", "source": "identifier", "name": "AccountId" } + ] + }, + "resource": { + "type": "MultipartUpload", + "identifiers": [ + { "target": "Id", "source": "response", "path": "uploadId" }, + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" } + ] + } + }, + "UploadArchive": { + "request": { + "operation": "UploadArchive", + "params": [ + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "accountId", "source": "identifier", "name": "AccountId" } + ] + }, + "resource": { + "type": "Archive", + "identifiers": [ + { "target": "Id", "source": "response", "path": "archiveId" }, + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "has": { + "Account": { + "resource": { + "type": "Account", + "identifiers": [ + { "target": "Id", "source": "identifier", "name": "AccountId" } + ] + } + }, + "Archive": { + "resource": { + "type": "Archive", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "input" } + ] + } + }, + "Job": { + "resource": { + "type": "Job", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "input" } + ] + } + }, + "MultipartUpload": { + "resource": { + "type": "MultipartUpload", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "input" } + ] + } + }, + "Notification": { + "resource": { + "type": "Notification", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "hasMany": { + "CompletedJobs": { + "request": { + "operation": "ListJobs", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "completed", "source": "string", "value": "true" } + ] + }, + "resource": { + "type": "Job", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "response", "path": "JobList[].JobId" } + ], + "path": "JobList[]" + } + }, + "FailedJobs": { + "request": { + "operation": "ListJobs", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "statuscode", "source": "string", "value": "Failed" } + ] + }, + "resource": { + "type": "Job", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "response", "path": "JobList[].JobId" } + ], + "path": "JobList[]" + } + }, + "Jobs": { + "request": { + "operation": "ListJobs", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Job", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "response", "path": "JobList[].JobId" } + ], + "path": "JobList[]" + } + }, + "JobsInProgress": { + "request": { + "operation": "ListJobs", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "statuscode", "source": "string", "value": "InProgress" } + ] + }, + "resource": { + "type": "Job", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "response", "path": "JobList[].JobId" } + ], + "path": "JobList[]" + } + }, + "MultipartUplaods": { + "request": { + "operation": "ListMultipartUploads", + "params": [ + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "accountId", "source": "identifier", "name": "AccountId" } + ] + }, + "resource": { + "type": "MultipartUpload", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "response", "path": "UploadsList[].MultipartUploadId" } + ], + "path": "UploadsList[]" + } + }, + "MultipartUploads": { + "request": { + "operation": "ListMultipartUploads", + "params": [ + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "accountId", "source": "identifier", "name": "AccountId" } + ] + }, + "resource": { + "type": "MultipartUpload", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "response", "path": "UploadsList[].MultipartUploadId" } + ], + "path": "UploadsList[]" + } + }, + "SucceededJobs": { + "request": { + "operation": "ListJobs", + "params": [ + { "target": "accountId", "source": "identifier", "name": "AccountId" }, + { "target": "vaultName", "source": "identifier", "name": "Name" }, + { "target": "statuscode", "source": "string", "value": "Succeeded" } + ] + }, + "resource": { + "type": "Job", + "identifiers": [ + { "target": "AccountId", "source": "identifier", "name": "AccountId" }, + { "target": "VaultName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "response", "path": "JobList[].JobId" } + ], + "path": "JobList[]" + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/iam/2010-05-08/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/iam/2010-05-08/resources-1.json new file mode 100644 index 00000000..59d18556 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/iam/2010-05-08/resources-1.json @@ -0,0 +1,1721 @@ +{ + "service": { + "actions": { + "ChangePassword": { + "request": { "operation": "ChangePassword" } + }, + "CreateAccountAlias": { + "request": { "operation": "CreateAccountAlias" } + }, + "CreateAccountPasswordPolicy": { + "request": { "operation": "UpdateAccountPasswordPolicy" }, + "resource": { + "type": "AccountPasswordPolicy", + "identifiers": [ ] + } + }, + "CreateGroup": { + "request": { "operation": "CreateGroup" }, + "resource": { + "type": "Group", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "GroupName" } + ], + "path": "Group" + } + }, + "CreateInstanceProfile": { + "request": { "operation": "CreateInstanceProfile" }, + "resource": { + "type": "InstanceProfile", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "InstanceProfileName" } + ], + "path": "InstanceProfile" + } + }, + "CreatePolicy": { + "request": { "operation": "CreatePolicy" }, + "resource": { + "type": "Policy", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "Policy.Arn" } + ] + } + }, + "CreateRole": { + "request": { "operation": "CreateRole" }, + "resource": { + "type": "Role", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "RoleName" } + ], + "path": "Role" + } + }, + "CreateSamlProvider": { + "request": { "operation": "CreateSAMLProvider" }, + "resource": { + "type": "SamlProvider", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "SAMLProviderArn" } + ] + } + }, + "CreateServerCertificate": { + "request": { "operation": "UploadServerCertificate" }, + "resource": { + "type": "ServerCertificate", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "ServerCertificateName" } + ] + } + }, + "CreateSigningCertificate": { + "request": { "operation": "UploadSigningCertificate" }, + "resource": { + "type": "SigningCertificate", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Certificate.CertificateId" } + ], + "path": "Certificate" + } + }, + "CreateUser": { + "request": { "operation": "CreateUser" }, + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "UserName" } + ], + "path": "User" + } + }, + "CreateVirtualMfaDevice": { + "request": { "operation": "CreateVirtualMFADevice" }, + "resource": { + "type": "VirtualMfaDevice", + "identifiers": [ + { "target": "SerialNumber", "source": "response", "path": "VirtualMFADevice.SerialNumber" } + ], + "path": "VirtualMFADevice" + } + } + }, + "has": { + "AccountPasswordPolicy": { + "resource": { + "type": "AccountPasswordPolicy", + "identifiers": [ ] + } + }, + "AccountSummary": { + "resource": { + "type": "AccountSummary", + "identifiers": [ ] + } + }, + "CurrentUser": { + "resource": { + "type": "CurrentUser", + "identifiers": [ ] + } + }, + "Group": { + "resource": { + "type": "Group", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "InstanceProfile": { + "resource": { + "type": "InstanceProfile", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "Policy": { + "resource": { + "type": "Policy", + "identifiers": [ + { "target": "PolicyArn", "source": "input" } + ] + } + }, + "Role": { + "resource": { + "type": "Role", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "SamlProvider": { + "resource": { + "type": "SamlProvider", + "identifiers": [ + { "target": "Arn", "source": "input" } + ] + } + }, + "ServerCertificate": { + "resource": { + "type": "ServerCertificate", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "User": { + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + }, + "VirtualMfaDevice": { + "resource": { + "type": "VirtualMfaDevice", + "identifiers": [ + { "target": "SerialNumber", "source": "input" } + ] + } + } + }, + "hasMany": { + "Groups": { + "request": { "operation": "ListGroups" }, + "resource": { + "type": "Group", + "identifiers": [ + { "target": "Name", "source": "response", "path": "Groups[].GroupName" } + ], + "path": "Groups[]" + } + }, + "InstanceProfiles": { + "request": { "operation": "ListInstanceProfiles" }, + "resource": { + "type": "InstanceProfile", + "identifiers": [ + { "target": "Name", "source": "response", "path": "InstanceProfiles[].InstanceProfileName" } + ], + "path": "InstanceProfiles[]" + } + }, + "Policies": { + "request": { "operation": "ListPolicies" }, + "resource": { + "type": "Policy", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "Policies[].Arn" } + ], + "path": "Policies[]" + } + }, + "Roles": { + "request": { "operation": "ListRoles" }, + "resource": { + "type": "Role", + "identifiers": [ + { "target": "Name", "source": "response", "path": "Roles[].RoleName" } + ], + "path": "Roles[]" + } + }, + "SamlProviders": { + "request": { "operation": "ListSAMLProviders" }, + "resource": { + "type": "SamlProvider", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "SAMLProviderList[].Arn" } + ] + } + }, + "ServerCertificates": { + "request": { "operation": "ListServerCertificates" }, + "resource": { + "type": "ServerCertificate", + "identifiers": [ + { "target": "Name", "source": "response", "path": "ServerCertificateMetadataList[].ServerCertificateName" } + ] + } + }, + "Users": { + "request": { "operation": "ListUsers" }, + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "response", "path": "Users[].UserName" } + ], + "path": "Users[]" + } + }, + "VirtualMfaDevices": { + "request": { "operation": "ListVirtualMFADevices" }, + "resource": { + "type": "VirtualMfaDevice", + "identifiers": [ + { "target": "SerialNumber", "source": "response", "path": "VirtualMFADevices[].SerialNumber" } + ], + "path": "VirtualMFADevices[]" + } + } + } + }, + "resources": { + "AccessKey": { + "identifiers": [ + { + "name": "UserName", + "memberName": "UserName" + }, + { + "name": "Id", + "memberName": "AccessKeyId" + } + ], + "shape": "AccessKeyMetadata", + "actions": { + "Activate": { + "request": { + "operation": "UpdateAccessKey", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "AccessKeyId", "source": "identifier", "name": "Id" }, + { "target": "Status", "source": "string", "value": "Active" } + ] + } + }, + "Deactivate": { + "request": { + "operation": "UpdateAccessKey", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "AccessKeyId", "source": "identifier", "name": "Id" }, + { "target": "Status", "source": "string", "value": "Inactive" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteAccessKey", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "AccessKeyId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "User": { + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "UserName" } + ] + } + } + } + }, + "AccessKeyPair": { + "identifiers": [ + { + "name": "UserName", + "memberName": "UserName" + }, + { + "name": "Id", + "memberName": "AccessKeyId" + }, + { + "name": "Secret", + "memberName": "SecretAccessKey" + } + ], + "shape": "AccessKey", + "actions": { + "Activate": { + "request": { + "operation": "UpdateAccessKey", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "AccessKeyId", "source": "identifier", "name": "Id" }, + { "target": "Status", "source": "string", "value": "Active" } + ] + } + }, + "Deactivate": { + "request": { + "operation": "UpdateAccessKey", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "AccessKeyId", "source": "identifier", "name": "Id" }, + { "target": "Status", "source": "string", "value": "Inactive" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteAccessKey", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "AccessKeyId", "source": "identifier", "name": "Id" } + ] + } + } + } + }, + "AccountPasswordPolicy": { + "identifiers": [ ], + "shape": "PasswordPolicy", + "load": { + "request": { "operation": "GetAccountPasswordPolicy" }, + "path": "PasswordPolicy" + }, + "actions": { + "Delete": { + "request": { "operation": "DeleteAccountPasswordPolicy" } + }, + "Update": { + "request": { "operation": "UpdateAccountPasswordPolicy" } + } + } + }, + "AccountSummary": { + "identifiers": [ ], + "shape": "GetAccountSummaryResponse", + "load": { + "request": { "operation": "GetAccountSummary" }, + "path": "@" + } + }, + "AssumeRolePolicy": { + "identifiers": [ + { "name": "RoleName" } + ], + "actions": { + "Update": { + "request": { + "operation": "UpdateAssumeRolePolicy", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "RoleName" } + ] + } + } + }, + "has": { + "Role": { + "resource": { + "type": "Role", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "RoleName" } + ] + } + } + } + }, + "CurrentUser": { + "identifiers": [ ], + "shape": "User", + "load": { + "request": { "operation": "GetUser" }, + "path": "User" + }, + "has": { + "User": { + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "data", "path": "UserName" } + ] + } + } + }, + "hasMany": { + "AccessKeys": { + "request": { "operation": "ListAccessKeys" }, + "resource": { + "type": "AccessKey", + "identifiers": [ + { "target": "UserName", "source": "response", "path": "AccessKeyMetadata[].UserName" }, + { "target": "Id", "source": "response", "path": "AccessKeyMetadata[].AccessKeyId" } + ], + "path": "AccessKeyMetadata[]" + } + }, + "MfaDevices": { + "request": { "operation": "ListMFADevices" }, + "resource": { + "type": "MfaDevice", + "identifiers": [ + { "target": "UserName", "source": "response", "path": "MFADevices[].UserName" }, + { "target": "SerialNumber", "source": "response", "path": "MFADevices[].SerialNumber" } + ], + "path": "MFADevices[]" + } + }, + "SigningCertificates": { + "request": { "operation": "ListSigningCertificates" }, + "resource": { + "type": "SigningCertificate", + "identifiers": [ + { "target": "UserName", "source": "response", "path": "Certificates[].UserName" }, + { "target": "Id", "source": "response", "path": "Certificates[].CertificateId" } + ], + "path": "Certificates[]" + } + } + } + }, + "Group": { + "identifiers": [ + { + "name": "Name", + "memberName": "GroupName" + } + ], + "shape": "Group", + "load": { + "request": { + "operation": "GetGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + }, + "path": "Group" + }, + "actions": { + "AddUser": { + "request": { + "operation": "AddUserToGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + }, + "AttachPolicy": { + "request": { + "operation": "AttachGroupPolicy", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + }, + "Create": { + "request": { + "operation": "CreateGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Group", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "GroupName" } + ], + "path": "Group" + } + }, + "CreatePolicy": { + "request": { + "operation": "PutGroupPolicy", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "GroupPolicy", + "identifiers": [ + { "target": "GroupName", "source": "identifier", "name": "Name" }, + { "target": "Name", "source": "requestParameter", "path": "PolicyName" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + }, + "DetachPolicy": { + "request": { + "operation": "DetachGroupPolicy", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + }, + "RemoveUser": { + "request": { + "operation": "RemoveUserFromGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + } + }, + "Update": { + "request": { + "operation": "UpdateGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Group", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "NewGroupName" } + ] + } + } + }, + "has": { + "Policy": { + "resource": { + "type": "GroupPolicy", + "identifiers": [ + { "target": "GroupName", "source": "identifier", "name": "Name" }, + { "target": "Name", "source": "input" } + ] + } + } + }, + "hasMany": { + "AttachedPolicies": { + "request": { + "operation": "ListAttachedGroupPolicies", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Policy", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "AttachedPolicies[].PolicyArn" } + ] + } + }, + "Policies": { + "request": { + "operation": "ListGroupPolicies", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "GroupPolicy", + "identifiers": [ + { "target": "GroupName", "source": "identifier", "name": "Name" }, + { "target": "Name", "source": "response", "path": "PolicyNames[]" } + ] + } + }, + "Users": { + "request": { + "operation": "GetGroup", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "response", "path": "Users[].UserName" } + ], + "path": "Users[]" + } + } + } + }, + "GroupPolicy": { + "identifiers": [ + { + "name": "GroupName", + "memberName": "GroupName" + }, + { + "name": "Name", + "memberName": "PolicyName" + } + ], + "shape": "GetGroupPolicyResponse", + "load": { + "request": { + "operation": "GetGroupPolicy", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "GroupName" }, + { "target": "PolicyName", "source": "identifier", "name": "Name" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteGroupPolicy", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "GroupName" }, + { "target": "PolicyName", "source": "identifier", "name": "Name" } + ] + } + }, + "Put": { + "request": { + "operation": "PutGroupPolicy", + "params": [ + { "target": "GroupName", "source": "identifier", "name": "GroupName" }, + { "target": "PolicyName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "has": { + "Group": { + "resource": { + "type": "Group", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "GroupName" } + ] + } + } + } + }, + "InstanceProfile": { + "identifiers": [ + { + "name": "Name", + "memberName": "InstanceProfileName" + } + ], + "shape": "InstanceProfile", + "load": { + "request": { + "operation": "GetInstanceProfile", + "params": [ + { "target": "InstanceProfileName", "source": "identifier", "name": "Name" } + ] + }, + "path": "InstanceProfile" + }, + "actions": { + "AddRole": { + "request": { + "operation": "AddRoleToInstanceProfile", + "params": [ + { "target": "InstanceProfileName", "source": "identifier", "name": "Name" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteInstanceProfile", + "params": [ + { "target": "InstanceProfileName", "source": "identifier", "name": "Name" } + ] + } + }, + "RemoveRole": { + "request": { + "operation": "RemoveRoleFromInstanceProfile", + "params": [ + { "target": "InstanceProfileName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "has": { + "Roles": { + "resource": { + "type": "Role", + "identifiers": [ + { "target": "Name", "source": "data", "path": "Roles[].RoleName" } + ], + "path": "Roles[]" + } + } + } + }, + "LoginProfile": { + "identifiers": [ + { + "name": "UserName", + "memberName": "UserName" + } + ], + "shape": "LoginProfile", + "load": { + "request": { + "operation": "GetLoginProfile", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" } + ] + }, + "path": "LoginProfile" + }, + "actions": { + "Create": { + "request": { + "operation": "CreateLoginProfile", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" } + ] + }, + "resource": { + "type": "LoginProfile", + "identifiers": [ + { "target": "UserName", "source": "response", "path": "LoginProfile.UserName" } + ], + "path": "LoginProfile" + } + }, + "Delete": { + "request": { + "operation": "DeleteLoginProfile", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" } + ] + } + }, + "Update": { + "request": { + "operation": "UpdateLoginProfile", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" } + ] + } + } + }, + "has": { + "User": { + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "UserName" } + ] + } + } + } + }, + "MfaDevice": { + "identifiers": [ + { + "name": "UserName", + "memberName": "UserName" + }, + { + "name": "SerialNumber", + "memberName": "SerialNumber" + } + ], + "shape": "MFADevice", + "actions": { + "Associate": { + "request": { + "operation": "EnableMFADevice", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "SerialNumber", "source": "identifier", "name": "SerialNumber" } + ] + } + }, + "Disassociate": { + "request": { + "operation": "DeactivateMFADevice", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "SerialNumber", "source": "identifier", "name": "SerialNumber" } + ] + } + }, + "Resync": { + "request": { + "operation": "ResyncMFADevice", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "SerialNumber", "source": "identifier", "name": "SerialNumber" } + ] + } + } + }, + "has": { + "User": { + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "UserName" } + ] + } + } + } + }, + "Policy": { + "identifiers": [ + { + "name": "Arn", + "memberName": "Arn" + } + ], + "shape": "Policy", + "load": { + "request": { + "operation": "GetPolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" } + ] + }, + "path": "Policy" + }, + "actions": { + "AttachGroup": { + "request": { + "operation": "AttachGroupPolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "AttachRole": { + "request": { + "operation": "AttachRolePolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "AttachUser": { + "request": { + "operation": "AttachUserPolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "CreateVersion": { + "request": { + "operation": "CreatePolicyVersion", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" } + ] + }, + "resource": { + "type": "PolicyVersion", + "identifiers": [ + { "target": "Arn", "source": "identifier", "name": "Arn" }, + { "target": "VersionId", "source": "response", "path": "PolicyVersion.VersionId" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeletePolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "DetachGroup": { + "request": { + "operation": "DetachGroupPolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "DetachRole": { + "request": { + "operation": "DetachRolePolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "DetachUser": { + "request": { + "operation": "DetachUserPolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" } + ] + } + } + }, + "has": { + "DefaultVersion": { + "resource": { + "type": "PolicyVersion", + "identifiers": [ + { "target": "Arn", "source": "identifier", "name": "Arn" }, + { "target": "VersionId", "source": "data", "path": "DefaultVersionId" } + ] + } + } + }, + "hasMany": { + "AttachedGroups": { + "request": { + "operation": "ListEntitiesForPolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" }, + { "target": "EntityFilter", "source": "string", "value": "Group" } + ] + }, + "resource": { + "type": "Group", + "identifiers": [ + { "target": "Name", "source": "response", "path": "PolicyGroups[].GroupName" } + ] + } + }, + "AttachedRoles": { + "request": { + "operation": "ListEntitiesForPolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" }, + { "target": "EntityFilter", "source": "string", "value": "Role" } + ] + }, + "resource": { + "type": "Role", + "identifiers": [ + { "target": "Name", "source": "response", "path": "PolicyRoles[].RoleName" } + ] + } + }, + "AttachedUsers": { + "request": { + "operation": "ListEntitiesForPolicy", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" }, + { "target": "EntityFilter", "source": "string", "value": "User" } + ] + }, + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "response", "path": "PolicyUsers[].UserName" } + ] + } + }, + "Versions": { + "request": { + "operation": "ListPolicyVersions", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" } + ] + }, + "resource": { + "type": "PolicyVersion", + "identifiers": [ + { "target": "Arn", "source": "identifier", "name": "Arn" }, + { "target": "VersionId", "source": "response", "path": "Versions[].VersionId" } + ], + "path": "Versions[]" + } + } + } + }, + "PolicyVersion": { + "identifiers": [ + { "name": "Arn" }, + { "name": "VersionId" } + ], + "shape": "PolicyVersion", + "load": { + "request": { + "operation": "GetPolicyVersion", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" }, + { "target": "VersionId", "source": "identifier", "name": "VersionId" } + ] + }, + "path": "PolicyVersion" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeletePolicyVersion", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" }, + { "target": "VersionId", "source": "identifier", "name": "VersionId" } + ] + } + }, + "SetAsDefault": { + "request": { + "operation": "SetDefaultPolicyVersion", + "params": [ + { "target": "PolicyArn", "source": "identifier", "name": "Arn" }, + { "target": "VersionId", "source": "identifier", "name": "VersionId" } + ] + } + } + } + }, + "Role": { + "identifiers": [ + { + "name": "Name", + "memberName": "RoleName" + } + ], + "shape": "Role", + "load": { + "request": { + "operation": "GetRole", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "Name" } + ] + }, + "path": "Role" + }, + "actions": { + "AttachPolicy": { + "request": { + "operation": "AttachRolePolicy", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "Name" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteRole", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "Name" } + ] + } + }, + "DetachPolicy": { + "request": { + "operation": "DetachRolePolicy", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "has": { + "AssumeRolePolicy": { + "resource": { + "type": "AssumeRolePolicy", + "identifiers": [ + { "target": "RoleName", "source": "identifier", "name": "Name" } + ] + } + }, + "Policy": { + "resource": { + "type": "RolePolicy", + "identifiers": [ + { "target": "RoleName", "source": "identifier", "name": "Name" }, + { "target": "Name", "source": "input" } + ] + } + } + }, + "hasMany": { + "AttachedPolicies": { + "request": { + "operation": "ListAttachedRolePolicies", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Policy", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "AttachedPolicies[].PolicyArn" } + ] + } + }, + "InstanceProfiles": { + "request": { + "operation": "ListInstanceProfilesForRole", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "InstanceProfile", + "identifiers": [ + { "target": "Name", "source": "response", "path": "InstanceProfiles[].InstanceProfileName" } + ], + "path": "InstanceProfiles[]" + } + }, + "Policies": { + "request": { + "operation": "ListRolePolicies", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "RolePolicy", + "identifiers": [ + { "target": "RoleName", "source": "identifier", "name": "Name" }, + { "target": "Name", "source": "response", "path": "PolicyNames[]" } + ] + } + } + } + }, + "RolePolicy": { + "identifiers": [ + { + "name": "RoleName", + "memberName": "RoleName" + }, + { + "name": "Name", + "memberName": "PolicyName" + } + ], + "shape": "GetRolePolicyResponse", + "load": { + "request": { + "operation": "GetRolePolicy", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "RoleName" }, + { "target": "PolicyName", "source": "identifier", "name": "Name" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteRolePolicy", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "RoleName" }, + { "target": "PolicyName", "source": "identifier", "name": "Name" } + ] + } + }, + "Put": { + "request": { + "operation": "PutRolePolicy", + "params": [ + { "target": "RoleName", "source": "identifier", "name": "RoleName" }, + { "target": "PolicyName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "has": { + "Role": { + "resource": { + "type": "Role", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "RoleName" } + ] + } + } + } + }, + "SamlProvider": { + "identifiers": [ + { "name": "Arn" } + ], + "shape": "GetSAMLProviderResponse", + "load": { + "request": { + "operation": "GetSAMLProvider", + "params": [ + { "target": "SAMLProviderArn", "source": "identifier", "name": "Arn" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteSAMLProvider", + "params": [ + { "target": "SAMLProviderArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "Update": { + "request": { + "operation": "UpdateSAMLProvider", + "params": [ + { "target": "SAMLProviderArn", "source": "identifier", "name": "Arn" } + ] + } + } + } + }, + "ServerCertificate": { + "identifiers": [ + { "name": "Name" } + ], + "shape": "ServerCertificate", + "load": { + "request": { + "operation": "GetServerCertificate", + "params": [ + { "target": "ServerCertificateName", "source": "identifier", "name": "Name" } + ] + }, + "path": "ServerCertificate" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteServerCertificate", + "params": [ + { "target": "ServerCertificateName", "source": "identifier", "name": "Name" } + ] + } + }, + "Update": { + "request": { + "operation": "UpdateServerCertificate", + "params": [ + { "target": "ServerCertificateName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "ServerCertificate", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "NewServerCertificateName" } + ] + } + } + } + }, + "SigningCertificate": { + "identifiers": [ + { + "name": "UserName", + "memberName": "UserName" + }, + { + "name": "Id", + "memberName": "CertificateId" + } + ], + "shape": "SigningCertificate", + "actions": { + "Activate": { + "request": { + "operation": "UpdateSigningCertificate", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "CertificateId", "source": "identifier", "name": "Id" }, + { "target": "Status", "source": "string", "value": "Active" } + ] + } + }, + "Deactivate": { + "request": { + "operation": "UpdateSigningCertificate", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "CertificateId", "source": "identifier", "name": "Id" }, + { "target": "Status", "source": "string", "value": "Inactive" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteSigningCertificate", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "CertificateId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "User": { + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "UserName" } + ] + } + } + } + }, + "User": { + "identifiers": [ + { + "name": "Name", + "memberName": "UserName" + } + ], + "shape": "User", + "load": { + "request": { + "operation": "GetUser", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "path": "User" + }, + "actions": { + "AddGroup": { + "request": { + "operation": "AddUserToGroup", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + } + }, + "AttachPolicy": { + "request": { + "operation": "AttachUserPolicy", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + } + }, + "Create": { + "request": { + "operation": "CreateUser", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "UserName" } + ], + "path": "User" + } + }, + "CreateAccessKeyPair": { + "request": { + "operation": "CreateAccessKey", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "AccessKeyPair", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "response", "path": "AccessKey.AccessKeyId" }, + { "target": "Secret", "source": "response", "path": "AccessKey.SecretAccessKey" } + ], + "path": "AccessKey" + } + }, + "CreateLoginProfile": { + "request": { + "operation": "CreateLoginProfile", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "LoginProfile", + "identifiers": [ + { "target": "UserName", "source": "response", "path": "LoginProfile.UserName" } + ], + "path": "LoginProfile" + } + }, + "CreatePolicy": { + "request": { + "operation": "PutUserPolicy", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "UserPolicy", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "Name", "source": "requestParameter", "path": "PolicyName" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteUser", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + } + }, + "DetachPolicy": { + "request": { + "operation": "DetachUserPolicy", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + } + }, + "EnableMfa": { + "request": { + "operation": "EnableMFADevice", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "MfaDevice", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "SerialNumber", "source": "requestParameter", "path": "SerialNumber" } + ] + } + }, + "RemoveGroup": { + "request": { + "operation": "RemoveUserFromGroup", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + } + }, + "Update": { + "request": { + "operation": "UpdateUser", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "NewUserName" } + ] + } + } + }, + "has": { + "AccessKey": { + "resource": { + "type": "AccessKey", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "input" } + ] + } + }, + "LoginProfile": { + "resource": { + "type": "LoginProfile", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + } + }, + "MfaDevice": { + "resource": { + "type": "MfaDevice", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "SerialNumber", "source": "input" } + ] + } + }, + "Policy": { + "resource": { + "type": "UserPolicy", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "Name", "source": "input" } + ] + } + }, + "SigningCertificate": { + "resource": { + "type": "SigningCertificate", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "input" } + ] + } + } + }, + "hasMany": { + "AccessKeys": { + "request": { + "operation": "ListAccessKeys", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "AccessKey", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "response", "path": "AccessKeyMetadata[].AccessKeyId" } + ], + "path": "AccessKeyMetadata[]" + } + }, + "AttachedPolicies": { + "request": { + "operation": "ListAttachedUserPolicies", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Policy", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "AttachedPolicies[].PolicyArn" } + ] + } + }, + "Groups": { + "request": { + "operation": "ListGroupsForUser", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Group", + "identifiers": [ + { "target": "Name", "source": "response", "path": "Groups[].GroupName" } + ], + "path": "Groups[]" + } + }, + "MfaDevices": { + "request": { + "operation": "ListMFADevices", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "MfaDevice", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "SerialNumber", "source": "response", "path": "MFADevices[].SerialNumber" } + ], + "path": "MFADevices[]" + } + }, + "Policies": { + "request": { + "operation": "ListUserPolicies", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "UserPolicy", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "Name", "source": "response", "path": "PolicyNames[]" } + ] + } + }, + "SigningCertificates": { + "request": { + "operation": "ListSigningCertificates", + "params": [ + { "target": "UserName", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "SigningCertificate", + "identifiers": [ + { "target": "UserName", "source": "identifier", "name": "Name" }, + { "target": "Id", "source": "response", "path": "Certificates[].CertificateId" } + ], + "path": "Certificates[]" + } + } + } + }, + "UserPolicy": { + "identifiers": [ + { + "name": "UserName", + "memberName": "UserName" + }, + { + "name": "Name", + "memberName": "PolicyName" + } + ], + "shape": "GetUserPolicyResponse", + "load": { + "request": { + "operation": "GetUserPolicy", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "PolicyName", "source": "identifier", "name": "Name" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteUserPolicy", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "PolicyName", "source": "identifier", "name": "Name" } + ] + } + }, + "Put": { + "request": { + "operation": "PutUserPolicy", + "params": [ + { "target": "UserName", "source": "identifier", "name": "UserName" }, + { "target": "PolicyName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "has": { + "User": { + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "UserName" } + ] + } + } + } + }, + "VirtualMfaDevice": { + "identifiers": [ + { + "name": "SerialNumber", + "memberName": "SerialNumber" + } + ], + "shape": "VirtualMFADevice", + "actions": { + "Delete": { + "request": { + "operation": "DeleteVirtualMFADevice", + "params": [ + { "target": "SerialNumber", "source": "identifier", "name": "SerialNumber" } + ] + } + } + }, + "has": { + "User": { + "resource": { + "type": "User", + "identifiers": [ + { "target": "Name", "source": "data", "path": "User.UserName" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/opsworks/2013-02-18/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/opsworks/2013-02-18/resources-1.json new file mode 100644 index 00000000..0435b13b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/opsworks/2013-02-18/resources-1.json @@ -0,0 +1,173 @@ +{ + "service": { + "actions": { + "CreateStack": { + "request": { "operation": "CreateStack" }, + "resource": { + "type": "Stack", + "identifiers": [ + { "target": "Id", "source": "response", "path": "StackId" } + ] + } + } + }, + "has": { + "Layer": { + "resource": { + "type": "Layer", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + }, + "Stack": { + "resource": { + "type": "Stack", + "identifiers": [ + { "target": "Id", "source": "input" } + ] + } + } + }, + "hasMany": { + "Stacks": { + "request": { "operation": "DescribeStacks" }, + "resource": { + "type": "Stack", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Stacks[].StackId" } + ], + "path": "Stacks[]" + } + } + } + }, + "resources": { + "Layer": { + "identifiers": [ + { "name": "Id" } + ], + "shape": "Layer", + "load": { + "request": { + "operation": "DescribeLayers", + "params": [ + { "target": "LayerIds[]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Layers[0]" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteLayer", + "params": [ + { "target": "LayerId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Stack": { + "resource": { + "type": "Stack", + "identifiers": [ + { "target": "Id", "source": "data", "path": "StackId" } + ] + } + } + } + }, + "Stack": { + "identifiers": [ + { "name": "Id" } + ], + "shape": "Stack", + "load": { + "request": { + "operation": "DescribeStacks", + "params": [ + { "target": "StackIds[]", "source": "identifier", "name": "Id" } + ] + }, + "path": "Stacks[0]" + }, + "actions": { + "CreateLayer": { + "request": { + "operation": "CreateLayer", + "params": [ + { "target": "StackId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Layer", + "identifiers": [ + { "target": "Id", "source": "response", "path": "LayerId" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteStack", + "params": [ + { "target": "StackId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Summary": { + "resource": { + "type": "StackSummary", + "identifiers": [ + { "target": "StackId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "hasMany": { + "Layers": { + "request": { + "operation": "DescribeLayers", + "params": [ + { "target": "StackId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Layer", + "identifiers": [ + { "target": "Id", "source": "response", "path": "Layers[].LayerId" } + ], + "path": "Layers[]" + } + } + } + }, + "StackSummary": { + "identifiers": [ + { "name": "StackId" } + ], + "shape": "StackSummary", + "load": { + "request": { + "operation": "DescribeStackSummary", + "params": [ + { "target": "StackId", "source": "identifier", "name": "StackId" } + ] + }, + "path": "StackSummary" + }, + "has": { + "Stack": { + "resource": { + "type": "Stack", + "identifiers": [ + { "target": "Id", "source": "identifier", "name": "StackId" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/s3/2006-03-01/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/s3/2006-03-01/resources-1.json new file mode 100644 index 00000000..f1e88c63 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/s3/2006-03-01/resources-1.json @@ -0,0 +1,1249 @@ +{ + "service": { + "actions": { + "CreateBucket": { + "request": { "operation": "CreateBucket" }, + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "requestParameter", "path": "Bucket" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "input" } + ] + } + } + }, + "hasMany": { + "Buckets": { + "request": { "operation": "ListBuckets" }, + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "response", "path": "Buckets[].Name" } + ], + "path": "Buckets[]" + } + } + } + }, + "resources": { + "Bucket": { + "identifiers": [ + { "name": "Name" } + ], + "shape": "Bucket", + "actions": { + "Create": { + "request": { + "operation": "CreateBucket", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "Name" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteBucket", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "Name" } + ] + } + }, + "DeleteObjects": { + "request": { + "operation": "DeleteObjects", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "Name" } + ] + } + }, + "PutObject": { + "request": { + "operation": "PutObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "Object", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" }, + { "target": "Key", "source": "requestParameter", "path": "Key" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "BucketExists", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "Name" } + ] + }, + "NotExists": { + "waiterName": "BucketNotExists", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "Name" } + ] + } + }, + "has": { + "Acl": { + "resource": { + "type": "BucketAcl", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" } + ] + } + }, + "Cors": { + "resource": { + "type": "BucketCors", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" } + ] + } + }, + "Lifecycle": { + "resource": { + "type": "BucketLifecycle", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" } + ] + } + }, + "LifecycleConfiguration": { + "resource": { + "type": "BucketLifecycleConfiguration", + "identifiers": [ + { + "target": "BucketName", + "source": "identifier", + "name": "Name" + } + ] + } + }, + "Logging": { + "resource": { + "type": "BucketLogging", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" } + ] + } + }, + "Notification": { + "resource": { + "type": "BucketNotification", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" } + ] + } + }, + "Object": { + "resource": { + "type": "Object", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" }, + { "target": "Key", "source": "input" } + ] + } + }, + "Policy": { + "resource": { + "type": "BucketPolicy", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" } + ] + } + }, + "RequestPayment": { + "resource": { + "type": "BucketRequestPayment", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" } + ] + } + }, + "Tagging": { + "resource": { + "type": "BucketTagging", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" } + ] + } + }, + "Versioning": { + "resource": { + "type": "BucketVersioning", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" } + ] + } + }, + "Website": { + "resource": { + "type": "BucketWebsite", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" } + ] + } + } + }, + "hasMany": { + "MultipartUploads": { + "request": { + "operation": "ListMultipartUploads", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "MultipartUpload", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" }, + { "target": "ObjectKey", "source": "response", "path": "Uploads[].Key" }, + { "target": "Id", "source": "response", "path": "Uploads[].UploadId" } + ], + "path": "Uploads[]" + } + }, + "ObjectVersions": { + "request": { + "operation": "ListObjectVersions", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "ObjectVersion", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" }, + { "target": "ObjectKey", "source": "response", "path": "[Versions,DeleteMarkers]|[].Key" }, + { "target": "Id", "source": "response", "path": "[Versions,DeleteMarkers]|[].VersionId" } + ], + "path": "[Versions,DeleteMarkers]|[]" + } + }, + "Objects": { + "request": { + "operation": "ListObjects", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "Name" } + ] + }, + "resource": { + "type": "ObjectSummary", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "Name" }, + { "target": "Key", "source": "response", "path": "Contents[].Key" } + ], + "path": "Contents[]" + } + } + } + }, + "BucketAcl": { + "identifiers": [ + { "name": "BucketName" } + ], + "shape": "GetBucketAclOutput", + "load": { + "request": { + "operation": "GetBucketAcl", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + }, + "path": "@" + }, + "actions": { + "Put": { + "request": { + "operation": "PutBucketAcl", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + } + } + }, + "BucketCors": { + "identifiers": [ + { "name": "BucketName" } + ], + "shape": "GetBucketCorsOutput", + "load": { + "request": { + "operation": "GetBucketCors", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteBucketCors", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + }, + "Put": { + "request": { + "operation": "PutBucketCors", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + } + } + }, + "BucketLifecycle": { + "identifiers": [ + { "name": "BucketName" } + ], + "shape": "GetBucketLifecycleOutput", + "load": { + "request": { + "operation": "GetBucketLifecycle", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteBucketLifecycle", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + }, + "Put": { + "request": { + "operation": "PutBucketLifecycle", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + } + } + }, + "BucketLifecycleConfiguration": { + "identifiers": [ + { + "name": "BucketName" + } + ], + "shape": "GetBucketLifecycleConfigurationOutput", + "load": { + "request": { + "operation": "GetBucketLifecycleConfiguration", + "params": [ + { + "target": "Bucket", + "source": "identifier", + "name": "BucketName" + } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteBucketLifecycle", + "params": [ + { + "target": "Bucket", + "source": "identifier", + "name": "BucketName" + } + ] + } + }, + "Put": { + "request": { + "operation": "PutBucketLifecycleConfiguration", + "params": [ + { + "target": "Bucket", + "source": "identifier", + "name": "BucketName" + } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { + "target": "Name", + "source": "identifier", + "name": "BucketName" + } + ] + } + } + } + }, + "BucketLogging": { + "identifiers": [ + { "name": "BucketName" } + ], + "shape": "GetBucketLoggingOutput", + "load": { + "request": { + "operation": "GetBucketLogging", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + }, + "path": "@" + }, + "actions": { + "Put": { + "request": { + "operation": "PutBucketLogging", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + } + } + }, + "BucketNotification": { + "identifiers": [ + { "name": "BucketName" } + ], + "shape": "NotificationConfiguration", + "load": { + "request": { + "operation": "GetBucketNotificationConfiguration", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + }, + "path": "@" + }, + "actions": { + "Put": { + "request": { + "operation": "PutBucketNotificationConfiguration", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + } + } + }, + "BucketPolicy": { + "identifiers": [ + { "name": "BucketName" } + ], + "shape": "GetBucketPolicyOutput", + "load": { + "request": { + "operation": "GetBucketPolicy", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteBucketPolicy", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + }, + "Put": { + "request": { + "operation": "PutBucketPolicy", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + } + } + }, + "BucketRequestPayment": { + "identifiers": [ + { "name": "BucketName" } + ], + "shape": "GetBucketRequestPaymentOutput", + "load": { + "request": { + "operation": "GetBucketRequestPayment", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + }, + "path": "@" + }, + "actions": { + "Put": { + "request": { + "operation": "PutBucketRequestPayment", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + } + } + }, + "BucketTagging": { + "identifiers": [ + { "name": "BucketName" } + ], + "shape": "GetBucketTaggingOutput", + "load": { + "request": { + "operation": "GetBucketTagging", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteBucketTagging", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + }, + "Put": { + "request": { + "operation": "PutBucketTagging", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + } + } + }, + "BucketVersioning": { + "identifiers": [ + { "name": "BucketName" } + ], + "shape": "GetBucketVersioningOutput", + "load": { + "request": { + "operation": "GetBucketVersioning", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + }, + "path": "@" + }, + "actions": { + "Enable": { + "request": { + "operation": "PutBucketVersioning", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "VersioningConfiguration.Status", "source": "string", "value": "Enabled" } + ] + } + }, + "Put": { + "request": { + "operation": "PutBucketVersioning", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + }, + "Suspend": { + "request": { + "operation": "PutBucketVersioning", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "VersioningConfiguration.Status", "source": "string", "value": "Suspended" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + } + } + }, + "BucketWebsite": { + "identifiers": [ + { "name": "BucketName" } + ], + "shape": "GetBucketWebsiteOutput", + "load": { + "request": { + "operation": "GetBucketWebsite", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteBucketWebsite", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + }, + "Put": { + "request": { + "operation": "PutBucketWebsite", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" } + ] + } + } + }, + "has": { + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + } + } + }, + "MultipartUpload": { + "identifiers": [ + { "name": "BucketName" }, + { "name": "ObjectKey" }, + { "name": "Id" } + ], + "shape": "MultipartUpload", + "actions": { + "Abort": { + "request": { + "operation": "AbortMultipartUpload", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" }, + { "target": "UploadId", "source": "identifier", "name": "Id" } + ] + } + }, + "Complete": { + "request": { + "operation": "CompleteMultipartUpload", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" }, + { "target": "UploadId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "Object", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" } + ] + } + } + }, + "has": { + "Object": { + "resource": { + "type": "Object", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" } + ] + } + }, + "Part": { + "resource": { + "type": "MultipartUploadPart", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "ObjectKey", "source": "identifier", "name": "ObjectKey" }, + { "target": "MultipartUploadId", "source": "identifier", "name": "Id" }, + { "target": "PartNumber", "source": "input" } + ] + } + } + }, + "hasMany": { + "Parts": { + "request": { + "operation": "ListParts", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" }, + { "target": "UploadId", "source": "identifier", "name": "Id" } + ] + }, + "resource": { + "type": "MultipartUploadPart", + "identifiers": [ + { "target": "BucketName", "source": "requestParameter", "path": "Bucket" }, + { "target": "ObjectKey", "source": "requestParameter", "path": "Key" }, + { "target": "MultipartUploadId", "source": "requestParameter", "path": "UploadId" }, + { "target": "PartNumber", "source": "response", "path": "Parts[].PartNumber" } + ], + "path": "Parts[]" + } + } + } + }, + "MultipartUploadPart": { + "identifiers": [ + { "name": "BucketName" }, + { "name": "ObjectKey" }, + { "name": "MultipartUploadId" }, + { + "name": "PartNumber", + "type": "integer", + "memberName": "PartNumber" + } + ], + "shape": "Part", + "actions": { + "CopyFrom": { + "request": { + "operation": "UploadPartCopy", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" }, + { "target": "UploadId", "source": "identifier", "name": "MultipartUploadId" }, + { "target": "PartNumber", "source": "identifier", "name": "PartNumber" } + ] + } + }, + "Upload": { + "request": { + "operation": "UploadPart", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" }, + { "target": "UploadId", "source": "identifier", "name": "MultipartUploadId" }, + { "target": "PartNumber", "source": "identifier", "name": "PartNumber" } + ] + } + } + }, + "has": { + "MultipartUpload": { + "resource": { + "type": "MultipartUpload", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "ObjectKey", "source": "identifier", "name": "ObjectKey" }, + { "target": "Id", "source": "identifier", "name": "MultipartUploadId" } + ] + } + } + } + }, + "Object": { + "identifiers": [ + { "name": "BucketName" }, + { "name": "Key" } + ], + "shape": "HeadObjectOutput", + "load": { + "request": { + "operation": "HeadObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + }, + "path": "@" + }, + "actions": { + "CopyFrom": { + "request": { + "operation": "CopyObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "Get": { + "request": { + "operation": "GetObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "InitiateMultipartUpload": { + "request": { + "operation": "CreateMultipartUpload", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + }, + "resource": { + "type": "MultipartUpload", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "ObjectKey", "source": "identifier", "name": "Key" }, + { "target": "Id", "source": "response", "path": "UploadId" } + ] + } + }, + "Put": { + "request": { + "operation": "PutObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "RestoreObject": { + "request": { + "operation": "RestoreObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteObjects", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Delete.Objects[].Key", "source": "identifier", "name": "Key" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "ObjectExists", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + }, + "NotExists": { + "waiterName": "ObjectNotExists", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "has": { + "Acl": { + "resource": { + "type": "ObjectAcl", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "ObjectKey", "source": "identifier", "name": "Key" } + ] + } + }, + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + }, + "MultipartUpload": { + "resource": { + "type": "MultipartUpload", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "ObjectKey", "source": "identifier", "name": "Key" }, + { "target": "Id", "source": "input" } + ] + } + }, + "Version": { + "resource": { + "type": "ObjectVersion", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "ObjectKey", "source": "identifier", "name": "Key" }, + { "target": "Id", "source": "input" } + ] + } + } + } + }, + "ObjectAcl": { + "identifiers": [ + { "name": "BucketName" }, + { "name": "ObjectKey" } + ], + "shape": "GetObjectAclOutput", + "load": { + "request": { + "operation": "GetObjectAcl", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" } + ] + }, + "path": "@" + }, + "actions": { + "Put": { + "request": { + "operation": "PutObjectAcl", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" } + ] + } + } + }, + "has": { + "Object": { + "resource": { + "type": "Object", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" } + ] + } + } + } + }, + "ObjectSummary": { + "identifiers": [ + { "name": "BucketName" }, + { "name": "Key" } + ], + "shape": "Object", + "actions": { + "CopyFrom": { + "request": { + "operation": "CopyObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "Get": { + "request": { + "operation": "GetObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "InitiateMultipartUpload": { + "request": { + "operation": "CreateMultipartUpload", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + }, + "resource": { + "type": "MultipartUpload", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "ObjectKey", "source": "identifier", "name": "Key" }, + { "target": "Id", "source": "response", "path": "UploadId" } + ] + } + }, + "Put": { + "request": { + "operation": "PutObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "RestoreObject": { + "request": { + "operation": "RestoreObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteObjects", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Delete.Objects[].Key", "source": "identifier", "name": "Key" } + ] + } + } + }, + "waiters": { + "Exists": { + "waiterName": "ObjectExists", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + }, + "NotExists": { + "waiterName": "ObjectNotExists", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "has": { + "Acl": { + "resource": { + "type": "ObjectAcl", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "ObjectKey", "source": "identifier", "name": "Key" } + ] + } + }, + "Bucket": { + "resource": { + "type": "Bucket", + "identifiers": [ + { "target": "Name", "source": "identifier", "name": "BucketName" } + ] + } + }, + "MultipartUpload": { + "resource": { + "type": "MultipartUpload", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "ObjectKey", "source": "identifier", "name": "Key" }, + { "target": "Id", "source": "input" } + ] + } + }, + "Object": { + "resource": { + "type": "Object", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "Key" } + ] + } + }, + "Version": { + "resource": { + "type": "ObjectVersion", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "ObjectKey", "source": "identifier", "name": "Key" }, + { "target": "Id", "source": "input" } + ] + } + } + } + }, + "ObjectVersion": { + "identifiers": [ + { "name": "BucketName" }, + { "name": "ObjectKey" }, + { "name": "Id" } + ], + "shape": "ObjectVersion", + "actions": { + "Delete": { + "request": { + "operation": "DeleteObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" }, + { "target": "VersionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Get": { + "request": { + "operation": "GetObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" }, + { "target": "VersionId", "source": "identifier", "name": "Id" } + ] + } + }, + "Head": { + "request": { + "operation": "HeadObject", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" }, + { "target": "VersionId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteObjects", + "params": [ + { "target": "Bucket", "source": "identifier", "name": "BucketName" }, + { "target": "Delete.Objects[*].Key", "source": "identifier", "name": "ObjectKey" }, + { "target": "Delete.Objects[*].VersionId", "source": "identifier", "name": "Id" } + ] + } + } + }, + "has": { + "Object": { + "resource": { + "type": "Object", + "identifiers": [ + { "target": "BucketName", "source": "identifier", "name": "BucketName" }, + { "target": "Key", "source": "identifier", "name": "ObjectKey" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/sns/2010-03-31/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/sns/2010-03-31/resources-1.json new file mode 100644 index 00000000..cee300a8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/sns/2010-03-31/resources-1.json @@ -0,0 +1,327 @@ +{ + "service": { + "actions": { + "CreatePlatformApplication": { + "request": { "operation": "CreatePlatformApplication" }, + "resource": { + "type": "PlatformApplication", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "PlatformApplicationArn" } + ] + } + }, + "CreateTopic": { + "request": { "operation": "CreateTopic" }, + "resource": { + "type": "Topic", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "TopicArn" } + ] + } + } + }, + "has": { + "PlatformApplication": { + "resource": { + "type": "PlatformApplication", + "identifiers": [ + { "target": "Arn", "source": "input" } + ] + } + }, + "PlatformEndpoint": { + "resource": { + "type": "PlatformEndpoint", + "identifiers": [ + { "target": "Arn", "source": "input" } + ] + } + }, + "Subscription": { + "resource": { + "type": "Subscription", + "identifiers": [ + { "target": "Arn", "source": "input" } + ] + } + }, + "Topic": { + "resource": { + "type": "Topic", + "identifiers": [ + { "target": "Arn", "source": "input" } + ] + } + } + }, + "hasMany": { + "PlatformApplications": { + "request": { "operation": "ListPlatformApplications" }, + "resource": { + "type": "PlatformApplication", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "PlatformApplications[].PlatformApplicationArn" } + ] + } + }, + "Subscriptions": { + "request": { "operation": "ListSubscriptions" }, + "resource": { + "type": "Subscription", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "Subscriptions[].SubscriptionArn" } + ] + } + }, + "Topics": { + "request": { "operation": "ListTopics" }, + "resource": { + "type": "Topic", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "Topics[].TopicArn" } + ] + } + } + } + }, + "resources": { + "PlatformApplication": { + "identifiers": [ + { "name": "Arn" } + ], + "shape": "GetPlatformApplicationAttributesResponse", + "load": { + "request": { + "operation": "GetPlatformApplicationAttributes", + "params": [ + { "target": "PlatformApplicationArn", "source": "identifier", "name": "Arn" } + ] + }, + "path": "@" + }, + "actions": { + "CreatePlatformEndpoint": { + "request": { + "operation": "CreatePlatformEndpoint", + "params": [ + { "target": "PlatformApplicationArn", "source": "identifier", "name": "Arn" } + ] + }, + "resource": { + "type": "PlatformEndpoint", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "EndpointArn" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeletePlatformApplication", + "params": [ + { "target": "PlatformApplicationArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "SetAttributes": { + "request": { + "operation": "SetPlatformApplicationAttributes", + "params": [ + { "target": "PlatformApplicationArn", "source": "identifier", "name": "Arn" } + ] + } + } + }, + "hasMany": { + "Endpoints": { + "request": { + "operation": "ListEndpointsByPlatformApplication", + "params": [ + { "target": "PlatformApplicationArn", "source": "identifier", "name": "Arn" } + ] + }, + "resource": { + "type": "PlatformEndpoint", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "Endpoints[].EndpointArn" } + ] + } + } + } + }, + "PlatformEndpoint": { + "identifiers": [ + { "name": "Arn" } + ], + "shape": "GetEndpointAttributesResponse", + "load": { + "request": { + "operation": "GetEndpointAttributes", + "params": [ + { "target": "EndpointArn", "source": "identifier", "name": "Arn" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "DeleteEndpoint", + "params": [ + { "target": "EndpointArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "Publish": { + "request": { + "operation": "Publish", + "params": [ + { "target": "TargetArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "SetAttributes": { + "request": { + "operation": "SetEndpointAttributes", + "params": [ + { "target": "EndpointArn", "source": "identifier", "name": "Arn" } + ] + } + } + } + }, + "Subscription": { + "identifiers": [ + { "name": "Arn" } + ], + "shape": "GetSubscriptionAttributesResponse", + "load": { + "request": { + "operation": "GetSubscriptionAttributes", + "params": [ + { "target": "SubscriptionArn", "source": "identifier", "name": "Arn" } + ] + }, + "path": "@" + }, + "actions": { + "Delete": { + "request": { + "operation": "Unsubscribe", + "params": [ + { "target": "SubscriptionArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "SetAttributes": { + "request": { + "operation": "SetSubscriptionAttributes", + "params": [ + { "target": "SubscriptionArn", "source": "identifier", "name": "Arn" } + ] + } + } + } + }, + "Topic": { + "identifiers": [ + { "name": "Arn" } + ], + "shape": "GetTopicAttributesResponse", + "load": { + "request": { + "operation": "GetTopicAttributes", + "params": [ + { "target": "TopicArn", "source": "identifier", "name": "Arn" } + ] + }, + "path": "@" + }, + "actions": { + "AddPermission": { + "request": { + "operation": "AddPermission", + "params": [ + { "target": "TopicArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "ConfirmSubscription": { + "request": { + "operation": "ConfirmSubscription", + "params": [ + { "target": "TopicArn", "source": "identifier", "name": "Arn" } + ] + }, + "resource": { + "type": "Subscription", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "SubscriptionArn" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteTopic", + "params": [ + { "target": "TopicArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "Publish": { + "request": { + "operation": "Publish", + "params": [ + { "target": "TopicArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "RemovePermission": { + "request": { + "operation": "RemovePermission", + "params": [ + { "target": "TopicArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "SetAttributes": { + "request": { + "operation": "SetTopicAttributes", + "params": [ + { "target": "TopicArn", "source": "identifier", "name": "Arn" } + ] + } + }, + "Subscribe": { + "request": { + "operation": "Subscribe", + "params": [ + { "target": "TopicArn", "source": "identifier", "name": "Arn" } + ] + }, + "resource": { + "type": "Subscription", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "SubscriptionArn" } + ] + } + } + }, + "hasMany": { + "Subscriptions": { + "request": { + "operation": "ListSubscriptionsByTopic", + "params": [ + { "target": "TopicArn", "source": "identifier", "name": "Arn" } + ] + }, + "resource": { + "type": "Subscription", + "identifiers": [ + { "target": "Arn", "source": "response", "path": "Subscriptions[].SubscriptionArn" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/data/sqs/2012-11-05/resources-1.json b/dbtzin/lib/python3.8/site-packages/boto3/data/sqs/2012-11-05/resources-1.json new file mode 100644 index 00000000..b1e74ab0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/data/sqs/2012-11-05/resources-1.json @@ -0,0 +1,232 @@ +{ + "service": { + "actions": { + "CreateQueue": { + "request": { "operation": "CreateQueue" }, + "resource": { + "type": "Queue", + "identifiers": [ + { "target": "Url", "source": "response", "path": "QueueUrl" } + ] + } + }, + "GetQueueByName": { + "request": { "operation": "GetQueueUrl" }, + "resource": { + "type": "Queue", + "identifiers": [ + { "target": "Url", "source": "response", "path": "QueueUrl" } + ] + } + } + }, + "has": { + "Queue": { + "resource": { + "type": "Queue", + "identifiers": [ + { "target": "Url", "source": "input" } + ] + } + } + }, + "hasMany": { + "Queues": { + "request": { "operation": "ListQueues" }, + "resource": { + "type": "Queue", + "identifiers": [ + { "target": "Url", "source": "response", "path": "QueueUrls[]" } + ] + } + } + } + }, + "resources": { + "Message": { + "identifiers": [ + { "name": "QueueUrl" }, + { + "name": "ReceiptHandle", + "memberName": "ReceiptHandle" + } + ], + "shape": "Message", + "actions": { + "ChangeVisibility": { + "request": { + "operation": "ChangeMessageVisibility", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "QueueUrl" }, + { "target": "ReceiptHandle", "source": "identifier", "name": "ReceiptHandle" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteMessage", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "QueueUrl" }, + { "target": "ReceiptHandle", "source": "identifier", "name": "ReceiptHandle" } + ] + } + } + }, + "batchActions": { + "Delete": { + "request": { + "operation": "DeleteMessageBatch", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "QueueUrl" }, + { "target": "Entries[*].Id", "source": "data", "path": "MessageId" }, + { "target": "Entries[*].ReceiptHandle", "source": "identifier", "name": "ReceiptHandle" } + ] + } + } + }, + "has": { + "Queue": { + "resource": { + "type": "Queue", + "identifiers": [ + { "target": "Url", "source": "identifier", "name": "QueueUrl" } + ] + } + } + } + }, + "Queue": { + "identifiers": [ + { "name": "Url" } + ], + "shape": "GetQueueAttributesResult", + "load": { + "request": { + "operation": "GetQueueAttributes", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" }, + { "target": "AttributeNames[]", "source": "string", "value": "All" } + ] + }, + "path": "@" + }, + "actions": { + "AddPermission": { + "request": { + "operation": "AddPermission", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + } + }, + "ChangeMessageVisibilityBatch": { + "request": { + "operation": "ChangeMessageVisibilityBatch", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + } + }, + "Delete": { + "request": { + "operation": "DeleteQueue", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + } + }, + "DeleteMessages": { + "request": { + "operation": "DeleteMessageBatch", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + } + }, + "Purge": { + "request": { + "operation": "PurgeQueue", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + } + }, + "ReceiveMessages": { + "request": { + "operation": "ReceiveMessage", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + }, + "resource": { + "type": "Message", + "identifiers": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" }, + { "target": "ReceiptHandle", "source": "response", "path": "Messages[].ReceiptHandle" } + ], + "path": "Messages[]" + } + }, + "RemovePermission": { + "request": { + "operation": "RemovePermission", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + } + }, + "SendMessage": { + "request": { + "operation": "SendMessage", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + } + }, + "SendMessages": { + "request": { + "operation": "SendMessageBatch", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + } + }, + "SetAttributes": { + "request": { + "operation": "SetQueueAttributes", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + } + } + }, + "has": { + "Message": { + "resource": { + "type": "Message", + "identifiers": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" }, + { "target": "ReceiptHandle", "source": "input" } + ] + } + } + }, + "hasMany": { + "DeadLetterSourceQueues": { + "request": { + "operation": "ListDeadLetterSourceQueues", + "params": [ + { "target": "QueueUrl", "source": "identifier", "name": "Url" } + ] + }, + "resource": { + "type": "Queue", + "identifiers": [ + { "target": "Url", "source": "response", "path": "queueUrls[]" } + ] + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__init__.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/__init__.py new file mode 100644 index 00000000..ebd112c6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/__init__.py @@ -0,0 +1,51 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore.docs import DEPRECATED_SERVICE_NAMES + +from boto3.docs.service import ServiceDocumenter + + +def generate_docs(root_dir, session): + """Generates the reference documentation for botocore + + This will go through every available AWS service and output ReSTructured + text files documenting each service. + + :param root_dir: The directory to write the reference files to. Each + service's reference documentation is loacated at + root_dir/reference/services/service-name.rst + + :param session: The boto3 session + """ + services_doc_path = os.path.join(root_dir, 'reference', 'services') + if not os.path.exists(services_doc_path): + os.makedirs(services_doc_path) + + # Prevents deprecated service names from being generated in docs. + available_services = [ + service + for service in session.get_available_services() + if service not in DEPRECATED_SERVICE_NAMES + ] + + for service_name in available_services: + docs = ServiceDocumenter( + service_name, session, services_doc_path + ).document_service() + service_doc_path = os.path.join( + services_doc_path, service_name + '.rst' + ) + with open(service_doc_path, 'wb') as f: + f.write(docs) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..964ddb83 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/action.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/action.cpython-38.pyc new file mode 100644 index 00000000..6b92f714 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/action.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/attr.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/attr.cpython-38.pyc new file mode 100644 index 00000000..21de9903 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/attr.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/base.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/base.cpython-38.pyc new file mode 100644 index 00000000..c2a65343 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/base.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/client.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/client.cpython-38.pyc new file mode 100644 index 00000000..68bfe3b2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/client.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/collection.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/collection.cpython-38.pyc new file mode 100644 index 00000000..695d0527 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/collection.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/docstring.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/docstring.cpython-38.pyc new file mode 100644 index 00000000..17afd7c4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/docstring.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/method.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/method.cpython-38.pyc new file mode 100644 index 00000000..1a337680 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/method.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/resource.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/resource.cpython-38.pyc new file mode 100644 index 00000000..46218406 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/resource.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/service.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/service.cpython-38.pyc new file mode 100644 index 00000000..f856f29e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/service.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/subresource.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/subresource.cpython-38.pyc new file mode 100644 index 00000000..a80d3b1e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/subresource.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/utils.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/utils.cpython-38.pyc new file mode 100644 index 00000000..670da620 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/utils.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/waiter.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/waiter.cpython-38.pyc new file mode 100644 index 00000000..49fe817d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/docs/__pycache__/waiter.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/action.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/action.py new file mode 100644 index 00000000..5215dca4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/action.py @@ -0,0 +1,217 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore import xform_name +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.docs.method import ( + document_custom_method, + document_model_driven_method, +) +from botocore.model import OperationModel +from botocore.utils import get_service_module_name + +from boto3.docs.base import NestedDocumenter +from boto3.docs.method import document_model_driven_resource_method +from boto3.docs.utils import ( + add_resource_type_overview, + get_resource_ignore_params, + get_resource_public_actions, +) + +PUT_DATA_WARNING_MESSAGE = """ +.. warning:: + It is recommended to use the :py:meth:`put_metric_data` + :doc:`client method <../../cloudwatch/client/put_metric_data>` + instead. If you would still like to use this resource method, + please make sure that ``MetricData[].MetricName`` is equal to + the metric resource's ``name`` attribute. +""" + +WARNING_MESSAGES = { + "Metric": {"put_data": PUT_DATA_WARNING_MESSAGE}, +} + +IGNORE_PARAMS = {"Metric": {"put_data": ["Namespace"]}} + + +class ActionDocumenter(NestedDocumenter): + def document_actions(self, section): + modeled_actions_list = self._resource_model.actions + modeled_actions = {} + for modeled_action in modeled_actions_list: + modeled_actions[modeled_action.name] = modeled_action + resource_actions = get_resource_public_actions( + self._resource.__class__ + ) + self.member_map['actions'] = sorted(resource_actions) + add_resource_type_overview( + section=section, + resource_type='Actions', + description=( + 'Actions call operations on resources. They may ' + 'automatically handle the passing in of arguments set ' + 'from identifiers and some attributes.' + ), + intro_link='actions_intro', + ) + resource_warnings = WARNING_MESSAGES.get(self._resource_name, {}) + for action_name in sorted(resource_actions): + # Create a new DocumentStructure for each action and add contents. + action_doc = DocumentStructure(action_name, target='html') + breadcrumb_section = action_doc.add_new_section('breadcrumb') + breadcrumb_section.style.ref(self._resource_class_name, 'index') + breadcrumb_section.write(f' / Action / {action_name}') + action_doc.add_title_section(action_name) + warning_message = resource_warnings.get(action_name) + if warning_message is not None: + action_doc.add_new_section("warning").write(warning_message) + action_section = action_doc.add_new_section( + action_name, + context={'qualifier': f'{self.class_name}.'}, + ) + if action_name in ['load', 'reload'] and self._resource_model.load: + document_load_reload_action( + section=action_section, + action_name=action_name, + resource_name=self._resource_name, + event_emitter=self._resource.meta.client.meta.events, + load_model=self._resource_model.load, + service_model=self._service_model, + ) + elif action_name in modeled_actions: + document_action( + section=action_section, + resource_name=self._resource_name, + event_emitter=self._resource.meta.client.meta.events, + action_model=modeled_actions[action_name], + service_model=self._service_model, + ) + else: + document_custom_method( + action_section, action_name, resource_actions[action_name] + ) + # Write actions in individual/nested files. + # Path: /reference/services///.rst + actions_dir_path = os.path.join( + self._root_docs_path, + f'{self._service_name}', + f'{self._resource_sub_path}', + ) + action_doc.write_to_file(actions_dir_path, action_name) + + +def document_action( + section, + resource_name, + event_emitter, + action_model, + service_model, + include_signature=True, +): + """Documents a resource action + + :param section: The section to write to + + :param resource_name: The name of the resource + + :param event_emitter: The event emitter to use to emit events + + :param action_model: The model of the action + + :param service_model: The model of the service + + :param include_signature: Whether or not to include the signature. + It is useful for generating docstrings. + """ + operation_model = service_model.operation_model( + action_model.request.operation + ) + ignore_params = IGNORE_PARAMS.get(resource_name, {}).get( + action_model.name, + get_resource_ignore_params(action_model.request.params), + ) + example_return_value = 'response' + if action_model.resource: + example_return_value = xform_name(action_model.resource.type) + example_resource_name = xform_name(resource_name) + if service_model.service_name == resource_name: + example_resource_name = resource_name + example_prefix = '{} = {}.{}'.format( + example_return_value, example_resource_name, action_model.name + ) + full_action_name = ( + f"{section.context.get('qualifier', '')}{action_model.name}" + ) + document_model_driven_resource_method( + section=section, + method_name=full_action_name, + operation_model=operation_model, + event_emitter=event_emitter, + method_description=operation_model.documentation, + example_prefix=example_prefix, + exclude_input=ignore_params, + resource_action_model=action_model, + include_signature=include_signature, + ) + + +def document_load_reload_action( + section, + action_name, + resource_name, + event_emitter, + load_model, + service_model, + include_signature=True, +): + """Documents the resource load action + + :param section: The section to write to + + :param action_name: The name of the loading action should be load or reload + + :param resource_name: The name of the resource + + :param event_emitter: The event emitter to use to emit events + + :param load_model: The model of the load action + + :param service_model: The model of the service + + :param include_signature: Whether or not to include the signature. + It is useful for generating docstrings. + """ + description = ( + 'Calls :py:meth:`{}.Client.{}` to update the attributes of the ' + '{} resource. Note that the load and reload methods are ' + 'the same method and can be used interchangeably.'.format( + get_service_module_name(service_model), + xform_name(load_model.request.operation), + resource_name, + ) + ) + example_resource_name = xform_name(resource_name) + if service_model.service_name == resource_name: + example_resource_name = resource_name + example_prefix = f'{example_resource_name}.{action_name}' + full_action_name = f"{section.context.get('qualifier', '')}{action_name}" + document_model_driven_method( + section=section, + method_name=full_action_name, + operation_model=OperationModel({}, service_model), + event_emitter=event_emitter, + method_description=description, + example_prefix=example_prefix, + include_signature=include_signature, + ) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/attr.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/attr.py new file mode 100644 index 00000000..a968da29 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/attr.py @@ -0,0 +1,72 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from botocore.docs.params import ResponseParamsDocumenter + +from boto3.docs.utils import get_identifier_description + + +class ResourceShapeDocumenter(ResponseParamsDocumenter): + EVENT_NAME = 'resource-shape' + + +def document_attribute( + section, + service_name, + resource_name, + attr_name, + event_emitter, + attr_model, + include_signature=True, +): + if include_signature: + full_attr_name = f"{section.context.get('qualifier', '')}{attr_name}" + section.style.start_sphinx_py_attr(full_attr_name) + # Note that an attribute may have one, may have many, or may have no + # operations that back the resource's shape. So we just set the + # operation_name to the resource name if we ever to hook in and modify + # a particular attribute. + ResourceShapeDocumenter( + service_name=service_name, + operation_name=resource_name, + event_emitter=event_emitter, + ).document_params(section=section, shape=attr_model) + + +def document_identifier( + section, + resource_name, + identifier_model, + include_signature=True, +): + if include_signature: + full_identifier_name = ( + f"{section.context.get('qualifier', '')}{identifier_model.name}" + ) + section.style.start_sphinx_py_attr(full_identifier_name) + description = get_identifier_description( + resource_name, identifier_model.name + ) + section.write(f'*(string)* {description}') + + +def document_reference(section, reference_model, include_signature=True): + if include_signature: + full_reference_name = ( + f"{section.context.get('qualifier', '')}{reference_model.name}" + ) + section.style.start_sphinx_py_attr(full_reference_name) + reference_type = f'(:py:class:`{reference_model.resource.type}`) ' + section.write(reference_type) + section.include_doc_string( + f'The related {reference_model.name} if set, otherwise ``None``.' + ) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/base.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/base.py new file mode 100644 index 00000000..ee496461 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/base.py @@ -0,0 +1,51 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from botocore.compat import OrderedDict + + +class BaseDocumenter: + def __init__(self, resource): + self._resource = resource + self._client = self._resource.meta.client + self._resource_model = self._resource.meta.resource_model + self._service_model = self._client.meta.service_model + self._resource_name = self._resource.meta.resource_model.name + self._service_name = self._service_model.service_name + self._service_docs_name = self._client.__class__.__name__ + self.member_map = OrderedDict() + self.represents_service_resource = ( + self._service_name == self._resource_name + ) + self._resource_class_name = self._resource_name + if self._resource_name == self._service_name: + self._resource_class_name = 'ServiceResource' + + @property + def class_name(self): + return f'{self._service_docs_name}.{self._resource_name}' + + +class NestedDocumenter(BaseDocumenter): + def __init__(self, resource, root_docs_path): + super().__init__(resource) + self._root_docs_path = root_docs_path + self._resource_sub_path = self._resource_name.lower() + if self._resource_name == self._service_name: + self._resource_sub_path = 'service-resource' + + @property + def class_name(self): + resource_class_name = self._resource_name + if self._resource_name == self._service_name: + resource_class_name = 'ServiceResource' + return f'{self._service_docs_name}.{resource_class_name}' diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/client.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/client.py new file mode 100644 index 00000000..51e92e35 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/client.py @@ -0,0 +1,28 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from botocore.docs.client import ClientDocumenter + + +class Boto3ClientDocumenter(ClientDocumenter): + def _add_client_creation_example(self, section): + section.style.start_codeblock() + section.style.new_line() + section.write('import boto3') + section.style.new_line() + section.style.new_line() + section.write( + 'client = boto3.client(\'{service}\')'.format( + service=self._service_name + ) + ) + section.style.end_codeblock() diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/collection.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/collection.py new file mode 100644 index 00000000..ea65e870 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/collection.py @@ -0,0 +1,312 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore import xform_name +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.docs.method import get_instance_public_methods +from botocore.docs.utils import DocumentedShape + +from boto3.docs.base import NestedDocumenter +from boto3.docs.method import document_model_driven_resource_method +from boto3.docs.utils import ( + add_resource_type_overview, + get_resource_ignore_params, +) + + +class CollectionDocumenter(NestedDocumenter): + def document_collections(self, section): + collections = self._resource.meta.resource_model.collections + collections_list = [] + add_resource_type_overview( + section=section, + resource_type='Collections', + description=( + 'Collections provide an interface to iterate over and ' + 'manipulate groups of resources. ' + ), + intro_link='guide_collections', + ) + self.member_map['collections'] = collections_list + for collection in collections: + collections_list.append(collection.name) + # Create a new DocumentStructure for each collection and add contents. + collection_doc = DocumentStructure(collection.name, target='html') + breadcrumb_section = collection_doc.add_new_section('breadcrumb') + breadcrumb_section.style.ref(self._resource_class_name, 'index') + breadcrumb_section.write(f' / Collection / {collection.name}') + collection_doc.add_title_section(collection.name) + collection_section = collection_doc.add_new_section( + collection.name, + context={'qualifier': f'{self.class_name}.'}, + ) + self._document_collection(collection_section, collection) + + # Write collections in individual/nested files. + # Path: /reference/services///.rst + collections_dir_path = os.path.join( + self._root_docs_path, + f'{self._service_name}', + f'{self._resource_sub_path}', + ) + collection_doc.write_to_file(collections_dir_path, collection.name) + + def _document_collection(self, section, collection): + methods = get_instance_public_methods( + getattr(self._resource, collection.name) + ) + document_collection_object(section, collection) + batch_actions = {} + for batch_action in collection.batch_actions: + batch_actions[batch_action.name] = batch_action + + for method in sorted(methods): + method_section = section.add_new_section(method) + if method in batch_actions: + document_batch_action( + section=method_section, + resource_name=self._resource_name, + event_emitter=self._resource.meta.client.meta.events, + batch_action_model=batch_actions[method], + collection_model=collection, + service_model=self._resource.meta.client.meta.service_model, + ) + else: + document_collection_method( + section=method_section, + resource_name=self._resource_name, + action_name=method, + event_emitter=self._resource.meta.client.meta.events, + collection_model=collection, + service_model=self._resource.meta.client.meta.service_model, + ) + + +def document_collection_object( + section, + collection_model, + include_signature=True, +): + """Documents a collection resource object + + :param section: The section to write to + + :param collection_model: The model of the collection + + :param include_signature: Whether or not to include the signature. + It is useful for generating docstrings. + """ + if include_signature: + full_collection_name = ( + f"{section.context.get('qualifier', '')}{collection_model.name}" + ) + section.style.start_sphinx_py_attr(full_collection_name) + section.include_doc_string( + f'A collection of {collection_model.resource.type} resources.' + ) + section.include_doc_string( + f'A {collection_model.resource.type} Collection will include all ' + f'resources by default, and extreme caution should be taken when ' + f'performing actions on all resources.' + ) + + +def document_batch_action( + section, + resource_name, + event_emitter, + batch_action_model, + service_model, + collection_model, + include_signature=True, +): + """Documents a collection's batch action + + :param section: The section to write to + + :param resource_name: The name of the resource + + :param action_name: The name of collection action. Currently only + can be all, filter, limit, or page_size + + :param event_emitter: The event emitter to use to emit events + + :param batch_action_model: The model of the batch action + + :param collection_model: The model of the collection + + :param service_model: The model of the service + + :param include_signature: Whether or not to include the signature. + It is useful for generating docstrings. + """ + operation_model = service_model.operation_model( + batch_action_model.request.operation + ) + ignore_params = get_resource_ignore_params( + batch_action_model.request.params + ) + + example_return_value = 'response' + if batch_action_model.resource: + example_return_value = xform_name(batch_action_model.resource.type) + + example_resource_name = xform_name(resource_name) + if service_model.service_name == resource_name: + example_resource_name = resource_name + example_prefix = '{} = {}.{}.{}'.format( + example_return_value, + example_resource_name, + collection_model.name, + batch_action_model.name, + ) + document_model_driven_resource_method( + section=section, + method_name=batch_action_model.name, + operation_model=operation_model, + event_emitter=event_emitter, + method_description=operation_model.documentation, + example_prefix=example_prefix, + exclude_input=ignore_params, + resource_action_model=batch_action_model, + include_signature=include_signature, + ) + + +def document_collection_method( + section, + resource_name, + action_name, + event_emitter, + collection_model, + service_model, + include_signature=True, +): + """Documents a collection method + + :param section: The section to write to + + :param resource_name: The name of the resource + + :param action_name: The name of collection action. Currently only + can be all, filter, limit, or page_size + + :param event_emitter: The event emitter to use to emit events + + :param collection_model: The model of the collection + + :param service_model: The model of the service + + :param include_signature: Whether or not to include the signature. + It is useful for generating docstrings. + """ + operation_model = service_model.operation_model( + collection_model.request.operation + ) + + underlying_operation_members = [] + if operation_model.input_shape: + underlying_operation_members = operation_model.input_shape.members + + example_resource_name = xform_name(resource_name) + if service_model.service_name == resource_name: + example_resource_name = resource_name + + custom_action_info_dict = { + 'all': { + 'method_description': ( + f'Creates an iterable of all {collection_model.resource.type} ' + f'resources in the collection.' + ), + 'example_prefix': '{}_iterator = {}.{}.all'.format( + xform_name(collection_model.resource.type), + example_resource_name, + collection_model.name, + ), + 'exclude_input': underlying_operation_members, + }, + 'filter': { + 'method_description': ( + f'Creates an iterable of all {collection_model.resource.type} ' + f'resources in the collection filtered by kwargs passed to ' + f'method. A {collection_model.resource.type} collection will ' + f'include all resources by default if no filters are provided, ' + f'and extreme caution should be taken when performing actions ' + f'on all resources.' + ), + 'example_prefix': '{}_iterator = {}.{}.filter'.format( + xform_name(collection_model.resource.type), + example_resource_name, + collection_model.name, + ), + 'exclude_input': get_resource_ignore_params( + collection_model.request.params + ), + }, + 'limit': { + 'method_description': ( + f'Creates an iterable up to a specified amount of ' + f'{collection_model.resource.type} resources in the collection.' + ), + 'example_prefix': '{}_iterator = {}.{}.limit'.format( + xform_name(collection_model.resource.type), + example_resource_name, + collection_model.name, + ), + 'include_input': [ + DocumentedShape( + name='count', + type_name='integer', + documentation=( + 'The limit to the number of resources ' + 'in the iterable.' + ), + ) + ], + 'exclude_input': underlying_operation_members, + }, + 'page_size': { + 'method_description': ( + f'Creates an iterable of all {collection_model.resource.type} ' + f'resources in the collection, but limits the number of ' + f'items returned by each service call by the specified amount.' + ), + 'example_prefix': '{}_iterator = {}.{}.page_size'.format( + xform_name(collection_model.resource.type), + example_resource_name, + collection_model.name, + ), + 'include_input': [ + DocumentedShape( + name='count', + type_name='integer', + documentation=( + 'The number of items returned by each ' 'service call' + ), + ) + ], + 'exclude_input': underlying_operation_members, + }, + } + if action_name in custom_action_info_dict: + action_info = custom_action_info_dict[action_name] + document_model_driven_resource_method( + section=section, + method_name=action_name, + operation_model=operation_model, + event_emitter=event_emitter, + resource_action_model=collection_model, + include_signature=include_signature, + **action_info, + ) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/docstring.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/docstring.py new file mode 100644 index 00000000..daf67873 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/docstring.py @@ -0,0 +1,77 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from botocore.docs.docstring import LazyLoadedDocstring + +from boto3.docs.action import document_action, document_load_reload_action +from boto3.docs.attr import ( + document_attribute, + document_identifier, + document_reference, +) +from boto3.docs.collection import ( + document_batch_action, + document_collection_method, + document_collection_object, +) +from boto3.docs.subresource import document_sub_resource +from boto3.docs.waiter import document_resource_waiter + + +class ActionDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_action(*args, **kwargs) + + +class LoadReloadDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_load_reload_action(*args, **kwargs) + + +class SubResourceDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_sub_resource(*args, **kwargs) + + +class AttributeDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_attribute(*args, **kwargs) + + +class IdentifierDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_identifier(*args, **kwargs) + + +class ReferenceDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_reference(*args, **kwargs) + + +class CollectionDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_collection_object(*args, **kwargs) + + +class CollectionMethodDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_collection_method(*args, **kwargs) + + +class BatchActionDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_batch_action(*args, **kwargs) + + +class ResourceWaiterDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_resource_waiter(*args, **kwargs) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/method.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/method.py new file mode 100644 index 00000000..86133674 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/method.py @@ -0,0 +1,77 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from botocore.docs.method import document_model_driven_method + + +def document_model_driven_resource_method( + section, + method_name, + operation_model, + event_emitter, + method_description=None, + example_prefix=None, + include_input=None, + include_output=None, + exclude_input=None, + exclude_output=None, + document_output=True, + resource_action_model=None, + include_signature=True, +): + document_model_driven_method( + section=section, + method_name=method_name, + operation_model=operation_model, + event_emitter=event_emitter, + method_description=method_description, + example_prefix=example_prefix, + include_input=include_input, + include_output=include_output, + exclude_input=exclude_input, + exclude_output=exclude_output, + document_output=document_output, + include_signature=include_signature, + ) + + # If this action returns a resource modify the return example to + # appropriately reflect that. + if resource_action_model.resource: + if 'return' in section.available_sections: + section.delete_section('return') + resource_type = resource_action_model.resource.type + + new_return_section = section.add_new_section('return') + return_resource_type = '{}.{}'.format( + operation_model.service_model.service_name, resource_type + ) + + return_type = f':py:class:`{return_resource_type}`' + return_description = f'{resource_type} resource' + + if _method_returns_resource_list(resource_action_model.resource): + return_type = f'list({return_type})' + return_description = f'A list of {resource_type} resources' + + new_return_section.style.new_line() + new_return_section.write(f':rtype: {return_type}') + new_return_section.style.new_line() + new_return_section.write(f':returns: {return_description}') + new_return_section.style.new_line() + + +def _method_returns_resource_list(resource): + for identifier in resource.identifiers: + if identifier.path and '[]' in identifier.path: + return True + + return False diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/resource.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/resource.py new file mode 100644 index 00000000..d4dff1db --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/resource.py @@ -0,0 +1,364 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore import xform_name +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.docs.utils import get_official_service_name + +from boto3.docs.action import ActionDocumenter +from boto3.docs.attr import ( + document_attribute, + document_identifier, + document_reference, +) +from boto3.docs.base import BaseDocumenter +from boto3.docs.collection import CollectionDocumenter +from boto3.docs.subresource import SubResourceDocumenter +from boto3.docs.utils import ( + add_resource_type_overview, + get_identifier_args_for_signature, + get_identifier_description, + get_identifier_values_for_example, +) +from boto3.docs.waiter import WaiterResourceDocumenter + + +class ResourceDocumenter(BaseDocumenter): + def __init__(self, resource, botocore_session, root_docs_path): + super().__init__(resource) + self._botocore_session = botocore_session + self._root_docs_path = root_docs_path + self._resource_sub_path = self._resource_name.lower() + if self._resource_name == self._service_name: + self._resource_sub_path = 'service-resource' + + def document_resource(self, section): + self._add_title(section) + self._add_resource_note(section) + self._add_intro(section) + self._add_identifiers(section) + self._add_attributes(section) + self._add_references(section) + self._add_actions(section) + self._add_sub_resources(section) + self._add_collections(section) + self._add_waiters(section) + + def _add_title(self, section): + title_section = section.add_new_section('title') + title_section.style.h2(self._resource_name) + + def _add_intro(self, section): + identifier_names = [] + if self._resource_model.identifiers: + for identifier in self._resource_model.identifiers: + identifier_names.append(identifier.name) + + # Write out the class signature. + class_args = get_identifier_args_for_signature(identifier_names) + start_class = section.add_new_section('start_class') + start_class.style.start_sphinx_py_class( + class_name=f'{self.class_name}({class_args})' + ) + + # Add as short description about the resource + description_section = start_class.add_new_section('description') + self._add_description(description_section) + + # Add an example of how to instantiate the resource + example_section = start_class.add_new_section('example') + self._add_example(example_section, identifier_names) + + # Add the description for the parameters to instantiate the + # resource. + param_section = start_class.add_new_section('params') + self._add_params_description(param_section, identifier_names) + + end_class = section.add_new_section('end_class') + end_class.style.end_sphinx_py_class() + + def _add_description(self, section): + official_service_name = get_official_service_name(self._service_model) + section.write( + 'A resource representing an {} {}'.format( + official_service_name, self._resource_name + ) + ) + + def _add_example(self, section, identifier_names): + section.style.start_codeblock() + section.style.new_line() + section.write('import boto3') + section.style.new_line() + section.style.new_line() + section.write( + '{} = boto3.resource(\'{}\')'.format( + self._service_name, self._service_name + ) + ) + section.style.new_line() + example_values = get_identifier_values_for_example(identifier_names) + section.write( + '{} = {}.{}({})'.format( + xform_name(self._resource_name), + self._service_name, + self._resource_name, + example_values, + ) + ) + section.style.end_codeblock() + + def _add_params_description(self, section, identifier_names): + for identifier_name in identifier_names: + description = get_identifier_description( + self._resource_name, identifier_name + ) + section.write(f':type {identifier_name}: string') + section.style.new_line() + section.write(f':param {identifier_name}: {description}') + section.style.new_line() + + def _add_overview_of_member_type(self, section, resource_member_type): + section.style.new_line() + section.write( + f'These are the resource\'s available {resource_member_type}:' + ) + section.style.new_line() + section.style.toctree() + for member in self.member_map[resource_member_type]: + section.style.tocitem(f'{member}') + + def _add_identifiers(self, section): + identifiers = self._resource.meta.resource_model.identifiers + section = section.add_new_section('identifiers') + member_list = [] + if identifiers: + self.member_map['identifiers'] = member_list + add_resource_type_overview( + section=section, + resource_type='Identifiers', + description=( + 'Identifiers are properties of a resource that are ' + 'set upon instantiation of the resource.' + ), + intro_link='identifiers_attributes_intro', + ) + for identifier in identifiers: + member_list.append(identifier.name) + # Create a new DocumentStructure for each identifier and add contents. + identifier_doc = DocumentStructure(identifier.name, target='html') + breadcrumb_section = identifier_doc.add_new_section('breadcrumb') + breadcrumb_section.style.ref(self._resource_class_name, 'index') + breadcrumb_section.write(f' / Identifier / {identifier.name}') + identifier_doc.add_title_section(identifier.name) + identifier_section = identifier_doc.add_new_section( + identifier.name, + context={'qualifier': f'{self.class_name}.'}, + ) + document_identifier( + section=identifier_section, + resource_name=self._resource_name, + identifier_model=identifier, + ) + # Write identifiers in individual/nested files. + # Path: /reference/services///.rst + identifiers_dir_path = os.path.join( + self._root_docs_path, + f'{self._service_name}', + f'{self._resource_sub_path}', + ) + identifier_doc.write_to_file(identifiers_dir_path, identifier.name) + + if identifiers: + self._add_overview_of_member_type(section, 'identifiers') + + def _add_attributes(self, section): + service_model = self._resource.meta.client.meta.service_model + attributes = {} + if self._resource.meta.resource_model.shape: + shape = service_model.shape_for( + self._resource.meta.resource_model.shape + ) + attributes = self._resource.meta.resource_model.get_attributes( + shape + ) + section = section.add_new_section('attributes') + attribute_list = [] + if attributes: + add_resource_type_overview( + section=section, + resource_type='Attributes', + description=( + 'Attributes provide access' + ' to the properties of a resource. Attributes are lazy-' + 'loaded the first time one is accessed via the' + ' :py:meth:`load` method.' + ), + intro_link='identifiers_attributes_intro', + ) + self.member_map['attributes'] = attribute_list + for attr_name in sorted(attributes): + _, attr_shape = attributes[attr_name] + attribute_list.append(attr_name) + # Create a new DocumentStructure for each attribute and add contents. + attribute_doc = DocumentStructure(attr_name, target='html') + breadcrumb_section = attribute_doc.add_new_section('breadcrumb') + breadcrumb_section.style.ref(self._resource_class_name, 'index') + breadcrumb_section.write(f' / Attribute / {attr_name}') + attribute_doc.add_title_section(attr_name) + attribute_section = attribute_doc.add_new_section( + attr_name, + context={'qualifier': f'{self.class_name}.'}, + ) + document_attribute( + section=attribute_section, + service_name=self._service_name, + resource_name=self._resource_name, + attr_name=attr_name, + event_emitter=self._resource.meta.client.meta.events, + attr_model=attr_shape, + ) + # Write attributes in individual/nested files. + # Path: /reference/services///.rst + attributes_dir_path = os.path.join( + self._root_docs_path, + f'{self._service_name}', + f'{self._resource_sub_path}', + ) + attribute_doc.write_to_file(attributes_dir_path, attr_name) + if attributes: + self._add_overview_of_member_type(section, 'attributes') + + def _add_references(self, section): + section = section.add_new_section('references') + references = self._resource.meta.resource_model.references + reference_list = [] + if references: + add_resource_type_overview( + section=section, + resource_type='References', + description=( + 'References are related resource instances that have ' + 'a belongs-to relationship.' + ), + intro_link='references_intro', + ) + self.member_map['references'] = reference_list + self._add_overview_of_member_type(section, 'references') + for reference in references: + reference_list.append(reference.name) + # Create a new DocumentStructure for each reference and add contents. + reference_doc = DocumentStructure(reference.name, target='html') + breadcrumb_section = reference_doc.add_new_section('breadcrumb') + breadcrumb_section.style.ref(self._resource_class_name, 'index') + breadcrumb_section.write(f' / Reference / {reference.name}') + reference_doc.add_title_section(reference.name) + reference_section = reference_doc.add_new_section( + reference.name, + context={'qualifier': f'{self.class_name}.'}, + ) + document_reference( + section=reference_section, + reference_model=reference, + ) + # Write references in individual/nested files. + # Path: /reference/services///.rst + references_dir_path = os.path.join( + self._root_docs_path, + f'{self._service_name}', + f'{self._resource_sub_path}', + ) + reference_doc.write_to_file(references_dir_path, reference.name) + if references: + self._add_overview_of_member_type(section, 'references') + + def _add_actions(self, section): + section = section.add_new_section('actions') + actions = self._resource.meta.resource_model.actions + if actions: + documenter = ActionDocumenter(self._resource, self._root_docs_path) + documenter.member_map = self.member_map + documenter.document_actions(section) + self._add_overview_of_member_type(section, 'actions') + + def _add_sub_resources(self, section): + section = section.add_new_section('sub-resources') + sub_resources = self._resource.meta.resource_model.subresources + if sub_resources: + documenter = SubResourceDocumenter( + self._resource, self._root_docs_path + ) + documenter.member_map = self.member_map + documenter.document_sub_resources(section) + self._add_overview_of_member_type(section, 'sub-resources') + + def _add_collections(self, section): + section = section.add_new_section('collections') + collections = self._resource.meta.resource_model.collections + if collections: + documenter = CollectionDocumenter( + self._resource, self._root_docs_path + ) + documenter.member_map = self.member_map + documenter.document_collections(section) + self._add_overview_of_member_type(section, 'collections') + + def _add_waiters(self, section): + section = section.add_new_section('waiters') + waiters = self._resource.meta.resource_model.waiters + if waiters: + service_waiter_model = self._botocore_session.get_waiter_model( + self._service_name + ) + documenter = WaiterResourceDocumenter( + self._resource, service_waiter_model, self._root_docs_path + ) + documenter.member_map = self.member_map + documenter.document_resource_waiters(section) + self._add_overview_of_member_type(section, 'waiters') + + def _add_resource_note(self, section): + section = section.add_new_section('feature-freeze') + section.style.start_note() + section.write( + "Before using anything on this page, please refer to the resources " + ":doc:`user guide <../../../../guide/resources>` for the most recent " + "guidance on using resources." + ) + section.style.end_note() + + +class ServiceResourceDocumenter(ResourceDocumenter): + @property + def class_name(self): + return f'{self._service_docs_name}.ServiceResource' + + def _add_title(self, section): + title_section = section.add_new_section('title') + title_section.style.h2('Service Resource') + + def _add_description(self, section): + official_service_name = get_official_service_name(self._service_model) + section.write(f'A resource representing {official_service_name}') + + def _add_example(self, section, identifier_names): + section.style.start_codeblock() + section.style.new_line() + section.write('import boto3') + section.style.new_line() + section.style.new_line() + section.write( + f'{self._service_name} = boto3.resource(\'{self._service_name}\')' + ) + section.style.end_codeblock() diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/service.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/service.py new file mode 100644 index 00000000..39ed89b8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/service.py @@ -0,0 +1,202 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.docs.service import ServiceDocumenter as BaseServiceDocumenter +from botocore.exceptions import DataNotFoundError + +import boto3 +from boto3.docs.client import Boto3ClientDocumenter +from boto3.docs.resource import ResourceDocumenter, ServiceResourceDocumenter +from boto3.utils import ServiceContext + + +class ServiceDocumenter(BaseServiceDocumenter): + # The path used to find examples + EXAMPLE_PATH = os.path.join(os.path.dirname(boto3.__file__), 'examples') + + def __init__(self, service_name, session, root_docs_path): + super().__init__( + service_name=service_name, + # I know that this is an internal attribute, but the botocore session + # is needed to load the paginator and waiter models. + session=session._session, + root_docs_path=root_docs_path, + ) + self._boto3_session = session + self._client = self._boto3_session.client(service_name) + self._service_resource = None + if self._service_name in self._boto3_session.get_available_resources(): + self._service_resource = self._boto3_session.resource(service_name) + self.sections = [ + 'title', + 'client', + 'paginators', + 'waiters', + 'resources', + 'examples', + 'context-params', + ] + self._root_docs_path = root_docs_path + self._USER_GUIDE_LINK = ( + 'https://boto3.amazonaws.com/' + 'v1/documentation/api/latest/guide/resources.html' + ) + + def document_service(self): + """Documents an entire service. + + :returns: The reStructured text of the documented service. + """ + doc_structure = DocumentStructure( + self._service_name, section_names=self.sections, target='html' + ) + self.title(doc_structure.get_section('title')) + + self.client_api(doc_structure.get_section('client')) + self.paginator_api(doc_structure.get_section('paginators')) + self.waiter_api(doc_structure.get_section('waiters')) + if self._service_resource: + self.resource_section(doc_structure.get_section('resources')) + self._document_examples(doc_structure.get_section('examples')) + context_params_section = doc_structure.get_section('context-params') + self.client_context_params(context_params_section) + return doc_structure.flush_structure() + + def client_api(self, section): + examples = None + try: + examples = self.get_examples(self._service_name) + except DataNotFoundError: + pass + + Boto3ClientDocumenter( + self._client, self._root_docs_path, examples + ).document_client(section) + + def resource_section(self, section): + section.style.h2('Resources') + section.style.new_line() + section.write( + 'Resources are available in boto3 via the ' + '``resource`` method. For more detailed instructions ' + 'and examples on the usage of resources, see the ' + 'resources ' + ) + section.style.external_link( + title='user guide', + link=self._USER_GUIDE_LINK, + ) + section.write('.') + section.style.new_line() + section.style.new_line() + section.write('The available resources are:') + section.style.new_line() + section.style.toctree() + self._document_service_resource(section) + self._document_resources(section) + + def _document_service_resource(self, section): + # Create a new DocumentStructure for each Service Resource and add contents. + service_resource_doc = DocumentStructure( + 'service-resource', target='html' + ) + breadcrumb_section = service_resource_doc.add_new_section('breadcrumb') + breadcrumb_section.style.ref( + self._client.__class__.__name__, f'../../{self._service_name}' + ) + breadcrumb_section.write(' / Resource / ServiceResource') + ServiceResourceDocumenter( + self._service_resource, self._session, self._root_docs_path + ).document_resource(service_resource_doc) + # Write collections in individual/nested files. + # Path: /reference/services///.rst + resource_name = self._service_resource.meta.resource_model.name + if resource_name == self._service_name: + resource_name = 'service-resource' + service_resource_dir_path = os.path.join( + self._root_docs_path, + f'{self._service_name}', + f'{resource_name.lower()}', + ) + service_resource_doc.write_to_file(service_resource_dir_path, 'index') + section.style.tocitem(f'{self._service_name}/{resource_name}/index') + + def _document_resources(self, section): + temp_identifier_value = 'foo' + loader = self._session.get_component('data_loader') + json_resource_model = loader.load_service_model( + self._service_name, 'resources-1' + ) + service_model = self._service_resource.meta.client.meta.service_model + for resource_name in json_resource_model['resources']: + resource_model = json_resource_model['resources'][resource_name] + resource_cls = ( + self._boto3_session.resource_factory.load_from_definition( + resource_name=resource_name, + single_resource_json_definition=resource_model, + service_context=ServiceContext( + service_name=self._service_name, + resource_json_definitions=json_resource_model[ + 'resources' + ], + service_model=service_model, + service_waiter_model=None, + ), + ) + ) + identifiers = resource_cls.meta.resource_model.identifiers + args = [] + for _ in identifiers: + args.append(temp_identifier_value) + resource = resource_cls(*args, client=self._client) + # Create a new DocumentStructure for each Resource and add contents. + resource_name = resource.meta.resource_model.name.lower() + resource_doc = DocumentStructure(resource_name, target='html') + breadcrumb_section = resource_doc.add_new_section('breadcrumb') + breadcrumb_section.style.ref( + self._client.__class__.__name__, f'../../{self._service_name}' + ) + breadcrumb_section.write( + f' / Resource / {resource.meta.resource_model.name}' + ) + ResourceDocumenter( + resource, self._session, self._root_docs_path + ).document_resource( + resource_doc.add_new_section(resource.meta.resource_model.name) + ) + # Write collections in individual/nested files. + # Path: /reference/services///.rst + service_resource_dir_path = os.path.join( + self._root_docs_path, + f'{self._service_name}', + f'{resource_name}', + ) + resource_doc.write_to_file(service_resource_dir_path, 'index') + section.style.tocitem( + f'{self._service_name}/{resource_name}/index' + ) + + def _get_example_file(self): + return os.path.realpath( + os.path.join(self.EXAMPLE_PATH, self._service_name + '.rst') + ) + + def _document_examples(self, section): + examples_file = self._get_example_file() + if os.path.isfile(examples_file): + section.style.h2('Examples') + section.style.new_line() + with open(examples_file) as f: + section.write(f.read()) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/subresource.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/subresource.py new file mode 100644 index 00000000..792abf9d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/subresource.py @@ -0,0 +1,153 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore import xform_name +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.utils import get_service_module_name + +from boto3.docs.base import NestedDocumenter +from boto3.docs.utils import ( + add_resource_type_overview, + get_identifier_args_for_signature, + get_identifier_description, + get_identifier_values_for_example, +) + + +class SubResourceDocumenter(NestedDocumenter): + def document_sub_resources(self, section): + add_resource_type_overview( + section=section, + resource_type='Sub-resources', + description=( + 'Sub-resources are methods that create a new instance of a' + ' child resource. This resource\'s identifiers get passed' + ' along to the child.' + ), + intro_link='subresources_intro', + ) + sub_resources = sorted( + self._resource.meta.resource_model.subresources, + key=lambda sub_resource: sub_resource.name, + ) + sub_resources_list = [] + self.member_map['sub-resources'] = sub_resources_list + for sub_resource in sub_resources: + sub_resources_list.append(sub_resource.name) + # Create a new DocumentStructure for each sub_resource and add contents. + sub_resource_doc = DocumentStructure( + sub_resource.name, target='html' + ) + breadcrumb_section = sub_resource_doc.add_new_section('breadcrumb') + breadcrumb_section.style.ref(self._resource_class_name, 'index') + breadcrumb_section.write(f' / Sub-Resource / {sub_resource.name}') + sub_resource_doc.add_title_section(sub_resource.name) + sub_resource_section = sub_resource_doc.add_new_section( + sub_resource.name, + context={'qualifier': f'{self.class_name}.'}, + ) + document_sub_resource( + section=sub_resource_section, + resource_name=self._resource_name, + sub_resource_model=sub_resource, + service_model=self._service_model, + ) + + # Write sub_resources in individual/nested files. + # Path: /reference/services///.rst + sub_resources_dir_path = os.path.join( + self._root_docs_path, + f'{self._service_name}', + f'{self._resource_sub_path}', + ) + sub_resource_doc.write_to_file( + sub_resources_dir_path, sub_resource.name + ) + + +def document_sub_resource( + section, + resource_name, + sub_resource_model, + service_model, + include_signature=True, +): + """Documents a resource action + + :param section: The section to write to + + :param resource_name: The name of the resource + + :param sub_resource_model: The model of the subresource + + :param service_model: The model of the service + + :param include_signature: Whether or not to include the signature. + It is useful for generating docstrings. + """ + identifiers_needed = [] + for identifier in sub_resource_model.resource.identifiers: + if identifier.source == 'input': + identifiers_needed.append(xform_name(identifier.target)) + + if include_signature: + signature_args = get_identifier_args_for_signature(identifiers_needed) + full_sub_resource_name = ( + f"{section.context.get('qualifier', '')}{sub_resource_model.name}" + ) + section.style.start_sphinx_py_method( + full_sub_resource_name, signature_args + ) + + method_intro_section = section.add_new_section('method-intro') + description = f'Creates a {sub_resource_model.resource.type} resource.' + method_intro_section.include_doc_string(description) + example_section = section.add_new_section('example') + example_values = get_identifier_values_for_example(identifiers_needed) + example_resource_name = xform_name(resource_name) + if service_model.service_name == resource_name: + example_resource_name = resource_name + example = '{} = {}.{}({})'.format( + xform_name(sub_resource_model.resource.type), + example_resource_name, + sub_resource_model.name, + example_values, + ) + example_section.style.start_codeblock() + example_section.write(example) + example_section.style.end_codeblock() + + param_section = section.add_new_section('params') + for identifier in identifiers_needed: + description = get_identifier_description( + sub_resource_model.name, identifier + ) + param_section.write(f':type {identifier}: string') + param_section.style.new_line() + param_section.write(f':param {identifier}: {description}') + param_section.style.new_line() + + return_section = section.add_new_section('return') + return_section.style.new_line() + return_section.write( + ':rtype: :py:class:`{}.{}`'.format( + get_service_module_name(service_model), + sub_resource_model.resource.type, + ) + ) + return_section.style.new_line() + return_section.write( + f':returns: A {sub_resource_model.resource.type} resource' + ) + return_section.style.new_line() diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/utils.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/utils.py new file mode 100644 index 00000000..0830af50 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/utils.py @@ -0,0 +1,146 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import inspect + +import jmespath + + +def get_resource_ignore_params(params): + """Helper method to determine which parameters to ignore for actions + + :returns: A list of the parameter names that does not need to be + included in a resource's method call for documentation purposes. + """ + ignore_params = [] + for param in params: + result = jmespath.compile(param.target) + current = result.parsed + # Use JMESPath to find the left most element in the target expression + # which will be the parameter to ignore in the action call. + while current['children']: + current = current['children'][0] + # Make sure the parameter we are about to ignore is a field. + # If it is not, we should ignore the result to avoid false positives. + if current['type'] == 'field': + ignore_params.append(current['value']) + return ignore_params + + +def is_resource_action(action_handle): + return inspect.isfunction(action_handle) + + +def get_resource_public_actions(resource_class): + resource_class_members = inspect.getmembers(resource_class) + resource_methods = {} + for name, member in resource_class_members: + if not name.startswith('_'): + if not name[0].isupper(): + if not name.startswith('wait_until'): + if is_resource_action(member): + resource_methods[name] = member + return resource_methods + + +def get_identifier_values_for_example(identifier_names): + return ','.join([f'\'{identifier}\'' for identifier in identifier_names]) + + +def get_identifier_args_for_signature(identifier_names): + return ','.join(identifier_names) + + +def get_identifier_description(resource_name, identifier_name): + return ( + f"The {resource_name}'s {identifier_name} identifier. " + f"This **must** be set." + ) + + +def add_resource_type_overview( + section, resource_type, description, intro_link=None +): + section.style.new_line() + section.style.h3(resource_type) + section.style.new_line() + section.style.new_line() + section.write(description) + section.style.new_line() + if intro_link is not None: + section.write( + f'For more information about {resource_type.lower()} refer to the ' + f':ref:`Resources Introduction Guide<{intro_link}>`.' + ) + section.style.new_line() + + +class DocumentModifiedShape: + def __init__( + self, shape_name, new_type, new_description, new_example_value + ): + self._shape_name = shape_name + self._new_type = new_type + self._new_description = new_description + self._new_example_value = new_example_value + + def replace_documentation_for_matching_shape( + self, event_name, section, **kwargs + ): + if self._shape_name == section.context.get('shape'): + self._replace_documentation(event_name, section) + for section_name in section.available_sections: + sub_section = section.get_section(section_name) + if self._shape_name == sub_section.context.get('shape'): + self._replace_documentation(event_name, sub_section) + else: + self.replace_documentation_for_matching_shape( + event_name, sub_section + ) + + def _replace_documentation(self, event_name, section): + if event_name.startswith( + 'docs.request-example' + ) or event_name.startswith('docs.response-example'): + section.remove_all_sections() + section.clear_text() + section.write(self._new_example_value) + + if event_name.startswith( + 'docs.request-params' + ) or event_name.startswith('docs.response-params'): + allowed_sections = ( + 'param-name', + 'param-documentation', + 'end-structure', + 'param-type', + 'end-param', + ) + for section_name in section.available_sections: + # Delete any extra members as a new shape is being + # used. + if section_name not in allowed_sections: + section.delete_section(section_name) + + # Update the documentation + description_section = section.get_section('param-documentation') + description_section.clear_text() + description_section.write(self._new_description) + + # Update the param type + type_section = section.get_section('param-type') + if type_section.getvalue().decode('utf-8').startswith(':type'): + type_section.clear_text() + type_section.write(f':type {section.name}: {self._new_type}') + else: + type_section.clear_text() + type_section.style.italics(f'({self._new_type}) -- ') diff --git a/dbtzin/lib/python3.8/site-packages/boto3/docs/waiter.py b/dbtzin/lib/python3.8/site-packages/boto3/docs/waiter.py new file mode 100644 index 00000000..a135d972 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/docs/waiter.py @@ -0,0 +1,130 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore import xform_name +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.docs.method import document_model_driven_method +from botocore.utils import get_service_module_name + +from boto3.docs.base import NestedDocumenter +from boto3.docs.utils import ( + add_resource_type_overview, + get_resource_ignore_params, +) + + +class WaiterResourceDocumenter(NestedDocumenter): + def __init__(self, resource, service_waiter_model, root_docs_path): + super().__init__(resource, root_docs_path) + self._service_waiter_model = service_waiter_model + + def document_resource_waiters(self, section): + waiters = self._resource.meta.resource_model.waiters + add_resource_type_overview( + section=section, + resource_type='Waiters', + description=( + 'Waiters provide an interface to wait for a resource' + ' to reach a specific state.' + ), + intro_link='waiters_intro', + ) + waiter_list = [] + self.member_map['waiters'] = waiter_list + for waiter in waiters: + waiter_list.append(waiter.name) + # Create a new DocumentStructure for each waiter and add contents. + waiter_doc = DocumentStructure(waiter.name, target='html') + breadcrumb_section = waiter_doc.add_new_section('breadcrumb') + breadcrumb_section.style.ref(self._resource_class_name, 'index') + breadcrumb_section.write(f' / Waiter / {waiter.name}') + waiter_doc.add_title_section(waiter.name) + waiter_section = waiter_doc.add_new_section( + waiter.name, + context={'qualifier': f'{self.class_name}.'}, + ) + document_resource_waiter( + section=waiter_section, + resource_name=self._resource_name, + event_emitter=self._resource.meta.client.meta.events, + service_model=self._service_model, + resource_waiter_model=waiter, + service_waiter_model=self._service_waiter_model, + ) + # Write waiters in individual/nested files. + # Path: /reference/services///.rst + waiters_dir_path = os.path.join( + self._root_docs_path, + f'{self._service_name}', + f'{self._resource_sub_path}', + ) + waiter_doc.write_to_file(waiters_dir_path, waiter.name) + + +def document_resource_waiter( + section, + resource_name, + event_emitter, + service_model, + resource_waiter_model, + service_waiter_model, + include_signature=True, +): + waiter_model = service_waiter_model.get_waiter( + resource_waiter_model.waiter_name + ) + operation_model = service_model.operation_model(waiter_model.operation) + + ignore_params = get_resource_ignore_params(resource_waiter_model.params) + service_module_name = get_service_module_name(service_model) + description = ( + 'Waits until this {} is {}. This method calls ' + ':py:meth:`{}.Waiter.{}.wait` which polls ' + ':py:meth:`{}.Client.{}` every {} seconds until ' + 'a successful state is reached. An error is returned ' + 'after {} failed checks.'.format( + resource_name, + ' '.join(resource_waiter_model.name.split('_')[2:]), + service_module_name, + xform_name(resource_waiter_model.waiter_name), + service_module_name, + xform_name(waiter_model.operation), + waiter_model.delay, + waiter_model.max_attempts, + ) + ) + example_prefix = '{}.{}'.format( + xform_name(resource_name), resource_waiter_model.name + ) + full_waiter_name = ( + f"{section.context.get('qualifier', '')}{resource_waiter_model.name}" + ) + document_model_driven_method( + section=section, + method_name=full_waiter_name, + operation_model=operation_model, + event_emitter=event_emitter, + example_prefix=example_prefix, + method_description=description, + exclude_input=ignore_params, + include_signature=include_signature, + ) + if 'return' in section.available_sections: + # Waiters do not return anything so we should remove + # any sections that may document the underlying return + # value of the client method. + return_section = section.get_section('return') + return_section.clear_text() + return_section.remove_all_sections() + return_section.write(':returns: None') diff --git a/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__init__.py b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__init__.py new file mode 100644 index 00000000..6001b27b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__init__.py @@ -0,0 +1,12 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. diff --git a/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..20a0235e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/conditions.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/conditions.cpython-38.pyc new file mode 100644 index 00000000..a273bc80 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/conditions.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/table.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/table.cpython-38.pyc new file mode 100644 index 00000000..eb945351 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/table.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/transform.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/transform.cpython-38.pyc new file mode 100644 index 00000000..cec27739 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/transform.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/types.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/types.cpython-38.pyc new file mode 100644 index 00000000..99379d08 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/__pycache__/types.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/conditions.py b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/conditions.py new file mode 100644 index 00000000..74b3e8e7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/conditions.py @@ -0,0 +1,461 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import re +from collections import namedtuple + +from boto3.exceptions import ( + DynamoDBNeedsConditionError, + DynamoDBNeedsKeyConditionError, + DynamoDBOperationNotSupportedError, +) + +ATTR_NAME_REGEX = re.compile(r'[^.\[\]]+(?![^\[]*\])') + + +class ConditionBase: + expression_format = '' + expression_operator = '' + has_grouped_values = False + + def __init__(self, *values): + self._values = values + + def __and__(self, other): + if not isinstance(other, ConditionBase): + raise DynamoDBOperationNotSupportedError('AND', other) + return And(self, other) + + def __or__(self, other): + if not isinstance(other, ConditionBase): + raise DynamoDBOperationNotSupportedError('OR', other) + return Or(self, other) + + def __invert__(self): + return Not(self) + + def get_expression(self): + return { + 'format': self.expression_format, + 'operator': self.expression_operator, + 'values': self._values, + } + + def __eq__(self, other): + if isinstance(other, type(self)): + if self._values == other._values: + return True + return False + + def __ne__(self, other): + return not self.__eq__(other) + + +class AttributeBase: + def __init__(self, name): + self.name = name + + def __and__(self, value): + raise DynamoDBOperationNotSupportedError('AND', self) + + def __or__(self, value): + raise DynamoDBOperationNotSupportedError('OR', self) + + def __invert__(self): + raise DynamoDBOperationNotSupportedError('NOT', self) + + def eq(self, value): + """Creates a condition where the attribute is equal to the value. + + :param value: The value that the attribute is equal to. + """ + return Equals(self, value) + + def lt(self, value): + """Creates a condition where the attribute is less than the value. + + :param value: The value that the attribute is less than. + """ + return LessThan(self, value) + + def lte(self, value): + """Creates a condition where the attribute is less than or equal to the + value. + + :param value: The value that the attribute is less than or equal to. + """ + return LessThanEquals(self, value) + + def gt(self, value): + """Creates a condition where the attribute is greater than the value. + + :param value: The value that the attribute is greater than. + """ + return GreaterThan(self, value) + + def gte(self, value): + """Creates a condition where the attribute is greater than or equal to + the value. + + :param value: The value that the attribute is greater than or equal to. + """ + return GreaterThanEquals(self, value) + + def begins_with(self, value): + """Creates a condition where the attribute begins with the value. + + :param value: The value that the attribute begins with. + """ + return BeginsWith(self, value) + + def between(self, low_value, high_value): + """Creates a condition where the attribute is greater than or equal + to the low value and less than or equal to the high value. + + :param low_value: The value that the attribute is greater than or equal to. + :param high_value: The value that the attribute is less than or equal to. + """ + return Between(self, low_value, high_value) + + def __eq__(self, other): + return isinstance(other, type(self)) and self.name == other.name + + def __ne__(self, other): + return not self.__eq__(other) + + +class ConditionAttributeBase(ConditionBase, AttributeBase): + """This base class is for conditions that can have attribute methods. + + One example is the Size condition. To complete a condition, you need + to apply another AttributeBase method like eq(). + """ + + def __init__(self, *values): + ConditionBase.__init__(self, *values) + # This is assuming the first value to the condition is the attribute + # in which can be used to generate its attribute base. + AttributeBase.__init__(self, values[0].name) + + def __eq__(self, other): + return ConditionBase.__eq__(self, other) and AttributeBase.__eq__( + self, other + ) + + def __ne__(self, other): + return not self.__eq__(other) + + +class ComparisonCondition(ConditionBase): + expression_format = '{0} {operator} {1}' + + +class Equals(ComparisonCondition): + expression_operator = '=' + + +class NotEquals(ComparisonCondition): + expression_operator = '<>' + + +class LessThan(ComparisonCondition): + expression_operator = '<' + + +class LessThanEquals(ComparisonCondition): + expression_operator = '<=' + + +class GreaterThan(ComparisonCondition): + expression_operator = '>' + + +class GreaterThanEquals(ComparisonCondition): + expression_operator = '>=' + + +class In(ComparisonCondition): + expression_operator = 'IN' + has_grouped_values = True + + +class Between(ConditionBase): + expression_operator = 'BETWEEN' + expression_format = '{0} {operator} {1} AND {2}' + + +class BeginsWith(ConditionBase): + expression_operator = 'begins_with' + expression_format = '{operator}({0}, {1})' + + +class Contains(ConditionBase): + expression_operator = 'contains' + expression_format = '{operator}({0}, {1})' + + +class Size(ConditionAttributeBase): + expression_operator = 'size' + expression_format = '{operator}({0})' + + +class AttributeType(ConditionBase): + expression_operator = 'attribute_type' + expression_format = '{operator}({0}, {1})' + + +class AttributeExists(ConditionBase): + expression_operator = 'attribute_exists' + expression_format = '{operator}({0})' + + +class AttributeNotExists(ConditionBase): + expression_operator = 'attribute_not_exists' + expression_format = '{operator}({0})' + + +class And(ConditionBase): + expression_operator = 'AND' + expression_format = '({0} {operator} {1})' + + +class Or(ConditionBase): + expression_operator = 'OR' + expression_format = '({0} {operator} {1})' + + +class Not(ConditionBase): + expression_operator = 'NOT' + expression_format = '({operator} {0})' + + +class Key(AttributeBase): + pass + + +class Attr(AttributeBase): + """Represents an DynamoDB item's attribute.""" + + def ne(self, value): + """Creates a condition where the attribute is not equal to the value + + :param value: The value that the attribute is not equal to. + """ + return NotEquals(self, value) + + def is_in(self, value): + """Creates a condition where the attribute is in the value, + + :type value: list + :param value: The value that the attribute is in. + """ + return In(self, value) + + def exists(self): + """Creates a condition where the attribute exists.""" + return AttributeExists(self) + + def not_exists(self): + """Creates a condition where the attribute does not exist.""" + return AttributeNotExists(self) + + def contains(self, value): + """Creates a condition where the attribute contains the value. + + :param value: The value the attribute contains. + """ + return Contains(self, value) + + def size(self): + """Creates a condition for the attribute size. + + Note another AttributeBase method must be called on the returned + size condition to be a valid DynamoDB condition. + """ + return Size(self) + + def attribute_type(self, value): + """Creates a condition for the attribute type. + + :param value: The type of the attribute. + """ + return AttributeType(self, value) + + +BuiltConditionExpression = namedtuple( + 'BuiltConditionExpression', + [ + 'condition_expression', + 'attribute_name_placeholders', + 'attribute_value_placeholders', + ], +) + + +class ConditionExpressionBuilder: + """This class is used to build condition expressions with placeholders""" + + def __init__(self): + self._name_count = 0 + self._value_count = 0 + self._name_placeholder = 'n' + self._value_placeholder = 'v' + + def _get_name_placeholder(self): + return '#' + self._name_placeholder + str(self._name_count) + + def _get_value_placeholder(self): + return ':' + self._value_placeholder + str(self._value_count) + + def reset(self): + """Resets the placeholder name and values""" + self._name_count = 0 + self._value_count = 0 + + def build_expression(self, condition, is_key_condition=False): + """Builds the condition expression and the dictionary of placeholders. + + :type condition: ConditionBase + :param condition: A condition to be built into a condition expression + string with any necessary placeholders. + + :type is_key_condition: Boolean + :param is_key_condition: True if the expression is for a + KeyConditionExpression. False otherwise. + + :rtype: (string, dict, dict) + :returns: Will return a string representing the condition with + placeholders inserted where necessary, a dictionary of + placeholders for attribute names, and a dictionary of + placeholders for attribute values. Here is a sample return value: + + ('#n0 = :v0', {'#n0': 'myattribute'}, {':v1': 'myvalue'}) + """ + if not isinstance(condition, ConditionBase): + raise DynamoDBNeedsConditionError(condition) + attribute_name_placeholders = {} + attribute_value_placeholders = {} + condition_expression = self._build_expression( + condition, + attribute_name_placeholders, + attribute_value_placeholders, + is_key_condition=is_key_condition, + ) + return BuiltConditionExpression( + condition_expression=condition_expression, + attribute_name_placeholders=attribute_name_placeholders, + attribute_value_placeholders=attribute_value_placeholders, + ) + + def _build_expression( + self, + condition, + attribute_name_placeholders, + attribute_value_placeholders, + is_key_condition, + ): + expression_dict = condition.get_expression() + replaced_values = [] + for value in expression_dict['values']: + # Build the necessary placeholders for that value. + # Placeholders are built for both attribute names and values. + replaced_value = self._build_expression_component( + value, + attribute_name_placeholders, + attribute_value_placeholders, + condition.has_grouped_values, + is_key_condition, + ) + replaced_values.append(replaced_value) + # Fill out the expression using the operator and the + # values that have been replaced with placeholders. + return expression_dict['format'].format( + *replaced_values, operator=expression_dict['operator'] + ) + + def _build_expression_component( + self, + value, + attribute_name_placeholders, + attribute_value_placeholders, + has_grouped_values, + is_key_condition, + ): + # Continue to recurse if the value is a ConditionBase in order + # to extract out all parts of the expression. + if isinstance(value, ConditionBase): + return self._build_expression( + value, + attribute_name_placeholders, + attribute_value_placeholders, + is_key_condition, + ) + # If it is not a ConditionBase, we can recurse no further. + # So we check if it is an attribute and add placeholders for + # its name + elif isinstance(value, AttributeBase): + if is_key_condition and not isinstance(value, Key): + raise DynamoDBNeedsKeyConditionError( + f'Attribute object {value.name} is of type {type(value)}. ' + f'KeyConditionExpression only supports Attribute objects ' + f'of type Key' + ) + return self._build_name_placeholder( + value, attribute_name_placeholders + ) + # If it is anything else, we treat it as a value and thus placeholders + # are needed for the value. + else: + return self._build_value_placeholder( + value, attribute_value_placeholders, has_grouped_values + ) + + def _build_name_placeholder(self, value, attribute_name_placeholders): + attribute_name = value.name + # Figure out which parts of the attribute name that needs replacement. + attribute_name_parts = ATTR_NAME_REGEX.findall(attribute_name) + + # Add a temporary placeholder for each of these parts. + placeholder_format = ATTR_NAME_REGEX.sub('%s', attribute_name) + str_format_args = [] + for part in attribute_name_parts: + name_placeholder = self._get_name_placeholder() + self._name_count += 1 + str_format_args.append(name_placeholder) + # Add the placeholder and value to dictionary of name placeholders. + attribute_name_placeholders[name_placeholder] = part + # Replace the temporary placeholders with the designated placeholders. + return placeholder_format % tuple(str_format_args) + + def _build_value_placeholder( + self, value, attribute_value_placeholders, has_grouped_values=False + ): + # If the values are grouped, we need to add a placeholder for + # each element inside of the actual value. + if has_grouped_values: + placeholder_list = [] + for v in value: + value_placeholder = self._get_value_placeholder() + self._value_count += 1 + placeholder_list.append(value_placeholder) + attribute_value_placeholders[value_placeholder] = v + # Assuming the values are grouped by parenthesis. + # IN is the currently the only one that uses this so it maybe + # needed to be changed in future. + return '(' + ', '.join(placeholder_list) + ')' + # Otherwise, treat the value as a single value that needs only + # one placeholder. + else: + value_placeholder = self._get_value_placeholder() + self._value_count += 1 + attribute_value_placeholders[value_placeholder] = value + return value_placeholder diff --git a/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/table.py b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/table.py new file mode 100644 index 00000000..931296bc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/table.py @@ -0,0 +1,167 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import logging + +logger = logging.getLogger(__name__) + + +def register_table_methods(base_classes, **kwargs): + base_classes.insert(0, TableResource) + + +# This class can be used to add any additional methods we want +# onto a table resource. Ideally to avoid creating a new +# base class for every method we can just update this +# class instead. Just be sure to move the bulk of the +# actual method implementation to another class. +class TableResource: + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def batch_writer(self, overwrite_by_pkeys=None): + """Create a batch writer object. + + This method creates a context manager for writing + objects to Amazon DynamoDB in batch. + + The batch writer will automatically handle buffering and sending items + in batches. In addition, the batch writer will also automatically + handle any unprocessed items and resend them as needed. All you need + to do is call ``put_item`` for any items you want to add, and + ``delete_item`` for any items you want to delete. + + Example usage:: + + with table.batch_writer() as batch: + for _ in range(1000000): + batch.put_item(Item={'HashKey': '...', + 'Otherstuff': '...'}) + # You can also delete_items in a batch. + batch.delete_item(Key={'HashKey': 'SomeHashKey'}) + + :type overwrite_by_pkeys: list(string) + :param overwrite_by_pkeys: De-duplicate request items in buffer + if match new request item on specified primary keys. i.e + ``["partition_key1", "sort_key2", "sort_key3"]`` + + """ + return BatchWriter( + self.name, self.meta.client, overwrite_by_pkeys=overwrite_by_pkeys + ) + + +class BatchWriter: + """Automatically handle batch writes to DynamoDB for a single table.""" + + def __init__( + self, table_name, client, flush_amount=25, overwrite_by_pkeys=None + ): + """ + + :type table_name: str + :param table_name: The name of the table. The class handles + batch writes to a single table. + + :type client: ``botocore.client.Client`` + :param client: A botocore client. Note this client + **must** have the dynamodb customizations applied + to it for transforming AttributeValues into the + wire protocol. What this means in practice is that + you need to use a client that comes from a DynamoDB + resource if you're going to instantiate this class + directly, i.e + ``boto3.resource('dynamodb').Table('foo').meta.client``. + + :type flush_amount: int + :param flush_amount: The number of items to keep in + a local buffer before sending a batch_write_item + request to DynamoDB. + + :type overwrite_by_pkeys: list(string) + :param overwrite_by_pkeys: De-duplicate request items in buffer + if match new request item on specified primary keys. i.e + ``["partition_key1", "sort_key2", "sort_key3"]`` + + """ + self._table_name = table_name + self._client = client + self._items_buffer = [] + self._flush_amount = flush_amount + self._overwrite_by_pkeys = overwrite_by_pkeys + + def put_item(self, Item): + self._add_request_and_process({'PutRequest': {'Item': Item}}) + + def delete_item(self, Key): + self._add_request_and_process({'DeleteRequest': {'Key': Key}}) + + def _add_request_and_process(self, request): + if self._overwrite_by_pkeys: + self._remove_dup_pkeys_request_if_any(request) + self._items_buffer.append(request) + self._flush_if_needed() + + def _remove_dup_pkeys_request_if_any(self, request): + pkey_values_new = self._extract_pkey_values(request) + for item in self._items_buffer: + if self._extract_pkey_values(item) == pkey_values_new: + self._items_buffer.remove(item) + logger.debug( + "With overwrite_by_pkeys enabled, skipping " "request:%s", + item, + ) + + def _extract_pkey_values(self, request): + if request.get('PutRequest'): + return [ + request['PutRequest']['Item'][key] + for key in self._overwrite_by_pkeys + ] + elif request.get('DeleteRequest'): + return [ + request['DeleteRequest']['Key'][key] + for key in self._overwrite_by_pkeys + ] + return None + + def _flush_if_needed(self): + if len(self._items_buffer) >= self._flush_amount: + self._flush() + + def _flush(self): + items_to_send = self._items_buffer[: self._flush_amount] + self._items_buffer = self._items_buffer[self._flush_amount :] + response = self._client.batch_write_item( + RequestItems={self._table_name: items_to_send} + ) + unprocessed_items = response['UnprocessedItems'] + if not unprocessed_items: + unprocessed_items = {} + item_list = unprocessed_items.get(self._table_name, []) + # Any unprocessed_items are immediately added to the + # next batch we send. + self._items_buffer.extend(item_list) + logger.debug( + "Batch write sent %s, unprocessed: %s", + len(items_to_send), + len(self._items_buffer), + ) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, tb): + # When we exit, we need to keep flushing whatever's left + # until there's nothing left in our items buffer. + while self._items_buffer: + self._flush() diff --git a/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/transform.py b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/transform.py new file mode 100644 index 00000000..3944f315 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/transform.py @@ -0,0 +1,343 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import copy + +from boto3.compat import collections_abc +from boto3.docs.utils import DocumentModifiedShape +from boto3.dynamodb.conditions import ConditionBase, ConditionExpressionBuilder +from boto3.dynamodb.types import TypeDeserializer, TypeSerializer + + +def register_high_level_interface(base_classes, **kwargs): + base_classes.insert(0, DynamoDBHighLevelResource) + + +class _ForgetfulDict(dict): + """A dictionary that discards any items set on it. For use as `memo` in + `copy.deepcopy()` when every instance of a repeated object in the deepcopied + data structure should result in a separate copy. + """ + + def __setitem__(self, key, value): + pass + + +def copy_dynamodb_params(params, **kwargs): + return copy.deepcopy(params, memo=_ForgetfulDict()) + + +class DynamoDBHighLevelResource: + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # Apply handler that creates a copy of the user provided dynamodb + # item such that it can be modified. + self.meta.client.meta.events.register( + 'provide-client-params.dynamodb', + copy_dynamodb_params, + unique_id='dynamodb-create-params-copy', + ) + + self._injector = TransformationInjector() + # Apply the handler that generates condition expressions including + # placeholders. + self.meta.client.meta.events.register( + 'before-parameter-build.dynamodb', + self._injector.inject_condition_expressions, + unique_id='dynamodb-condition-expression', + ) + + # Apply the handler that serializes the request from python + # types to dynamodb types. + self.meta.client.meta.events.register( + 'before-parameter-build.dynamodb', + self._injector.inject_attribute_value_input, + unique_id='dynamodb-attr-value-input', + ) + + # Apply the handler that deserializes the response from dynamodb + # types to python types. + self.meta.client.meta.events.register( + 'after-call.dynamodb', + self._injector.inject_attribute_value_output, + unique_id='dynamodb-attr-value-output', + ) + + # Apply the documentation customizations to account for + # the transformations. + attr_value_shape_docs = DocumentModifiedShape( + 'AttributeValue', + new_type='valid DynamoDB type', + new_description=( + '- The value of the attribute. The valid value types are ' + 'listed in the ' + ':ref:`DynamoDB Reference Guide`.' + ), + new_example_value=( + '\'string\'|123|Binary(b\'bytes\')|True|None|set([\'string\'])' + '|set([123])|set([Binary(b\'bytes\')])|[]|{}' + ), + ) + + key_expression_shape_docs = DocumentModifiedShape( + 'KeyExpression', + new_type=( + 'condition from :py:class:`boto3.dynamodb.conditions.Key` ' + 'method' + ), + new_description=( + 'The condition(s) a key(s) must meet. Valid conditions are ' + 'listed in the ' + ':ref:`DynamoDB Reference Guide`.' + ), + new_example_value='Key(\'mykey\').eq(\'myvalue\')', + ) + + con_expression_shape_docs = DocumentModifiedShape( + 'ConditionExpression', + new_type=( + 'condition from :py:class:`boto3.dynamodb.conditions.Attr` ' + 'method' + ), + new_description=( + 'The condition(s) an attribute(s) must meet. Valid conditions ' + 'are listed in the ' + ':ref:`DynamoDB Reference Guide`.' + ), + new_example_value='Attr(\'myattribute\').eq(\'myvalue\')', + ) + + self.meta.client.meta.events.register( + 'docs.*.dynamodb.*.complete-section', + attr_value_shape_docs.replace_documentation_for_matching_shape, + unique_id='dynamodb-attr-value-docs', + ) + + self.meta.client.meta.events.register( + 'docs.*.dynamodb.*.complete-section', + key_expression_shape_docs.replace_documentation_for_matching_shape, + unique_id='dynamodb-key-expression-docs', + ) + + self.meta.client.meta.events.register( + 'docs.*.dynamodb.*.complete-section', + con_expression_shape_docs.replace_documentation_for_matching_shape, + unique_id='dynamodb-cond-expression-docs', + ) + + +class TransformationInjector: + """Injects the transformations into the user provided parameters.""" + + def __init__( + self, + transformer=None, + condition_builder=None, + serializer=None, + deserializer=None, + ): + self._transformer = transformer + if transformer is None: + self._transformer = ParameterTransformer() + + self._condition_builder = condition_builder + if condition_builder is None: + self._condition_builder = ConditionExpressionBuilder() + + self._serializer = serializer + if serializer is None: + self._serializer = TypeSerializer() + + self._deserializer = deserializer + if deserializer is None: + self._deserializer = TypeDeserializer() + + def inject_condition_expressions(self, params, model, **kwargs): + """Injects the condition expression transformation into the parameters + + This injection includes transformations for ConditionExpression shapes + and KeyExpression shapes. It also handles any placeholder names and + values that are generated when transforming the condition expressions. + """ + self._condition_builder.reset() + generated_names = {} + generated_values = {} + + # Create and apply the Condition Expression transformation. + transformation = ConditionExpressionTransformation( + self._condition_builder, + placeholder_names=generated_names, + placeholder_values=generated_values, + is_key_condition=False, + ) + self._transformer.transform( + params, model.input_shape, transformation, 'ConditionExpression' + ) + + # Create and apply the Key Condition Expression transformation. + transformation = ConditionExpressionTransformation( + self._condition_builder, + placeholder_names=generated_names, + placeholder_values=generated_values, + is_key_condition=True, + ) + self._transformer.transform( + params, model.input_shape, transformation, 'KeyExpression' + ) + + expr_attr_names_input = 'ExpressionAttributeNames' + expr_attr_values_input = 'ExpressionAttributeValues' + + # Now that all of the condition expression transformation are done, + # update the placeholder dictionaries in the request. + if expr_attr_names_input in params: + params[expr_attr_names_input].update(generated_names) + else: + if generated_names: + params[expr_attr_names_input] = generated_names + + if expr_attr_values_input in params: + params[expr_attr_values_input].update(generated_values) + else: + if generated_values: + params[expr_attr_values_input] = generated_values + + def inject_attribute_value_input(self, params, model, **kwargs): + """Injects DynamoDB serialization into parameter input""" + self._transformer.transform( + params, + model.input_shape, + self._serializer.serialize, + 'AttributeValue', + ) + + def inject_attribute_value_output(self, parsed, model, **kwargs): + """Injects DynamoDB deserialization into responses""" + if model.output_shape is not None: + self._transformer.transform( + parsed, + model.output_shape, + self._deserializer.deserialize, + 'AttributeValue', + ) + + +class ConditionExpressionTransformation: + """Provides a transformation for condition expressions + + The ``ParameterTransformer`` class can call this class directly + to transform the condition expressions in the parameters provided. + """ + + def __init__( + self, + condition_builder, + placeholder_names, + placeholder_values, + is_key_condition=False, + ): + self._condition_builder = condition_builder + self._placeholder_names = placeholder_names + self._placeholder_values = placeholder_values + self._is_key_condition = is_key_condition + + def __call__(self, value): + if isinstance(value, ConditionBase): + # Create a conditional expression string with placeholders + # for the provided condition. + built_expression = self._condition_builder.build_expression( + value, is_key_condition=self._is_key_condition + ) + + self._placeholder_names.update( + built_expression.attribute_name_placeholders + ) + self._placeholder_values.update( + built_expression.attribute_value_placeholders + ) + + return built_expression.condition_expression + # Use the user provided value if it is not a ConditonBase object. + return value + + +class ParameterTransformer: + """Transforms the input to and output from botocore based on shape""" + + def transform(self, params, model, transformation, target_shape): + """Transforms the dynamodb input to or output from botocore + + It applies a specified transformation whenever a specific shape name + is encountered while traversing the parameters in the dictionary. + + :param params: The parameters structure to transform. + :param model: The operation model. + :param transformation: The function to apply the parameter + :param target_shape: The name of the shape to apply the + transformation to + """ + self._transform_parameters(model, params, transformation, target_shape) + + def _transform_parameters( + self, model, params, transformation, target_shape + ): + type_name = model.type_name + if type_name in ('structure', 'map', 'list'): + getattr(self, f'_transform_{type_name}')( + model, params, transformation, target_shape + ) + + def _transform_structure( + self, model, params, transformation, target_shape + ): + if not isinstance(params, collections_abc.Mapping): + return + for param in params: + if param in model.members: + member_model = model.members[param] + member_shape = member_model.name + if member_shape == target_shape: + params[param] = transformation(params[param]) + else: + self._transform_parameters( + member_model, + params[param], + transformation, + target_shape, + ) + + def _transform_map(self, model, params, transformation, target_shape): + if not isinstance(params, collections_abc.Mapping): + return + value_model = model.value + value_shape = value_model.name + for key, value in params.items(): + if value_shape == target_shape: + params[key] = transformation(value) + else: + self._transform_parameters( + value_model, params[key], transformation, target_shape + ) + + def _transform_list(self, model, params, transformation, target_shape): + if not isinstance(params, collections_abc.MutableSequence): + return + member_model = model.member + member_shape = member_model.name + for i, item in enumerate(params): + if member_shape == target_shape: + params[i] = transformation(item) + else: + self._transform_parameters( + member_model, params[i], transformation, target_shape + ) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/types.py b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/types.py new file mode 100644 index 00000000..f358b12f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/dynamodb/types.py @@ -0,0 +1,310 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from decimal import ( + Clamped, + Context, + Decimal, + Inexact, + Overflow, + Rounded, + Underflow, +) + +from boto3.compat import collections_abc + +STRING = 'S' +NUMBER = 'N' +BINARY = 'B' +STRING_SET = 'SS' +NUMBER_SET = 'NS' +BINARY_SET = 'BS' +NULL = 'NULL' +BOOLEAN = 'BOOL' +MAP = 'M' +LIST = 'L' + + +DYNAMODB_CONTEXT = Context( + Emin=-128, + Emax=126, + prec=38, + traps=[Clamped, Overflow, Inexact, Rounded, Underflow], +) + + +BINARY_TYPES = (bytearray, bytes) + + +class Binary: + """A class for representing Binary in dynamodb + + Especially for Python 2, use this class to explicitly specify + binary data for item in DynamoDB. It is essentially a wrapper around + binary. Unicode and Python 3 string types are not allowed. + """ + + def __init__(self, value): + if not isinstance(value, BINARY_TYPES): + types = ', '.join([str(t) for t in BINARY_TYPES]) + raise TypeError(f'Value must be of the following types: {types}') + self.value = value + + def __eq__(self, other): + if isinstance(other, Binary): + return self.value == other.value + return self.value == other + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return f'Binary({self.value!r})' + + def __str__(self): + return self.value + + def __bytes__(self): + return self.value + + def __hash__(self): + return hash(self.value) + + +class TypeSerializer: + """This class serializes Python data types to DynamoDB types.""" + + def serialize(self, value): + """The method to serialize the Python data types. + + :param value: A python value to be serialized to DynamoDB. Here are + the various conversions: + + Python DynamoDB + ------ -------- + None {'NULL': True} + True/False {'BOOL': True/False} + int/Decimal {'N': str(value)} + string {'S': string} + Binary/bytearray/bytes (py3 only) {'B': bytes} + set([int/Decimal]) {'NS': [str(value)]} + set([string]) {'SS': [string]) + set([Binary/bytearray/bytes]) {'BS': [bytes]} + list {'L': list} + dict {'M': dict} + + For types that involve numbers, it is recommended that ``Decimal`` + objects are used to be able to round-trip the Python type. + For types that involve binary, it is recommended that ``Binary`` + objects are used to be able to round-trip the Python type. + + :rtype: dict + :returns: A dictionary that represents a dynamoDB data type. These + dictionaries can be directly passed to botocore methods. + """ + dynamodb_type = self._get_dynamodb_type(value) + serializer = getattr(self, f'_serialize_{dynamodb_type}'.lower()) + return {dynamodb_type: serializer(value)} + + def _get_dynamodb_type(self, value): + dynamodb_type = None + + if self._is_null(value): + dynamodb_type = NULL + + elif self._is_boolean(value): + dynamodb_type = BOOLEAN + + elif self._is_number(value): + dynamodb_type = NUMBER + + elif self._is_string(value): + dynamodb_type = STRING + + elif self._is_binary(value): + dynamodb_type = BINARY + + elif self._is_type_set(value, self._is_number): + dynamodb_type = NUMBER_SET + + elif self._is_type_set(value, self._is_string): + dynamodb_type = STRING_SET + + elif self._is_type_set(value, self._is_binary): + dynamodb_type = BINARY_SET + + elif self._is_map(value): + dynamodb_type = MAP + + elif self._is_listlike(value): + dynamodb_type = LIST + + else: + msg = f'Unsupported type "{type(value)}" for value "{value}"' + raise TypeError(msg) + + return dynamodb_type + + def _is_null(self, value): + if value is None: + return True + return False + + def _is_boolean(self, value): + if isinstance(value, bool): + return True + return False + + def _is_number(self, value): + if isinstance(value, (int, Decimal)): + return True + elif isinstance(value, float): + raise TypeError( + 'Float types are not supported. Use Decimal types instead.' + ) + return False + + def _is_string(self, value): + if isinstance(value, str): + return True + return False + + def _is_binary(self, value): + if isinstance(value, (Binary, bytearray, bytes)): + return True + return False + + def _is_set(self, value): + if isinstance(value, collections_abc.Set): + return True + return False + + def _is_type_set(self, value, type_validator): + if self._is_set(value): + if False not in map(type_validator, value): + return True + return False + + def _is_map(self, value): + if isinstance(value, collections_abc.Mapping): + return True + return False + + def _is_listlike(self, value): + if isinstance(value, (list, tuple)): + return True + return False + + def _serialize_null(self, value): + return True + + def _serialize_bool(self, value): + return value + + def _serialize_n(self, value): + number = str(DYNAMODB_CONTEXT.create_decimal(value)) + if number in ['Infinity', 'NaN']: + raise TypeError('Infinity and NaN not supported') + return number + + def _serialize_s(self, value): + return value + + def _serialize_b(self, value): + if isinstance(value, Binary): + value = value.value + return value + + def _serialize_ss(self, value): + return [self._serialize_s(s) for s in value] + + def _serialize_ns(self, value): + return [self._serialize_n(n) for n in value] + + def _serialize_bs(self, value): + return [self._serialize_b(b) for b in value] + + def _serialize_l(self, value): + return [self.serialize(v) for v in value] + + def _serialize_m(self, value): + return {k: self.serialize(v) for k, v in value.items()} + + +class TypeDeserializer: + """This class deserializes DynamoDB types to Python types.""" + + def deserialize(self, value): + """The method to deserialize the DynamoDB data types. + + :param value: A DynamoDB value to be deserialized to a pythonic value. + Here are the various conversions: + + DynamoDB Python + -------- ------ + {'NULL': True} None + {'BOOL': True/False} True/False + {'N': str(value)} Decimal(str(value)) + {'S': string} string + {'B': bytes} Binary(bytes) + {'NS': [str(value)]} set([Decimal(str(value))]) + {'SS': [string]} set([string]) + {'BS': [bytes]} set([bytes]) + {'L': list} list + {'M': dict} dict + + :returns: The pythonic value of the DynamoDB type. + """ + + if not value: + raise TypeError( + 'Value must be a nonempty dictionary whose key ' + 'is a valid dynamodb type.' + ) + dynamodb_type = list(value.keys())[0] + try: + deserializer = getattr( + self, f'_deserialize_{dynamodb_type}'.lower() + ) + except AttributeError: + raise TypeError(f'Dynamodb type {dynamodb_type} is not supported') + return deserializer(value[dynamodb_type]) + + def _deserialize_null(self, value): + return None + + def _deserialize_bool(self, value): + return value + + def _deserialize_n(self, value): + return DYNAMODB_CONTEXT.create_decimal(value) + + def _deserialize_s(self, value): + return value + + def _deserialize_b(self, value): + return Binary(value) + + def _deserialize_ns(self, value): + return set(map(self._deserialize_n, value)) + + def _deserialize_ss(self, value): + return set(map(self._deserialize_s, value)) + + def _deserialize_bs(self, value): + return set(map(self._deserialize_b, value)) + + def _deserialize_l(self, value): + return [self.deserialize(v) for v in value] + + def _deserialize_m(self, value): + return {k: self.deserialize(v) for k, v in value.items()} diff --git a/dbtzin/lib/python3.8/site-packages/boto3/ec2/__init__.py b/dbtzin/lib/python3.8/site-packages/boto3/ec2/__init__.py new file mode 100644 index 00000000..6001b27b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/ec2/__init__.py @@ -0,0 +1,12 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. diff --git a/dbtzin/lib/python3.8/site-packages/boto3/ec2/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/ec2/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..4bc5d4b6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/ec2/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/ec2/__pycache__/createtags.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/ec2/__pycache__/createtags.cpython-38.pyc new file mode 100644 index 00000000..00ff0c22 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/ec2/__pycache__/createtags.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/ec2/__pycache__/deletetags.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/ec2/__pycache__/deletetags.cpython-38.pyc new file mode 100644 index 00000000..22ed7f7a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/ec2/__pycache__/deletetags.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/ec2/createtags.py b/dbtzin/lib/python3.8/site-packages/boto3/ec2/createtags.py new file mode 100644 index 00000000..ec0ff1a6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/ec2/createtags.py @@ -0,0 +1,40 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + + +def inject_create_tags(event_name, class_attributes, **kwargs): + """This injects a custom create_tags method onto the ec2 service resource + + This is needed because the resource model is not able to express + creating multiple tag resources based on the fact you can apply a set + of tags to multiple ec2 resources. + """ + class_attributes['create_tags'] = create_tags + + +def create_tags(self, **kwargs): + # Call the client method + self.meta.client.create_tags(**kwargs) + resources = kwargs.get('Resources', []) + tags = kwargs.get('Tags', []) + tag_resources = [] + + # Generate all of the tag resources that just were created with the + # preceding client call. + for resource in resources: + for tag in tags: + # Add each tag from the tag set for each resource to the list + # that is returned by the method. + tag_resource = self.Tag(resource, tag['Key'], tag['Value']) + tag_resources.append(tag_resource) + return tag_resources diff --git a/dbtzin/lib/python3.8/site-packages/boto3/ec2/deletetags.py b/dbtzin/lib/python3.8/site-packages/boto3/ec2/deletetags.py new file mode 100644 index 00000000..19876d04 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/ec2/deletetags.py @@ -0,0 +1,37 @@ +# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from boto3.resources.action import CustomModeledAction + + +def inject_delete_tags(event_emitter, **kwargs): + action_model = { + 'request': { + 'operation': 'DeleteTags', + 'params': [ + { + 'target': 'Resources[0]', + 'source': 'identifier', + 'name': 'Id', + } + ], + } + } + action = CustomModeledAction( + 'delete_tags', action_model, delete_tags, event_emitter + ) + action.inject(**kwargs) + + +def delete_tags(self, **kwargs): + kwargs['Resources'] = [self.id] + return self.meta.client.delete_tags(**kwargs) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/examples/cloudfront.rst b/dbtzin/lib/python3.8/site-packages/boto3/examples/cloudfront.rst new file mode 100644 index 00000000..ddec198c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/examples/cloudfront.rst @@ -0,0 +1,35 @@ +Generate a signed URL for Amazon CloudFront +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following example shows how to generate a signed URL for Amazon CloudFront. +Note that you will need the ``cryptography`` `library `__ to follow this example:: + + import datetime + + from cryptography.hazmat.backends import default_backend + from cryptography.hazmat.primitives import hashes + from cryptography.hazmat.primitives import serialization + from cryptography.hazmat.primitives.asymmetric import padding + from botocore.signers import CloudFrontSigner + + + def rsa_signer(message): + with open('path/to/key.pem', 'rb') as key_file: + private_key = serialization.load_pem_private_key( + key_file.read(), + password=None, + backend=default_backend() + ) + return private_key.sign(message, padding.PKCS1v15(), hashes.SHA1()) + + key_id = 'AKIAIOSFODNN7EXAMPLE' + url = 'http://d2949o5mkkp72v.cloudfront.net/hello.txt' + expire_date = datetime.datetime(2017, 1, 1) + + cloudfront_signer = CloudFrontSigner(key_id, rsa_signer) + + # Create a signed url that will be valid until the specific expiry date + # provided using a canned policy. + signed_url = cloudfront_signer.generate_presigned_url( + url, date_less_than=expire_date) + print(signed_url) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/examples/s3.rst b/dbtzin/lib/python3.8/site-packages/boto3/examples/s3.rst new file mode 100644 index 00000000..0a79fb07 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/examples/s3.rst @@ -0,0 +1,185 @@ +List objects in an Amazon S3 bucket +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following example shows how to use an Amazon S3 bucket resource to list +the objects in the bucket. + +.. code-block:: python + + import boto3 + + s3 = boto3.resource('s3') + bucket = s3.Bucket('my-bucket') + for obj in bucket.objects.all(): + print(obj.key) + + +List top-level common prefixes in Amazon S3 bucket +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This example shows how to list all of the top-level common prefixes in an +Amazon S3 bucket: + +.. code-block:: python + + import boto3 + + client = boto3.client('s3') + paginator = client.get_paginator('list_objects') + result = paginator.paginate(Bucket='my-bucket', Delimiter='/') + for prefix in result.search('CommonPrefixes'): + print(prefix.get('Prefix')) + + +Restore Glacier objects in an Amazon S3 bucket +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following example shows how to initiate restoration of glacier objects in +an Amazon S3 bucket, determine if a restoration is on-going, and determine if a +restoration is finished. + +.. code-block:: python + + import boto3 + + s3 = boto3.resource('s3') + bucket = s3.Bucket('glacier-bucket') + for obj_sum in bucket.objects.all(): + obj = s3.Object(obj_sum.bucket_name, obj_sum.key) + if obj.storage_class == 'GLACIER': + # Try to restore the object if the storage class is glacier and + # the object does not have a completed or ongoing restoration + # request. + if obj.restore is None: + print('Submitting restoration request: %s' % obj.key) + obj.restore_object(RestoreRequest={'Days': 1}) + # Print out objects whose restoration is on-going + elif 'ongoing-request="true"' in obj.restore: + print('Restoration in-progress: %s' % obj.key) + # Print out objects whose restoration is complete + elif 'ongoing-request="false"' in obj.restore: + print('Restoration complete: %s' % obj.key) + + +Uploading/downloading files using SSE KMS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This example shows how to use SSE-KMS to upload objects using +server side encryption with a key managed by KMS. + +We can either use the default KMS master key, or create a +custom key in AWS and use it to encrypt the object by passing in its +key id. + +With KMS, nothing else needs to be provided for getting the +object; S3 already knows how to decrypt the object. + + +.. code-block:: python + + import boto3 + import os + + BUCKET = 'your-bucket-name' + s3 = boto3.client('s3') + keyid = '' + + print("Uploading S3 object with SSE-KMS") + s3.put_object(Bucket=BUCKET, + Key='encrypt-key', + Body=b'foobar', + ServerSideEncryption='aws:kms', + # Optional: SSEKMSKeyId + SSEKMSKeyId=keyid) + print("Done") + + # Getting the object: + print("Getting S3 object...") + response = s3.get_object(Bucket=BUCKET, + Key='encrypt-key') + print("Done, response body:") + print(response['Body'].read()) + + +Uploading/downloading files using SSE Customer Keys +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This example shows how to use SSE-C to upload objects using +server side encryption with a customer provided key. + +First, we'll need a 32 byte key. For this example, we'll +randomly generate a key but you can use any 32 byte key +you want. Remember, you must the same key to download +the object. If you lose the encryption key, you lose +the object. + +Also note how we don't have to provide the SSECustomerKeyMD5. +Boto3 will automatically compute this value for us. + + +.. code-block:: python + + import boto3 + import os + + BUCKET = 'your-bucket-name' + KEY = os.urandom(32) + s3 = boto3.client('s3') + + print("Uploading S3 object with SSE-C") + s3.put_object(Bucket=BUCKET, + Key='encrypt-key', + Body=b'foobar', + SSECustomerKey=KEY, + SSECustomerAlgorithm='AES256') + print("Done") + + # Getting the object: + print("Getting S3 object...") + # Note how we're using the same ``KEY`` we + # created earlier. + response = s3.get_object(Bucket=BUCKET, + Key='encrypt-key', + SSECustomerKey=KEY, + SSECustomerAlgorithm='AES256') + print("Done, response body:") + print(response['Body'].read()) + + +Downloading a specific version of an S3 object +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This example shows how to download a specific version of an +S3 object. + +.. code-block:: python + + import boto3 + s3 = boto3.client('s3') + + s3.download_file( + "bucket-name", "key-name", "tmp.txt", + ExtraArgs={"VersionId": "my-version-id"} + ) + + +Filter objects by last modified time using JMESPath +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This example shows how to filter objects by last modified time +using JMESPath. + +.. code-block:: python + + import boto3 + s3 = boto3.client("s3") + + s3_paginator = s3.get_paginator('list_objects_v2') + s3_iterator = s3_paginator.paginate(Bucket='your-bucket-name') + + filtered_iterator = s3_iterator.search( + "Contents[?to_string(LastModified)>='\"2022-01-05 08:05:37+00:00\"'].Key" + ) + + for key_data in filtered_iterator: + print(key_data) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/exceptions.py b/dbtzin/lib/python3.8/site-packages/boto3/exceptions.py new file mode 100644 index 00000000..7d9ceaf1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/exceptions.py @@ -0,0 +1,126 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +# All exceptions in this class should subclass from Boto3Error. +import botocore.exceptions + + +# All exceptions should subclass from Boto3Error in this module. +class Boto3Error(Exception): + """Base class for all Boto3 errors.""" + + +class ResourceLoadException(Boto3Error): + pass + + +# NOTE: This doesn't appear to be used anywhere. +# It's probably safe to remove this. +class NoVersionFound(Boto3Error): + pass + + +# We're subclassing from botocore.exceptions.DataNotFoundError +# to keep backwards compatibility with anyone that was catching +# this low level Botocore error before this exception was +# introduced in boto3. +# Same thing for ResourceNotExistsError below. +class UnknownAPIVersionError( + Boto3Error, botocore.exceptions.DataNotFoundError +): + def __init__(self, service_name, bad_api_version, available_api_versions): + msg = ( + f"The '{service_name}' resource does not support an API version of: {bad_api_version}\n" + f"Valid API versions are: {available_api_versions}" + ) + # Not using super because we don't want the DataNotFoundError + # to be called, it has a different __init__ signature. + Boto3Error.__init__(self, msg) + + +class ResourceNotExistsError( + Boto3Error, botocore.exceptions.DataNotFoundError +): + """Raised when you attempt to create a resource that does not exist.""" + + def __init__(self, service_name, available_services, has_low_level_client): + msg = ( + "The '{}' resource does not exist.\n" + "The available resources are:\n" + " - {}\n".format( + service_name, '\n - '.join(available_services) + ) + ) + if has_low_level_client: + msg = ( + f"{msg}\nConsider using a boto3.client('{service_name}') " + f"instead of a resource for '{service_name}'" + ) + # Not using super because we don't want the DataNotFoundError + # to be called, it has a different __init__ signature. + Boto3Error.__init__(self, msg) + + +class RetriesExceededError(Boto3Error): + def __init__(self, last_exception, msg='Max Retries Exceeded'): + super().__init__(msg) + self.last_exception = last_exception + + +class S3TransferFailedError(Boto3Error): + pass + + +class S3UploadFailedError(Boto3Error): + pass + + +class DynamoDBOperationNotSupportedError(Boto3Error): + """Raised for operations that are not supported for an operand.""" + + def __init__(self, operation, value): + msg = ( + f'{operation} operation cannot be applied to value {value} of type ' + f'{type(value)} directly. Must use AttributeBase object methods ' + f'(i.e. Attr().eq()). to generate ConditionBase instances first.' + ) + Exception.__init__(self, msg) + + +# FIXME: Backward compatibility +DynanmoDBOperationNotSupportedError = DynamoDBOperationNotSupportedError + + +class DynamoDBNeedsConditionError(Boto3Error): + """Raised when input is not a condition""" + + def __init__(self, value): + msg = ( + f'Expecting a ConditionBase object. Got {value} of type {type(value)}. ' + f'Use AttributeBase object methods (i.e. Attr().eq()). to ' + f'generate ConditionBase instances.' + ) + Exception.__init__(self, msg) + + +class DynamoDBNeedsKeyConditionError(Boto3Error): + pass + + +class PythonDeprecationWarning(Warning): + """ + Python version being used is scheduled to become unsupported + in an future release. See warning for specifics. + """ + + pass diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/__init__.py b/dbtzin/lib/python3.8/site-packages/boto3/resources/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..4a8e3dd7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/action.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/action.cpython-38.pyc new file mode 100644 index 00000000..a50adbe2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/action.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/base.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/base.cpython-38.pyc new file mode 100644 index 00000000..def25c9f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/base.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/collection.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/collection.cpython-38.pyc new file mode 100644 index 00000000..e846fd45 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/collection.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/factory.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/factory.cpython-38.pyc new file mode 100644 index 00000000..0e37d990 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/factory.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/model.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/model.cpython-38.pyc new file mode 100644 index 00000000..ffe76aed Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/model.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/params.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/params.cpython-38.pyc new file mode 100644 index 00000000..0f494f36 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/params.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/response.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/response.cpython-38.pyc new file mode 100644 index 00000000..54104f5c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/resources/__pycache__/response.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/action.py b/dbtzin/lib/python3.8/site-packages/boto3/resources/action.py new file mode 100644 index 00000000..7c7d8392 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/resources/action.py @@ -0,0 +1,257 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import logging + +from botocore import xform_name + +from boto3.docs.docstring import ActionDocstring +from boto3.utils import inject_attribute + +from .model import Action +from .params import create_request_parameters +from .response import RawHandler, ResourceHandler + +logger = logging.getLogger(__name__) + + +class ServiceAction: + """ + A class representing a callable action on a resource, for example + ``sqs.get_queue_by_name(...)`` or ``s3.Bucket('foo').delete()``. + The action may construct parameters from existing resource identifiers + and may return either a raw response or a new resource instance. + + :type action_model: :py:class`~boto3.resources.model.Action` + :param action_model: The action model. + + :type factory: ResourceFactory + :param factory: The factory that created the resource class to which + this action is attached. + + :type service_context: :py:class:`~boto3.utils.ServiceContext` + :param service_context: Context about the AWS service + """ + + def __init__(self, action_model, factory=None, service_context=None): + self._action_model = action_model + + # In the simplest case we just return the response, but if a + # resource is defined, then we must create these before returning. + resource_response_model = action_model.resource + if resource_response_model: + self._response_handler = ResourceHandler( + search_path=resource_response_model.path, + factory=factory, + resource_model=resource_response_model, + service_context=service_context, + operation_name=action_model.request.operation, + ) + else: + self._response_handler = RawHandler(action_model.path) + + def __call__(self, parent, *args, **kwargs): + """ + Perform the action's request operation after building operation + parameters and build any defined resources from the response. + + :type parent: :py:class:`~boto3.resources.base.ServiceResource` + :param parent: The resource instance to which this action is attached. + :rtype: dict or ServiceResource or list(ServiceResource) + :return: The response, either as a raw dict or resource instance(s). + """ + operation_name = xform_name(self._action_model.request.operation) + + # First, build predefined params and then update with the + # user-supplied kwargs, which allows overriding the pre-built + # params if needed. + params = create_request_parameters(parent, self._action_model.request) + params.update(kwargs) + + logger.debug( + 'Calling %s:%s with %r', + parent.meta.service_name, + operation_name, + params, + ) + + response = getattr(parent.meta.client, operation_name)(*args, **params) + + logger.debug('Response: %r', response) + + return self._response_handler(parent, params, response) + + +class BatchAction(ServiceAction): + """ + An action which operates on a batch of items in a collection, typically + a single page of results from the collection's underlying service + operation call. For example, this allows you to delete up to 999 + S3 objects in a single operation rather than calling ``.delete()`` on + each one individually. + + :type action_model: :py:class`~boto3.resources.model.Action` + :param action_model: The action model. + + :type factory: ResourceFactory + :param factory: The factory that created the resource class to which + this action is attached. + + :type service_context: :py:class:`~boto3.utils.ServiceContext` + :param service_context: Context about the AWS service + """ + + def __call__(self, parent, *args, **kwargs): + """ + Perform the batch action's operation on every page of results + from the collection. + + :type parent: + :py:class:`~boto3.resources.collection.ResourceCollection` + :param parent: The collection iterator to which this action + is attached. + :rtype: list(dict) + :return: A list of low-level response dicts from each call. + """ + service_name = None + client = None + responses = [] + operation_name = xform_name(self._action_model.request.operation) + + # Unlike the simple action above, a batch action must operate + # on batches (or pages) of items. So we get each page, construct + # the necessary parameters and call the batch operation. + for page in parent.pages(): + params = {} + for index, resource in enumerate(page): + # There is no public interface to get a service name + # or low-level client from a collection, so we get + # these from the first resource in the collection. + if service_name is None: + service_name = resource.meta.service_name + if client is None: + client = resource.meta.client + + create_request_parameters( + resource, + self._action_model.request, + params=params, + index=index, + ) + + if not params: + # There are no items, no need to make a call. + break + + params.update(kwargs) + + logger.debug( + 'Calling %s:%s with %r', service_name, operation_name, params + ) + + response = getattr(client, operation_name)(*args, **params) + + logger.debug('Response: %r', response) + + responses.append(self._response_handler(parent, params, response)) + + return responses + + +class WaiterAction: + """ + A class representing a callable waiter action on a resource, for example + ``s3.Bucket('foo').wait_until_bucket_exists()``. + The waiter action may construct parameters from existing resource + identifiers. + + :type waiter_model: :py:class`~boto3.resources.model.Waiter` + :param waiter_model: The action waiter. + :type waiter_resource_name: string + :param waiter_resource_name: The name of the waiter action for the + resource. It usually begins with a + ``wait_until_`` + """ + + def __init__(self, waiter_model, waiter_resource_name): + self._waiter_model = waiter_model + self._waiter_resource_name = waiter_resource_name + + def __call__(self, parent, *args, **kwargs): + """ + Perform the wait operation after building operation + parameters. + + :type parent: :py:class:`~boto3.resources.base.ServiceResource` + :param parent: The resource instance to which this action is attached. + """ + client_waiter_name = xform_name(self._waiter_model.waiter_name) + + # First, build predefined params and then update with the + # user-supplied kwargs, which allows overriding the pre-built + # params if needed. + params = create_request_parameters(parent, self._waiter_model) + params.update(kwargs) + + logger.debug( + 'Calling %s:%s with %r', + parent.meta.service_name, + self._waiter_resource_name, + params, + ) + + client = parent.meta.client + waiter = client.get_waiter(client_waiter_name) + response = waiter.wait(**params) + + logger.debug('Response: %r', response) + + +class CustomModeledAction: + """A custom, modeled action to inject into a resource.""" + + def __init__(self, action_name, action_model, function, event_emitter): + """ + :type action_name: str + :param action_name: The name of the action to inject, e.g. + 'delete_tags' + + :type action_model: dict + :param action_model: A JSON definition of the action, as if it were + part of the resource model. + + :type function: function + :param function: The function to perform when the action is called. + The first argument should be 'self', which will be the resource + the function is to be called on. + + :type event_emitter: :py:class:`botocore.hooks.BaseEventHooks` + :param event_emitter: The session event emitter. + """ + self.name = action_name + self.model = action_model + self.function = function + self.emitter = event_emitter + + def inject(self, class_attributes, service_context, event_name, **kwargs): + resource_name = event_name.rsplit(".")[-1] + action = Action(self.name, self.model, {}) + self.function.__name__ = self.name + self.function.__doc__ = ActionDocstring( + resource_name=resource_name, + event_emitter=self.emitter, + action_model=action, + service_model=service_context.service_model, + include_signature=False, + ) + inject_attribute(class_attributes, self.name, self.function) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/base.py b/dbtzin/lib/python3.8/site-packages/boto3/resources/base.py new file mode 100644 index 00000000..c3982809 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/resources/base.py @@ -0,0 +1,155 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import logging + +import boto3 + +logger = logging.getLogger(__name__) + + +class ResourceMeta: + """ + An object containing metadata about a resource. + """ + + def __init__( + self, + service_name, + identifiers=None, + client=None, + data=None, + resource_model=None, + ): + #: (``string``) The service name, e.g. 's3' + self.service_name = service_name + + if identifiers is None: + identifiers = [] + #: (``list``) List of identifier names + self.identifiers = identifiers + + #: (:py:class:`~botocore.client.BaseClient`) Low-level Botocore client + self.client = client + #: (``dict``) Loaded resource data attributes + self.data = data + + # The resource model for that resource + self.resource_model = resource_model + + def __repr__(self): + return 'ResourceMeta(\'{}\', identifiers={})'.format( + self.service_name, self.identifiers + ) + + def __eq__(self, other): + # Two metas are equal if their components are all equal + if other.__class__.__name__ != self.__class__.__name__: + return False + + return self.__dict__ == other.__dict__ + + def copy(self): + """ + Create a copy of this metadata object. + """ + params = self.__dict__.copy() + service_name = params.pop('service_name') + return ResourceMeta(service_name, **params) + + +class ServiceResource: + """ + A base class for resources. + + :type client: botocore.client + :param client: A low-level Botocore client instance + """ + + meta = None + """ + Stores metadata about this resource instance, such as the + ``service_name``, the low-level ``client`` and any cached ``data`` + from when the instance was hydrated. For example:: + + # Get a low-level client from a resource instance + client = resource.meta.client + response = client.operation(Param='foo') + + # Print the resource instance's service short name + print(resource.meta.service_name) + + See :py:class:`ResourceMeta` for more information. + """ + + def __init__(self, *args, **kwargs): + # Always work on a copy of meta, otherwise we would affect other + # instances of the same subclass. + self.meta = self.meta.copy() + + # Create a default client if none was passed + if kwargs.get('client') is not None: + self.meta.client = kwargs.get('client') + else: + self.meta.client = boto3.client(self.meta.service_name) + + # Allow setting identifiers as positional arguments in the order + # in which they were defined in the ResourceJSON. + for i, value in enumerate(args): + setattr(self, '_' + self.meta.identifiers[i], value) + + # Allow setting identifiers via keyword arguments. Here we need + # extra logic to ignore other keyword arguments like ``client``. + for name, value in kwargs.items(): + if name == 'client': + continue + + if name not in self.meta.identifiers: + raise ValueError(f'Unknown keyword argument: {name}') + + setattr(self, '_' + name, value) + + # Validate that all identifiers have been set. + for identifier in self.meta.identifiers: + if getattr(self, identifier) is None: + raise ValueError(f'Required parameter {identifier} not set') + + def __repr__(self): + identifiers = [] + for identifier in self.meta.identifiers: + identifiers.append( + f'{identifier}={repr(getattr(self, identifier))}' + ) + return "{}({})".format( + self.__class__.__name__, + ', '.join(identifiers), + ) + + def __eq__(self, other): + # Should be instances of the same resource class + if other.__class__.__name__ != self.__class__.__name__: + return False + + # Each of the identifiers should have the same value in both + # instances, e.g. two buckets need the same name to be equal. + for identifier in self.meta.identifiers: + if getattr(self, identifier) != getattr(other, identifier): + return False + + return True + + def __hash__(self): + identifiers = [] + for identifier in self.meta.identifiers: + identifiers.append(getattr(self, identifier)) + return hash((self.__class__.__name__, tuple(identifiers))) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/collection.py b/dbtzin/lib/python3.8/site-packages/boto3/resources/collection.py new file mode 100644 index 00000000..7f7862ec --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/resources/collection.py @@ -0,0 +1,572 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import copy +import logging + +from botocore import xform_name +from botocore.utils import merge_dicts + +from ..docs import docstring +from .action import BatchAction +from .params import create_request_parameters +from .response import ResourceHandler + +logger = logging.getLogger(__name__) + + +class ResourceCollection: + """ + Represents a collection of resources, which can be iterated through, + optionally with filtering. Collections automatically handle pagination + for you. + + See :ref:`guide_collections` for a high-level overview of collections, + including when remote service requests are performed. + + :type model: :py:class:`~boto3.resources.model.Collection` + :param model: Collection model + :type parent: :py:class:`~boto3.resources.base.ServiceResource` + :param parent: The collection's parent resource + :type handler: :py:class:`~boto3.resources.response.ResourceHandler` + :param handler: The resource response handler used to create resource + instances + """ + + def __init__(self, model, parent, handler, **kwargs): + self._model = model + self._parent = parent + self._py_operation_name = xform_name(model.request.operation) + self._handler = handler + self._params = copy.deepcopy(kwargs) + + def __repr__(self): + return '{}({}, {})'.format( + self.__class__.__name__, + self._parent, + '{}.{}'.format( + self._parent.meta.service_name, self._model.resource.type + ), + ) + + def __iter__(self): + """ + A generator which yields resource instances after doing the + appropriate service operation calls and handling any pagination + on your behalf. + + Page size, item limit, and filter parameters are applied + if they have previously been set. + + >>> bucket = s3.Bucket('boto3') + >>> for obj in bucket.objects.all(): + ... print(obj.key) + 'key1' + 'key2' + + """ + limit = self._params.get('limit', None) + + count = 0 + for page in self.pages(): + for item in page: + yield item + + # If the limit is set and has been reached, then + # we stop processing items here. + count += 1 + if limit is not None and count >= limit: + return + + def _clone(self, **kwargs): + """ + Create a clone of this collection. This is used by the methods + below to provide a chainable interface that returns copies + rather than the original. This allows things like: + + >>> base = collection.filter(Param1=1) + >>> query1 = base.filter(Param2=2) + >>> query2 = base.filter(Param3=3) + >>> query1.params + {'Param1': 1, 'Param2': 2} + >>> query2.params + {'Param1': 1, 'Param3': 3} + + :rtype: :py:class:`ResourceCollection` + :return: A clone of this resource collection + """ + params = copy.deepcopy(self._params) + merge_dicts(params, kwargs, append_lists=True) + clone = self.__class__( + self._model, self._parent, self._handler, **params + ) + return clone + + def pages(self): + """ + A generator which yields pages of resource instances after + doing the appropriate service operation calls and handling + any pagination on your behalf. Non-paginated calls will + return a single page of items. + + Page size, item limit, and filter parameters are applied + if they have previously been set. + + >>> bucket = s3.Bucket('boto3') + >>> for page in bucket.objects.pages(): + ... for obj in page: + ... print(obj.key) + 'key1' + 'key2' + + :rtype: list(:py:class:`~boto3.resources.base.ServiceResource`) + :return: List of resource instances + """ + client = self._parent.meta.client + cleaned_params = self._params.copy() + limit = cleaned_params.pop('limit', None) + page_size = cleaned_params.pop('page_size', None) + params = create_request_parameters(self._parent, self._model.request) + merge_dicts(params, cleaned_params, append_lists=True) + + # Is this a paginated operation? If so, we need to get an + # iterator for the various pages. If not, then we simply + # call the operation and return the result as a single + # page in a list. For non-paginated results, we just ignore + # the page size parameter. + if client.can_paginate(self._py_operation_name): + logger.debug( + 'Calling paginated %s:%s with %r', + self._parent.meta.service_name, + self._py_operation_name, + params, + ) + paginator = client.get_paginator(self._py_operation_name) + pages = paginator.paginate( + PaginationConfig={'MaxItems': limit, 'PageSize': page_size}, + **params + ) + else: + logger.debug( + 'Calling %s:%s with %r', + self._parent.meta.service_name, + self._py_operation_name, + params, + ) + pages = [getattr(client, self._py_operation_name)(**params)] + + # Now that we have a page iterator or single page of results + # we start processing and yielding individual items. + count = 0 + for page in pages: + page_items = [] + for item in self._handler(self._parent, params, page): + page_items.append(item) + + # If the limit is set and has been reached, then + # we stop processing items here. + count += 1 + if limit is not None and count >= limit: + break + + yield page_items + + # Stop reading pages if we've reached out limit + if limit is not None and count >= limit: + break + + def all(self): + """ + Get all items from the collection, optionally with a custom + page size and item count limit. + + This method returns an iterable generator which yields + individual resource instances. Example use:: + + # Iterate through items + >>> for queue in sqs.queues.all(): + ... print(queue.url) + 'https://url1' + 'https://url2' + + # Convert to list + >>> queues = list(sqs.queues.all()) + >>> len(queues) + 2 + """ + return self._clone() + + def filter(self, **kwargs): + """ + Get items from the collection, passing keyword arguments along + as parameters to the underlying service operation, which are + typically used to filter the results. + + This method returns an iterable generator which yields + individual resource instances. Example use:: + + # Iterate through items + >>> for queue in sqs.queues.filter(Param='foo'): + ... print(queue.url) + 'https://url1' + 'https://url2' + + # Convert to list + >>> queues = list(sqs.queues.filter(Param='foo')) + >>> len(queues) + 2 + + :rtype: :py:class:`ResourceCollection` + """ + return self._clone(**kwargs) + + def limit(self, count): + """ + Return at most this many resources. + + >>> for bucket in s3.buckets.limit(5): + ... print(bucket.name) + 'bucket1' + 'bucket2' + 'bucket3' + 'bucket4' + 'bucket5' + + :type count: int + :param count: Return no more than this many items + :rtype: :py:class:`ResourceCollection` + """ + return self._clone(limit=count) + + def page_size(self, count): + """ + Fetch at most this many resources per service request. + + >>> for obj in s3.Bucket('boto3').objects.page_size(100): + ... print(obj.key) + + :type count: int + :param count: Fetch this many items per request + :rtype: :py:class:`ResourceCollection` + """ + return self._clone(page_size=count) + + +class CollectionManager: + """ + A collection manager provides access to resource collection instances, + which can be iterated and filtered. The manager exposes some + convenience functions that are also found on resource collections, + such as :py:meth:`~ResourceCollection.all` and + :py:meth:`~ResourceCollection.filter`. + + Get all items:: + + >>> for bucket in s3.buckets.all(): + ... print(bucket.name) + + Get only some items via filtering:: + + >>> for queue in sqs.queues.filter(QueueNamePrefix='AWS'): + ... print(queue.url) + + Get whole pages of items: + + >>> for page in s3.Bucket('boto3').objects.pages(): + ... for obj in page: + ... print(obj.key) + + A collection manager is not iterable. You **must** call one of the + methods that return a :py:class:`ResourceCollection` before trying + to iterate, slice, or convert to a list. + + See the :ref:`guide_collections` guide for a high-level overview + of collections, including when remote service requests are performed. + + :type collection_model: :py:class:`~boto3.resources.model.Collection` + :param model: Collection model + + :type parent: :py:class:`~boto3.resources.base.ServiceResource` + :param parent: The collection's parent resource + + :type factory: :py:class:`~boto3.resources.factory.ResourceFactory` + :param factory: The resource factory to create new resources + + :type service_context: :py:class:`~boto3.utils.ServiceContext` + :param service_context: Context about the AWS service + """ + + # The class to use when creating an iterator + _collection_cls = ResourceCollection + + def __init__(self, collection_model, parent, factory, service_context): + self._model = collection_model + operation_name = self._model.request.operation + self._parent = parent + + search_path = collection_model.resource.path + self._handler = ResourceHandler( + search_path=search_path, + factory=factory, + resource_model=collection_model.resource, + service_context=service_context, + operation_name=operation_name, + ) + + def __repr__(self): + return '{}({}, {})'.format( + self.__class__.__name__, + self._parent, + '{}.{}'.format( + self._parent.meta.service_name, self._model.resource.type + ), + ) + + def iterator(self, **kwargs): + """ + Get a resource collection iterator from this manager. + + :rtype: :py:class:`ResourceCollection` + :return: An iterable representing the collection of resources + """ + return self._collection_cls( + self._model, self._parent, self._handler, **kwargs + ) + + # Set up some methods to proxy ResourceCollection methods + def all(self): + return self.iterator() + + all.__doc__ = ResourceCollection.all.__doc__ + + def filter(self, **kwargs): + return self.iterator(**kwargs) + + filter.__doc__ = ResourceCollection.filter.__doc__ + + def limit(self, count): + return self.iterator(limit=count) + + limit.__doc__ = ResourceCollection.limit.__doc__ + + def page_size(self, count): + return self.iterator(page_size=count) + + page_size.__doc__ = ResourceCollection.page_size.__doc__ + + def pages(self): + return self.iterator().pages() + + pages.__doc__ = ResourceCollection.pages.__doc__ + + +class CollectionFactory: + """ + A factory to create new + :py:class:`CollectionManager` and :py:class:`ResourceCollection` + subclasses from a :py:class:`~boto3.resources.model.Collection` + model. These subclasses include methods to perform batch operations. + """ + + def load_from_definition( + self, resource_name, collection_model, service_context, event_emitter + ): + """ + Loads a collection from a model, creating a new + :py:class:`CollectionManager` subclass + with the correct properties and methods, named based on the service + and resource name, e.g. ec2.InstanceCollectionManager. It also + creates a new :py:class:`ResourceCollection` subclass which is used + by the new manager class. + + :type resource_name: string + :param resource_name: Name of the resource to look up. For services, + this should match the ``service_name``. + + :type service_context: :py:class:`~boto3.utils.ServiceContext` + :param service_context: Context about the AWS service + + :type event_emitter: :py:class:`~botocore.hooks.HierarchialEmitter` + :param event_emitter: An event emitter + + :rtype: Subclass of :py:class:`CollectionManager` + :return: The collection class. + """ + attrs = {} + collection_name = collection_model.name + + # Create the batch actions for a collection + self._load_batch_actions( + attrs, + resource_name, + collection_model, + service_context.service_model, + event_emitter, + ) + # Add the documentation to the collection class's methods + self._load_documented_collection_methods( + attrs=attrs, + resource_name=resource_name, + collection_model=collection_model, + service_model=service_context.service_model, + event_emitter=event_emitter, + base_class=ResourceCollection, + ) + + if service_context.service_name == resource_name: + cls_name = '{}.{}Collection'.format( + service_context.service_name, collection_name + ) + else: + cls_name = '{}.{}.{}Collection'.format( + service_context.service_name, resource_name, collection_name + ) + + collection_cls = type(str(cls_name), (ResourceCollection,), attrs) + + # Add the documentation to the collection manager's methods + self._load_documented_collection_methods( + attrs=attrs, + resource_name=resource_name, + collection_model=collection_model, + service_model=service_context.service_model, + event_emitter=event_emitter, + base_class=CollectionManager, + ) + attrs['_collection_cls'] = collection_cls + cls_name += 'Manager' + + return type(str(cls_name), (CollectionManager,), attrs) + + def _load_batch_actions( + self, + attrs, + resource_name, + collection_model, + service_model, + event_emitter, + ): + """ + Batch actions on the collection become methods on both + the collection manager and iterators. + """ + for action_model in collection_model.batch_actions: + snake_cased = xform_name(action_model.name) + attrs[snake_cased] = self._create_batch_action( + resource_name, + snake_cased, + action_model, + collection_model, + service_model, + event_emitter, + ) + + def _load_documented_collection_methods( + factory_self, + attrs, + resource_name, + collection_model, + service_model, + event_emitter, + base_class, + ): + # The base class already has these methods defined. However + # the docstrings are generic and not based for a particular service + # or resource. So we override these methods by proxying to the + # base class's builtin method and adding a docstring + # that pertains to the resource. + + # A collection's all() method. + def all(self): + return base_class.all(self) + + all.__doc__ = docstring.CollectionMethodDocstring( + resource_name=resource_name, + action_name='all', + event_emitter=event_emitter, + collection_model=collection_model, + service_model=service_model, + include_signature=False, + ) + attrs['all'] = all + + # The collection's filter() method. + def filter(self, **kwargs): + return base_class.filter(self, **kwargs) + + filter.__doc__ = docstring.CollectionMethodDocstring( + resource_name=resource_name, + action_name='filter', + event_emitter=event_emitter, + collection_model=collection_model, + service_model=service_model, + include_signature=False, + ) + attrs['filter'] = filter + + # The collection's limit method. + def limit(self, count): + return base_class.limit(self, count) + + limit.__doc__ = docstring.CollectionMethodDocstring( + resource_name=resource_name, + action_name='limit', + event_emitter=event_emitter, + collection_model=collection_model, + service_model=service_model, + include_signature=False, + ) + attrs['limit'] = limit + + # The collection's page_size method. + def page_size(self, count): + return base_class.page_size(self, count) + + page_size.__doc__ = docstring.CollectionMethodDocstring( + resource_name=resource_name, + action_name='page_size', + event_emitter=event_emitter, + collection_model=collection_model, + service_model=service_model, + include_signature=False, + ) + attrs['page_size'] = page_size + + def _create_batch_action( + factory_self, + resource_name, + snake_cased, + action_model, + collection_model, + service_model, + event_emitter, + ): + """ + Creates a new method which makes a batch operation request + to the underlying service API. + """ + action = BatchAction(action_model) + + def batch_action(self, *args, **kwargs): + return action(self, *args, **kwargs) + + batch_action.__name__ = str(snake_cased) + batch_action.__doc__ = docstring.BatchActionDocstring( + resource_name=resource_name, + event_emitter=event_emitter, + batch_action_model=action_model, + service_model=service_model, + collection_model=collection_model, + include_signature=False, + ) + return batch_action diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/factory.py b/dbtzin/lib/python3.8/site-packages/boto3/resources/factory.py new file mode 100644 index 00000000..4cdd2f01 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/resources/factory.py @@ -0,0 +1,601 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import logging +from functools import partial + +from ..docs import docstring +from ..exceptions import ResourceLoadException +from .action import ServiceAction, WaiterAction +from .base import ResourceMeta, ServiceResource +from .collection import CollectionFactory +from .model import ResourceModel +from .response import ResourceHandler, build_identifiers + +logger = logging.getLogger(__name__) + + +class ResourceFactory: + """ + A factory to create new :py:class:`~boto3.resources.base.ServiceResource` + classes from a :py:class:`~boto3.resources.model.ResourceModel`. There are + two types of lookups that can be done: one on the service itself (e.g. an + SQS resource) and another on models contained within the service (e.g. an + SQS Queue resource). + """ + + def __init__(self, emitter): + self._collection_factory = CollectionFactory() + self._emitter = emitter + + def load_from_definition( + self, resource_name, single_resource_json_definition, service_context + ): + """ + Loads a resource from a model, creating a new + :py:class:`~boto3.resources.base.ServiceResource` subclass + with the correct properties and methods, named based on the service + and resource name, e.g. EC2.Instance. + + :type resource_name: string + :param resource_name: Name of the resource to look up. For services, + this should match the ``service_name``. + + :type single_resource_json_definition: dict + :param single_resource_json_definition: + The loaded json of a single service resource or resource + definition. + + :type service_context: :py:class:`~boto3.utils.ServiceContext` + :param service_context: Context about the AWS service + + :rtype: Subclass of :py:class:`~boto3.resources.base.ServiceResource` + :return: The service or resource class. + """ + logger.debug( + 'Loading %s:%s', service_context.service_name, resource_name + ) + + # Using the loaded JSON create a ResourceModel object. + resource_model = ResourceModel( + resource_name, + single_resource_json_definition, + service_context.resource_json_definitions, + ) + + # Do some renaming of the shape if there was a naming collision + # that needed to be accounted for. + shape = None + if resource_model.shape: + shape = service_context.service_model.shape_for( + resource_model.shape + ) + resource_model.load_rename_map(shape) + + # Set some basic info + meta = ResourceMeta( + service_context.service_name, resource_model=resource_model + ) + attrs = { + 'meta': meta, + } + + # Create and load all of attributes of the resource class based + # on the models. + + # Identifiers + self._load_identifiers( + attrs=attrs, + meta=meta, + resource_name=resource_name, + resource_model=resource_model, + ) + + # Load/Reload actions + self._load_actions( + attrs=attrs, + resource_name=resource_name, + resource_model=resource_model, + service_context=service_context, + ) + + # Attributes that get auto-loaded + self._load_attributes( + attrs=attrs, + meta=meta, + resource_name=resource_name, + resource_model=resource_model, + service_context=service_context, + ) + + # Collections and their corresponding methods + self._load_collections( + attrs=attrs, + resource_model=resource_model, + service_context=service_context, + ) + + # References and Subresources + self._load_has_relations( + attrs=attrs, + resource_name=resource_name, + resource_model=resource_model, + service_context=service_context, + ) + + # Waiter resource actions + self._load_waiters( + attrs=attrs, + resource_name=resource_name, + resource_model=resource_model, + service_context=service_context, + ) + + # Create the name based on the requested service and resource + cls_name = resource_name + if service_context.service_name == resource_name: + cls_name = 'ServiceResource' + cls_name = service_context.service_name + '.' + cls_name + + base_classes = [ServiceResource] + if self._emitter is not None: + self._emitter.emit( + f'creating-resource-class.{cls_name}', + class_attributes=attrs, + base_classes=base_classes, + service_context=service_context, + ) + return type(str(cls_name), tuple(base_classes), attrs) + + def _load_identifiers(self, attrs, meta, resource_model, resource_name): + """ + Populate required identifiers. These are arguments without which + the resource cannot be used. Identifiers become arguments for + operations on the resource. + """ + for identifier in resource_model.identifiers: + meta.identifiers.append(identifier.name) + attrs[identifier.name] = self._create_identifier( + identifier, resource_name + ) + + def _load_actions( + self, attrs, resource_name, resource_model, service_context + ): + """ + Actions on the resource become methods, with the ``load`` method + being a special case which sets internal data for attributes, and + ``reload`` is an alias for ``load``. + """ + if resource_model.load: + attrs['load'] = self._create_action( + action_model=resource_model.load, + resource_name=resource_name, + service_context=service_context, + is_load=True, + ) + attrs['reload'] = attrs['load'] + + for action in resource_model.actions: + attrs[action.name] = self._create_action( + action_model=action, + resource_name=resource_name, + service_context=service_context, + ) + + def _load_attributes( + self, attrs, meta, resource_name, resource_model, service_context + ): + """ + Load resource attributes based on the resource shape. The shape + name is referenced in the resource JSON, but the shape itself + is defined in the Botocore service JSON, hence the need for + access to the ``service_model``. + """ + if not resource_model.shape: + return + + shape = service_context.service_model.shape_for(resource_model.shape) + + identifiers = { + i.member_name: i + for i in resource_model.identifiers + if i.member_name + } + attributes = resource_model.get_attributes(shape) + for name, (orig_name, member) in attributes.items(): + if name in identifiers: + prop = self._create_identifier_alias( + resource_name=resource_name, + identifier=identifiers[name], + member_model=member, + service_context=service_context, + ) + else: + prop = self._create_autoload_property( + resource_name=resource_name, + name=orig_name, + snake_cased=name, + member_model=member, + service_context=service_context, + ) + attrs[name] = prop + + def _load_collections(self, attrs, resource_model, service_context): + """ + Load resource collections from the model. Each collection becomes + a :py:class:`~boto3.resources.collection.CollectionManager` instance + on the resource instance, which allows you to iterate and filter + through the collection's items. + """ + for collection_model in resource_model.collections: + attrs[collection_model.name] = self._create_collection( + resource_name=resource_model.name, + collection_model=collection_model, + service_context=service_context, + ) + + def _load_has_relations( + self, attrs, resource_name, resource_model, service_context + ): + """ + Load related resources, which are defined via a ``has`` + relationship but conceptually come in two forms: + + 1. A reference, which is a related resource instance and can be + ``None``, such as an EC2 instance's ``vpc``. + 2. A subresource, which is a resource constructor that will always + return a resource instance which shares identifiers/data with + this resource, such as ``s3.Bucket('name').Object('key')``. + """ + for reference in resource_model.references: + # This is a dangling reference, i.e. we have all + # the data we need to create the resource, so + # this instance becomes an attribute on the class. + attrs[reference.name] = self._create_reference( + reference_model=reference, + resource_name=resource_name, + service_context=service_context, + ) + + for subresource in resource_model.subresources: + # This is a sub-resource class you can create + # by passing in an identifier, e.g. s3.Bucket(name). + attrs[subresource.name] = self._create_class_partial( + subresource_model=subresource, + resource_name=resource_name, + service_context=service_context, + ) + + self._create_available_subresources_command( + attrs, resource_model.subresources + ) + + def _create_available_subresources_command(self, attrs, subresources): + _subresources = [subresource.name for subresource in subresources] + _subresources = sorted(_subresources) + + def get_available_subresources(factory_self): + """ + Returns a list of all the available sub-resources for this + Resource. + + :returns: A list containing the name of each sub-resource for this + resource + :rtype: list of str + """ + return _subresources + + attrs['get_available_subresources'] = get_available_subresources + + def _load_waiters( + self, attrs, resource_name, resource_model, service_context + ): + """ + Load resource waiters from the model. Each waiter allows you to + wait until a resource reaches a specific state by polling the state + of the resource. + """ + for waiter in resource_model.waiters: + attrs[waiter.name] = self._create_waiter( + resource_waiter_model=waiter, + resource_name=resource_name, + service_context=service_context, + ) + + def _create_identifier(factory_self, identifier, resource_name): + """ + Creates a read-only property for identifier attributes. + """ + + def get_identifier(self): + # The default value is set to ``None`` instead of + # raising an AttributeError because when resources are + # instantiated a check is made such that none of the + # identifiers have a value ``None``. If any are ``None``, + # a more informative user error than a generic AttributeError + # is raised. + return getattr(self, '_' + identifier.name, None) + + get_identifier.__name__ = str(identifier.name) + get_identifier.__doc__ = docstring.IdentifierDocstring( + resource_name=resource_name, + identifier_model=identifier, + include_signature=False, + ) + + return property(get_identifier) + + def _create_identifier_alias( + factory_self, resource_name, identifier, member_model, service_context + ): + """ + Creates a read-only property that aliases an identifier. + """ + + def get_identifier(self): + return getattr(self, '_' + identifier.name, None) + + get_identifier.__name__ = str(identifier.member_name) + get_identifier.__doc__ = docstring.AttributeDocstring( + service_name=service_context.service_name, + resource_name=resource_name, + attr_name=identifier.member_name, + event_emitter=factory_self._emitter, + attr_model=member_model, + include_signature=False, + ) + + return property(get_identifier) + + def _create_autoload_property( + factory_self, + resource_name, + name, + snake_cased, + member_model, + service_context, + ): + """ + Creates a new property on the resource to lazy-load its value + via the resource's ``load`` method (if it exists). + """ + + # The property loader will check to see if this resource has already + # been loaded and return the cached value if possible. If not, then + # it first checks to see if it CAN be loaded (raise if not), then + # calls the load before returning the value. + def property_loader(self): + if self.meta.data is None: + if hasattr(self, 'load'): + self.load() + else: + raise ResourceLoadException( + f'{self.__class__.__name__} has no load method' + ) + + return self.meta.data.get(name) + + property_loader.__name__ = str(snake_cased) + property_loader.__doc__ = docstring.AttributeDocstring( + service_name=service_context.service_name, + resource_name=resource_name, + attr_name=snake_cased, + event_emitter=factory_self._emitter, + attr_model=member_model, + include_signature=False, + ) + + return property(property_loader) + + def _create_waiter( + factory_self, resource_waiter_model, resource_name, service_context + ): + """ + Creates a new wait method for each resource where both a waiter and + resource model is defined. + """ + waiter = WaiterAction( + resource_waiter_model, + waiter_resource_name=resource_waiter_model.name, + ) + + def do_waiter(self, *args, **kwargs): + waiter(self, *args, **kwargs) + + do_waiter.__name__ = str(resource_waiter_model.name) + do_waiter.__doc__ = docstring.ResourceWaiterDocstring( + resource_name=resource_name, + event_emitter=factory_self._emitter, + service_model=service_context.service_model, + resource_waiter_model=resource_waiter_model, + service_waiter_model=service_context.service_waiter_model, + include_signature=False, + ) + return do_waiter + + def _create_collection( + factory_self, resource_name, collection_model, service_context + ): + """ + Creates a new property on the resource to lazy-load a collection. + """ + cls = factory_self._collection_factory.load_from_definition( + resource_name=resource_name, + collection_model=collection_model, + service_context=service_context, + event_emitter=factory_self._emitter, + ) + + def get_collection(self): + return cls( + collection_model=collection_model, + parent=self, + factory=factory_self, + service_context=service_context, + ) + + get_collection.__name__ = str(collection_model.name) + get_collection.__doc__ = docstring.CollectionDocstring( + collection_model=collection_model, include_signature=False + ) + return property(get_collection) + + def _create_reference( + factory_self, reference_model, resource_name, service_context + ): + """ + Creates a new property on the resource to lazy-load a reference. + """ + # References are essentially an action with no request + # or response, so we can re-use the response handlers to + # build up resources from identifiers and data members. + handler = ResourceHandler( + search_path=reference_model.resource.path, + factory=factory_self, + resource_model=reference_model.resource, + service_context=service_context, + ) + + # Are there any identifiers that need access to data members? + # This is important when building the resource below since + # it requires the data to be loaded. + needs_data = any( + i.source == 'data' for i in reference_model.resource.identifiers + ) + + def get_reference(self): + # We need to lazy-evaluate the reference to handle circular + # references between resources. We do this by loading the class + # when first accessed. + # This is using a *response handler* so we need to make sure + # our data is loaded (if possible) and pass that data into + # the handler as if it were a response. This allows references + # to have their data loaded properly. + if needs_data and self.meta.data is None and hasattr(self, 'load'): + self.load() + return handler(self, {}, self.meta.data) + + get_reference.__name__ = str(reference_model.name) + get_reference.__doc__ = docstring.ReferenceDocstring( + reference_model=reference_model, include_signature=False + ) + return property(get_reference) + + def _create_class_partial( + factory_self, subresource_model, resource_name, service_context + ): + """ + Creates a new method which acts as a functools.partial, passing + along the instance's low-level `client` to the new resource + class' constructor. + """ + name = subresource_model.resource.type + + def create_resource(self, *args, **kwargs): + # We need a new method here because we want access to the + # instance's client. + positional_args = [] + + # We lazy-load the class to handle circular references. + json_def = service_context.resource_json_definitions.get(name, {}) + resource_cls = factory_self.load_from_definition( + resource_name=name, + single_resource_json_definition=json_def, + service_context=service_context, + ) + + # Assumes that identifiers are in order, which lets you do + # e.g. ``sqs.Queue('foo').Message('bar')`` to create a new message + # linked with the ``foo`` queue and which has a ``bar`` receipt + # handle. If we did kwargs here then future positional arguments + # would lead to failure. + identifiers = subresource_model.resource.identifiers + if identifiers is not None: + for identifier, value in build_identifiers(identifiers, self): + positional_args.append(value) + + return partial( + resource_cls, *positional_args, client=self.meta.client + )(*args, **kwargs) + + create_resource.__name__ = str(name) + create_resource.__doc__ = docstring.SubResourceDocstring( + resource_name=resource_name, + sub_resource_model=subresource_model, + service_model=service_context.service_model, + include_signature=False, + ) + return create_resource + + def _create_action( + factory_self, + action_model, + resource_name, + service_context, + is_load=False, + ): + """ + Creates a new method which makes a request to the underlying + AWS service. + """ + # Create the action in in this closure but before the ``do_action`` + # method below is invoked, which allows instances of the resource + # to share the ServiceAction instance. + action = ServiceAction( + action_model, factory=factory_self, service_context=service_context + ) + + # A resource's ``load`` method is special because it sets + # values on the resource instead of returning the response. + if is_load: + # We need a new method here because we want access to the + # instance via ``self``. + def do_action(self, *args, **kwargs): + response = action(self, *args, **kwargs) + self.meta.data = response + + # Create the docstring for the load/reload methods. + lazy_docstring = docstring.LoadReloadDocstring( + action_name=action_model.name, + resource_name=resource_name, + event_emitter=factory_self._emitter, + load_model=action_model, + service_model=service_context.service_model, + include_signature=False, + ) + else: + # We need a new method here because we want access to the + # instance via ``self``. + def do_action(self, *args, **kwargs): + response = action(self, *args, **kwargs) + + if hasattr(self, 'load'): + # Clear cached data. It will be reloaded the next + # time that an attribute is accessed. + # TODO: Make this configurable in the future? + self.meta.data = None + + return response + + lazy_docstring = docstring.ActionDocstring( + resource_name=resource_name, + event_emitter=factory_self._emitter, + action_model=action_model, + service_model=service_context.service_model, + include_signature=False, + ) + + do_action.__name__ = str(action_model.name) + do_action.__doc__ = lazy_docstring + return do_action diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/model.py b/dbtzin/lib/python3.8/site-packages/boto3/resources/model.py new file mode 100644 index 00000000..29371ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/resources/model.py @@ -0,0 +1,632 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +""" +The models defined in this file represent the resource JSON description +format and provide a layer of abstraction from the raw JSON. The advantages +of this are: + +* Pythonic interface (e.g. ``action.request.operation``) +* Consumers need not change for minor JSON changes (e.g. renamed field) + +These models are used both by the resource factory to generate resource +classes as well as by the documentation generator. +""" + +import logging + +from botocore import xform_name + +logger = logging.getLogger(__name__) + + +class Identifier: + """ + A resource identifier, given by its name. + + :type name: string + :param name: The name of the identifier + """ + + def __init__(self, name, member_name=None): + #: (``string``) The name of the identifier + self.name = name + self.member_name = member_name + + +class Action: + """ + A service operation action. + + :type name: string + :param name: The name of the action + :type definition: dict + :param definition: The JSON definition + :type resource_defs: dict + :param resource_defs: All resources defined in the service + """ + + def __init__(self, name, definition, resource_defs): + self._definition = definition + + #: (``string``) The name of the action + self.name = name + #: (:py:class:`Request`) This action's request or ``None`` + self.request = None + if 'request' in definition: + self.request = Request(definition.get('request', {})) + #: (:py:class:`ResponseResource`) This action's resource or ``None`` + self.resource = None + if 'resource' in definition: + self.resource = ResponseResource( + definition.get('resource', {}), resource_defs + ) + #: (``string``) The JMESPath search path or ``None`` + self.path = definition.get('path') + + +class DefinitionWithParams: + """ + An item which has parameters exposed via the ``params`` property. + A request has an operation and parameters, while a waiter has + a name, a low-level waiter name and parameters. + + :type definition: dict + :param definition: The JSON definition + """ + + def __init__(self, definition): + self._definition = definition + + @property + def params(self): + """ + Get a list of auto-filled parameters for this request. + + :type: list(:py:class:`Parameter`) + """ + params = [] + + for item in self._definition.get('params', []): + params.append(Parameter(**item)) + + return params + + +class Parameter: + """ + An auto-filled parameter which has a source and target. For example, + the ``QueueUrl`` may be auto-filled from a resource's ``url`` identifier + when making calls to ``queue.receive_messages``. + + :type target: string + :param target: The destination parameter name, e.g. ``QueueUrl`` + :type source_type: string + :param source_type: Where the source is defined. + :type source: string + :param source: The source name, e.g. ``Url`` + """ + + def __init__( + self, target, source, name=None, path=None, value=None, **kwargs + ): + #: (``string``) The destination parameter name + self.target = target + #: (``string``) Where the source is defined + self.source = source + #: (``string``) The name of the source, if given + self.name = name + #: (``string``) The JMESPath query of the source + self.path = path + #: (``string|int|float|bool``) The source constant value + self.value = value + + # Complain if we encounter any unknown values. + if kwargs: + logger.warning('Unknown parameter options found: %s', kwargs) + + +class Request(DefinitionWithParams): + """ + A service operation action request. + + :type definition: dict + :param definition: The JSON definition + """ + + def __init__(self, definition): + super().__init__(definition) + + #: (``string``) The name of the low-level service operation + self.operation = definition.get('operation') + + +class Waiter(DefinitionWithParams): + """ + An event waiter specification. + + :type name: string + :param name: Name of the waiter + :type definition: dict + :param definition: The JSON definition + """ + + PREFIX = 'WaitUntil' + + def __init__(self, name, definition): + super().__init__(definition) + + #: (``string``) The name of this waiter + self.name = name + + #: (``string``) The name of the underlying event waiter + self.waiter_name = definition.get('waiterName') + + +class ResponseResource: + """ + A resource response to create after performing an action. + + :type definition: dict + :param definition: The JSON definition + :type resource_defs: dict + :param resource_defs: All resources defined in the service + """ + + def __init__(self, definition, resource_defs): + self._definition = definition + self._resource_defs = resource_defs + + #: (``string``) The name of the response resource type + self.type = definition.get('type') + + #: (``string``) The JMESPath search query or ``None`` + self.path = definition.get('path') + + @property + def identifiers(self): + """ + A list of resource identifiers. + + :type: list(:py:class:`Identifier`) + """ + identifiers = [] + + for item in self._definition.get('identifiers', []): + identifiers.append(Parameter(**item)) + + return identifiers + + @property + def model(self): + """ + Get the resource model for the response resource. + + :type: :py:class:`ResourceModel` + """ + return ResourceModel( + self.type, self._resource_defs[self.type], self._resource_defs + ) + + +class Collection(Action): + """ + A group of resources. See :py:class:`Action`. + + :type name: string + :param name: The name of the collection + :type definition: dict + :param definition: The JSON definition + :type resource_defs: dict + :param resource_defs: All resources defined in the service + """ + + @property + def batch_actions(self): + """ + Get a list of batch actions supported by the resource type + contained in this action. This is a shortcut for accessing + the same information through the resource model. + + :rtype: list(:py:class:`Action`) + """ + return self.resource.model.batch_actions + + +class ResourceModel: + """ + A model representing a resource, defined via a JSON description + format. A resource has identifiers, attributes, actions, + sub-resources, references and collections. For more information + on resources, see :ref:`guide_resources`. + + :type name: string + :param name: The name of this resource, e.g. ``sqs`` or ``Queue`` + :type definition: dict + :param definition: The JSON definition + :type resource_defs: dict + :param resource_defs: All resources defined in the service + """ + + def __init__(self, name, definition, resource_defs): + self._definition = definition + self._resource_defs = resource_defs + self._renamed = {} + + #: (``string``) The name of this resource + self.name = name + #: (``string``) The service shape name for this resource or ``None`` + self.shape = definition.get('shape') + + def load_rename_map(self, shape=None): + """ + Load a name translation map given a shape. This will set + up renamed values for any collisions, e.g. if the shape, + an action, and a subresource all are all named ``foo`` + then the resource will have an action ``foo``, a subresource + named ``Foo`` and a property named ``foo_attribute``. + This is the order of precedence, from most important to + least important: + + * Load action (resource.load) + * Identifiers + * Actions + * Subresources + * References + * Collections + * Waiters + * Attributes (shape members) + + Batch actions are only exposed on collections, so do not + get modified here. Subresources use upper camel casing, so + are unlikely to collide with anything but other subresources. + + Creates a structure like this:: + + renames = { + ('action', 'id'): 'id_action', + ('collection', 'id'): 'id_collection', + ('attribute', 'id'): 'id_attribute' + } + + # Get the final name for an action named 'id' + name = renames.get(('action', 'id'), 'id') + + :type shape: botocore.model.Shape + :param shape: The underlying shape for this resource. + """ + # Meta is a reserved name for resources + names = {'meta'} + self._renamed = {} + + if self._definition.get('load'): + names.add('load') + + for item in self._definition.get('identifiers', []): + self._load_name_with_category(names, item['name'], 'identifier') + + for name in self._definition.get('actions', {}): + self._load_name_with_category(names, name, 'action') + + for name, ref in self._get_has_definition().items(): + # Subresources require no data members, just typically + # identifiers and user input. + data_required = False + for identifier in ref['resource']['identifiers']: + if identifier['source'] == 'data': + data_required = True + break + + if not data_required: + self._load_name_with_category( + names, name, 'subresource', snake_case=False + ) + else: + self._load_name_with_category(names, name, 'reference') + + for name in self._definition.get('hasMany', {}): + self._load_name_with_category(names, name, 'collection') + + for name in self._definition.get('waiters', {}): + self._load_name_with_category( + names, Waiter.PREFIX + name, 'waiter' + ) + + if shape is not None: + for name in shape.members.keys(): + self._load_name_with_category(names, name, 'attribute') + + def _load_name_with_category(self, names, name, category, snake_case=True): + """ + Load a name with a given category, possibly renaming it + if that name is already in use. The name will be stored + in ``names`` and possibly be set up in ``self._renamed``. + + :type names: set + :param names: Existing names (Python attributes, properties, or + methods) on the resource. + :type name: string + :param name: The original name of the value. + :type category: string + :param category: The value type, such as 'identifier' or 'action' + :type snake_case: bool + :param snake_case: True (default) if the name should be snake cased. + """ + if snake_case: + name = xform_name(name) + + if name in names: + logger.debug(f'Renaming {self.name} {category} {name}') + self._renamed[(category, name)] = name + '_' + category + name += '_' + category + + if name in names: + # This isn't good, let's raise instead of trying to keep + # renaming this value. + raise ValueError( + 'Problem renaming {} {} to {}!'.format( + self.name, category, name + ) + ) + + names.add(name) + + def _get_name(self, category, name, snake_case=True): + """ + Get a possibly renamed value given a category and name. This + uses the rename map set up in ``load_rename_map``, so that + method must be called once first. + + :type category: string + :param category: The value type, such as 'identifier' or 'action' + :type name: string + :param name: The original name of the value + :type snake_case: bool + :param snake_case: True (default) if the name should be snake cased. + :rtype: string + :return: Either the renamed value if it is set, otherwise the + original name. + """ + if snake_case: + name = xform_name(name) + + return self._renamed.get((category, name), name) + + def get_attributes(self, shape): + """ + Get a dictionary of attribute names to original name and shape + models that represent the attributes of this resource. Looks + like the following: + + { + 'some_name': ('SomeName', ) + } + + :type shape: botocore.model.Shape + :param shape: The underlying shape for this resource. + :rtype: dict + :return: Mapping of resource attributes. + """ + attributes = {} + identifier_names = [i.name for i in self.identifiers] + + for name, member in shape.members.items(): + snake_cased = xform_name(name) + if snake_cased in identifier_names: + # Skip identifiers, these are set through other means + continue + snake_cased = self._get_name( + 'attribute', snake_cased, snake_case=False + ) + attributes[snake_cased] = (name, member) + + return attributes + + @property + def identifiers(self): + """ + Get a list of resource identifiers. + + :type: list(:py:class:`Identifier`) + """ + identifiers = [] + + for item in self._definition.get('identifiers', []): + name = self._get_name('identifier', item['name']) + member_name = item.get('memberName', None) + if member_name: + member_name = self._get_name('attribute', member_name) + identifiers.append(Identifier(name, member_name)) + + return identifiers + + @property + def load(self): + """ + Get the load action for this resource, if it is defined. + + :type: :py:class:`Action` or ``None`` + """ + action = self._definition.get('load') + + if action is not None: + action = Action('load', action, self._resource_defs) + + return action + + @property + def actions(self): + """ + Get a list of actions for this resource. + + :type: list(:py:class:`Action`) + """ + actions = [] + + for name, item in self._definition.get('actions', {}).items(): + name = self._get_name('action', name) + actions.append(Action(name, item, self._resource_defs)) + + return actions + + @property + def batch_actions(self): + """ + Get a list of batch actions for this resource. + + :type: list(:py:class:`Action`) + """ + actions = [] + + for name, item in self._definition.get('batchActions', {}).items(): + name = self._get_name('batch_action', name) + actions.append(Action(name, item, self._resource_defs)) + + return actions + + def _get_has_definition(self): + """ + Get a ``has`` relationship definition from a model, where the + service resource model is treated special in that it contains + a relationship to every resource defined for the service. This + allows things like ``s3.Object('bucket-name', 'key')`` to + work even though the JSON doesn't define it explicitly. + + :rtype: dict + :return: Mapping of names to subresource and reference + definitions. + """ + if self.name not in self._resource_defs: + # This is the service resource, so let us expose all of + # the defined resources as subresources. + definition = {} + + for name, resource_def in self._resource_defs.items(): + # It's possible for the service to have renamed a + # resource or to have defined multiple names that + # point to the same resource type, so we need to + # take that into account. + found = False + has_items = self._definition.get('has', {}).items() + for has_name, has_def in has_items: + if has_def.get('resource', {}).get('type') == name: + definition[has_name] = has_def + found = True + + if not found: + # Create a relationship definition and attach it + # to the model, such that all identifiers must be + # supplied by the user. It will look something like: + # + # { + # 'resource': { + # 'type': 'ResourceName', + # 'identifiers': [ + # {'target': 'Name1', 'source': 'input'}, + # {'target': 'Name2', 'source': 'input'}, + # ... + # ] + # } + # } + # + fake_has = {'resource': {'type': name, 'identifiers': []}} + + for identifier in resource_def.get('identifiers', []): + fake_has['resource']['identifiers'].append( + {'target': identifier['name'], 'source': 'input'} + ) + + definition[name] = fake_has + else: + definition = self._definition.get('has', {}) + + return definition + + def _get_related_resources(self, subresources): + """ + Get a list of sub-resources or references. + + :type subresources: bool + :param subresources: ``True`` to get sub-resources, ``False`` to + get references. + :rtype: list(:py:class:`Action`) + """ + resources = [] + + for name, definition in self._get_has_definition().items(): + if subresources: + name = self._get_name('subresource', name, snake_case=False) + else: + name = self._get_name('reference', name) + action = Action(name, definition, self._resource_defs) + + data_required = False + for identifier in action.resource.identifiers: + if identifier.source == 'data': + data_required = True + break + + if subresources and not data_required: + resources.append(action) + elif not subresources and data_required: + resources.append(action) + + return resources + + @property + def subresources(self): + """ + Get a list of sub-resources. + + :type: list(:py:class:`Action`) + """ + return self._get_related_resources(True) + + @property + def references(self): + """ + Get a list of reference resources. + + :type: list(:py:class:`Action`) + """ + return self._get_related_resources(False) + + @property + def collections(self): + """ + Get a list of collections for this resource. + + :type: list(:py:class:`Collection`) + """ + collections = [] + + for name, item in self._definition.get('hasMany', {}).items(): + name = self._get_name('collection', name) + collections.append(Collection(name, item, self._resource_defs)) + + return collections + + @property + def waiters(self): + """ + Get a list of waiters for this resource. + + :type: list(:py:class:`Waiter`) + """ + waiters = [] + + for name, item in self._definition.get('waiters', {}).items(): + name = self._get_name('waiter', Waiter.PREFIX + name) + waiters.append(Waiter(name, item)) + + return waiters diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/params.py b/dbtzin/lib/python3.8/site-packages/boto3/resources/params.py new file mode 100644 index 00000000..3c5c74b3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/resources/params.py @@ -0,0 +1,167 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import re + +import jmespath +from botocore import xform_name + +from ..exceptions import ResourceLoadException + +INDEX_RE = re.compile(r'\[(.*)\]$') + + +def get_data_member(parent, path): + """ + Get a data member from a parent using a JMESPath search query, + loading the parent if required. If the parent cannot be loaded + and no data is present then an exception is raised. + + :type parent: ServiceResource + :param parent: The resource instance to which contains data we + are interested in. + :type path: string + :param path: The JMESPath expression to query + :raises ResourceLoadException: When no data is present and the + resource cannot be loaded. + :returns: The queried data or ``None``. + """ + # Ensure the parent has its data loaded, if possible. + if parent.meta.data is None: + if hasattr(parent, 'load'): + parent.load() + else: + raise ResourceLoadException( + f'{parent.__class__.__name__} has no load method!' + ) + + return jmespath.search(path, parent.meta.data) + + +def create_request_parameters(parent, request_model, params=None, index=None): + """ + Handle request parameters that can be filled in from identifiers, + resource data members or constants. + + By passing ``params``, you can invoke this method multiple times and + build up a parameter dict over time, which is particularly useful + for reverse JMESPath expressions that append to lists. + + :type parent: ServiceResource + :param parent: The resource instance to which this action is attached. + :type request_model: :py:class:`~boto3.resources.model.Request` + :param request_model: The action request model. + :type params: dict + :param params: If set, then add to this existing dict. It is both + edited in-place and returned. + :type index: int + :param index: The position of an item within a list + :rtype: dict + :return: Pre-filled parameters to be sent to the request operation. + """ + if params is None: + params = {} + + for param in request_model.params: + source = param.source + target = param.target + + if source == 'identifier': + # Resource identifier, e.g. queue.url + value = getattr(parent, xform_name(param.name)) + elif source == 'data': + # If this is a data member then it may incur a load + # action before returning the value. + value = get_data_member(parent, param.path) + elif source in ['string', 'integer', 'boolean']: + # These are hard-coded values in the definition + value = param.value + elif source == 'input': + # This is provided by the user, so ignore it here + continue + else: + raise NotImplementedError(f'Unsupported source type: {source}') + + build_param_structure(params, target, value, index) + + return params + + +def build_param_structure(params, target, value, index=None): + """ + This method provides a basic reverse JMESPath implementation that + lets you go from a JMESPath-like string to a possibly deeply nested + object. The ``params`` are mutated in-place, so subsequent calls + can modify the same element by its index. + + >>> build_param_structure(params, 'test[0]', 1) + >>> print(params) + {'test': [1]} + + >>> build_param_structure(params, 'foo.bar[0].baz', 'hello world') + >>> print(params) + {'test': [1], 'foo': {'bar': [{'baz': 'hello, world'}]}} + + """ + pos = params + parts = target.split('.') + + # First, split into parts like 'foo', 'bar[0]', 'baz' and process + # each piece. It can either be a list or a dict, depending on if + # an index like `[0]` is present. We detect this via a regular + # expression, and keep track of where we are in params via the + # pos variable, walking down to the last item. Once there, we + # set the value. + for i, part in enumerate(parts): + # Is it indexing an array? + result = INDEX_RE.search(part) + if result: + if result.group(1): + if result.group(1) == '*': + part = part[:-3] + else: + # We have an explicit index + index = int(result.group(1)) + part = part[: -len(str(index) + '[]')] + else: + # Index will be set after we know the proper part + # name and that it's a list instance. + index = None + part = part[:-2] + + if part not in pos or not isinstance(pos[part], list): + pos[part] = [] + + # This means we should append, e.g. 'foo[]' + if index is None: + index = len(pos[part]) + + while len(pos[part]) <= index: + # Assume it's a dict until we set the final value below + pos[part].append({}) + + # Last item? Set the value, otherwise set the new position + if i == len(parts) - 1: + pos[part][index] = value + else: + # The new pos is the *item* in the array, not the array! + pos = pos[part][index] + else: + if part not in pos: + pos[part] = {} + + # Last item? Set the value, otherwise set the new position + if i == len(parts) - 1: + pos[part] = value + else: + pos = pos[part] diff --git a/dbtzin/lib/python3.8/site-packages/boto3/resources/response.py b/dbtzin/lib/python3.8/site-packages/boto3/resources/response.py new file mode 100644 index 00000000..6dd92acb --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/resources/response.py @@ -0,0 +1,318 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import jmespath +from botocore import xform_name + +from .params import get_data_member + + +def all_not_none(iterable): + """ + Return True if all elements of the iterable are not None (or if the + iterable is empty). This is like the built-in ``all``, except checks + against None, so 0 and False are allowable values. + """ + for element in iterable: + if element is None: + return False + return True + + +def build_identifiers(identifiers, parent, params=None, raw_response=None): + """ + Builds a mapping of identifier names to values based on the + identifier source location, type, and target. Identifier + values may be scalars or lists depending on the source type + and location. + + :type identifiers: list + :param identifiers: List of :py:class:`~boto3.resources.model.Parameter` + definitions + :type parent: ServiceResource + :param parent: The resource instance to which this action is attached. + :type params: dict + :param params: Request parameters sent to the service. + :type raw_response: dict + :param raw_response: Low-level operation response. + :rtype: list + :return: An ordered list of ``(name, value)`` identifier tuples. + """ + results = [] + + for identifier in identifiers: + source = identifier.source + target = identifier.target + + if source == 'response': + value = jmespath.search(identifier.path, raw_response) + elif source == 'requestParameter': + value = jmespath.search(identifier.path, params) + elif source == 'identifier': + value = getattr(parent, xform_name(identifier.name)) + elif source == 'data': + # If this is a data member then it may incur a load + # action before returning the value. + value = get_data_member(parent, identifier.path) + elif source == 'input': + # This value is set by the user, so ignore it here + continue + else: + raise NotImplementedError(f'Unsupported source type: {source}') + + results.append((xform_name(target), value)) + + return results + + +def build_empty_response(search_path, operation_name, service_model): + """ + Creates an appropriate empty response for the type that is expected, + based on the service model's shape type. For example, a value that + is normally a list would then return an empty list. A structure would + return an empty dict, and a number would return None. + + :type search_path: string + :param search_path: JMESPath expression to search in the response + :type operation_name: string + :param operation_name: Name of the underlying service operation. + :type service_model: :ref:`botocore.model.ServiceModel` + :param service_model: The Botocore service model + :rtype: dict, list, or None + :return: An appropriate empty value + """ + response = None + + operation_model = service_model.operation_model(operation_name) + shape = operation_model.output_shape + + if search_path: + # Walk the search path and find the final shape. For example, given + # a path of ``foo.bar[0].baz``, we first find the shape for ``foo``, + # then the shape for ``bar`` (ignoring the indexing), and finally + # the shape for ``baz``. + for item in search_path.split('.'): + item = item.strip('[0123456789]$') + + if shape.type_name == 'structure': + shape = shape.members[item] + elif shape.type_name == 'list': + shape = shape.member + else: + raise NotImplementedError( + 'Search path hits shape type {} from {}'.format( + shape.type_name, item + ) + ) + + # Anything not handled here is set to None + if shape.type_name == 'structure': + response = {} + elif shape.type_name == 'list': + response = [] + elif shape.type_name == 'map': + response = {} + + return response + + +class RawHandler: + """ + A raw action response handler. This passed through the response + dictionary, optionally after performing a JMESPath search if one + has been defined for the action. + + :type search_path: string + :param search_path: JMESPath expression to search in the response + :rtype: dict + :return: Service response + """ + + def __init__(self, search_path): + self.search_path = search_path + + def __call__(self, parent, params, response): + """ + :type parent: ServiceResource + :param parent: The resource instance to which this action is attached. + :type params: dict + :param params: Request parameters sent to the service. + :type response: dict + :param response: Low-level operation response. + """ + # TODO: Remove the '$' check after JMESPath supports it + if self.search_path and self.search_path != '$': + response = jmespath.search(self.search_path, response) + + return response + + +class ResourceHandler: + """ + Creates a new resource or list of new resources from the low-level + response based on the given response resource definition. + + :type search_path: string + :param search_path: JMESPath expression to search in the response + + :type factory: ResourceFactory + :param factory: The factory that created the resource class to which + this action is attached. + + :type resource_model: :py:class:`~boto3.resources.model.ResponseResource` + :param resource_model: Response resource model. + + :type service_context: :py:class:`~boto3.utils.ServiceContext` + :param service_context: Context about the AWS service + + :type operation_name: string + :param operation_name: Name of the underlying service operation, if it + exists. + + :rtype: ServiceResource or list + :return: New resource instance(s). + """ + + def __init__( + self, + search_path, + factory, + resource_model, + service_context, + operation_name=None, + ): + self.search_path = search_path + self.factory = factory + self.resource_model = resource_model + self.operation_name = operation_name + self.service_context = service_context + + def __call__(self, parent, params, response): + """ + :type parent: ServiceResource + :param parent: The resource instance to which this action is attached. + :type params: dict + :param params: Request parameters sent to the service. + :type response: dict + :param response: Low-level operation response. + """ + resource_name = self.resource_model.type + json_definition = self.service_context.resource_json_definitions.get( + resource_name + ) + + # Load the new resource class that will result from this action. + resource_cls = self.factory.load_from_definition( + resource_name=resource_name, + single_resource_json_definition=json_definition, + service_context=self.service_context, + ) + raw_response = response + search_response = None + + # Anytime a path is defined, it means the response contains the + # resource's attributes, so resource_data gets set here. It + # eventually ends up in resource.meta.data, which is where + # the attribute properties look for data. + if self.search_path: + search_response = jmespath.search(self.search_path, raw_response) + + # First, we parse all the identifiers, then create the individual + # response resources using them. Any identifiers that are lists + # will have one item consumed from the front of the list for each + # resource that is instantiated. Items which are not a list will + # be set as the same value on each new resource instance. + identifiers = dict( + build_identifiers( + self.resource_model.identifiers, parent, params, raw_response + ) + ) + + # If any of the identifiers is a list, then the response is plural + plural = [v for v in identifiers.values() if isinstance(v, list)] + + if plural: + response = [] + + # The number of items in an identifier that is a list will + # determine how many resource instances to create. + for i in range(len(plural[0])): + # Response item data is *only* available if a search path + # was given. This prevents accidentally loading unrelated + # data that may be in the response. + response_item = None + if search_response: + response_item = search_response[i] + response.append( + self.handle_response_item( + resource_cls, parent, identifiers, response_item + ) + ) + elif all_not_none(identifiers.values()): + # All identifiers must always exist, otherwise the resource + # cannot be instantiated. + response = self.handle_response_item( + resource_cls, parent, identifiers, search_response + ) + else: + # The response should be empty, but that may mean an + # empty dict, list, or None based on whether we make + # a remote service call and what shape it is expected + # to return. + response = None + if self.operation_name is not None: + # A remote service call was made, so try and determine + # its shape. + response = build_empty_response( + self.search_path, + self.operation_name, + self.service_context.service_model, + ) + + return response + + def handle_response_item( + self, resource_cls, parent, identifiers, resource_data + ): + """ + Handles the creation of a single response item by setting + parameters and creating the appropriate resource instance. + + :type resource_cls: ServiceResource subclass + :param resource_cls: The resource class to instantiate. + :type parent: ServiceResource + :param parent: The resource instance to which this action is attached. + :type identifiers: dict + :param identifiers: Map of identifier names to value or values. + :type resource_data: dict or None + :param resource_data: Data for resource attributes. + :rtype: ServiceResource + :return: New resource instance. + """ + kwargs = { + 'client': parent.meta.client, + } + + for name, value in identifiers.items(): + # If value is a list, then consume the next item + if isinstance(value, list): + value = value.pop(0) + + kwargs[name] = value + + resource = resource_cls(**kwargs) + + if resource_data is not None: + resource.meta.data = resource_data + + return resource diff --git a/dbtzin/lib/python3.8/site-packages/boto3/s3/__init__.py b/dbtzin/lib/python3.8/site-packages/boto3/s3/__init__.py new file mode 100644 index 00000000..6001b27b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/s3/__init__.py @@ -0,0 +1,12 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. diff --git a/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..5dde02fb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/constants.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/constants.cpython-38.pyc new file mode 100644 index 00000000..721c5848 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/constants.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/inject.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/inject.cpython-38.pyc new file mode 100644 index 00000000..fdbbbc7a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/inject.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/transfer.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/transfer.cpython-38.pyc new file mode 100644 index 00000000..4d989e97 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/boto3/s3/__pycache__/transfer.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/boto3/s3/constants.py b/dbtzin/lib/python3.8/site-packages/boto3/s3/constants.py new file mode 100644 index 00000000..c7f691fc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/s3/constants.py @@ -0,0 +1,17 @@ +# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + + +# TransferConfig preferred_transfer_client settings +CLASSIC_TRANSFER_CLIENT = "classic" +AUTO_RESOLVE_TRANSFER_CLIENT = "auto" diff --git a/dbtzin/lib/python3.8/site-packages/boto3/s3/inject.py b/dbtzin/lib/python3.8/site-packages/boto3/s3/inject.py new file mode 100644 index 00000000..440be5a8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/s3/inject.py @@ -0,0 +1,897 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import copy as python_copy + +from botocore.exceptions import ClientError + +from boto3 import utils +from boto3.s3.transfer import ( + ProgressCallbackInvoker, + S3Transfer, + TransferConfig, + create_transfer_manager, +) + + +def inject_s3_transfer_methods(class_attributes, **kwargs): + utils.inject_attribute(class_attributes, 'upload_file', upload_file) + utils.inject_attribute(class_attributes, 'download_file', download_file) + utils.inject_attribute(class_attributes, 'copy', copy) + utils.inject_attribute(class_attributes, 'upload_fileobj', upload_fileobj) + utils.inject_attribute( + class_attributes, 'download_fileobj', download_fileobj + ) + + +def inject_bucket_methods(class_attributes, **kwargs): + utils.inject_attribute(class_attributes, 'load', bucket_load) + utils.inject_attribute(class_attributes, 'upload_file', bucket_upload_file) + utils.inject_attribute( + class_attributes, 'download_file', bucket_download_file + ) + utils.inject_attribute(class_attributes, 'copy', bucket_copy) + utils.inject_attribute( + class_attributes, 'upload_fileobj', bucket_upload_fileobj + ) + utils.inject_attribute( + class_attributes, 'download_fileobj', bucket_download_fileobj + ) + + +def inject_object_methods(class_attributes, **kwargs): + utils.inject_attribute(class_attributes, 'upload_file', object_upload_file) + utils.inject_attribute( + class_attributes, 'download_file', object_download_file + ) + utils.inject_attribute(class_attributes, 'copy', object_copy) + utils.inject_attribute( + class_attributes, 'upload_fileobj', object_upload_fileobj + ) + utils.inject_attribute( + class_attributes, 'download_fileobj', object_download_fileobj + ) + + +def inject_object_summary_methods(class_attributes, **kwargs): + utils.inject_attribute(class_attributes, 'load', object_summary_load) + + +def bucket_load(self, *args, **kwargs): + """ + Calls s3.Client.list_buckets() to update the attributes of the Bucket + resource. + """ + # The docstring above is phrased this way to match what the autogenerated + # docs produce. + + # We can't actually get the bucket's attributes from a HeadBucket, + # so we need to use a ListBuckets and search for our bucket. + # However, we may fail if we lack permissions to ListBuckets + # or the bucket is in another account. In which case, creation_date + # will be None. + self.meta.data = {} + try: + response = self.meta.client.list_buckets() + for bucket_data in response['Buckets']: + if bucket_data['Name'] == self.name: + self.meta.data = bucket_data + break + except ClientError as e: + if not e.response.get('Error', {}).get('Code') == 'AccessDenied': + raise + + +def object_summary_load(self, *args, **kwargs): + """ + Calls s3.Client.head_object to update the attributes of the ObjectSummary + resource. + """ + response = self.meta.client.head_object( + Bucket=self.bucket_name, Key=self.key + ) + if 'ContentLength' in response: + response['Size'] = response.pop('ContentLength') + self.meta.data = response + + +def upload_file( + self, Filename, Bucket, Key, ExtraArgs=None, Callback=None, Config=None +): + """Upload a file to an S3 object. + + Usage:: + + import boto3 + s3 = boto3.client('s3') + s3.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt') + + Similar behavior as S3Transfer's upload_file() method, except that + argument names are capitalized. Detailed examples can be found at + :ref:`S3Transfer's Usage `. + + :type Filename: str + :param Filename: The path to the file to upload. + + :type Bucket: str + :param Bucket: The name of the bucket to upload to. + + :type Key: str + :param Key: The name of the key to upload to. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed upload arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the upload. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + transfer. + """ + with S3Transfer(self, Config) as transfer: + return transfer.upload_file( + filename=Filename, + bucket=Bucket, + key=Key, + extra_args=ExtraArgs, + callback=Callback, + ) + + +def download_file( + self, Bucket, Key, Filename, ExtraArgs=None, Callback=None, Config=None +): + """Download an S3 object to a file. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt') + + Similar behavior as S3Transfer's download_file() method, + except that parameters are capitalized. Detailed examples can be found at + :ref:`S3Transfer's Usage `. + + :type Bucket: str + :param Bucket: The name of the bucket to download from. + + :type Key: str + :param Key: The name of the key to download from. + + :type Filename: str + :param Filename: The path to the file to download to. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed download arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the download. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + transfer. + """ + with S3Transfer(self, Config) as transfer: + return transfer.download_file( + bucket=Bucket, + key=Key, + filename=Filename, + extra_args=ExtraArgs, + callback=Callback, + ) + + +def bucket_upload_file( + self, Filename, Key, ExtraArgs=None, Callback=None, Config=None +): + """Upload a file to an S3 object. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + s3.Bucket('mybucket').upload_file('/tmp/hello.txt', 'hello.txt') + + Similar behavior as S3Transfer's upload_file() method, + except that parameters are capitalized. Detailed examples can be found at + :ref:`S3Transfer's Usage `. + + :type Filename: str + :param Filename: The path to the file to upload. + + :type Key: str + :param Key: The name of the key to upload to. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed upload arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the upload. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + transfer. + """ + return self.meta.client.upload_file( + Filename=Filename, + Bucket=self.name, + Key=Key, + ExtraArgs=ExtraArgs, + Callback=Callback, + Config=Config, + ) + + +def bucket_download_file( + self, Key, Filename, ExtraArgs=None, Callback=None, Config=None +): + """Download an S3 object to a file. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + s3.Bucket('mybucket').download_file('hello.txt', '/tmp/hello.txt') + + Similar behavior as S3Transfer's download_file() method, + except that parameters are capitalized. Detailed examples can be found at + :ref:`S3Transfer's Usage `. + + :type Key: str + :param Key: The name of the key to download from. + + :type Filename: str + :param Filename: The path to the file to download to. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed download arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the download. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + transfer. + """ + return self.meta.client.download_file( + Bucket=self.name, + Key=Key, + Filename=Filename, + ExtraArgs=ExtraArgs, + Callback=Callback, + Config=Config, + ) + + +def object_upload_file( + self, Filename, ExtraArgs=None, Callback=None, Config=None +): + """Upload a file to an S3 object. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + s3.Object('mybucket', 'hello.txt').upload_file('/tmp/hello.txt') + + Similar behavior as S3Transfer's upload_file() method, + except that parameters are capitalized. Detailed examples can be found at + :ref:`S3Transfer's Usage `. + + :type Filename: str + :param Filename: The path to the file to upload. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed upload arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the upload. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + transfer. + """ + return self.meta.client.upload_file( + Filename=Filename, + Bucket=self.bucket_name, + Key=self.key, + ExtraArgs=ExtraArgs, + Callback=Callback, + Config=Config, + ) + + +def object_download_file( + self, Filename, ExtraArgs=None, Callback=None, Config=None +): + """Download an S3 object to a file. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + s3.Object('mybucket', 'hello.txt').download_file('/tmp/hello.txt') + + Similar behavior as S3Transfer's download_file() method, + except that parameters are capitalized. Detailed examples can be found at + :ref:`S3Transfer's Usage `. + + :type Filename: str + :param Filename: The path to the file to download to. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed download arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the download. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + transfer. + """ + return self.meta.client.download_file( + Bucket=self.bucket_name, + Key=self.key, + Filename=Filename, + ExtraArgs=ExtraArgs, + Callback=Callback, + Config=Config, + ) + + +def copy( + self, + CopySource, + Bucket, + Key, + ExtraArgs=None, + Callback=None, + SourceClient=None, + Config=None, +): + """Copy an object from one S3 location to another. + + This is a managed transfer which will perform a multipart copy in + multiple threads if necessary. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + copy_source = { + 'Bucket': 'mybucket', + 'Key': 'mykey' + } + s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey') + + :type CopySource: dict + :param CopySource: The name of the source bucket, key name of the + source object, and optional version ID of the source object. The + dictionary format is: + ``{'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}``. Note + that the ``VersionId`` key is optional and may be omitted. + + :type Bucket: str + :param Bucket: The name of the bucket to copy to + + :type Key: str + :param Key: The name of the key to copy to + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed download arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the copy. + + :type SourceClient: botocore or boto3 Client + :param SourceClient: The client to be used for operation that + may happen at the source object. For example, this client is + used for the head_object that determines the size of the copy. + If no client is provided, the current client is used as the client + for the source object. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + copy. + """ + subscribers = None + if Callback is not None: + subscribers = [ProgressCallbackInvoker(Callback)] + + config = Config + if config is None: + config = TransferConfig() + + # copy is not supported in the CRT + new_config = python_copy.copy(config) + new_config.preferred_transfer_client = "classic" + + with create_transfer_manager(self, new_config) as manager: + future = manager.copy( + copy_source=CopySource, + bucket=Bucket, + key=Key, + extra_args=ExtraArgs, + subscribers=subscribers, + source_client=SourceClient, + ) + return future.result() + + +def bucket_copy( + self, + CopySource, + Key, + ExtraArgs=None, + Callback=None, + SourceClient=None, + Config=None, +): + """Copy an object from one S3 location to an object in this bucket. + + This is a managed transfer which will perform a multipart copy in + multiple threads if necessary. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + copy_source = { + 'Bucket': 'mybucket', + 'Key': 'mykey' + } + bucket = s3.Bucket('otherbucket') + bucket.copy(copy_source, 'otherkey') + + :type CopySource: dict + :param CopySource: The name of the source bucket, key name of the + source object, and optional version ID of the source object. The + dictionary format is: + ``{'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}``. Note + that the ``VersionId`` key is optional and may be omitted. + + :type Key: str + :param Key: The name of the key to copy to + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed download arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the copy. + + :type SourceClient: botocore or boto3 Client + :param SourceClient: The client to be used for operation that + may happen at the source object. For example, this client is + used for the head_object that determines the size of the copy. + If no client is provided, the current client is used as the client + for the source object. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + copy. + """ + return self.meta.client.copy( + CopySource=CopySource, + Bucket=self.name, + Key=Key, + ExtraArgs=ExtraArgs, + Callback=Callback, + SourceClient=SourceClient, + Config=Config, + ) + + +def object_copy( + self, + CopySource, + ExtraArgs=None, + Callback=None, + SourceClient=None, + Config=None, +): + """Copy an object from one S3 location to this object. + + This is a managed transfer which will perform a multipart copy in + multiple threads if necessary. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + copy_source = { + 'Bucket': 'mybucket', + 'Key': 'mykey' + } + bucket = s3.Bucket('otherbucket') + obj = bucket.Object('otherkey') + obj.copy(copy_source) + + :type CopySource: dict + :param CopySource: The name of the source bucket, key name of the + source object, and optional version ID of the source object. The + dictionary format is: + ``{'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}``. Note + that the ``VersionId`` key is optional and may be omitted. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed download arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the copy. + + :type SourceClient: botocore or boto3 Client + :param SourceClient: The client to be used for operation that + may happen at the source object. For example, this client is + used for the head_object that determines the size of the copy. + If no client is provided, the current client is used as the client + for the source object. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + copy. + """ + return self.meta.client.copy( + CopySource=CopySource, + Bucket=self.bucket_name, + Key=self.key, + ExtraArgs=ExtraArgs, + Callback=Callback, + SourceClient=SourceClient, + Config=Config, + ) + + +def upload_fileobj( + self, Fileobj, Bucket, Key, ExtraArgs=None, Callback=None, Config=None +): + """Upload a file-like object to S3. + + The file-like object must be in binary mode. + + This is a managed transfer which will perform a multipart upload in + multiple threads if necessary. + + Usage:: + + import boto3 + s3 = boto3.client('s3') + + with open('filename', 'rb') as data: + s3.upload_fileobj(data, 'mybucket', 'mykey') + + :type Fileobj: a file-like object + :param Fileobj: A file-like object to upload. At a minimum, it must + implement the `read` method, and must return bytes. + + :type Bucket: str + :param Bucket: The name of the bucket to upload to. + + :type Key: str + :param Key: The name of the key to upload to. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed upload arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the upload. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + upload. + """ + if not hasattr(Fileobj, 'read'): + raise ValueError('Fileobj must implement read') + + subscribers = None + if Callback is not None: + subscribers = [ProgressCallbackInvoker(Callback)] + + config = Config + if config is None: + config = TransferConfig() + + with create_transfer_manager(self, config) as manager: + future = manager.upload( + fileobj=Fileobj, + bucket=Bucket, + key=Key, + extra_args=ExtraArgs, + subscribers=subscribers, + ) + return future.result() + + +def bucket_upload_fileobj( + self, Fileobj, Key, ExtraArgs=None, Callback=None, Config=None +): + """Upload a file-like object to this bucket. + + The file-like object must be in binary mode. + + This is a managed transfer which will perform a multipart upload in + multiple threads if necessary. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + bucket = s3.Bucket('mybucket') + + with open('filename', 'rb') as data: + bucket.upload_fileobj(data, 'mykey') + + :type Fileobj: a file-like object + :param Fileobj: A file-like object to upload. At a minimum, it must + implement the `read` method, and must return bytes. + + :type Key: str + :param Key: The name of the key to upload to. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed upload arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the upload. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + upload. + """ + return self.meta.client.upload_fileobj( + Fileobj=Fileobj, + Bucket=self.name, + Key=Key, + ExtraArgs=ExtraArgs, + Callback=Callback, + Config=Config, + ) + + +def object_upload_fileobj( + self, Fileobj, ExtraArgs=None, Callback=None, Config=None +): + """Upload a file-like object to this object. + + The file-like object must be in binary mode. + + This is a managed transfer which will perform a multipart upload in + multiple threads if necessary. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + bucket = s3.Bucket('mybucket') + obj = bucket.Object('mykey') + + with open('filename', 'rb') as data: + obj.upload_fileobj(data) + + :type Fileobj: a file-like object + :param Fileobj: A file-like object to upload. At a minimum, it must + implement the `read` method, and must return bytes. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed upload arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the upload. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + upload. + """ + return self.meta.client.upload_fileobj( + Fileobj=Fileobj, + Bucket=self.bucket_name, + Key=self.key, + ExtraArgs=ExtraArgs, + Callback=Callback, + Config=Config, + ) + + +def download_fileobj( + self, Bucket, Key, Fileobj, ExtraArgs=None, Callback=None, Config=None +): + """Download an object from S3 to a file-like object. + + The file-like object must be in binary mode. + + This is a managed transfer which will perform a multipart download in + multiple threads if necessary. + + Usage:: + + import boto3 + s3 = boto3.client('s3') + + with open('filename', 'wb') as data: + s3.download_fileobj('mybucket', 'mykey', data) + + :type Bucket: str + :param Bucket: The name of the bucket to download from. + + :type Key: str + :param Key: The name of the key to download from. + + :type Fileobj: a file-like object + :param Fileobj: A file-like object to download into. At a minimum, it must + implement the `write` method and must accept bytes. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed download arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the download. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + download. + """ + if not hasattr(Fileobj, 'write'): + raise ValueError('Fileobj must implement write') + + subscribers = None + if Callback is not None: + subscribers = [ProgressCallbackInvoker(Callback)] + + config = Config + if config is None: + config = TransferConfig() + + with create_transfer_manager(self, config) as manager: + future = manager.download( + bucket=Bucket, + key=Key, + fileobj=Fileobj, + extra_args=ExtraArgs, + subscribers=subscribers, + ) + return future.result() + + +def bucket_download_fileobj( + self, Key, Fileobj, ExtraArgs=None, Callback=None, Config=None +): + """Download an object from this bucket to a file-like-object. + + The file-like object must be in binary mode. + + This is a managed transfer which will perform a multipart download in + multiple threads if necessary. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + bucket = s3.Bucket('mybucket') + + with open('filename', 'wb') as data: + bucket.download_fileobj('mykey', data) + + :type Fileobj: a file-like object + :param Fileobj: A file-like object to download into. At a minimum, it must + implement the `write` method and must accept bytes. + + :type Key: str + :param Key: The name of the key to download from. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed download arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the download. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + download. + """ + return self.meta.client.download_fileobj( + Bucket=self.name, + Key=Key, + Fileobj=Fileobj, + ExtraArgs=ExtraArgs, + Callback=Callback, + Config=Config, + ) + + +def object_download_fileobj( + self, Fileobj, ExtraArgs=None, Callback=None, Config=None +): + """Download this object from S3 to a file-like object. + + The file-like object must be in binary mode. + + This is a managed transfer which will perform a multipart download in + multiple threads if necessary. + + Usage:: + + import boto3 + s3 = boto3.resource('s3') + bucket = s3.Bucket('mybucket') + obj = bucket.Object('mykey') + + with open('filename', 'wb') as data: + obj.download_fileobj(data) + + :type Fileobj: a file-like object + :param Fileobj: A file-like object to download into. At a minimum, it must + implement the `write` method and must accept bytes. + + :type ExtraArgs: dict + :param ExtraArgs: Extra arguments that may be passed to the + client operation. For allowed download arguments see + boto3.s3.transfer.S3Transfer.ALLOWED_DOWNLOAD_ARGS. + + :type Callback: function + :param Callback: A method which takes a number of bytes transferred to + be periodically called during the download. + + :type Config: boto3.s3.transfer.TransferConfig + :param Config: The transfer configuration to be used when performing the + download. + """ + return self.meta.client.download_fileobj( + Bucket=self.bucket_name, + Key=self.key, + Fileobj=Fileobj, + ExtraArgs=ExtraArgs, + Callback=Callback, + Config=Config, + ) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/s3/transfer.py b/dbtzin/lib/python3.8/site-packages/boto3/s3/transfer.py new file mode 100644 index 00000000..cc445d36 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/s3/transfer.py @@ -0,0 +1,437 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +"""Abstractions over S3's upload/download operations. + +This module provides high level abstractions for efficient +uploads/downloads. It handles several things for the user: + +* Automatically switching to multipart transfers when + a file is over a specific size threshold +* Uploading/downloading a file in parallel +* Progress callbacks to monitor transfers +* Retries. While botocore handles retries for streaming uploads, + it is not possible for it to handle retries for streaming + downloads. This module handles retries for both cases so + you don't need to implement any retry logic yourself. + +This module has a reasonable set of defaults. It also allows you +to configure many aspects of the transfer process including: + +* Multipart threshold size +* Max parallel downloads +* Socket timeouts +* Retry amounts + +There is no support for s3->s3 multipart copies at this +time. + + +.. _ref_s3transfer_usage: + +Usage +===== + +The simplest way to use this module is: + +.. code-block:: python + + client = boto3.client('s3', 'us-west-2') + transfer = S3Transfer(client) + # Upload /tmp/myfile to s3://bucket/key + transfer.upload_file('/tmp/myfile', 'bucket', 'key') + + # Download s3://bucket/key to /tmp/myfile + transfer.download_file('bucket', 'key', '/tmp/myfile') + +The ``upload_file`` and ``download_file`` methods also accept +``**kwargs``, which will be forwarded through to the corresponding +client operation. Here are a few examples using ``upload_file``:: + + # Making the object public + transfer.upload_file('/tmp/myfile', 'bucket', 'key', + extra_args={'ACL': 'public-read'}) + + # Setting metadata + transfer.upload_file('/tmp/myfile', 'bucket', 'key', + extra_args={'Metadata': {'a': 'b', 'c': 'd'}}) + + # Setting content type + transfer.upload_file('/tmp/myfile.json', 'bucket', 'key', + extra_args={'ContentType': "application/json"}) + + +The ``S3Transfer`` class also supports progress callbacks so you can +provide transfer progress to users. Both the ``upload_file`` and +``download_file`` methods take an optional ``callback`` parameter. +Here's an example of how to print a simple progress percentage +to the user: + +.. code-block:: python + + class ProgressPercentage(object): + def __init__(self, filename): + self._filename = filename + self._size = float(os.path.getsize(filename)) + self._seen_so_far = 0 + self._lock = threading.Lock() + + def __call__(self, bytes_amount): + # To simplify we'll assume this is hooked up + # to a single filename. + with self._lock: + self._seen_so_far += bytes_amount + percentage = (self._seen_so_far / self._size) * 100 + sys.stdout.write( + "\r%s %s / %s (%.2f%%)" % ( + self._filename, self._seen_so_far, self._size, + percentage)) + sys.stdout.flush() + + + transfer = S3Transfer(boto3.client('s3', 'us-west-2')) + # Upload /tmp/myfile to s3://bucket/key and print upload progress. + transfer.upload_file('/tmp/myfile', 'bucket', 'key', + callback=ProgressPercentage('/tmp/myfile')) + + + +You can also provide a TransferConfig object to the S3Transfer +object that gives you more fine grained control over the +transfer. For example: + +.. code-block:: python + + client = boto3.client('s3', 'us-west-2') + config = TransferConfig( + multipart_threshold=8 * 1024 * 1024, + max_concurrency=10, + num_download_attempts=10, + ) + transfer = S3Transfer(client, config) + transfer.upload_file('/tmp/foo', 'bucket', 'key') + + +""" +import logging +import threading +from os import PathLike, fspath, getpid + +from botocore.compat import HAS_CRT +from botocore.exceptions import ClientError +from s3transfer.exceptions import ( + RetriesExceededError as S3TransferRetriesExceededError, +) +from s3transfer.futures import NonThreadedExecutor +from s3transfer.manager import TransferConfig as S3TransferConfig +from s3transfer.manager import TransferManager +from s3transfer.subscribers import BaseSubscriber +from s3transfer.utils import OSUtils + +import boto3.s3.constants as constants +from boto3.exceptions import RetriesExceededError, S3UploadFailedError + +if HAS_CRT: + import awscrt.s3 + + from boto3.crt import create_crt_transfer_manager + +KB = 1024 +MB = KB * KB + +logger = logging.getLogger(__name__) + + +def create_transfer_manager(client, config, osutil=None): + """Creates a transfer manager based on configuration + + :type client: boto3.client + :param client: The S3 client to use + + :type config: boto3.s3.transfer.TransferConfig + :param config: The transfer config to use + + :type osutil: s3transfer.utils.OSUtils + :param osutil: The os utility to use + + :rtype: s3transfer.manager.TransferManager + :returns: A transfer manager based on parameters provided + """ + if _should_use_crt(config): + crt_transfer_manager = create_crt_transfer_manager(client, config) + if crt_transfer_manager is not None: + logger.debug( + f"Using CRT client. pid: {getpid()}, thread: {threading.get_ident()}" + ) + return crt_transfer_manager + + # If we don't resolve something above, fallback to the default. + logger.debug( + f"Using default client. pid: {getpid()}, thread: {threading.get_ident()}" + ) + return _create_default_transfer_manager(client, config, osutil) + + +def _should_use_crt(config): + # This feature requires awscrt>=0.19.18 + if HAS_CRT and has_minimum_crt_version((0, 19, 18)): + is_optimized_instance = awscrt.s3.is_optimized_for_system() + else: + is_optimized_instance = False + pref_transfer_client = config.preferred_transfer_client.lower() + + if ( + is_optimized_instance + and pref_transfer_client == constants.AUTO_RESOLVE_TRANSFER_CLIENT + ): + logger.debug( + "Attempting to use CRTTransferManager. Config settings may be ignored." + ) + return True + + logger.debug( + "Opting out of CRT Transfer Manager. Preferred client: " + f"{pref_transfer_client}, CRT available: {HAS_CRT}, " + f"Instance Optimized: {is_optimized_instance}." + ) + return False + + +def has_minimum_crt_version(minimum_version): + """Not intended for use outside boto3.""" + if not HAS_CRT: + return False + + crt_version_str = awscrt.__version__ + try: + crt_version_ints = map(int, crt_version_str.split(".")) + crt_version_tuple = tuple(crt_version_ints) + except (TypeError, ValueError): + return False + + return crt_version_tuple >= minimum_version + + +def _create_default_transfer_manager(client, config, osutil): + """Create the default TransferManager implementation for s3transfer.""" + executor_cls = None + if not config.use_threads: + executor_cls = NonThreadedExecutor + return TransferManager(client, config, osutil, executor_cls) + + +class TransferConfig(S3TransferConfig): + ALIAS = { + 'max_concurrency': 'max_request_concurrency', + 'max_io_queue': 'max_io_queue_size', + } + + def __init__( + self, + multipart_threshold=8 * MB, + max_concurrency=10, + multipart_chunksize=8 * MB, + num_download_attempts=5, + max_io_queue=100, + io_chunksize=256 * KB, + use_threads=True, + max_bandwidth=None, + preferred_transfer_client=constants.AUTO_RESOLVE_TRANSFER_CLIENT, + ): + """Configuration object for managed S3 transfers + + :param multipart_threshold: The transfer size threshold for which + multipart uploads, downloads, and copies will automatically be + triggered. + + :param max_concurrency: The maximum number of threads that will be + making requests to perform a transfer. If ``use_threads`` is + set to ``False``, the value provided is ignored as the transfer + will only ever use the main thread. + + :param multipart_chunksize: The partition size of each part for a + multipart transfer. + + :param num_download_attempts: The number of download attempts that + will be retried upon errors with downloading an object in S3. + Note that these retries account for errors that occur when + streaming down the data from s3 (i.e. socket errors and read + timeouts that occur after receiving an OK response from s3). + Other retryable exceptions such as throttling errors and 5xx + errors are already retried by botocore (this default is 5). This + does not take into account the number of exceptions retried by + botocore. + + :param max_io_queue: The maximum amount of read parts that can be + queued in memory to be written for a download. The size of each + of these read parts is at most the size of ``io_chunksize``. + + :param io_chunksize: The max size of each chunk in the io queue. + Currently, this is size used when ``read`` is called on the + downloaded stream as well. + + :param use_threads: If True, threads will be used when performing + S3 transfers. If False, no threads will be used in + performing transfers; all logic will be run in the main thread. + + :param max_bandwidth: The maximum bandwidth that will be consumed + in uploading and downloading file content. The value is an integer + in terms of bytes per second. + + :param preferred_transfer_client: String specifying preferred transfer + client for transfer operations. + + Current supported settings are: + * auto (default) - Use the CRTTransferManager when calls + are made with supported environment and settings. + * classic - Only use the origin S3TransferManager with + requests. Disables possible CRT upgrade on requests. + """ + super().__init__( + multipart_threshold=multipart_threshold, + max_request_concurrency=max_concurrency, + multipart_chunksize=multipart_chunksize, + num_download_attempts=num_download_attempts, + max_io_queue_size=max_io_queue, + io_chunksize=io_chunksize, + max_bandwidth=max_bandwidth, + ) + # Some of the argument names are not the same as the inherited + # S3TransferConfig so we add aliases so you can still access the + # old version of the names. + for alias in self.ALIAS: + setattr(self, alias, getattr(self, self.ALIAS[alias])) + self.use_threads = use_threads + self.preferred_transfer_client = preferred_transfer_client + + def __setattr__(self, name, value): + # If the alias name is used, make sure we set the name that it points + # to as that is what actually is used in governing the TransferManager. + if name in self.ALIAS: + super().__setattr__(self.ALIAS[name], value) + # Always set the value of the actual name provided. + super().__setattr__(name, value) + + +class S3Transfer: + ALLOWED_DOWNLOAD_ARGS = TransferManager.ALLOWED_DOWNLOAD_ARGS + ALLOWED_UPLOAD_ARGS = TransferManager.ALLOWED_UPLOAD_ARGS + + def __init__(self, client=None, config=None, osutil=None, manager=None): + if not client and not manager: + raise ValueError( + 'Either a boto3.Client or s3transfer.manager.TransferManager ' + 'must be provided' + ) + if manager and any([client, config, osutil]): + raise ValueError( + 'Manager cannot be provided with client, config, ' + 'nor osutil. These parameters are mutually exclusive.' + ) + if config is None: + config = TransferConfig() + if osutil is None: + osutil = OSUtils() + if manager: + self._manager = manager + else: + self._manager = create_transfer_manager(client, config, osutil) + + def upload_file( + self, filename, bucket, key, callback=None, extra_args=None + ): + """Upload a file to an S3 object. + + Variants have also been injected into S3 client, Bucket and Object. + You don't have to use S3Transfer.upload_file() directly. + + .. seealso:: + :py:meth:`S3.Client.upload_file` + :py:meth:`S3.Client.upload_fileobj` + """ + if isinstance(filename, PathLike): + filename = fspath(filename) + if not isinstance(filename, str): + raise ValueError('Filename must be a string or a path-like object') + + subscribers = self._get_subscribers(callback) + future = self._manager.upload( + filename, bucket, key, extra_args, subscribers + ) + try: + future.result() + # If a client error was raised, add the backwards compatibility layer + # that raises a S3UploadFailedError. These specific errors were only + # ever thrown for upload_parts but now can be thrown for any related + # client error. + except ClientError as e: + raise S3UploadFailedError( + "Failed to upload {} to {}: {}".format( + filename, '/'.join([bucket, key]), e + ) + ) + + def download_file( + self, bucket, key, filename, extra_args=None, callback=None + ): + """Download an S3 object to a file. + + Variants have also been injected into S3 client, Bucket and Object. + You don't have to use S3Transfer.download_file() directly. + + .. seealso:: + :py:meth:`S3.Client.download_file` + :py:meth:`S3.Client.download_fileobj` + """ + if isinstance(filename, PathLike): + filename = fspath(filename) + if not isinstance(filename, str): + raise ValueError('Filename must be a string or a path-like object') + + subscribers = self._get_subscribers(callback) + future = self._manager.download( + bucket, key, filename, extra_args, subscribers + ) + try: + future.result() + # This is for backwards compatibility where when retries are + # exceeded we need to throw the same error from boto3 instead of + # s3transfer's built in RetriesExceededError as current users are + # catching the boto3 one instead of the s3transfer exception to do + # their own retries. + except S3TransferRetriesExceededError as e: + raise RetriesExceededError(e.last_exception) + + def _get_subscribers(self, callback): + if not callback: + return None + return [ProgressCallbackInvoker(callback)] + + def __enter__(self): + return self + + def __exit__(self, *args): + self._manager.__exit__(*args) + + +class ProgressCallbackInvoker(BaseSubscriber): + """A back-compat wrapper to invoke a provided callback via a subscriber + + :param callback: A callable that takes a single positional argument for + how many bytes were transferred. + """ + + def __init__(self, callback): + self._callback = callback + + def on_progress(self, bytes_transferred, **kwargs): + self._callback(bytes_transferred) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/session.py b/dbtzin/lib/python3.8/site-packages/boto3/session.py new file mode 100644 index 00000000..37890ada --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/session.py @@ -0,0 +1,531 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import copy +import os + +import botocore.session +from botocore.client import Config +from botocore.exceptions import DataNotFoundError, UnknownServiceError + +import boto3 +import boto3.utils +from boto3.exceptions import ResourceNotExistsError, UnknownAPIVersionError + +from .resources.factory import ResourceFactory + + +class Session: + """ + A session stores configuration state and allows you to create service + clients and resources. + + :type aws_access_key_id: string + :param aws_access_key_id: AWS access key ID + :type aws_secret_access_key: string + :param aws_secret_access_key: AWS secret access key + :type aws_session_token: string + :param aws_session_token: AWS temporary session token + :type region_name: string + :param region_name: Default region when creating new connections + :type botocore_session: botocore.session.Session + :param botocore_session: Use this Botocore session instead of creating + a new default one. + :type profile_name: string + :param profile_name: The name of a profile to use. If not given, then + the default profile is used. + """ + + def __init__( + self, + aws_access_key_id=None, + aws_secret_access_key=None, + aws_session_token=None, + region_name=None, + botocore_session=None, + profile_name=None, + ): + if botocore_session is not None: + self._session = botocore_session + else: + # Create a new default session + self._session = botocore.session.get_session() + + # Setup custom user-agent string if it isn't already customized + if self._session.user_agent_name == 'Botocore': + botocore_info = 'Botocore/{}'.format( + self._session.user_agent_version + ) + if self._session.user_agent_extra: + self._session.user_agent_extra += ' ' + botocore_info + else: + self._session.user_agent_extra = botocore_info + self._session.user_agent_name = 'Boto3' + self._session.user_agent_version = boto3.__version__ + + if profile_name is not None: + self._session.set_config_variable('profile', profile_name) + + if aws_access_key_id or aws_secret_access_key or aws_session_token: + self._session.set_credentials( + aws_access_key_id, aws_secret_access_key, aws_session_token + ) + + if region_name is not None: + self._session.set_config_variable('region', region_name) + + self.resource_factory = ResourceFactory( + self._session.get_component('event_emitter') + ) + self._setup_loader() + self._register_default_handlers() + + def __repr__(self): + return '{}(region_name={})'.format( + self.__class__.__name__, + repr(self._session.get_config_variable('region')), + ) + + @property + def profile_name(self): + """ + The **read-only** profile name. + """ + return self._session.profile or 'default' + + @property + def region_name(self): + """ + The **read-only** region name. + """ + return self._session.get_config_variable('region') + + @property + def events(self): + """ + The event emitter for a session + """ + return self._session.get_component('event_emitter') + + @property + def available_profiles(self): + """ + The profiles available to the session credentials + """ + return self._session.available_profiles + + def _setup_loader(self): + """ + Setup loader paths so that we can load resources. + """ + self._loader = self._session.get_component('data_loader') + self._loader.search_paths.append( + os.path.join(os.path.dirname(__file__), 'data') + ) + + def get_available_services(self): + """ + Get a list of available services that can be loaded as low-level + clients via :py:meth:`Session.client`. + + :rtype: list + :return: List of service names + """ + return self._session.get_available_services() + + def get_available_resources(self): + """ + Get a list of available services that can be loaded as resource + clients via :py:meth:`Session.resource`. + + :rtype: list + :return: List of service names + """ + return self._loader.list_available_services(type_name='resources-1') + + def get_available_partitions(self): + """Lists the available partitions + + :rtype: list + :return: Returns a list of partition names (e.g., ["aws", "aws-cn"]) + """ + return self._session.get_available_partitions() + + def get_available_regions( + self, service_name, partition_name='aws', allow_non_regional=False + ): + """Lists the region and endpoint names of a particular partition. + + The list of regions returned by this method are regions that are + explicitly known by the client to exist and is not comprehensive. A + region not returned in this list may still be available for the + provided service. + + :type service_name: string + :param service_name: Name of a service to list endpoint for (e.g., s3). + + :type partition_name: string + :param partition_name: Name of the partition to limit endpoints to. + (e.g., aws for the public AWS endpoints, aws-cn for AWS China + endpoints, aws-us-gov for AWS GovCloud (US) Endpoints, etc.) + + :type allow_non_regional: bool + :param allow_non_regional: Set to True to include endpoints that are + not regional endpoints (e.g., s3-external-1, + fips-us-gov-west-1, etc). + + :return: Returns a list of endpoint names (e.g., ["us-east-1"]). + """ + return self._session.get_available_regions( + service_name=service_name, + partition_name=partition_name, + allow_non_regional=allow_non_regional, + ) + + def get_credentials(self): + """ + Return the :class:`botocore.credentials.Credentials` object + associated with this session. If the credentials have not + yet been loaded, this will attempt to load them. If they + have already been loaded, this will return the cached + credentials. + """ + return self._session.get_credentials() + + def get_partition_for_region(self, region_name): + """Lists the partition name of a particular region. + + :type region_name: string + :param region_name: Name of the region to list partition for (e.g., + us-east-1). + + :rtype: string + :return: Returns the respective partition name (e.g., aws). + """ + return self._session.get_partition_for_region(region_name) + + def client( + self, + service_name, + region_name=None, + api_version=None, + use_ssl=True, + verify=None, + endpoint_url=None, + aws_access_key_id=None, + aws_secret_access_key=None, + aws_session_token=None, + config=None, + ): + """ + Create a low-level service client by name. + + :type service_name: string + :param service_name: The name of a service, e.g. 's3' or 'ec2'. You + can get a list of available services via + :py:meth:`get_available_services`. + + :type region_name: string + :param region_name: The name of the region associated with the client. + A client is associated with a single region. + + :type api_version: string + :param api_version: The API version to use. By default, botocore will + use the latest API version when creating a client. You only need + to specify this parameter if you want to use a previous API version + of the client. + + :type use_ssl: boolean + :param use_ssl: Whether or not to use SSL. By default, SSL is used. + Note that not all services support non-ssl connections. + + :type verify: boolean/string + :param verify: Whether or not to verify SSL certificates. By default + SSL certificates are verified. You can provide the following + values: + + * False - do not validate SSL certificates. SSL will still be + used (unless use_ssl is False), but SSL certificates + will not be verified. + * path/to/cert/bundle.pem - A filename of the CA cert bundle to + uses. You can specify this argument if you want to use a + different CA cert bundle than the one used by botocore. + + :type endpoint_url: string + :param endpoint_url: The complete URL to use for the constructed + client. Normally, botocore will automatically construct the + appropriate URL to use when communicating with a service. You + can specify a complete URL (including the "http/https" scheme) + to override this behavior. If this value is provided, + then ``use_ssl`` is ignored. + + :type aws_access_key_id: string + :param aws_access_key_id: The access key to use when creating + the client. This is entirely optional, and if not provided, + the credentials configured for the session will automatically + be used. You only need to provide this argument if you want + to override the credentials used for this specific client. + + :type aws_secret_access_key: string + :param aws_secret_access_key: The secret key to use when creating + the client. Same semantics as aws_access_key_id above. + + :type aws_session_token: string + :param aws_session_token: The session token to use when creating + the client. Same semantics as aws_access_key_id above. + + :type config: botocore.client.Config + :param config: Advanced client configuration options. If region_name + is specified in the client config, its value will take precedence + over environment variables and configuration values, but not over + a region_name value passed explicitly to the method. See + `botocore config documentation + `_ + for more details. + + :return: Service client instance + + """ + return self._session.create_client( + service_name, + region_name=region_name, + api_version=api_version, + use_ssl=use_ssl, + verify=verify, + endpoint_url=endpoint_url, + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + aws_session_token=aws_session_token, + config=config, + ) + + def resource( + self, + service_name, + region_name=None, + api_version=None, + use_ssl=True, + verify=None, + endpoint_url=None, + aws_access_key_id=None, + aws_secret_access_key=None, + aws_session_token=None, + config=None, + ): + """ + Create a resource service client by name. + + :type service_name: string + :param service_name: The name of a service, e.g. 's3' or 'ec2'. You + can get a list of available services via + :py:meth:`get_available_resources`. + + :type region_name: string + :param region_name: The name of the region associated with the client. + A client is associated with a single region. + + :type api_version: string + :param api_version: The API version to use. By default, botocore will + use the latest API version when creating a client. You only need + to specify this parameter if you want to use a previous API version + of the client. + + :type use_ssl: boolean + :param use_ssl: Whether or not to use SSL. By default, SSL is used. + Note that not all services support non-ssl connections. + + :type verify: boolean/string + :param verify: Whether or not to verify SSL certificates. By default + SSL certificates are verified. You can provide the following + values: + + * False - do not validate SSL certificates. SSL will still be + used (unless use_ssl is False), but SSL certificates + will not be verified. + * path/to/cert/bundle.pem - A filename of the CA cert bundle to + uses. You can specify this argument if you want to use a + different CA cert bundle than the one used by botocore. + + :type endpoint_url: string + :param endpoint_url: The complete URL to use for the constructed + client. Normally, botocore will automatically construct the + appropriate URL to use when communicating with a service. You + can specify a complete URL (including the "http/https" scheme) + to override this behavior. If this value is provided, + then ``use_ssl`` is ignored. + + :type aws_access_key_id: string + :param aws_access_key_id: The access key to use when creating + the client. This is entirely optional, and if not provided, + the credentials configured for the session will automatically + be used. You only need to provide this argument if you want + to override the credentials used for this specific client. + + :type aws_secret_access_key: string + :param aws_secret_access_key: The secret key to use when creating + the client. Same semantics as aws_access_key_id above. + + :type aws_session_token: string + :param aws_session_token: The session token to use when creating + the client. Same semantics as aws_access_key_id above. + + :type config: botocore.client.Config + :param config: Advanced client configuration options. If region_name + is specified in the client config, its value will take precedence + over environment variables and configuration values, but not over + a region_name value passed explicitly to the method. If + user_agent_extra is specified in the client config, it overrides + the default user_agent_extra provided by the resource API. See + `botocore config documentation + `_ + for more details. + + :return: Subclass of :py:class:`~boto3.resources.base.ServiceResource` + """ + try: + resource_model = self._loader.load_service_model( + service_name, 'resources-1', api_version + ) + except UnknownServiceError: + available = self.get_available_resources() + has_low_level_client = ( + service_name in self.get_available_services() + ) + raise ResourceNotExistsError( + service_name, available, has_low_level_client + ) + except DataNotFoundError: + # This is because we've provided an invalid API version. + available_api_versions = self._loader.list_api_versions( + service_name, 'resources-1' + ) + raise UnknownAPIVersionError( + service_name, api_version, ', '.join(available_api_versions) + ) + + if api_version is None: + # Even though botocore's load_service_model() can handle + # using the latest api_version if not provided, we need + # to track this api_version in boto3 in order to ensure + # we're pairing a resource model with a client model + # of the same API version. It's possible for the latest + # API version of a resource model in boto3 to not be + # the same API version as a service model in botocore. + # So we need to look up the api_version if one is not + # provided to ensure we load the same API version of the + # client. + # + # Note: This is relying on the fact that + # loader.load_service_model(..., api_version=None) + # and loader.determine_latest_version(..., 'resources-1') + # both load the same api version of the file. + api_version = self._loader.determine_latest_version( + service_name, 'resources-1' + ) + + # Creating a new resource instance requires the low-level client + # and service model, the resource version and resource JSON data. + # We pass these to the factory and get back a class, which is + # instantiated on top of the low-level client. + if config is not None: + if config.user_agent_extra is None: + config = copy.deepcopy(config) + config.user_agent_extra = 'Resource' + else: + config = Config(user_agent_extra='Resource') + client = self.client( + service_name, + region_name=region_name, + api_version=api_version, + use_ssl=use_ssl, + verify=verify, + endpoint_url=endpoint_url, + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + aws_session_token=aws_session_token, + config=config, + ) + service_model = client.meta.service_model + + # Create a ServiceContext object to serve as a reference to + # important read-only information about the general service. + service_context = boto3.utils.ServiceContext( + service_name=service_name, + service_model=service_model, + resource_json_definitions=resource_model['resources'], + service_waiter_model=boto3.utils.LazyLoadedWaiterModel( + self._session, service_name, api_version + ), + ) + + # Create the service resource class. + cls = self.resource_factory.load_from_definition( + resource_name=service_name, + single_resource_json_definition=resource_model['service'], + service_context=service_context, + ) + + return cls(client=client) + + def _register_default_handlers(self): + # S3 customizations + self._session.register( + 'creating-client-class.s3', + boto3.utils.lazy_call( + 'boto3.s3.inject.inject_s3_transfer_methods' + ), + ) + self._session.register( + 'creating-resource-class.s3.Bucket', + boto3.utils.lazy_call('boto3.s3.inject.inject_bucket_methods'), + ) + self._session.register( + 'creating-resource-class.s3.Object', + boto3.utils.lazy_call('boto3.s3.inject.inject_object_methods'), + ) + self._session.register( + 'creating-resource-class.s3.ObjectSummary', + boto3.utils.lazy_call( + 'boto3.s3.inject.inject_object_summary_methods' + ), + ) + + # DynamoDb customizations + self._session.register( + 'creating-resource-class.dynamodb', + boto3.utils.lazy_call( + 'boto3.dynamodb.transform.register_high_level_interface' + ), + unique_id='high-level-dynamodb', + ) + self._session.register( + 'creating-resource-class.dynamodb.Table', + boto3.utils.lazy_call( + 'boto3.dynamodb.table.register_table_methods' + ), + unique_id='high-level-dynamodb-table', + ) + + # EC2 Customizations + self._session.register( + 'creating-resource-class.ec2.ServiceResource', + boto3.utils.lazy_call('boto3.ec2.createtags.inject_create_tags'), + ) + + self._session.register( + 'creating-resource-class.ec2.Instance', + boto3.utils.lazy_call( + 'boto3.ec2.deletetags.inject_delete_tags', + event_emitter=self.events, + ), + ) diff --git a/dbtzin/lib/python3.8/site-packages/boto3/utils.py b/dbtzin/lib/python3.8/site-packages/boto3/utils.py new file mode 100644 index 00000000..27561adc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/boto3/utils.py @@ -0,0 +1,100 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# https://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import sys +from collections import namedtuple + +_ServiceContext = namedtuple( + 'ServiceContext', + [ + 'service_name', + 'service_model', + 'service_waiter_model', + 'resource_json_definitions', + ], +) + + +class ServiceContext(_ServiceContext): + """Provides important service-wide, read-only information about a service + + :type service_name: str + :param service_name: The name of the service + + :type service_model: :py:class:`botocore.model.ServiceModel` + :param service_model: The model of the service. + + :type service_waiter_model: :py:class:`botocore.waiter.WaiterModel` or + a waiter model-like object such as + :py:class:`boto3.utils.LazyLoadedWaiterModel` + :param service_waiter_model: The waiter model of the service. + + :type resource_json_definitions: dict + :param resource_json_definitions: The loaded json models of all resource + shapes for a service. It is equivalient of loading a + ``resource-1.json`` and retrieving the value at the key "resources". + """ + + pass + + +def import_module(name): + """Import module given a name. + + Does not support relative imports. + + """ + __import__(name) + return sys.modules[name] + + +def lazy_call(full_name, **kwargs): + parent_kwargs = kwargs + + def _handler(**kwargs): + module, function_name = full_name.rsplit('.', 1) + module = import_module(module) + kwargs.update(parent_kwargs) + return getattr(module, function_name)(**kwargs) + + return _handler + + +def inject_attribute(class_attributes, name, value): + if name in class_attributes: + raise RuntimeError( + f'Cannot inject class attribute "{name}", attribute ' + f'already exists in class dict.' + ) + else: + class_attributes[name] = value + + +class LazyLoadedWaiterModel: + """A lazily loaded waiter model + + This does not load the service waiter model until an attempt is made + to retrieve the waiter model for a specific waiter. This is helpful + in docstring generation where we do not need to actually need to grab + the waiter-2.json until it is accessed through a ``get_waiter`` call + when the docstring is generated/accessed. + """ + + def __init__(self, bc_session, service_name, api_version): + self._session = bc_session + self._service_name = service_name + self._api_version = api_version + + def get_waiter(self, waiter_name): + return self._session.get_waiter_model( + self._service_name, self._api_version + ).get_waiter(waiter_name) diff --git a/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/INSTALLER b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/LICENSE.txt b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/LICENSE.txt new file mode 100644 index 00000000..f433b1a5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/LICENSE.txt @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/METADATA b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/METADATA new file mode 100644 index 00000000..c42682b6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/METADATA @@ -0,0 +1,149 @@ +Metadata-Version: 2.1 +Name: botocore +Version: 1.34.19 +Summary: Low-level, data-driven core of boto 3. +Home-page: https://github.com/boto/botocore +Author: Amazon Web Services +License: Apache License 2.0 +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: System Administrators +Classifier: Natural Language :: English +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Requires-Python: >= 3.8 +License-File: LICENSE.txt +License-File: NOTICE +Requires-Dist: jmespath (<2.0.0,>=0.7.1) +Requires-Dist: python-dateutil (<3.0.0,>=2.1) +Requires-Dist: urllib3 (<1.27,>=1.25.4) ; python_version < "3.10" +Requires-Dist: urllib3 (<2.1,>=1.25.4) ; python_version >= "3.10" +Provides-Extra: crt +Requires-Dist: awscrt (==0.19.19) ; extra == 'crt' + +botocore +======== + +|Version| |Python| |License| + +A low-level interface to a growing number of Amazon Web Services. The +botocore package is the foundation for the +`AWS CLI `__ as well as +`boto3 `__. + +Botocore is maintained and published by `Amazon Web Services`_. + +Notices +------- + +On 2023-12-13, support was dropped for Python 3.7. This follows the +Python Software Foundation `end of support `__ +for the runtime which occurred on 2023-06-27. +For more information, see this `blog post `__. + +.. _`Amazon Web Services`: https://aws.amazon.com/what-is-aws/ +.. |Python| image:: https://img.shields.io/pypi/pyversions/botocore.svg?style=flat + :target: https://pypi.python.org/pypi/botocore/ + :alt: Python Versions +.. |Version| image:: http://img.shields.io/pypi/v/botocore.svg?style=flat + :target: https://pypi.python.org/pypi/botocore/ + :alt: Package Version +.. |License| image:: http://img.shields.io/pypi/l/botocore.svg?style=flat + :target: https://github.com/boto/botocore/blob/develop/LICENSE.txt + :alt: License + +Getting Started +--------------- +Assuming that you have Python and ``virtualenv`` installed, set up your environment and install the required dependencies like this or you can install the library using ``pip``: + +.. code-block:: sh + + $ git clone https://github.com/boto/botocore.git + $ cd botocore + $ virtualenv venv + ... + $ . venv/bin/activate + $ pip install -r requirements.txt + $ pip install -e . + +.. code-block:: sh + + $ pip install botocore + +Using Botocore +~~~~~~~~~~~~~~ +After installing botocore + +Next, set up credentials (in e.g. ``~/.aws/credentials``): + +.. code-block:: ini + + [default] + aws_access_key_id = YOUR_KEY + aws_secret_access_key = YOUR_SECRET + +Then, set up a default region (in e.g. ``~/.aws/config``): + +.. code-block:: ini + + [default] + region=us-east-1 + +Other credentials configuration method can be found `here `__ + +Then, from a Python interpreter: + +.. code-block:: python + + >>> import botocore.session + >>> session = botocore.session.get_session() + >>> client = session.create_client('ec2') + >>> print(client.describe_instances()) + + +Getting Help +------------ + +We use GitHub issues for tracking bugs and feature requests and have limited +bandwidth to address them. Please use these community resources for getting +help. Please note many of the same resources available for ``boto3`` are +applicable for ``botocore``: + +* Ask a question on `Stack Overflow `__ and tag it with `boto3 `__ +* Open a support ticket with `AWS Support `__ +* If it turns out that you may have found a bug, please `open an issue `__ + + +Contributing +------------ + +We value feedback and contributions from our community. Whether it's a bug report, new feature, correction, or additional documentation, we welcome your issues and pull requests. Please read through this `CONTRIBUTING `__ document before submitting any issues or pull requests to ensure we have all the necessary information to effectively respond to your contribution. + + +Maintenance and Support for SDK Major Versions +---------------------------------------------- + +Botocore was made generally available on 06/22/2015 and is currently in the full support phase of the availability life cycle. + +For information about maintenance and support for SDK major versions and their underlying dependencies, see the following in the AWS SDKs and Tools Reference Guide: + +* `AWS SDKs and Tools Maintenance Policy `__ +* `AWS SDKs and Tools Version Support Matrix `__ + + +More Resources +-------------- + +* `NOTICE `__ +* `Changelog `__ +* `License `__ + + diff --git a/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/NOTICE b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/NOTICE new file mode 100644 index 00000000..edcc3cd7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/NOTICE @@ -0,0 +1,60 @@ +Botocore +Copyright 2012-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + +---- + +Botocore includes vendorized parts of the requests python library for backwards compatibility. + +Requests License +================ + +Copyright 2013 Kenneth Reitz + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +Botocore includes vendorized parts of the urllib3 library for backwards compatibility. + +Urllib3 License +=============== + +This is the MIT license: http://www.opensource.org/licenses/mit-license.php + +Copyright 2008-2011 Andrey Petrov and contributors (see CONTRIBUTORS.txt), +Modifications copyright 2012 Kenneth Reitz. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +Bundle of CA Root Certificates +============================== + +***** BEGIN LICENSE BLOCK ***** +This Source Code Form is subject to the terms of the +Mozilla Public License, v. 2.0. If a copy of the MPL +was not distributed with this file, You can obtain +one at http://mozilla.org/MPL/2.0/. + +***** END LICENSE BLOCK ***** diff --git a/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/RECORD b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/RECORD new file mode 100644 index 00000000..f2a05570 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/RECORD @@ -0,0 +1,1806 @@ +botocore-1.34.19.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +botocore-1.34.19.dist-info/LICENSE.txt,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174 +botocore-1.34.19.dist-info/METADATA,sha256=iZumozNiKrHykb1wauxocuUaApQrrAQm8AfxHuPvCyc,5649 +botocore-1.34.19.dist-info/NOTICE,sha256=HRxabz1oyxH0-tGvqGp0UNAobxXBdu8OoEjyVbRtlbA,2467 +botocore-1.34.19.dist-info/RECORD,, +botocore-1.34.19.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92 +botocore-1.34.19.dist-info/top_level.txt,sha256=IdlNr9dnwi3lQt66dKnShE5HBUhIqBFqJmVhm11aijk,9 +botocore/__init__.py,sha256=B_z7kF5jWspc7h75LLNuG_6PQTKHc-3L66O4Xbvv8r0,4914 +botocore/__pycache__/__init__.cpython-38.pyc,, +botocore/__pycache__/args.cpython-38.pyc,, +botocore/__pycache__/auth.cpython-38.pyc,, +botocore/__pycache__/awsrequest.cpython-38.pyc,, +botocore/__pycache__/client.cpython-38.pyc,, +botocore/__pycache__/compat.cpython-38.pyc,, +botocore/__pycache__/compress.cpython-38.pyc,, +botocore/__pycache__/config.cpython-38.pyc,, +botocore/__pycache__/configloader.cpython-38.pyc,, +botocore/__pycache__/configprovider.cpython-38.pyc,, +botocore/__pycache__/credentials.cpython-38.pyc,, +botocore/__pycache__/discovery.cpython-38.pyc,, +botocore/__pycache__/endpoint.cpython-38.pyc,, +botocore/__pycache__/endpoint_provider.cpython-38.pyc,, +botocore/__pycache__/errorfactory.cpython-38.pyc,, +botocore/__pycache__/eventstream.cpython-38.pyc,, +botocore/__pycache__/exceptions.cpython-38.pyc,, +botocore/__pycache__/handlers.cpython-38.pyc,, +botocore/__pycache__/history.cpython-38.pyc,, +botocore/__pycache__/hooks.cpython-38.pyc,, +botocore/__pycache__/httpchecksum.cpython-38.pyc,, +botocore/__pycache__/httpsession.cpython-38.pyc,, +botocore/__pycache__/loaders.cpython-38.pyc,, +botocore/__pycache__/model.cpython-38.pyc,, +botocore/__pycache__/monitoring.cpython-38.pyc,, +botocore/__pycache__/paginate.cpython-38.pyc,, +botocore/__pycache__/parsers.cpython-38.pyc,, +botocore/__pycache__/regions.cpython-38.pyc,, +botocore/__pycache__/response.cpython-38.pyc,, +botocore/__pycache__/retryhandler.cpython-38.pyc,, +botocore/__pycache__/serialize.cpython-38.pyc,, +botocore/__pycache__/session.cpython-38.pyc,, +botocore/__pycache__/signers.cpython-38.pyc,, +botocore/__pycache__/stub.cpython-38.pyc,, +botocore/__pycache__/tokens.cpython-38.pyc,, +botocore/__pycache__/translate.cpython-38.pyc,, +botocore/__pycache__/useragent.cpython-38.pyc,, +botocore/__pycache__/utils.cpython-38.pyc,, +botocore/__pycache__/validate.cpython-38.pyc,, +botocore/__pycache__/waiter.cpython-38.pyc,, +botocore/args.py,sha256=V5wWT9QWhQ4sVB0GS4tcuCqMS5_p8LPPHgakasNU9cw,30640 +botocore/auth.py,sha256=mGRFDxCsxboiaCnNO4tCtbS2aQaEWs2WPU6V7vfMRyI,43803 +botocore/awsrequest.py,sha256=IQeT7ouMQrkdrVmO3mH4wR1yxPlE53-gZrgbctcAKIc,23156 +botocore/cacert.pem,sha256=nW1QIfzIoiMvzo60s_mC3EhCUtVVSTrFwqPL8ssZQ4o,266617 +botocore/client.py,sha256=J67CK76oyqdEuKvUOADVHFOLLIP_CRJHOnVfbmn8OkU,51241 +botocore/compat.py,sha256=iAxOnj214khLn4KvvSTDSUnQNVRYdAkDTWQeWRRJEic,11091 +botocore/compress.py,sha256=F0eVNLLHA9aIKWAB_QnMb29hg50BCCpAjCZwhFohVi4,4430 +botocore/config.py,sha256=LHyBLgZnxTx_2l3Bk0NZSX2ZWfYsuhh7rO9PZhnWHQQ,15601 +botocore/configloader.py,sha256=NTejI7b9UGUXBv2uKiPaXH19Lgl30LY5ujZkXRcFpHs,10039 +botocore/configprovider.py,sha256=BjKR7IH_9v6MjflbmOWrGhdQrmHgkLqfdfwH4sfsz9s,37230 +botocore/credentials.py,sha256=3wPSiDHvuz47rR6A01HpNsriaDLurI2Yyh5W-Vpv708,84788 +botocore/crt/__init__.py,sha256=kCXQL93gdg5yBQJOTp7YFLl9wYNy4tV_5TAyJq0asD0,1006 +botocore/crt/__pycache__/__init__.cpython-38.pyc,, +botocore/crt/__pycache__/auth.cpython-38.pyc,, +botocore/crt/auth.py,sha256=EBIImARWx3g4euY3r9OwZWtt3ZOEH5GTcgDZYXoTJGY,25318 +botocore/data/_retry.json,sha256=9YkW5V-FMGzj8zwHX1Payit1aRaKjbaqKtKqmePpfXU,7025 +botocore/data/accessanalyzer/2019-11-01/endpoint-rule-set-1.json.gz,sha256=RwV028Oko7fJ2FRjbVy8kgMCueSQr0mCbWCDd01qH0E,1241 +botocore/data/accessanalyzer/2019-11-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/accessanalyzer/2019-11-01/paginators-1.json,sha256=fFq9lAXharI6RF5K9muSY4lbyxVaGKd6D6kQK8Xfrrs,1726 +botocore/data/accessanalyzer/2019-11-01/paginators-1.sdk-extras.json,sha256=aVEnuLa7i2hyEYi5h6p1ElpzEdviiOsYymTilruj3kE,370 +botocore/data/accessanalyzer/2019-11-01/service-2.json.gz,sha256=ecoHL7KTQcfKV9PSy0mq2a_sGnfKXTtnkAEqdgAcIIc,21571 +botocore/data/account/2021-02-01/endpoint-rule-set-1.json.gz,sha256=XuT-6R6dHPEbWCmpdZNUY6ri-nUeZ3f-KgK2ydhOJ0Y,1371 +botocore/data/account/2021-02-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/account/2021-02-01/paginators-1.json,sha256=TCku1Qs1la1Ggv8u8dKSYP2E5i5sWpmhRmL4zSR87RQ,185 +botocore/data/account/2021-02-01/service-2.json.gz,sha256=P_5YcWCRieeBWtTqZJzQMP0saJtd7G1LrBYA48xDxfU,4729 +botocore/data/acm-pca/2017-08-22/endpoint-rule-set-1.json.gz,sha256=pEoFTcXerCLd8RF8QSAlfNuRVOdKADtXK3Q2NDGZ7K0,1238 +botocore/data/acm-pca/2017-08-22/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/acm-pca/2017-08-22/paginators-1.json,sha256=q2wFRetchlBt43qtOCTJ_Qw49u-LnRgmPdEn1j_j50A,537 +botocore/data/acm-pca/2017-08-22/service-2.json.gz,sha256=est6eJjXAdglm7qScYks8xgjGQM0xg76cJNYy_K5Xdk,23342 +botocore/data/acm-pca/2017-08-22/waiters-2.json,sha256=n3xTUowKBA8Z3mziFgM-fMJ4noI1fWr09aEAtumPVbk,1928 +botocore/data/acm/2015-12-08/endpoint-rule-set-1.json.gz,sha256=zGO0lRTsDTzPTuMymmf8DWNPHNC6HXLVBJH5Resv0og,1235 +botocore/data/acm/2015-12-08/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/acm/2015-12-08/paginators-1.json,sha256=oB2exj3JKzcsLCvfBeMqYawlxz6YghtvUQlwOfdTY4g,203 +botocore/data/acm/2015-12-08/service-2.json.gz,sha256=HINLQUOwZyx9PneGcM_GtuF7qdy2DZTlrlEX67O5ueA,13951 +botocore/data/acm/2015-12-08/waiters-2.json,sha256=S3uw0vWaMVDBNCST96n0BIyzhiBFuX0Oqp9C-SCxYeE,874 +botocore/data/alexaforbusiness/2017-11-09/endpoint-rule-set-1.json.gz,sha256=mp1o6Ak7HiBVB0gw4USgqDU8smFAxUKzfL3YTl5u5t4,1146 +botocore/data/alexaforbusiness/2017-11-09/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/alexaforbusiness/2017-11-09/paginators-1.json,sha256=0u4lJeVThQLN2lU7dhkhF3_tUwPkkGov6B1nQ1U6Z-I,2256 +botocore/data/alexaforbusiness/2017-11-09/service-2.json.gz,sha256=HO5zil7Med5mhCeiP0EqHzq2U178aRXmgsbI_ECk50s,25295 +botocore/data/amp/2020-08-01/endpoint-rule-set-1.json.gz,sha256=l8lNIwjCXvvrVINJAqBbInSWLEWlyPE-KcHuFBrnNp8,1146 +botocore/data/amp/2020-08-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/amp/2020-08-01/paginators-1.json,sha256=4pEkF8Q0jIMIgsFHCAtQ6edC4NmKKwFWsJWU54kN4Fg,539 +botocore/data/amp/2020-08-01/service-2.json.gz,sha256=zQRcpMr7NUgen1OZ3-YsZ9nRv_tK6qZAiapuM2wDbB4,7304 +botocore/data/amp/2020-08-01/waiters-2.json,sha256=9dx5obvXJDOgd3ZoJLbi6ZykWm7Ae698VQeNfR8TO5o,2177 +botocore/data/amplify/2017-07-25/endpoint-rule-set-1.json.gz,sha256=qi5wIgh76nO5DSGFPCb0a1-Jpx0XTx4yKaV6-ZeHCLU,1150 +botocore/data/amplify/2017-07-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/amplify/2017-07-25/paginators-1.json,sha256=XJ4xwNrUExhAxy-8K8JJAPnBhdRZO7FB6NGTrgr_qZQ,685 +botocore/data/amplify/2017-07-25/service-2.json.gz,sha256=_Rwm_5MPbLnzAbCVQewS2rBHhbMkEfoWPrgaZC4ujvs,13578 +botocore/data/amplifybackend/2020-08-11/endpoint-rule-set-1.json.gz,sha256=YiL3n87rsEDCl9pIEasCGomCW93JNv8LSMd-TGr1Mig,1152 +botocore/data/amplifybackend/2020-08-11/paginators-1.json,sha256=0JG13-2KlCwca-Pwz7d5Mp3WIttu4BpwDusqxMXF9XY,186 +botocore/data/amplifybackend/2020-08-11/service-2.json.gz,sha256=wPeK1igcdfDam_d-T_nAkkfnFnlJls8zxsBLfkwyp5I,10990 +botocore/data/amplifyuibuilder/2021-08-11/endpoint-rule-set-1.json.gz,sha256=D-d1Oii7umvisZe7y7C-m59bBMnt9HhRDF-yxbu-7sk,1156 +botocore/data/amplifyuibuilder/2021-08-11/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/amplifyuibuilder/2021-08-11/paginators-1.json,sha256=idtki67MCJcfs_brVKsvknxJbZtDfS-IK3cakM1IFCI,1063 +botocore/data/amplifyuibuilder/2021-08-11/service-2.json.gz,sha256=xIW6Z11NFy4F-oKh3ayXATcQKe8O_9q1u93IBK4Iks4,15289 +botocore/data/amplifyuibuilder/2021-08-11/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/apigateway/2015-07-09/endpoint-rule-set-1.json.gz,sha256=cOVuStMbS23j1NBAaM8G-btLSA0oWCNZtUC_wBQ5wSw,1149 +botocore/data/apigateway/2015-07-09/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/apigateway/2015-07-09/paginators-1.json,sha256=gwAb1K7CkHdC49pAfwZMgaT18Hm1r5qDK1m_6m-Ki9w,2913 +botocore/data/apigateway/2015-07-09/service-2.json.gz,sha256=sT47PO2H2SVAiZZctFk-apYMg7YbZgFbxmRih7BtHOM,37128 +botocore/data/apigatewaymanagementapi/2018-11-29/endpoint-rule-set-1.json.gz,sha256=ju0ih35z_Z9L2sfldnqwb-_W_nfdG017mFtmvY2v_-w,1150 +botocore/data/apigatewaymanagementapi/2018-11-29/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/apigatewaymanagementapi/2018-11-29/service-2.json.gz,sha256=cJnCjcFEfjUPjByxFfpGc7UBzAysg0N78C6NVb3Gsuc,1422 +botocore/data/apigatewayv2/2018-11-29/endpoint-rule-set-1.json.gz,sha256=cOVuStMbS23j1NBAaM8G-btLSA0oWCNZtUC_wBQ5wSw,1149 +botocore/data/apigatewayv2/2018-11-29/paginators-1.json,sha256=auWh91zAZKEKRTA0qdDSA_eeveKmFAqH20BdEd3wM6M,1626 +botocore/data/apigatewayv2/2018-11-29/service-2.json.gz,sha256=BXRjhHUQrya526OcjG_CudUkeZ5-wQbdY7i1YByfCZw,40465 +botocore/data/appconfig/2019-10-09/endpoint-rule-set-1.json.gz,sha256=vq6pxJ8aBtVsMk3cqz83LboCy4F-eUoXb6mUysd8WaE,1232 +botocore/data/appconfig/2019-10-09/examples-1.json,sha256=lm2meYHY2djHXZ_3lYZa2PxELHhVDtZdMkVw4IWCI8Y,25502 +botocore/data/appconfig/2019-10-09/paginators-1.json,sha256=DlvXrqKcTiVi3Yv2rStPwl5O1kqSQaiyRGD_fQugFEQ,1367 +botocore/data/appconfig/2019-10-09/service-2.json.gz,sha256=fog8_uXa2Y78HGM3peBaHVFymzq254EG1VWS-dsfhbE,16426 +botocore/data/appconfigdata/2021-11-11/endpoint-rule-set-1.json.gz,sha256=vWS7WFeXnFmbdlfFN7ZSxoJmLWDXNx08unJg3BqEJ9w,1150 +botocore/data/appconfigdata/2021-11-11/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/appconfigdata/2021-11-11/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/appconfigdata/2021-11-11/service-2.json.gz,sha256=69pwaeei8tHHH-OguI-vg000AuVP5fFY7yR4ghJMhvs,3114 +botocore/data/appfabric/2023-05-19/endpoint-rule-set-1.json.gz,sha256=AcdgVBPXBIf3TUy1pNqG-c3a8VET0jBh7V-vX4s2BLo,1290 +botocore/data/appfabric/2023-05-19/paginators-1.json,sha256=AceDN9kDs832sLebyXTQMYza-dMZ8m2hsVyzbqxUXnQ,745 +botocore/data/appfabric/2023-05-19/service-2.json.gz,sha256=gmNiHcvQncZbYVtDuO06mJ1YHFTSjW2FV8FPjn9Lddg,8601 +botocore/data/appfabric/2023-05-19/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/appflow/2020-08-23/endpoint-rule-set-1.json.gz,sha256=Q6fgYe6QDFumzODOwK_4hG_iQEs2T1hkgwMAg0A4dzU,1148 +botocore/data/appflow/2020-08-23/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/appflow/2020-08-23/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/appflow/2020-08-23/service-2.json.gz,sha256=sJgQkt9XpPzNs72eCwTNV2C12JH22lt_0J8raMbmJCo,32788 +botocore/data/appintegrations/2020-07-29/endpoint-rule-set-1.json.gz,sha256=NDnYeCdYhDO5J393A83GUIGDMBx1IU2ppOwDgaM5vjU,1154 +botocore/data/appintegrations/2020-07-29/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/appintegrations/2020-07-29/paginators-1.json,sha256=BYTiBgFZxnU-sQgufFZqZnJtClnQxZqlwuhNGC6J1vw,1147 +botocore/data/appintegrations/2020-07-29/service-2.json.gz,sha256=30Gx2s6J1tge0DBG9V_P5EEhcZI9Dtbf8qNZy0UglTo,5682 +botocore/data/application-autoscaling/2016-02-06/endpoint-rule-set-1.json.gz,sha256=y_-Cmr-GfQYS5K-XhqZhbVuaAQ-eofI8DhJXGQUozd0,1245 +botocore/data/application-autoscaling/2016-02-06/examples-1.json,sha256=_IICzVD2rqZHmWHwRCsR313_WXRitdmWhlhDtSzomVE,8473 +botocore/data/application-autoscaling/2016-02-06/paginators-1.json,sha256=Yg5NHu8W50qc_r8JCtkNGMbKd861R4w8wQFdrbV0rR0,751 +botocore/data/application-autoscaling/2016-02-06/service-2.json.gz,sha256=9LFNYrkA8tiJfc40BBIvg3hfyvG-bj09ol1ezqxByMI,19346 +botocore/data/application-insights/2018-11-25/endpoint-rule-set-1.json.gz,sha256=hgsbmqUWc2-6inyFF0HTiqvxVB7UU8VhYvUIOI6P_og,1160 +botocore/data/application-insights/2018-11-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/application-insights/2018-11-25/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/application-insights/2018-11-25/service-2.json.gz,sha256=4h4c2RpEhgoVCVRopUvB49hqcieTSq4pd6c_mGOlvQE,12183 +botocore/data/applicationcostprofiler/2020-09-10/endpoint-rule-set-1.json.gz,sha256=xu9A2gQiCPoSSSwbrgym-WyEt6CClMsBLxovMnWWwDw,1159 +botocore/data/applicationcostprofiler/2020-09-10/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/applicationcostprofiler/2020-09-10/paginators-1.json,sha256=2by8SKjvkqf2tkVd1NxlMiNsOoEUr6V3LekGj4k4yWg,205 +botocore/data/applicationcostprofiler/2020-09-10/service-2.json.gz,sha256=zlLhKd_rJSv2Xs-hf--cPozcHx8nCO3NhAh-RO52JGI,2827 +botocore/data/appmesh/2018-10-01/endpoint-rule-set-1.json.gz,sha256=i9iIlXLklqfbeiqpiUWtSzgEnS1-znXpSdeNfkP96W4,1289 +botocore/data/appmesh/2018-10-01/examples-1.json,sha256=IKnIAQr_hsb-b42MXo7jKoBKd1lTzVS0bsbWMSTIwg8,41 +botocore/data/appmesh/2018-10-01/paginators-1.json,sha256=-TPoHMW78DG37BJz5SNi67CsUIs4PTTccyUhlXtMBm4,665 +botocore/data/appmesh/2018-10-01/service-2.json.gz,sha256=QT6sNfct6Pp99kuvr1hqZMShngUX6VERLlXyDi4aQyo,7902 +botocore/data/appmesh/2019-01-25/endpoint-rule-set-1.json.gz,sha256=zfaSqRsju4Y_laSgLhQc2r2ca3agP0c8VeyiNWxlgfY,1150 +botocore/data/appmesh/2019-01-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/appmesh/2019-01-25/paginators-1.json,sha256=z6PCEVS0COSk5Nf9KXgXsZ3I9gcq9whv7yonh8s1YMM,1334 +botocore/data/appmesh/2019-01-25/service-2.json.gz,sha256=CSxJ58u-Rdae-nwGRFF6elDySe95PUoR604FyytFDs4,23271 +botocore/data/apprunner/2020-05-15/endpoint-rule-set-1.json.gz,sha256=IoOEHP_aNcwcjQ3QZqag0tMxjxmm-sW5OI6IgMa_W1k,1151 +botocore/data/apprunner/2020-05-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/apprunner/2020-05-15/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/apprunner/2020-05-15/service-2.json.gz,sha256=M19fa5sFkMLbKPQMIGDKulN1b1ZlMR6bk-jNYoKNO4s,19780 +botocore/data/appstream/2016-12-01/endpoint-rule-set-1.json.gz,sha256=JQ0KnBd05WQ5vEptSsLmvdJ84QO6ZwF_W6Wkj53eq9o,1244 +botocore/data/appstream/2016-12-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/appstream/2016-12-01/paginators-1.json,sha256=agUpesJpo5f8dC0kH0m0asMYWn4N4MUHae5LK8W0Hwo,1584 +botocore/data/appstream/2016-12-01/service-2.json.gz,sha256=iSbDPFPwZsVkJkz_RO8YByGEeEdxutVFGCuStqGNnxs,29952 +botocore/data/appstream/2016-12-01/waiters-2.json,sha256=XZ1LQBLoJ56YEhaTqi2Bs5XKhax6pr9LRsQVIo7kHck,1245 +botocore/data/appsync/2017-07-25/endpoint-rule-set-1.json.gz,sha256=rxueOMI-oNNHMANU-IsfXc039YRvboAjgb-10rF-VSg,1151 +botocore/data/appsync/2017-07-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/appsync/2017-07-25/paginators-1.json,sha256=Sen5q2rZ1X5KfTsHbBZ85KKzyiH56LDBVjKlhXDwEA4,1179 +botocore/data/appsync/2017-07-25/service-2.json.gz,sha256=dhPSdT3BSVCiVfW6EqIoesK_wiVQa5kxnkI3dFqqX8M,24169 +botocore/data/arc-zonal-shift/2022-10-30/endpoint-rule-set-1.json.gz,sha256=EksCew75l_ab8eCPB_J42zEgW9d5iIDzRgrsbiGxeXk,1306 +botocore/data/arc-zonal-shift/2022-10-30/paginators-1.json,sha256=wx99_DrI6RWKkZuUiP1HQ1xacRiIoUsgPuxVHGpvZGU,515 +botocore/data/arc-zonal-shift/2022-10-30/service-2.json.gz,sha256=5fbSL_0qcHskSXDm23bLTFrFGWZ3lflNLM-o1MXP-Zk,8966 +botocore/data/athena/2017-05-18/endpoint-rule-set-1.json.gz,sha256=Loq2nBzTzJ23c8mYvsc5A8pJR4RbDFtCiilXq7kg0sw,1149 +botocore/data/athena/2017-05-18/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/athena/2017-05-18/paginators-1.json,sha256=lLXYrCWDDFVhjAdFEhKyoc0-zEe2YYUM4nR9vXRBDgE,1330 +botocore/data/athena/2017-05-18/service-2.json.gz,sha256=M54PycPfeAGN9mJsYyA9Bo87-XZ6xMbMmtBL-9H6M4Q,29373 +botocore/data/auditmanager/2017-07-25/endpoint-rule-set-1.json.gz,sha256=6GpwQyjXl8Zn3gytXleje4gP-jRQa1mamZCr-jSnajg,1150 +botocore/data/auditmanager/2017-07-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/auditmanager/2017-07-25/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/auditmanager/2017-07-25/service-2.json.gz,sha256=Feo_EgPsP092QgIpOcJ8zRUgL2SIBfWNS4NfI6S2lio,25981 +botocore/data/autoscaling-plans/2018-01-06/endpoint-rule-set-1.json.gz,sha256=fw0ZxRWu_li0CAV9vczYibTMm-T4uRAtcULXhXlCrLM,1154 +botocore/data/autoscaling-plans/2018-01-06/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/autoscaling-plans/2018-01-06/paginators-1.json,sha256=Au_RY0jJAvQZ-sAmZQk8FXYyrw1rDVD4YILlb6sDxh8,389 +botocore/data/autoscaling-plans/2018-01-06/service-2.json.gz,sha256=fk4Iim9RYOimM__LYo8sHeSX8L3i6nzYWo6KgxTjB3Q,9084 +botocore/data/autoscaling/2011-01-01/endpoint-rule-set-1.json.gz,sha256=L6tgRfSX7A3gZ5f7PBCXQ69cUrCxyhlyjTe-NdjiS9g,1238 +botocore/data/autoscaling/2011-01-01/examples-1.json,sha256=-VLit9j2MnCph5AkDejxys_Iqt3JaUweEkC1B0_37j4,54289 +botocore/data/autoscaling/2011-01-01/paginators-1.json,sha256=hM_o0QSb61rvEQvua3IVpSLBUVCEy2BcwdQv1D_wSXk,2033 +botocore/data/autoscaling/2011-01-01/paginators-1.sdk-extras.json,sha256=FWBD5vKeS-MHcMzdipl2xKN3ddQu81Dk19sMd_82lKs,177 +botocore/data/autoscaling/2011-01-01/service-2.json.gz,sha256=BiMh84as8_8FdnZh9we1u3u0rc3aFhramKILQSyHRcg,56290 +botocore/data/b2bi/2022-06-23/endpoint-rule-set-1.json.gz,sha256=51WCzponGodHWAf3njDKuMg-qmwFnhUY6QAA5kFQNxM,1299 +botocore/data/b2bi/2022-06-23/paginators-1.json,sha256=7ttS6Z0bHTlax4HX4atDWB9qbLUxoE9OTzdYeT62jiE,697 +botocore/data/b2bi/2022-06-23/service-2.json.gz,sha256=rLMLPhznIZkAY6itREfZMuZqveNR_wltTtcTIqq0rRE,8847 +botocore/data/backup-gateway/2021-01-01/endpoint-rule-set-1.json.gz,sha256=JYpRZPBT9dQW7Ykl86XkS4Qv7Acc_z-f0AvtfoAfaio,1153 +botocore/data/backup-gateway/2021-01-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/backup-gateway/2021-01-01/paginators-1.json,sha256=SBncJ16jo9My_HRd-t9A7KPTxlId0ZP7A9JGuJ8tsiA,531 +botocore/data/backup-gateway/2021-01-01/service-2.json.gz,sha256=29mP-wbhoaEB9TPSe1NOypA70FwTRF6eJ9iojWLxNog,7373 +botocore/data/backup/2018-11-15/endpoint-rule-set-1.json.gz,sha256=s5eOLG5T7k5oT2omFhqhqmMrT0IXH2MSfIC8O_vz7WA,1149 +botocore/data/backup/2018-11-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/backup/2018-11-15/paginators-1.json,sha256=A_0YIIgbnP324IxbCHk48GlF8enAgN3PcsYpscwqj_0,3064 +botocore/data/backup/2018-11-15/service-2.json.gz,sha256=O4-y2Z2AkpgcH6goY3c-kavP7AWKpFFsrQnVjEhk804,48032 +botocore/data/backupstorage/2018-04-10/endpoint-rule-set-1.json.gz,sha256=mw6K8__C2ON-05uVfQyBDZI2ogqSL1eoVzIvc0yBRTw,1151 +botocore/data/backupstorage/2018-04-10/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/backupstorage/2018-04-10/service-2.json.gz,sha256=AiILHTolBZMQO6JErTAfNm7AJFpjgmoGKUeVYWHA8_4,3284 +botocore/data/batch/2016-08-10/endpoint-rule-set-1.json.gz,sha256=v84BgGyuQP1CU2_Y7tHuf0SPKFnOADzWKurL6N1qQIM,1270 +botocore/data/batch/2016-08-10/examples-1.json,sha256=OVGvwREzgw_LYc8FpiMwLMNKVBoPq2uadWkT4icK_aM,20292 +botocore/data/batch/2016-08-10/paginators-1.json,sha256=_Q14DEUaF7-Y_MEg_UgaxxtzcTQSkn9nPZLNA55Uc1k,905 +botocore/data/batch/2016-08-10/service-2.json.gz,sha256=SNeZn6ieXmsd8B3ozKqky5d6Y9g8QFBflJ6tppf-nBQ,43453 +botocore/data/bcm-data-exports/2023-11-26/endpoint-rule-set-1.json.gz,sha256=UXamS8QWf9OzvEcRtKb3GwAECDCA_5auQPe_wYqwjxA,1288 +botocore/data/bcm-data-exports/2023-11-26/paginators-1.json,sha256=O6FqSUDC5izLwZBKGsqYvMoy2ROOd85-Hb7II57VJoY,509 +botocore/data/bcm-data-exports/2023-11-26/service-2.json.gz,sha256=afsA8TxmAW_kodHT-0eYRlO6rxBXO5CVVn1PjLexm_Y,5122 +botocore/data/bedrock-agent-runtime/2023-07-26/endpoint-rule-set-1.json.gz,sha256=S_Z34du9DLp3MlsU8RsyTw6wsx46vgUQ_QU2I-BoXpQ,1311 +botocore/data/bedrock-agent-runtime/2023-07-26/paginators-1.json,sha256=iMZVeZwdrrQoyVNtOGmMsuZTX-2KyK7IeP1HbF7fwf0,158 +botocore/data/bedrock-agent-runtime/2023-07-26/service-2.json.gz,sha256=q1UlCfry-HSuVPHyWlYCTNIKPcqL2VbVrIBX4enI4V4,5137 +botocore/data/bedrock-agent/2023-06-05/endpoint-rule-set-1.json.gz,sha256=rvIU5t8gMCHRug5B038XNbTsmismQNOANNp6NJq20C0,1305 +botocore/data/bedrock-agent/2023-06-05/paginators-1.json,sha256=_y8Esgcafn_rXEmxgcq4BDEDtc_L9GlEP5823huZyoU,1461 +botocore/data/bedrock-agent/2023-06-05/service-2.json.gz,sha256=hjpBF3YfxB07rgden7m0EcW-YW5poui7asiK9By_9Sk,10547 +botocore/data/bedrock-runtime/2023-09-30/endpoint-rule-set-1.json.gz,sha256=x6EKp7GizbSLI9q4DUN6FdUBBK6DA9uSM3m-9s03LTc,1306 +botocore/data/bedrock-runtime/2023-09-30/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/bedrock-runtime/2023-09-30/service-2.json.gz,sha256=q8X18mrHLXXqOiOiPBfROoZ93bcs4b3hl0Nl_FomvNI,2179 +botocore/data/bedrock-runtime/2023-09-30/waiters-2.json,sha256=tj1ZnaqhwmJkUEQlwH7wm1SqY3lg1BvZDfzfPaIgNrY,38 +botocore/data/bedrock/2023-04-20/endpoint-rule-set-1.json.gz,sha256=VUqwWXIw0B_xX2ZbPk34hswP6p8Y_Sfdx4IGtljfcgw,1300 +botocore/data/bedrock/2023-04-20/paginators-1.json,sha256=c188TaWnvpiMEXICAqITJ7F2ZSxBbZcvFtF-KI1bGI0,593 +botocore/data/bedrock/2023-04-20/service-2.json.gz,sha256=1GBiRxoGdYJimLEPlQtp-9iafz1TobBsVWEUaStg9xU,8430 +botocore/data/bedrock/2023-04-20/waiters-2.json,sha256=tj1ZnaqhwmJkUEQlwH7wm1SqY3lg1BvZDfzfPaIgNrY,38 +botocore/data/billingconductor/2021-07-30/endpoint-rule-set-1.json.gz,sha256=Q0UgjWGVjqkTpPHHsnNO9rucUKNFLHLPfqX7pBS5eqU,1313 +botocore/data/billingconductor/2021-07-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/billingconductor/2021-07-30/paginators-1.json,sha256=C1lDM7aIG0KK8L7HotZs6eXvTQLuxzETH2wAHQdDzqI,2192 +botocore/data/billingconductor/2021-07-30/service-2.json.gz,sha256=UYps9_Tln8gLOKWqGR9ZRotmZpV6-eltR9H7orffRzw,15064 +botocore/data/billingconductor/2021-07-30/waiters-2.json,sha256=sAGuGxokCpXh7GUF-AzqqNR6DLDE-wgRMhjNJb41AHc,36 +botocore/data/braket/2019-09-01/endpoint-rule-set-1.json.gz,sha256=q0DZgz-e3t6mTxmtmDETT8a2qYHPHXTZuA-ZkpJdE3Q,1149 +botocore/data/braket/2019-09-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/braket/2019-09-01/paginators-1.json,sha256=KRlsOoRgrAwhnJjx41OVvcVESSL0GGupxAdB-CpgK7w,515 +botocore/data/braket/2019-09-01/service-2.json.gz,sha256=DVbv1J_mHGt9mfFHRIh-GGhV2rKT9UaXIbQ25Db_aEE,8092 +botocore/data/budgets/2016-10-20/endpoint-rule-set-1.json.gz,sha256=SOC4MtwfSI6xJKjOCTN_PqbZWiGPUDANDIOi5EJaeyM,1370 +botocore/data/budgets/2016-10-20/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/budgets/2016-10-20/paginators-1.json,sha256=4lIRhlnV70H90OPO79aAX2cps42vBAkZcxWDSS40zis,1512 +botocore/data/budgets/2016-10-20/service-2.json.gz,sha256=lDZy-B-PLWWjLvp6VkDE9B_nBeChy-JKtGCKLkyK-4M,11850 +botocore/data/ce/2017-10-25/endpoint-rule-set-1.json.gz,sha256=lJMWFjGzfFN1P0vziywIfByjweIk6L7SaMSeAWVbffg,1366 +botocore/data/ce/2017-10-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/ce/2017-10-25/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/ce/2017-10-25/service-2.json.gz,sha256=Je3_rLM8CSncgkv-VKt_LQU1dqFYBQQ5Rj1VrJySjTE,37445 +botocore/data/chime-sdk-identity/2021-04-20/endpoint-rule-set-1.json.gz,sha256=aI3dekRhR2Xdst-boRp2o-UXB0ZMFRUpFXxc11JYsas,1152 +botocore/data/chime-sdk-identity/2021-04-20/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/chime-sdk-identity/2021-04-20/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/chime-sdk-identity/2021-04-20/service-2.json.gz,sha256=8zLR2V88c3SfsGE89H2w9YJYSvLCEclrVHZ-BwjODqQ,8111 +botocore/data/chime-sdk-media-pipelines/2021-07-15/endpoint-rule-set-1.json.gz,sha256=6Tcj7rrYx3MTnWvD8pAJUxEhLqAB3bo8wfB3oGUehUs,1160 +botocore/data/chime-sdk-media-pipelines/2021-07-15/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/chime-sdk-media-pipelines/2021-07-15/service-2.json.gz,sha256=7PsGbHbtqIWBJPaMzQ-V8CxJzhsNp1K6E0DKzQrTkek,16590 +botocore/data/chime-sdk-meetings/2021-07-15/endpoint-rule-set-1.json.gz,sha256=xocQ93IZKoh2hN5jrhPqPP6jAFVfwENxLm-M4BFABDs,1155 +botocore/data/chime-sdk-meetings/2021-07-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/chime-sdk-meetings/2021-07-15/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/chime-sdk-meetings/2021-07-15/service-2.json.gz,sha256=aLyJciRm1tXxcMEa7yo6B9AwaNJkxYUmqQdyE_gsuZM,11217 +botocore/data/chime-sdk-messaging/2021-05-15/endpoint-rule-set-1.json.gz,sha256=CYYMvGXXJPUaZXNG5wCsqxA37JedSUcEBDilCTvXFWg,1153 +botocore/data/chime-sdk-messaging/2021-05-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/chime-sdk-messaging/2021-05-15/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/chime-sdk-messaging/2021-05-15/service-2.json.gz,sha256=pMOUKoanDvVfmGA2jBBUf_ADSTWsxe48e0Jr0x9SCqU,16213 +botocore/data/chime-sdk-voice/2022-08-03/endpoint-rule-set-1.json.gz,sha256=1GQALHSuX-i4tt1lUeygmcDtN-DLaHFI1T9fmPN7OZs,1293 +botocore/data/chime-sdk-voice/2022-08-03/paginators-1.json,sha256=28096cSFWwRSuJQMmk9A3HNyMAH8wFdjz3F_5pukB8Q,373 +botocore/data/chime-sdk-voice/2022-08-03/service-2.json.gz,sha256=oGBvege1oKbhKE2KQvVwgvgMj5B_xBFZ9pBrK-iVzcc,21546 +botocore/data/chime/2018-05-01/endpoint-rule-set-1.json.gz,sha256=mh83CzpWP77yBbuetBDh8SvN0mabzPQSDNg5JhAd-BE,1307 +botocore/data/chime/2018-05-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/chime/2018-05-01/paginators-1.json,sha256=eU07vcRnjLd-9RmN_aGGPffN0ZXkpMRFYD_XbcyDy3A,343 +botocore/data/chime/2018-05-01/service-2.json.gz,sha256=VCdSFhyhdn_VuIOEP33AJwWRi8TyFERJx8uv5R77crQ,51890 +botocore/data/cleanrooms/2022-02-17/endpoint-rule-set-1.json.gz,sha256=H0sAMeAzkvpwqtFgcXDeqTt6-k7o-9lKCJsgEsKZwR8,1301 +botocore/data/cleanrooms/2022-02-17/paginators-1.json,sha256=hQqtD4PIeBnV39vop_BhqvcdjKrTUzeLZIECayzc0Ck,2974 +botocore/data/cleanrooms/2022-02-17/service-2.json.gz,sha256=YfdMhmpoMNfx_AiQ5l0ZySrFm8OOVUGKhkBhUskLJhc,23845 +botocore/data/cleanrooms/2022-02-17/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/cleanroomsml/2023-09-06/endpoint-rule-set-1.json.gz,sha256=vay1-G8kTyChHlm3Zu5EGi9QcFfU8WDAxwxboxMZC5o,1304 +botocore/data/cleanroomsml/2023-09-06/paginators-1.json,sha256=qYSDy4rOquZcN5vkZbldrv6idgkXZ6P0gB0aeXetlaM,943 +botocore/data/cleanroomsml/2023-09-06/service-2.json.gz,sha256=LNvpAYvc7OreGNDu1ZjwJ56BYV42lO1xIlPahCeEp6I,9877 +botocore/data/cloud9/2017-09-23/endpoint-rule-set-1.json.gz,sha256=rTz98uk8G4HKnD8nPSAGYGEtQ4fNL3_SFfIEP2W-bQA,1150 +botocore/data/cloud9/2017-09-23/examples-1.json,sha256=Jbbei88MR8S4MFnfmPKNTEk_b1NdqqM5R6P781A23JY,9183 +botocore/data/cloud9/2017-09-23/paginators-1.json,sha256=lET7E3FWErLA8In260otKfr3_9oVSr5OTO1zcrBi28w,380 +botocore/data/cloud9/2017-09-23/service-2.json.gz,sha256=BJeIDZ357nSnIJGfiurqTTo_a3ukBzhV-2j1VW_iWFo,6054 +botocore/data/cloudcontrol/2021-09-30/endpoint-rule-set-1.json.gz,sha256=pPlzH0jjaCARsAytCYs5Z7YxAlHaWK5oN9l6rS7YmO0,1153 +botocore/data/cloudcontrol/2021-09-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudcontrol/2021-09-30/paginators-1.json,sha256=Xh6wJghPx6VpGNTTEdpRQIsrJuVeyY5FQNpNLpUdkhc,392 +botocore/data/cloudcontrol/2021-09-30/paginators-1.sdk-extras.json,sha256=9NbQ8xHg5ztdpvYFDl15_74F30ZNPFnSFDxismgvSMg,143 +botocore/data/cloudcontrol/2021-09-30/service-2.json.gz,sha256=BQ3uDYxgFQiNtevLkZSvMP_-CLGrHQLut2SJJRnDthc,5896 +botocore/data/cloudcontrol/2021-09-30/waiters-2.json,sha256=US_tyuvbMcXS6IrVB8D817Gg3pGKdCuooDJKz4Ta56U,738 +botocore/data/clouddirectory/2016-05-10/endpoint-rule-set-1.json.gz,sha256=G_QQCxuOPcSBUbTgOQ3_8RAjPY3DlyIOFgp_1WvQuC0,1398 +botocore/data/clouddirectory/2016-05-10/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/clouddirectory/2016-05-10/paginators-1.json,sha256=y8GPuHURJmdagJ3QAI5mxkAzKvdCZwcnfYt3Z-qwgAU,2808 +botocore/data/clouddirectory/2016-05-10/service-2.json.gz,sha256=n_l8yqRpT_kHcKhQjKsWpmqMv-QU1nSVgPqDdOw_-Ro,22958 +botocore/data/clouddirectory/2017-01-11/endpoint-rule-set-1.json.gz,sha256=JA29ufzMyvAKH0rUtvbCpFsR_rgCZAWg7KvAnWk4-MU,1243 +botocore/data/clouddirectory/2017-01-11/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/clouddirectory/2017-01-11/paginators-1.json,sha256=gIqmeqo-8lsyEDEVDFvc1RJfd0T7c9xN6SdMnxGvSpw,3342 +botocore/data/clouddirectory/2017-01-11/service-2.json.gz,sha256=pxS1aRtTm7PdVt9dzQyy1JohTPk5YiJEg6mAVqND_X4,23874 +botocore/data/cloudformation/2010-05-15/endpoint-rule-set-1.json.gz,sha256=J12RZNFohL5XMmtgZ5dNtAlYb4D6ekgD9jhYxvp9nYA,1239 +botocore/data/cloudformation/2010-05-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudformation/2010-05-15/paginators-1.json,sha256=j2CmuC88L534cEqybV-SADEXlQvdTNweavn5a1mun5I,2599 +botocore/data/cloudformation/2010-05-15/service-2.json.gz,sha256=qZn1XbJKiRbD9F18fFGJMZ0I2huZaK4ij8nard60zp0,66752 +botocore/data/cloudformation/2010-05-15/waiters-2.json,sha256=BM3U5p4j7iNbZ9UWiiiDU9OZfMsXS-oIGsUClUUKdkk,9500 +botocore/data/cloudfront-keyvaluestore/2022-07-26/endpoint-rule-set-1.json.gz,sha256=cJ_u_1ZXaEH62JxiD1_tsatERuJegGzuhwbFxS8YT3o,2213 +botocore/data/cloudfront-keyvaluestore/2022-07-26/paginators-1.json,sha256=2wyrpgvniacM8xlFDnHQiCR0KVEAVJxBEpWFBcrB4Z0,180 +botocore/data/cloudfront-keyvaluestore/2022-07-26/service-2.json.gz,sha256=LrDDLvgIDu1U9EurP3uaa_RzzHaROD-eswZUs2wI23s,2177 +botocore/data/cloudfront/2014-05-31/endpoint-rule-set-1.json.gz,sha256=8zU6iQ75uATbSeuMMiY0Px7dsqQSo5proMgh06PC3Hs,1839 +botocore/data/cloudfront/2014-05-31/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2014-05-31/service-2.json.gz,sha256=GAnazUSFQhVxkPMGbkEFPG6lk3yW5hjqk3FLOCZqTbk,15298 +botocore/data/cloudfront/2014-05-31/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2014-10-21/endpoint-rule-set-1.json.gz,sha256=8zU6iQ75uATbSeuMMiY0Px7dsqQSo5proMgh06PC3Hs,1839 +botocore/data/cloudfront/2014-10-21/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2014-10-21/service-2.json.gz,sha256=a0h1YKQH4dEsi5PrFvPIbFiKPERxw2JJonb5PH_OaTI,15887 +botocore/data/cloudfront/2014-10-21/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2014-11-06/endpoint-rule-set-1.json.gz,sha256=8zU6iQ75uATbSeuMMiY0Px7dsqQSo5proMgh06PC3Hs,1839 +botocore/data/cloudfront/2014-11-06/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2014-11-06/service-2.json.gz,sha256=5u09PtzjimC_Nyn5U1FDnniNs7dUAyclThJ8ccDGvOo,15959 +botocore/data/cloudfront/2014-11-06/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2015-04-17/endpoint-rule-set-1.json.gz,sha256=8zU6iQ75uATbSeuMMiY0Px7dsqQSo5proMgh06PC3Hs,1839 +botocore/data/cloudfront/2015-04-17/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2015-04-17/service-2.json.gz,sha256=YniStKQndgyv4ZAGX87BXtyEGnv3trpN8UkW0L0l2Rk,16213 +botocore/data/cloudfront/2015-04-17/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2015-07-27/endpoint-rule-set-1.json.gz,sha256=8zU6iQ75uATbSeuMMiY0Px7dsqQSo5proMgh06PC3Hs,1839 +botocore/data/cloudfront/2015-07-27/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2015-07-27/service-2.json.gz,sha256=-N0H6qoEtrLq7c_RGw5_eWXgpem6S3gJgdoXFXNPu7w,16702 +botocore/data/cloudfront/2015-07-27/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2015-09-17/endpoint-rule-set-1.json.gz,sha256=8zU6iQ75uATbSeuMMiY0Px7dsqQSo5proMgh06PC3Hs,1839 +botocore/data/cloudfront/2015-09-17/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2015-09-17/service-2.json.gz,sha256=wamTmYBA1W1jh7rUqsApLTrIS-uUgnas7ZTgOnxQocM,15890 +botocore/data/cloudfront/2015-09-17/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2016-01-13/endpoint-rule-set-1.json.gz,sha256=8zU6iQ75uATbSeuMMiY0Px7dsqQSo5proMgh06PC3Hs,1839 +botocore/data/cloudfront/2016-01-13/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2016-01-13/service-2.json.gz,sha256=gStxbcJGJf-YNWb7VnX4cWYW6PUpIdKCNoSitI0zonQ,16358 +botocore/data/cloudfront/2016-01-13/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2016-01-28/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2016-01-28/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudfront/2016-01-28/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2016-01-28/service-2.json.gz,sha256=-oIPavAFwZzUvuR0hN_iQxRhg-ZafRiMubSKD7hW8Hw,16279 +botocore/data/cloudfront/2016-01-28/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2016-08-01/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2016-08-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudfront/2016-08-01/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2016-08-01/service-2.json.gz,sha256=ho8t-0wMtGBSz8fsLW6TmGq-cmUJRWZr9vhKI-f29Tg,17725 +botocore/data/cloudfront/2016-08-01/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2016-08-20/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2016-08-20/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2016-08-20/service-2.json.gz,sha256=NXTuRJcAZbV7Q6rPfFiF2566qNz37IdYw4FGYDOHfpE,18123 +botocore/data/cloudfront/2016-08-20/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2016-09-07/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2016-09-07/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudfront/2016-09-07/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2016-09-07/service-2.json.gz,sha256=pyIekm3WIFmwvoWdcQQ6bOUbc5vXMkdlUfSQ0HmaY58,18444 +botocore/data/cloudfront/2016-09-07/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2016-09-29/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2016-09-29/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudfront/2016-09-29/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2016-09-29/service-2.json.gz,sha256=KwYtw3LRiVSiNat9fMutJFSn6_n2m44ffZW0Dj3TM4c,27522 +botocore/data/cloudfront/2016-09-29/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2016-11-25/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2016-11-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudfront/2016-11-25/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2016-11-25/service-2.json.gz,sha256=vFuy23B2Rro2d-1uuHF1D_JJr_-NoTEGgEoijg9r9q8,27955 +botocore/data/cloudfront/2016-11-25/waiters-2.json,sha256=jzREqDxfIg2KbmPYOmDoYgDvy8mWAEK0w_NmEoCqhHI,1184 +botocore/data/cloudfront/2017-03-25/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2017-03-25/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2017-03-25/service-2.json.gz,sha256=PRrBMDquN4nZssHbTL15-RuEeg_1FMw5w3BGF27OJ2w,29088 +botocore/data/cloudfront/2017-03-25/waiters-2.json,sha256=JboqzXjlni8p-wiVKBz1jRj-mFpkryqueCgI1hD7WPA,1184 +botocore/data/cloudfront/2017-10-30/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2017-10-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudfront/2017-10-30/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2017-10-30/service-2.json.gz,sha256=g9llPXcw10izrejx4DDW3_tM-IrUH5Xx4ss4VhiWLo4,34767 +botocore/data/cloudfront/2017-10-30/waiters-2.json,sha256=JboqzXjlni8p-wiVKBz1jRj-mFpkryqueCgI1hD7WPA,1184 +botocore/data/cloudfront/2018-06-18/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2018-06-18/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudfront/2018-06-18/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2018-06-18/service-2.json.gz,sha256=Cok-Q7WzFmxLl5c87IgmrPB0GrDtxICQHzh28v-a2PY,35482 +botocore/data/cloudfront/2018-06-18/waiters-2.json,sha256=JboqzXjlni8p-wiVKBz1jRj-mFpkryqueCgI1hD7WPA,1184 +botocore/data/cloudfront/2018-11-05/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2018-11-05/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudfront/2018-11-05/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2018-11-05/service-2.json.gz,sha256=Ejp0MOJzOFfei1A6XPgg9FieuJOIRuEryC7l9Wf-CM0,36144 +botocore/data/cloudfront/2018-11-05/waiters-2.json,sha256=JboqzXjlni8p-wiVKBz1jRj-mFpkryqueCgI1hD7WPA,1184 +botocore/data/cloudfront/2019-03-26/endpoint-rule-set-1.json.gz,sha256=WVuRS1GRJuTMsEbgHnoVfMvlGtUpzxSvX_qZNNFPw10,1574 +botocore/data/cloudfront/2019-03-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudfront/2019-03-26/paginators-1.json,sha256=I7u4h1MFflBvFJemcrLHSn7uOrEeDFc7ecWGqwDxGF8,1126 +botocore/data/cloudfront/2019-03-26/service-2.json.gz,sha256=NT-u8L7EFaHVXqT2VOTuoLlD21u16kjPl7arQvL5vDw,37652 +botocore/data/cloudfront/2019-03-26/waiters-2.json,sha256=qt7oBhQ-B52-397Q88q0EJoFpDWuOZM7CZpaFhX1xgM,1184 +botocore/data/cloudfront/2020-05-31/endpoint-rule-set-1.json.gz,sha256=_ItAIT9_IN8HLGA6XuBHZxc3TKbHdyPmQuT9vzRG3ic,1408 +botocore/data/cloudfront/2020-05-31/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudfront/2020-05-31/paginators-1.json,sha256=F-GvV1ja3FID22KPpBnvQ2a7QMGxtP_kIdXRd4UWb7s,1323 +botocore/data/cloudfront/2020-05-31/service-2.json.gz,sha256=99jLZ7WA9Il-eWWLAAAaw2SvthLQXseWrNLQSwmpLAg,69193 +botocore/data/cloudfront/2020-05-31/waiters-2.json,sha256=qt7oBhQ-B52-397Q88q0EJoFpDWuOZM7CZpaFhX1xgM,1184 +botocore/data/cloudhsm/2014-05-30/endpoint-rule-set-1.json.gz,sha256=rcBcRZSdp1lr-J1bCXDEMO-k8C842jPQ2zZeTFy6maU,1148 +botocore/data/cloudhsm/2014-05-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudhsm/2014-05-30/paginators-1.json,sha256=pe-X06JkfqlENEk-25nE_w_q3QQXkdMnQ5cOG1NPi6E,409 +botocore/data/cloudhsm/2014-05-30/service-2.json.gz,sha256=3EwKinzP4zll7EGKDXmZ9CNjtZdnYcaLQrIVC_MLogA,5556 +botocore/data/cloudhsmv2/2017-04-28/endpoint-rule-set-1.json.gz,sha256=6v62XAXGJPZc0er1bVUnLCcOYNyH1It1Gf39jY04faQ,1239 +botocore/data/cloudhsmv2/2017-04-28/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudhsmv2/2017-04-28/paginators-1.json,sha256=VvCnjrdoGz3Lb-gi5YSOAhhAHzB50i0vIks0GaA2nS0,512 +botocore/data/cloudhsmv2/2017-04-28/service-2.json.gz,sha256=yoFpZY_RfCh-aoN04-cldcVwdDGCbD72O8o-GN47MCE,6039 +botocore/data/cloudsearch/2011-02-01/endpoint-rule-set-1.json.gz,sha256=-B02TcnYoLY4Q2vCiDVb6RHIl1NhMsZgFSfUWx02u_Y,1149 +botocore/data/cloudsearch/2011-02-01/service-2.json.gz,sha256=btNuMgMv1qtcK2vSIQsneVueBSmLVjoE5K4A6tSrTbA,9599 +botocore/data/cloudsearch/2013-01-01/endpoint-rule-set-1.json.gz,sha256=VFQHtAW8xmcqe67hK-UzUk7nSkglpgGnH1lun10wZjg,1150 +botocore/data/cloudsearch/2013-01-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudsearch/2013-01-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/cloudsearch/2013-01-01/service-2.json.gz,sha256=hl4giUWCajCTe3XItXziAAnxxFXlhRowvH6Cd6arcSY,12084 +botocore/data/cloudsearchdomain/2013-01-01/endpoint-rule-set-1.json.gz,sha256=5OnLCdAJdimG4PmiRM_1rB-JVmrgsOZrld6Yr9_APYk,1154 +botocore/data/cloudsearchdomain/2013-01-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudsearchdomain/2013-01-01/service-2.json.gz,sha256=3ajFuQ5hKLFUh8YLbwEHzvbn2EUKWWsneoFE-GKogAM,9099 +botocore/data/cloudtrail-data/2021-08-11/endpoint-rule-set-1.json.gz,sha256=Z3iRY7Xx7lhBivutQQKI8VBwThil_3-GZ9V2O3mAnNo,1295 +botocore/data/cloudtrail-data/2021-08-11/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/cloudtrail-data/2021-08-11/service-2.json.gz,sha256=yw9QhZ_d5LwkoIjA60523-pXO4PTWkNTm_jx5xqPVpA,2165 +botocore/data/cloudtrail/2013-11-01/endpoint-rule-set-1.json.gz,sha256=gr0AEaw1aM39jiWeyPqk7iBJh5dShgQh6glp04jjfq8,1235 +botocore/data/cloudtrail/2013-11-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudtrail/2013-11-01/paginators-1.json,sha256=YF379KBXA_FzpvoX8iPsNIUPHrhwyGGX4nICIjqs15o,906 +botocore/data/cloudtrail/2013-11-01/service-2.json.gz,sha256=H9rv_2ekw-LySeIKxVTAcxjT4_FFMyoPsfhVv-wf3h8,36825 +botocore/data/cloudwatch/2010-08-01/endpoint-rule-set-1.json.gz,sha256=QFF-zNT_wxc-P80UR5EP3salPZiK7nDgd0OIGnITMDk,1237 +botocore/data/cloudwatch/2010-08-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cloudwatch/2010-08-01/paginators-1.json,sha256=OfAocfP12RM8pfP6Fh2EUikcL00nN2vRMCW3O4wsjHo,1122 +botocore/data/cloudwatch/2010-08-01/service-2.json.gz,sha256=wyHEKeGwMGtGqcS8W5TTSiTmSFNnVsCcgfoy28K6_rU,37884 +botocore/data/cloudwatch/2010-08-01/waiters-2.json,sha256=MloXSzqs1ZkzyWAP2NrkVyNkIE63Hbk24II7PCuUxl0,644 +botocore/data/codeartifact/2018-09-22/endpoint-rule-set-1.json.gz,sha256=nRjbl5OCFKBqXy-hGdPDf6w4D0JK3HP8Oo97751i9ro,1150 +botocore/data/codeartifact/2018-09-22/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/codeartifact/2018-09-22/paginators-1.json,sha256=iuFF8H-ApMcRKCQk1_8RBZOcVbTYP5DlGFs3rR6fVss,1036 +botocore/data/codeartifact/2018-09-22/paginators-1.sdk-extras.json,sha256=kNVDIOe3C5yL0xTWSrW2xDchpno4Xozz60DY53uxNEA,444 +botocore/data/codeartifact/2018-09-22/service-2.json.gz,sha256=05D1QuoZm4RUQ-cljaf1avD1Jt9nRKzeMVp4y_XuAbg,19124 +botocore/data/codebuild/2016-10-06/endpoint-rule-set-1.json.gz,sha256=lPlMaiukTCL-oK0YJRLdktf5_hSOcoPbmxOnHTPeMhI,1151 +botocore/data/codebuild/2016-10-06/examples-1.json,sha256=_-tVq2XM1YDuzv78VwIj_WjyXHu-yrIPyxzTtTbdFJ8,9778 +botocore/data/codebuild/2016-10-06/paginators-1.json,sha256=bbKaGCdRO-JDOzUHKIVi1sEU9h8xDj6Yso9CNiszoRA,1932 +botocore/data/codebuild/2016-10-06/service-2.json.gz,sha256=FLB6LQ880YYYkIsEfykpX6fPU8m-iizVIZRC_ruiQOA,34353 +botocore/data/codecatalyst/2022-09-28/endpoint-rule-set-1.json.gz,sha256=x6uUaKw3fnItoFyQiZn2jfiMcXEvWbZZCta8FEvHaLE,851 +botocore/data/codecatalyst/2022-09-28/paginators-1.json,sha256=TuEQ6NVw_F_LgmG-TurtBCvFTRFRP8DWHseWdO8DNRk,1637 +botocore/data/codecatalyst/2022-09-28/service-2.json.gz,sha256=l_y_NhZIZ4H1ATswso-kRxms9FPI5J51fRNIG2cjdCE,13843 +botocore/data/codecatalyst/2022-09-28/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/codecommit/2015-04-13/endpoint-rule-set-1.json.gz,sha256=nU4arGn8ROZhIbALwBoK7pL5goSpYJyXtQXPgZ6eag8,1152 +botocore/data/codecommit/2015-04-13/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/codecommit/2015-04-13/paginators-1.json,sha256=2w92BpzUce0gSVEaZH0la2r8ZT_MDtxoLc6RG-dpln4,1206 +botocore/data/codecommit/2015-04-13/service-2.json.gz,sha256=OXj9wyH_piU_pD97awkvgQxeS9D0z4SxytrlQOUqjWQ,40877 +botocore/data/codedeploy/2014-10-06/endpoint-rule-set-1.json.gz,sha256=cSN861SIwbRy6nRCB6iBHKhSGE7QBolJlrvGtSCcaFI,1152 +botocore/data/codedeploy/2014-10-06/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/codedeploy/2014-10-06/paginators-1.json,sha256=riyMuhePXvzjx3lAoHiIaOi0U6v2lCVd65qX4UWPoxo,1313 +botocore/data/codedeploy/2014-10-06/service-2.json.gz,sha256=kHTvNIVxPoZaUL731no5K6xOLqLLDX2DYhjnFIRSGmE,31878 +botocore/data/codedeploy/2014-10-06/waiters-2.json,sha256=OARBxBeZTRUui1WztkVtUn7Q2lAh3-Bemczgk455MGQ,662 +botocore/data/codeguru-reviewer/2019-09-19/endpoint-rule-set-1.json.gz,sha256=tC2L7yzNqgipu75v2Ynri7h92l9iFF8Im7WVsyhH1i4,1156 +botocore/data/codeguru-reviewer/2019-09-19/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/codeguru-reviewer/2019-09-19/paginators-1.json,sha256=0bkbq9IDAtNTQOShBQuJVNtb8xgFFUYNdzOcl3ri_DM,223 +botocore/data/codeguru-reviewer/2019-09-19/service-2.json.gz,sha256=alBU_HRxLoFTLX_rlMxL-FnVglBMBm9f5dRcNObKgMs,11762 +botocore/data/codeguru-reviewer/2019-09-19/waiters-2.json,sha256=0jf0N7KHQV4qYAOPKBKNdiExhxEvojmGQ2Jzrc9lYR4,1733 +botocore/data/codeguru-security/2018-05-10/endpoint-rule-set-1.json.gz,sha256=qfmP4iZJyyBV8lL3lliaE8J2f1pVD8lu6iGTBoZTAJo,1297 +botocore/data/codeguru-security/2018-05-10/paginators-1.json,sha256=nwCp854x7Q4pjInZgk9mpYoj9BiFf09ekRTXObmU4GQ,522 +botocore/data/codeguru-security/2018-05-10/service-2.json.gz,sha256=88VjiQoUjqgyN_GIELkGs1GDpO9ZKE14_XqfCZUEycA,7719 +botocore/data/codeguruprofiler/2019-07-18/endpoint-rule-set-1.json.gz,sha256=GOYXifBlprcaEjlTBdExtl2vJuIGp8FACh3aOj1t2Cg,1157 +botocore/data/codeguruprofiler/2019-07-18/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/codeguruprofiler/2019-07-18/paginators-1.json,sha256=d7DXbQ-GmZLDQRjjpAO-vzvm7OEA-pNKfPUyA9rgaag,195 +botocore/data/codeguruprofiler/2019-07-18/service-2.json.gz,sha256=wsrNiOpAnApAGvLaH5ld_P2acQ6x2n61z0fah0ZUqlA,14592 +botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json.gz,sha256=H24iT72CXn8tPvd2sbGTkOuyDGXUQmUS0o73tQpFGwI,1153 +botocore/data/codepipeline/2015-07-09/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/codepipeline/2015-07-09/paginators-1.json,sha256=ByCPPtDklOQb3pknB6dm-lSbZmhKLshJq1XF0BZInYw,1025 +botocore/data/codepipeline/2015-07-09/service-2.json.gz,sha256=Hj3S1KNASC-fqWB-Tu1hTKyeVqhkLDb8sTuJRl60F-I,28117 +botocore/data/codestar-connections/2019-12-01/endpoint-rule-set-1.json.gz,sha256=LhSVFArmwEZnIqd_go6HFyrkz6Q_zlHaWAY1J9vejHk,1156 +botocore/data/codestar-connections/2019-12-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/codestar-connections/2019-12-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/codestar-connections/2019-12-01/service-2.json.gz,sha256=xsHxBODkbFetf7Lk9cqg7gCV0JaReGNCeN9et_Hosog,9633 +botocore/data/codestar-notifications/2019-10-15/endpoint-rule-set-1.json.gz,sha256=jBuGzBFJxeEXz4hhxhyvn5sHEI-eMfJ-5CuHQUAOiRw,1156 +botocore/data/codestar-notifications/2019-10-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/codestar-notifications/2019-10-15/paginators-1.json,sha256=bD6rBB54kEd5ns5mM8KWWE2Gfs6rNkRWTLyvKHai9OA,531 +botocore/data/codestar-notifications/2019-10-15/service-2.json.gz,sha256=qX_WTkDk1Ma1ZFKbdW_ksSMoBrmaYkAfhGgXC06VLLI,5528 +botocore/data/codestar/2017-04-19/endpoint-rule-set-1.json.gz,sha256=O6NwMqy4Hn41EMjkcTzVXoRhYnXaCXUVXx-4kmwSJJ0,1147 +botocore/data/codestar/2017-04-19/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/codestar/2017-04-19/paginators-1.json,sha256=3r-icSh_oPAVyAdyLoPtkZehAQXuKwEJJan-PFrl6N4,689 +botocore/data/codestar/2017-04-19/service-2.json.gz,sha256=UxA7VZGqmRGNyraYiTn_oGa74AOj6G3q8_Hpr0IsBmU,7065 +botocore/data/cognito-identity/2014-06-30/endpoint-rule-set-1.json.gz,sha256=O3W4kapQ2LBnWw04-zHMsCJkl20RjmqhUZGo8dzaEOg,1157 +botocore/data/cognito-identity/2014-06-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cognito-identity/2014-06-30/paginators-1.json,sha256=iRnVNYNjXj4riBW6sjwmAF2p9fSX2MkfoM5W_Y9_tkE,197 +botocore/data/cognito-identity/2014-06-30/service-2.json.gz,sha256=PRdVp0KG2TVa5o05bm3fFc31hC-JXm04KGxQRejllHg,10040 +botocore/data/cognito-idp/2016-04-18/endpoint-rule-set-1.json.gz,sha256=BqqRZeO4Rc1Y2v-YZRxwHqrVGZYaU4FtkSoqVQpEyIY,1153 +botocore/data/cognito-idp/2016-04-18/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cognito-idp/2016-04-18/paginators-1.json,sha256=RdlZ6K9kobwkGd7v3X15eeU_1MTpNNWwHD35RwB4keA,1527 +botocore/data/cognito-idp/2016-04-18/service-2.json.gz,sha256=pftj2EmSkRdqs1y2hxaMEClbwkDWDi2PiGBOLbE_DDI,75652 +botocore/data/cognito-sync/2014-06-30/endpoint-rule-set-1.json.gz,sha256=JZw_JGk1UGG077Jl1wPCX-pKyVkRVZZ_kNVh_jL0_k4,1151 +botocore/data/cognito-sync/2014-06-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/cognito-sync/2014-06-30/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/cognito-sync/2014-06-30/service-2.json.gz,sha256=Cj3TSCjFCws62ZyEBrQpJ3gFTf8MXXCg8nA1geouoA4,7316 +botocore/data/comprehend/2017-11-27/endpoint-rule-set-1.json.gz,sha256=75DetUKGlrKFTWH-riuScw_5DdxYGlwX_16dV1lF6tw,1151 +botocore/data/comprehend/2017-11-27/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/comprehend/2017-11-27/paginators-1.json,sha256=aCozRajzUb4wblnxzb_bTJlztnDFC3PnwItAMek2WtY,2033 +botocore/data/comprehend/2017-11-27/service-2.json.gz,sha256=-tv3HrecyyoU0sARVTpBR74yilPfV-rVVxPNr14Jxok,43000 +botocore/data/comprehendmedical/2018-10-30/endpoint-rule-set-1.json.gz,sha256=01MGfRTPEozOyQcotmfxoBzbKxNCYrRS3dxQ62X4suQ,1153 +botocore/data/comprehendmedical/2018-10-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/comprehendmedical/2018-10-30/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/comprehendmedical/2018-10-30/service-2.json.gz,sha256=KoRgYlz-GGzfX9vNl84CbABU89DNMVbkeJ33HORQOGo,10270 +botocore/data/compute-optimizer/2019-11-01/endpoint-rule-set-1.json.gz,sha256=BIs5Fnvwvh6E-ZyE7ADmkHb3WXQ-FZ0c1brE2rgAets,1157 +botocore/data/compute-optimizer/2019-11-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/compute-optimizer/2019-11-01/paginators-1.json,sha256=FBFfvnKfuzo8mWExsEqu3Gy9-nKsBwTxjoRuqT-_oU0,1022 +botocore/data/compute-optimizer/2019-11-01/service-2.json.gz,sha256=Lfn7Gp7lX-2ddzwK0b96teGuJT0gkw79a--dGXv-XyM,34309 +botocore/data/config/2014-11-12/endpoint-rule-set-1.json.gz,sha256=QsEePzYnLqGO6sX-0if-nXGw9w-_b3kvB1nq55rQ7u4,1233 +botocore/data/config/2014-11-12/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/config/2014-11-12/paginators-1.json,sha256=YDfVkCIT6qMFYl43FqCdg7Sg6RjnSfx9w8V1QkU1SqQ,6011 +botocore/data/config/2014-11-12/service-2.json.gz,sha256=WabVaRgXpT-tzT_q3WdtvyWHJc6KtBu7uJJJHXVs9Yc,59239 +botocore/data/connect-contact-lens/2020-08-21/endpoint-rule-set-1.json.gz,sha256=PalLdRhHa5xss8oKc2Ga3otBCche2uDPPFaIKsOXdaw,1150 +botocore/data/connect-contact-lens/2020-08-21/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/connect-contact-lens/2020-08-21/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/connect-contact-lens/2020-08-21/service-2.json.gz,sha256=401pRBMClEXX3UokPFkKYRRY1SA9f0WMwzx3yCPzpb0,2498 +botocore/data/connect/2017-08-08/endpoint-rule-set-1.json.gz,sha256=L-QdCuYwVFTD30nA1SL3c1eh2OkaR-2ufYaUhFW7JTM,1233 +botocore/data/connect/2017-08-08/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/connect/2017-08-08/paginators-1.json,sha256=ggUdtGaz58UBrSkFknkiUtdk7vAHP_VMXQdnJ3Q21G4,10783 +botocore/data/connect/2017-08-08/service-2.json.gz,sha256=3tc5lfE0-DjCibkb2GOLsv0JdQJMimPnQldu9NBQ9gQ,102837 +botocore/data/connectcampaigns/2021-01-30/endpoint-rule-set-1.json.gz,sha256=xhZB8WZinBqPHxtDyj3duOjtEGlT7eum58R9CLQQHQc,1158 +botocore/data/connectcampaigns/2021-01-30/paginators-1.json,sha256=0u4LcBZFpshvXnakuryTCgfVdLeSI-dpWmlZds4eVWs,199 +botocore/data/connectcampaigns/2021-01-30/service-2.json.gz,sha256=nsBPDFWsUAI4RgmiIopbZ1TUCWanFFu5lsk82M15l5U,5240 +botocore/data/connectcases/2022-10-03/endpoint-rule-set-1.json.gz,sha256=Ilv1rDvWl2p6R2by_SrTSVuK3TI2Rz1tkYUBIW8h6I8,1296 +botocore/data/connectcases/2022-10-03/paginators-1.json,sha256=M0kWmC60l-5J1fP-wyuoYdvPMzmuPYOAdGqEDIErYWI,355 +botocore/data/connectcases/2022-10-03/service-2.json.gz,sha256=SxbhZGOz-KwVf8LS93q68aAHvtdPQkC7924q1verTWw,11118 +botocore/data/connectparticipant/2018-09-07/endpoint-rule-set-1.json.gz,sha256=hySqbF21wHC3KokybLqXA9NZxLMY0TEuD6xLgcVc6xw,1240 +botocore/data/connectparticipant/2018-09-07/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/connectparticipant/2018-09-07/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/connectparticipant/2018-09-07/service-2.json.gz,sha256=s3qbH-6u9UeGY5TKv-akr-tAI0NWzYUiN-XaQAuDi0A,6428 +botocore/data/controltower/2018-05-10/endpoint-rule-set-1.json.gz,sha256=X0BcwTceGnk8eLUMoto2eAndzUlbBfm-p_zoefY6LCQ,1153 +botocore/data/controltower/2018-05-10/paginators-1.json,sha256=UCXzHV9u-eKzEoGxo6iXbo_MaA6xFRLyt35gjV_xF7o,371 +botocore/data/controltower/2018-05-10/service-2.json.gz,sha256=nve98ou-UAT6cy33UuqMI8zW5ckX2cmoqxX8_GH8j5M,6981 +botocore/data/cost-optimization-hub/2022-07-26/endpoint-rule-set-1.json.gz,sha256=cbeacrYOz_dQkcOjN5dZbyPbycxOfjvT6_jl-arHxaQ,1311 +botocore/data/cost-optimization-hub/2022-07-26/paginators-1.json,sha256=UTQXBj6oqxK8QwJmb157yVSB10S_7MhbTh4tT1a5RAU,534 +botocore/data/cost-optimization-hub/2022-07-26/paginators-1.sdk-extras.json,sha256=S5GfzquMw8sJbakaNvCH8y_AE4BAbREFjK3HItC1fZ4,242 +botocore/data/cost-optimization-hub/2022-07-26/service-2.json.gz,sha256=Afm2P9i_3OhGvIM0JBhvBgWlVUGubfSYxwf1QKLaeLc,7239 +botocore/data/cur/2017-01-06/endpoint-rule-set-1.json.gz,sha256=yQKUYNwOYy9HDpcHm9Tiofhin1G9rFm8ELnEY3k5nlM,1147 +botocore/data/cur/2017-01-06/examples-1.json,sha256=NyOJJuDWe_rnuUTIp9cdvnw0GfJCK2aaDMW8Qkyf2Mg,2874 +botocore/data/cur/2017-01-06/paginators-1.json,sha256=svrnnDA-WDB_TSjNDhx_3bXmieM10GBn4TRFNlZNPHg,209 +botocore/data/cur/2017-01-06/service-2.json.gz,sha256=wOww2Hg7N52iWR5CH_RUOr7ggmkliad_0Bdv7ap5Irg,3810 +botocore/data/customer-profiles/2020-08-15/endpoint-rule-set-1.json.gz,sha256=JLHeYQiCFIgqrLZtJgsBrYDj5EeBvwARyqLE5o0f1Po,1150 +botocore/data/customer-profiles/2020-08-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/customer-profiles/2020-08-15/paginators-1.json,sha256=-OlroN0mtsUy6CJXtf2X8go_5y0XBjG_W-BLdTRd-LE,188 +botocore/data/customer-profiles/2020-08-15/service-2.json.gz,sha256=KTFi8lYKn7AQnVyXRiePkRr4_W3_jtcgNW7zWbZGz6I,30175 +botocore/data/databrew/2017-07-25/endpoint-rule-set-1.json.gz,sha256=DNq-v9JxSw-a9TJ574eOYEUwYU3ThirBateJKX6UP7I,1210 +botocore/data/databrew/2017-07-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/databrew/2017-07-25/paginators-1.json,sha256=i_5ZTxjwAyOvq_e_Etz8L97TB_O2FHjLsAkKFbGJf8U,1316 +botocore/data/databrew/2017-07-25/service-2.json.gz,sha256=tY2XDcXZ_DZjf0qiBL-d5DQrXT9vVJngp17oatllzd8,20270 +botocore/data/dataexchange/2017-07-25/endpoint-rule-set-1.json.gz,sha256=joEN6qJ-eREtoSMuullmC9CGcmkgT_XoEyU5skzGRfw,1154 +botocore/data/dataexchange/2017-07-25/paginators-1.json,sha256=UykSh3IGMDfXWMvEmuyXdyETgPwFDGUHULkPZ7kwmxE,848 +botocore/data/dataexchange/2017-07-25/service-2.json.gz,sha256=XtJzIHhzc0wZD-_MXoMw3SuJNgpKYC6PDxwBL1Y6400,14876 +botocore/data/dataexchange/2017-07-25/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/datapipeline/2012-10-29/endpoint-rule-set-1.json.gz,sha256=99d3u-pUkxRldazeAGpi5TCs61CKaclFFKaPCvYz07M,1150 +botocore/data/datapipeline/2012-10-29/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/datapipeline/2012-10-29/paginators-1.json,sha256=JdrA68aI3fnPWh2_ecOxC5DtcFz4OkiO8GvsBkzOgUw,554 +botocore/data/datapipeline/2012-10-29/service-2.json.gz,sha256=Drk0Mmz3zFtjdJEbpMLkyW4d1OJKqtM1KlOi_wRbDpI,9587 +botocore/data/datasync/2018-11-09/endpoint-rule-set-1.json.gz,sha256=lmvzXChnZfOHvp6r5Hnljzzo38fVVLq_oEdb96n7Dj0,1151 +botocore/data/datasync/2018-11-09/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/datasync/2018-11-09/paginators-1.json,sha256=xyjK7EJvThNXPS7riG3yqLl5wo8ufwRqt1z1A8MjJos,1373 +botocore/data/datasync/2018-11-09/service-2.json.gz,sha256=Yn1uIVVbeVEQEKqWdbqqz9hYzqfO_DAqKajh64nvxXU,37504 +botocore/data/datazone/2018-05-10/endpoint-rule-set-1.json.gz,sha256=De7VmZvK64GIWqnrrkPfEAS_ql28FjXR4kvI42xypxY,1143 +botocore/data/datazone/2018-05-10/paginators-1.json,sha256=diKOLFUcLwsFbh5L7OjiOOtVw-IK0G6gLj7KTpHED1g,3518 +botocore/data/datazone/2018-05-10/paginators-1.sdk-extras.json,sha256=PDLX-xnxEfPjAUjKyltSi_A-UwPDEaAYefhbLvCSFDo,368 +botocore/data/datazone/2018-05-10/service-2.json.gz,sha256=1gUD-drKrDZFqurVFcCwIc0pIdPPBbAfwf0HXyb9mto,35848 +botocore/data/dax/2017-04-19/endpoint-rule-set-1.json.gz,sha256=gV5RlsMbihGX63ZwZ_UUke0C0uBg9XmCN3Q2gAK0AXs,1144 +botocore/data/dax/2017-04-19/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/dax/2017-04-19/paginators-1.json,sha256=OOhBXs1nXQbwQO2dybisWoE6M5Z7WrPyQUCAyGgfEiA,1175 +botocore/data/dax/2017-04-19/service-2.json.gz,sha256=LPWELnfNBnOXsTIJsWTYow2Wr9l_sasURZdkcexPTG4,9746 +botocore/data/detective/2018-10-26/endpoint-rule-set-1.json.gz,sha256=r7dSBp1yrA64A8XtrB6xGvr2kQMb7ahrWpvchRxM15M,1153 +botocore/data/detective/2018-10-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/detective/2018-10-26/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/detective/2018-10-26/service-2.json.gz,sha256=B-_5Dt6PAhCDTaL_YVcv8yk10bR_wUUqpqX5EBVrca0,12924 +botocore/data/devicefarm/2015-06-23/endpoint-rule-set-1.json.gz,sha256=PBoZ2Qi1cLCXXk1NCKo2k_1lc3bCmOcDrnLGINPR3uc,1151 +botocore/data/devicefarm/2015-06-23/examples-1.json,sha256=ph2IehoxWkjr60w1Itx_H2XRMVKQ9J1WHbDDdS2-i6Q,42721 +botocore/data/devicefarm/2015-06-23/paginators-1.json,sha256=dsBpWrsUYvlphjtWSswDS3BYoWFzpq3sqwpOK4ER5vA,2870 +botocore/data/devicefarm/2015-06-23/service-2.json.gz,sha256=2-Jd_GYKirXp-EnGuroYr3dLwWCLBQ1MNaAHsg9i-VM,31135 +botocore/data/devops-guru/2020-12-01/endpoint-rule-set-1.json.gz,sha256=QXvxCtJM2GRp-G1EDl5T9KKF4H8oKJ0sxzzU-iXInK0,1153 +botocore/data/devops-guru/2020-12-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/devops-guru/2020-12-01/paginators-1.json,sha256=L8a_Vi9F4QUZiw34P5LPuf6ELhTE3_rKfSJTiF-Jsrw,3043 +botocore/data/devops-guru/2020-12-01/service-2.json.gz,sha256=XD1DDzgiY0Ew6fMOJZ6Q2FFgVEfw3kMyBMYnRavMSNE,25040 +botocore/data/directconnect/2012-10-25/endpoint-rule-set-1.json.gz,sha256=TRV9czAGsEnmP4rK1V0LjkbJjkmv-1t8_317R3S3KWg,1151 +botocore/data/directconnect/2012-10-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/directconnect/2012-10-25/paginators-1.json,sha256=xeMiI713ZrL0L4eTYXOT8iXsmsiguus1SZdRE7OWYCo,643 +botocore/data/directconnect/2012-10-25/service-2.json.gz,sha256=ov0-o4D1aTkSAHBObv1l3j_gY9FAAWYrLoIRg6QDMc4,19874 +botocore/data/discovery/2015-11-01/endpoint-rule-set-1.json.gz,sha256=KFF-AwUgxEPVV1ZSQUChChjlVs8LLOFIr_PA0eOwIXs,1151 +botocore/data/discovery/2015-11-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/discovery/2015-11-01/paginators-1.json,sha256=9TAcWsEEH768Rt1ArlrAzFDXYkp82xhdZ5Kh5LVrkmw,1221 +botocore/data/discovery/2015-11-01/service-2.json.gz,sha256=dslPdO5OB7k6wVEhKhD-CIo6S2nnHil9UpkpJJ_57QI,18784 +botocore/data/dlm/2018-01-12/endpoint-rule-set-1.json.gz,sha256=jBNWOeWjlUhQEFhFMhJtm0km0nNBoIhkWkBLeifjgWA,1232 +botocore/data/dlm/2018-01-12/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/dlm/2018-01-12/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/dlm/2018-01-12/service-2.json.gz,sha256=q1p63wjcUpNiOL919k_42RBzHFRoib7zmgNhjoT7tns,12071 +botocore/data/dms/2016-01-01/endpoint-rule-set-1.json.gz,sha256=i_vjon8xg-QwMChSi4ybi5_9qbMVzi2yzmYZMfR2zYE,1302 +botocore/data/dms/2016-01-01/examples-1.json,sha256=vV_0L6caRIbPqk4IOCZVqNc0xcbN77GsWwY3KaK0SA0,35747 +botocore/data/dms/2016-01-01/paginators-1.json,sha256=Y3SZaT-h8ftXIrqxEa-ITfC6Bin1V9vBGh6xMm3zXXQ,2332 +botocore/data/dms/2016-01-01/service-2.json.gz,sha256=Bl1WHKbEOXUBSwkXno1AYx7Q2K2kAoV3JcCoCqxDpIg,75963 +botocore/data/dms/2016-01-01/waiters-2.json,sha256=q_cVn5QLry8e5ZZquSwUs7tJo5LQnnQfswzEpsF45F8,11781 +botocore/data/docdb-elastic/2022-11-28/endpoint-rule-set-1.json.gz,sha256=pIJ1v03fWLvLT7qKLyVSNa62O4a0CZIyIu-xeHvLtqc,1294 +botocore/data/docdb-elastic/2022-11-28/paginators-1.json,sha256=9cdvHJPwLW6YNYyFzwyXh6EdyQFNv5_L5n-ZkzdhYm0,358 +botocore/data/docdb-elastic/2022-11-28/service-2.json.gz,sha256=SleEG_6-dHSlLWeHnIQXeJJIoF-GRynN1DDAAC3zupQ,4729 +botocore/data/docdb/2014-10-31/endpoint-rule-set-1.json.gz,sha256=5BpFZT7idrHrGEiq2ZCxwu6KIiq3oC491qo56zJhpjo,1232 +botocore/data/docdb/2014-10-31/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/docdb/2014-10-31/paginators-1.json,sha256=Lc8FwQvudtu-XOnFfOh-qM6pOrsnlRajew2PKY6ZtZk,2318 +botocore/data/docdb/2014-10-31/service-2.json.gz,sha256=YO8Y5aFTT7YzLU9sPWGuac6RaMByars53iq4O9hkzcU,31326 +botocore/data/docdb/2014-10-31/service-2.sdk-extras.json,sha256=U_PgxwtPhWl8ZwLlxYiXD4ZQ4iy605x4miYT38nMvnM,561 +botocore/data/docdb/2014-10-31/waiters-2.json,sha256=8bYoMOMz2Tb0aGdtlPhvlMel075q1n7BRnCpQ-Bcc1c,2398 +botocore/data/drs/2020-02-26/endpoint-rule-set-1.json.gz,sha256=Cg4ILls7KDu_M3UDXws-QHxZBuj8rwn-qgKxE88edno,1146 +botocore/data/drs/2020-02-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/drs/2020-02-26/paginators-1.json,sha256=j1Nq2iBDgHjtNTzLW5JGDB5BfwGLcqOX3kewE_mNNIM,1909 +botocore/data/drs/2020-02-26/service-2.json.gz,sha256=qR2YBAlc_PsdZEeIYzrlehkKlKgF9FF-TqoR7_h48j0,20605 +botocore/data/ds/2015-04-16/endpoint-rule-set-1.json.gz,sha256=i5tNkJJGkp40leZ6VLcd86APdqwy_QM859TLSWZswak,1143 +botocore/data/ds/2015-04-16/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/ds/2015-04-16/paginators-1.json,sha256=4ho4Q2kTYsj5kSg6PXMy--xzeeVlJYvK0Ha1c1L7yJ0,2390 +botocore/data/ds/2015-04-16/service-2.json.gz,sha256=T4bAMbgdcd58Kzm4Strqu9f5cBk6rORDV4DlAYqtKcA,25538 +botocore/data/dynamodb/2011-12-05/endpoint-rule-set-1.json.gz,sha256=tXrSDzlVJgdmKTKVP-ljToaJlqZEuMY52hIRo_D5I9c,1343 +botocore/data/dynamodb/2011-12-05/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/dynamodb/2012-08-10/endpoint-rule-set-1.json.gz,sha256=egZmfiYVnzh18bFGClQYxb45WPB9SEyisIa-jxSH2_s,1342 +botocore/data/dynamodb/2012-08-10/examples-1.json,sha256=cZ5PBzQtSA9b1ZN39RffvUM54Tqf_h5-AQA7zSBVK4Q,16947 +botocore/data/dynamodb/2012-08-10/paginators-1.json,sha256=U84oi-heJVXxjHM1enODt6qI5J117zh0YoM4BHwZZ18,1103 +botocore/data/dynamodb/2012-08-10/service-2.json.gz,sha256=Qy_0xAyA9pc-pNHCGP83InQPQj5TMBw_iiehJHefXsU,73740 +botocore/data/dynamodb/2012-08-10/waiters-2.json,sha256=G_iaXR3xZP3M8lpMR1olm2p-EvK6InTidNZnUUqPL70,727 +botocore/data/dynamodbstreams/2012-08-10/endpoint-rule-set-1.json.gz,sha256=j9Pot1CKGENQu7WYSm0zwqSweI07KTejvAQuJZuFo5w,1671 +botocore/data/dynamodbstreams/2012-08-10/examples-1.json,sha256=LF2m4pmyTs0G8NR6AhmybL0E2F9WHfnbxz5q31DtjAg,7693 +botocore/data/dynamodbstreams/2012-08-10/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/dynamodbstreams/2012-08-10/service-2.json.gz,sha256=AnFfjAYHv1gKDJmaffD4cWpR0GmU8tI7PBdL9hUnVQE,6799 +botocore/data/ebs/2019-11-02/endpoint-rule-set-1.json.gz,sha256=Qi6jDBG0yqSNnRB-qQEESgVHvW0FsS05pf1lClAfx00,1144 +botocore/data/ebs/2019-11-02/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/ebs/2019-11-02/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/ebs/2019-11-02/service-2.json.gz,sha256=nMsqNinfygt3FNYEIJBv4dyxFpSjI21dzAfDYbHnbL0,6371 +botocore/data/ec2-instance-connect/2018-04-02/endpoint-rule-set-1.json.gz,sha256=jyt1BCx4q0xzr4kb--zByteYsikDqKqcrQIkOUtEio8,1160 +botocore/data/ec2-instance-connect/2018-04-02/examples-1.json,sha256=Qnm4-ldcu-2O38JTe_w17UJWdblMaRBfIc8HyJ62DYU,1712 +botocore/data/ec2-instance-connect/2018-04-02/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/ec2-instance-connect/2018-04-02/service-2.json.gz,sha256=I3tidirlEDzScZps5q7SV2WClal36VCfTka0X0tOP6Y,2070 +botocore/data/ec2/2014-09-01/endpoint-rule-set-1.json.gz,sha256=VVI2PcMf80rkpviZLriTuKBrGBNxK5QQyeglER1O7ac,1237 +botocore/data/ec2/2014-09-01/paginators-1.json,sha256=XpA8TZvmBGGraKlRGE-U-YeLIBN1ZvbcyE8Wh8uuIDM,1271 +botocore/data/ec2/2014-09-01/service-2.json.gz,sha256=ruXTJ9qOrNbK4n7LBvObyYlfL0norpqCM7erHd64crM,71841 +botocore/data/ec2/2014-09-01/waiters-2.json,sha256=HG1xDu-8ICfvY1n_YV9i0ylufepFUYmDd0dLkQxwKuY,8548 +botocore/data/ec2/2014-10-01/endpoint-rule-set-1.json.gz,sha256=VVI2PcMf80rkpviZLriTuKBrGBNxK5QQyeglER1O7ac,1237 +botocore/data/ec2/2014-10-01/paginators-1.json,sha256=Uns0O6V6ZIXI09iZdCY77w-CBHbes_siW5vFU-bpE1w,1439 +botocore/data/ec2/2014-10-01/service-2.json.gz,sha256=_YML9e-Q7ekADYmMlXtGGbiG3ZM13bQ0Ulc7Qeap1_Q,75362 +botocore/data/ec2/2014-10-01/waiters-2.json,sha256=UDhKYGIrItEq2e56vKMh6yLdn_YfsfTYsmankCjsR3k,11040 +botocore/data/ec2/2015-03-01/endpoint-rule-set-1.json.gz,sha256=VVI2PcMf80rkpviZLriTuKBrGBNxK5QQyeglER1O7ac,1237 +botocore/data/ec2/2015-03-01/paginators-1.json,sha256=Uns0O6V6ZIXI09iZdCY77w-CBHbes_siW5vFU-bpE1w,1439 +botocore/data/ec2/2015-03-01/service-2.json.gz,sha256=Uueh2TgsK2gkDYicKQjUW-zJ4Vq5UvMdeJRejT38r-I,77885 +botocore/data/ec2/2015-03-01/waiters-2.json,sha256=UDhKYGIrItEq2e56vKMh6yLdn_YfsfTYsmankCjsR3k,11040 +botocore/data/ec2/2015-04-15/endpoint-rule-set-1.json.gz,sha256=VVI2PcMf80rkpviZLriTuKBrGBNxK5QQyeglER1O7ac,1237 +botocore/data/ec2/2015-04-15/paginators-1.json,sha256=Uns0O6V6ZIXI09iZdCY77w-CBHbes_siW5vFU-bpE1w,1439 +botocore/data/ec2/2015-04-15/service-2.json.gz,sha256=IlrtXo9TNTvOBXCng3n9-e-MOFhF0U6nCk9McEqWRgA,90171 +botocore/data/ec2/2015-04-15/waiters-2.json,sha256=1iUHJTDrTvb5_HbDMbVVzC4Ex1S97GZl-tnP70MaDEY,11546 +botocore/data/ec2/2015-10-01/endpoint-rule-set-1.json.gz,sha256=gLHDRKFUhoPWUl7LP4G2a-GBqcRRa-uWBHQZdkrSP4k,1391 +botocore/data/ec2/2015-10-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/ec2/2015-10-01/paginators-1.json,sha256=Vom5HeCc0UgDyEyYKw3piztolJ3IIxz_tIhEX61TvM8,1793 +botocore/data/ec2/2015-10-01/service-2.json.gz,sha256=WDugYGbW_rj1DPMyVZPntMbWgEWEYoSorK5d3s79cJQ,107913 +botocore/data/ec2/2015-10-01/waiters-2.json,sha256=8sXo9xWtm1IZMKcm9Ne42ha-9XDTVP_fZUejgA1tw3E,14823 +botocore/data/ec2/2016-04-01/endpoint-rule-set-1.json.gz,sha256=gLHDRKFUhoPWUl7LP4G2a-GBqcRRa-uWBHQZdkrSP4k,1391 +botocore/data/ec2/2016-04-01/examples-1.json,sha256=0xdUoNVzXNn5ZMmA_aiPwiQC68adrXjBJPhw3AzQC8M,109914 +botocore/data/ec2/2016-04-01/paginators-1.json,sha256=Vom5HeCc0UgDyEyYKw3piztolJ3IIxz_tIhEX61TvM8,1793 +botocore/data/ec2/2016-04-01/service-2.json.gz,sha256=LLNJOQm39jfTd9W7QyoLaMboFRDmpsF6mKwbt3y3DMI,112481 +botocore/data/ec2/2016-04-01/waiters-2.json,sha256=ZjSjdDS-pisO_MoRjsulXMshrcU5qNJd4m1bOBQ9mKQ,15259 +botocore/data/ec2/2016-09-15/endpoint-rule-set-1.json.gz,sha256=gLHDRKFUhoPWUl7LP4G2a-GBqcRRa-uWBHQZdkrSP4k,1391 +botocore/data/ec2/2016-09-15/examples-1.json,sha256=Dv18Ql8faOeBMQlenC7HBzlgrNQXNeokvLsyFf6Q_yY,110174 +botocore/data/ec2/2016-09-15/paginators-1.json,sha256=Vom5HeCc0UgDyEyYKw3piztolJ3IIxz_tIhEX61TvM8,1793 +botocore/data/ec2/2016-09-15/service-2.json.gz,sha256=A1kNIaEVyTlcL9QUFpNPW44so0UBe46UnjAX11S1YHA,114400 +botocore/data/ec2/2016-09-15/waiters-2.json,sha256=1ZtptOEInU4p-4ZQFXbC5lxZ8XNsseki72qxLO2dX4M,14875 +botocore/data/ec2/2016-11-15/endpoint-rule-set-1.json.gz,sha256=w-Vnk0mLGBMPnRAJ7f8BNAAHOPzXS3g6lhM6vaiUiGE,1233 +botocore/data/ec2/2016-11-15/examples-1.json,sha256=gB8-MuMSl9N4ic1oBYCv02B_YplxOdnKsfS7g5pY7hk,147949 +botocore/data/ec2/2016-11-15/paginators-1.json,sha256=XuOqBAiiZ68GT8ZzapMhjpKhELLF3Esc3530gDPgp00,26656 +botocore/data/ec2/2016-11-15/paginators-1.sdk-extras.json,sha256=s-xAN9v51q2N4UE-PQ_I-wK9PDbrSnwQlKx0yA_rmSk,249 +botocore/data/ec2/2016-11-15/service-2.json.gz,sha256=s8TRFRHgrzihfbrdJis-aEKL6a8nfCFeObVI91FPWzc,374269 +botocore/data/ec2/2016-11-15/waiters-2.json,sha256=4kAaAuL0ulzVcgZclPE2104MSuov-oDQdeylOucoBSM,18443 +botocore/data/ecr-public/2020-10-30/endpoint-rule-set-1.json.gz,sha256=ku0J0rBQTFUWlcsYX-Mb0VNiGHDJ9XU8VeI_emE4BgU,1152 +botocore/data/ecr-public/2020-10-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/ecr-public/2020-10-30/paginators-1.json,sha256=EEmON1DSCdAARd-o_S_RiZ6rXcWO8AZbYlx4UMyZEGE,711 +botocore/data/ecr-public/2020-10-30/service-2.json.gz,sha256=klhiJ0bLmMOceF5kUeF2GeDEtd-jX2-KRI9RBuAD0aU,10694 +botocore/data/ecr/2015-09-21/endpoint-rule-set-1.json.gz,sha256=8uQl-MPM_kBc23NQ8ueSeHrhCxndacqJbM9MJu-wf6k,1262 +botocore/data/ecr/2015-09-21/examples-1.json,sha256=cFx-qAY3SfNXEHCMe7I9RTWxV-Jtlo8moRHGDZ5UCAM,6603 +botocore/data/ecr/2015-09-21/paginators-1.json,sha256=e-DIZb41ldRHZVZQ3zsmFPN8ryW6ebsvakSH1kCiioA,1472 +botocore/data/ecr/2015-09-21/service-2.json.gz,sha256=hT0vok3IBAdrI7nVHV87DhLYcEB7glkelAOMHtpgRuk,21058 +botocore/data/ecr/2015-09-21/waiters-2.json,sha256=j4QQUhn_PYN87gWoaY1j1RR-lv7KjzPItwwn1WMYkB8,1482 +botocore/data/ecs/2014-11-13/endpoint-rule-set-1.json.gz,sha256=3QaKpaoj7Gl9hY662H0-O5SgDPwf7HwHrmEeTkBXFeY,1146 +botocore/data/ecs/2014-11-13/examples-1.json,sha256=Qp-rrnSHaDiVv4ESeJkTGfC1-guCjRc9B9LfiwjrMjg,36519 +botocore/data/ecs/2014-11-13/paginators-1.json,sha256=Y_nqEkKUMY3UhZ5D6DJ2QqxBHfnLkqM6FsOxPp5JUVE,1565 +botocore/data/ecs/2014-11-13/service-2.json.gz,sha256=0Oj9TwImCuADZjDOodS31gvjSogxb2F0mpHYJY7Hxbk,93742 +botocore/data/ecs/2014-11-13/waiters-2.json,sha256=F4d_a7_xVQIib5MpmSitTQBxupfL0Z9NqxOibIA6Igs,2246 +botocore/data/efs/2015-02-01/endpoint-rule-set-1.json.gz,sha256=JNPrPXBbjWGQOOEXa85IdlUa8OrhmHoO578Sg1OU3Sk,1157 +botocore/data/efs/2015-02-01/examples-1.json,sha256=0EFBCHNGLNS0ftGQqjngkhfTFYpw6E-7lnuAh-d6YKU,8825 +botocore/data/efs/2015-02-01/paginators-1.json,sha256=SKRuOWm1E5Nvvzppzjn-IeS1Lj0I3qSqvc9t9XtKpA4,878 +botocore/data/efs/2015-02-01/service-2.json.gz,sha256=itbQ6Q9gpi0KWX1RnghRsKHkr4I_Z17NbyEZApUNwwk,23019 +botocore/data/eks-auth/2023-11-26/endpoint-rule-set-1.json.gz,sha256=C-TDzP46ofV_oghgUwY2u11DafNI8mB9gIjT34arBu4,1127 +botocore/data/eks-auth/2023-11-26/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/eks-auth/2023-11-26/service-2.json.gz,sha256=cUXnvSJiewd2SBLCMjMuHuF9Bqerd63_Y_IYqXcjzAc,2343 +botocore/data/eks-auth/2023-11-26/waiters-2.json,sha256=tj1ZnaqhwmJkUEQlwH7wm1SqY3lg1BvZDfzfPaIgNrY,38 +botocore/data/eks/2017-11-01/endpoint-rule-set-1.json.gz,sha256=og5v-oXu11SvPX3x7DG0Zf9gwi1MQpRutCzY8mHkTvI,1267 +botocore/data/eks/2017-11-01/examples-1.json,sha256=vCT3MFB7D3tNzqaIdxd8nyDbt7hevsAvDE4RQTQcEKg,5021 +botocore/data/eks/2017-11-01/paginators-1.json,sha256=O8AjzL_WxvPulPVk4eLVY43BRSSmQpoV_Qo043qnAF0,2365 +botocore/data/eks/2017-11-01/service-2.json.gz,sha256=eN1wE4Cd4XIct-Hh_PKdZDJQjzhw2yFluhJsx7YqN_8,39036 +botocore/data/eks/2017-11-01/service-2.sdk-extras.json,sha256=pmn0V8Su5NiqW8Y3X-IBtzD1Bz_JANtKgU4fsr-i_bM,107 +botocore/data/eks/2017-11-01/waiters-2.json,sha256=j-ZLRcYn34oHDZY9xth7Vrz7q1eCNn_fzC1bK1WVVwo,4198 +botocore/data/elastic-inference/2017-07-25/endpoint-rule-set-1.json.gz,sha256=zNQeslPFq7TgAoVJjd1T1om6m4wXlWs99M75rrpx2O4,1159 +botocore/data/elastic-inference/2017-07-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/elastic-inference/2017-07-25/paginators-1.json,sha256=t1OswldbiUvR3fUJS_-AbIukdJ-LmbdPeYOPJ4m8jIw,201 +botocore/data/elastic-inference/2017-07-25/service-2.json.gz,sha256=N3P9Jgtp-RNGTFa8WWr6A9kJIT1RDcqdr23eg61wHw0,3025 +botocore/data/elasticache/2014-09-30/endpoint-rule-set-1.json.gz,sha256=wjCO32y7ySmNVf_Y7xQoVxlPh50pr6Ar_ZTzuX3UPM8,1241 +botocore/data/elasticache/2014-09-30/paginators-1.json,sha256=YkZxwpICpidoDrIimyr0yFGYg_T0emkSfhlNfPOfVMA,2171 +botocore/data/elasticache/2014-09-30/service-2.json.gz,sha256=xHh4D4laJ9mDwO1c7Hg2YtzOuXD9AKW5qnedP3Xk2Xg,22920 +botocore/data/elasticache/2014-09-30/waiters-2.json,sha256=mIVMN9SNrvDJ2iW_uXAA-N5ptxGmDw964Sv89zKAs-g,3719 +botocore/data/elasticache/2015-02-02/endpoint-rule-set-1.json.gz,sha256=cAjwZQ90H3JE0fWe-Sdfk14vhZbWolttp20TrT0vYaU,1238 +botocore/data/elasticache/2015-02-02/examples-1.json,sha256=iWpOlje8s2EFHlnYNgjHX2DpC7teIKmeA7f6e51u00I,111590 +botocore/data/elasticache/2015-02-02/paginators-1.json,sha256=XrsOWe2fflZLszEuZYsZjeXPNAAj5IjpOdfsse_Peg8,3401 +botocore/data/elasticache/2015-02-02/service-2.json.gz,sha256=pcDnSZEtg7EeoZgSSl9BC0ugwDYAucHXe62KFBwRmg0,55574 +botocore/data/elasticache/2015-02-02/waiters-2.json,sha256=N6NTYHqUoktWaIjapl3RDepPknxNlIbb8a0wnS0HB_E,5118 +botocore/data/elasticbeanstalk/2010-12-01/endpoint-rule-set-1.json.gz,sha256=ye1_tr-8azbCwusOvzao71HQhdYkKl1jayzroR1OOxQ,1244 +botocore/data/elasticbeanstalk/2010-12-01/examples-1.json,sha256=EuEpZEobhGxWPfRosGTFNWYs8zRFVtkQtLXD8M_5fm0,37449 +botocore/data/elasticbeanstalk/2010-12-01/paginators-1.json,sha256=qM8N07fmdTtnZBXFiyFeW31EjqjmDWb-viwc19UyF5o,934 +botocore/data/elasticbeanstalk/2010-12-01/service-2.json.gz,sha256=zzHehb8x_3akXgJnzML4jHTvAQDYNsaXoyom2i6qAIY,27746 +botocore/data/elasticbeanstalk/2010-12-01/waiters-2.json,sha256=nS1qW0cVQpjnVhpONryvuFWWW4JwJYSW82ooLigmCu0,1463 +botocore/data/elastictranscoder/2012-09-25/endpoint-rule-set-1.json.gz,sha256=CyxOLVYIfcaiT6Hyaney8mS3ptkzxFeB7v_diA2Th4Q,1153 +botocore/data/elastictranscoder/2012-09-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/elastictranscoder/2012-09-25/paginators-1.json,sha256=xHyxPQTUGKK7Vj_z_1E46xAI6BwZC8IvDFuZ3DXD4BY,559 +botocore/data/elastictranscoder/2012-09-25/service-2.json.gz,sha256=WYDayLML4p7efzp8uA9MYYF0GGboi8CWuKNQe-v1hps,35458 +botocore/data/elastictranscoder/2012-09-25/waiters-2.json,sha256=ePD8qEyUXJMnroVmvrubritF3re95gdBAETq6do-Uh8,613 +botocore/data/elb/2012-06-01/endpoint-rule-set-1.json.gz,sha256=4Z-YHsfXBIjUlWrYiXkYbRUoP8iviksaGcX1rfJdwXY,1248 +botocore/data/elb/2012-06-01/examples-1.json,sha256=NE6HcGypE87pOfvGkxKi_QD-UJ_qWHG2_Q9ynk6V9xA,30446 +botocore/data/elb/2012-06-01/paginators-1.json,sha256=udADJnjh3b-REUTKNlC9yYaRI6aOiXfx3demJA1Msxg,373 +botocore/data/elb/2012-06-01/service-2.json.gz,sha256=OSvQQiYAxt1w_4rfRnC2KGxxd_9lON78x6xYWXV2qQs,13205 +botocore/data/elb/2012-06-01/waiters-2.json,sha256=9NjB-6qbZ5pHxElH90T-4YPEBdXHCA9QHdcF96gTbP0,1527 +botocore/data/elbv2/2015-12-01/endpoint-rule-set-1.json.gz,sha256=nZqA-dkatzPyv5wJS-im5ZHf7HotEU7dbLuNOUiRJHg,1244 +botocore/data/elbv2/2015-12-01/examples-1.json,sha256=4Qxoz28hEDW8u1O7iGLKnH9NNb7Po5qybLFQtvtR7ss,44281 +botocore/data/elbv2/2015-12-01/paginators-1.json,sha256=wtIfS6A6vl7MQPq0zkaEk9BUn8YRov0XE-FywxEhMuE,1198 +botocore/data/elbv2/2015-12-01/service-2.json.gz,sha256=pQ-bQnHeyltvuE29XjrN9oWrYl4T5Im-rIMbqkAj5bo,27288 +botocore/data/elbv2/2015-12-01/waiters-2.json,sha256=k-g2ypXqfbW4ktwuK1iVKpApIncFhOPemhbs7pf7cW8,2371 +botocore/data/emr-containers/2020-10-01/endpoint-rule-set-1.json.gz,sha256=fNxJvo3PHnwAwcnH6ZkuMeqa9R7ytL83KHp_JduNvtA,1151 +botocore/data/emr-containers/2020-10-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/emr-containers/2020-10-01/paginators-1.json,sha256=26cnGGlpBmKVMgJfkr81lfRaQ5_RRLuM12WBr03bKCw,699 +botocore/data/emr-containers/2020-10-01/service-2.json.gz,sha256=-IPrtsSQ-OWIKmAOyQ60Hje1Z94higrL2gdj-o2hLVQ,9374 +botocore/data/emr-serverless/2021-07-13/endpoint-rule-set-1.json.gz,sha256=0QrST8w7Qggj50bAX2Fk2MRpPxFJajGeMAv7UbfKuYY,1153 +botocore/data/emr-serverless/2021-07-13/paginators-1.json,sha256=5pE-NkF3sK_pQXzlq0oMW3Cu-RevAHLijl2OpXvTez4,355 +botocore/data/emr-serverless/2021-07-13/service-2.json.gz,sha256=rZs77Epf1NQKOS7Icc8QUawzixg0sEGKM13QeV95gcQ,9557 +botocore/data/emr/2009-03-31/endpoint-rule-set-1.json.gz,sha256=MjKV6muuN4bagKad5U2w4gmIo-0e1HIzg6EZysfN3Eg,1241 +botocore/data/emr/2009-03-31/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/emr/2009-03-31/paginators-1.json,sha256=4EzVWE6TiQt5Mklp197KH8t17OiwaOVgVnBGK4y_HiQ,1357 +botocore/data/emr/2009-03-31/service-2.json.gz,sha256=QcL6Uv0kfOpM_igAhkhWOjRpDqT5j46ky8tlBB8rFV8,44371 +botocore/data/emr/2009-03-31/waiters-2.json,sha256=pMh5RSVHgFU-DlrH0dSf4IibHo9Hddmg9DvaR4a0Z90,2073 +botocore/data/endpoints.json,sha256=D6e1x8X9pRteWgoyBzEVSQzF524UWPP5A1xSrWVilK8,840879 +botocore/data/entityresolution/2018-05-10/endpoint-rule-set-1.json.gz,sha256=SJZZSciSRHqQV2SgBsecsD7txWbG9JR509_gkIthnXU,1305 +botocore/data/entityresolution/2018-05-10/paginators-1.json,sha256=Qcy8mHZsz37omdAUJ0BlVtJzrd7e4xK7eM0A2Qf3wJA,1067 +botocore/data/entityresolution/2018-05-10/service-2.json.gz,sha256=MdXehWd-ffz2xDbFcKfFk-i1Q1jhW6LUJnKIIvZNXt8,10504 +botocore/data/es/2015-01-01/endpoint-rule-set-1.json.gz,sha256=Mg2d2-xs-OQTgh99lQHJs7ZMTP_rCalOyNCMH3_c7xo,1313 +botocore/data/es/2015-01-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/es/2015-01-01/paginators-1.json,sha256=sbfve7QYejJgHClHTY4PgdwH4A-PJlY2y0XZ0qRCq9Q,1022 +botocore/data/es/2015-01-01/service-2.json.gz,sha256=cE9OI9foxLiqRgUFaHPVTzBSjzXBuyNmBELn3O2vYyc,28408 +botocore/data/events/2014-02-03/endpoint-rule-set-1.json.gz,sha256=_dCe8dGudEV9I6xkFAE12N4HFIzP4qwR4ysBU5Ax4d4,1856 +botocore/data/events/2014-02-03/service-2.json.gz,sha256=xvxFaAxroTlTGIC68rFcbNq2pDUVnnybppEn4fJwQCQ,5254 +botocore/data/events/2015-10-07/endpoint-rule-set-1.json.gz,sha256=KFXPrfq4P5wTD8DHrC5GKyqXU5rvBvGKqzy2RMJ6JMQ,1741 +botocore/data/events/2015-10-07/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/events/2015-10-07/paginators-1.json,sha256=A4gA5VY4LAnP_3iCOI-P0-c5nVH5ntM9hOh3gytyGco,504 +botocore/data/events/2015-10-07/service-2.json.gz,sha256=KhT_XvPCjXTcajFYElBRCnjBmK0yhLP1Wi-ZFMtWwI4,33029 +botocore/data/evidently/2021-02-01/endpoint-rule-set-1.json.gz,sha256=j_kBr0SJ91Se47IsmPcM11LVbtzHOuhxZnmlG9b1f_g,1148 +botocore/data/evidently/2021-02-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/evidently/2021-02-01/paginators-1.json,sha256=dzsz3rOFQc5MqVrha2K97L1ooI2e1kt8Om55efyV-tI,1016 +botocore/data/evidently/2021-02-01/service-2.json.gz,sha256=kr_hAqdz_4xNoI1X50L11590ijj-JN1FEC8vFalQDyo,20415 +botocore/data/finspace-data/2020-07-13/endpoint-rule-set-1.json.gz,sha256=nivpO9-1NK4LEbDhdQuFCIUwYsb7xUcfT0pKxs60nlc,1153 +botocore/data/finspace-data/2020-07-13/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/finspace-data/2020-07-13/paginators-1.json,sha256=2RzSHda8vNoQX1L1pkYSwHfCF6Us0IKOrXdsXe-ZHkU,851 +botocore/data/finspace-data/2020-07-13/service-2.json.gz,sha256=0ZDW0A-0GO-zaEjeRzVR0vCuuw0vTZf2EXyCeNbphlM,14476 +botocore/data/finspace/2021-03-12/endpoint-rule-set-1.json.gz,sha256=OSvK3IK4F9lxGZakg_uZWwmIWpqGwVQ072m-AsCFpTA,1150 +botocore/data/finspace/2021-03-12/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/finspace/2021-03-12/paginators-1.json,sha256=S_FGEtC07GgFCRSKmv_l4RhRBCFmOEmIsQl7QfDI678,197 +botocore/data/finspace/2021-03-12/service-2.json.gz,sha256=HOYFMIyZlU4gtWl9RdX_0OzLII9ydlXrfT6sLu_0mWs,29010 +botocore/data/firehose/2015-08-04/endpoint-rule-set-1.json.gz,sha256=SvgHHgMYNA7Cjxp8vOTWR5W-LyU0EUk8GPQbDHXOZ4c,1150 +botocore/data/firehose/2015-08-04/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/firehose/2015-08-04/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/firehose/2015-08-04/service-2.json.gz,sha256=Ej0f5Ye21M-9FmYgE4uRaESyktnvCsubZvXmWD06WUQ,28004 +botocore/data/fis/2020-12-01/endpoint-rule-set-1.json.gz,sha256=XLcrVUMpaNtfr0J2YQJ7-1n1uENlqiV-tZhC4a7wf0A,1232 +botocore/data/fis/2020-12-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/fis/2020-12-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/fis/2020-12-01/service-2.json.gz,sha256=YFqO5z2PeKIfHvqQfIC4GaYQSNQ3WwxjRe8lFpSzT-M,8064 +botocore/data/fms/2018-01-01/endpoint-rule-set-1.json.gz,sha256=66G2436jK74UyYhfnEMV_k0TlsT47327F8Aj2mmr0Xs,1147 +botocore/data/fms/2018-01-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/fms/2018-01-01/paginators-1.json,sha256=Nv9OHpCiWQyuj5sj_Pz-0TjbnmtiMCR0tuySMApzYjM,1470 +botocore/data/fms/2018-01-01/service-2.json.gz,sha256=wa5zFP7u61MmboS1hclPMe6tUlNenJgSLBEF-TBb6fc,31007 +botocore/data/forecast/2018-06-26/endpoint-rule-set-1.json.gz,sha256=4oqyvuxp-k5ETYng4p8v-CMSDxrIWD2ukkDw3dI6ezk,1147 +botocore/data/forecast/2018-06-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/forecast/2018-06-26/paginators-1.json,sha256=uwjfu4LU_nDuv9woqU_mcL_58oVcFi8QfUSAtQycpA8,2508 +botocore/data/forecast/2018-06-26/service-2.json.gz,sha256=tVlk-S1n2A4Li28bTDPjnfOnK8MLTQLe3PUJheFmEPE,40055 +botocore/data/forecastquery/2018-06-26/endpoint-rule-set-1.json.gz,sha256=sM0sP08K-qeaWfQDsj3n2yU2_rznMod4o62kZ_fSgd8,1151 +botocore/data/forecastquery/2018-06-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/forecastquery/2018-06-26/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/forecastquery/2018-06-26/service-2.json.gz,sha256=-VuDLjO7aZzratgFHNsosx9LtU6F9-9zKOsVDfYrDHA,2160 +botocore/data/frauddetector/2019-11-15/endpoint-rule-set-1.json.gz,sha256=hH2tQRK-KwLrbMkCyflcJuF0W7Dl1s4k5Js1HHk0qmk,1151 +botocore/data/frauddetector/2019-11-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/frauddetector/2019-11-15/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/frauddetector/2019-11-15/service-2.json.gz,sha256=xOHDs6JBvxagvoKVh1qeJr8yI5S9ck4WUuElasXl7HE,24330 +botocore/data/freetier/2023-09-07/endpoint-rule-set-1.json.gz,sha256=w_E-j2EayRB5QIeLvJGN1IMxCD7cTUyXcpdFjJ8gSB4,1422 +botocore/data/freetier/2023-09-07/paginators-1.json,sha256=3Gxmktm90Wak1Jk06fQ2wTZgX1ago6yInZZwNCk4S34,197 +botocore/data/freetier/2023-09-07/service-2.json.gz,sha256=4Qq_TAnPOx6lSMDKQXiqzPRcqULauJcvIXVprrSi7rw,2803 +botocore/data/fsx/2018-03-01/endpoint-rule-set-1.json.gz,sha256=dDWCEBqNdKTUXJoI8bo9XzXreMBb9cKcIGLtYfZe33U,1147 +botocore/data/fsx/2018-03-01/examples-1.json,sha256=Ys4PS4GcrfV3F5Lg4hkaZgyemGgNKNLYSm-uepLDkR4,14242 +botocore/data/fsx/2018-03-01/paginators-1.json,sha256=6BwGoMkBZ7b2Gmata3ZEM1Sgvsnbcr3h2G-e6622ssA,884 +botocore/data/fsx/2018-03-01/service-2.json.gz,sha256=Ig2v2kgZ7x4ALMSkP_-ghxoIeEl2H8_q_IUp7nfClZA,71019 +botocore/data/gamelift/2015-10-01/endpoint-rule-set-1.json.gz,sha256=qaU7s8GNR4vqURLGJZ7OkAFuVrG2XDPjkc1KSGrpbMA,1150 +botocore/data/gamelift/2015-10-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/gamelift/2015-10-01/paginators-1.json,sha256=uTzO-1LPEaQ93htez-2V-DbPB4yaNRRqbzQ5qFvA3RY,3728 +botocore/data/gamelift/2015-10-01/service-2.json.gz,sha256=ED0rr6bgNpAPa9luJWCT31cXQx6yS6KJsCxSS9y5Oxw,87868 +botocore/data/glacier/2012-06-01/endpoint-rule-set-1.json.gz,sha256=dYzXnYjPMHZi3n5NrN1yDndhqMqOe3PaU_kh6LFd8hM,1393 +botocore/data/glacier/2012-06-01/examples-1.json,sha256=hR-1NmWo9lL0Cdqnr6x95Ywu_VfJucv0T4OveUp-S4o,27536 +botocore/data/glacier/2012-06-01/paginators-1.json,sha256=RAeqGFOs4GRiC-DuphMOBHWljwDfqBQINYf1qA2LbNA,628 +botocore/data/glacier/2012-06-01/service-2.json.gz,sha256=tjVY6liLICOT_C9I9exRTVnORNHbtli9M81Tboe_6C0,20913 +botocore/data/glacier/2012-06-01/waiters-2.json,sha256=hzoyJJT1wJh9lq1_z4MK2ZBj98TGRhroii0kbeFXnJw,785 +botocore/data/globalaccelerator/2018-08-08/endpoint-rule-set-1.json.gz,sha256=bTTgc_lR8z-oQEXKvjFoNFDAdfM08PBE_pe5Ovi2Bd8,1156 +botocore/data/globalaccelerator/2018-08-08/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/globalaccelerator/2018-08-08/paginators-1.json,sha256=Exal9Oqocr6pKQ_T5yEFYLXwm0BSxPYcuZTjZL2_8x8,2016 +botocore/data/globalaccelerator/2018-08-08/service-2.json.gz,sha256=TQDsCuTR-8t7Wwanv_oaflk31FvVdNEmnN8Em_nWuBg,21456 +botocore/data/glue/2017-03-31/endpoint-rule-set-1.json.gz,sha256=6AaYdZ_w4YNucDAOHzM5njy4qmZI9iUnm95AgP-W-Vs,1147 +botocore/data/glue/2017-03-31/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/glue/2017-03-31/paginators-1.json,sha256=4jJFU3pydUY0CCJ_kaSVf-eVMySeoVfQZmWY0bxlhhk,3219 +botocore/data/glue/2017-03-31/service-2.json.gz,sha256=RZvOJ0kt35EidYsobuL0_zQXdDyYLJJXJxbQwcKvxEI,125142 +botocore/data/grafana/2020-08-18/endpoint-rule-set-1.json.gz,sha256=WDolHix0Gqw_WTJIvzQOrmjjU1LNfU117crfYzk3sCs,1147 +botocore/data/grafana/2020-08-18/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/grafana/2020-08-18/paginators-1.json,sha256=TknmDGPXs4-ZhRKHzftV-tvKqn14GJC54u772eSD3aw,528 +botocore/data/grafana/2020-08-18/service-2.json.gz,sha256=DzLHD_2ZkaGmciMlFUJlIoFAY8beAXbmrcG4ldOd_Gc,12440 +botocore/data/greengrass/2017-06-07/endpoint-rule-set-1.json.gz,sha256=Fj_czKHQ0OHj7xb6WV-Q-Yxne7v9Wq1yztxpzCiD4Wk,1356 +botocore/data/greengrass/2017-06-07/paginators-1.json,sha256=LphzapxioJkdlNs-zU4IVmg_pjswwy8RuDPq79sbW64,3366 +botocore/data/greengrass/2017-06-07/service-2.json.gz,sha256=vxHKT3yikNbr4iGEyWxTYhvRWb9tWcxtm4HOYq-__sU,17141 +botocore/data/greengrassv2/2020-11-30/endpoint-rule-set-1.json.gz,sha256=Fj_czKHQ0OHj7xb6WV-Q-Yxne7v9Wq1yztxpzCiD4Wk,1356 +botocore/data/greengrassv2/2020-11-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/greengrassv2/2020-11-30/paginators-1.json,sha256=geNY9pksg1eDuJ9mpqk1iee_t8zQuFBrBG_O6eaZ7GU,1283 +botocore/data/greengrassv2/2020-11-30/service-2.json.gz,sha256=rOA5pdUjiKLlUVeJli7PTSPDAPU00oy-xqe2z5MY3z0,19560 +botocore/data/groundstation/2019-05-23/endpoint-rule-set-1.json.gz,sha256=w3D9vnHFtLBdSO_NkSAIc8GJ1Tf-Q4S2z0ER0CJW2bQ,1153 +botocore/data/groundstation/2019-05-23/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/groundstation/2019-05-23/paginators-1.json,sha256=4_ogVwU_XXx--s-8FB9fXMd5kIjdEXBdN6iBd04Kmlk,1236 +botocore/data/groundstation/2019-05-23/service-2.json.gz,sha256=PypufUu9HOKiCQ9ZnCZMzwQ1m_EgdreVenAJ_v7aLi8,13419 +botocore/data/groundstation/2019-05-23/waiters-2.json,sha256=fuayBSt0gQV3HjjFxrqZgUCLSo6DxBG5qb-ASxS3oKE,534 +botocore/data/guardduty/2017-11-28/endpoint-rule-set-1.json.gz,sha256=Fkeaqv_dmVsN57bGkqDAv24ELFpmb9WX5LCTLz6WTH8,1237 +botocore/data/guardduty/2017-11-28/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/guardduty/2017-11-28/paginators-1.json,sha256=cwDvPmlbwnBGCv5y3JIbAjS7BjRfPSAYO_ImStsJM-A,1699 +botocore/data/guardduty/2017-11-28/service-2.json.gz,sha256=nVP9wllzsO2diBVU7zZGCBzAm2z3-31wEhYTZV5luO0,42194 +botocore/data/health/2016-08-04/endpoint-rule-set-1.json.gz,sha256=1kCojhnhcnFNI48vy_TmzaURrmQr6kODnA9Lu-_Qdcw,1297 +botocore/data/health/2016-08-04/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/health/2016-08-04/paginators-1.json,sha256=yiHNcdPNOcqngUnAvp1BUD8e9oWSgqGS-T0Esl6r8vI,1397 +botocore/data/health/2016-08-04/service-2.json.gz,sha256=j8DF2C2hDWGj-QIGMcu_2g18mDl5QXoF0N2WttrSEio,10158 +botocore/data/healthlake/2017-07-01/endpoint-rule-set-1.json.gz,sha256=2SW4oPu0GLquXoH764YNCn0J15X8Yt19NHSSiSMP28A,1151 +botocore/data/healthlake/2017-07-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/healthlake/2017-07-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/healthlake/2017-07-01/service-2.json.gz,sha256=iGWobP4tnNO1Ke66IauSwd6lIA0tT1SDKcloYwSSOU4,5926 +botocore/data/honeycode/2020-03-01/endpoint-rule-set-1.json.gz,sha256=AccGX4C5DGsCNd_LCsNqIMmWZGB1SSBTGEg3Z1Ax_rw,1149 +botocore/data/honeycode/2020-03-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/honeycode/2020-03-01/paginators-1.json,sha256=cnk1BhE_liXxeC-i488hcyCnoy0Q33DKvCjuPshM3mY,639 +botocore/data/honeycode/2020-03-01/paginators-1.sdk-extras.json,sha256=GKeBufTakf_0HwoEF4uO9EJ6MUkXZ1A84t9SkfmhVLo,550 +botocore/data/honeycode/2020-03-01/service-2.json.gz,sha256=WDbklSyJkm_YXcUqSRkYg0t1uRPSgiKvIJuvbJ-puQg,11917 +botocore/data/iam/2010-05-08/endpoint-rule-set-1.json.gz,sha256=__ppHFRLZvfh5FTKudya0vOjwQDhFVR4DXQKyQe5M9M,1720 +botocore/data/iam/2010-05-08/examples-1.json,sha256=T5EqrFFZBiVlL9dsN-T5DnigU1UnMSXfVVwBK00AWrU,48537 +botocore/data/iam/2010-05-08/paginators-1.json,sha256=Mrjh9WIhO3YlPK04LELNlBGOWlr4EOWDPV22S4XlPM4,7036 +botocore/data/iam/2010-05-08/service-2.json.gz,sha256=sloIqTxCceyV3Nn0H14zGsrA1GjqD_s9UPd_PMoTg8A,69675 +botocore/data/iam/2010-05-08/waiters-2.json,sha256=sC6nS5oxMDEinb4z8GAMfZvFfPVWBzL_j1chnAT_z4k,1462 +botocore/data/identitystore/2020-06-15/endpoint-rule-set-1.json.gz,sha256=1YcboLoORcr1UWYTVSQbLH85GQXITOQxqv_u7xoubhA,1242 +botocore/data/identitystore/2020-06-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/identitystore/2020-06-15/paginators-1.json,sha256=lpGJQxUC8FqJ_JuWaDSHw3cMW677pwZDQpoWRcBvA0M,704 +botocore/data/identitystore/2020-06-15/service-2.json.gz,sha256=mOQEqCm7K2x6gXw6gbecC31lmOfL18qzjxSOtYg9YUQ,7351 +botocore/data/imagebuilder/2019-12-02/endpoint-rule-set-1.json.gz,sha256=FTGBbX_Go2qI293nqF11pV16nmT0vbQKneRI1gLIS5w,1239 +botocore/data/imagebuilder/2019-12-02/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/imagebuilder/2019-12-02/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/imagebuilder/2019-12-02/service-2.json.gz,sha256=P4HBzyoFIZNQANYxq3mmGPLsrjm-Wq2ndAapMtHq5g0,39274 +botocore/data/importexport/2010-06-01/endpoint-rule-set-1.json.gz,sha256=h2mVrPZMoyc3KSeMCXovGDRHu9ikT5AU6waot89Mu9I,1599 +botocore/data/importexport/2010-06-01/paginators-1.json,sha256=Etmobek-KI_4Gx8vLRBQsy6nYiRvog88hJCCXuRESZQ,215 +botocore/data/importexport/2010-06-01/service-2.json.gz,sha256=34s8XG_gDkPgaGisOcV3Ol9s4OxJIliZiX6SRDhGGIE,4733 +botocore/data/inspector-scan/2023-08-08/endpoint-rule-set-1.json.gz,sha256=3fyfH4eZVk5tseS2tGwopxuaS8k9YfCs6GkFRvidRCA,1305 +botocore/data/inspector-scan/2023-08-08/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/inspector-scan/2023-08-08/service-2.json.gz,sha256=xGYw-b6uBFfTdCZk0JZN12HHhAR6qEeFClGTZPZRZKg,1460 +botocore/data/inspector/2015-08-18/endpoint-rule-set-1.json.gz,sha256=DAm4ok1BoyBs_I65TdFDj3bALqmwS7lpyYCIUprUsX8,1147 +botocore/data/inspector/2015-08-18/service-2.json.gz,sha256=z58qkXNomZN4gPx6q2Mwzxo1z3GyMOgssjgGmryPk0w,8021 +botocore/data/inspector/2016-02-16/endpoint-rule-set-1.json.gz,sha256=8gcmjTfG98QIgrAUzsUHG_9boEHtJUW8MNzghSyNMbw,1148 +botocore/data/inspector/2016-02-16/examples-1.json,sha256=EoIoRt_vSBIFaQ8UnXLRGL2W5H50CW9rscWvZ012w-g,36903 +botocore/data/inspector/2016-02-16/paginators-1.json,sha256=weo6-A-gbXJmE6B8bFERy0jQdJHvIDANiZLITbP_9ZQ,1610 +botocore/data/inspector/2016-02-16/service-2.json.gz,sha256=b5uamQBfJWzj0wMjn1DfzKbYh8VMNNaNCchM6ngcZLA,14137 +botocore/data/inspector2/2020-06-08/endpoint-rule-set-1.json.gz,sha256=fsfu5uC2a0zjkj_BFVMB7T8uS1SWXo4vCP8VyJt13BA,1150 +botocore/data/inspector2/2020-06-08/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/inspector2/2020-06-08/paginators-1.json,sha256=d7fW3sKmKYnymyTr0OmtTOUjeKmzAw_2Hicni7OLJBI,1668 +botocore/data/inspector2/2020-06-08/paginators-1.sdk-extras.json,sha256=WXkFBTPQczZBVGrBAb2IoUJRliU1uNg-m8znDFawOOA,287 +botocore/data/inspector2/2020-06-08/service-2.json.gz,sha256=tbybXSD7WTPoGj4_38oaFGq3o2CSxaQ9QTjmKXamCss,29451 +botocore/data/internetmonitor/2021-06-03/endpoint-rule-set-1.json.gz,sha256=GJKitqG1kz-R2OH2OHY3bWMw19iO2VPpeOh-GyTwzds,1157 +botocore/data/internetmonitor/2021-06-03/paginators-1.json,sha256=qHe3DMcNw2chD8MbCG-Fftq7qujwCjc-Z73d2enEcGk,357 +botocore/data/internetmonitor/2021-06-03/service-2.json.gz,sha256=3o--5XcsyAwxCPzFBsFJRbIFC8Ew7ZeR46N5o5AtWD4,11946 +botocore/data/internetmonitor/2021-06-03/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/iot-data/2015-05-28/endpoint-rule-set-1.json.gz,sha256=P__r7BnP_kVo2JnGj9y4-qg5nea43E0Z9bTzL5xbpbI,1487 +botocore/data/iot-data/2015-05-28/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iot-data/2015-05-28/paginators-1.json,sha256=FCM_y5QY56bw4TOgH3_OTBsnKj2PjI3ObCOOnKtsq80,201 +botocore/data/iot-data/2015-05-28/service-2.json.gz,sha256=ayS9la6XJI1Ja_MqH3zPtZjqWebskv0EuhODN16WZxA,4271 +botocore/data/iot-jobs-data/2017-09-29/endpoint-rule-set-1.json.gz,sha256=5_7GLkPp-ldRjkJIOh9uXkQZz5HPz11C7cT3vffNBSQ,1152 +botocore/data/iot-jobs-data/2017-09-29/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iot-jobs-data/2017-09-29/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/iot-jobs-data/2017-09-29/service-2.json.gz,sha256=o1BIZd7JspDOs59DrntRDN8vxonuUNFh3N0ZhGPDvv4,3451 +botocore/data/iot-roborunner/2018-05-10/endpoint-rule-set-1.json.gz,sha256=v1eO8AePuYZZh9dlymo5Vqj-wwIc9mDIUU2DGh3YlHs,1293 +botocore/data/iot-roborunner/2018-05-10/paginators-1.json,sha256=C4rOtkb9aP7qFipc6j8SWnGmXyNw-s0qPAzJxnwkuKQ,681 +botocore/data/iot-roborunner/2018-05-10/service-2.json.gz,sha256=Ari5cG5Md1UsaHZOdVCS5c5hOyFsjV7_WENzJkuFhE4,4098 +botocore/data/iot/2015-05-28/endpoint-rule-set-1.json.gz,sha256=2OGUYz95R_Ns1ZLSlDa4Ya6KmuImFDrthObGQe80TO8,1268 +botocore/data/iot/2015-05-28/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iot/2015-05-28/paginators-1.json,sha256=qx5Q_h0GeGePfyVFlpaAHq-3_gedN2xmolXIa6rZhoQ,10330 +botocore/data/iot/2015-05-28/service-2.json.gz,sha256=IUUXCYxb4Gl9SrX8Eb4Bk5x4yZuB7znlCVB7Rb_P_Jk,109510 +botocore/data/iot1click-devices/2018-05-14/endpoint-rule-set-1.json.gz,sha256=MyFVug1WQEYifUbKU0OrKTjypb4MCwvnMI2JpGMTLn0,1158 +botocore/data/iot1click-devices/2018-05-14/paginators-1.json,sha256=tZrEjZru_lPLHHvNWfoSGdewQrMSASM4QoteB9gmBuQ,349 +botocore/data/iot1click-devices/2018-05-14/service-2.json.gz,sha256=T8Qa30-xEGYbipRfgWnB3S72XgzLjvb1p8NLTSeLybo,3814 +botocore/data/iot1click-projects/2018-05-14/endpoint-rule-set-1.json.gz,sha256=bci6YE6Be351vPiNlrRazUy8euQpMikOG8CAj65Ab1k,1159 +botocore/data/iot1click-projects/2018-05-14/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iot1click-projects/2018-05-14/paginators-1.json,sha256=pPCk6aIAl86n6twV40lkG4ktlf2QMoD0hsOjjiUMwHc,353 +botocore/data/iot1click-projects/2018-05-14/service-2.json.gz,sha256=s1ChFk2dxcN-xvftJRaBZAz8uVOPk77uYddXBoj2Wn8,4255 +botocore/data/iotanalytics/2017-11-27/endpoint-rule-set-1.json.gz,sha256=LibCVDpnW04tFq7btK9W52EoPmJqY_boPKA192ku3kM,1151 +botocore/data/iotanalytics/2017-11-27/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iotanalytics/2017-11-27/paginators-1.json,sha256=X_pDdHN034STvHt8ULopV8fu0e5gyFt8Z1dj17AfZQY,895 +botocore/data/iotanalytics/2017-11-27/service-2.json.gz,sha256=MFt16vUyWdE5DG051CvzoqRlfSJRtSB2a51hwyc3Ldg,18162 +botocore/data/iotdeviceadvisor/2020-09-18/endpoint-rule-set-1.json.gz,sha256=AGmACRIo68qVnUTuVNr_oU-5GJ8r6-lxBMh51vk2Aek,1156 +botocore/data/iotdeviceadvisor/2020-09-18/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iotdeviceadvisor/2020-09-18/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/iotdeviceadvisor/2020-09-18/service-2.json.gz,sha256=N4Faff04s4rLwwAteqZnZkEA4S4VEkhWdM89yqdDV-8,5170 +botocore/data/iotevents-data/2018-10-23/endpoint-rule-set-1.json.gz,sha256=LMf-jOKA-I0JbjhBWPTOL9blVRsovfBkImoRJq3QJUY,1151 +botocore/data/iotevents-data/2018-10-23/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iotevents-data/2018-10-23/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/iotevents-data/2018-10-23/service-2.json.gz,sha256=n_0V0cCkvYW2YRJzIk5EPRJ0DlEQGRrBk9laIExndts,6392 +botocore/data/iotevents/2018-07-27/endpoint-rule-set-1.json.gz,sha256=ihxoSoNKFqGQWyzIJVwU-qqIPxQfVn8sl1Hls1tTp3c,1147 +botocore/data/iotevents/2018-07-27/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iotevents/2018-07-27/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/iotevents/2018-07-27/service-2.json.gz,sha256=rBIqzNpn0lflcGqxGgpFjXHeNKTzwSm2oNxYkHiizzQ,16084 +botocore/data/iotfleethub/2020-11-03/endpoint-rule-set-1.json.gz,sha256=x6-3VWg31viNUgfex988Aino1HmWNiNKBedpuk6DKaA,1153 +botocore/data/iotfleethub/2020-11-03/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iotfleethub/2020-11-03/paginators-1.json,sha256=E1zXLzaqEyOgzwC0sWIIHboXro29efEvDgF1aA3ZaB8,170 +botocore/data/iotfleethub/2020-11-03/service-2.json.gz,sha256=WaDUjAeW4Z58YtXSeDfMfVYdcIFpwjga3aVHQ8OuHSU,2598 +botocore/data/iotfleetwise/2021-06-17/endpoint-rule-set-1.json.gz,sha256=T6JndnzrAwsmFMnWqH6GBnckQcl4e4zljSdDPTa8y6U,1153 +botocore/data/iotfleetwise/2021-06-17/paginators-1.json,sha256=kxpQ4LWY9KdLE_GD46e2BB70WMq6A8kw0BPiy3G_irc,2261 +botocore/data/iotfleetwise/2021-06-17/service-2.json.gz,sha256=brhEFowe_IbNVbq_eT5aWJWfdCyE5W_u84XM26KAGmk,23711 +botocore/data/iotfleetwise/2021-06-17/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/iotsecuretunneling/2018-10-05/endpoint-rule-set-1.json.gz,sha256=2Wq4LKTUs9-ecq7j_PzOfoscNqMtMHjZ1I7hwOYX-P4,1157 +botocore/data/iotsecuretunneling/2018-10-05/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iotsecuretunneling/2018-10-05/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/iotsecuretunneling/2018-10-05/service-2.json.gz,sha256=Icd4LXbSiNu0nuGWK9d7HBsUDFktmij2zDrsgQoh0rw,3409 +botocore/data/iotsitewise/2019-12-02/endpoint-rule-set-1.json.gz,sha256=Wb0o9Yu6Y13bvsUgHrG_T41-klqZjyOsOlnZpHUnsI8,1152 +botocore/data/iotsitewise/2019-12-02/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iotsitewise/2019-12-02/paginators-1.json,sha256=gjbjBAp-uwTGWdnjWLKkIdB50irwsCcdCa7cn60GBG0,3804 +botocore/data/iotsitewise/2019-12-02/paginators-1.sdk-extras.json,sha256=YRdxHylWCPUlQDFxU2BHajclulJZBfY-NpWldEBwzEU,159 +botocore/data/iotsitewise/2019-12-02/service-2.json.gz,sha256=tCFPSZtaAcVND87Vw5YmsrSuRETzmsLi_UwfA55-6gA,45429 +botocore/data/iotsitewise/2019-12-02/waiters-2.json,sha256=qVN5Ie90YeUrNZqZKgckPkyTBYdKjgEbbrlsx-3RXUw,2237 +botocore/data/iotthingsgraph/2018-09-06/endpoint-rule-set-1.json.gz,sha256=QokkIDih7gGo3mmGCEyyj2iBd3WrSWrBKdKBdWjJXNA,1218 +botocore/data/iotthingsgraph/2018-09-06/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iotthingsgraph/2018-09-06/paginators-1.json,sha256=3329WY0CXoFVg2osoDFw4kPWYxWK559asARwgffXvbw,1730 +botocore/data/iotthingsgraph/2018-09-06/service-2.json.gz,sha256=2Vtl6oz89oanBlyYSefgFyj8n2hzYuFGIqu880Jl8tI,10349 +botocore/data/iottwinmaker/2021-11-29/endpoint-rule-set-1.json.gz,sha256=1IXjOiSWBna-yW_DVkCVbKpvH3E-67lkEyF-BdHr2Qc,1154 +botocore/data/iottwinmaker/2021-11-29/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iottwinmaker/2021-11-29/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/iottwinmaker/2021-11-29/service-2.json.gz,sha256=OvGJEYxV3PxlUTt5ujddIAU3o0YGcoANZH9m5RvsCs4,16769 +botocore/data/iottwinmaker/2021-11-29/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/iotwireless/2020-11-22/endpoint-rule-set-1.json.gz,sha256=NwdJeetu7EKBbEl3okUfAboHSIFQKOGN6W1d0rvZy6s,1155 +botocore/data/iotwireless/2020-11-22/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/iotwireless/2020-11-22/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/iotwireless/2020-11-22/service-2.json.gz,sha256=b0rY4hqjrF1oGO77ZBiKlimL8mX3_mzEgKTxx1ouhmo,33742 +botocore/data/ivs-realtime/2020-07-14/endpoint-rule-set-1.json.gz,sha256=4NIieRb8TnAfyxcmAuKZbxJpjdQVxQfAVnw6T5c1NHY,1302 +botocore/data/ivs-realtime/2020-07-14/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/ivs-realtime/2020-07-14/service-2.json.gz,sha256=E0vZ2ZyDPcrwPXAuz56exu9K5DIH0RdfB-H2wCZn4qs,11053 +botocore/data/ivs/2020-07-14/endpoint-rule-set-1.json.gz,sha256=YvPWSsHq3HYZIrDJLtbzlyNa7qS7tCJ119FYjJ5xdkU,1147 +botocore/data/ivs/2020-07-14/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/ivs/2020-07-14/paginators-1.json,sha256=QibJ2axvh2Gp9C80kOHE6Ac5RxI-El9k6jxWbVtHyqw,875 +botocore/data/ivs/2020-07-14/service-2.json.gz,sha256=fOwG5dGwhecXkSaAxF3FuZc70zaJOEkNllDyzgBisxI,14611 +botocore/data/ivschat/2020-07-14/endpoint-rule-set-1.json.gz,sha256=GX1h_4QfkaI5GOsmlwrlmKN1NQtAWwHOpOUTJ3MHe0s,1150 +botocore/data/ivschat/2020-07-14/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/ivschat/2020-07-14/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/ivschat/2020-07-14/service-2.json.gz,sha256=9Iw_IrzUXopaQkJKMZ9SpwBWUEkaVl6ioji0R6Q4tkg,8925 +botocore/data/kafka/2018-11-14/endpoint-rule-set-1.json.gz,sha256=yCa3dX8kppHamLJOWBjBft5WXc41nGUD1WPjMUzie00,1234 +botocore/data/kafka/2018-11-14/paginators-1.json,sha256=0xDGScsW7MBEMgFda8Lbrq3aSp_3GKm7souf4etaC0M,2126 +botocore/data/kafka/2018-11-14/service-2.json.gz,sha256=DghFoZVul-pNNLAUZ8OSP0OdRvcrG7MM7bjAGVXIW5U,21308 +botocore/data/kafkaconnect/2021-09-14/endpoint-rule-set-1.json.gz,sha256=Te6km9xw7NyabPIitcbulK_waJ226Hpcdw8UxG8EpQQ,1151 +botocore/data/kafkaconnect/2021-09-14/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/kafkaconnect/2021-09-14/paginators-1.json,sha256=b81jbZwqWp7FLdXNKd7Hitfvr2h4gEGKDrX3vvki85o,549 +botocore/data/kafkaconnect/2021-09-14/service-2.json.gz,sha256=PjpkiPns9_JXZajPf2LL6oJe9k1jFpBAiU8KeS43A3o,6374 +botocore/data/kendra-ranking/2022-10-19/endpoint-rule-set-1.json.gz,sha256=UuiY-f2z4xOxFd-zjX9XTgA81ZHdnd4AIHP6q_R7zyQ,1148 +botocore/data/kendra-ranking/2022-10-19/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/kendra-ranking/2022-10-19/service-2.json.gz,sha256=mVVhHm9OVViWDWlNmiPvMzm9FYYSPL4b7YWj2bCOqPQ,4362 +botocore/data/kendra/2019-02-03/endpoint-rule-set-1.json.gz,sha256=H3WhpxRVYG67nEobz5zofEb6CUDdoh5Kna4N4sVMHkc,1149 +botocore/data/kendra/2019-02-03/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/kendra/2019-02-03/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/kendra/2019-02-03/service-2.json.gz,sha256=qXxB6sGMwNVzGX462KceC1Fnz7wm2PAQ0Y4whkVKNNU,68824 +botocore/data/keyspaces/2022-02-10/endpoint-rule-set-1.json.gz,sha256=AxxnbaxdfnXt6Dr4iTnYlOqlFwNvBsGTfTT4kgOVTgE,1239 +botocore/data/keyspaces/2022-02-10/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/keyspaces/2022-02-10/paginators-1.json,sha256=T5FqYEgKvH1hv2kAVQ7ezCkLlhi0fngH-gv76NdlHGU,512 +botocore/data/keyspaces/2022-02-10/service-2.json.gz,sha256=8puwyz4SMUWvs-QzYiWWaOHMfqTtFbXpz_tZZVGE6-w,8626 +botocore/data/keyspaces/2022-02-10/waiters-2.json,sha256=tj1ZnaqhwmJkUEQlwH7wm1SqY3lg1BvZDfzfPaIgNrY,38 +botocore/data/kinesis-video-archived-media/2017-09-30/endpoint-rule-set-1.json.gz,sha256=pb91hcC-D_4IXTWzEr_8oj_EWGTz-adwAIdV7exkvCI,1153 +botocore/data/kinesis-video-archived-media/2017-09-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/kinesis-video-archived-media/2017-09-30/paginators-1.json,sha256=2QyELet6SZ2S2nDPmoKrNlJ9kQyJyMlMTkrUh1FHeh0,346 +botocore/data/kinesis-video-archived-media/2017-09-30/service-2.json.gz,sha256=sZVButWR2mHRDODuSnrZXkMiefnfU8wdLWu_Y2IiYSY,13517 +botocore/data/kinesis-video-media/2017-09-30/endpoint-rule-set-1.json.gz,sha256=uNhdAOfM1Mw2Ws0RsnMPJSEkAUcKV-EnhF-mlhTgZVY,1150 +botocore/data/kinesis-video-media/2017-09-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/kinesis-video-media/2017-09-30/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/kinesis-video-media/2017-09-30/service-2.json.gz,sha256=CZpdTgMxgMF1TED4ID1R-tlKcfMeExk8fbInMCvxfxE,3434 +botocore/data/kinesis-video-signaling/2019-12-04/endpoint-rule-set-1.json.gz,sha256=uNhdAOfM1Mw2Ws0RsnMPJSEkAUcKV-EnhF-mlhTgZVY,1150 +botocore/data/kinesis-video-signaling/2019-12-04/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/kinesis-video-signaling/2019-12-04/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/kinesis-video-signaling/2019-12-04/service-2.json.gz,sha256=25qDQhgPtKJ6fA1nwUvwaXbnjXObaXM5KIAEjjgZTE8,2439 +botocore/data/kinesis-video-webrtc-storage/2018-05-10/endpoint-rule-set-1.json.gz,sha256=ZjYBsn7sMlVGyl_emTu3FKOT01vxhaBmLLdcC2FvtbQ,1293 +botocore/data/kinesis-video-webrtc-storage/2018-05-10/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/kinesis-video-webrtc-storage/2018-05-10/service-2.json.gz,sha256=Fa2MxQVNCFbVr_tLJbfpcJwj7ypho86e9XJT8j4G1dI,1345 +botocore/data/kinesis/2013-12-02/endpoint-rule-set-1.json.gz,sha256=ufIFbUEvjHEpBtzLSjaWGJ7yUjVrZoC0iMuQneTBL_s,5445 +botocore/data/kinesis/2013-12-02/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/kinesis/2013-12-02/paginators-1.json,sha256=qSFJYsvx9QiXPFHa-xy00L9bJWbtmRbGUfaVCF9VzNE,1257 +botocore/data/kinesis/2013-12-02/service-2.json.gz,sha256=W4yp36kDziFoRzkVbrczkIgo0iuPQscEmF47II7pbO8,23814 +botocore/data/kinesis/2013-12-02/waiters-2.json,sha256=O09l7u4uKnojQ0nCnGvABSm0pUXaLj8vvi2Y7sfH_9w,615 +botocore/data/kinesisanalytics/2015-08-14/endpoint-rule-set-1.json.gz,sha256=VNJNJu6d_W4O-sAaMtJSq_CnyEDajzmEUDZgGHr4w7M,1156 +botocore/data/kinesisanalytics/2015-08-14/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/kinesisanalytics/2015-08-14/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/kinesisanalytics/2015-08-14/service-2.json.gz,sha256=dERzaNTfrr4zloZyDGoh0jkIWl2q2E02Z5IQlz9F554,14039 +botocore/data/kinesisanalyticsv2/2018-05-23/endpoint-rule-set-1.json.gz,sha256=VNJNJu6d_W4O-sAaMtJSq_CnyEDajzmEUDZgGHr4w7M,1156 +botocore/data/kinesisanalyticsv2/2018-05-23/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/kinesisanalyticsv2/2018-05-23/paginators-1.json,sha256=h0PaVL-E3iktRZymfIReETS-ONbZPDSpk1NlovHHOtA,376 +botocore/data/kinesisanalyticsv2/2018-05-23/service-2.json.gz,sha256=dP6siWA-bI9iuCq4Dn-pvTeXyHC3TyRTZBmPqWccPJs,23684 +botocore/data/kinesisvideo/2017-09-30/endpoint-rule-set-1.json.gz,sha256=QKS5hmT4SjnO-3AgdzonGM82d3xAzxzAquex3rGtZpQ,1153 +botocore/data/kinesisvideo/2017-09-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/kinesisvideo/2017-09-30/paginators-1.json,sha256=u4Avq0nOOLDcxZR6MF_lKdBBqtPAxO96JsSaq9zIdqQ,758 +botocore/data/kinesisvideo/2017-09-30/service-2.json.gz,sha256=ljBwJs78zQFJ464H9GcVafeUFQdCGYrPn_BBpATIlQ4,14720 +botocore/data/kms/2014-11-01/endpoint-rule-set-1.json.gz,sha256=iB3Fn4LeTfkRLS2Hf771q3Iv_nioXB7BFADbCtX-cX0,1147 +botocore/data/kms/2014-11-01/examples-1.json,sha256=TgahTl1uBYiHIxv63mxyaCc-5c9xQKobWHPhDio4x3c,77655 +botocore/data/kms/2014-11-01/paginators-1.json,sha256=tHlpbtOjxr02-yZcBL-jSIESz7olnMzFdjkq1ckLMEg,1370 +botocore/data/kms/2014-11-01/service-2.json.gz,sha256=TtCWGHG-7xh7zyWT5WWXrXlC6OqhWnuy5cJmLDadlRQ,65532 +botocore/data/lakeformation/2017-03-31/endpoint-rule-set-1.json.gz,sha256=IO1tpKh5Z_4LLvipMqRSXPfUrqZIqGWjNDsQMuKTRU4,1153 +botocore/data/lakeformation/2017-03-31/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/lakeformation/2017-03-31/paginators-1.json,sha256=tuq1PJ1_gAHGMUrR39bxotCADjIe9KICvNd-_dnGssI,874 +botocore/data/lakeformation/2017-03-31/paginators-1.sdk-extras.json,sha256=C6kS_EfPl5yTSl_zGXUU30Tp5Z82gPH2KKPi-u1IbOo,159 +botocore/data/lakeformation/2017-03-31/service-2.json.gz,sha256=4sEunsc7kRcXdjMrkiHm9NB0o--Dj9JDTQCvFXgAF5c,21923 +botocore/data/lambda/2014-11-11/endpoint-rule-set-1.json.gz,sha256=-n4zK_FfKVeCqyyDkPgnZd8JQp0yLRbKUWj7xAnw0O0,1288 +botocore/data/lambda/2014-11-11/service-2.json.gz,sha256=mcvTR2GmieZD7zQRCxP9WEOqqqQku7bVQ2olzyO7IUM,5528 +botocore/data/lambda/2015-03-31/endpoint-rule-set-1.json.gz,sha256=zoQ5A00RYzJSVaJQVolJd3tkt9j0OIyXkQVAV4ljLuI,1149 +botocore/data/lambda/2015-03-31/examples-1.json,sha256=_TOXptTVZUFkSxrkaq_JpIKLxUYjRcK_TpC_0itGHLg,52811 +botocore/data/lambda/2015-03-31/paginators-1.json,sha256=q90Wka2nn9mxNQrh--dvPTyb5J5qednqJXyTZIB3itk,1943 +botocore/data/lambda/2015-03-31/service-2.json.gz,sha256=RErYxXVCI41BBCdIWsgTS8geeM6wezLB9HSx8eESuKk,44232 +botocore/data/lambda/2015-03-31/waiters-2.json,sha256=xhjngYpK1QSq2PLy7ofZoa94iSQItpBk9gOYC5FwFY4,4267 +botocore/data/launch-wizard/2018-05-10/endpoint-rule-set-1.json.gz,sha256=yscj4H8XimYUbWx2xX_BKtFEMfj941-Fq6n6FQNYpkk,1304 +botocore/data/launch-wizard/2018-05-10/paginators-1.json,sha256=_qhTYa40h1ckIfS0xEC6DCUnO-0OPlclJSK9zAxC8D4,733 +botocore/data/launch-wizard/2018-05-10/service-2.json.gz,sha256=bBKa8Jbh-CV11oF22PyOnNAkLXosZYie5DJtiM-Cdno,3413 +botocore/data/lex-models/2017-04-19/endpoint-rule-set-1.json.gz,sha256=924wJ6H7xQRVTEbOruasZbT71ccmwf5ZKp1PS51jBZo,1337 +botocore/data/lex-models/2017-04-19/examples-1.json,sha256=bOPm5nP9H4YSzKIpuI2sCPe4agTMgdenNLtxDAWIat4,23898 +botocore/data/lex-models/2017-04-19/paginators-1.json,sha256=NmghgFUthvQgC3SqXuZBn-6vnUJ5ey3MZYBpRF7YMqI,1686 +botocore/data/lex-models/2017-04-19/service-2.json.gz,sha256=aOKFGF186GExmvJyvBbWoqLywAmXbwkav58ffT_6xm8,29495 +botocore/data/lex-runtime/2016-11-28/endpoint-rule-set-1.json.gz,sha256=tyNUuINASOB4yc_WPYyGvWB8uEeOY0wEFLA6upBIsyw,1268 +botocore/data/lex-runtime/2016-11-28/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/lex-runtime/2016-11-28/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/lex-runtime/2016-11-28/service-2.json.gz,sha256=WNfRQGlgbklb0cAOz4Qa74Byj8PtW441kdQrIEKmNTE,11790 +botocore/data/lexv2-models/2020-08-07/endpoint-rule-set-1.json.gz,sha256=KhAQKBB-oq6jaTn-O0tLiasAjb2zGseJJ4U9z80smE8,1155 +botocore/data/lexv2-models/2020-08-07/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/lexv2-models/2020-08-07/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/lexv2-models/2020-08-07/service-2.json.gz,sha256=kMwAxlHh1CuK3kH-hUkub_VpzAzBZmcVcEyzQ88FSOQ,71626 +botocore/data/lexv2-models/2020-08-07/waiters-2.json,sha256=Kj-OzJdHpbEuK2Og-0ok3E17irFQKjDwk2KfOj_xKcQ,7231 +botocore/data/lexv2-runtime/2020-08-07/endpoint-rule-set-1.json.gz,sha256=s6m0i6H9ndc-V3XGVNQixE2qOur0OcvXDJtz64N3Oao,1156 +botocore/data/lexv2-runtime/2020-08-07/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/lexv2-runtime/2020-08-07/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/lexv2-runtime/2020-08-07/service-2.json.gz,sha256=0joNVPo6q36kd7BK72-IBEG727xwTY9T0uWopGmnr0E,12882 +botocore/data/license-manager-linux-subscriptions/2018-05-10/endpoint-rule-set-1.json.gz,sha256=ZFD1xPw6cuTOU0n-bAjb3dgwnPiK0G__OsTzc7ueFkU,1310 +botocore/data/license-manager-linux-subscriptions/2018-05-10/paginators-1.json,sha256=D3sfaHEjOL1fnGqdi9uGjmGh-OzNV6qh22Xi3PCz9lY,383 +botocore/data/license-manager-linux-subscriptions/2018-05-10/service-2.json.gz,sha256=nhAzrZzw-MkGRWIz5CoCFKVQsIi7n7CQ_RDWCHbWGqA,2757 +botocore/data/license-manager-user-subscriptions/2018-05-10/endpoint-rule-set-1.json.gz,sha256=94nzey0xoV4_tl5ThCFvbdynHL3SdlLdYvHFNayC8b4,1167 +botocore/data/license-manager-user-subscriptions/2018-05-10/paginators-1.json,sha256=lHVPYYVbHro2t3PMgbBI_ikPC6qDTFQlhYISCC7xb3Y,754 +botocore/data/license-manager-user-subscriptions/2018-05-10/service-2.json.gz,sha256=dazRsHUNz1JdkxtZDTHtkiBKzepT-SMj1hZGSKspTVw,3612 +botocore/data/license-manager/2018-08-01/endpoint-rule-set-1.json.gz,sha256=vdHAvh3AGRUt_Wb8CByASCB8lbzqO_jNrcfTIzYC420,1156 +botocore/data/license-manager/2018-08-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/license-manager/2018-08-01/paginators-1.json,sha256=u83kulrKizQ1RsV1wfSx_UjFbm72dCbztJd3m2qKZwc,1012 +botocore/data/license-manager/2018-08-01/service-2.json.gz,sha256=Np8ucn91JDFKoSAYKAHAlemUzoPm65tgneYoaAGEY8Y,16546 +botocore/data/lightsail/2016-11-28/endpoint-rule-set-1.json.gz,sha256=NOd684T3WD3S0-Quy_V11yVmQhcyEkdmc2p1OMkXdoc,1152 +botocore/data/lightsail/2016-11-28/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/lightsail/2016-11-28/paginators-1.json,sha256=9EaLlqeMLm1cO4A5z-uPznc4OgcKMLV3tbvMLdSjZF4,2925 +botocore/data/lightsail/2016-11-28/service-2.json.gz,sha256=EPKlGxkKf-lONtJ3V8D6WPsPw3CXkEXdjcFBtEkYMoc,85451 +botocore/data/location/2020-11-19/endpoint-rule-set-1.json.gz,sha256=w1FvsFna4sjUP6MiAgiXMcCVfuB20IWcm81M_GRiTJQ,1146 +botocore/data/location/2020-11-19/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/location/2020-11-19/paginators-1.json,sha256=gwu1oB-t8fjsoxP-4prtshHEmCQEqIixdTVvN0LYLa8,1691 +botocore/data/location/2020-11-19/service-2.json.gz,sha256=CaIuE7MLW4CuxxBGzgKilVAyuCBDyOTtB-3gpJss5CQ,38413 +botocore/data/logs/2014-03-28/endpoint-rule-set-1.json.gz,sha256=RcwoLuncf92BfBIjskUN8Z9GDzHY5toifbuesK6u0X0,1232 +botocore/data/logs/2014-03-28/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/logs/2014-03-28/paginators-1.json,sha256=x3W8wr6UWfFxluXvx0DZaC0KLS6oJoyNU7uTQYAvsOY,2450 +botocore/data/logs/2014-03-28/service-2.json.gz,sha256=jEoRkaGjZJtADU5DgSX6HqGqs5nF17pQviCmsL2kqlk,41048 +botocore/data/lookoutequipment/2020-12-15/endpoint-rule-set-1.json.gz,sha256=0AfliVOKIAJHUupBvG9mBeFp3VHWi48viQr6n3s3ywY,1153 +botocore/data/lookoutequipment/2020-12-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/lookoutequipment/2020-12-15/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/lookoutequipment/2020-12-15/service-2.json.gz,sha256=Q2B-B0OlQQoDvefq36gsB5U2tU0XWfa42yE1kly_gGU,21342 +botocore/data/lookoutmetrics/2017-07-25/endpoint-rule-set-1.json.gz,sha256=IW0g9KU4ipGyULWmz58-i5XLnaZWwlO1nti0Ae0ene4,1152 +botocore/data/lookoutmetrics/2017-07-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/lookoutmetrics/2017-07-25/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/lookoutmetrics/2017-07-25/service-2.json.gz,sha256=4acKWfdXgivHUOvaFwb50NrqJdhlM4xVIZvbU_ONgMY,12970 +botocore/data/lookoutvision/2020-11-20/endpoint-rule-set-1.json.gz,sha256=-oK31Ow0HKqI5iylcmlEx4rZukT8DxtDsTU6kz_215E,1152 +botocore/data/lookoutvision/2020-11-20/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/lookoutvision/2020-11-20/paginators-1.json,sha256=YN-rEb9H11mcKTYPX3d73TBWHz4UTiibNk_5fVrKUQs,701 +botocore/data/lookoutvision/2020-11-20/service-2.json.gz,sha256=H3-hH5dsLX6uF3x_st0sK76iQjwGYQRUEwVACvte0hk,13268 +botocore/data/m2/2021-04-28/endpoint-rule-set-1.json.gz,sha256=6WnMpzXudHnqd7TGt9mWR3S_1JpCwsCiElKaKT72g98,1147 +botocore/data/m2/2021-04-28/paginators-1.json,sha256=1Ozjz1tfgEcpWywPezS7twNglIV14eZv7AuudCzv-SI,1603 +botocore/data/m2/2021-04-28/service-2.json.gz,sha256=Zt-Gt_pTlTMB9PNwiJYupHkvCkOf9UqoQu37-0IWjrY,14760 +botocore/data/machinelearning/2014-12-12/endpoint-rule-set-1.json.gz,sha256=wNKvFEeCJNhfPQ3ymSkIXqX2apKf7qG_EwZrxzRNx7Q,1156 +botocore/data/machinelearning/2014-12-12/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/machinelearning/2014-12-12/paginators-1.json,sha256=80ddAOlwUPt-mXpDtk3eJqnm7lB95-DjTW6-G6eqmJc,679 +botocore/data/machinelearning/2014-12-12/service-2.json.gz,sha256=2jX1mwpkn7YlezGoubKd6trvXmuQqsRbzrE_GMao70c,21283 +botocore/data/machinelearning/2014-12-12/waiters-2.json,sha256=_tyML4Sw4VQBk8fUWh1bUQjlcooL1hgRpvkqxKxEeCY,1902 +botocore/data/macie2/2020-01-01/endpoint-rule-set-1.json.gz,sha256=Er_mtrqgdll1gecPCHacJ1OolSizbshD2W5YoUSyEYw,1149 +botocore/data/macie2/2020-01-01/paginators-1.json,sha256=SH5Dad4nmDhxZtAwzvXYXy70OxVZyh7lO7XRY8aPq7s,2782 +botocore/data/macie2/2020-01-01/service-2.json.gz,sha256=Y4-GefNpvCdE060X6SYWHQDQOau_F2kG_u-tmYkfn4U,57111 +botocore/data/macie2/2020-01-01/waiters-2.json,sha256=YjTydOnsawe754SLZZxzxMgFaq0M88fq5jOu-UQvAWE,553 +botocore/data/managedblockchain-query/2023-05-04/endpoint-rule-set-1.json.gz,sha256=-YhV5zQIh5x03BlbRjV_nJl6c7N5S3EiY7GKwKwoHBQ,1313 +botocore/data/managedblockchain-query/2023-05-04/paginators-1.json,sha256=udgR2DHjJseuo9Fx1o88Pe7XwcIhKf5qvntFar8JkE8,705 +botocore/data/managedblockchain-query/2023-05-04/service-2.json.gz,sha256=lKRoY6_Xd99lpBrXNIYMU1BKgmJCQj3MopkpedC1vwA,6372 +botocore/data/managedblockchain-query/2023-05-04/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/managedblockchain/2018-09-24/endpoint-rule-set-1.json.gz,sha256=UdIx4lm5nJ_Lczr3K8yWSLXYeC2ppdbS1MXeTrmsxXg,1160 +botocore/data/managedblockchain/2018-09-24/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/managedblockchain/2018-09-24/paginators-1.json,sha256=zAjmRcrAx6dDwoJVM-7ceZ1U04fGfxMgQsREvvVcIeI,189 +botocore/data/managedblockchain/2018-09-24/service-2.json.gz,sha256=WILPAMzFPGLeR_XDAqhCgoYDpLIgrxDLxrnfz65qI-s,13831 +botocore/data/marketplace-agreement/2020-03-01/endpoint-rule-set-1.json.gz,sha256=KJ0-8zEqnAdJlQx-yAZmjpi4m4sP_ypZNNJzl2UqyYk,1311 +botocore/data/marketplace-agreement/2020-03-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/marketplace-agreement/2020-03-01/service-2.json.gz,sha256=EM7f_LUd8vPaZmgGKHhyUYbycj7Vozn9r0nV2BFl8nA,8181 +botocore/data/marketplace-catalog/2018-09-17/endpoint-rule-set-1.json.gz,sha256=sOi3B1G5MFNI6-TgUcbRfpOLcQtM_tr_9DyJiX0piSk,1159 +botocore/data/marketplace-catalog/2018-09-17/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/marketplace-catalog/2018-09-17/paginators-1.json,sha256=JbO7iSHFp-U7kJIRHTRxPClYMlBkenux5Ow534JGcyQ,372 +botocore/data/marketplace-catalog/2018-09-17/service-2.json.gz,sha256=LJIwXo7RDxTnLu8Lt_lyh2N0s_57OuhZl4ggXrE9SDU,11812 +botocore/data/marketplace-deployment/2023-01-25/endpoint-rule-set-1.json.gz,sha256=Fyg5WsFdOA6rjwZfO7_bTnB5jHMJXfhO6HI8KkRwFUQ,1312 +botocore/data/marketplace-deployment/2023-01-25/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/marketplace-deployment/2023-01-25/service-2.json.gz,sha256=VxXHj6fzhwPBFsPI_VNrH1_Z2QMmxCk2MIpqD3YWS2U,2553 +botocore/data/marketplace-entitlement/2017-01-11/endpoint-rule-set-1.json.gz,sha256=gIOz7x7tSuytlxIR0eEXAAR0GyiJYo0YccsHmOhcdzM,1228 +botocore/data/marketplace-entitlement/2017-01-11/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/marketplace-entitlement/2017-01-11/paginators-1.json,sha256=xFY_-BU5Ho7OPWDGn_aX-WwguHOeDyE1N4F-7nlw2KA,194 +botocore/data/marketplace-entitlement/2017-01-11/service-2.json.gz,sha256=4tW6DaJeJlNr_Vqe40069KDticItuQZ0_0R0gG8Hzas,2095 +botocore/data/marketplacecommerceanalytics/2015-07-01/endpoint-rule-set-1.json.gz,sha256=cR8LGNL4g4_9spejH_SiktMPVbLXyp7NutqpTx-bdTk,1167 +botocore/data/marketplacecommerceanalytics/2015-07-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/marketplacecommerceanalytics/2015-07-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/marketplacecommerceanalytics/2015-07-01/service-2.json.gz,sha256=PtLxctxeG-3MobqIy_nhAilsIzw5s3mm35cehAaDxxQ,3248 +botocore/data/mediaconnect/2018-11-14/endpoint-rule-set-1.json.gz,sha256=d1JtADMlom-FIVkT8A_zLf1R2Z8TcMVVBBac9JOp0Xk,1153 +botocore/data/mediaconnect/2018-11-14/paginators-1.json,sha256=FTRCyBm6AFLee9VE5l8oTSJUqDd8pucnSTB0RgXh0Gw,1178 +botocore/data/mediaconnect/2018-11-14/service-2.json.gz,sha256=SIY1npknA1lgeT1NUsRnmeFTNkX_H8SGpg_66NgKweE,25289 +botocore/data/mediaconnect/2018-11-14/waiters-2.json,sha256=bZzKt8OYBuvnYAP3OV9R2sBvTqOtVyOo5-MBYv6BWis,2679 +botocore/data/mediaconvert/2017-08-29/endpoint-rule-set-1.json.gz,sha256=IjmVNKj-a25TQH6qkYUybooMVy48ul1bwcL26q4PLQw,1301 +botocore/data/mediaconvert/2017-08-29/paginators-1.json,sha256=XtVkBZdug_R7jlAQkwBNEbs8cZKzZA244SKTQ7hFaxA,835 +botocore/data/mediaconvert/2017-08-29/service-2.json.gz,sha256=GzoJM9WdbZzpBeS-QKXtn9SYYCJOXm19aNCzPRS7fUM,142790 +botocore/data/medialive/2017-10-14/endpoint-rule-set-1.json.gz,sha256=_JZ1k_Qm3SJshFJ6Yg6und1puyGILLpQtORcDFLSxUs,1151 +botocore/data/medialive/2017-10-14/paginators-1.json,sha256=JELbmeu9JLpOWu3OHQbWFxzCReITsDADgM6xRuQQTeo,1740 +botocore/data/medialive/2017-10-14/service-2.json.gz,sha256=IPCB6ThKGORyK_q2Jt9knDf9hHuX7hp26cYMPZy0ugk,89291 +botocore/data/medialive/2017-10-14/waiters-2.json,sha256=b_hbDPWhJ0CFqgNI7FDET3WrWAFbxFA179_iIaUH_2o,6988 +botocore/data/mediapackage-vod/2018-11-07/endpoint-rule-set-1.json.gz,sha256=GPpR7MsifEOhFq4DZqsdHCgwQzlCTuxFquNNakpQ3U0,1156 +botocore/data/mediapackage-vod/2018-11-07/paginators-1.json,sha256=uyOY7MfVXvY7qil_RhqS9KThRg9A3_8LB6C8en49Z3k,551 +botocore/data/mediapackage-vod/2018-11-07/service-2.json.gz,sha256=LgA1mS29fRwyaM_Pkvqrgsrmej8vAqnA-5nNeCPZEMc,7182 +botocore/data/mediapackage/2017-10-12/endpoint-rule-set-1.json.gz,sha256=hzGV2ZN2hKR8BEklNlFMsYuHMJQuVHK8GalfQiwrd_4,1153 +botocore/data/mediapackage/2017-10-12/paginators-1.json,sha256=Hkze_cyn0q7t1o4PHpf079W6jE_g7l8tGQf7x-t3ocs,531 +botocore/data/mediapackage/2017-10-12/service-2.json.gz,sha256=Prcd2b2cjeXX2smLxu8MmqcwixRdYSOTvX_i-67Ymy0,9854 +botocore/data/mediapackagev2/2022-12-25/endpoint-rule-set-1.json.gz,sha256=i9AS-j_QIUYm7JJ5DtcF7tQsOKK_j06sgWkFTbcD-gA,1306 +botocore/data/mediapackagev2/2022-12-25/paginators-1.json,sha256=jgysD72mvdA7sWLF6onkRCQ6KxKlVCpK7N0Pnq_Q77M,514 +botocore/data/mediapackagev2/2022-12-25/service-2.json.gz,sha256=5OBIzk_IIf7VwANy3ffacj-vQw-YUzbsSq1COTsTdUY,11946 +botocore/data/mediapackagev2/2022-12-25/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/mediastore-data/2017-09-01/endpoint-rule-set-1.json.gz,sha256=d5kvnJGPWqMWmsrBYUvzba7G9-XlzotbJO9M2gP29Lc,1152 +botocore/data/mediastore-data/2017-09-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/mediastore-data/2017-09-01/paginators-1.json,sha256=iGhEIo_9ydhnm5jAD4K6mIgNGZ51FKUA4AlfMlG0sao,181 +botocore/data/mediastore-data/2017-09-01/service-2.json.gz,sha256=LzGuSwKV9ocR9h1WzFbNicLvj7aYASgNvbX6yjF7rGw,3757 +botocore/data/mediastore/2017-09-01/endpoint-rule-set-1.json.gz,sha256=krmt8benOtr15z-CZwyUc47Le_rQjsjeq4uOipahW3s,1148 +botocore/data/mediastore/2017-09-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/mediastore/2017-09-01/paginators-1.json,sha256=0XO8tEPJl9J7qprTHPQQt6dC7GrjIoqoCn4AcAbjiyM,191 +botocore/data/mediastore/2017-09-01/service-2.json.gz,sha256=JbuTW08D6m5XNfJk6d9OvHbh2rAId1RgR6svTR5VyQE,7045 +botocore/data/mediatailor/2018-04-23/endpoint-rule-set-1.json.gz,sha256=ySnIFSx9FI9MPA1X8Vz_AWR1qCTj6amyXn-4j0z0g2k,1155 +botocore/data/mediatailor/2018-04-23/paginators-1.json,sha256=AxqBHJot9wpawiVdBaiwALEkmIwfz6mhJsXIo7qDvlw,1336 +botocore/data/mediatailor/2018-04-23/service-2.json.gz,sha256=tZVjWIw9TM2pbnp4f5jwM9pbQxwB8GtF2XWSLkBnhq4,20011 +botocore/data/medical-imaging/2023-07-19/endpoint-rule-set-1.json.gz,sha256=yc9p2eiMLj49tZIF6bUs7HqKbbtl5U_rKV0cF4t1V4A,1306 +botocore/data/medical-imaging/2023-07-19/paginators-1.json,sha256=Zdv-t-Mpi7RENFkReFlaQ40h5arjqt4t0EDliR_8VOs,739 +botocore/data/medical-imaging/2023-07-19/service-2.json.gz,sha256=eQw9IDIixZ1zD8shpruebZlog_6woDnhIJ8b9kOdBuM,8187 +botocore/data/medical-imaging/2023-07-19/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/memorydb/2021-01-01/endpoint-rule-set-1.json.gz,sha256=KZx0Sn4oRHwrqVvBcYKPk_lwa6qG_v91qqnDRZX1wf4,1255 +botocore/data/memorydb/2021-01-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/memorydb/2021-01-01/paginators-1.json,sha256=gZ2X2pjloGYnUZ5dwXvDrKS10-LqHJj4VdsNHDPqwAA,2089 +botocore/data/memorydb/2021-01-01/service-2.json.gz,sha256=SiUW0UaLf6AZZ3T7EJek31DdDhgAoXBBswTs848DqiA,16046 +botocore/data/meteringmarketplace/2016-01-14/endpoint-rule-set-1.json.gz,sha256=sVkQOha8fQxwv5G-WcKZL5Mfd4yNIDTvKuNmtYIrqJI,1243 +botocore/data/meteringmarketplace/2016-01-14/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/meteringmarketplace/2016-01-14/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/meteringmarketplace/2016-01-14/service-2.json.gz,sha256=T69XHB7uKIEx3RkbY6h2uSOplJxIRlL1ULZjT_RSthk,6179 +botocore/data/mgh/2017-05-31/endpoint-rule-set-1.json.gz,sha256=2cnad354TxQeNJobPftpPj_mNcxIrNFpTkoifrqBEsM,1144 +botocore/data/mgh/2017-05-31/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/mgh/2017-05-31/paginators-1.json,sha256=c6aCKzKnKp8Z0d-UNEY7VdDUCTIDdQhspIghXobWm5o,958 +botocore/data/mgh/2017-05-31/service-2.json.gz,sha256=vg4Ogas1pywYRDM55lHPt0_aUy2UWv9D9oFI7OeNQhk,7186 +botocore/data/mgn/2020-02-26/endpoint-rule-set-1.json.gz,sha256=VYHRerJy2CQwAFS-VJK1MliuKwBmUTMTGNtCfUD4Q2k,1147 +botocore/data/mgn/2020-02-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/mgn/2020-02-26/paginators-1.json,sha256=zJ9gqjYlOC0wR5m9M1J-VB79ZFXJcrL78WvqPplRE8M,2682 +botocore/data/mgn/2020-02-26/service-2.json.gz,sha256=jIEX1TWv3yjwlVJufdgxrU1FAyRI7vrs9jVvT92w1RU,19674 +botocore/data/migration-hub-refactor-spaces/2021-10-26/endpoint-rule-set-1.json.gz,sha256=vJX-2-U7gSjGiCNU4NyW6Ww_OoUsAx-yfMiM79aR0Ig,1153 +botocore/data/migration-hub-refactor-spaces/2021-10-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/migration-hub-refactor-spaces/2021-10-26/paginators-1.json,sha256=OZ6GIc0aC4ikn9W96M2UbxWeBdIy3QA7ksZ2Ec7t1e8,904 +botocore/data/migration-hub-refactor-spaces/2021-10-26/service-2.json.gz,sha256=8iliW6Kf7JgtX9W4VKQfJNApfjTQIs-5BskoN4P56zA,12478 +botocore/data/migrationhub-config/2019-06-30/endpoint-rule-set-1.json.gz,sha256=MjnfkyTJxR3owMcYI3QD5BvmzHrltCp-jfB_tjuBolQ,1158 +botocore/data/migrationhub-config/2019-06-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/migrationhub-config/2019-06-30/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/migrationhub-config/2019-06-30/service-2.json.gz,sha256=S8iGbQcG96aWgX25d8moj3bz3uh9aXwLqgYEA3rONDw,2714 +botocore/data/migrationhuborchestrator/2021-08-28/endpoint-rule-set-1.json.gz,sha256=kbVoecoZqHC5HpMef1XNP3Pjckt_vI8NV8lDQjPXJCM,1300 +botocore/data/migrationhuborchestrator/2021-08-28/paginators-1.json,sha256=K3BSaAaX302rt-fuD-8ewfuAaO1cXLwfwPxQmgs4gLw,1272 +botocore/data/migrationhuborchestrator/2021-08-28/service-2.json.gz,sha256=bSC-HY3vx6g77TAqN_9WE_MJXe5uxrcfB7LPlhAVbDk,7238 +botocore/data/migrationhuborchestrator/2021-08-28/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/migrationhubstrategy/2020-02-19/endpoint-rule-set-1.json.gz,sha256=VJDs_sGiWJ6YmT42c-yR3w7h06zUWZamUfJYOFnfJII,1158 +botocore/data/migrationhubstrategy/2020-02-19/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/migrationhubstrategy/2020-02-19/paginators-1.json,sha256=1kU7uoqpjQDozh9dBNVWf7QyZDxK2PBkajg_gfz7dxY,1076 +botocore/data/migrationhubstrategy/2020-02-19/paginators-1.sdk-extras.json,sha256=x686VmA6fsdUSIKSMZbp5ZF280pREQ7HpnPkgQTZ730,220 +botocore/data/migrationhubstrategy/2020-02-19/service-2.json.gz,sha256=IXml5Bix-sPliakMs9YWPhFbDq7kQMctnbZIehKpufc,13363 +botocore/data/mobile/2017-07-01/endpoint-rule-set-1.json.gz,sha256=5C-AxoGOl6RihbLm3xNE5_Si5nssyBJJ7pfUWtfrUNY,1146 +botocore/data/mobile/2017-07-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/mobile/2017-07-01/paginators-1.json,sha256=QWwTFfnKV_AnwK-xCcXFK6bJDEHfSe4A8ollJulmrpE,350 +botocore/data/mobile/2017-07-01/service-2.json.gz,sha256=MDiDqopfgU6LJCAE097CsX27J38WswTOJ4buiW4BnP4,4134 +botocore/data/mq/2017-11-27/endpoint-rule-set-1.json.gz,sha256=tCjvEJn7veouRQ96eHP1AizQXaYMXVH5HiBx1ZAfF4Q,1144 +botocore/data/mq/2017-11-27/paginators-1.json,sha256=JZRhf6w_8oFT1nPyeTQNU09bR1-xrJn09KOtiOPO2Rg,193 +botocore/data/mq/2017-11-27/service-2.json.gz,sha256=S4gyApQHFzVNgMoCxDVjfTT_CQr3xm8iOeVcpyUXRjU,14078 +botocore/data/mturk/2017-01-17/endpoint-rule-set-1.json.gz,sha256=XvWZ8qjj7h-49rzxzivYnBMvvRXGDZjSovuUr-f4IlQ,1214 +botocore/data/mturk/2017-01-17/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/mturk/2017-01-17/paginators-1.json,sha256=NFfGwUHHAX0lwKOB92RJHnfVkFP5IvDCtM1FnTJ-A0g,1591 +botocore/data/mturk/2017-01-17/service-2.json.gz,sha256=htj6pm8E1-5cSrwh9zvHBI4feOP2FMSjQsfdwIG6KtY,19736 +botocore/data/mwaa/2020-07-01/endpoint-rule-set-1.json.gz,sha256=hnbgfY0pmOYaiFoRQsm0iM8NQ7NtPHXnRFxrz7o08xw,1150 +botocore/data/mwaa/2020-07-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/mwaa/2020-07-01/paginators-1.json,sha256=ggep_PmvO9S8tClL3v6oAmOMYV4qZcZt06URX5M9658,195 +botocore/data/mwaa/2020-07-01/service-2.json.gz,sha256=nlwUaLCIkmpKAwWlrKTOPf0hg3msRe0WxN3VoGdVnHs,9331 +botocore/data/neptune-graph/2023-11-29/endpoint-rule-set-1.json.gz,sha256=hUvm8bTYLz2FpeQqlQp0o1XSawn2BM2InHmWAUvAVDk,1410 +botocore/data/neptune-graph/2023-11-29/paginators-1.json,sha256=HKEeF_fwQ4_3HH3nJR4jLaDxri9pobfvSXtJHe4hjks,707 +botocore/data/neptune-graph/2023-11-29/service-2.json.gz,sha256=4v4SFR_OTarBlUAr_C2D960-S7Wk-lyvGd7LIpaRncA,8983 +botocore/data/neptune-graph/2023-11-29/waiters-2.json,sha256=rgUv3wqSkRZEygZ1DOVha962WwD1feiz4Y4taHNu4iU,4589 +botocore/data/neptune/2014-10-31/endpoint-rule-set-1.json.gz,sha256=5BpFZT7idrHrGEiq2ZCxwu6KIiq3oC491qo56zJhpjo,1232 +botocore/data/neptune/2014-10-31/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/neptune/2014-10-31/paginators-1.json,sha256=66ojR4_WsS4k5APEI8fjU0mCJTn7B15KuG8mPLcqFk8,2881 +botocore/data/neptune/2014-10-31/service-2.json.gz,sha256=bml0Lc2mwgax9aBYhXHZVT2EEPCHr46KMCXRWZHppz4,43568 +botocore/data/neptune/2014-10-31/service-2.sdk-extras.json,sha256=U_PgxwtPhWl8ZwLlxYiXD4ZQ4iy605x4miYT38nMvnM,561 +botocore/data/neptune/2014-10-31/waiters-2.json,sha256=8bYoMOMz2Tb0aGdtlPhvlMel075q1n7BRnCpQ-Bcc1c,2398 +botocore/data/neptunedata/2023-08-01/endpoint-rule-set-1.json.gz,sha256=84KHnOMT8ESf2dLW34RGHscwzYuRcdjYQF8Ni0Dwdfw,1300 +botocore/data/neptunedata/2023-08-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/neptunedata/2023-08-01/service-2.json.gz,sha256=dEtEW4ZFy-RBjb4sXoZfQm9GWxYrOh228jU081QdMwI,23510 +botocore/data/network-firewall/2020-11-12/endpoint-rule-set-1.json.gz,sha256=5Er4wbXbctEX55PTUdHi3O7q7Z0CgUAN6TfQ6zhvhU4,1156 +botocore/data/network-firewall/2020-11-12/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/network-firewall/2020-11-12/paginators-1.json,sha256=rc4lbYxQbxyaVvByJxQ2KE9FIfgW_HkNLVnqNpKGoVU,898 +botocore/data/network-firewall/2020-11-12/service-2.json.gz,sha256=Y7AWPjeRazoP7OTLtXqiEoekUQqqcoEUhM6xZP8l08U,32199 +botocore/data/networkmanager/2019-07-05/endpoint-rule-set-1.json.gz,sha256=bsEHck6pM2t8Pa56FJoRggQ2PLgYaAtemHZrBtS20Ww,1371 +botocore/data/networkmanager/2019-07-05/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/networkmanager/2019-07-05/paginators-1.json,sha256=F-D4AkI3mG-HlMew8cQ0qNkUkV042pE_2Wl1rIvA-PY,3791 +botocore/data/networkmanager/2019-07-05/service-2.json.gz,sha256=Frj881VEh6Fq5-_oG1cMruPZCVQj74i38oj8eiusZ2o,21532 +botocore/data/networkmonitor/2023-08-01/endpoint-rule-set-1.json.gz,sha256=Ey3dZwuv4rNUDWK9pMhvTQq3NWKjJJk0Jt7E4tcWmzY,1305 +botocore/data/networkmonitor/2023-08-01/paginators-1.json,sha256=nHQ47DVYXQU7zjhe4CUO3-J0OdqR2OjaTaQ4c8vcMW0,187 +botocore/data/networkmonitor/2023-08-01/service-2.json.gz,sha256=H7DpdOYcodeRMIjFZgTgIL3AURfRAWNYJ-KEjyDE1TQ,4777 +botocore/data/networkmonitor/2023-08-01/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/nimble/2020-08-01/endpoint-rule-set-1.json.gz,sha256=KtW2GIHL4APao2UZy1IasPXzLSs4bFNxuqpET_kGo6A,1147 +botocore/data/nimble/2020-08-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/nimble/2020-08-01/paginators-1.json,sha256=fQoPzBzZycrd2bpBOHW87wjkP_q69fE8MunvHwQQEB8,1549 +botocore/data/nimble/2020-08-01/service-2.json.gz,sha256=tUyzjnhu56Jl47LK7c9fXy3ThBxRhtG8qfGrtE96OCY,19823 +botocore/data/nimble/2020-08-01/waiters-2.json,sha256=HoBJRV8BoYfDxR_P369ryNfegpItljNv_8L2RprmSj0,7400 +botocore/data/oam/2022-06-10/endpoint-rule-set-1.json.gz,sha256=TMvDYMi6sUhSlkVl1Fl2KeG7Nn1WQpqGtYEscuyG0FQ,1287 +botocore/data/oam/2022-06-10/paginators-1.json,sha256=O-yiC1jmUubOdoY_nq_BvS2UBfskjOM7cgJ547VWO3U,501 +botocore/data/oam/2022-06-10/service-2.json.gz,sha256=uilEFzfob8OCSizBGm3qSYPiMZ9nVGMGxN0WOBztCZE,5549 +botocore/data/omics/2022-11-28/endpoint-rule-set-1.json.gz,sha256=SDnH-tf7qKYiTULRW-Toh2F6RTbPMt79g8N7V8yA-rE,1298 +botocore/data/omics/2022-11-28/paginators-1.json,sha256=XgnHw-zWg4kjhELV1tVUeNxVQQwLcCg1tEbVP_gjOtQ,3466 +botocore/data/omics/2022-11-28/service-2.json.gz,sha256=BTihsNOiIqgcGS1wTEkROH7J-D9-L_44T8y9y_DHRdM,24881 +botocore/data/omics/2022-11-28/waiters-2.json,sha256=ojk083awKnugjRQUH5s0ltjk2CLaNzuTAt6p1wSjGro,14692 +botocore/data/opensearch/2021-01-01/endpoint-rule-set-1.json.gz,sha256=mSgp8to2McQKQx83OLXkSq7WBMlD8qNcclsuNmLI_vc,1313 +botocore/data/opensearch/2021-01-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/opensearch/2021-01-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/opensearch/2021-01-01/service-2.json.gz,sha256=YeJxUfqYuX6tZyHpp0uvhtMobFYcTTBJs6Cuxizcmr4,37842 +botocore/data/opensearchserverless/2021-11-01/endpoint-rule-set-1.json.gz,sha256=d1WyGHwPDc_dnJZ0rFoePn3826GULT0XGmwa4Rb8N_s,1297 +botocore/data/opensearchserverless/2021-11-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/opensearchserverless/2021-11-01/service-2.json.gz,sha256=e3UXieHEWl6A0CoZecrAfsHg-nC1SOFM89R4VC0J3OY,10369 +botocore/data/opsworks/2013-02-18/endpoint-rule-set-1.json.gz,sha256=Y2k6T-m2uFbVfQNzk1WwiuEilM6H-r6-pwO8btxcwvE,1148 +botocore/data/opsworks/2013-02-18/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/opsworks/2013-02-18/paginators-1.json,sha256=Z7xh6Z3rU23wP3DvH7dA_6rESCx1av8E7ABInwpMRY4,197 +botocore/data/opsworks/2013-02-18/service-2.json.gz,sha256=uLU2KPlUSM4eMlss-H9NARqbagEuCumbXYsBNTvqwXM,37622 +botocore/data/opsworks/2013-02-18/waiters-2.json,sha256=2crmFuAdFm1n1gXfrbBHg_w-b0aaCPtBiXxHzp1N-LI,7578 +botocore/data/opsworkscm/2016-11-01/endpoint-rule-set-1.json.gz,sha256=2mapRS2Ehrf0waFCYAeEP4HpEYYAQepXjZ8H0roxCZc,1151 +botocore/data/opsworkscm/2016-11-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/opsworkscm/2016-11-01/paginators-1.json,sha256=rozfOtYjgHVB4_nRCx9wz3_FEi0EYUK0v5gbhAN2oQQ,686 +botocore/data/opsworkscm/2016-11-01/service-2.json.gz,sha256=bdcN7wI7GAlRQSZR9w-mlsGgr85RIu2bt033F3rKQqs,13908 +botocore/data/opsworkscm/2016-11-01/waiters-2.json,sha256=nTnFtemD7H4YJ99PqmULXNfZeNb18T1sxitQXDntJ2o,582 +botocore/data/organizations/2016-11-28/endpoint-rule-set-1.json.gz,sha256=rPw6MlF5I_bTcuxKQbNGvyNkIE2F218r6fj4PbrrQiU,1498 +botocore/data/organizations/2016-11-28/examples-1.json,sha256=H-s8eMAzogFkvDj193d_NweczAUFsyrDfjFEE_77BFQ,50009 +botocore/data/organizations/2016-11-28/paginators-1.json,sha256=q7RjxA1l-62dDheys7Z3_Ayp04TpUyeTHIW5z2DWb1s,2789 +botocore/data/organizations/2016-11-28/service-2.json.gz,sha256=7tjqYPnuPkfCdFtFrGzGOc0adsjPxKaqzBC1lK6cIE4,35099 +botocore/data/osis/2022-01-01/endpoint-rule-set-1.json.gz,sha256=oCaMtx9bUuEY6NjokTxkStZZlqv8O7Szy_rmBVUqN2A,1297 +botocore/data/osis/2022-01-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/osis/2022-01-01/service-2.json.gz,sha256=esubwKwU8Zdehc9HeciqW6Y72nQe9zro0p6OQpZ9xGU,5547 +botocore/data/outposts/2019-12-03/endpoint-rule-set-1.json.gz,sha256=Gp6-QXgtUgFsGO1X81eJ5UuZU-EhjR-1f0EP3rv-r2Y,1238 +botocore/data/outposts/2019-12-03/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/outposts/2019-12-03/paginators-1.json,sha256=8nl4vxgBBqJYmvHGcJS4p_BBLZqsd9l741hKMvQBcwc,1007 +botocore/data/outposts/2019-12-03/paginators-1.sdk-extras.json,sha256=iIpnnvGVs9_NYgNSgHxbwXLP6VZ8Fh2kP2txOOkn3Tw,196 +botocore/data/outposts/2019-12-03/service-2.json.gz,sha256=5mpXA7VTx-ziM0ndiwfTVEst-H3YFfVXk09R5Ipcu-E,10125 +botocore/data/panorama/2019-07-24/endpoint-rule-set-1.json.gz,sha256=7WvOHb9DOs561G7V-lJ0_vWzJHkWLHql2angI5BCnLU,1148 +botocore/data/panorama/2019-07-24/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/panorama/2019-07-24/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/panorama/2019-07-24/service-2.json.gz,sha256=WT0KnrJzCuY4UY7Mc87josPzU11H9-_Qo2MccIvjyxo,11986 +botocore/data/partitions.json,sha256=wKrhPPapjcEZiObWE2XE556W4uM9pwmIzcuajrQngF8,5765 +botocore/data/payment-cryptography-data/2022-02-03/endpoint-rule-set-1.json.gz,sha256=ZSkFG99uK1fZrYySuNZIauqFnLzkGQsikf4mvQzcyMw,1308 +botocore/data/payment-cryptography-data/2022-02-03/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/payment-cryptography-data/2022-02-03/service-2.json.gz,sha256=TObmfvnzmq_WGuGcbIfKX6Wmj4RpqwEh21Bc_OFFwGE,12097 +botocore/data/payment-cryptography/2021-09-14/endpoint-rule-set-1.json.gz,sha256=fUe66pDiGBni1kR-NDJbvoLFEx6Furx2wK47v8Oph8k,1319 +botocore/data/payment-cryptography/2021-09-14/paginators-1.json,sha256=Q3nZHuUZ53pNZpShnEVxB2Z6ec8thvlIx-hPXFVBNM8,504 +botocore/data/payment-cryptography/2021-09-14/service-2.json.gz,sha256=iXq86hQFfrQ84vlrD2r_pAOw2L3vXf5bT7SAl1Y4I0I,13268 +botocore/data/pca-connector-ad/2018-05-10/endpoint-rule-set-1.json.gz,sha256=E38_EflusX80dIgeiNEVimdmrLtTb9j8URWirlKBl1Y,1296 +botocore/data/pca-connector-ad/2018-05-10/paginators-1.json,sha256=AS3R0cOqXrf6ALY1Ar4Z_HdXbvrA4SwPve_YSeqtIFc,932 +botocore/data/pca-connector-ad/2018-05-10/service-2.json.gz,sha256=2W9ZzV7Vo726c2ZXkJJV2aHauSh2W15IZyXbb9c2oCU,13160 +botocore/data/personalize-events/2018-03-22/endpoint-rule-set-1.json.gz,sha256=4Q7lr3alLEM7FzCHW9vgDRKVlqCWQ51FNOqwZqNnKqM,1159 +botocore/data/personalize-events/2018-03-22/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/personalize-events/2018-03-22/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/personalize-events/2018-03-22/service-2.json.gz,sha256=QElXIIqHt0f126TC5OrZokCys9KZy7IcWSlYfSz5GDA,3870 +botocore/data/personalize-runtime/2018-05-22/endpoint-rule-set-1.json.gz,sha256=abhJKKmaOA6qzzZc0XboL0HzrrD9n7ioxykfXvNZ4F0,1160 +botocore/data/personalize-runtime/2018-05-22/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/personalize-runtime/2018-05-22/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/personalize-runtime/2018-05-22/service-2.json.gz,sha256=Oexy079p3gn-5_ce7DyauZyJdlPh0olOETZN72Q3Hq4,3474 +botocore/data/personalize/2018-05-22/endpoint-rule-set-1.json.gz,sha256=rQhwQUd_QP8rzZ2CVF1V6tQMvosr9u04cSJ4CLFcbl4,1154 +botocore/data/personalize/2018-05-22/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/personalize/2018-05-22/paginators-1.json,sha256=PfTPE03jTLANh2F51b68_GALtAUqFWJp2R0o2Xl5u0A,2766 +botocore/data/personalize/2018-05-22/service-2.json.gz,sha256=doICuocVYjx8ZF7Ikxw2DsWfJUYPtdtL84vpiI-A1hw,25945 +botocore/data/pi/2018-02-27/endpoint-rule-set-1.json.gz,sha256=hT9nZ-PuzuN6KQREAi0pumG5R4cSJ4x3wwSR38yh0mI,1143 +botocore/data/pi/2018-02-27/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/pi/2018-02-27/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/pi/2018-02-27/service-2.json.gz,sha256=WcF_A-EPi-kl4P5vgCtUpIDh75chnlKIUFNH3fSF_N0,11007 +botocore/data/pinpoint-email/2018-07-26/endpoint-rule-set-1.json.gz,sha256=5rjDxoxDsTbpxTN7MoctCX-acMnYp6yN34pR-Yjcxic,1145 +botocore/data/pinpoint-email/2018-07-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/pinpoint-email/2018-07-26/paginators-1.json,sha256=G74a7tI3gD77zuNQfj6bfDHtriSA2qhAWh6Su9Tw6Bc,914 +botocore/data/pinpoint-email/2018-07-26/service-2.json.gz,sha256=OfbQIazoukeVCwZzpa80StuzTySdznagN0H0YYzBdsA,23610 +botocore/data/pinpoint-sms-voice-v2/2022-03-31/endpoint-rule-set-1.json.gz,sha256=7NN3WYC0N8Ays71m_p4PYLBKugGKody32LSdmXU5vUs,1152 +botocore/data/pinpoint-sms-voice-v2/2022-03-31/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/pinpoint-sms-voice-v2/2022-03-31/paginators-1.json,sha256=rYvx9iclfkmSShWPVL6xH3peA35ce2lpsOI1YKEgna0,3727 +botocore/data/pinpoint-sms-voice-v2/2022-03-31/paginators-1.sdk-extras.json,sha256=PemFH9N5xIhFFsL0NeaK_OIvlCHX1f7yYTr4LMpajd4,1242 +botocore/data/pinpoint-sms-voice-v2/2022-03-31/service-2.json.gz,sha256=9vt38IaxAWy2x0gczoXFbY8a1iYKj7UEoU1Fajo6rbE,30921 +botocore/data/pinpoint-sms-voice-v2/2022-03-31/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/pinpoint-sms-voice/2018-09-05/endpoint-rule-set-1.json.gz,sha256=aCHyzPcHJhZGGOdHMrvX9MBGljcI13KRqOhHLF7g4YE,1112 +botocore/data/pinpoint-sms-voice/2018-09-05/service-2.json.gz,sha256=3nfaQustTT3uqyP_J6shb7WrR4oQ3s81kgxOOGg4YD0,2998 +botocore/data/pinpoint/2016-12-01/endpoint-rule-set-1.json.gz,sha256=mKBmmiE-VrTrfJS1rWnQj69VtI1pZ2NKir6kVY7gCyc,1315 +botocore/data/pinpoint/2016-12-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/pinpoint/2016-12-01/service-2.json.gz,sha256=1N5V2MDSdcfZ6X5Kcw8dIH80kntdUsIq-UGMA-TobZY,69943 +botocore/data/pipes/2015-10-07/endpoint-rule-set-1.json.gz,sha256=XmrIYySpnr1bGMRu1D7TE8GuvdbTz6jfdMrRBvZyw40,1296 +botocore/data/pipes/2015-10-07/paginators-1.json,sha256=a_b-W2Fj-9dt3XIXqHzXHKGRz8elOX8p9h2pI3wg5ls,176 +botocore/data/pipes/2015-10-07/service-2.json.gz,sha256=ySe7bfdAJQTdMcF9mvdRY65kvwoEoMsb3i98PpwlkCg,20737 +botocore/data/polly/2016-06-10/endpoint-rule-set-1.json.gz,sha256=ErhUMstjv2DrDSrv8I1QfkYTUpAjZrPmphvwmB4JxD4,1149 +botocore/data/polly/2016-06-10/examples-1.json,sha256=-uFGLZQ6nTWN0cCt3DVe5TWPh8TbmBGwBTOpcW1Uq00,5102 +botocore/data/polly/2016-06-10/paginators-1.json,sha256=IJnO61fPCtuJPYshmxGjm9ZzkXfOxEvsL0acyUPG55E,463 +botocore/data/polly/2016-06-10/service-2.json.gz,sha256=kHRrfOkBFght5vpCYCD9mRfjZLIiGzHdA5DGPCkQDzU,8164 +botocore/data/pricing/2017-10-15/endpoint-rule-set-1.json.gz,sha256=B5bEhmG63UEjFwfWJgqjCD7xolEy_7ri731dXP2GQbE,1216 +botocore/data/pricing/2017-10-15/examples-1.json,sha256=LX0A-kHCd3N64FsP7EdT6IV-Sej2qNX9ygW6n6jBucs,4263 +botocore/data/pricing/2017-10-15/paginators-1.json,sha256=rizUQ-J932MNyVUTMjrRSVOm-tmzWnvnYhWoIMGxuuM,820 +botocore/data/pricing/2017-10-15/service-2.json.gz,sha256=OiGI7wm_kWAZTBNlyWLdFgvxa6fkLSI5qOZW07AuUUM,4158 +botocore/data/pricing/2017-10-15/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/privatenetworks/2021-12-03/endpoint-rule-set-1.json.gz,sha256=77U49UPxwFLpuggyMekvRuWaHVDb4tqsJom6Ko3dFX8,1156 +botocore/data/privatenetworks/2021-12-03/paginators-1.json,sha256=2t0Vnl787IXWCNFDMXckoCvxqZR8HCwSdkrODId7u_U,878 +botocore/data/privatenetworks/2021-12-03/service-2.json.gz,sha256=GhJyhnk3TTBMM3T_romC1VXQFOTkpcKwwjJU2HQF1mc,8927 +botocore/data/proton/2020-07-20/endpoint-rule-set-1.json.gz,sha256=l3TH2sz9mHv7CU2rooacbXpF-DrmJYDiijVxaR_gzXo,1146 +botocore/data/proton/2020-07-20/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/proton/2020-07-20/paginators-1.json,sha256=oioU0xuoNT12gWLZPvkd8rPQIM9gk8AOnNiZxDJybLs,3501 +botocore/data/proton/2020-07-20/service-2.json.gz,sha256=oMNzxiTQtB2Nv5hxAjeS9qWXuRSZaG_ojy67PNhufDw,28066 +botocore/data/proton/2020-07-20/waiters-2.json,sha256=sGpaiRnx46CfHQh_T__IIByVlrchRRjseWa3NCdIqdI,6872 +botocore/data/qbusiness/2023-11-27/endpoint-rule-set-1.json.gz,sha256=fRDuERIopCHlvjapDAu_j-xBfSZGCzoKRFwEoFHke8k,1128 +botocore/data/qbusiness/2023-11-27/paginators-1.json,sha256=Qr-2G_TbbrcPxQBgvp9QG4e29RLJgpe8EwY1QRTPFVs,2047 +botocore/data/qbusiness/2023-11-27/paginators-1.sdk-extras.json,sha256=iXcWL35V8yukAib1LgQe9dFh2S6kLBQWmqyk7JqzJc8,270 +botocore/data/qbusiness/2023-11-27/service-2.json.gz,sha256=HOkbhUPlmiK2PI6aDh-6aaTOxfdZN8mofFnSrY1rj1w,25624 +botocore/data/qconnect/2020-10-19/endpoint-rule-set-1.json.gz,sha256=kE3BmMB7UKe4qiVB0pxDAzuF2Yf6EPBSf8tib59gqgE,1299 +botocore/data/qconnect/2020-10-19/paginators-1.json,sha256=YgRoe6ytpnWa0TPBTiY7O9ZWSkEWH8cCwbQhhc9eo0U,1778 +botocore/data/qconnect/2020-10-19/service-2.json.gz,sha256=194YzHtckdEwB_7lXtrXrdtDvrSuSHXvuyU6zm0ujgw,19026 +botocore/data/qldb-session/2019-07-11/endpoint-rule-set-1.json.gz,sha256=XOhfHU4JfmavJCqcaSLmTgaodeLeao81AtKh-E_0V-M,1151 +botocore/data/qldb-session/2019-07-11/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/qldb-session/2019-07-11/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/qldb-session/2019-07-11/service-2.json.gz,sha256=Ne9dfwcMMOIx_dOWwsmDV4S5z3pOkLlMG-m5xn2X8NE,3035 +botocore/data/qldb/2019-01-02/endpoint-rule-set-1.json.gz,sha256=mkz_SZK5PnE3CRfS00PmWO-rNLIGMB5PdWvzZ3DDSSU,1145 +botocore/data/qldb/2019-01-02/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/qldb/2019-01-02/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/qldb/2019-01-02/service-2.json.gz,sha256=JGwm8CgF_tzwU3GJGB2p1HY8wNcvBkGkk_dw36ywumo,10992 +botocore/data/quicksight/2018-04-01/endpoint-rule-set-1.json.gz,sha256=N1A6GrWS56ZHiQnHcp_Wsth7bzvn-k-lbnEEnLcEad0,1153 +botocore/data/quicksight/2018-04-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/quicksight/2018-04-01/paginators-1.json,sha256=W360YRVmZloMdg1jyt2nusy8L3ZVJZu8n5IgnCtdMOY,5477 +botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json,sha256=bcn5gSjB7MwLOFRq5359e4JjeiRrBkwBiDOiHVa1rsI,3927 +botocore/data/quicksight/2018-04-01/service-2.json.gz,sha256=iBtL2IQAhQsL6cz4by-Nfyy1CUCAsvIacAVWYqpmxJE,152862 +botocore/data/ram/2018-01-04/endpoint-rule-set-1.json.gz,sha256=4BQaW8C5EkpeR9jrfImRBErRpCMc3xIzN2pG5YGuzI4,1234 +botocore/data/ram/2018-01-04/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/ram/2018-01-04/paginators-1.json,sha256=68WO6NwCy0OQL3rko-MRoZ0l1F2vhih8z8F3sse3R3g,1085 +botocore/data/ram/2018-01-04/service-2.json.gz,sha256=BFxbQi5ZsroyIoZhG_qZcFZP5rzpZSLa_QviHQpm8dw,17997 +botocore/data/rbin/2021-06-15/endpoint-rule-set-1.json.gz,sha256=raGWxvfeVSJKqdefJeucGIaXraxSp3iPhwaV6BnLMDw,1147 +botocore/data/rbin/2021-06-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/rbin/2021-06-15/paginators-1.json,sha256=LB-X6UiLpJdFPrOCSc0raKGabdXiY9PhtS7nzQJbMts,181 +botocore/data/rbin/2021-06-15/service-2.json.gz,sha256=UWiICtrNpNqBgvspQy8gYlV7MMk-cDnlDZUMeybH_v0,4330 +botocore/data/rds-data/2018-08-01/endpoint-rule-set-1.json.gz,sha256=mj7iIrAqXrBW2dGgmV9jIRT1QsIYF9vXq1ulMOTjb8c,1151 +botocore/data/rds-data/2018-08-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/rds-data/2018-08-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/rds-data/2018-08-01/service-2.json.gz,sha256=mCB-Br8Xbnp0yRdUqLcb11jl3tLwvIURe34psrxagcM,6401 +botocore/data/rds/2014-09-01/endpoint-rule-set-1.json.gz,sha256=Hf67Oh4R4eoVMdgsv5jQO3qackBWh2V7g6UOGVI-UZk,1234 +botocore/data/rds/2014-09-01/paginators-1.json,sha256=CKMhQjYqNQB1hiHNi4vCNIVtQvu29SM_ySRhqxTKfOQ,3095 +botocore/data/rds/2014-09-01/service-2.json.gz,sha256=9pdihpXT7SgopALv__1cyYHKTAHGm9ta-bUY37V_DNY,37839 +botocore/data/rds/2014-09-01/waiters-2.json,sha256=9BpCCotIHKKeyJHD5Bo1fdRi6EnHK6jyJJx_9wswzCQ,2645 +botocore/data/rds/2014-10-31/endpoint-rule-set-1.json.gz,sha256=5BpFZT7idrHrGEiq2ZCxwu6KIiq3oC491qo56zJhpjo,1232 +botocore/data/rds/2014-10-31/examples-1.json,sha256=Pa_Dpbo8pg0O9rZRPEuFXsgnzT6XUqIfwHpXauQnc0M,57903 +botocore/data/rds/2014-10-31/paginators-1.json,sha256=lGkdOcAY7evx-HcHdGw-Gc6f_jJpJRCWPnA5OFVe0n8,7216 +botocore/data/rds/2014-10-31/paginators-1.sdk-extras.json,sha256=S21buVoyp0LlykSD0lYWlVIRbOqJB4qpVw7mt2GFprQ,192 +botocore/data/rds/2014-10-31/service-2.json.gz,sha256=B5OYaHWrM5hMsri-w23DFZkW2c7s6dy4DTcYvBzqG10,148446 +botocore/data/rds/2014-10-31/service-2.sdk-extras.json,sha256=NWqAyPauBSLTPFOO_wMu4XZ7VTkw7nY8QjCorphUpTM,1345 +botocore/data/rds/2014-10-31/waiters-2.json,sha256=DaJxFaWQOJpx0aNV4rEHX8yDWHBfTWHNkA3u6NgDAOk,10970 +botocore/data/redshift-data/2019-12-20/endpoint-rule-set-1.json.gz,sha256=_zFIiiRfMXGFNAxPZWESgOjVRRx-thsG5KEHdjh_458,1151 +botocore/data/redshift-data/2019-12-20/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/redshift-data/2019-12-20/paginators-1.json,sha256=pTodaTjP4vyeMJ1vi2z6dXlhZ8bzMbG5tszVa5ecXNI,972 +botocore/data/redshift-data/2019-12-20/paginators-1.sdk-extras.json,sha256=UZq2Z0iNiqOovkDKsQDRL7mLznTmcTB6uWAHDosl3tk,296 +botocore/data/redshift-data/2019-12-20/service-2.json.gz,sha256=jI2i75g2b6dkE-wTfE52s9rcpNFL1PKaiVpQB1Cb67g,7105 +botocore/data/redshift-serverless/2021-04-21/endpoint-rule-set-1.json.gz,sha256=zapMYKSLalr-36Mwm8IfsQoWveVL5oFblxt_n2WPZq8,1158 +botocore/data/redshift-serverless/2021-04-21/paginators-1.json,sha256=riPpaR2zgPb8A-kYrawb_5IowSJVsHP0_An24IwnK3U,1774 +botocore/data/redshift-serverless/2021-04-21/service-2.json.gz,sha256=4PggWtS6pr6dln8M0s1fEmJIjvUGeKwWN8JBuhQwfaI,17110 +botocore/data/redshift/2012-12-01/endpoint-rule-set-1.json.gz,sha256=f0mHDlxG1zXNMnueRrrH9458j1lomSaFAwQO-O_SmLQ,1236 +botocore/data/redshift/2012-12-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/redshift/2012-12-01/paginators-1.json,sha256=o7YuDaCGl6kEYU6AVJJcd_0YIZdgvB8PsuT9Wxl7INk,6363 +botocore/data/redshift/2012-12-01/service-2.json.gz,sha256=EkKaYXtt3uHdzrTZ1dNTRebfqNXqEP02K5cYaFuFrKo,70554 +botocore/data/redshift/2012-12-01/waiters-2.json,sha256=mvax_COD6X10xa7Toxa2DsrarFdKFg9kOWbIKRLahS4,2344 +botocore/data/rekognition/2016-06-27/endpoint-rule-set-1.json.gz,sha256=fNVQ8MNZSU3YOpENmB6eA6Hro5tiGj_TMqFJ2nN1NDU,1152 +botocore/data/rekognition/2016-06-27/examples-1.json,sha256=pEUj6cF9yKB10eaE3lAAObBMc4nV3Jak105Ro2A3ZMc,20327 +botocore/data/rekognition/2016-06-27/paginators-1.json,sha256=mDoU6wXUCCgHeOrcvnEqTpQ18yV5otpEqZt5TsFarFA,1699 +botocore/data/rekognition/2016-06-27/service-2.json.gz,sha256=bJNDVFJH-k6SagQlp7dNTD26hrLWlEeAZQA9gVMepHQ,69775 +botocore/data/rekognition/2016-06-27/waiters-2.json,sha256=KRKVzu37WzZwVdazhDURGYo_qTbgIDDIhBTPyvTt1lg,1542 +botocore/data/repostspace/2022-05-13/endpoint-rule-set-1.json.gz,sha256=P8Wr6WfBtNaYTB7mYOIgY_1kVqb6p7RiXEhCyKpc2cg,1302 +botocore/data/repostspace/2022-05-13/paginators-1.json,sha256=l2K-MFT1bld9enr5-e6GITswfFbKf-R8DEfZaI6KPc8,183 +botocore/data/repostspace/2022-05-13/service-2.json.gz,sha256=o6hZviFwwzkaxAGB5DWYh7M86zUkyIqtUQIMg01Shgw,4335 +botocore/data/resiliencehub/2020-04-30/endpoint-rule-set-1.json.gz,sha256=5nJ2vdSquRka9SX8-JobvMFzRg4MwUY6jgqf_7iU1Qc,1154 +botocore/data/resiliencehub/2020-04-30/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/resiliencehub/2020-04-30/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/resiliencehub/2020-04-30/service-2.json.gz,sha256=pX7sxp1JbBPB6WSpfHO_novVzI8-P2sBPddu0EJ2TAA,25563 +botocore/data/resource-explorer-2/2022-07-28/endpoint-rule-set-1.json.gz,sha256=SCCxW_uFv6PH63LyEn11Hq7XQ-IzrQYwDwd9-rnRSB4,1136 +botocore/data/resource-explorer-2/2022-07-28/paginators-1.json,sha256=bWLY1D7sMpwKr2es_i6LGbiISopcVrqak2MOv5gbeHc,849 +botocore/data/resource-explorer-2/2022-07-28/paginators-1.sdk-extras.json,sha256=J3Mpshl1o5fjl1TsHoZoS9TRUOIsww_irE_qtAMNUf4,172 +botocore/data/resource-explorer-2/2022-07-28/service-2.json.gz,sha256=PPAag55nTg6UnvKfWckIZ-P5KJ600chbwRAwFCSg-88,11928 +botocore/data/resource-groups/2017-11-27/endpoint-rule-set-1.json.gz,sha256=fzplgqTeLyK6j4CnYI4GnEkO8y6LqPhKyQf5oXbdIzs,1243 +botocore/data/resource-groups/2017-11-27/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/resource-groups/2017-11-27/paginators-1.json,sha256=k1XV_MZrDEKU1boAc5CsYD_1DRfpjPfB1D1cnFLZuOE,623 +botocore/data/resource-groups/2017-11-27/service-2.json.gz,sha256=aju7qYpRQGEJC-oHYPfkgSUyRsM6WFpZ2SATBqC6xec,10953 +botocore/data/resourcegroupstaggingapi/2017-01-26/endpoint-rule-set-1.json.gz,sha256=kZOkPm2bps0pwX9WvYX2wDtHuqO4Bp9J0QFlomqHHM4,1147 +botocore/data/resourcegroupstaggingapi/2017-01-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/resourcegroupstaggingapi/2017-01-26/paginators-1.json,sha256=_NdoJ81VYpnX6AtSk2EBR7zAQf0S5WSbVxXq33ZXghU,684 +botocore/data/resourcegroupstaggingapi/2017-01-26/service-2.json.gz,sha256=hNZ-oy5p3-P_6nPCrTa6wB_buawpbepai3fyKnGKkh0,7721 +botocore/data/robomaker/2018-06-29/endpoint-rule-set-1.json.gz,sha256=OCo7gk6_ZlJo7wRG-IAR0JtLc6c5Q_gr9YGygKGpk7g,1148 +botocore/data/robomaker/2018-06-29/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/robomaker/2018-06-29/paginators-1.json,sha256=zHASRcWF0d1i1iWFCA6xa2VkSgv-WXj48_kEUGAlhqQ,2001 +botocore/data/robomaker/2018-06-29/service-2.json.gz,sha256=5gqWGPt2MZlzpLTpqpq2iYwc7LW38kGgZ4-vDLOYqLI,24335 +botocore/data/rolesanywhere/2018-05-10/endpoint-rule-set-1.json.gz,sha256=9N8FcEugRirBbt3lZQQke-hn1wI79HZfrz5FVKaJf2A,1151 +botocore/data/rolesanywhere/2018-05-10/paginators-1.json,sha256=IaF8k8b_3R6qbXcxbFkIQqN0DTaCim4eQhIiEanVZkc,541 +botocore/data/rolesanywhere/2018-05-10/service-2.json.gz,sha256=wT6hHWR_cuSwbPWvrSdUoe6qGYCTPd6b2GNwhsHybr4,6347 +botocore/data/route53-recovery-cluster/2019-12-02/endpoint-rule-set-1.json.gz,sha256=RvYVpqNK_WAgIqMZu0DjPd8_6hd5kHp2X75Gvk5OfAE,1169 +botocore/data/route53-recovery-cluster/2019-12-02/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/route53-recovery-cluster/2019-12-02/paginators-1.json,sha256=UhH6MsunbcB3w057DvJoHxEWGweOpch31kCr68-51eQ,201 +botocore/data/route53-recovery-cluster/2019-12-02/service-2.json.gz,sha256=OxVxH-R3f4WLQBz6yiMQWQXaQZD5DqhBL6Z1ru7jCd8,4022 +botocore/data/route53-recovery-control-config/2020-11-02/endpoint-rule-set-1.json.gz,sha256=KxbZ_mztFRHPMmS2xO4oIr-v6zGZYkTw5DnI5bceRW0,1286 +botocore/data/route53-recovery-control-config/2020-11-02/paginators-1.json,sha256=eDByeUTgAtdsrqJD0NiWUp5AfuXhqM2q0oa-5MCgt38,892 +botocore/data/route53-recovery-control-config/2020-11-02/service-2.json.gz,sha256=FoR_t-lHITjMvTnkcj44P-WH6d2xQGb79o2bOdjq-ts,8198 +botocore/data/route53-recovery-control-config/2020-11-02/waiters-2.json,sha256=iw6vHr5XZ7c87aPCP4ejk0EHpOVt-ZT2ioC0asbgGJA,3674 +botocore/data/route53-recovery-readiness/2019-12-02/endpoint-rule-set-1.json.gz,sha256=ZItsPGU4AUU_2vXYQXUbRJLBpmHp7tLuricqOKYV1zE,1166 +botocore/data/route53-recovery-readiness/2019-12-02/paginators-1.json,sha256=bkbDR1VU1mtDe84KapiLM8rWUPHKj-aEpn7TLzqFeW0,2032 +botocore/data/route53-recovery-readiness/2019-12-02/service-2.json.gz,sha256=U5gHnnlaqw7dNgT7l9pgpvdrwjDcDtjb1l6eK4V44Hc,7313 +botocore/data/route53/2013-04-01/endpoint-rule-set-1.json.gz,sha256=m_6U6omL7_hpIjqnQLSE1jtx4bqhHFX773-rSIVxfVY,1705 +botocore/data/route53/2013-04-01/examples-1.json,sha256=C3c7hhO4Y2jbpqrTEGNc7x007deldIJsNVDxdhaH_T8,29631 +botocore/data/route53/2013-04-01/paginators-1.json,sha256=-nS2WnQKiOUbqyQRXiMxCbqHwZ7xJQXVS98-vYEjiuI,1734 +botocore/data/route53/2013-04-01/service-2.json.gz,sha256=Irj6Qm5RSCAPBO8wbQAwoU3cTouCyWOE2XDaisedwgw,62960 +botocore/data/route53/2013-04-01/waiters-2.json,sha256=s6BzW8AQ9pEM5yCsRa64E7lfUvhX5vxNARuiAtZwjsU,338 +botocore/data/route53domains/2014-05-15/endpoint-rule-set-1.json.gz,sha256=l3-TXkSeI5qLIVvIzjXQvhutCuPCOJbIrv2avusUTwc,1156 +botocore/data/route53domains/2014-05-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/route53domains/2014-05-15/paginators-1.json,sha256=VN49BhgZ_VxpcqSi9W0aIr8bv4iFv9QnrVoUerrFwoI,696 +botocore/data/route53domains/2014-05-15/service-2.json.gz,sha256=WD1D6XkTZDgD6__CRyVNoU2-Hqw85avt5tJ0TdVUHMY,20989 +botocore/data/route53resolver/2018-04-01/endpoint-rule-set-1.json.gz,sha256=o425hqkRNJ0901vEqGGZ9asufd64WN6sjPoMmbHsoVA,1242 +botocore/data/route53resolver/2018-04-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/route53resolver/2018-04-01/paginators-1.json,sha256=dZl4mnbzBj99_gIPlVRqF3YSMSG98HW1xVD1Kh1C_-k,2954 +botocore/data/route53resolver/2018-04-01/paginators-1.sdk-extras.json,sha256=3XJ5UEbB_NT-xjx41jRgxgoNKMWuUL-bcLPzf9n1o9I,806 +botocore/data/route53resolver/2018-04-01/service-2.json.gz,sha256=0mowP2zYae63dIfHLxRqJsYD28TGGIh9XGtOcB3z1Ao,29572 +botocore/data/rum/2018-05-10/endpoint-rule-set-1.json.gz,sha256=krRwVCxAaH6qpoFi3jjwYVo8C-2XzQGwmXQpAXbqI0c,1144 +botocore/data/rum/2018-05-10/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/rum/2018-05-10/paginators-1.json,sha256=eiv4iOnLCb9wVy6VijmIS8FeKbt7SfSmIY3M4qv3wIs,733 +botocore/data/rum/2018-05-10/service-2.json.gz,sha256=pEEYYNWuk15G26kdfvHZTxP8UuIo1HqHCNiRBPIk7CM,12741 +botocore/data/s3/2006-03-01/endpoint-rule-set-1.json.gz,sha256=nWWI39fHRSGClh_VQHFntGyCPx1iPlkUi165lC3jOdE,17449 +botocore/data/s3/2006-03-01/examples-1.json,sha256=bGw9MrbmwHRES_w7kwW-Hr31-Js7JGP_oxoE4Tw21b4,57596 +botocore/data/s3/2006-03-01/paginators-1.json,sha256=jbv5vlTj5QD2egSzNFUqDF_S1tJ8Wd6WZuShzWpriGM,1661 +botocore/data/s3/2006-03-01/paginators-1.sdk-extras.json,sha256=4M1PVXBdw41zu6Am3FvAZHX5aQEcNCvm2r-tf0xdMjA,662 +botocore/data/s3/2006-03-01/service-2.json.gz,sha256=Qne6m3jfFAFg0MDcNo3mUOdUxMgMIBUTHsukk39_XPM,137156 +botocore/data/s3/2006-03-01/waiters-2.json,sha256=m0RJIxnJW7u6emLjY1201rmfeKxgz1f7VDU7qKJOI4c,1436 +botocore/data/s3control/2018-08-20/endpoint-rule-set-1.json.gz,sha256=MAl7b0W05t6nPoNsrgYjrIGMWg6KpQ-cojisQrbQCGc,7594 +botocore/data/s3control/2018-08-20/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/s3control/2018-08-20/paginators-1.json,sha256=mQbakYLFsRf-PwUykRHaPqhJ5lmg7TydWKz85l_Wv0g,225 +botocore/data/s3control/2018-08-20/service-2.json.gz,sha256=WZJBks7jWD3UjbisbUagKXoY89ZcAy0tQbjaCOA3BnE,58689 +botocore/data/s3outposts/2017-07-25/endpoint-rule-set-1.json.gz,sha256=FhZBOwezMs2YrOIy8Ub7b8EswT-hUTJlqq7R2kQ0tEM,1154 +botocore/data/s3outposts/2017-07-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/s3outposts/2017-07-25/paginators-1.json,sha256=MNhAyDW1gAXK_msh5EL1QpaFjXE7KCnk2xzMuUZUiT4,527 +botocore/data/s3outposts/2017-07-25/service-2.json.gz,sha256=lfIX4hq-JK3lSt1EHUIxxNsye0UFpN1zZvkqAHUD4AU,3453 +botocore/data/sagemaker-a2i-runtime/2019-11-07/endpoint-rule-set-1.json.gz,sha256=k7PWMkAzH4HbnId1XVjN7IpAMwSysZxWa-7oh5RXdeU,1160 +botocore/data/sagemaker-a2i-runtime/2019-11-07/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sagemaker-a2i-runtime/2019-11-07/paginators-1.json,sha256=X0gq-uz_QUVGPACQxWwKf6n-ZZ-MsaXi3huDYMOu10o,199 +botocore/data/sagemaker-a2i-runtime/2019-11-07/service-2.json.gz,sha256=vr9zqQR7_PlB6mL_P6Q7eAvoVY8ADDZ75BJ-WjCQgPk,3777 +botocore/data/sagemaker-edge/2020-09-23/endpoint-rule-set-1.json.gz,sha256=3HN3o6REtek353tvIc2ueHyPeYi24qnW5DFxwzWaAh0,1152 +botocore/data/sagemaker-edge/2020-09-23/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sagemaker-edge/2020-09-23/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/sagemaker-edge/2020-09-23/service-2.json.gz,sha256=tXswOpEuxFdCjq9AX2be6TArBSq7ojY6MTUe6R-1MyE,2219 +botocore/data/sagemaker-featurestore-runtime/2020-07-01/endpoint-rule-set-1.json.gz,sha256=EYZA26a3AsUPS4I2aojRhbHthh0QPYt0Z0VcbAtLiec,1165 +botocore/data/sagemaker-featurestore-runtime/2020-07-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sagemaker-featurestore-runtime/2020-07-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/sagemaker-featurestore-runtime/2020-07-01/service-2.json.gz,sha256=Dv24cSyIQM5x-6AQgYG6sPu6Sig2XLp5FszG3s0mZoM,3957 +botocore/data/sagemaker-geospatial/2020-05-27/endpoint-rule-set-1.json.gz,sha256=z-uaWD4vQO9iY2KsGjPCWNvqHt9GvpJlhXYLqmvQ2w8,1299 +botocore/data/sagemaker-geospatial/2020-05-27/paginators-1.json,sha256=F6o4MlbqixSACzxItwWHBiMmvvc3VqdxdWlY9NRKy6E,609 +botocore/data/sagemaker-geospatial/2020-05-27/service-2.json.gz,sha256=8_oICcjFoXDGflC90Qr48h2ESpLx0i3m_XRQHoWvU-I,11920 +botocore/data/sagemaker-metrics/2022-09-30/endpoint-rule-set-1.json.gz,sha256=E9qcoyZI0pWC2KHAqdXrHKwk8rzQGKNekbPNcnsYoKU,1296 +botocore/data/sagemaker-metrics/2022-09-30/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/sagemaker-metrics/2022-09-30/service-2.json.gz,sha256=pXNL4-TEh9WDBKMZmN-gUPxJg0v0oaqh6mM8NEyKDHE,1359 +botocore/data/sagemaker-runtime/2017-05-13/endpoint-rule-set-1.json.gz,sha256=c8mVRaFSiUAicJFAdfECGzocWxLV-2AjnNrrecbbbdI,1274 +botocore/data/sagemaker-runtime/2017-05-13/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sagemaker-runtime/2017-05-13/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/sagemaker-runtime/2017-05-13/service-2.json.gz,sha256=VjvEL_4t7cUlBE3mfn1L8vouDPKo8OGqSrXjlKGzLG4,5152 +botocore/data/sagemaker/2017-07-24/endpoint-rule-set-1.json.gz,sha256=kjWfUvjoPfjtR-3khraJJJZiVe5R4PwvqE-84SwxQVA,1271 +botocore/data/sagemaker/2017-07-24/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sagemaker/2017-07-24/paginators-1.json,sha256=mzN7Zfc6wMbUh3ecQRP6u7_EuDEBvTI7TJm81-irats,12995 +botocore/data/sagemaker/2017-07-24/service-2.json.gz,sha256=HGU-pdZZjhjKznfT1qCzXtoh8fpqpAI8YQEsJ6q9yWQ,270399 +botocore/data/sagemaker/2017-07-24/waiters-2.json,sha256=s0kutyNgTzNXRyNRBkjUpqnkcauHlnwBcgpfxVvA0bw,7559 +botocore/data/savingsplans/2019-06-28/endpoint-rule-set-1.json.gz,sha256=2qXj49FWcIYoLsjbGKMcmjLsvCLFgzhu2yba_i2j4mw,1309 +botocore/data/savingsplans/2019-06-28/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/savingsplans/2019-06-28/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/savingsplans/2019-06-28/service-2.json.gz,sha256=S4F_Y5FdGtYZn9VrRiVE1QRGg4WDJoHr1JK2BujHOmk,4100 +botocore/data/scheduler/2021-06-30/endpoint-rule-set-1.json.gz,sha256=wdlugcSljJ4m8AG-xqhaFWyITCLM4UIX-kjlNTO27sM,1290 +botocore/data/scheduler/2021-06-30/paginators-1.json,sha256=VH5c3yVo1Un4lL_GVN-D3A5GNOTWMmnqAQ0QZAOMJOo,363 +botocore/data/scheduler/2021-06-30/service-2.json.gz,sha256=kwYAQYr0ayqRk7Xu585BoaCb38j_0KY8zErpSZ-ifpI,9349 +botocore/data/schemas/2019-12-02/endpoint-rule-set-1.json.gz,sha256=Z2qzaUynpDOPT8jozQ7B6UxgRDza-l8qFPVlQt6m2Ck,1147 +botocore/data/schemas/2019-12-02/paginators-1.json,sha256=JG7VhSHU5MW5ZSEzWuvc0fcOMdYngtguHEeVk1fPoro,830 +botocore/data/schemas/2019-12-02/service-2.json.gz,sha256=buk_7ARWC-cDDH2GAIfJntpID-F0vOg3dWbINVJiwTg,5698 +botocore/data/schemas/2019-12-02/waiters-2.json,sha256=t1IowU2djOrDdhK7r7dmmVfVARz1Zp31Dl3MPtnqy5I,824 +botocore/data/sdb/2009-04-15/endpoint-rule-set-1.json.gz,sha256=qyxbbu6C2MLUXCvyrV-RHYWJvDyp8w7ZGURY0fWIhlE,1198 +botocore/data/sdb/2009-04-15/paginators-1.json,sha256=3KF7ZF879CPbTIZ8drlqnq5S3aFHdubXunwekE3ARG4,317 +botocore/data/sdb/2009-04-15/service-2.json.gz,sha256=lhKBgydFIW1MJ_v1rV1VdTnse_rswiNk7AoyCHQ4hZQ,6036 +botocore/data/sdk-default-configuration.json,sha256=LlmdeqSk0HQAKMCGNgPsFO1K6dJXQdjzq8Ad3wRs7g8,4135 +botocore/data/secretsmanager/2017-10-17/endpoint-rule-set-1.json.gz,sha256=W9ttpMfehQFjkAgi-KigU-rPVLHVqoqjkB6WYSyEpHk,1354 +botocore/data/secretsmanager/2017-10-17/examples-1.json,sha256=3LKYx_uc48qXDFx7m8cU2l8XByq1wu28h5fOggrmDCI,22410 +botocore/data/secretsmanager/2017-10-17/paginators-1.json,sha256=wFoEW6m_jRSAAt8D1r54a9XXWnZerkFn83sHj413-ww,188 +botocore/data/secretsmanager/2017-10-17/service-2.json.gz,sha256=13oozykrlqxc5AfFx8968TXiT_MF-AM7mLc5ZRI2FF8,20332 +botocore/data/secretsmanager/2017-10-17/service-2.sdk-extras.json,sha256=IEA3uxtjPY8I1on-q2W9-tozHHIVmneQyB6gCTcYTro,120 +botocore/data/securityhub/2018-10-26/endpoint-rule-set-1.json.gz,sha256=53kNWLk9Xac_MFDIYOFw_ePvuD9G5mbXPkIeX_ljvVg,1152 +botocore/data/securityhub/2018-10-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/securityhub/2018-10-26/paginators-1.json,sha256=v4BqR8RUobtNQil4RRAKgXo1GXA8mtXS2QZFQqIWBDk,3084 +botocore/data/securityhub/2018-10-26/service-2.json.gz,sha256=fqkXn9mvb0iBZeISMBja-a0Jfm1FH3RZWk8LYkJj3Co,146379 +botocore/data/securitylake/2018-05-10/endpoint-rule-set-1.json.gz,sha256=3KpudNwZTgBjHl4V2gON-Gn_LfZDl61kxKSbUNl1kkQ,1293 +botocore/data/securitylake/2018-05-10/paginators-1.json,sha256=aw_RlW6BEfqxgzWUOJF6ZrCTf49mvjJ9uAmhefV_2kg,705 +botocore/data/securitylake/2018-05-10/paginators-1.sdk-extras.json,sha256=v0jKSsBUrC-WdKoMQzNm6hfXLmDajUWqKZtLDn1TA9k,169 +botocore/data/securitylake/2018-05-10/service-2.json.gz,sha256=vd_Rbsz4UJJ9iqM4ALrMAnGayYSUi8Y6Zp543nmvuqg,13662 +botocore/data/serverlessrepo/2017-09-08/endpoint-rule-set-1.json.gz,sha256=55aLCVoE3lHhcf1ADZ-fw8hVgYCKsHuYhUqTp-EWH-s,1242 +botocore/data/serverlessrepo/2017-09-08/paginators-1.json,sha256=6mp7kgpraGJSmfK8vEcMsz_LdDUfQN9dI4kjn83wRhY,543 +botocore/data/serverlessrepo/2017-09-08/service-2.json.gz,sha256=AITASWMpB-HWW0p5OqwZi-amYTzAC99NoDLcXBR5qvA,9555 +botocore/data/service-quotas/2019-06-24/endpoint-rule-set-1.json.gz,sha256=teNFqGWJNqqV-gVsylfckQmbopffJMeRt_YsQSxKpzA,1242 +botocore/data/service-quotas/2019-06-24/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/service-quotas/2019-06-24/paginators-1.json,sha256=e9hZphztzUJpLy1e7mpXUhwobjRsYyLMWkY1DYQfRpw,1149 +botocore/data/service-quotas/2019-06-24/service-2.json.gz,sha256=0UfujshtzaKHeWqrTOsjLjpaNsV7FliYpBSkQtGcJgM,6411 +botocore/data/servicecatalog-appregistry/2020-06-24/endpoint-rule-set-1.json.gz,sha256=iRJYWxBmQCBr01s1LTdfAkLg7qMFxNuKr_1jw60oIuE,1248 +botocore/data/servicecatalog-appregistry/2020-06-24/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/servicecatalog-appregistry/2020-06-24/paginators-1.json,sha256=2lclqrEMyRSrGV8L1DZoppkiLhUGI1VcinKImELBFi0,928 +botocore/data/servicecatalog-appregistry/2020-06-24/service-2.json.gz,sha256=ToRI_3jsimzI9mhgSsLzz_cb7BDQl4ECJAtDwqoAjhE,7841 +botocore/data/servicecatalog/2015-12-10/endpoint-rule-set-1.json.gz,sha256=MOKN_ACgIJRy1ekg9YPbgr0Wf_LNw4Kr0EiLKKPS0tI,1154 +botocore/data/servicecatalog/2015-12-10/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/servicecatalog/2015-12-10/paginators-1.json,sha256=ghdoop27a-JBxcfHGVvA0vMp9y_Z-MY1R7TuRQCrmP4,2996 +botocore/data/servicecatalog/2015-12-10/service-2.json.gz,sha256=JsHsEV5jOg8nbtpiYffEoGkKwvLRQf1l8F2Gor5R41Y,37370 +botocore/data/servicediscovery/2017-03-14/endpoint-rule-set-1.json.gz,sha256=8YlQ7u2JEm6tZFlBDcOIDbRzQsKbuD0MaeahW_VgRvE,1303 +botocore/data/servicediscovery/2017-03-14/examples-1.json,sha256=iJqJB_1uy_oppRbcXbl5SmCA2yLLVdSdj674nZ7dSQQ,18861 +botocore/data/servicediscovery/2017-03-14/paginators-1.json,sha256=sKu-j-WBHT8KpiemY4vgLiQkV1Ub2GtqLbYiUxdkjjE,683 +botocore/data/servicediscovery/2017-03-14/service-2.json.gz,sha256=0ThNZpb8YB2HZZPMuoxOMUWcTbAUz2_YCAtWuCkkBX8,18947 +botocore/data/ses/2010-12-01/endpoint-rule-set-1.json.gz,sha256=DfCkKegoEMFwZh8rhQUA4rJK_ogtQ0o64C8f4utTRco,1287 +botocore/data/ses/2010-12-01/examples-1.json,sha256=LdOG9qOcWahQ6xYBc3_UEV-teA96yJJSesbf0fNI8Bw,28834 +botocore/data/ses/2010-12-01/paginators-1.json,sha256=G_7q2KFDP0LwwEUoCgd9qikwYlHoaFwDjQ_3CtWBVPw,883 +botocore/data/ses/2010-12-01/service-2.json.gz,sha256=9VnAtcMZWiouL45Aw3HxWqIQViqG1nTL73jJAQlWmZY,35580 +botocore/data/ses/2010-12-01/waiters-2.json,sha256=4GF4zY3Tg43WiGAVWSJeabII8bSEU7_ElsMj_G3Bt68,380 +botocore/data/sesv2/2019-09-27/endpoint-rule-set-1.json.gz,sha256=gmnLGhlbavKp7OQcA3_QidcTOZ_Jbrox5elKf-OY9fo,1148 +botocore/data/sesv2/2019-09-27/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sesv2/2019-09-27/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/sesv2/2019-09-27/service-2.json.gz,sha256=H9yTxsr2ZxlAhNhozot096rwAK0ACkkqtaO0_056e6w,51832 +botocore/data/shield/2016-06-02/endpoint-rule-set-1.json.gz,sha256=hofYxJUT_jSRWhoqrIS5KQbpynws-ANXGMriEoIZNzU,1349 +botocore/data/shield/2016-06-02/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/shield/2016-06-02/paginators-1.json,sha256=MRQd38Sw6vMYcdoF_zRIXAdMaDQHs_indt6OtJxi0BE,361 +botocore/data/shield/2016-06-02/service-2.json.gz,sha256=v5jjYO7hmqMfEC7eQ8BxaGF4ULtOf2TCcxMzTHX4gEE,15227 +botocore/data/signer/2017-08-25/endpoint-rule-set-1.json.gz,sha256=VeJviyHJE3va8u0t8OijrYcujlHYsfUuw0Khm9WADOs,1148 +botocore/data/signer/2017-08-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/signer/2017-08-25/paginators-1.json,sha256=vjItW2pdi1KsZB_HwJEZqWIDJNHlrKbyxSuN6x8LHkU,526 +botocore/data/signer/2017-08-25/service-2.json.gz,sha256=zh8Wc0JomCddR0u2YbljPwYtB8zF9Gjoo3gvHT1oWCU,10011 +botocore/data/signer/2017-08-25/waiters-2.json,sha256=ZvZgSYJd2QhWkeR1jaM1ECQ8295slZ6oDEFLtA2tYRE,607 +botocore/data/simspaceweaver/2022-10-28/endpoint-rule-set-1.json.gz,sha256=G0Q_yyKhfqclZO-RQ0cTk9QcGx9wsHDpEyEKfL3EtUM,1294 +botocore/data/simspaceweaver/2022-10-28/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/simspaceweaver/2022-10-28/service-2.json.gz,sha256=pjsv-zGUp8Wj7Gm_Z3HEFBVKRxYfbrs5lYCtiWoQpQs,6915 +botocore/data/sms-voice/2018-09-05/endpoint-rule-set-1.json.gz,sha256=aCHyzPcHJhZGGOdHMrvX9MBGljcI13KRqOhHLF7g4YE,1112 +botocore/data/sms-voice/2018-09-05/service-2.json.gz,sha256=PvmkCVNpi0aBDv5QqXiV9KT_Z2-ALROP5QfAXcecV9w,3324 +botocore/data/sms/2016-10-24/endpoint-rule-set-1.json.gz,sha256=CTwPFJY4qK1IbSS82ZcC8WzdrXkFN8wfS_U716Rtuog,1286 +botocore/data/sms/2016-10-24/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sms/2016-10-24/paginators-1.json,sha256=-hjimmtmqb13Nn5a5N7IfTXJO31BBcEXxMabaXv-2Rs,865 +botocore/data/sms/2016-10-24/service-2.json.gz,sha256=gPt51-FN4d8_rh3RrwS437-_IPXVtQl0sedmfAY9kVQ,9676 +botocore/data/snow-device-management/2021-08-04/endpoint-rule-set-1.json.gz,sha256=St_KQetGCbZCKQxBLpaTFBhp1FUxYU_O4hUIcY-c--4,1161 +botocore/data/snow-device-management/2021-08-04/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/snow-device-management/2021-08-04/paginators-1.json,sha256=rNmRDBuxcetGirFRJQJA1vFXHeMY-sFLZ8BSld7BkFw,677 +botocore/data/snow-device-management/2021-08-04/service-2.json.gz,sha256=BZcv5yJRZIpa5DUagrPTkSBxMFRskKVCnt2GlOPOAms,5955 +botocore/data/snowball/2016-06-30/endpoint-rule-set-1.json.gz,sha256=rTT22XMAQK5x2VvtvNmzL6WEZIgKP-FoZgW_aaXj28w,1148 +botocore/data/snowball/2016-06-30/examples-1.json,sha256=c2uRhH8SNSzMSPVVlezBwPPoxWxhOl2QxkdNc0A37q4,18099 +botocore/data/snowball/2016-06-30/paginators-1.json,sha256=vMdXg3dD9a7r3ifpM8lAmkBfXJBVz66l-6uUq_4OJjo,1061 +botocore/data/snowball/2016-06-30/service-2.json.gz,sha256=pSH0DCGPupUboTf5lKmSpjRSu1F5KegMyFaShFy4VBk,16914 +botocore/data/sns/2010-03-31/endpoint-rule-set-1.json.gz,sha256=A08QBamfsmkQkyNU3w8O-Ki33-XkzWf6xB8GWS9F71A,1230 +botocore/data/sns/2010-03-31/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sns/2010-03-31/paginators-1.json,sha256=a5cU7i3ZYF5D-u8S4oYs5kDUAAeav2kcWeG21u8RjPg,1241 +botocore/data/sns/2010-03-31/service-2.json.gz,sha256=1lGff8r9M3VbAPInzxVmKXQmkgBQ4ahEnFGWCa2wnHI,24539 +botocore/data/sqs/2012-11-05/endpoint-rule-set-1.json.gz,sha256=PPyqyjK2w6kX29Z7J-7Y_ft2EDAYVmDTRSUx55gQC50,1232 +botocore/data/sqs/2012-11-05/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sqs/2012-11-05/paginators-1.json,sha256=fwyodl-UMt13laxQWAtCY9DEgncIy3mWPV-tS9M5m50,363 +botocore/data/sqs/2012-11-05/service-2.json.gz,sha256=_4XgabxfsUKtU-Nm6zy-yc5F9U3UBa-Fu5kRRVIgJSU,22520 +botocore/data/ssm-contacts/2021-05-03/endpoint-rule-set-1.json.gz,sha256=g5xEP34Qm4XgkUfw2ahbi54r1S9RBkd0r8hpBeiSzLw,1151 +botocore/data/ssm-contacts/2021-05-03/examples-1.json,sha256=DgD8jM1qr-3c2rDYBCXlsWUyaA_3S4VTwUogOr5KX0s,28860 +botocore/data/ssm-contacts/2021-05-03/paginators-1.json,sha256=Zvq8EuioTe0ZGvZrNX07bNJzAplhIUTDre4-HOhKrsc,1872 +botocore/data/ssm-contacts/2021-05-03/service-2.json.gz,sha256=yLGwp02QcDABrWyq12SSrNwcdtEj7O7EJcdtKU5SvYw,12756 +botocore/data/ssm-incidents/2018-05-10/endpoint-rule-set-1.json.gz,sha256=wv8MLcRdOMiiGbFS4OYXwH0KfKq7q_OkKYkwSj8kgRI,1156 +botocore/data/ssm-incidents/2018-05-10/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/ssm-incidents/2018-05-10/paginators-1.json,sha256=4qlmECBX9jmRprL7ROo4h4MHrfWWjH2gGPLr9sjuV3o,1259 +botocore/data/ssm-incidents/2018-05-10/service-2.json.gz,sha256=WPkUBSRCZdGU70W-a831JE4IVjcQPfS2ujAlg0kRtUk,14417 +botocore/data/ssm-incidents/2018-05-10/waiters-2.json,sha256=1xhj2BSaBj_CCZlCG7wTLL4ZB0e8_Uuq97DXjf7rADI,1465 +botocore/data/ssm-sap/2018-05-10/endpoint-rule-set-1.json.gz,sha256=Btiif71yg4sBLGi2rHIaMHOXkC7ABQh9dCyvu1MRsQ4,1300 +botocore/data/ssm-sap/2018-05-10/paginators-1.json,sha256=gWcUjNqnD9x0xaJ7tCOWXas0aIDAOCHdYPSBhFllmFU,691 +botocore/data/ssm-sap/2018-05-10/service-2.json.gz,sha256=jEf5yOGftEe5EPQ4miFAItnjWSS4nKkzv9MaJwUuBlg,6451 +botocore/data/ssm/2014-11-06/endpoint-rule-set-1.json.gz,sha256=_mdMOO2erK8G5f1wS-tc0QXcvFhAhgC5q_J3MejM28w,1232 +botocore/data/ssm/2014-11-06/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/ssm/2014-11-06/paginators-1.json,sha256=k5o38KqtcAvYU21DNB3qgoxvOhMBCwZpe_SJGeizjzA,8612 +botocore/data/ssm/2014-11-06/service-2.json.gz,sha256=xzTJnajMTfV8kuJHYt9CDK7V7fzEUy_aEj1MHomRRJA,121902 +botocore/data/ssm/2014-11-06/waiters-2.json,sha256=eTUBQgvIuYcA9hhUZZ3mY4KqLap6FbcReyPUqdPYduc,1457 +botocore/data/sso-admin/2020-07-20/endpoint-rule-set-1.json.gz,sha256=G7VkgLTqiSmb7JC0W3WUt8GGrO7_UiOG1S40SnNYmy8,1232 +botocore/data/sso-admin/2020-07-20/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sso-admin/2020-07-20/paginators-1.json,sha256=blhgKthRgscSeZRmLa2ASHICJ4LeT3IVnlIJ0FAlpdA,3714 +botocore/data/sso-admin/2020-07-20/service-2.json.gz,sha256=d8WOY_vFfA1l56z4P95U6HVIr4nK_5gjblub9yKSpWI,19790 +botocore/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json.gz,sha256=tknuWWy26oAby3mzFZxvlESFuLFahOd6Mif9TXwqQiY,1233 +botocore/data/sso-oidc/2019-06-10/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sso-oidc/2019-06-10/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/sso-oidc/2019-06-10/service-2.json.gz,sha256=sSn0n95NU8nq9uT2SbTLfpZ1-sxvHl8v6ZqHvVz0Wek,5048 +botocore/data/sso/2019-06-10/endpoint-rule-set-1.json.gz,sha256=goTVtCf4uIC8qVnppEurs8R0CTfjUJR_CJq_fUIuWEM,1239 +botocore/data/sso/2019-06-10/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/sso/2019-06-10/paginators-1.json,sha256=IScw_JafDnQ5pGRs-y61MtR0d4glhFcZR5D-8KLn2-Y,356 +botocore/data/sso/2019-06-10/service-2.json.gz,sha256=dESPvXI3696SiUyp81c18hdZgQ7-3IYj7AVugcdEVh4,2913 +botocore/data/stepfunctions/2016-11-23/endpoint-rule-set-1.json.gz,sha256=YhDitJNoomlCnrV5-nID8OvSoOdsVTktg-87FrDhTEw,1210 +botocore/data/stepfunctions/2016-11-23/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/stepfunctions/2016-11-23/paginators-1.json,sha256=2p0xo5UgVh-6RA8-svDfT8HBM_Cf2d05upRi3VIOnuY,856 +botocore/data/stepfunctions/2016-11-23/service-2.json.gz,sha256=BdJLo_wiQt-9cmtrB08ZVe7OtoEeiIDYFBtvZOUj8SU,25779 +botocore/data/storagegateway/2013-06-30/endpoint-rule-set-1.json.gz,sha256=OLM1Q3BYQqLoySRjChDaJnMbuJXeKlZ7ft3EERd-Amg,1152 +botocore/data/storagegateway/2013-06-30/examples-1.json,sha256=2-mBPJqbSFv2f3t6KqdtrU5dW0Z49zylBvFGmoQEAk8,49947 +botocore/data/storagegateway/2013-06-30/paginators-1.json,sha256=xinZcEJUcO4hsTa3TxMl6HAggFplRjfyCPtZr8wCsBc,1967 +botocore/data/storagegateway/2013-06-30/service-2.json.gz,sha256=1oXVdgV16L8t8ZavYFyJiemzkbn3YBY_Qvv76M1pm58,48971 +botocore/data/sts/2011-06-15/endpoint-rule-set-1.json.gz,sha256=xTf-kt2yCAJsfGvO8oSwyZ9XTIROvfSQw3bW37zljVE,1778 +botocore/data/sts/2011-06-15/examples-1.json,sha256=yD_CcHN2f9t9PlGQ5NzOJaCYccexGPoonbBW2T4OMck,11885 +botocore/data/sts/2011-06-15/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/sts/2011-06-15/service-2.json.gz,sha256=X8HISPTgRZHxuXvHhaoDtaPgdP-47HtdGeSJQE0ArIA,16795 +botocore/data/supplychain/2024-01-01/endpoint-rule-set-1.json.gz,sha256=YUcWTLVSGrFzZtL_s1djNqMYOrRxdaxqc0HVcfElf_Y,1296 +botocore/data/supplychain/2024-01-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/supplychain/2024-01-01/service-2.json.gz,sha256=M1urzVtnVRrm2PkXK4J22N5yDah5Bg1OLfhKu3AfYXE,2104 +botocore/data/support-app/2021-08-20/endpoint-rule-set-1.json.gz,sha256=HShV_HLdtbwplh79XZocgb4VIF_Tqt8qA-IRyt2yUb0,1147 +botocore/data/support-app/2021-08-20/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/support-app/2021-08-20/service-2.json.gz,sha256=594cjndg-KUuK3ZigFjxmh0oQ9x7qn8T0hToMGnyjCU,4271 +botocore/data/support/2013-04-15/endpoint-rule-set-1.json.gz,sha256=RMsyp36TzuVK3njpoK7H1P6bZqNEQl5NuyOXQc3gDck,1525 +botocore/data/support/2013-04-15/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/support/2013-04-15/paginators-1.json,sha256=b74jGAMdiNu8tKXAfyVILd2DpHqQx91qieo1BlSXpK8,363 +botocore/data/support/2013-04-15/service-2.json.gz,sha256=h7zmjZnh8CPReWrptuRkQ0eAcN1_yYLKmU_cqWJvCTg,11797 +botocore/data/swf/2012-01-25/endpoint-rule-set-1.json.gz,sha256=cbyLO1JP9upEOMLS7Jk9soeYmJJec2XtC8oEuL0o-x8,1235 +botocore/data/swf/2012-01-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/swf/2012-01-25/paginators-1.json,sha256=tOiP-8y-iuvOSJM35cQg6qCE0ai5dd5IWenCE1BH_yk,1496 +botocore/data/swf/2012-01-25/service-2.json.gz,sha256=0LEPIV23pDV3PvKY8AqhBurURLneuM-WXJL9EYFSXU8,34192 +botocore/data/synthetics/2017-10-11/endpoint-rule-set-1.json.gz,sha256=oceR6s_a3adVMdu8r31RH0uJ6TD6VLHNGAt7oBnHpsI,1149 +botocore/data/synthetics/2017-10-11/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/synthetics/2017-10-11/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/synthetics/2017-10-11/service-2.json.gz,sha256=JSJa8YF6H92C62IaaG9Y4UMv4nVDEvhZr0cmXLaj8ZA,13497 +botocore/data/textract/2018-06-27/endpoint-rule-set-1.json.gz,sha256=Y48asfVxuOmxSmPxJtrJjZhMbuPznhniIbwcfkpvICc,1147 +botocore/data/textract/2018-06-27/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/textract/2018-06-27/paginators-1.json,sha256=IQfBMdVD87vGqQnApoCTQrnbboZ3niS3DPFSlfrqh80,363 +botocore/data/textract/2018-06-27/service-2.json.gz,sha256=36Dkb-mW3Lq5lUr7T4ENUJbZkR-iuzDd8uRqoFpOANo,21988 +botocore/data/timestream-query/2018-11-01/endpoint-rule-set-1.json.gz,sha256=zHCD4p3jAsheh7DHKA42EJWCr5SdLnxE_2Nia3q4e68,1156 +botocore/data/timestream-query/2018-11-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/timestream-query/2018-11-01/paginators-1.json,sha256=GLU3XW2DRbhxpVzfVKj8-jHmRFvPqo-aadH3YwO8TUg,618 +botocore/data/timestream-query/2018-11-01/service-2.json.gz,sha256=J4_vTt_8iLHIcORN-75Kc2tTDpMbFmfOiogEvyDmK5Q,10370 +botocore/data/timestream-write/2018-11-01/endpoint-rule-set-1.json.gz,sha256=K6x0IyQCTQRpDhaTrO_ExeOVrejS7HRQiZLh2Wf5T6Q,1246 +botocore/data/timestream-write/2018-11-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/timestream-write/2018-11-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/timestream-write/2018-11-01/service-2.json.gz,sha256=9tBCC8cRFfBcN-4eLp40uRqcveSUBoYmInpQdUyI1Pk,12121 +botocore/data/tnb/2008-10-21/endpoint-rule-set-1.json.gz,sha256=rGKZH9P6FmHpKn5RI_tncRA8U3GQUGuJjkiPQbljzxk,1287 +botocore/data/tnb/2008-10-21/paginators-1.json,sha256=oz2uxUX8r9w5q6IjSx3zIxuNl3_jtJnCGLbFF1j0okw,932 +botocore/data/tnb/2008-10-21/service-2.json.gz,sha256=LfTmtpsBiKvd_f-NWt0_2ZZcf-yn0jBSauU5-CAXNQM,9306 +botocore/data/transcribe/2017-10-26/endpoint-rule-set-1.json.gz,sha256=oj5FpxcgjMgD4_A2orCGVoMGDT_5lIgbIuXS-TWsJJc,1340 +botocore/data/transcribe/2017-10-26/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/transcribe/2017-10-26/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/transcribe/2017-10-26/service-2.json.gz,sha256=Bl1jYqguh3e2_9Tf7HqqI7Gq-Rpcwyc71m5gi9FeFXU,33043 +botocore/data/transfer/2018-11-05/endpoint-rule-set-1.json.gz,sha256=rGI3SdSvZS6GU_zWji5SIaWISc_fStZxOZxin98Musw,1150 +botocore/data/transfer/2018-11-05/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/transfer/2018-11-05/paginators-1.json,sha256=fc0uh3xy9JmnDld4Amuh-tLtbs7M8LmkLCi-EsGkHx4,2072 +botocore/data/transfer/2018-11-05/service-2.json.gz,sha256=YCfji26kn93ZwHiYsiSuSaQ0eMAkwAQgp4d_j8PLzKU,48197 +botocore/data/transfer/2018-11-05/waiters-2.json,sha256=hVdSZ-CDADnA9zRgSm0tK-qrrIGLUKXug5j6Ave1F-Q,868 +botocore/data/translate/2017-07-01/endpoint-rule-set-1.json.gz,sha256=OfrFgBGHfAy_bWy-zyscROSGf3veEm0Dooaom_N0E4U,1151 +botocore/data/translate/2017-07-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/translate/2017-07-01/paginators-1.json,sha256=eE-1ycW-V5DQ_8t4NsRrfJYKhUnAaS7d5OyOimdaOaA,209 +botocore/data/translate/2017-07-01/service-2.json.gz,sha256=sLTJjtF4xL-ic7qi9LX6I4lJqd6LxV9O0LY0JUNS2l8,13002 +botocore/data/trustedadvisor/2022-09-15/endpoint-rule-set-1.json.gz,sha256=Fb7w4UykDZtdftNfG6NEz9Mt3d2tEiRIKA4eMW7aFkc,1304 +botocore/data/trustedadvisor/2022-09-15/paginators-1.json,sha256=eM9ClOnA5h4jNM-0Xgyq-ZplOH89DYmmJzOJ59FieIY,1226 +botocore/data/trustedadvisor/2022-09-15/service-2.json.gz,sha256=YteoSgRl2rFYs44A8HRGOe-3YSg1SWrxbNP581UtKzg,4770 +botocore/data/verifiedpermissions/2021-12-01/endpoint-rule-set-1.json.gz,sha256=svuVK1N333yVZue7qdkAqNILb1kUEwe0KLjb7x0oSZA,1308 +botocore/data/verifiedpermissions/2021-12-01/paginators-1.json,sha256=4cQu2IKJA_8dQUylEDfAsxkN5ZxnoXrjv9rRdWg3rsk,709 +botocore/data/verifiedpermissions/2021-12-01/service-2.json.gz,sha256=pef8p4OpLSd5ihf9USR4-ZG0BED3grmePXaVXSi3b-Q,17891 +botocore/data/verifiedpermissions/2021-12-01/waiters-2.json,sha256=fsA0_mwCl57UFPiqxJUWLb9AE7gd9kpBT4x0_6Q7dww,39 +botocore/data/voice-id/2021-09-27/endpoint-rule-set-1.json.gz,sha256=sZA0g0xHG26Rqf7Vo21HTQTacj3X3CMaZfM2pQ9OhqI,1147 +botocore/data/voice-id/2021-09-27/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/voice-id/2021-09-27/paginators-1.json,sha256=mgfNZB61NZhxJAtDiZ1WOqHTvwaWmArbDCHTAkdf520,1073 +botocore/data/voice-id/2021-09-27/service-2.json.gz,sha256=aYaRMm5I-t6zryv2cmmq9d8sXD7I0U6jHfQWgQ5LZIo,11875 +botocore/data/vpc-lattice/2022-11-30/endpoint-rule-set-1.json.gz,sha256=vhlIWlnZkv8x_5QNTA4R0dJOFKRLwFmgiTh6NfS7zdU,1292 +botocore/data/vpc-lattice/2022-11-30/paginators-1.json,sha256=8-TntKPqApRrjCwKlln2wyr8Y80DAHuzhNPsALvh__4,1524 +botocore/data/vpc-lattice/2022-11-30/service-2.json.gz,sha256=igISzA-z-sDyzgAz61ebSzkPJz4PVXJx5jpfkxj5L3k,17455 +botocore/data/waf-regional/2016-11-28/endpoint-rule-set-1.json.gz,sha256=-ERdJwxdu0senNkVcRvH5nfYoDjxfdpWq2GtFUaSujc,1148 +botocore/data/waf-regional/2016-11-28/examples-1.json,sha256=6OPuCnLynJIfGO-Vxhb9ZZV9ktEKhpByvf2jSwAg-DY,29749 +botocore/data/waf-regional/2016-11-28/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/waf-regional/2016-11-28/service-2.json.gz,sha256=tWCTekHQR7nmyGJI5R2W_MtLllFwldCmRP4pigArwtc,42861 +botocore/data/waf/2015-08-24/endpoint-rule-set-1.json.gz,sha256=4M3wiby3jEAOhwQiJssi1smDvAFEqdL824DuB0183Og,1344 +botocore/data/waf/2015-08-24/examples-1.json,sha256=6OPuCnLynJIfGO-Vxhb9ZZV9ktEKhpByvf2jSwAg-DY,29749 +botocore/data/waf/2015-08-24/paginators-1.json,sha256=ulE-ztimMiePJZAVUJkWb57N9b2OKV7xz_GIOHCw7PM,2717 +botocore/data/waf/2015-08-24/service-2.json.gz,sha256=lSgtYa96qrUqPMavDxQJBASLd6mHiKUrIvayZbuIHZ0,41698 +botocore/data/wafv2/2019-07-29/endpoint-rule-set-1.json.gz,sha256=fDGPFahavqf9kLU0o-LfOge8WaIDgZNO9ciIFNOCrRA,1150 +botocore/data/wafv2/2019-07-29/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/wafv2/2019-07-29/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/wafv2/2019-07-29/service-2.json.gz,sha256=mqWmNpDpUrpVmr9AvO_Sce824KlQ0AE1hdJiqQlivC4,68624 +botocore/data/wellarchitected/2020-03-31/endpoint-rule-set-1.json.gz,sha256=TG7U-yV4dPv0XU6Iju5MgJXubbWzQN9gQbDdA1qxhkc,1153 +botocore/data/wellarchitected/2020-03-31/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/wellarchitected/2020-03-31/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/wellarchitected/2020-03-31/service-2.json.gz,sha256=q2fxxFT5Sw2XuKmiAJawIkyK78Vj3dTIXVlmWtHbhu4,20051 +botocore/data/wisdom/2020-10-19/endpoint-rule-set-1.json.gz,sha256=U2c4iS_w8zq-wjypspfaWYXi5NJ_il2Ka6ycUsuaKgg,1149 +botocore/data/wisdom/2020-10-19/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/wisdom/2020-10-19/paginators-1.json,sha256=Mrm9rH5_xIiJTb4YXQUznBuP7k3tAPM5lVtE0HpFnow,1778 +botocore/data/wisdom/2020-10-19/service-2.json.gz,sha256=tW43azPgI3Mz-pnaY6LMMPkQkUWPIPZEi22HL0rvadI,17064 +botocore/data/workdocs/2016-05-01/endpoint-rule-set-1.json.gz,sha256=0dBYmC9JDjnBMBTtIkMRFhOcwpZQWujgrOtXxYixKuo,1148 +botocore/data/workdocs/2016-05-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/workdocs/2016-05-01/paginators-1.json,sha256=PERmz7nK6Ur9t877K2ivamloNl6knySKpwgvjbOcUe0,1666 +botocore/data/workdocs/2016-05-01/service-2.json.gz,sha256=BzA_9Xt08Hw6LLFepZCFAlx1h3AqbeW6AXUZdxFIcsE,16223 +botocore/data/worklink/2018-09-25/endpoint-rule-set-1.json.gz,sha256=ghYYDKcCshaqOiWj9TSCD3gAGIysYtUDbnzTmjWUpio,1148 +botocore/data/worklink/2018-09-25/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/worklink/2018-09-25/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/worklink/2018-09-25/service-2.json.gz,sha256=Y0raPWyoImD3Zcj1kHUuaFwghmLqhY7J4UESJ-Z9qys,6085 +botocore/data/workmail/2017-10-01/endpoint-rule-set-1.json.gz,sha256=h5Qn7ZGE7jMAkeC33F-zjFLvOb43UAk6D1MPpaUY43w,1148 +botocore/data/workmail/2017-10-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/workmail/2017-10-01/paginators-1.json,sha256=cifXQJ4GwrUAiLzlD6767FJIzTi5ByaVVBEFAHLqCR0,1553 +botocore/data/workmail/2017-10-01/service-2.json.gz,sha256=RjFeHgaVlTqThTdWwcMNA5drvl1I85kdOeeY4Qe2FU8,24872 +botocore/data/workmailmessageflow/2019-05-01/endpoint-rule-set-1.json.gz,sha256=BhivIjP0WXs4q-wwhH2fYVX2SE4L1sSZMsiFcRa-_As,1157 +botocore/data/workmailmessageflow/2019-05-01/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/workmailmessageflow/2019-05-01/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/workmailmessageflow/2019-05-01/service-2.json.gz,sha256=zwrPv84NGqpunG5JyHHTK8vhU4pFjZ5bSA-QaLG8QrA,2272 +botocore/data/workspaces-thin-client/2023-08-22/endpoint-rule-set-1.json.gz,sha256=j77Laj6EC4pdxJwICFmg_wJcYSRcTISI1Ezu_Nc2zwo,1300 +botocore/data/workspaces-thin-client/2023-08-22/paginators-1.json,sha256=eoHZHYlG1VP49fqQ29q3I58cojJxkZ8AQQg_xOyd10Y,525 +botocore/data/workspaces-thin-client/2023-08-22/service-2.json.gz,sha256=TA945ee45jDMn6U2ORxD1JuXjNaEOvvKVc-hnBKm7nU,6367 +botocore/data/workspaces-web/2020-07-08/endpoint-rule-set-1.json.gz,sha256=zgKdzg9JplUnYYRBDl2ATAGmsqt87lQuavblbYDa66c,1153 +botocore/data/workspaces-web/2020-07-08/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/workspaces-web/2020-07-08/paginators-1.json,sha256=hIQ7AbLBsY4fPSNLVMg0dS45m6cjZKFTjbp3ZLh4zj8,23 +botocore/data/workspaces-web/2020-07-08/service-2.json.gz,sha256=ZIidn4STXRrPFNFBIUlrtadv40IZUHyqsHJXb9raMbk,12239 +botocore/data/workspaces/2015-04-08/endpoint-rule-set-1.json.gz,sha256=z1xmZ2N9fnJEkylo7F0jjSElZ460i0X7jdwP3xhGWXw,1152 +botocore/data/workspaces/2015-04-08/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/workspaces/2015-04-08/paginators-1.json,sha256=0zFVdQOhyRVmZBxS34a0_4YjrhYOGT5rRZB-NM2Fjcg,1334 +botocore/data/workspaces/2015-04-08/service-2.json.gz,sha256=PUlEy25AXwDJSIuFE_c11T7jgA2M8yHXEwLlW9rSZck,30604 +botocore/data/xray/2016-04-12/endpoint-rule-set-1.json.gz,sha256=Z_21SO8z1EI4ROR9CyO467GF0J5TdDPVEU8JAjnpasw,1145 +botocore/data/xray/2016-04-12/examples-1.json,sha256=K3b6mgYkitvcecSlJT-iV_EQATmvOySs66iKJI5qx0g,44 +botocore/data/xray/2016-04-12/paginators-1.json,sha256=2BXVUlpR51GRav7g4-ML3Fr7U9pBDqXax4lZYeJnwZU,1785 +botocore/data/xray/2016-04-12/service-2.json.gz,sha256=oqw2IkDlgw2gU7XILkSvQrxKfFEmFn9_B9cmwSm-NRw,17737 +botocore/discovery.py,sha256=-p9WDWBpx9BzDZgRZZ6VdpCriuHqgKHXktlB65Y-byE,11075 +botocore/docs/__init__.py,sha256=Mxx6eiy76-SxPpUsPMUPoHS-Wjy8Mj1gDfrowCu0S4U,2027 +botocore/docs/__pycache__/__init__.cpython-38.pyc,, +botocore/docs/__pycache__/client.cpython-38.pyc,, +botocore/docs/__pycache__/docstring.cpython-38.pyc,, +botocore/docs/__pycache__/example.cpython-38.pyc,, +botocore/docs/__pycache__/method.cpython-38.pyc,, +botocore/docs/__pycache__/paginator.cpython-38.pyc,, +botocore/docs/__pycache__/params.cpython-38.pyc,, +botocore/docs/__pycache__/service.cpython-38.pyc,, +botocore/docs/__pycache__/shape.cpython-38.pyc,, +botocore/docs/__pycache__/sharedexample.cpython-38.pyc,, +botocore/docs/__pycache__/translator.cpython-38.pyc,, +botocore/docs/__pycache__/utils.cpython-38.pyc,, +botocore/docs/__pycache__/waiter.cpython-38.pyc,, +botocore/docs/bcdoc/__init__.py,sha256=V2g87AefB2DOD9_3xIF5k9Nv5ttb4_gNJOVvSF0Mp3s,588 +botocore/docs/bcdoc/__pycache__/__init__.cpython-38.pyc,, +botocore/docs/bcdoc/__pycache__/docstringparser.cpython-38.pyc,, +botocore/docs/bcdoc/__pycache__/restdoc.cpython-38.pyc,, +botocore/docs/bcdoc/__pycache__/style.cpython-38.pyc,, +botocore/docs/bcdoc/docstringparser.py,sha256=nSXyNqFrTl8BTfoNGK3AEc0e4m5ipU0ebi5fHO1uTVA,10207 +botocore/docs/bcdoc/restdoc.py,sha256=DVu7-ttBmiugDXOeQkATgv4rAHZPU-sy5ZvmbaEx_Ao,9698 +botocore/docs/bcdoc/style.py,sha256=xrpJIa7Qhg0B0VgYM4m8RuoyOQkm8YIi2-6bp90ikOI,13148 +botocore/docs/client.py,sha256=gKs_xq8TNSZSJn3s9-tcxEyXkf8i4Dljnb0Uflljxps,17380 +botocore/docs/docstring.py,sha256=Jo9lA4ZFPq75cNCUfpz7zWiXlDB-Cn3bP62cZvBntfA,3648 +botocore/docs/example.py,sha256=FXAq63iUCjpXGW3zDO4byFzY6EqP36FweOtXrBCRSRw,8949 +botocore/docs/method.py,sha256=_GiyG_2GV1uNOCq2e5MEEc300Wk3rACROLUAAxxay7s,12058 +botocore/docs/paginator.py,sha256=-Fu19HyHViQbW2lipQ_Nj56Yn_kTuaJxdFfuVtne-e0,9020 +botocore/docs/params.py,sha256=1UyGpyNhyAWuMuYIhT9_-j0b-abaSex49_IKIi-ZL-w,11760 +botocore/docs/service.py,sha256=oSPLoXn08cSsFDToEuFp4DDOl_COuSYQJ7q7OEf2lfg,4990 +botocore/docs/shape.py,sha256=EZze3L3AhPNnx_iHvRtn2Z-04TbMHTZ2_okdpAmwPOc,5198 +botocore/docs/sharedexample.py,sha256=xgF3lmqCPMD5Qh3Ue_X7vemhpG2BvOBBgwVnghYgJaQ,9214 +botocore/docs/translator.py,sha256=v9ZTifRrwmfxBHCBaRPoZqufvpHI31pdVMny1wcVi-4,2331 +botocore/docs/utils.py,sha256=ZU5O539SaL0fZu0ig6tR61iSBLF3CiHwlPYNFM5cyD0,7292 +botocore/docs/waiter.py,sha256=aGc5LX_anI6RdHGuYhRnjok8_fbuUQrfFzwvEsI5k6c,6626 +botocore/endpoint.py,sha256=5XwvafV15WPQYf-bcnEBDfYi64C_SIZ58SACch2n63E,16441 +botocore/endpoint_provider.py,sha256=wcG4xw8PNaVd-Nl6cf7CdGZVvhPWvjHpCgnY6c2Lt64,22934 +botocore/errorfactory.py,sha256=b-sa5IMXRFz7c9DzaEanJhSfzEytqzj60xOaQte-OJ4,3722 +botocore/eventstream.py,sha256=lX3U6I1tuqHgoPxow7mNc51bzOpCq_HO8XYaLiCUZ6k,20449 +botocore/exceptions.py,sha256=_tSLf2bnoeWR3GEpImMxwuKpJ9AxCF1BkzeUBuTFD9A,22804 +botocore/handlers.py,sha256=Py2N5_H3gDd_XRCZgUbgWHusaEObEbeMvK04SQDrVOI,54728 +botocore/history.py,sha256=QR1WnpJYTo02Rz3GqWt45sF6wzu6EQrM_kS3FPH58t4,1744 +botocore/hooks.py,sha256=zoLI19Xpowd_z-mYMzb9x_YZu9UCdGp-oArsYyfwkf4,25060 +botocore/httpchecksum.py,sha256=Qga8noPhe6r9wsuU3WMuVyJzhhxpBcbQ8auvCLXteOM,16292 +botocore/httpsession.py,sha256=8OC5Zk5a9j-3YoAMy60XcI6PnNl6DKjCD67pq4pHFX4,18582 +botocore/loaders.py,sha256=zPn9FKW5jJ_8qi69V0zV-f8WJ43xqd4BN8JLdUNEUKM,18833 +botocore/model.py,sha256=2xKCM_nFbmESE7s0OUxSxLtcpFRGqY4EeX3X-A3Ywv4,30619 +botocore/monitoring.py,sha256=mJ_IWoqSjjaUElVTkbQ62OrNl8RGspgO6C7OUerz3vU,20597 +botocore/paginate.py,sha256=LBzgfjgVvJo6dHmWur5-6Bfy49qvY8eSZL9Cyw0naM0,27392 +botocore/parsers.py,sha256=08RZmbOivc4ETUtaQRYNAC8kNS7Ne6ItlVn9iwIdJUM,45607 +botocore/regions.py,sha256=GgVM2FA21iEjPFzWPBrR-Bc8vM76lCJJ7opnRWy0juI,32426 +botocore/response.py,sha256=atPfv1M3_H6i0bLrtfyrDNWJ7HMd0snserEP8ggo6wA,7227 +botocore/retries/__init__.py,sha256=YaZ6AwMRyuDBs5fOvl-PAvxQxZE2RBlcad2JmLOMo8k,121 +botocore/retries/__pycache__/__init__.cpython-38.pyc,, +botocore/retries/__pycache__/adaptive.cpython-38.pyc,, +botocore/retries/__pycache__/base.cpython-38.pyc,, +botocore/retries/__pycache__/bucket.cpython-38.pyc,, +botocore/retries/__pycache__/quota.cpython-38.pyc,, +botocore/retries/__pycache__/special.cpython-38.pyc,, +botocore/retries/__pycache__/standard.cpython-38.pyc,, +botocore/retries/__pycache__/throttling.cpython-38.pyc,, +botocore/retries/adaptive.py,sha256=0Y0QjSgK0sGS1nbWZV7wiBZgR82a-nA-vL5HjQadLOs,4207 +botocore/retries/base.py,sha256=rGJYVZEXLGSQ2BnaIT-W9ccGtSbIMvU-wzmV78d-Ccg,797 +botocore/retries/bucket.py,sha256=_dWhITGISHQGWyLyFvbjW10Gp5Ao9OOjQjQorF9IEnY,3993 +botocore/retries/quota.py,sha256=ZBgyI69P-kd3ZDpQQUo8qyE3HXO8Kpi1cR7KuzCR28U,1939 +botocore/retries/special.py,sha256=l2ZimO4N1_jJoAU35Q0QzrWTNwL-jaTaV71LobKv3ss,1663 +botocore/retries/standard.py,sha256=eCObG9ZLgZjBg3G0sFGQjWWXGjZnm7clDIg2uJEuaLo,19974 +botocore/retries/throttling.py,sha256=x8pU_jMyapr0YODg8mtyYoXa8MzDAf0e-bWg9EfkFos,1779 +botocore/retryhandler.py,sha256=_EysWxdXfG7XcQpMSCHfiNEoTNepA2scNRsnCRLhBcY,14700 +botocore/serialize.py,sha256=TK2afolr5n5-9hGBPG-3rfEaXFLghUWMRBJhb7T3Zp4,33122 +botocore/session.py,sha256=KQ7CEyryP9naTsnHayJEdhObUA4AS_18VJYTgkEFA3E,49184 +botocore/signers.py,sha256=0nNCjfpm5eKc-afgdlFGZHvPEFSuXjPWX7UbOt7QjZk,30691 +botocore/stub.py,sha256=dXazADN3VxJwqyvi9P83PwVkulYaMZGkHtDLFLZoq7E,15152 +botocore/tokens.py,sha256=jIPsJFroiCxQ6Qwxjq0AJ9_aySiv3acq9mEFXfOjbrc,10910 +botocore/translate.py,sha256=UfKIIWr_BAcwvMScHuqrLtSD5yuXecl7Rs0Et3jfREc,3406 +botocore/useragent.py,sha256=8azuXhjD7yjBySvkRPXOqVS8iKT7v0D36JOOczlHEPk,18305 +botocore/utils.py,sha256=iLaCv7dxptvyDwmYnrJi5C0BKrriVZ2ECxvs02AAKQ0,135342 +botocore/validate.py,sha256=AmPWjHnEzA-st57FBZuICqcxRBgnWl090j7OMDx6KMQ,13767 +botocore/vendored/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +botocore/vendored/__pycache__/__init__.cpython-38.pyc,, +botocore/vendored/__pycache__/six.cpython-38.pyc,, +botocore/vendored/requests/__init__.py,sha256=Pu8JNWAMzj9l8E0Qs4rU7clTOfxVIA6OuUKJkJDmvvc,227 +botocore/vendored/requests/__pycache__/__init__.cpython-38.pyc,, +botocore/vendored/requests/__pycache__/exceptions.cpython-38.pyc,, +botocore/vendored/requests/exceptions.py,sha256=zZhHieXgR1teqbvuo_9OrwDMHnrvRtulW97VfzumQv4,2517 +botocore/vendored/requests/packages/__init__.py,sha256=aXkbNCjM_WhryRBocE4AaA_p7-CTxL5LOutY7XzKm4s,62 +botocore/vendored/requests/packages/__pycache__/__init__.cpython-38.pyc,, +botocore/vendored/requests/packages/urllib3/__init__.py,sha256=Nrq2HJOk0McF4saJ5zySsjVKGPV6j05iAFTJwkKEzOI,184 +botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-38.pyc,, +botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-38.pyc,, +botocore/vendored/requests/packages/urllib3/exceptions.py,sha256=za-cEwBqxBKOqqKTaIVAMdH3j1nDRqi-MtdojdpU4Wc,4374 +botocore/vendored/six.py,sha256=TOOfQi7nFGfMrIvtdr6wX4wyHH8M7aknmuLfo2cBBrM,34549 +botocore/waiter.py,sha256=7nQlMQZsEPje7KgGnEEkDp689kKSzYwZu6LFpEoT_AM,14290 diff --git a/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/WHEEL b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/WHEEL new file mode 100644 index 00000000..5bad85fd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/top_level.txt b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/top_level.txt new file mode 100644 index 00000000..c5b9e129 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore-1.34.19.dist-info/top_level.txt @@ -0,0 +1 @@ +botocore diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__init__.py b/dbtzin/lib/python3.8/site-packages/botocore/__init__.py new file mode 100644 index 00000000..6821d31c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/__init__.py @@ -0,0 +1,139 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import logging +import os +import re + +__version__ = '1.34.19' + + +class NullHandler(logging.Handler): + def emit(self, record): + pass + + +# Configure default logger to do nothing +log = logging.getLogger('botocore') +log.addHandler(NullHandler()) + +_INITIALIZERS = [] + +_first_cap_regex = re.compile('(.)([A-Z][a-z]+)') +_end_cap_regex = re.compile('([a-z0-9])([A-Z])') +# The regex below handles the special case where some acronym +# name is pluralized, e.g GatewayARNs, ListWebACLs, SomeCNAMEs. +_special_case_transform = re.compile('[A-Z]{2,}s$') +# Prepopulate the cache with special cases that don't match +# our regular transformation. +_xform_cache = { + ('CreateCachediSCSIVolume', '_'): 'create_cached_iscsi_volume', + ('CreateCachediSCSIVolume', '-'): 'create-cached-iscsi-volume', + ('DescribeCachediSCSIVolumes', '_'): 'describe_cached_iscsi_volumes', + ('DescribeCachediSCSIVolumes', '-'): 'describe-cached-iscsi-volumes', + ('DescribeStorediSCSIVolumes', '_'): 'describe_stored_iscsi_volumes', + ('DescribeStorediSCSIVolumes', '-'): 'describe-stored-iscsi-volumes', + ('CreateStorediSCSIVolume', '_'): 'create_stored_iscsi_volume', + ('CreateStorediSCSIVolume', '-'): 'create-stored-iscsi-volume', + ('ListHITsForQualificationType', '_'): 'list_hits_for_qualification_type', + ('ListHITsForQualificationType', '-'): 'list-hits-for-qualification-type', + ('ExecutePartiQLStatement', '_'): 'execute_partiql_statement', + ('ExecutePartiQLStatement', '-'): 'execute-partiql-statement', + ('ExecutePartiQLTransaction', '_'): 'execute_partiql_transaction', + ('ExecutePartiQLTransaction', '-'): 'execute-partiql-transaction', + ('ExecutePartiQLBatch', '_'): 'execute_partiql_batch', + ('ExecutePartiQLBatch', '-'): 'execute-partiql-batch', +} +# The items in this dict represent partial renames to apply globally to all +# services which might have a matching argument or operation. This way a +# common mis-translation can be fixed without having to call out each +# individual case. +ScalarTypes = ('string', 'integer', 'boolean', 'timestamp', 'float', 'double') + +BOTOCORE_ROOT = os.path.dirname(os.path.abspath(__file__)) + + +# Used to specify anonymous (unsigned) request signature +class UNSIGNED: + def __copy__(self): + return self + + def __deepcopy__(self, memodict): + return self + + +UNSIGNED = UNSIGNED() + + +def xform_name(name, sep='_', _xform_cache=_xform_cache): + """Convert camel case to a "pythonic" name. + + If the name contains the ``sep`` character, then it is + returned unchanged. + + """ + if sep in name: + # If the sep is in the name, assume that it's already + # transformed and return the string unchanged. + return name + key = (name, sep) + if key not in _xform_cache: + if _special_case_transform.search(name) is not None: + is_special = _special_case_transform.search(name) + matched = is_special.group() + # Replace something like ARNs, ACLs with _arns, _acls. + name = f"{name[: -len(matched)]}{sep}{matched.lower()}" + s1 = _first_cap_regex.sub(r'\1' + sep + r'\2', name) + transformed = _end_cap_regex.sub(r'\1' + sep + r'\2', s1).lower() + _xform_cache[key] = transformed + return _xform_cache[key] + + +def register_initializer(callback): + """Register an initializer function for session creation. + + This initializer function will be invoked whenever a new + `botocore.session.Session` is instantiated. + + :type callback: callable + :param callback: A callable that accepts a single argument + of type `botocore.session.Session`. + + """ + _INITIALIZERS.append(callback) + + +def unregister_initializer(callback): + """Unregister an initializer function. + + :type callback: callable + :param callback: A callable that was previously registered + with `botocore.register_initializer`. + + :raises ValueError: If a callback is provided that is not currently + registered as an initializer. + + """ + _INITIALIZERS.remove(callback) + + +def invoke_initializers(session): + """Invoke all initializers for a session. + + :type session: botocore.session.Session + :param session: The session to initialize. + + """ + for initializer in _INITIALIZERS: + initializer(session) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..8420a960 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/args.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/args.cpython-38.pyc new file mode 100644 index 00000000..fcb0b87b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/args.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/auth.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/auth.cpython-38.pyc new file mode 100644 index 00000000..1d54842f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/auth.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/awsrequest.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/awsrequest.cpython-38.pyc new file mode 100644 index 00000000..67b006dc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/awsrequest.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/client.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/client.cpython-38.pyc new file mode 100644 index 00000000..c2e3a07e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/client.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/compat.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/compat.cpython-38.pyc new file mode 100644 index 00000000..f219de15 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/compat.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/compress.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/compress.cpython-38.pyc new file mode 100644 index 00000000..b65b56fa Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/compress.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/config.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/config.cpython-38.pyc new file mode 100644 index 00000000..122e937e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/config.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/configloader.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/configloader.cpython-38.pyc new file mode 100644 index 00000000..2422799b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/configloader.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/configprovider.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/configprovider.cpython-38.pyc new file mode 100644 index 00000000..ab94942c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/configprovider.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/credentials.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/credentials.cpython-38.pyc new file mode 100644 index 00000000..86ed60db Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/credentials.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/discovery.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/discovery.cpython-38.pyc new file mode 100644 index 00000000..f6bd2c49 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/discovery.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/endpoint.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/endpoint.cpython-38.pyc new file mode 100644 index 00000000..61f1b39a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/endpoint.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/endpoint_provider.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/endpoint_provider.cpython-38.pyc new file mode 100644 index 00000000..ff307913 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/endpoint_provider.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/errorfactory.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/errorfactory.cpython-38.pyc new file mode 100644 index 00000000..d77c4af5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/errorfactory.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/eventstream.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/eventstream.cpython-38.pyc new file mode 100644 index 00000000..1cdde1d8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/eventstream.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/exceptions.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/exceptions.cpython-38.pyc new file mode 100644 index 00000000..62abadb1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/exceptions.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/handlers.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/handlers.cpython-38.pyc new file mode 100644 index 00000000..97c30945 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/handlers.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/history.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/history.cpython-38.pyc new file mode 100644 index 00000000..62c5a193 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/history.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/hooks.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/hooks.cpython-38.pyc new file mode 100644 index 00000000..b2201318 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/hooks.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/httpchecksum.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/httpchecksum.cpython-38.pyc new file mode 100644 index 00000000..faa50e35 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/httpchecksum.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/httpsession.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/httpsession.cpython-38.pyc new file mode 100644 index 00000000..e5b66959 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/httpsession.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/loaders.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/loaders.cpython-38.pyc new file mode 100644 index 00000000..ecb68818 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/loaders.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/model.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/model.cpython-38.pyc new file mode 100644 index 00000000..460a0bdc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/model.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/monitoring.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/monitoring.cpython-38.pyc new file mode 100644 index 00000000..e052205b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/monitoring.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/paginate.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/paginate.cpython-38.pyc new file mode 100644 index 00000000..c18dd63c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/paginate.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/parsers.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/parsers.cpython-38.pyc new file mode 100644 index 00000000..19b52f05 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/parsers.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/regions.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/regions.cpython-38.pyc new file mode 100644 index 00000000..61ac92de Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/regions.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/response.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/response.cpython-38.pyc new file mode 100644 index 00000000..1067a0b0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/response.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/retryhandler.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/retryhandler.cpython-38.pyc new file mode 100644 index 00000000..a10e9dd2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/retryhandler.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/serialize.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/serialize.cpython-38.pyc new file mode 100644 index 00000000..85efdf4b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/serialize.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/session.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/session.cpython-38.pyc new file mode 100644 index 00000000..94e07da3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/session.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/signers.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/signers.cpython-38.pyc new file mode 100644 index 00000000..f50bed5b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/signers.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/stub.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/stub.cpython-38.pyc new file mode 100644 index 00000000..ae7c3065 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/stub.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/tokens.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/tokens.cpython-38.pyc new file mode 100644 index 00000000..dd386752 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/tokens.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/translate.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/translate.cpython-38.pyc new file mode 100644 index 00000000..e472c6b9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/translate.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/useragent.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/useragent.cpython-38.pyc new file mode 100644 index 00000000..60c20d8b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/useragent.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/utils.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/utils.cpython-38.pyc new file mode 100644 index 00000000..204e1b7d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/utils.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/validate.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/validate.cpython-38.pyc new file mode 100644 index 00000000..4c12f847 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/validate.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/waiter.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/waiter.cpython-38.pyc new file mode 100644 index 00000000..cf03f0be Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/__pycache__/waiter.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/args.py b/dbtzin/lib/python3.8/site-packages/botocore/args.py new file mode 100644 index 00000000..dbbcbe8a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/args.py @@ -0,0 +1,769 @@ +# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +"""Internal module to help with normalizing botocore client args. + +This module (and all function/classes within this module) should be +considered internal, and *not* a public API. + +""" +import copy +import logging +import socket + +import botocore.exceptions +import botocore.parsers +import botocore.serialize +from botocore.config import Config +from botocore.endpoint import EndpointCreator +from botocore.regions import EndpointResolverBuiltins as EPRBuiltins +from botocore.regions import EndpointRulesetResolver +from botocore.signers import RequestSigner +from botocore.useragent import UserAgentString +from botocore.utils import ensure_boolean, is_s3_accelerate_url + +logger = logging.getLogger(__name__) + + +VALID_REGIONAL_ENDPOINTS_CONFIG = [ + 'legacy', + 'regional', +] +LEGACY_GLOBAL_STS_REGIONS = [ + 'ap-northeast-1', + 'ap-south-1', + 'ap-southeast-1', + 'ap-southeast-2', + 'aws-global', + 'ca-central-1', + 'eu-central-1', + 'eu-north-1', + 'eu-west-1', + 'eu-west-2', + 'eu-west-3', + 'sa-east-1', + 'us-east-1', + 'us-east-2', + 'us-west-1', + 'us-west-2', +] +# Maximum allowed length of the ``user_agent_appid`` config field. Longer +# values result in a warning-level log message. +USERAGENT_APPID_MAXLEN = 50 + + +class ClientArgsCreator: + def __init__( + self, + event_emitter, + user_agent, + response_parser_factory, + loader, + exceptions_factory, + config_store, + user_agent_creator=None, + ): + self._event_emitter = event_emitter + self._response_parser_factory = response_parser_factory + self._loader = loader + self._exceptions_factory = exceptions_factory + self._config_store = config_store + if user_agent_creator is None: + self._session_ua_creator = UserAgentString.from_environment() + else: + self._session_ua_creator = user_agent_creator + + def get_client_args( + self, + service_model, + region_name, + is_secure, + endpoint_url, + verify, + credentials, + scoped_config, + client_config, + endpoint_bridge, + auth_token=None, + endpoints_ruleset_data=None, + partition_data=None, + ): + final_args = self.compute_client_args( + service_model, + client_config, + endpoint_bridge, + region_name, + endpoint_url, + is_secure, + scoped_config, + ) + + service_name = final_args['service_name'] # noqa + parameter_validation = final_args['parameter_validation'] + endpoint_config = final_args['endpoint_config'] + protocol = final_args['protocol'] + config_kwargs = final_args['config_kwargs'] + s3_config = final_args['s3_config'] + partition = endpoint_config['metadata'].get('partition', None) + socket_options = final_args['socket_options'] + configured_endpoint_url = final_args['configured_endpoint_url'] + signing_region = endpoint_config['signing_region'] + endpoint_region_name = endpoint_config['region_name'] + + event_emitter = copy.copy(self._event_emitter) + signer = RequestSigner( + service_model.service_id, + signing_region, + endpoint_config['signing_name'], + endpoint_config['signature_version'], + credentials, + event_emitter, + auth_token, + ) + + config_kwargs['s3'] = s3_config + new_config = Config(**config_kwargs) + endpoint_creator = EndpointCreator(event_emitter) + + endpoint = endpoint_creator.create_endpoint( + service_model, + region_name=endpoint_region_name, + endpoint_url=endpoint_config['endpoint_url'], + verify=verify, + response_parser_factory=self._response_parser_factory, + max_pool_connections=new_config.max_pool_connections, + proxies=new_config.proxies, + timeout=(new_config.connect_timeout, new_config.read_timeout), + socket_options=socket_options, + client_cert=new_config.client_cert, + proxies_config=new_config.proxies_config, + ) + + serializer = botocore.serialize.create_serializer( + protocol, parameter_validation + ) + response_parser = botocore.parsers.create_parser(protocol) + + ruleset_resolver = self._build_endpoint_resolver( + endpoints_ruleset_data, + partition_data, + client_config, + service_model, + endpoint_region_name, + region_name, + configured_endpoint_url, + endpoint, + is_secure, + endpoint_bridge, + event_emitter, + ) + + # Copy the session's user agent factory and adds client configuration. + client_ua_creator = self._session_ua_creator.with_client_config( + new_config + ) + supplied_ua = client_config.user_agent if client_config else None + new_config._supplied_user_agent = supplied_ua + + return { + 'serializer': serializer, + 'endpoint': endpoint, + 'response_parser': response_parser, + 'event_emitter': event_emitter, + 'request_signer': signer, + 'service_model': service_model, + 'loader': self._loader, + 'client_config': new_config, + 'partition': partition, + 'exceptions_factory': self._exceptions_factory, + 'endpoint_ruleset_resolver': ruleset_resolver, + 'user_agent_creator': client_ua_creator, + } + + def compute_client_args( + self, + service_model, + client_config, + endpoint_bridge, + region_name, + endpoint_url, + is_secure, + scoped_config, + ): + service_name = service_model.endpoint_prefix + protocol = service_model.metadata['protocol'] + parameter_validation = True + if client_config and not client_config.parameter_validation: + parameter_validation = False + elif scoped_config: + raw_value = scoped_config.get('parameter_validation') + if raw_value is not None: + parameter_validation = ensure_boolean(raw_value) + + s3_config = self.compute_s3_config(client_config) + + configured_endpoint_url = self._compute_configured_endpoint_url( + client_config=client_config, + endpoint_url=endpoint_url, + ) + + endpoint_config = self._compute_endpoint_config( + service_name=service_name, + region_name=region_name, + endpoint_url=configured_endpoint_url, + is_secure=is_secure, + endpoint_bridge=endpoint_bridge, + s3_config=s3_config, + ) + endpoint_variant_tags = endpoint_config['metadata'].get('tags', []) + + # Some third-party libraries expect the final user-agent string in + # ``client.meta.config.user_agent``. To maintain backwards + # compatibility, the preliminary user-agent string (before any Config + # object modifications and without request-specific user-agent + # components) is stored in the new Config object's ``user_agent`` + # property but not used by Botocore itself. + preliminary_ua_string = self._session_ua_creator.with_client_config( + client_config + ).to_string() + # Create a new client config to be passed to the client based + # on the final values. We do not want the user to be able + # to try to modify an existing client with a client config. + config_kwargs = dict( + region_name=endpoint_config['region_name'], + signature_version=endpoint_config['signature_version'], + user_agent=preliminary_ua_string, + ) + if 'dualstack' in endpoint_variant_tags: + config_kwargs.update(use_dualstack_endpoint=True) + if 'fips' in endpoint_variant_tags: + config_kwargs.update(use_fips_endpoint=True) + if client_config is not None: + config_kwargs.update( + connect_timeout=client_config.connect_timeout, + read_timeout=client_config.read_timeout, + max_pool_connections=client_config.max_pool_connections, + proxies=client_config.proxies, + proxies_config=client_config.proxies_config, + retries=client_config.retries, + client_cert=client_config.client_cert, + inject_host_prefix=client_config.inject_host_prefix, + tcp_keepalive=client_config.tcp_keepalive, + user_agent_extra=client_config.user_agent_extra, + user_agent_appid=client_config.user_agent_appid, + request_min_compression_size_bytes=( + client_config.request_min_compression_size_bytes + ), + disable_request_compression=( + client_config.disable_request_compression + ), + client_context_params=client_config.client_context_params, + ) + self._compute_retry_config(config_kwargs) + self._compute_connect_timeout(config_kwargs) + self._compute_user_agent_appid_config(config_kwargs) + self._compute_request_compression_config(config_kwargs) + s3_config = self.compute_s3_config(client_config) + + is_s3_service = self._is_s3_service(service_name) + + if is_s3_service and 'dualstack' in endpoint_variant_tags: + if s3_config is None: + s3_config = {} + s3_config['use_dualstack_endpoint'] = True + + return { + 'service_name': service_name, + 'parameter_validation': parameter_validation, + 'configured_endpoint_url': configured_endpoint_url, + 'endpoint_config': endpoint_config, + 'protocol': protocol, + 'config_kwargs': config_kwargs, + 's3_config': s3_config, + 'socket_options': self._compute_socket_options( + scoped_config, client_config + ), + } + + def _compute_configured_endpoint_url(self, client_config, endpoint_url): + if endpoint_url is not None: + return endpoint_url + + if self._ignore_configured_endpoint_urls(client_config): + logger.debug("Ignoring configured endpoint URLs.") + return endpoint_url + + return self._config_store.get_config_variable('endpoint_url') + + def _ignore_configured_endpoint_urls(self, client_config): + if ( + client_config + and client_config.ignore_configured_endpoint_urls is not None + ): + return client_config.ignore_configured_endpoint_urls + + return self._config_store.get_config_variable( + 'ignore_configured_endpoint_urls' + ) + + def compute_s3_config(self, client_config): + s3_configuration = self._config_store.get_config_variable('s3') + + # Next specific client config values takes precedence over + # specific values in the scoped config. + if client_config is not None: + if client_config.s3 is not None: + if s3_configuration is None: + s3_configuration = client_config.s3 + else: + # The current s3_configuration dictionary may be + # from a source that only should be read from so + # we want to be safe and just make a copy of it to modify + # before it actually gets updated. + s3_configuration = s3_configuration.copy() + s3_configuration.update(client_config.s3) + + return s3_configuration + + def _is_s3_service(self, service_name): + """Whether the service is S3 or S3 Control. + + Note that throughout this class, service_name refers to the endpoint + prefix, not the folder name of the service in botocore/data. For + S3 Control, the folder name is 's3control' but the endpoint prefix is + 's3-control'. + """ + return service_name in ['s3', 's3-control'] + + def _compute_endpoint_config( + self, + service_name, + region_name, + endpoint_url, + is_secure, + endpoint_bridge, + s3_config, + ): + resolve_endpoint_kwargs = { + 'service_name': service_name, + 'region_name': region_name, + 'endpoint_url': endpoint_url, + 'is_secure': is_secure, + 'endpoint_bridge': endpoint_bridge, + } + if service_name == 's3': + return self._compute_s3_endpoint_config( + s3_config=s3_config, **resolve_endpoint_kwargs + ) + if service_name == 'sts': + return self._compute_sts_endpoint_config(**resolve_endpoint_kwargs) + return self._resolve_endpoint(**resolve_endpoint_kwargs) + + def _compute_s3_endpoint_config( + self, s3_config, **resolve_endpoint_kwargs + ): + force_s3_global = self._should_force_s3_global( + resolve_endpoint_kwargs['region_name'], s3_config + ) + if force_s3_global: + resolve_endpoint_kwargs['region_name'] = None + endpoint_config = self._resolve_endpoint(**resolve_endpoint_kwargs) + self._set_region_if_custom_s3_endpoint( + endpoint_config, resolve_endpoint_kwargs['endpoint_bridge'] + ) + # For backwards compatibility reasons, we want to make sure the + # client.meta.region_name will remain us-east-1 if we forced the + # endpoint to be the global region. Specifically, if this value + # changes to aws-global, it breaks logic where a user is checking + # for us-east-1 as the global endpoint such as in creating buckets. + if force_s3_global and endpoint_config['region_name'] == 'aws-global': + endpoint_config['region_name'] = 'us-east-1' + return endpoint_config + + def _should_force_s3_global(self, region_name, s3_config): + s3_regional_config = 'legacy' + if s3_config and 'us_east_1_regional_endpoint' in s3_config: + s3_regional_config = s3_config['us_east_1_regional_endpoint'] + self._validate_s3_regional_config(s3_regional_config) + + is_global_region = region_name in ('us-east-1', None) + return s3_regional_config == 'legacy' and is_global_region + + def _validate_s3_regional_config(self, config_val): + if config_val not in VALID_REGIONAL_ENDPOINTS_CONFIG: + raise botocore.exceptions.InvalidS3UsEast1RegionalEndpointConfigError( + s3_us_east_1_regional_endpoint_config=config_val + ) + + def _set_region_if_custom_s3_endpoint( + self, endpoint_config, endpoint_bridge + ): + # If a user is providing a custom URL, the endpoint resolver will + # refuse to infer a signing region. If we want to default to s3v4, + # we have to account for this. + if ( + endpoint_config['signing_region'] is None + and endpoint_config['region_name'] is None + ): + endpoint = endpoint_bridge.resolve('s3') + endpoint_config['signing_region'] = endpoint['signing_region'] + endpoint_config['region_name'] = endpoint['region_name'] + + def _compute_sts_endpoint_config(self, **resolve_endpoint_kwargs): + endpoint_config = self._resolve_endpoint(**resolve_endpoint_kwargs) + if self._should_set_global_sts_endpoint( + resolve_endpoint_kwargs['region_name'], + resolve_endpoint_kwargs['endpoint_url'], + endpoint_config, + ): + self._set_global_sts_endpoint( + endpoint_config, resolve_endpoint_kwargs['is_secure'] + ) + return endpoint_config + + def _should_set_global_sts_endpoint( + self, region_name, endpoint_url, endpoint_config + ): + has_variant_tags = endpoint_config and endpoint_config.get( + 'metadata', {} + ).get('tags') + if endpoint_url or has_variant_tags: + return False + return ( + self._get_sts_regional_endpoints_config() == 'legacy' + and region_name in LEGACY_GLOBAL_STS_REGIONS + ) + + def _get_sts_regional_endpoints_config(self): + sts_regional_endpoints_config = self._config_store.get_config_variable( + 'sts_regional_endpoints' + ) + if not sts_regional_endpoints_config: + sts_regional_endpoints_config = 'legacy' + if ( + sts_regional_endpoints_config + not in VALID_REGIONAL_ENDPOINTS_CONFIG + ): + raise botocore.exceptions.InvalidSTSRegionalEndpointsConfigError( + sts_regional_endpoints_config=sts_regional_endpoints_config + ) + return sts_regional_endpoints_config + + def _set_global_sts_endpoint(self, endpoint_config, is_secure): + scheme = 'https' if is_secure else 'http' + endpoint_config['endpoint_url'] = '%s://sts.amazonaws.com' % scheme + endpoint_config['signing_region'] = 'us-east-1' + + def _resolve_endpoint( + self, + service_name, + region_name, + endpoint_url, + is_secure, + endpoint_bridge, + ): + return endpoint_bridge.resolve( + service_name, region_name, endpoint_url, is_secure + ) + + def _compute_socket_options(self, scoped_config, client_config=None): + # This disables Nagle's algorithm and is the default socket options + # in urllib3. + socket_options = [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)] + client_keepalive = client_config and client_config.tcp_keepalive + scoped_keepalive = scoped_config and self._ensure_boolean( + scoped_config.get("tcp_keepalive", False) + ) + # Enables TCP Keepalive if specified in client config object or shared config file. + if client_keepalive or scoped_keepalive: + socket_options.append((socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)) + return socket_options + + def _compute_retry_config(self, config_kwargs): + self._compute_retry_max_attempts(config_kwargs) + self._compute_retry_mode(config_kwargs) + + def _compute_retry_max_attempts(self, config_kwargs): + # There's a pre-existing max_attempts client config value that actually + # means max *retry* attempts. There's also a `max_attempts` we pull + # from the config store that means *total attempts*, which includes the + # intitial request. We can't change what `max_attempts` means in + # client config so we try to normalize everything to a new + # "total_max_attempts" variable. We ensure that after this, the only + # configuration for "max attempts" is the 'total_max_attempts' key. + # An explicitly provided max_attempts in the client config + # overrides everything. + retries = config_kwargs.get('retries') + if retries is not None: + if 'total_max_attempts' in retries: + retries.pop('max_attempts', None) + return + if 'max_attempts' in retries: + value = retries.pop('max_attempts') + # client config max_attempts means total retries so we + # have to add one for 'total_max_attempts' to account + # for the initial request. + retries['total_max_attempts'] = value + 1 + return + # Otherwise we'll check the config store which checks env vars, + # config files, etc. There is no default value for max_attempts + # so if this returns None and we don't set a default value here. + max_attempts = self._config_store.get_config_variable('max_attempts') + if max_attempts is not None: + if retries is None: + retries = {} + config_kwargs['retries'] = retries + retries['total_max_attempts'] = max_attempts + + def _compute_retry_mode(self, config_kwargs): + retries = config_kwargs.get('retries') + if retries is None: + retries = {} + config_kwargs['retries'] = retries + elif 'mode' in retries: + # If there's a retry mode explicitly set in the client config + # that overrides everything. + return + retry_mode = self._config_store.get_config_variable('retry_mode') + if retry_mode is None: + retry_mode = 'legacy' + retries['mode'] = retry_mode + + def _compute_connect_timeout(self, config_kwargs): + # Checking if connect_timeout is set on the client config. + # If it is not, we check the config_store in case a + # non legacy default mode has been configured. + connect_timeout = config_kwargs.get('connect_timeout') + if connect_timeout is not None: + return + connect_timeout = self._config_store.get_config_variable( + 'connect_timeout' + ) + if connect_timeout: + config_kwargs['connect_timeout'] = connect_timeout + + def _compute_request_compression_config(self, config_kwargs): + min_size = config_kwargs.get('request_min_compression_size_bytes') + disabled = config_kwargs.get('disable_request_compression') + if min_size is None: + min_size = self._config_store.get_config_variable( + 'request_min_compression_size_bytes' + ) + # conversion func is skipped so input validation must be done here + # regardless if the value is coming from the config store or the + # config object + min_size = self._validate_min_compression_size(min_size) + config_kwargs['request_min_compression_size_bytes'] = min_size + + if disabled is None: + disabled = self._config_store.get_config_variable( + 'disable_request_compression' + ) + else: + # if the user provided a value we must check if it's a boolean + disabled = ensure_boolean(disabled) + config_kwargs['disable_request_compression'] = disabled + + def _validate_min_compression_size(self, min_size): + min_allowed_min_size = 1 + max_allowed_min_size = 1048576 + if min_size is not None: + error_msg_base = ( + f'Invalid value "{min_size}" for ' + 'request_min_compression_size_bytes.' + ) + try: + min_size = int(min_size) + except (ValueError, TypeError): + msg = ( + f'{error_msg_base} Value must be an integer. ' + f'Received {type(min_size)} instead.' + ) + raise botocore.exceptions.InvalidConfigError(error_msg=msg) + if not min_allowed_min_size <= min_size <= max_allowed_min_size: + msg = ( + f'{error_msg_base} Value must be between ' + f'{min_allowed_min_size} and {max_allowed_min_size}.' + ) + raise botocore.exceptions.InvalidConfigError(error_msg=msg) + + return min_size + + def _ensure_boolean(self, val): + if isinstance(val, bool): + return val + else: + return val.lower() == 'true' + + def _build_endpoint_resolver( + self, + endpoints_ruleset_data, + partition_data, + client_config, + service_model, + endpoint_region_name, + region_name, + endpoint_url, + endpoint, + is_secure, + endpoint_bridge, + event_emitter, + ): + if endpoints_ruleset_data is None: + return None + + # The legacy EndpointResolver is global to the session, but + # EndpointRulesetResolver is service-specific. Builtins for + # EndpointRulesetResolver must not be derived from the legacy + # endpoint resolver's output, including final_args, s3_config, + # etc. + s3_config_raw = self.compute_s3_config(client_config) or {} + service_name_raw = service_model.endpoint_prefix + # Maintain complex logic for s3 and sts endpoints for backwards + # compatibility. + if service_name_raw in ['s3', 'sts'] or region_name is None: + eprv2_region_name = endpoint_region_name + else: + eprv2_region_name = region_name + resolver_builtins = self.compute_endpoint_resolver_builtin_defaults( + region_name=eprv2_region_name, + service_name=service_name_raw, + s3_config=s3_config_raw, + endpoint_bridge=endpoint_bridge, + client_endpoint_url=endpoint_url, + legacy_endpoint_url=endpoint.host, + ) + # Client context params for s3 conflict with the available settings + # in the `s3` parameter on the `Config` object. If the same parameter + # is set in both places, the value in the `s3` parameter takes priority. + if client_config is not None: + client_context = client_config.client_context_params or {} + else: + client_context = {} + if self._is_s3_service(service_name_raw): + client_context.update(s3_config_raw) + + sig_version = ( + client_config.signature_version + if client_config is not None + else None + ) + return EndpointRulesetResolver( + endpoint_ruleset_data=endpoints_ruleset_data, + partition_data=partition_data, + service_model=service_model, + builtins=resolver_builtins, + client_context=client_context, + event_emitter=event_emitter, + use_ssl=is_secure, + requested_auth_scheme=sig_version, + ) + + def compute_endpoint_resolver_builtin_defaults( + self, + region_name, + service_name, + s3_config, + endpoint_bridge, + client_endpoint_url, + legacy_endpoint_url, + ): + # EndpointRulesetResolver rulesets may accept an "SDK::Endpoint" as + # input. If the endpoint_url argument of create_client() is set, it + # always takes priority. + if client_endpoint_url: + given_endpoint = client_endpoint_url + # If an endpoints.json data file other than the one bundled within + # the botocore/data directory is used, the output of legacy + # endpoint resolution is provided to EndpointRulesetResolver. + elif not endpoint_bridge.resolver_uses_builtin_data(): + given_endpoint = legacy_endpoint_url + else: + given_endpoint = None + + # The endpoint rulesets differ from legacy botocore behavior in whether + # forcing path style addressing in incompatible situations raises an + # exception or silently ignores the config setting. The + # AWS_S3_FORCE_PATH_STYLE parameter is adjusted both here and for each + # operation so that the ruleset behavior is backwards compatible. + if s3_config.get('use_accelerate_endpoint', False): + force_path_style = False + elif client_endpoint_url is not None and not is_s3_accelerate_url( + client_endpoint_url + ): + force_path_style = s3_config.get('addressing_style') != 'virtual' + else: + force_path_style = s3_config.get('addressing_style') == 'path' + + return { + EPRBuiltins.AWS_REGION: region_name, + EPRBuiltins.AWS_USE_FIPS: ( + # SDK_ENDPOINT cannot be combined with AWS_USE_FIPS + given_endpoint is None + # use legacy resolver's _resolve_endpoint_variant_config_var() + # or default to False if it returns None + and endpoint_bridge._resolve_endpoint_variant_config_var( + 'use_fips_endpoint' + ) + or False + ), + EPRBuiltins.AWS_USE_DUALSTACK: ( + # SDK_ENDPOINT cannot be combined with AWS_USE_DUALSTACK + given_endpoint is None + # use legacy resolver's _resolve_use_dualstack_endpoint() and + # or default to False if it returns None + and endpoint_bridge._resolve_use_dualstack_endpoint( + service_name + ) + or False + ), + EPRBuiltins.AWS_STS_USE_GLOBAL_ENDPOINT: ( + self._should_set_global_sts_endpoint( + region_name=region_name, + endpoint_url=None, + endpoint_config=None, + ) + ), + EPRBuiltins.AWS_S3_USE_GLOBAL_ENDPOINT: ( + self._should_force_s3_global(region_name, s3_config) + ), + EPRBuiltins.AWS_S3_ACCELERATE: s3_config.get( + 'use_accelerate_endpoint', False + ), + EPRBuiltins.AWS_S3_FORCE_PATH_STYLE: force_path_style, + EPRBuiltins.AWS_S3_USE_ARN_REGION: s3_config.get( + 'use_arn_region', True + ), + EPRBuiltins.AWS_S3CONTROL_USE_ARN_REGION: s3_config.get( + 'use_arn_region', False + ), + EPRBuiltins.AWS_S3_DISABLE_MRAP: s3_config.get( + 's3_disable_multiregion_access_points', False + ), + EPRBuiltins.SDK_ENDPOINT: given_endpoint, + } + + def _compute_user_agent_appid_config(self, config_kwargs): + user_agent_appid = config_kwargs.get('user_agent_appid') + if user_agent_appid is None: + user_agent_appid = self._config_store.get_config_variable( + 'user_agent_appid' + ) + if ( + user_agent_appid is not None + and len(user_agent_appid) > USERAGENT_APPID_MAXLEN + ): + logger.warning( + 'The configured value for user_agent_appid exceeds the ' + f'maximum length of {USERAGENT_APPID_MAXLEN} characters.' + ) + config_kwargs['user_agent_appid'] = user_agent_appid diff --git a/dbtzin/lib/python3.8/site-packages/botocore/auth.py b/dbtzin/lib/python3.8/site-packages/botocore/auth.py new file mode 100644 index 00000000..8389c157 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/auth.py @@ -0,0 +1,1162 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import base64 +import calendar +import datetime +import functools +import hmac +import json +import logging +import time +from collections.abc import Mapping +from email.utils import formatdate +from hashlib import sha1, sha256 +from operator import itemgetter + +from botocore.compat import ( + HAS_CRT, + HTTPHeaders, + encodebytes, + ensure_unicode, + parse_qs, + quote, + unquote, + urlsplit, + urlunsplit, +) +from botocore.exceptions import NoAuthTokenError, NoCredentialsError +from botocore.utils import ( + is_valid_ipv6_endpoint_url, + normalize_url_path, + percent_encode_sequence, +) + +# Imports for backwards compatibility +from botocore.compat import MD5_AVAILABLE # noqa + + +logger = logging.getLogger(__name__) + + +EMPTY_SHA256_HASH = ( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' +) +# This is the buffer size used when calculating sha256 checksums. +# Experimenting with various buffer sizes showed that this value generally +# gave the best result (in terms of performance). +PAYLOAD_BUFFER = 1024 * 1024 +ISO8601 = '%Y-%m-%dT%H:%M:%SZ' +SIGV4_TIMESTAMP = '%Y%m%dT%H%M%SZ' +SIGNED_HEADERS_BLACKLIST = [ + 'expect', + 'user-agent', + 'x-amzn-trace-id', +] +UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD' +STREAMING_UNSIGNED_PAYLOAD_TRAILER = 'STREAMING-UNSIGNED-PAYLOAD-TRAILER' + + +def _host_from_url(url): + # Given URL, derive value for host header. Ensure that value: + # 1) is lowercase + # 2) excludes port, if it was the default port + # 3) excludes userinfo + url_parts = urlsplit(url) + host = url_parts.hostname # urlsplit's hostname is always lowercase + if is_valid_ipv6_endpoint_url(url): + host = f'[{host}]' + default_ports = { + 'http': 80, + 'https': 443, + } + if url_parts.port is not None: + if url_parts.port != default_ports.get(url_parts.scheme): + host = '%s:%d' % (host, url_parts.port) + return host + + +def _get_body_as_dict(request): + # For query services, request.data is form-encoded and is already a + # dict, but for other services such as rest-json it could be a json + # string or bytes. In those cases we attempt to load the data as a + # dict. + data = request.data + if isinstance(data, bytes): + data = json.loads(data.decode('utf-8')) + elif isinstance(data, str): + data = json.loads(data) + return data + + +class BaseSigner: + REQUIRES_REGION = False + REQUIRES_TOKEN = False + + def add_auth(self, request): + raise NotImplementedError("add_auth") + + +class TokenSigner(BaseSigner): + REQUIRES_TOKEN = True + """ + Signers that expect an authorization token to perform the authorization + """ + + def __init__(self, auth_token): + self.auth_token = auth_token + + +class SigV2Auth(BaseSigner): + """ + Sign a request with Signature V2. + """ + + def __init__(self, credentials): + self.credentials = credentials + + def calc_signature(self, request, params): + logger.debug("Calculating signature using v2 auth.") + split = urlsplit(request.url) + path = split.path + if len(path) == 0: + path = '/' + string_to_sign = f"{request.method}\n{split.netloc}\n{path}\n" + lhmac = hmac.new( + self.credentials.secret_key.encode("utf-8"), digestmod=sha256 + ) + pairs = [] + for key in sorted(params): + # Any previous signature should not be a part of this + # one, so we skip that particular key. This prevents + # issues during retries. + if key == 'Signature': + continue + value = str(params[key]) + quoted_key = quote(key.encode('utf-8'), safe='') + quoted_value = quote(value.encode('utf-8'), safe='-_~') + pairs.append(f'{quoted_key}={quoted_value}') + qs = '&'.join(pairs) + string_to_sign += qs + logger.debug('String to sign: %s', string_to_sign) + lhmac.update(string_to_sign.encode('utf-8')) + b64 = base64.b64encode(lhmac.digest()).strip().decode('utf-8') + return (qs, b64) + + def add_auth(self, request): + # The auth handler is the last thing called in the + # preparation phase of a prepared request. + # Because of this we have to parse the query params + # from the request body so we can update them with + # the sigv2 auth params. + if self.credentials is None: + raise NoCredentialsError() + if request.data: + # POST + params = request.data + else: + # GET + params = request.params + params['AWSAccessKeyId'] = self.credentials.access_key + params['SignatureVersion'] = '2' + params['SignatureMethod'] = 'HmacSHA256' + params['Timestamp'] = time.strftime(ISO8601, time.gmtime()) + if self.credentials.token: + params['SecurityToken'] = self.credentials.token + qs, signature = self.calc_signature(request, params) + params['Signature'] = signature + return request + + +class SigV3Auth(BaseSigner): + def __init__(self, credentials): + self.credentials = credentials + + def add_auth(self, request): + if self.credentials is None: + raise NoCredentialsError() + if 'Date' in request.headers: + del request.headers['Date'] + request.headers['Date'] = formatdate(usegmt=True) + if self.credentials.token: + if 'X-Amz-Security-Token' in request.headers: + del request.headers['X-Amz-Security-Token'] + request.headers['X-Amz-Security-Token'] = self.credentials.token + new_hmac = hmac.new( + self.credentials.secret_key.encode('utf-8'), digestmod=sha256 + ) + new_hmac.update(request.headers['Date'].encode('utf-8')) + encoded_signature = encodebytes(new_hmac.digest()).strip() + signature = ( + f"AWS3-HTTPS AWSAccessKeyId={self.credentials.access_key}," + f"Algorithm=HmacSHA256,Signature={encoded_signature.decode('utf-8')}" + ) + if 'X-Amzn-Authorization' in request.headers: + del request.headers['X-Amzn-Authorization'] + request.headers['X-Amzn-Authorization'] = signature + + +class SigV4Auth(BaseSigner): + """ + Sign a request with Signature V4. + """ + + REQUIRES_REGION = True + + def __init__(self, credentials, service_name, region_name): + self.credentials = credentials + # We initialize these value here so the unit tests can have + # valid values. But these will get overriden in ``add_auth`` + # later for real requests. + self._region_name = region_name + self._service_name = service_name + + def _sign(self, key, msg, hex=False): + if hex: + sig = hmac.new(key, msg.encode('utf-8'), sha256).hexdigest() + else: + sig = hmac.new(key, msg.encode('utf-8'), sha256).digest() + return sig + + def headers_to_sign(self, request): + """ + Select the headers from the request that need to be included + in the StringToSign. + """ + header_map = HTTPHeaders() + for name, value in request.headers.items(): + lname = name.lower() + if lname not in SIGNED_HEADERS_BLACKLIST: + header_map[lname] = value + if 'host' not in header_map: + # TODO: We should set the host ourselves, instead of relying on our + # HTTP client to set it for us. + header_map['host'] = _host_from_url(request.url) + return header_map + + def canonical_query_string(self, request): + # The query string can come from two parts. One is the + # params attribute of the request. The other is from the request + # url (in which case we have to re-split the url into its components + # and parse out the query string component). + if request.params: + return self._canonical_query_string_params(request.params) + else: + return self._canonical_query_string_url(urlsplit(request.url)) + + def _canonical_query_string_params(self, params): + # [(key, value), (key2, value2)] + key_val_pairs = [] + if isinstance(params, Mapping): + params = params.items() + for key, value in params: + key_val_pairs.append( + (quote(key, safe='-_.~'), quote(str(value), safe='-_.~')) + ) + sorted_key_vals = [] + # Sort by the URI-encoded key names, and in the case of + # repeated keys, then sort by the value. + for key, value in sorted(key_val_pairs): + sorted_key_vals.append(f'{key}={value}') + canonical_query_string = '&'.join(sorted_key_vals) + return canonical_query_string + + def _canonical_query_string_url(self, parts): + canonical_query_string = '' + if parts.query: + # [(key, value), (key2, value2)] + key_val_pairs = [] + for pair in parts.query.split('&'): + key, _, value = pair.partition('=') + key_val_pairs.append((key, value)) + sorted_key_vals = [] + # Sort by the URI-encoded key names, and in the case of + # repeated keys, then sort by the value. + for key, value in sorted(key_val_pairs): + sorted_key_vals.append(f'{key}={value}') + canonical_query_string = '&'.join(sorted_key_vals) + return canonical_query_string + + def canonical_headers(self, headers_to_sign): + """ + Return the headers that need to be included in the StringToSign + in their canonical form by converting all header keys to lower + case, sorting them in alphabetical order and then joining + them into a string, separated by newlines. + """ + headers = [] + sorted_header_names = sorted(set(headers_to_sign)) + for key in sorted_header_names: + value = ','.join( + self._header_value(v) for v in headers_to_sign.get_all(key) + ) + headers.append(f'{key}:{ensure_unicode(value)}') + return '\n'.join(headers) + + def _header_value(self, value): + # From the sigv4 docs: + # Lowercase(HeaderName) + ':' + Trimall(HeaderValue) + # + # The Trimall function removes excess white space before and after + # values, and converts sequential spaces to a single space. + return ' '.join(value.split()) + + def signed_headers(self, headers_to_sign): + headers = sorted(n.lower().strip() for n in set(headers_to_sign)) + return ';'.join(headers) + + def _is_streaming_checksum_payload(self, request): + checksum_context = request.context.get('checksum', {}) + algorithm = checksum_context.get('request_algorithm') + return isinstance(algorithm, dict) and algorithm.get('in') == 'trailer' + + def payload(self, request): + if self._is_streaming_checksum_payload(request): + return STREAMING_UNSIGNED_PAYLOAD_TRAILER + elif not self._should_sha256_sign_payload(request): + # When payload signing is disabled, we use this static string in + # place of the payload checksum. + return UNSIGNED_PAYLOAD + request_body = request.body + if request_body and hasattr(request_body, 'seek'): + position = request_body.tell() + read_chunksize = functools.partial( + request_body.read, PAYLOAD_BUFFER + ) + checksum = sha256() + for chunk in iter(read_chunksize, b''): + checksum.update(chunk) + hex_checksum = checksum.hexdigest() + request_body.seek(position) + return hex_checksum + elif request_body: + # The request serialization has ensured that + # request.body is a bytes() type. + return sha256(request_body).hexdigest() + else: + return EMPTY_SHA256_HASH + + def _should_sha256_sign_payload(self, request): + # Payloads will always be signed over insecure connections. + if not request.url.startswith('https'): + return True + + # Certain operations may have payload signing disabled by default. + # Since we don't have access to the operation model, we pass in this + # bit of metadata through the request context. + return request.context.get('payload_signing_enabled', True) + + def canonical_request(self, request): + cr = [request.method.upper()] + path = self._normalize_url_path(urlsplit(request.url).path) + cr.append(path) + cr.append(self.canonical_query_string(request)) + headers_to_sign = self.headers_to_sign(request) + cr.append(self.canonical_headers(headers_to_sign) + '\n') + cr.append(self.signed_headers(headers_to_sign)) + if 'X-Amz-Content-SHA256' in request.headers: + body_checksum = request.headers['X-Amz-Content-SHA256'] + else: + body_checksum = self.payload(request) + cr.append(body_checksum) + return '\n'.join(cr) + + def _normalize_url_path(self, path): + normalized_path = quote(normalize_url_path(path), safe='/~') + return normalized_path + + def scope(self, request): + scope = [self.credentials.access_key] + scope.append(request.context['timestamp'][0:8]) + scope.append(self._region_name) + scope.append(self._service_name) + scope.append('aws4_request') + return '/'.join(scope) + + def credential_scope(self, request): + scope = [] + scope.append(request.context['timestamp'][0:8]) + scope.append(self._region_name) + scope.append(self._service_name) + scope.append('aws4_request') + return '/'.join(scope) + + def string_to_sign(self, request, canonical_request): + """ + Return the canonical StringToSign as well as a dict + containing the original version of all headers that + were included in the StringToSign. + """ + sts = ['AWS4-HMAC-SHA256'] + sts.append(request.context['timestamp']) + sts.append(self.credential_scope(request)) + sts.append(sha256(canonical_request.encode('utf-8')).hexdigest()) + return '\n'.join(sts) + + def signature(self, string_to_sign, request): + key = self.credentials.secret_key + k_date = self._sign( + (f"AWS4{key}").encode(), request.context["timestamp"][0:8] + ) + k_region = self._sign(k_date, self._region_name) + k_service = self._sign(k_region, self._service_name) + k_signing = self._sign(k_service, 'aws4_request') + return self._sign(k_signing, string_to_sign, hex=True) + + def add_auth(self, request): + if self.credentials is None: + raise NoCredentialsError() + datetime_now = datetime.datetime.utcnow() + request.context['timestamp'] = datetime_now.strftime(SIGV4_TIMESTAMP) + # This could be a retry. Make sure the previous + # authorization header is removed first. + self._modify_request_before_signing(request) + canonical_request = self.canonical_request(request) + logger.debug("Calculating signature using v4 auth.") + logger.debug('CanonicalRequest:\n%s', canonical_request) + string_to_sign = self.string_to_sign(request, canonical_request) + logger.debug('StringToSign:\n%s', string_to_sign) + signature = self.signature(string_to_sign, request) + logger.debug('Signature:\n%s', signature) + + self._inject_signature_to_request(request, signature) + + def _inject_signature_to_request(self, request, signature): + auth_str = ['AWS4-HMAC-SHA256 Credential=%s' % self.scope(request)] + headers_to_sign = self.headers_to_sign(request) + auth_str.append( + f"SignedHeaders={self.signed_headers(headers_to_sign)}" + ) + auth_str.append('Signature=%s' % signature) + request.headers['Authorization'] = ', '.join(auth_str) + return request + + def _modify_request_before_signing(self, request): + if 'Authorization' in request.headers: + del request.headers['Authorization'] + self._set_necessary_date_headers(request) + if self.credentials.token: + if 'X-Amz-Security-Token' in request.headers: + del request.headers['X-Amz-Security-Token'] + request.headers['X-Amz-Security-Token'] = self.credentials.token + + if not request.context.get('payload_signing_enabled', True): + if 'X-Amz-Content-SHA256' in request.headers: + del request.headers['X-Amz-Content-SHA256'] + request.headers['X-Amz-Content-SHA256'] = UNSIGNED_PAYLOAD + + def _set_necessary_date_headers(self, request): + # The spec allows for either the Date _or_ the X-Amz-Date value to be + # used so we check both. If there's a Date header, we use the date + # header. Otherwise we use the X-Amz-Date header. + if 'Date' in request.headers: + del request.headers['Date'] + datetime_timestamp = datetime.datetime.strptime( + request.context['timestamp'], SIGV4_TIMESTAMP + ) + request.headers['Date'] = formatdate( + int(calendar.timegm(datetime_timestamp.timetuple())) + ) + if 'X-Amz-Date' in request.headers: + del request.headers['X-Amz-Date'] + else: + if 'X-Amz-Date' in request.headers: + del request.headers['X-Amz-Date'] + request.headers['X-Amz-Date'] = request.context['timestamp'] + + +class S3SigV4Auth(SigV4Auth): + def _modify_request_before_signing(self, request): + super()._modify_request_before_signing(request) + if 'X-Amz-Content-SHA256' in request.headers: + del request.headers['X-Amz-Content-SHA256'] + + request.headers['X-Amz-Content-SHA256'] = self.payload(request) + + def _should_sha256_sign_payload(self, request): + # S3 allows optional body signing, so to minimize the performance + # impact, we opt to not SHA256 sign the body on streaming uploads, + # provided that we're on https. + client_config = request.context.get('client_config') + s3_config = getattr(client_config, 's3', None) + + # The config could be None if it isn't set, or if the customer sets it + # to None. + if s3_config is None: + s3_config = {} + + # The explicit configuration takes precedence over any implicit + # configuration. + sign_payload = s3_config.get('payload_signing_enabled', None) + if sign_payload is not None: + return sign_payload + + # We require that both a checksum be present and https be enabled + # to implicitly disable body signing. The combination of TLS and + # a checksum is sufficiently secure and durable for us to be + # confident in the request without body signing. + checksum_header = 'Content-MD5' + checksum_context = request.context.get('checksum', {}) + algorithm = checksum_context.get('request_algorithm') + if isinstance(algorithm, dict) and algorithm.get('in') == 'header': + checksum_header = algorithm['name'] + if ( + not request.url.startswith("https") + or checksum_header not in request.headers + ): + return True + + # If the input is streaming we disable body signing by default. + if request.context.get('has_streaming_input', False): + return False + + # If the S3-specific checks had no results, delegate to the generic + # checks. + return super()._should_sha256_sign_payload(request) + + def _normalize_url_path(self, path): + # For S3, we do not normalize the path. + return path + + +class S3ExpressAuth(S3SigV4Auth): + REQUIRES_IDENTITY_CACHE = True + + def __init__( + self, credentials, service_name, region_name, *, identity_cache + ): + super().__init__(credentials, service_name, region_name) + self._identity_cache = identity_cache + + def add_auth(self, request): + super().add_auth(request) + + def _modify_request_before_signing(self, request): + super()._modify_request_before_signing(request) + if 'x-amz-s3session-token' not in request.headers: + request.headers['x-amz-s3session-token'] = self.credentials.token + # S3Express does not support STS' X-Amz-Security-Token + if 'X-Amz-Security-Token' in request.headers: + del request.headers['X-Amz-Security-Token'] + + +class S3ExpressPostAuth(S3ExpressAuth): + REQUIRES_IDENTITY_CACHE = True + + def add_auth(self, request): + datetime_now = datetime.datetime.utcnow() + request.context['timestamp'] = datetime_now.strftime(SIGV4_TIMESTAMP) + + fields = {} + if request.context.get('s3-presign-post-fields', None) is not None: + fields = request.context['s3-presign-post-fields'] + + policy = {} + conditions = [] + if request.context.get('s3-presign-post-policy', None) is not None: + policy = request.context['s3-presign-post-policy'] + if policy.get('conditions', None) is not None: + conditions = policy['conditions'] + + policy['conditions'] = conditions + + fields['x-amz-algorithm'] = 'AWS4-HMAC-SHA256' + fields['x-amz-credential'] = self.scope(request) + fields['x-amz-date'] = request.context['timestamp'] + + conditions.append({'x-amz-algorithm': 'AWS4-HMAC-SHA256'}) + conditions.append({'x-amz-credential': self.scope(request)}) + conditions.append({'x-amz-date': request.context['timestamp']}) + + if self.credentials.token is not None: + fields['X-Amz-S3session-Token'] = self.credentials.token + conditions.append( + {'X-Amz-S3session-Token': self.credentials.token} + ) + + # Dump the base64 encoded policy into the fields dictionary. + fields['policy'] = base64.b64encode( + json.dumps(policy).encode('utf-8') + ).decode('utf-8') + + fields['x-amz-signature'] = self.signature(fields['policy'], request) + + request.context['s3-presign-post-fields'] = fields + request.context['s3-presign-post-policy'] = policy + + +class S3ExpressQueryAuth(S3ExpressAuth): + DEFAULT_EXPIRES = 300 + REQUIRES_IDENTITY_CACHE = True + + def __init__( + self, + credentials, + service_name, + region_name, + *, + identity_cache, + expires=DEFAULT_EXPIRES, + ): + super().__init__( + credentials, + service_name, + region_name, + identity_cache=identity_cache, + ) + self._expires = expires + + def _modify_request_before_signing(self, request): + # We automatically set this header, so if it's the auto-set value we + # want to get rid of it since it doesn't make sense for presigned urls. + content_type = request.headers.get('content-type') + blocklisted_content_type = ( + 'application/x-www-form-urlencoded; charset=utf-8' + ) + if content_type == blocklisted_content_type: + del request.headers['content-type'] + + # Note that we're not including X-Amz-Signature. + # From the docs: "The Canonical Query String must include all the query + # parameters from the preceding table except for X-Amz-Signature. + signed_headers = self.signed_headers(self.headers_to_sign(request)) + + auth_params = { + 'X-Amz-Algorithm': 'AWS4-HMAC-SHA256', + 'X-Amz-Credential': self.scope(request), + 'X-Amz-Date': request.context['timestamp'], + 'X-Amz-Expires': self._expires, + 'X-Amz-SignedHeaders': signed_headers, + } + if self.credentials.token is not None: + auth_params['X-Amz-S3session-Token'] = self.credentials.token + # Now parse the original query string to a dict, inject our new query + # params, and serialize back to a query string. + url_parts = urlsplit(request.url) + # parse_qs makes each value a list, but in our case we know we won't + # have repeated keys so we know we have single element lists which we + # can convert back to scalar values. + query_string_parts = parse_qs(url_parts.query, keep_blank_values=True) + query_dict = {k: v[0] for k, v in query_string_parts.items()} + + if request.params: + query_dict.update(request.params) + request.params = {} + # The spec is particular about this. It *has* to be: + # https://?& + # You can't mix the two types of params together, i.e just keep doing + # new_query_params.update(op_params) + # new_query_params.update(auth_params) + # percent_encode_sequence(new_query_params) + operation_params = '' + if request.data: + # We also need to move the body params into the query string. To + # do this, we first have to convert it to a dict. + query_dict.update(_get_body_as_dict(request)) + request.data = '' + if query_dict: + operation_params = percent_encode_sequence(query_dict) + '&' + new_query_string = ( + f"{operation_params}{percent_encode_sequence(auth_params)}" + ) + # url_parts is a tuple (and therefore immutable) so we need to create + # a new url_parts with the new query string. + # - + # scheme - 0 + # netloc - 1 + # path - 2 + # query - 3 <-- we're replacing this. + # fragment - 4 + p = url_parts + new_url_parts = (p[0], p[1], p[2], new_query_string, p[4]) + request.url = urlunsplit(new_url_parts) + + def _inject_signature_to_request(self, request, signature): + # Rather than calculating an "Authorization" header, for the query + # param quth, we just append an 'X-Amz-Signature' param to the end + # of the query string. + request.url += '&X-Amz-Signature=%s' % signature + + def _normalize_url_path(self, path): + # For S3, we do not normalize the path. + return path + + def payload(self, request): + # From the doc link above: + # "You don't include a payload hash in the Canonical Request, because + # when you create a presigned URL, you don't know anything about the + # payload. Instead, you use a constant string "UNSIGNED-PAYLOAD". + return UNSIGNED_PAYLOAD + + +class SigV4QueryAuth(SigV4Auth): + DEFAULT_EXPIRES = 3600 + + def __init__( + self, credentials, service_name, region_name, expires=DEFAULT_EXPIRES + ): + super().__init__(credentials, service_name, region_name) + self._expires = expires + + def _modify_request_before_signing(self, request): + # We automatically set this header, so if it's the auto-set value we + # want to get rid of it since it doesn't make sense for presigned urls. + content_type = request.headers.get('content-type') + blacklisted_content_type = ( + 'application/x-www-form-urlencoded; charset=utf-8' + ) + if content_type == blacklisted_content_type: + del request.headers['content-type'] + + # Note that we're not including X-Amz-Signature. + # From the docs: "The Canonical Query String must include all the query + # parameters from the preceding table except for X-Amz-Signature. + signed_headers = self.signed_headers(self.headers_to_sign(request)) + + auth_params = { + 'X-Amz-Algorithm': 'AWS4-HMAC-SHA256', + 'X-Amz-Credential': self.scope(request), + 'X-Amz-Date': request.context['timestamp'], + 'X-Amz-Expires': self._expires, + 'X-Amz-SignedHeaders': signed_headers, + } + if self.credentials.token is not None: + auth_params['X-Amz-Security-Token'] = self.credentials.token + # Now parse the original query string to a dict, inject our new query + # params, and serialize back to a query string. + url_parts = urlsplit(request.url) + # parse_qs makes each value a list, but in our case we know we won't + # have repeated keys so we know we have single element lists which we + # can convert back to scalar values. + query_string_parts = parse_qs(url_parts.query, keep_blank_values=True) + query_dict = {k: v[0] for k, v in query_string_parts.items()} + + if request.params: + query_dict.update(request.params) + request.params = {} + # The spec is particular about this. It *has* to be: + # https://?& + # You can't mix the two types of params together, i.e just keep doing + # new_query_params.update(op_params) + # new_query_params.update(auth_params) + # percent_encode_sequence(new_query_params) + operation_params = '' + if request.data: + # We also need to move the body params into the query string. To + # do this, we first have to convert it to a dict. + query_dict.update(_get_body_as_dict(request)) + request.data = '' + if query_dict: + operation_params = percent_encode_sequence(query_dict) + '&' + new_query_string = ( + f"{operation_params}{percent_encode_sequence(auth_params)}" + ) + # url_parts is a tuple (and therefore immutable) so we need to create + # a new url_parts with the new query string. + # - + # scheme - 0 + # netloc - 1 + # path - 2 + # query - 3 <-- we're replacing this. + # fragment - 4 + p = url_parts + new_url_parts = (p[0], p[1], p[2], new_query_string, p[4]) + request.url = urlunsplit(new_url_parts) + + def _inject_signature_to_request(self, request, signature): + # Rather than calculating an "Authorization" header, for the query + # param quth, we just append an 'X-Amz-Signature' param to the end + # of the query string. + request.url += '&X-Amz-Signature=%s' % signature + + +class S3SigV4QueryAuth(SigV4QueryAuth): + """S3 SigV4 auth using query parameters. + + This signer will sign a request using query parameters and signature + version 4, i.e a "presigned url" signer. + + Based off of: + + http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html + + """ + + def _normalize_url_path(self, path): + # For S3, we do not normalize the path. + return path + + def payload(self, request): + # From the doc link above: + # "You don't include a payload hash in the Canonical Request, because + # when you create a presigned URL, you don't know anything about the + # payload. Instead, you use a constant string "UNSIGNED-PAYLOAD". + return UNSIGNED_PAYLOAD + + +class S3SigV4PostAuth(SigV4Auth): + """ + Presigns a s3 post + + Implementation doc here: + http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html + """ + + def add_auth(self, request): + datetime_now = datetime.datetime.utcnow() + request.context['timestamp'] = datetime_now.strftime(SIGV4_TIMESTAMP) + + fields = {} + if request.context.get('s3-presign-post-fields', None) is not None: + fields = request.context['s3-presign-post-fields'] + + policy = {} + conditions = [] + if request.context.get('s3-presign-post-policy', None) is not None: + policy = request.context['s3-presign-post-policy'] + if policy.get('conditions', None) is not None: + conditions = policy['conditions'] + + policy['conditions'] = conditions + + fields['x-amz-algorithm'] = 'AWS4-HMAC-SHA256' + fields['x-amz-credential'] = self.scope(request) + fields['x-amz-date'] = request.context['timestamp'] + + conditions.append({'x-amz-algorithm': 'AWS4-HMAC-SHA256'}) + conditions.append({'x-amz-credential': self.scope(request)}) + conditions.append({'x-amz-date': request.context['timestamp']}) + + if self.credentials.token is not None: + fields['x-amz-security-token'] = self.credentials.token + conditions.append({'x-amz-security-token': self.credentials.token}) + + # Dump the base64 encoded policy into the fields dictionary. + fields['policy'] = base64.b64encode( + json.dumps(policy).encode('utf-8') + ).decode('utf-8') + + fields['x-amz-signature'] = self.signature(fields['policy'], request) + + request.context['s3-presign-post-fields'] = fields + request.context['s3-presign-post-policy'] = policy + + +class HmacV1Auth(BaseSigner): + # List of Query String Arguments of Interest + QSAOfInterest = [ + 'accelerate', + 'acl', + 'cors', + 'defaultObjectAcl', + 'location', + 'logging', + 'partNumber', + 'policy', + 'requestPayment', + 'torrent', + 'versioning', + 'versionId', + 'versions', + 'website', + 'uploads', + 'uploadId', + 'response-content-type', + 'response-content-language', + 'response-expires', + 'response-cache-control', + 'response-content-disposition', + 'response-content-encoding', + 'delete', + 'lifecycle', + 'tagging', + 'restore', + 'storageClass', + 'notification', + 'replication', + 'requestPayment', + 'analytics', + 'metrics', + 'inventory', + 'select', + 'select-type', + 'object-lock', + ] + + def __init__(self, credentials, service_name=None, region_name=None): + self.credentials = credentials + + def sign_string(self, string_to_sign): + new_hmac = hmac.new( + self.credentials.secret_key.encode('utf-8'), digestmod=sha1 + ) + new_hmac.update(string_to_sign.encode('utf-8')) + return encodebytes(new_hmac.digest()).strip().decode('utf-8') + + def canonical_standard_headers(self, headers): + interesting_headers = ['content-md5', 'content-type', 'date'] + hoi = [] + if 'Date' in headers: + del headers['Date'] + headers['Date'] = self._get_date() + for ih in interesting_headers: + found = False + for key in headers: + lk = key.lower() + if headers[key] is not None and lk == ih: + hoi.append(headers[key].strip()) + found = True + if not found: + hoi.append('') + return '\n'.join(hoi) + + def canonical_custom_headers(self, headers): + hoi = [] + custom_headers = {} + for key in headers: + lk = key.lower() + if headers[key] is not None: + if lk.startswith('x-amz-'): + custom_headers[lk] = ','.join( + v.strip() for v in headers.get_all(key) + ) + sorted_header_keys = sorted(custom_headers.keys()) + for key in sorted_header_keys: + hoi.append(f"{key}:{custom_headers[key]}") + return '\n'.join(hoi) + + def unquote_v(self, nv): + """ + TODO: Do we need this? + """ + if len(nv) == 1: + return nv + else: + return (nv[0], unquote(nv[1])) + + def canonical_resource(self, split, auth_path=None): + # don't include anything after the first ? in the resource... + # unless it is one of the QSA of interest, defined above + # NOTE: + # The path in the canonical resource should always be the + # full path including the bucket name, even for virtual-hosting + # style addressing. The ``auth_path`` keeps track of the full + # path for the canonical resource and would be passed in if + # the client was using virtual-hosting style. + if auth_path is not None: + buf = auth_path + else: + buf = split.path + if split.query: + qsa = split.query.split('&') + qsa = [a.split('=', 1) for a in qsa] + qsa = [ + self.unquote_v(a) for a in qsa if a[0] in self.QSAOfInterest + ] + if len(qsa) > 0: + qsa.sort(key=itemgetter(0)) + qsa = ['='.join(a) for a in qsa] + buf += '?' + buf += '&'.join(qsa) + return buf + + def canonical_string( + self, method, split, headers, expires=None, auth_path=None + ): + cs = method.upper() + '\n' + cs += self.canonical_standard_headers(headers) + '\n' + custom_headers = self.canonical_custom_headers(headers) + if custom_headers: + cs += custom_headers + '\n' + cs += self.canonical_resource(split, auth_path=auth_path) + return cs + + def get_signature( + self, method, split, headers, expires=None, auth_path=None + ): + if self.credentials.token: + del headers['x-amz-security-token'] + headers['x-amz-security-token'] = self.credentials.token + string_to_sign = self.canonical_string( + method, split, headers, auth_path=auth_path + ) + logger.debug('StringToSign:\n%s', string_to_sign) + return self.sign_string(string_to_sign) + + def add_auth(self, request): + if self.credentials is None: + raise NoCredentialsError + logger.debug("Calculating signature using hmacv1 auth.") + split = urlsplit(request.url) + logger.debug('HTTP request method: %s', request.method) + signature = self.get_signature( + request.method, split, request.headers, auth_path=request.auth_path + ) + self._inject_signature(request, signature) + + def _get_date(self): + return formatdate(usegmt=True) + + def _inject_signature(self, request, signature): + if 'Authorization' in request.headers: + # We have to do this because request.headers is not + # normal dictionary. It has the (unintuitive) behavior + # of aggregating repeated setattr calls for the same + # key value. For example: + # headers['foo'] = 'a'; headers['foo'] = 'b' + # list(headers) will print ['foo', 'foo']. + del request.headers['Authorization'] + + auth_header = f"AWS {self.credentials.access_key}:{signature}" + request.headers['Authorization'] = auth_header + + +class HmacV1QueryAuth(HmacV1Auth): + """ + Generates a presigned request for s3. + + Spec from this document: + + http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html + #RESTAuthenticationQueryStringAuth + + """ + + DEFAULT_EXPIRES = 3600 + + def __init__(self, credentials, expires=DEFAULT_EXPIRES): + self.credentials = credentials + self._expires = expires + + def _get_date(self): + return str(int(time.time() + int(self._expires))) + + def _inject_signature(self, request, signature): + query_dict = {} + query_dict['AWSAccessKeyId'] = self.credentials.access_key + query_dict['Signature'] = signature + + for header_key in request.headers: + lk = header_key.lower() + # For query string requests, Expires is used instead of the + # Date header. + if header_key == 'Date': + query_dict['Expires'] = request.headers['Date'] + # We only want to include relevant headers in the query string. + # These can be anything that starts with x-amz, is Content-MD5, + # or is Content-Type. + elif lk.startswith('x-amz-') or lk in ( + 'content-md5', + 'content-type', + ): + query_dict[lk] = request.headers[lk] + # Combine all of the identified headers into an encoded + # query string + new_query_string = percent_encode_sequence(query_dict) + + # Create a new url with the presigned url. + p = urlsplit(request.url) + if p[3]: + # If there was a pre-existing query string, we should + # add that back before injecting the new query string. + new_query_string = f'{p[3]}&{new_query_string}' + new_url_parts = (p[0], p[1], p[2], new_query_string, p[4]) + request.url = urlunsplit(new_url_parts) + + +class HmacV1PostAuth(HmacV1Auth): + """ + Generates a presigned post for s3. + + Spec from this document: + + http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html + """ + + def add_auth(self, request): + fields = {} + if request.context.get('s3-presign-post-fields', None) is not None: + fields = request.context['s3-presign-post-fields'] + + policy = {} + conditions = [] + if request.context.get('s3-presign-post-policy', None) is not None: + policy = request.context['s3-presign-post-policy'] + if policy.get('conditions', None) is not None: + conditions = policy['conditions'] + + policy['conditions'] = conditions + + fields['AWSAccessKeyId'] = self.credentials.access_key + + if self.credentials.token is not None: + fields['x-amz-security-token'] = self.credentials.token + conditions.append({'x-amz-security-token': self.credentials.token}) + + # Dump the base64 encoded policy into the fields dictionary. + fields['policy'] = base64.b64encode( + json.dumps(policy).encode('utf-8') + ).decode('utf-8') + + fields['signature'] = self.sign_string(fields['policy']) + + request.context['s3-presign-post-fields'] = fields + request.context['s3-presign-post-policy'] = policy + + +class BearerAuth(TokenSigner): + """ + Performs bearer token authorization by placing the bearer token in the + Authorization header as specified by Section 2.1 of RFC 6750. + + https://datatracker.ietf.org/doc/html/rfc6750#section-2.1 + """ + + def add_auth(self, request): + if self.auth_token is None: + raise NoAuthTokenError() + + auth_header = f'Bearer {self.auth_token.token}' + if 'Authorization' in request.headers: + del request.headers['Authorization'] + request.headers['Authorization'] = auth_header + + +AUTH_TYPE_MAPS = { + 'v2': SigV2Auth, + 'v3': SigV3Auth, + 'v3https': SigV3Auth, + 's3': HmacV1Auth, + 's3-query': HmacV1QueryAuth, + 's3-presign-post': HmacV1PostAuth, + 's3v4-presign-post': S3SigV4PostAuth, + 'v4-s3express': S3ExpressAuth, + 'v4-s3express-query': S3ExpressQueryAuth, + 'v4-s3express-presign-post': S3ExpressPostAuth, + 'bearer': BearerAuth, +} + +# Define v4 signers depending on if CRT is present +if HAS_CRT: + from botocore.crt.auth import CRT_AUTH_TYPE_MAPS + + AUTH_TYPE_MAPS.update(CRT_AUTH_TYPE_MAPS) +else: + AUTH_TYPE_MAPS.update( + { + 'v4': SigV4Auth, + 'v4-query': SigV4QueryAuth, + 's3v4': S3SigV4Auth, + 's3v4-query': S3SigV4QueryAuth, + } + ) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/awsrequest.py b/dbtzin/lib/python3.8/site-packages/botocore/awsrequest.py new file mode 100644 index 00000000..9123e65c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/awsrequest.py @@ -0,0 +1,635 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import functools +import logging +from collections.abc import Mapping + +import urllib3.util +from urllib3.connection import HTTPConnection, VerifiedHTTPSConnection +from urllib3.connectionpool import HTTPConnectionPool, HTTPSConnectionPool + +import botocore.utils +from botocore.compat import ( + HTTPHeaders, + HTTPResponse, + MutableMapping, + urlencode, + urlparse, + urlsplit, + urlunsplit, +) +from botocore.exceptions import UnseekableStreamError + +logger = logging.getLogger(__name__) + + +class AWSHTTPResponse(HTTPResponse): + # The *args, **kwargs is used because the args are slightly + # different in py2.6 than in py2.7/py3. + def __init__(self, *args, **kwargs): + self._status_tuple = kwargs.pop('status_tuple') + HTTPResponse.__init__(self, *args, **kwargs) + + def _read_status(self): + if self._status_tuple is not None: + status_tuple = self._status_tuple + self._status_tuple = None + return status_tuple + else: + return HTTPResponse._read_status(self) + + +class AWSConnection: + """Mixin for HTTPConnection that supports Expect 100-continue. + + This when mixed with a subclass of httplib.HTTPConnection (though + technically we subclass from urllib3, which subclasses + httplib.HTTPConnection) and we only override this class to support Expect + 100-continue, which we need for S3. As far as I can tell, this is + general purpose enough to not be specific to S3, but I'm being + tentative and keeping it in botocore because I've only tested + this against AWS services. + + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._original_response_cls = self.response_class + # This variable is set when we receive an early response from the + # server. If this value is set to True, any calls to send() are noops. + # This value is reset to false every time _send_request is called. + # This is to workaround changes in urllib3 2.0 which uses separate + # send() calls in request() instead of delegating to endheaders(), + # which is where the body is sent in CPython's HTTPConnection. + self._response_received = False + self._expect_header_set = False + self._send_called = False + + def close(self): + super().close() + # Reset all of our instance state we were tracking. + self._response_received = False + self._expect_header_set = False + self._send_called = False + self.response_class = self._original_response_cls + + def request(self, method, url, body=None, headers=None, *args, **kwargs): + if headers is None: + headers = {} + self._response_received = False + if headers.get('Expect', b'') == b'100-continue': + self._expect_header_set = True + else: + self._expect_header_set = False + self.response_class = self._original_response_cls + rval = super().request(method, url, body, headers, *args, **kwargs) + self._expect_header_set = False + return rval + + def _convert_to_bytes(self, mixed_buffer): + # Take a list of mixed str/bytes and convert it + # all into a single bytestring. + # Any str will be encoded as utf-8. + bytes_buffer = [] + for chunk in mixed_buffer: + if isinstance(chunk, str): + bytes_buffer.append(chunk.encode('utf-8')) + else: + bytes_buffer.append(chunk) + msg = b"\r\n".join(bytes_buffer) + return msg + + def _send_output(self, message_body=None, *args, **kwargs): + self._buffer.extend((b"", b"")) + msg = self._convert_to_bytes(self._buffer) + del self._buffer[:] + # If msg and message_body are sent in a single send() call, + # it will avoid performance problems caused by the interaction + # between delayed ack and the Nagle algorithm. + if isinstance(message_body, bytes): + msg += message_body + message_body = None + self.send(msg) + if self._expect_header_set: + # This is our custom behavior. If the Expect header was + # set, it will trigger this custom behavior. + logger.debug("Waiting for 100 Continue response.") + # Wait for 1 second for the server to send a response. + if urllib3.util.wait_for_read(self.sock, 1): + self._handle_expect_response(message_body) + return + else: + # From the RFC: + # Because of the presence of older implementations, the + # protocol allows ambiguous situations in which a client may + # send "Expect: 100-continue" without receiving either a 417 + # (Expectation Failed) status or a 100 (Continue) status. + # Therefore, when a client sends this header field to an origin + # server (possibly via a proxy) from which it has never seen a + # 100 (Continue) status, the client SHOULD NOT wait for an + # indefinite period before sending the request body. + logger.debug( + "No response seen from server, continuing to " + "send the response body." + ) + if message_body is not None: + # message_body was not a string (i.e. it is a file), and + # we must run the risk of Nagle. + self.send(message_body) + + def _consume_headers(self, fp): + # Most servers (including S3) will just return + # the CLRF after the 100 continue response. However, + # some servers (I've specifically seen this for squid when + # used as a straight HTTP proxy) will also inject a + # Connection: keep-alive header. To account for this + # we'll read until we read '\r\n', and ignore any headers + # that come immediately after the 100 continue response. + current = None + while current != b'\r\n': + current = fp.readline() + + def _handle_expect_response(self, message_body): + # This is called when we sent the request headers containing + # an Expect: 100-continue header and received a response. + # We now need to figure out what to do. + fp = self.sock.makefile('rb', 0) + try: + maybe_status_line = fp.readline() + parts = maybe_status_line.split(None, 2) + if self._is_100_continue_status(maybe_status_line): + self._consume_headers(fp) + logger.debug( + "100 Continue response seen, now sending request body." + ) + self._send_message_body(message_body) + elif len(parts) == 3 and parts[0].startswith(b'HTTP/'): + # From the RFC: + # Requirements for HTTP/1.1 origin servers: + # + # - Upon receiving a request which includes an Expect + # request-header field with the "100-continue" + # expectation, an origin server MUST either respond with + # 100 (Continue) status and continue to read from the + # input stream, or respond with a final status code. + # + # So if we don't get a 100 Continue response, then + # whatever the server has sent back is the final response + # and don't send the message_body. + logger.debug( + "Received a non 100 Continue response " + "from the server, NOT sending request body." + ) + status_tuple = ( + parts[0].decode('ascii'), + int(parts[1]), + parts[2].decode('ascii'), + ) + response_class = functools.partial( + AWSHTTPResponse, status_tuple=status_tuple + ) + self.response_class = response_class + self._response_received = True + finally: + fp.close() + + def _send_message_body(self, message_body): + if message_body is not None: + self.send(message_body) + + def send(self, str): + if self._response_received: + if not self._send_called: + # urllib3 2.0 chunks and calls send potentially + # thousands of times inside `request` unlike the + # standard library. Only log this once for sanity. + logger.debug( + "send() called, but response already received. " + "Not sending data." + ) + self._send_called = True + return + return super().send(str) + + def _is_100_continue_status(self, maybe_status_line): + parts = maybe_status_line.split(None, 2) + # Check for HTTP/ 100 Continue\r\n + return ( + len(parts) >= 3 + and parts[0].startswith(b'HTTP/') + and parts[1] == b'100' + ) + + +class AWSHTTPConnection(AWSConnection, HTTPConnection): + """An HTTPConnection that supports 100 Continue behavior.""" + + +class AWSHTTPSConnection(AWSConnection, VerifiedHTTPSConnection): + """An HTTPSConnection that supports 100 Continue behavior.""" + + +class AWSHTTPConnectionPool(HTTPConnectionPool): + ConnectionCls = AWSHTTPConnection + + +class AWSHTTPSConnectionPool(HTTPSConnectionPool): + ConnectionCls = AWSHTTPSConnection + + +def prepare_request_dict( + request_dict, endpoint_url, context=None, user_agent=None +): + """ + This method prepares a request dict to be created into an + AWSRequestObject. This prepares the request dict by adding the + url and the user agent to the request dict. + + :type request_dict: dict + :param request_dict: The request dict (created from the + ``serialize`` module). + + :type user_agent: string + :param user_agent: The user agent to use for this request. + + :type endpoint_url: string + :param endpoint_url: The full endpoint url, which contains at least + the scheme, the hostname, and optionally any path components. + """ + r = request_dict + if user_agent is not None: + headers = r['headers'] + headers['User-Agent'] = user_agent + host_prefix = r.get('host_prefix') + url = _urljoin(endpoint_url, r['url_path'], host_prefix) + if r['query_string']: + # NOTE: This is to avoid circular import with utils. This is being + # done to avoid moving classes to different modules as to not cause + # breaking chainges. + percent_encode_sequence = botocore.utils.percent_encode_sequence + encoded_query_string = percent_encode_sequence(r['query_string']) + if '?' not in url: + url += '?%s' % encoded_query_string + else: + url += '&%s' % encoded_query_string + r['url'] = url + r['context'] = context + if context is None: + r['context'] = {} + + +def create_request_object(request_dict): + """ + This method takes a request dict and creates an AWSRequest object + from it. + + :type request_dict: dict + :param request_dict: The request dict (created from the + ``prepare_request_dict`` method). + + :rtype: ``botocore.awsrequest.AWSRequest`` + :return: An AWSRequest object based on the request_dict. + + """ + r = request_dict + request_object = AWSRequest( + method=r['method'], + url=r['url'], + data=r['body'], + headers=r['headers'], + auth_path=r.get('auth_path'), + ) + request_object.context = r['context'] + return request_object + + +def _urljoin(endpoint_url, url_path, host_prefix): + p = urlsplit(endpoint_url) + # - + # scheme - p[0] + # netloc - p[1] + # path - p[2] + # query - p[3] + # fragment - p[4] + if not url_path or url_path == '/': + # If there's no path component, ensure the URL ends with + # a '/' for backwards compatibility. + if not p[2]: + new_path = '/' + else: + new_path = p[2] + elif p[2].endswith('/') and url_path.startswith('/'): + new_path = p[2][:-1] + url_path + else: + new_path = p[2] + url_path + + new_netloc = p[1] + if host_prefix is not None: + new_netloc = host_prefix + new_netloc + + reconstructed = urlunsplit((p[0], new_netloc, new_path, p[3], p[4])) + return reconstructed + + +class AWSRequestPreparer: + """ + This class performs preparation on AWSRequest objects similar to that of + the PreparedRequest class does in the requests library. However, the logic + has been boiled down to meet the specific use cases in botocore. Of note + there are the following differences: + This class does not heavily prepare the URL. Requests performed many + validations and corrections to ensure the URL is properly formatted. + Botocore either performs these validations elsewhere or otherwise + consistently provides well formatted URLs. + + This class does not heavily prepare the body. Body preperation is + simple and supports only the cases that we document: bytes and + file-like objects to determine the content-length. This will also + additionally prepare a body that is a dict to be url encoded params + string as some signers rely on this. Finally, this class does not + support multipart file uploads. + + This class does not prepare the method, auth or cookies. + """ + + def prepare(self, original): + method = original.method + url = self._prepare_url(original) + body = self._prepare_body(original) + headers = self._prepare_headers(original, body) + stream_output = original.stream_output + + return AWSPreparedRequest(method, url, headers, body, stream_output) + + def _prepare_url(self, original): + url = original.url + if original.params: + url_parts = urlparse(url) + delim = '&' if url_parts.query else '?' + if isinstance(original.params, Mapping): + params_to_encode = list(original.params.items()) + else: + params_to_encode = original.params + params = urlencode(params_to_encode, doseq=True) + url = delim.join((url, params)) + return url + + def _prepare_headers(self, original, prepared_body=None): + headers = HeadersDict(original.headers.items()) + + # If the transfer encoding or content length is already set, use that + if 'Transfer-Encoding' in headers or 'Content-Length' in headers: + return headers + + # Ensure we set the content length when it is expected + if original.method not in ('GET', 'HEAD', 'OPTIONS'): + length = self._determine_content_length(prepared_body) + if length is not None: + headers['Content-Length'] = str(length) + else: + # Failed to determine content length, using chunked + # NOTE: This shouldn't ever happen in practice + body_type = type(prepared_body) + logger.debug('Failed to determine length of %s', body_type) + headers['Transfer-Encoding'] = 'chunked' + + return headers + + def _to_utf8(self, item): + key, value = item + if isinstance(key, str): + key = key.encode('utf-8') + if isinstance(value, str): + value = value.encode('utf-8') + return key, value + + def _prepare_body(self, original): + """Prepares the given HTTP body data.""" + body = original.data + if body == b'': + body = None + + if isinstance(body, dict): + params = [self._to_utf8(item) for item in body.items()] + body = urlencode(params, doseq=True) + + return body + + def _determine_content_length(self, body): + return botocore.utils.determine_content_length(body) + + +class AWSRequest: + """Represents the elements of an HTTP request. + + This class was originally inspired by requests.models.Request, but has been + boiled down to meet the specific use cases in botocore. That being said this + class (even in requests) is effectively a named-tuple. + """ + + _REQUEST_PREPARER_CLS = AWSRequestPreparer + + def __init__( + self, + method=None, + url=None, + headers=None, + data=None, + params=None, + auth_path=None, + stream_output=False, + ): + self._request_preparer = self._REQUEST_PREPARER_CLS() + + # Default empty dicts for dict params. + params = {} if params is None else params + + self.method = method + self.url = url + self.headers = HTTPHeaders() + self.data = data + self.params = params + self.auth_path = auth_path + self.stream_output = stream_output + + if headers is not None: + for key, value in headers.items(): + self.headers[key] = value + + # This is a dictionary to hold information that is used when + # processing the request. What is inside of ``context`` is open-ended. + # For example, it may have a timestamp key that is used for holding + # what the timestamp is when signing the request. Note that none + # of the information that is inside of ``context`` is directly + # sent over the wire; the information is only used to assist in + # creating what is sent over the wire. + self.context = {} + + def prepare(self): + """Constructs a :class:`AWSPreparedRequest `.""" + return self._request_preparer.prepare(self) + + @property + def body(self): + body = self.prepare().body + if isinstance(body, str): + body = body.encode('utf-8') + return body + + +class AWSPreparedRequest: + """A data class representing a finalized request to be sent over the wire. + + Requests at this stage should be treated as final, and the properties of + the request should not be modified. + + :ivar method: The HTTP Method + :ivar url: The full url + :ivar headers: The HTTP headers to send. + :ivar body: The HTTP body. + :ivar stream_output: If the response for this request should be streamed. + """ + + def __init__(self, method, url, headers, body, stream_output): + self.method = method + self.url = url + self.headers = headers + self.body = body + self.stream_output = stream_output + + def __repr__(self): + fmt = ( + '' + ) + return fmt % (self.stream_output, self.method, self.url, self.headers) + + def reset_stream(self): + """Resets the streaming body to it's initial position. + + If the request contains a streaming body (a streamable file-like object) + seek to the object's initial position to ensure the entire contents of + the object is sent. This is a no-op for static bytes-like body types. + """ + # Trying to reset a stream when there is a no stream will + # just immediately return. It's not an error, it will produce + # the same result as if we had actually reset the stream (we'll send + # the entire body contents again if we need to). + # Same case if the body is a string/bytes/bytearray type. + + non_seekable_types = (bytes, str, bytearray) + if self.body is None or isinstance(self.body, non_seekable_types): + return + try: + logger.debug("Rewinding stream: %s", self.body) + self.body.seek(0) + except Exception as e: + logger.debug("Unable to rewind stream: %s", e) + raise UnseekableStreamError(stream_object=self.body) + + +class AWSResponse: + """A data class representing an HTTP response. + + This class was originally inspired by requests.models.Response, but has + been boiled down to meet the specific use cases in botocore. This has + effectively been reduced to a named tuple. + + :ivar url: The full url. + :ivar status_code: The status code of the HTTP response. + :ivar headers: The HTTP headers received. + :ivar body: The HTTP response body. + """ + + def __init__(self, url, status_code, headers, raw): + self.url = url + self.status_code = status_code + self.headers = HeadersDict(headers) + self.raw = raw + + self._content = None + + @property + def content(self): + """Content of the response as bytes.""" + + if self._content is None: + # Read the contents. + # NOTE: requests would attempt to call stream and fall back + # to a custom generator that would call read in a loop, but + # we don't rely on this behavior + self._content = b''.join(self.raw.stream()) or b'' + + return self._content + + @property + def text(self): + """Content of the response as a proper text type. + + Uses the encoding type provided in the reponse headers to decode the + response content into a proper text type. If the encoding is not + present in the headers, UTF-8 is used as a default. + """ + encoding = botocore.utils.get_encoding_from_headers(self.headers) + if encoding: + return self.content.decode(encoding) + else: + return self.content.decode('utf-8') + + +class _HeaderKey: + def __init__(self, key): + self._key = key + self._lower = key.lower() + + def __hash__(self): + return hash(self._lower) + + def __eq__(self, other): + return isinstance(other, _HeaderKey) and self._lower == other._lower + + def __str__(self): + return self._key + + def __repr__(self): + return repr(self._key) + + +class HeadersDict(MutableMapping): + """A case-insenseitive dictionary to represent HTTP headers.""" + + def __init__(self, *args, **kwargs): + self._dict = {} + self.update(*args, **kwargs) + + def __setitem__(self, key, value): + self._dict[_HeaderKey(key)] = value + + def __getitem__(self, key): + return self._dict[_HeaderKey(key)] + + def __delitem__(self, key): + del self._dict[_HeaderKey(key)] + + def __iter__(self): + return (str(key) for key in self._dict) + + def __len__(self): + return len(self._dict) + + def __repr__(self): + return repr(self._dict) + + def copy(self): + return HeadersDict(self.items()) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/cacert.pem b/dbtzin/lib/python3.8/site-packages/botocore/cacert.pem new file mode 100644 index 00000000..919478ed --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/cacert.pem @@ -0,0 +1,4361 @@ + +# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Label: "GlobalSign Root CA" +# Serial: 4835703278459707669005204 +# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a +# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c +# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Label: "GlobalSign Root CA - R2" +# Serial: 4835703278459682885658125 +# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 +# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe +# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Label: "Verisign Class 3 Public Primary Certification Authority - G3" +# Serial: 206684696279472310254277870180966723415 +# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 +# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 +# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Label: "Entrust.net Premium 2048 Secure Server CA" +# Serial: 946069240 +# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 +# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 +# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Label: "Baltimore CyberTrust Root" +# Serial: 33554617 +# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 +# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 +# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Label: "AddTrust External Root" +# Serial: 1 +# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f +# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 +# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Label: "Entrust Root Certification Authority" +# Serial: 1164660820 +# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 +# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 +# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. +# Label: "GeoTrust Global CA" +# Serial: 144470 +# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 +# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 +# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Label: "GeoTrust Universal CA" +# Serial: 1 +# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 +# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 +# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy +c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 +IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV +VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 +cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT +QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh +F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v +c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w +mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd +VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX +teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ +f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe +Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ +nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY +MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG +9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX +IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn +ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z +uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN +Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja +QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW +koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 +ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt +DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm +bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Label: "GeoTrust Universal CA 2" +# Serial: 1 +# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 +# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 +# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy +c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD +VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 +c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 +WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG +FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq +XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL +se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb +KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd +IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 +y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt +hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc +QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 +Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV +HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ +KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ +L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr +Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo +ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY +T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz +GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m +1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV +OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH +6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX +QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +# Issuer: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association +# Subject: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association +# Label: "Visa eCommerce Root" +# Serial: 25952180776285836048024890241505565794 +# MD5 Fingerprint: fc:11:b8:d8:08:93:30:00:6d:23:f9:7e:eb:52:1e:02 +# SHA1 Fingerprint: 70:17:9b:86:8c:00:a4:fa:60:91:52:22:3f:9f:3e:32:bd:e0:05:62 +# SHA256 Fingerprint: 69:fa:c9:bd:55:fb:0a:c7:8d:53:bb:ee:5c:f1:d5:97:98:9f:d0:aa:ab:20:a2:51:51:bd:f1:73:3e:e7:d1:22 +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr +MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl +cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw +CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h +dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l +cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h +2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E +lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV +ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq +299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t +vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL +dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF +AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR +zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 +LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd +7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw +++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +# Issuer: CN=AAA Certificate Services O=Comodo CA Limited +# Subject: CN=AAA Certificate Services O=Comodo CA Limited +# Label: "Comodo AAA Services root" +# Serial: 1 +# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 +# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 +# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Label: "QuoVadis Root CA" +# Serial: 985026699 +# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 +# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 +# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz +MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw +IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR +dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp +li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D +rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ +WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug +F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU +xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC +Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv +dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw +ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl +IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh +c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy +ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI +KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T +KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq +y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p +dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD +VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk +fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 +7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R +cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y +mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW +xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK +SnQ2+Q== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2" +# Serial: 1289 +# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b +# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 +# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3" +# Serial: 1478 +# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf +# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 +# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 +# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 +# Label: "Security Communication Root CA" +# Serial: 0 +# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a +# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 +# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- + +# Issuer: CN=Sonera Class2 CA O=Sonera +# Subject: CN=Sonera Class2 CA O=Sonera +# Label: "Sonera Class 2 Root CA" +# Serial: 29 +# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb +# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 +# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- + +# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Label: "XRamp Global CA Root" +# Serial: 107108908803651509692980124233745014957 +# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 +# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 +# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Label: "Go Daddy Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 +# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 +# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- + +# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Label: "Starfield Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 +# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a +# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +# Issuer: O=Government Root Certification Authority +# Subject: O=Government Root Certification Authority +# Label: "Taiwan GRCA" +# Serial: 42023070807708724159991140556527066870 +# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e +# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 +# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ +MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow +PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR +IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q +gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy +yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts +F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 +jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx +ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC +VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK +YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH +EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN +Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud +DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE +MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK +UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf +qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK +ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE +JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 +hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 +EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm +nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX +udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz +ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe +LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl +pYYsfPQS +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root CA" +# Serial: 17154717934120587862167794914071425081 +# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 +# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 +# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root CA" +# Serial: 10944719598952040374951832963794454346 +# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e +# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 +# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert High Assurance EV Root CA" +# Serial: 3553400076410547919724730734378100087 +# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a +# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 +# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- + +# Issuer: CN=Class 2 Primary CA O=Certplus +# Subject: CN=Class 2 Primary CA O=Certplus +# Label: "Certplus Class 2 Primary CA" +# Serial: 177770208045934040241468760488327595043 +# MD5 Fingerprint: 88:2c:8c:52:b8:a2:3c:f3:f7:bb:03:ea:ae:ac:42:0b +# SHA1 Fingerprint: 74:20:74:41:72:9c:dd:92:ec:79:31:d8:23:10:8d:c2:81:92:e2:bb +# SHA256 Fingerprint: 0f:99:3c:8a:ef:97:ba:af:56:87:14:0e:d5:9a:d1:82:1b:b4:af:ac:f0:aa:9a:58:b5:d5:7a:33:8a:3a:fb:cb +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw +PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz +cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 +MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz +IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ +ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR +VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL +kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd +EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas +H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 +HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud +DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 +QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu +Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ +AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 +yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR +FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA +ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB +kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Label: "DST Root CA X3" +# Serial: 91299735575339953335919266965803778155 +# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 +# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 +# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O +rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq +OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b +xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw +7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD +aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG +SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 +ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr +AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz +R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 +JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo +Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Label: "SwissSign Gold CA - G2" +# Serial: 13492815561806991280 +# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 +# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 +# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln +biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF +MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT +d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 +76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ +bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c +6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE +emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd +MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt +MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y +MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y +FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi +aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM +gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB +qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 +lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn +8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 +45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO +UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 +O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC +bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv +GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a +77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC +hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 +92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp +Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w +ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt +Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Label: "SwissSign Silver CA - G2" +# Serial: 5700383053117599563 +# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 +# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb +# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu +IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow +RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY +U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv +Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br +YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF +nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH +6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt +eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ +c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ +MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH +HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf +jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 +5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB +rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c +wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB +AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp +WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 +xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ +2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ +IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 +aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X +em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR +dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ +OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ +hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy +tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Label: "GeoTrust Primary Certification Authority" +# Serial: 32798226551256963324313806436981982369 +# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf +# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 +# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo +R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx +MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 +AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA +ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 +7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W +kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI +mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ +KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 +6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl +4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K +oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj +UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU +AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA" +# Serial: 69529181992039203566298953787712940909 +# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 +# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 +# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB +qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV +BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw +NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j +LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG +A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs +W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta +3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk +6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 +Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J +NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP +r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU +DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz +YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 +/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ +LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 +jVaMaA== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" +# Serial: 33037644167568058970164719475676101450 +# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c +# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 +# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +# Issuer: CN=SecureTrust CA O=SecureTrust Corporation +# Subject: CN=SecureTrust CA O=SecureTrust Corporation +# Label: "SecureTrust CA" +# Serial: 17199774589125277788362757014266862032 +# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 +# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 +# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +# Issuer: CN=Secure Global CA O=SecureTrust Corporation +# Subject: CN=Secure Global CA O=SecureTrust Corporation +# Label: "Secure Global CA" +# Serial: 9751836167731051554232119481456978597 +# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de +# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b +# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO Certification Authority O=COMODO CA Limited +# Label: "COMODO Certification Authority" +# Serial: 104350513648249232941998508985834464573 +# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 +# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b +# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- + +# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Label: "Network Solutions Certificate Authority" +# Serial: 116697915152937497490437556386812487904 +# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e +# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce +# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi +MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV +UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO +ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz +c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP +OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl +mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF +BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 +qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw +gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu +bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp +dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 +6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ +h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH +/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN +pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Label: "COMODO ECC Certification Authority" +# Serial: 41578283867086692638256921589707938090 +# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 +# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 +# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GA CA" +# Serial: 86718877871133159090080555911823548314 +# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 +# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 +# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB +ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly +aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w +NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G +A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX +SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR +VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 +w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF +mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg +4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 +4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw +EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx +SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 +ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 +vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi +Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ +/L7fCg0= +-----END CERTIFICATE----- + +# Issuer: CN=Certigna O=Dhimyotis +# Subject: CN=Certigna O=Dhimyotis +# Label: "Certigna" +# Serial: 18364802974209362175 +# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff +# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 +# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +# Issuer: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center +# Subject: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center +# Label: "Deutsche Telekom Root CA 2" +# Serial: 38 +# MD5 Fingerprint: 74:01:4a:91:b1:08:c4:58:ce:47:cd:f0:dd:11:53:08 +# SHA1 Fingerprint: 85:a4:08:c0:9c:19:3e:5d:51:58:7d:cd:d6:13:30:fd:8c:de:37:bf +# SHA256 Fingerprint: b6:19:1a:50:d0:c3:97:7f:7d:a9:9b:cd:aa:c8:6a:22:7d:ae:b9:67:9e:c7:0b:a3:b0:c9:d9:22:71:c1:70:d3 +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc +MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj +IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB +IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE +RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl +U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 +IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU +ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC +QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr +rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S +NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc +QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH +txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP +BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC +AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp +tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa +IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl +6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ +xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc +# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc +# Label: "Cybertrust Global Root" +# Serial: 4835703278459682877484360 +# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 +# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 +# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG +A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh +bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE +ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS +b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 +7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS +J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y +HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP +t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz +FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY +XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw +hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js +MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA +A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj +Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx +XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o +omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc +A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Label: "ePKI Root Certification Authority" +# Serial: 28956088682735189655030529057352760477 +# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 +# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 +# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +# Issuer: O=certSIGN OU=certSIGN ROOT CA +# Subject: O=certSIGN OU=certSIGN ROOT CA +# Label: "certSIGN ROOT CA" +# Serial: 35210227249154 +# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 +# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b +# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G3" +# Serial: 28809105769928564313984085209975885599 +# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 +# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd +# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G +spki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G2" +# Serial: 71758320672825410020661621085256472406 +# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f +# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 +# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp +IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi +BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw +MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig +YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v +dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ +BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 +papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K +DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 +KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox +XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G3" +# Serial: 127614157056681299805556476275995414779 +# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 +# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 +# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB +rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV +BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa +Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl +LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u +MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm +gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 +YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf +b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 +9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S +zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk +OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA +2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW +oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c +KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM +m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu +MdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G2" +# Serial: 80682863203381065782177908751794619243 +# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a +# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 +# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw +NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV +BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL +So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal +tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG +CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT +qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz +rD6ogRLQy7rQkgu2npaqBA+K +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Universal Root Certification Authority" +# Serial: 85209574734084581917763752644031726877 +# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 +# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 +# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 +IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y +IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh +bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF +9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH +H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H +LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN +/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT +rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw +WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs +exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 +sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ +seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz +4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ +BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR +lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 +7M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" +# Serial: 63143484348153506665311985501458640051 +# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 +# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a +# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp +U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg +SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln +biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm +GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve +fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ +aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj +aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC +4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga +FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" +# Serial: 80544274841616 +# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 +# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 +# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G2" +# Serial: 10000012 +# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a +# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 +# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX +DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 +qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp +uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU +Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE +pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp +5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M +UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN +GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy +5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv +6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK +eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 +B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ +BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov +L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG +SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS +CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen +5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 +IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK +gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL ++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL +vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm +bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk +N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC +Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z +ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Label: "SecureSign RootCA11" +# Serial: 1 +# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 +# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 +# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr +MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG +A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 +MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp +Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD +QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz +i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 +h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV +MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 +UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni +8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC +h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD +VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm +KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ +X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr +QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 +pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN +QSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Label: "Microsec e-Szigno Root CA 2009" +# Serial: 14014712776195784473 +# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 +# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e +# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Label: "GlobalSign Root CA - R3" +# Serial: 4835703278459759426209954 +# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 +# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad +# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 6047274297262753887 +# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 +# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa +# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +# Issuer: CN=Izenpe.com O=IZENPE S.A. +# Subject: CN=Izenpe.com O=IZENPE S.A. +# Label: "Izenpe.com" +# Serial: 917563065490389241595536686991402621 +# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 +# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 +# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 +MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 +ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD +VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq +scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO +xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H +LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX +uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD +yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ +JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q +rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN +BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L +hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB +QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ +HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu +Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg +QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB +BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA +A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb +laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 +awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo +JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw +LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT +VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk +LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb +UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ +QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ +naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls +QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Label: "Chambers of Commerce Root - 2008" +# Serial: 11806822484801597146 +# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 +# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c +# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ +-----END CERTIFICATE----- + +# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Label: "Global Chambersign Root - 2008" +# Serial: 14541511773111788494 +# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 +# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c +# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Label: "Go Daddy Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 +# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b +# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 +# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e +# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Services Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 +# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f +# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Commercial O=AffirmTrust +# Subject: CN=AffirmTrust Commercial O=AffirmTrust +# Label: "AffirmTrust Commercial" +# Serial: 8608355977964138876 +# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 +# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 +# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Networking O=AffirmTrust +# Subject: CN=AffirmTrust Networking O=AffirmTrust +# Label: "AffirmTrust Networking" +# Serial: 8957382827206547757 +# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f +# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f +# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium O=AffirmTrust +# Subject: CN=AffirmTrust Premium O=AffirmTrust +# Label: "AffirmTrust Premium" +# Serial: 7893706540734352110 +# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 +# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 +# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust +# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust +# Label: "AffirmTrust Premium ECC" +# Serial: 8401224907861490260 +# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d +# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb +# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA" +# Serial: 279744 +# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 +# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e +# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Label: "TWCA Root Certification Authority" +# Serial: 1 +# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 +# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 +# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Label: "Security Communication RootCA2" +# Serial: 0 +# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 +# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 +# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2011" +# Serial: 0 +# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 +# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d +# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix +RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p +YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw +NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK +EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl +cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz +dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ +fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns +bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD +75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP +FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV +HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp +5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu +b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA +A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p +6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 +dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys +Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI +l7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Label: "Actalis Authentication Root CA" +# Serial: 6271844772424770508 +# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 +# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac +# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +# Issuer: O=Trustis Limited OU=Trustis FPS Root CA +# Subject: O=Trustis Limited OU=Trustis FPS Root CA +# Label: "Trustis FPS Root CA" +# Serial: 36053640375399034304724988975563710553 +# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d +# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 +# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL +ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx +MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc +MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ +AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH +iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj +vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA +0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB +OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ +BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E +FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 +GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW +zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 +1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE +f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F +jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN +ZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 2 Root CA" +# Serial: 2 +# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 +# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 +# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 3 Root CA" +# Serial: 2 +# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec +# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 +# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 3" +# Serial: 1 +# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef +# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 +# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- + +# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Label: "EE Certification Centre Root CA" +# Serial: 112324828676200291871926431888494945866 +# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f +# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 +# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 +MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 +czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG +CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy +MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl +ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS +b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy +euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO +bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw +WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d +MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE +1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ +zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB +BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF +BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV +v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG +E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW +iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v +GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 2009" +# Serial: 623603 +# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f +# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 +# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 EV 2009" +# Serial: 623604 +# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 +# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 +# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +# Issuer: CN=CA Disig Root R2 O=Disig a.s. +# Subject: CN=CA Disig Root R2 O=Disig a.s. +# Label: "CA Disig Root R2" +# Serial: 10572350602393338211 +# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 +# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 +# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Label: "ACCVRAIZ1" +# Serial: 6828503384748696800 +# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 +# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 +# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA Global Root CA" +# Serial: 3262 +# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 +# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 +# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- + +# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Label: "TeliaSonera Root CA v1" +# Serial: 199041966741090107964904287217786801558 +# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c +# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 +# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 2" +# Serial: 1 +# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a +# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 +# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot 2011 O=Atos +# Subject: CN=Atos TrustedRoot 2011 O=Atos +# Label: "Atos TrustedRoot 2011" +# Serial: 6643877497813316402 +# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 +# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 +# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 1 G3" +# Serial: 687049649626669250736271037606554624078720034195 +# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab +# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 +# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2 G3" +# Serial: 390156079458959257446133169266079962026824725800 +# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 +# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 +# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3 G3" +# Serial: 268090761170461462463995952157327242137089239581 +# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 +# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d +# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G2" +# Serial: 15385348160840213938643033620894905419 +# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d +# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f +# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G3" +# Serial: 15459312981008553731928384953135426796 +# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb +# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 +# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G2" +# Serial: 4293743540046975378534879503202253541 +# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 +# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 +# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G3" +# Serial: 7089244469030293291760083333884364146 +# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca +# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e +# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Trusted Root G4" +# Serial: 7451500558977370777930084869016614236 +# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 +# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 +# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- + +# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Label: "COMODO RSA Certification Authority" +# Serial: 101909084537582093308941363524873193117 +# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 +# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 +# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Label: "USERTrust RSA Certification Authority" +# Serial: 2645093764781058787591871645665788717 +# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 +# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e +# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Label: "USERTrust ECC Certification Authority" +# Serial: 123013823720199481456569720443997572134 +# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 +# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 +# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 14367148294922964480859022125800977897474 +# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e +# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb +# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ +FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F +uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX +kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs +ewv4n4Q= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Label: "GlobalSign ECC Root CA - R5" +# Serial: 32785792099990507226680698011560947931244 +# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 +# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa +# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G3" +# Serial: 10003001 +# MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 +# SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc +# SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX +DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP +cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW +IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX +xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy +KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR +9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az +5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 +6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 +Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP +bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt +BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt +XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd +INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp +LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 +Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp +gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh +/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw +0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A +fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq +4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR +1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ +QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM +94B7IWcnMFk= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Label: "Staat der Nederlanden EV Root CA" +# Serial: 10000013 +# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba +# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb +# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y +MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg +TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS +b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS +M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC +UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d +Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p +rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l +pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb +j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC +KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS +/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X +cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH +1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP +px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 +MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u +2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS +v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC +wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy +CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e +vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 +Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa +Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL +eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 +FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc +7uzXLg== +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Label: "IdenTrust Commercial Root CA 1" +# Serial: 13298821034946342390520003877796839426 +# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 +# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 +# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Label: "IdenTrust Public Sector Root CA 1" +# Serial: 13298821034946342390521976156843933698 +# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba +# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd +# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G2" +# Serial: 1246989352 +# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 +# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 +# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - EC1" +# Serial: 51543124481930649114116133369 +# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc +# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 +# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority +# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority +# Label: "CFCA EV ROOT" +# Serial: 407555286 +# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 +# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 +# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +# Issuer: CN=T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 H5 O=T\xdcRKTRUST Bilgi \u0130leti\u015fim ve Bili\u015fim G\xfcvenli\u011fi Hizmetleri A.\u015e. +# Subject: CN=T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 H5 O=T\xdcRKTRUST Bilgi \u0130leti\u015fim ve Bili\u015fim G\xfcvenli\u011fi Hizmetleri A.\u015e. +# Label: "T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 H5" +# Serial: 156233699172481 +# MD5 Fingerprint: da:70:8e:f0:22:df:93:26:f6:5f:9f:d3:15:06:52:4e +# SHA1 Fingerprint: c4:18:f6:4d:46:d1:df:00:3d:27:30:13:72:43:a9:12:11:c6:75:fb +# SHA256 Fingerprint: 49:35:1b:90:34:44:c1:85:cc:dc:5c:69:3d:24:d8:55:5c:b2:08:d6:a8:14:13:07:69:9f:4a:f0:63:19:9d:78 +-----BEGIN CERTIFICATE----- +MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UE +BhMCVFIxDzANBgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxn +aSDEsGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkg +QS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1QgRWxla3Ryb25payBTZXJ0aWZpa2Eg +SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAwODA3MDFaFw0yMzA0 +MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0wSwYD +VQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 +dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApCUZ4WWe60ghUEoI5RHwWrom +/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537jVJp45wnEFPzpALFp/kR +Gml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1mep5Fimh3 +4khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z +5UNP9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0 +hO8EuPbJbKoCPrZV4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QID +AQABo0IwQDAdBgNVHQ4EFgQUVpkHHtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAJ5FdnsX +SDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPoBP5yCccLqh0l +VX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq +URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nf +peYVhDfwwvJllpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CF +Yv4HAqGEVka+lgqaE9chTLd8B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW ++qtB4Uu2NQvAmxU= +-----END CERTIFICATE----- + +# Issuer: CN=Certinomis - Root CA O=Certinomis OU=0002 433998903 +# Subject: CN=Certinomis - Root CA O=Certinomis OU=0002 433998903 +# Label: "Certinomis - Root CA" +# Serial: 1 +# MD5 Fingerprint: 14:0a:fd:8d:a8:28:b5:38:69:db:56:7e:61:22:03:3f +# SHA1 Fingerprint: 9d:70:bb:01:a5:a4:a0:18:11:2e:f7:1c:01:b9:32:c5:34:e7:88:a8 +# SHA256 Fingerprint: 2a:99:f5:bc:11:74:b7:3c:bb:1d:62:08:84:e0:1c:34:e5:1c:cb:39:78:da:12:5f:0e:33:26:88:83:bf:41:58 +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjET +MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAb +BgNVBAMTFENlcnRpbm9taXMgLSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMz +MTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMx +FzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRDZXJ0aW5vbWlzIC0g +Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQosP5L2 +fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJfl +LieY6pOod5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQV +WZUKxkd8aRi5pwP5ynapz8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDF +TKWrteoB4owuZH9kb/2jJZOLyKIOSY008B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb +5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09xRLWtwHkziOC/7aOgFLSc +CbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE6OXWk6Ri +wsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJ +wx3tFvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SG +m/lg0h9tkQPTYKbVPZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4 +F2iw4lNVYC2vPsKD2NkJK/DAZNuHi5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZng +WVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I6tNxIqSSaHh0 +2TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/ +0KGRHCwPT5iVWVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWw +F6YSjNRieOpWauwK0kDDPAUwPk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZS +g081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAXlCOotQqSD7J6wWAsOMwaplv/8gzj +qh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJy29SWwNyhlCVCNSN +h4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9Iff/ +ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8V +btaw5BngDwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwj +Y/M50n92Uaf0yKHxDHYiI0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ +8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nMcyrDflOR1m749fPH0FFNjkulW+YZFzvW +gQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVrhkIGuUE= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GB CA" +# Serial: 157768595616588414422159278966750757568 +# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d +# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed +# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Label: "SZAFIR ROOT CA2" +# Serial: 357043034767186914217277344587386743377558296292 +# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 +# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de +# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA 2" +# Serial: 44979900017204383099463764357512596969 +# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 +# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 +# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce +# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 +# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef +# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 +# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +# Issuer: CN=Certplus Root CA G1 O=Certplus +# Subject: CN=Certplus Root CA G1 O=Certplus +# Label: "Certplus Root CA G1" +# Serial: 1491911565779898356709731176965615564637713 +# MD5 Fingerprint: 7f:09:9c:f7:d9:b9:5c:69:69:56:d5:37:3e:14:0d:42 +# SHA1 Fingerprint: 22:fd:d0:b7:fd:a2:4e:0d:ac:49:2c:a0:ac:a6:7b:6a:1f:e3:f7:66 +# SHA256 Fingerprint: 15:2a:40:2b:fc:df:2c:d5:48:05:4d:22:75:b3:9c:7f:ca:3e:c0:97:80:78:b0:f0:ea:76:e5:61:a6:c7:43:3e +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUA +MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy +dHBsdXMgUm9vdCBDQSBHMTAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBa +MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy +dHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +ANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHNr49a +iZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt +6kuJPKNxQv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP +0FG7Yn2ksYyy/yARujVjBYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f +6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTvLRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDE +EW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2z4QTd28n6v+WZxcIbekN +1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc4nBvCGrc +h2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCT +mehd4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV +4EJQeIQEQWGw9CEjjy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPO +WftwenMGE9nTdDckQQoRb5fc5+R+ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1Ud +DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSowcCbkahDFXxd +Bie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHYlwuBsTANBgkq +hkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh +66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7 +/SMNkPX0XtPGYX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BS +S7CTKtQ+FjPlnsZlFT5kOwQ/2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j +2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F6ALEUz65noe8zDUa3qHpimOHZR4R +Kttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilXCNQ314cnrUlZp5Gr +RHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWetUNy +6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEV +V/xuZDDCVRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5 +g4VCXA9DO2pJNdWY9BW/+mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl +++O/QmueD6i9a5jc2NvLi6Td11n0bt3+qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= +-----END CERTIFICATE----- + +# Issuer: CN=Certplus Root CA G2 O=Certplus +# Subject: CN=Certplus Root CA G2 O=Certplus +# Label: "Certplus Root CA G2" +# Serial: 1492087096131536844209563509228951875861589 +# MD5 Fingerprint: a7:ee:c4:78:2d:1b:ee:2d:b9:29:ce:d6:a7:96:32:31 +# SHA1 Fingerprint: 4f:65:8e:1f:e9:06:d8:28:02:e9:54:47:41:c9:54:25:5d:69:cc:1a +# SHA256 Fingerprint: 6c:c0:50:41:e6:44:5e:74:69:6c:4c:fb:c9:f8:0f:54:3b:7e:ab:bb:44:b4:ce:6f:78:7c:6a:99:71:c4:2f:17 +-----BEGIN CERTIFICATE----- +MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4x +CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs +dXMgUm9vdCBDQSBHMjAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4x +CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs +dXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABM0PW1aC3/BFGtat +93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uNAm8x +Ik0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwj +FNiPwyCrKGBZMB8GA1UdIwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqG +SM49BAMDA2gAMGUCMHD+sAvZ94OX7PNVHdTcswYO/jOYnYs5kGuUIe22113WTNch +p+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjlvPl5adytRSv3tjFzzAal +U5ORGpOucGpnutee5WEaXw== +-----END CERTIFICATE----- + +# Issuer: CN=OpenTrust Root CA G1 O=OpenTrust +# Subject: CN=OpenTrust Root CA G1 O=OpenTrust +# Label: "OpenTrust Root CA G1" +# Serial: 1492036577811947013770400127034825178844775 +# MD5 Fingerprint: 76:00:cc:81:29:cd:55:5e:88:6a:7a:2e:f7:4d:39:da +# SHA1 Fingerprint: 79:91:e8:34:f7:e2:ee:dd:08:95:01:52:e9:55:2d:14:e9:58:d5:7e +# SHA256 Fingerprint: 56:c7:71:28:d9:8c:18:d9:1b:4c:fd:ff:bc:25:ee:91:03:d4:75:8e:a2:ab:ad:82:6a:90:f3:45:7d:46:0e:b4 +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUA +MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w +ZW5UcnVzdCBSb290IENBIEcxMB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAw +MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU +T3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7faYp6b +wiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX +/uMftk87ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR0 +77F9jAHiOH3BX2pfJLKOYheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGP +uY4zbGneWK2gDqdkVBFpRGZPTBKnjix9xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLx +p2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO9z0M+Yo0FMT7MzUj8czx +Kselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq3ywgsNw2 +TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+W +G+Oin6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPw +vFEVVJSmdz7QdFG9URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYY +EQRVzXR7z2FwefR7LFxckvzluFqrTJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUl0YhVyE1 +2jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/PxN3DlCPaTKbYw +DQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E +PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kf +gLMtMrpkZ2CvuVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbS +FXJfLkur1J1juONI5f6ELlgKn0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0 +V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLhX4SPgPL0DTatdrOjteFkdjpY3H1P +XlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80nR14SohWZ25g/4/I +i+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcmGS3t +TAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L91 +09S5zvE/bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/Ky +Pu1svf0OnWZzsD2097+o4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJ +AwSQiumPv+i2tCqjI40cHLI5kqiPAlxAOXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj +1oxx +-----END CERTIFICATE----- + +# Issuer: CN=OpenTrust Root CA G2 O=OpenTrust +# Subject: CN=OpenTrust Root CA G2 O=OpenTrust +# Label: "OpenTrust Root CA G2" +# Serial: 1492012448042702096986875987676935573415441 +# MD5 Fingerprint: 57:24:b6:59:24:6b:ae:c8:fe:1c:0c:20:f2:c0:4e:eb +# SHA1 Fingerprint: 79:5f:88:60:c5:ab:7c:3d:92:e6:cb:f4:8d:e1:45:cd:11:ef:60:0b +# SHA256 Fingerprint: 27:99:58:29:fe:6a:75:15:c1:bf:e8:48:f9:c4:76:1d:b1:6c:22:59:29:25:7b:f4:0d:08:94:f2:9e:a8:ba:f2 +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUA +MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w +ZW5UcnVzdCBSb290IENBIEcyMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAw +MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU +T3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+Ntmh +/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78e +CbY2albz4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/6 +1UWY0jUJ9gNDlP7ZvyCVeYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fE +FY8ElggGQgT4hNYdvJGmQr5J1WqIP7wtUdGejeBSzFfdNTVY27SPJIjki9/ca1TS +gSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz3GIZ38i1MH/1PCZ1Eb3X +G7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj3CzMpSZy +YhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaH +vGOz9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4 +t/bQWVyJ98LVtZR00dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/ +gh7PU3+06yzbXfZqfUAkBXKJOAGTy3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUajn6QiL3 +5okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59M4PLuG53hq8w +DQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz +Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0 +nXGEL8pZ0keImUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qT +RmTFAHneIWv2V6CG1wZy7HBGS4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpT +wm+bREx50B1ws9efAvSyB7DH5fitIw6mVskpEndI2S9G/Tvw/HRwkqWOOAgfZDC2 +t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ6e18CL13zSdkzJTa +TkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97krgCf2 +o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU +3jg9CcCoSmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eA +iN1nE28daCSLT7d0geX0YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14f +WKGVyasvc0rQLW6aWQ9VGHgtPFGml4vmu7JwqkwR3v98KzfUetF3NI/n+UL3PIEM +S1IK +-----END CERTIFICATE----- + +# Issuer: CN=OpenTrust Root CA G3 O=OpenTrust +# Subject: CN=OpenTrust Root CA G3 O=OpenTrust +# Label: "OpenTrust Root CA G3" +# Serial: 1492104908271485653071219941864171170455615 +# MD5 Fingerprint: 21:37:b4:17:16:92:7b:67:46:70:a9:96:d7:a8:13:24 +# SHA1 Fingerprint: 6e:26:64:f3:56:bf:34:55:bf:d1:93:3f:7c:01:de:d8:13:da:8a:a6 +# SHA256 Fingerprint: b7:c3:62:31:70:6e:81:07:8c:36:7c:b8:96:19:8f:1e:32:08:dd:92:69:49:dd:8f:57:09:a4:10:f7:5b:62:92 +-----BEGIN CERTIFICATE----- +MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAx +CzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5U +cnVzdCBSb290IENBIEczMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFow +QDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwUT3Bl +blRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARK7liuTcpm +3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5Bta1d +oYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4G +A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5 +DMlv4VBN0BBY3JWIbTAfBgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAK +BggqhkjOPQQDAwNpADBmAjEAj6jcnboMBBf6Fek9LykBl7+BFjNAk2z8+e2AcG+q +j9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta3U1fJAuwACEl74+nBCZx +4nxp5V2a+EEfOzmTk51V6s2N8fvB +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X1 O=Internet Security Research Group +# Subject: CN=ISRG Root X1 O=Internet Security Research Group +# Label: "ISRG Root X1" +# Serial: 172886928669790476064670243504169061120 +# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e +# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 +# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Label: "AC RAIZ FNMT-RCM" +# Serial: 485876308206448804701554682760554759 +# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d +# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 +# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 1 O=Amazon +# Subject: CN=Amazon Root CA 1 O=Amazon +# Label: "Amazon Root CA 1" +# Serial: 143266978916655856878034712317230054538369994 +# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 +# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 +# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 2 O=Amazon +# Subject: CN=Amazon Root CA 2 O=Amazon +# Label: "Amazon Root CA 2" +# Serial: 143266982885963551818349160658925006970653239 +# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 +# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a +# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 3 O=Amazon +# Subject: CN=Amazon Root CA 3 O=Amazon +# Label: "Amazon Root CA 3" +# Serial: 143266986699090766294700635381230934788665930 +# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 +# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e +# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 4 O=Amazon +# Subject: CN=Amazon Root CA 4 O=Amazon +# Label: "Amazon Root CA 4" +# Serial: 143266989758080763974105200630763877849284878 +# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd +# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be +# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +# Issuer: CN=LuxTrust Global Root 2 O=LuxTrust S.A. +# Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. +# Label: "LuxTrust Global Root 2" +# Serial: 59914338225734147123941058376788110305822489521 +# MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c +# SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f +# SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 +-----BEGIN CERTIFICATE----- +MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQEL +BQAwRjELMAkGA1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNV +BAMMFkx1eFRydXN0IEdsb2JhbCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUw +MzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEWMBQGA1UECgwNTHV4VHJ1c3QgUy5B +LjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wmKb3F +ibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTem +hfY7RBi2xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1 +EMShduxq3sVs35a0VkBCwGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsn +Xpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4 +zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkmFRseTJIpgp7VkoGSQXAZ +96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niFwpN6cj5m +j5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4g +DEa/a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+ +8kPREd8vZS9kzl8UubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2j +X5t/Lax5Gw5CMZdjpPuKadUiDTSQMC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmH +hFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGByuB +KwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5Lmx1eHRydXN0 +Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT ++Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQEL +BQADggIBAGoZFO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9 +BzZAcg4atmpZ1gDlaCDdLnINH2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTO +jFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW7MM3LGVYvlcAGvI1+ut7MV3CwRI9 +loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIuZY+kt9J/Z93I055c +qqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWAVWe+ +2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/ +JEAdemrRTxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKre +zrnK+T+Tb/mjuuqlPpmt/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQf +LSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+ +x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31IiyBMz2TWuJdGsE7RKlY6 +oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr +-----END CERTIFICATE----- + +# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" +# Serial: 1 +# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 +# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca +# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Label: "GDCA TrustAUTH R5 ROOT" +# Serial: 9009899650740120186 +# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 +# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 +# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-1" +# Serial: 15752444095811006489 +# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 +# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a +# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y +IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB +pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h +IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG +A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU +cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid +RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V +seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme +9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV +EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW +hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ +DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD +ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I +/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ +yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts +L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN +zl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-2" +# Serial: 2711694510199101698 +# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 +# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 +# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig +Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk +MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg +Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD +VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy +dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ +QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq +1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp +2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK +DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape +az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF +3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 +oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM +g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 +mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd +BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U +nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw +DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX +dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ +MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL +/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX +CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa +ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW +2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 +N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 +Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB +As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp +5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu +1uwJ +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor ECA-1" +# Serial: 9548242946988625984 +# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c +# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd +# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y +IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig +RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb +3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA +BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 +3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou +owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ +wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF +ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf +BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv +civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 +AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 +soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI +WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi +tJ/X5g== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Label: "SSL.com Root Certification Authority RSA" +# Serial: 8875640296558310041 +# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 +# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb +# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com Root Certification Authority ECC" +# Serial: 8495723813297216424 +# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e +# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a +# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority RSA R2" +# Serial: 6248227494352943350 +# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 +# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a +# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority ECC" +# Serial: 3182246526754555285 +# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 +# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d +# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- diff --git a/dbtzin/lib/python3.8/site-packages/botocore/client.py b/dbtzin/lib/python3.8/site-packages/botocore/client.py new file mode 100644 index 00000000..85b60450 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/client.py @@ -0,0 +1,1374 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import logging + +from botocore import waiter, xform_name +from botocore.args import ClientArgsCreator +from botocore.auth import AUTH_TYPE_MAPS +from botocore.awsrequest import prepare_request_dict +from botocore.compress import maybe_compress_request +from botocore.config import Config +from botocore.credentials import RefreshableCredentials +from botocore.discovery import ( + EndpointDiscoveryHandler, + EndpointDiscoveryManager, + block_endpoint_discovery_required_operations, +) +from botocore.docs.docstring import ClientMethodDocstring, PaginatorDocstring +from botocore.exceptions import ( + DataNotFoundError, + InvalidEndpointDiscoveryConfigurationError, + OperationNotPageableError, + UnknownServiceError, + UnknownSignatureVersionError, +) +from botocore.history import get_global_history_recorder +from botocore.hooks import first_non_none_response +from botocore.httpchecksum import ( + apply_request_checksum, + resolve_checksum_context, +) +from botocore.model import ServiceModel +from botocore.paginate import Paginator +from botocore.retries import adaptive, standard +from botocore.useragent import UserAgentString +from botocore.utils import ( + CachedProperty, + EventbridgeSignerSetter, + S3ControlArnParamHandlerv2, + S3ExpressIdentityResolver, + S3RegionRedirectorv2, + ensure_boolean, + get_service_module_name, +) + +# Keep these imported. There's pre-existing code that uses: +# "from botocore.client import UNSIGNED" +# "from botocore.client import ClientError" +# etc. +from botocore.exceptions import ClientError # noqa +from botocore.utils import S3ArnParamHandler # noqa +from botocore.utils import S3ControlArnParamHandler # noqa +from botocore.utils import S3ControlEndpointSetter # noqa +from botocore.utils import S3EndpointSetter # noqa +from botocore.utils import S3RegionRedirector # noqa +from botocore import UNSIGNED # noqa + + +_LEGACY_SIGNATURE_VERSIONS = frozenset( + ( + 'v2', + 'v3', + 'v3https', + 'v4', + 's3', + 's3v4', + ) +) + + +logger = logging.getLogger(__name__) +history_recorder = get_global_history_recorder() + + +class ClientCreator: + """Creates client objects for a service.""" + + def __init__( + self, + loader, + endpoint_resolver, + user_agent, + event_emitter, + retry_handler_factory, + retry_config_translator, + response_parser_factory=None, + exceptions_factory=None, + config_store=None, + user_agent_creator=None, + ): + self._loader = loader + self._endpoint_resolver = endpoint_resolver + self._user_agent = user_agent + self._event_emitter = event_emitter + self._retry_handler_factory = retry_handler_factory + self._retry_config_translator = retry_config_translator + self._response_parser_factory = response_parser_factory + self._exceptions_factory = exceptions_factory + # TODO: Migrate things away from scoped_config in favor of the + # config_store. The config store can pull things from both the scoped + # config and environment variables (and potentially more in the + # future). + self._config_store = config_store + self._user_agent_creator = user_agent_creator + + def create_client( + self, + service_name, + region_name, + is_secure=True, + endpoint_url=None, + verify=None, + credentials=None, + scoped_config=None, + api_version=None, + client_config=None, + auth_token=None, + ): + responses = self._event_emitter.emit( + 'choose-service-name', service_name=service_name + ) + service_name = first_non_none_response(responses, default=service_name) + service_model = self._load_service_model(service_name, api_version) + try: + endpoints_ruleset_data = self._load_service_endpoints_ruleset( + service_name, api_version + ) + partition_data = self._loader.load_data('partitions') + except UnknownServiceError: + endpoints_ruleset_data = None + partition_data = None + logger.info( + 'No endpoints ruleset found for service %s, falling back to ' + 'legacy endpoint routing.', + service_name, + ) + + cls = self._create_client_class(service_name, service_model) + region_name, client_config = self._normalize_fips_region( + region_name, client_config + ) + endpoint_bridge = ClientEndpointBridge( + self._endpoint_resolver, + scoped_config, + client_config, + service_signing_name=service_model.metadata.get('signingName'), + config_store=self._config_store, + service_signature_version=service_model.metadata.get( + 'signatureVersion' + ), + ) + client_args = self._get_client_args( + service_model, + region_name, + is_secure, + endpoint_url, + verify, + credentials, + scoped_config, + client_config, + endpoint_bridge, + auth_token, + endpoints_ruleset_data, + partition_data, + ) + service_client = cls(**client_args) + self._register_retries(service_client) + self._register_s3_events( + client=service_client, + endpoint_bridge=None, + endpoint_url=None, + client_config=client_config, + scoped_config=scoped_config, + ) + self._register_s3express_events(client=service_client) + self._register_s3_control_events(client=service_client) + self._register_endpoint_discovery( + service_client, endpoint_url, client_config + ) + return service_client + + def create_client_class(self, service_name, api_version=None): + service_model = self._load_service_model(service_name, api_version) + return self._create_client_class(service_name, service_model) + + def _create_client_class(self, service_name, service_model): + class_attributes = self._create_methods(service_model) + py_name_to_operation_name = self._create_name_mapping(service_model) + class_attributes['_PY_TO_OP_NAME'] = py_name_to_operation_name + bases = [BaseClient] + service_id = service_model.service_id.hyphenize() + self._event_emitter.emit( + 'creating-client-class.%s' % service_id, + class_attributes=class_attributes, + base_classes=bases, + ) + class_name = get_service_module_name(service_model) + cls = type(str(class_name), tuple(bases), class_attributes) + return cls + + def _normalize_fips_region(self, region_name, client_config): + if region_name is not None: + normalized_region_name = region_name.replace('fips-', '').replace( + '-fips', '' + ) + # If region has been transformed then set flag + if normalized_region_name != region_name: + config_use_fips_endpoint = Config(use_fips_endpoint=True) + if client_config: + # Keeping endpoint setting client specific + client_config = client_config.merge( + config_use_fips_endpoint + ) + else: + client_config = config_use_fips_endpoint + logger.warning( + 'transforming region from %s to %s and setting ' + 'use_fips_endpoint to true. client should not ' + 'be configured with a fips psuedo region.' + % (region_name, normalized_region_name) + ) + region_name = normalized_region_name + return region_name, client_config + + def _load_service_model(self, service_name, api_version=None): + json_model = self._loader.load_service_model( + service_name, 'service-2', api_version=api_version + ) + service_model = ServiceModel(json_model, service_name=service_name) + return service_model + + def _load_service_endpoints_ruleset(self, service_name, api_version=None): + return self._loader.load_service_model( + service_name, 'endpoint-rule-set-1', api_version=api_version + ) + + def _register_retries(self, client): + retry_mode = client.meta.config.retries['mode'] + if retry_mode == 'standard': + self._register_v2_standard_retries(client) + elif retry_mode == 'adaptive': + self._register_v2_standard_retries(client) + self._register_v2_adaptive_retries(client) + elif retry_mode == 'legacy': + self._register_legacy_retries(client) + + def _register_v2_standard_retries(self, client): + max_attempts = client.meta.config.retries.get('total_max_attempts') + kwargs = {'client': client} + if max_attempts is not None: + kwargs['max_attempts'] = max_attempts + standard.register_retry_handler(**kwargs) + + def _register_v2_adaptive_retries(self, client): + adaptive.register_retry_handler(client) + + def _register_legacy_retries(self, client): + endpoint_prefix = client.meta.service_model.endpoint_prefix + service_id = client.meta.service_model.service_id + service_event_name = service_id.hyphenize() + + # First, we load the entire retry config for all services, + # then pull out just the information we need. + original_config = self._loader.load_data('_retry') + if not original_config: + return + + retries = self._transform_legacy_retries(client.meta.config.retries) + retry_config = self._retry_config_translator.build_retry_config( + endpoint_prefix, + original_config.get('retry', {}), + original_config.get('definitions', {}), + retries, + ) + + logger.debug( + "Registering retry handlers for service: %s", + client.meta.service_model.service_name, + ) + handler = self._retry_handler_factory.create_retry_handler( + retry_config, endpoint_prefix + ) + unique_id = 'retry-config-%s' % service_event_name + client.meta.events.register( + f"needs-retry.{service_event_name}", handler, unique_id=unique_id + ) + + def _transform_legacy_retries(self, retries): + if retries is None: + return + copied_args = retries.copy() + if 'total_max_attempts' in retries: + copied_args = retries.copy() + copied_args['max_attempts'] = ( + copied_args.pop('total_max_attempts') - 1 + ) + return copied_args + + def _get_retry_mode(self, client, config_store): + client_retries = client.meta.config.retries + if ( + client_retries is not None + and client_retries.get('mode') is not None + ): + return client_retries['mode'] + return config_store.get_config_variable('retry_mode') or 'legacy' + + def _register_endpoint_discovery(self, client, endpoint_url, config): + if endpoint_url is not None: + # Don't register any handlers in the case of a custom endpoint url + return + # Only attach handlers if the service supports discovery + if client.meta.service_model.endpoint_discovery_operation is None: + return + events = client.meta.events + service_id = client.meta.service_model.service_id.hyphenize() + enabled = False + if config and config.endpoint_discovery_enabled is not None: + enabled = config.endpoint_discovery_enabled + elif self._config_store: + enabled = self._config_store.get_config_variable( + 'endpoint_discovery_enabled' + ) + + enabled = self._normalize_endpoint_discovery_config(enabled) + if enabled and self._requires_endpoint_discovery(client, enabled): + discover = enabled is True + manager = EndpointDiscoveryManager( + client, always_discover=discover + ) + handler = EndpointDiscoveryHandler(manager) + handler.register(events, service_id) + else: + events.register( + 'before-parameter-build', + block_endpoint_discovery_required_operations, + ) + + def _normalize_endpoint_discovery_config(self, enabled): + """Config must either be a boolean-string or string-literal 'auto'""" + if isinstance(enabled, str): + enabled = enabled.lower().strip() + if enabled == 'auto': + return enabled + elif enabled in ('true', 'false'): + return ensure_boolean(enabled) + elif isinstance(enabled, bool): + return enabled + + raise InvalidEndpointDiscoveryConfigurationError(config_value=enabled) + + def _requires_endpoint_discovery(self, client, enabled): + if enabled == "auto": + return client.meta.service_model.endpoint_discovery_required + return enabled + + def _register_eventbridge_events( + self, client, endpoint_bridge, endpoint_url + ): + if client.meta.service_model.service_name != 'events': + return + EventbridgeSignerSetter( + endpoint_resolver=self._endpoint_resolver, + region=client.meta.region_name, + endpoint_url=endpoint_url, + ).register(client.meta.events) + + def _register_s3express_events( + self, + client, + endpoint_bridge=None, + endpoint_url=None, + client_config=None, + scoped_config=None, + ): + if client.meta.service_model.service_name != 's3': + return + S3ExpressIdentityResolver(client, RefreshableCredentials).register() + + def _register_s3_events( + self, + client, + endpoint_bridge, + endpoint_url, + client_config, + scoped_config, + ): + if client.meta.service_model.service_name != 's3': + return + S3RegionRedirectorv2(None, client).register() + self._set_s3_presign_signature_version( + client.meta, client_config, scoped_config + ) + + def _register_s3_control_events( + self, + client, + endpoint_bridge=None, + endpoint_url=None, + client_config=None, + scoped_config=None, + ): + if client.meta.service_model.service_name != 's3control': + return + S3ControlArnParamHandlerv2().register(client.meta.events) + + def _set_s3_presign_signature_version( + self, client_meta, client_config, scoped_config + ): + # This will return the manually configured signature version, or None + # if none was manually set. If a customer manually sets the signature + # version, we always want to use what they set. + provided_signature_version = _get_configured_signature_version( + 's3', client_config, scoped_config + ) + if provided_signature_version is not None: + return + + # Check to see if the region is a region that we know about. If we + # don't know about a region, then we can safely assume it's a new + # region that is sigv4 only, since all new S3 regions only allow sigv4. + # The only exception is aws-global. This is a pseudo-region for the + # global endpoint, we should respect the signature versions it + # supports, which includes v2. + regions = self._endpoint_resolver.get_available_endpoints( + 's3', client_meta.partition + ) + if ( + client_meta.region_name != 'aws-global' + and client_meta.region_name not in regions + ): + return + + # If it is a region we know about, we want to default to sigv2, so here + # we check to see if it is available. + endpoint = self._endpoint_resolver.construct_endpoint( + 's3', client_meta.region_name + ) + signature_versions = endpoint['signatureVersions'] + if 's3' not in signature_versions: + return + + # We now know that we're in a known region that supports sigv2 and + # the customer hasn't set a signature version so we default the + # signature version to sigv2. + client_meta.events.register( + 'choose-signer.s3', self._default_s3_presign_to_sigv2 + ) + + def _default_s3_presign_to_sigv2(self, signature_version, **kwargs): + """ + Returns the 's3' (sigv2) signer if presigning an s3 request. This is + intended to be used to set the default signature version for the signer + to sigv2. Situations where an asymmetric signature is required are the + exception, for example MRAP needs v4a. + + :type signature_version: str + :param signature_version: The current client signature version. + + :type signing_name: str + :param signing_name: The signing name of the service. + + :return: 's3' if the request is an s3 presign request, None otherwise + """ + if signature_version.startswith('v4a'): + return + + if signature_version.startswith('v4-s3express'): + return f'{signature_version}' + + for suffix in ['-query', '-presign-post']: + if signature_version.endswith(suffix): + return f's3{suffix}' + + def _get_client_args( + self, + service_model, + region_name, + is_secure, + endpoint_url, + verify, + credentials, + scoped_config, + client_config, + endpoint_bridge, + auth_token, + endpoints_ruleset_data, + partition_data, + ): + args_creator = ClientArgsCreator( + self._event_emitter, + self._user_agent, + self._response_parser_factory, + self._loader, + self._exceptions_factory, + config_store=self._config_store, + user_agent_creator=self._user_agent_creator, + ) + return args_creator.get_client_args( + service_model, + region_name, + is_secure, + endpoint_url, + verify, + credentials, + scoped_config, + client_config, + endpoint_bridge, + auth_token, + endpoints_ruleset_data, + partition_data, + ) + + def _create_methods(self, service_model): + op_dict = {} + for operation_name in service_model.operation_names: + py_operation_name = xform_name(operation_name) + op_dict[py_operation_name] = self._create_api_method( + py_operation_name, operation_name, service_model + ) + return op_dict + + def _create_name_mapping(self, service_model): + # py_name -> OperationName, for every operation available + # for a service. + mapping = {} + for operation_name in service_model.operation_names: + py_operation_name = xform_name(operation_name) + mapping[py_operation_name] = operation_name + return mapping + + def _create_api_method( + self, py_operation_name, operation_name, service_model + ): + def _api_call(self, *args, **kwargs): + # We're accepting *args so that we can give a more helpful + # error message than TypeError: _api_call takes exactly + # 1 argument. + if args: + raise TypeError( + f"{py_operation_name}() only accepts keyword arguments." + ) + # The "self" in this scope is referring to the BaseClient. + return self._make_api_call(operation_name, kwargs) + + _api_call.__name__ = str(py_operation_name) + + # Add the docstring to the client method + operation_model = service_model.operation_model(operation_name) + docstring = ClientMethodDocstring( + operation_model=operation_model, + method_name=operation_name, + event_emitter=self._event_emitter, + method_description=operation_model.documentation, + example_prefix='response = client.%s' % py_operation_name, + include_signature=False, + ) + _api_call.__doc__ = docstring + return _api_call + + +class ClientEndpointBridge: + """Bridges endpoint data and client creation + + This class handles taking out the relevant arguments from the endpoint + resolver and determining which values to use, taking into account any + client configuration options and scope configuration options. + + This class also handles determining what, if any, region to use if no + explicit region setting is provided. For example, Amazon S3 client will + utilize "us-east-1" by default if no region can be resolved.""" + + DEFAULT_ENDPOINT = '{service}.{region}.amazonaws.com' + _DUALSTACK_CUSTOMIZED_SERVICES = ['s3', 's3-control'] + + def __init__( + self, + endpoint_resolver, + scoped_config=None, + client_config=None, + default_endpoint=None, + service_signing_name=None, + config_store=None, + service_signature_version=None, + ): + self.service_signing_name = service_signing_name + self.endpoint_resolver = endpoint_resolver + self.scoped_config = scoped_config + self.client_config = client_config + self.default_endpoint = default_endpoint or self.DEFAULT_ENDPOINT + self.config_store = config_store + self.service_signature_version = service_signature_version + + def resolve( + self, service_name, region_name=None, endpoint_url=None, is_secure=True + ): + region_name = self._check_default_region(service_name, region_name) + use_dualstack_endpoint = self._resolve_use_dualstack_endpoint( + service_name + ) + use_fips_endpoint = self._resolve_endpoint_variant_config_var( + 'use_fips_endpoint' + ) + resolved = self.endpoint_resolver.construct_endpoint( + service_name, + region_name, + use_dualstack_endpoint=use_dualstack_endpoint, + use_fips_endpoint=use_fips_endpoint, + ) + + # If we can't resolve the region, we'll attempt to get a global + # endpoint for non-regionalized services (iam, route53, etc) + if not resolved: + # TODO: fallback partition_name should be configurable in the + # future for users to define as needed. + resolved = self.endpoint_resolver.construct_endpoint( + service_name, + region_name, + partition_name='aws', + use_dualstack_endpoint=use_dualstack_endpoint, + use_fips_endpoint=use_fips_endpoint, + ) + + if resolved: + return self._create_endpoint( + resolved, service_name, region_name, endpoint_url, is_secure + ) + else: + return self._assume_endpoint( + service_name, region_name, endpoint_url, is_secure + ) + + def resolver_uses_builtin_data(self): + return self.endpoint_resolver.uses_builtin_data + + def _check_default_region(self, service_name, region_name): + if region_name is not None: + return region_name + # Use the client_config region if no explicit region was provided. + if self.client_config and self.client_config.region_name is not None: + return self.client_config.region_name + + def _create_endpoint( + self, resolved, service_name, region_name, endpoint_url, is_secure + ): + region_name, signing_region = self._pick_region_values( + resolved, region_name, endpoint_url + ) + if endpoint_url is None: + endpoint_url = self._make_url( + resolved.get('hostname'), + is_secure, + resolved.get('protocols', []), + ) + signature_version = self._resolve_signature_version( + service_name, resolved + ) + signing_name = self._resolve_signing_name(service_name, resolved) + return self._create_result( + service_name=service_name, + region_name=region_name, + signing_region=signing_region, + signing_name=signing_name, + endpoint_url=endpoint_url, + metadata=resolved, + signature_version=signature_version, + ) + + def _resolve_endpoint_variant_config_var(self, config_var): + client_config = self.client_config + config_val = False + + # Client configuration arg has precedence + if client_config and getattr(client_config, config_var) is not None: + return getattr(client_config, config_var) + elif self.config_store is not None: + # Check config store + config_val = self.config_store.get_config_variable(config_var) + return config_val + + def _resolve_use_dualstack_endpoint(self, service_name): + s3_dualstack_mode = self._is_s3_dualstack_mode(service_name) + if s3_dualstack_mode is not None: + return s3_dualstack_mode + return self._resolve_endpoint_variant_config_var( + 'use_dualstack_endpoint' + ) + + def _is_s3_dualstack_mode(self, service_name): + if service_name not in self._DUALSTACK_CUSTOMIZED_SERVICES: + return None + # TODO: This normalization logic is duplicated from the + # ClientArgsCreator class. Consolidate everything to + # ClientArgsCreator. _resolve_signature_version also has similarly + # duplicated logic. + client_config = self.client_config + if ( + client_config is not None + and client_config.s3 is not None + and 'use_dualstack_endpoint' in client_config.s3 + ): + # Client config trumps scoped config. + return client_config.s3['use_dualstack_endpoint'] + if self.scoped_config is not None: + enabled = self.scoped_config.get('s3', {}).get( + 'use_dualstack_endpoint' + ) + if enabled in [True, 'True', 'true']: + return True + + def _assume_endpoint( + self, service_name, region_name, endpoint_url, is_secure + ): + if endpoint_url is None: + # Expand the default hostname URI template. + hostname = self.default_endpoint.format( + service=service_name, region=region_name + ) + endpoint_url = self._make_url( + hostname, is_secure, ['http', 'https'] + ) + logger.debug( + f'Assuming an endpoint for {service_name}, {region_name}: {endpoint_url}' + ) + # We still want to allow the user to provide an explicit version. + signature_version = self._resolve_signature_version( + service_name, {'signatureVersions': ['v4']} + ) + signing_name = self._resolve_signing_name(service_name, resolved={}) + return self._create_result( + service_name=service_name, + region_name=region_name, + signing_region=region_name, + signing_name=signing_name, + signature_version=signature_version, + endpoint_url=endpoint_url, + metadata={}, + ) + + def _create_result( + self, + service_name, + region_name, + signing_region, + signing_name, + endpoint_url, + signature_version, + metadata, + ): + return { + 'service_name': service_name, + 'region_name': region_name, + 'signing_region': signing_region, + 'signing_name': signing_name, + 'endpoint_url': endpoint_url, + 'signature_version': signature_version, + 'metadata': metadata, + } + + def _make_url(self, hostname, is_secure, supported_protocols): + if is_secure and 'https' in supported_protocols: + scheme = 'https' + else: + scheme = 'http' + return f'{scheme}://{hostname}' + + def _resolve_signing_name(self, service_name, resolved): + # CredentialScope overrides everything else. + if ( + 'credentialScope' in resolved + and 'service' in resolved['credentialScope'] + ): + return resolved['credentialScope']['service'] + # Use the signingName from the model if present. + if self.service_signing_name: + return self.service_signing_name + # Just assume is the same as the service name. + return service_name + + def _pick_region_values(self, resolved, region_name, endpoint_url): + signing_region = region_name + if endpoint_url is None: + # Do not use the region name or signing name from the resolved + # endpoint if the user explicitly provides an endpoint_url. This + # would happen if we resolve to an endpoint where the service has + # a "defaults" section that overrides all endpoint with a single + # hostname and credentialScope. This has been the case historically + # for how STS has worked. The only way to resolve an STS endpoint + # was to provide a region_name and an endpoint_url. In that case, + # we would still resolve an endpoint, but we would not use the + # resolved endpointName or signingRegion because we want to allow + # custom endpoints. + region_name = resolved['endpointName'] + signing_region = region_name + if ( + 'credentialScope' in resolved + and 'region' in resolved['credentialScope'] + ): + signing_region = resolved['credentialScope']['region'] + return region_name, signing_region + + def _resolve_signature_version(self, service_name, resolved): + configured_version = _get_configured_signature_version( + service_name, self.client_config, self.scoped_config + ) + if configured_version is not None: + return configured_version + + potential_versions = resolved.get('signatureVersions', []) + if ( + self.service_signature_version is not None + and self.service_signature_version + not in _LEGACY_SIGNATURE_VERSIONS + ): + # Prefer the service model as most specific + # source of truth for new signature versions. + potential_versions = [self.service_signature_version] + + # Pick a signature version from the endpoint metadata if present. + if 'signatureVersions' in resolved: + if service_name == 's3': + return 's3v4' + if 'v4' in potential_versions: + return 'v4' + # Now just iterate over the signature versions in order until we + # find the first one that is known to Botocore. + for known in potential_versions: + if known in AUTH_TYPE_MAPS: + return known + raise UnknownSignatureVersionError( + signature_version=potential_versions + ) + + +class BaseClient: + # This is actually reassigned with the py->op_name mapping + # when the client creator creates the subclass. This value is used + # because calls such as client.get_paginator('list_objects') use the + # snake_case name, but we need to know the ListObjects form. + # xform_name() does the ListObjects->list_objects conversion, but + # we need the reverse mapping here. + _PY_TO_OP_NAME = {} + + def __init__( + self, + serializer, + endpoint, + response_parser, + event_emitter, + request_signer, + service_model, + loader, + client_config, + partition, + exceptions_factory, + endpoint_ruleset_resolver=None, + user_agent_creator=None, + ): + self._serializer = serializer + self._endpoint = endpoint + self._ruleset_resolver = endpoint_ruleset_resolver + self._response_parser = response_parser + self._request_signer = request_signer + self._cache = {} + self._loader = loader + self._client_config = client_config + self.meta = ClientMeta( + event_emitter, + self._client_config, + endpoint.host, + service_model, + self._PY_TO_OP_NAME, + partition, + ) + self._exceptions_factory = exceptions_factory + self._exceptions = None + self._user_agent_creator = user_agent_creator + if self._user_agent_creator is None: + self._user_agent_creator = ( + UserAgentString.from_environment().with_client_config( + self._client_config + ) + ) + self._register_handlers() + + def __getattr__(self, item): + service_id = self._service_model.service_id.hyphenize() + event_name = f'getattr.{service_id}.{item}' + + handler, event_response = self.meta.events.emit_until_response( + event_name, client=self + ) + + if event_response is not None: + return event_response + + raise AttributeError( + f"'{self.__class__.__name__}' object has no attribute '{item}'" + ) + + def close(self): + """Closes underlying endpoint connections.""" + self._endpoint.close() + + def _register_handlers(self): + # Register the handler required to sign requests. + service_id = self.meta.service_model.service_id.hyphenize() + self.meta.events.register( + f"request-created.{service_id}", self._request_signer.handler + ) + + @property + def _service_model(self): + return self.meta.service_model + + def _make_api_call(self, operation_name, api_params): + operation_model = self._service_model.operation_model(operation_name) + service_name = self._service_model.service_name + history_recorder.record( + 'API_CALL', + { + 'service': service_name, + 'operation': operation_name, + 'params': api_params, + }, + ) + if operation_model.deprecated: + logger.debug( + 'Warning: %s.%s() is deprecated', service_name, operation_name + ) + request_context = { + 'client_region': self.meta.region_name, + 'client_config': self.meta.config, + 'has_streaming_input': operation_model.has_streaming_input, + 'auth_type': operation_model.auth_type, + } + api_params = self._emit_api_params( + api_params=api_params, + operation_model=operation_model, + context=request_context, + ) + ( + endpoint_url, + additional_headers, + properties, + ) = self._resolve_endpoint_ruleset( + operation_model, api_params, request_context + ) + if properties: + # Pass arbitrary endpoint info with the Request + # for use during construction. + request_context['endpoint_properties'] = properties + request_dict = self._convert_to_request_dict( + api_params=api_params, + operation_model=operation_model, + endpoint_url=endpoint_url, + context=request_context, + headers=additional_headers, + ) + resolve_checksum_context(request_dict, operation_model, api_params) + + service_id = self._service_model.service_id.hyphenize() + handler, event_response = self.meta.events.emit_until_response( + 'before-call.{service_id}.{operation_name}'.format( + service_id=service_id, operation_name=operation_name + ), + model=operation_model, + params=request_dict, + request_signer=self._request_signer, + context=request_context, + ) + + if event_response is not None: + http, parsed_response = event_response + else: + maybe_compress_request( + self.meta.config, request_dict, operation_model + ) + apply_request_checksum(request_dict) + http, parsed_response = self._make_request( + operation_model, request_dict, request_context + ) + + self.meta.events.emit( + 'after-call.{service_id}.{operation_name}'.format( + service_id=service_id, operation_name=operation_name + ), + http_response=http, + parsed=parsed_response, + model=operation_model, + context=request_context, + ) + + if http.status_code >= 300: + error_info = parsed_response.get("Error", {}) + error_code = error_info.get("QueryErrorCode") or error_info.get( + "Code" + ) + error_class = self.exceptions.from_code(error_code) + raise error_class(parsed_response, operation_name) + else: + return parsed_response + + def _make_request(self, operation_model, request_dict, request_context): + try: + return self._endpoint.make_request(operation_model, request_dict) + except Exception as e: + self.meta.events.emit( + 'after-call-error.{service_id}.{operation_name}'.format( + service_id=self._service_model.service_id.hyphenize(), + operation_name=operation_model.name, + ), + exception=e, + context=request_context, + ) + raise + + def _convert_to_request_dict( + self, + api_params, + operation_model, + endpoint_url, + context=None, + headers=None, + set_user_agent_header=True, + ): + request_dict = self._serializer.serialize_to_request( + api_params, operation_model + ) + if not self._client_config.inject_host_prefix: + request_dict.pop('host_prefix', None) + if headers is not None: + request_dict['headers'].update(headers) + if set_user_agent_header: + user_agent = self._user_agent_creator.to_string() + else: + user_agent = None + prepare_request_dict( + request_dict, + endpoint_url=endpoint_url, + user_agent=user_agent, + context=context, + ) + return request_dict + + def _emit_api_params(self, api_params, operation_model, context): + # Given the API params provided by the user and the operation_model + # we can serialize the request to a request_dict. + operation_name = operation_model.name + + # Emit an event that allows users to modify the parameters at the + # beginning of the method. It allows handlers to modify existing + # parameters or return a new set of parameters to use. + service_id = self._service_model.service_id.hyphenize() + responses = self.meta.events.emit( + f'provide-client-params.{service_id}.{operation_name}', + params=api_params, + model=operation_model, + context=context, + ) + api_params = first_non_none_response(responses, default=api_params) + + self.meta.events.emit( + f'before-parameter-build.{service_id}.{operation_name}', + params=api_params, + model=operation_model, + context=context, + ) + return api_params + + def _resolve_endpoint_ruleset( + self, + operation_model, + params, + request_context, + ignore_signing_region=False, + ): + """Returns endpoint URL and list of additional headers returned from + EndpointRulesetResolver for the given operation and params. If the + ruleset resolver is not available, for example because the service has + no endpoints ruleset file, the legacy endpoint resolver's value is + returned. + + Use ignore_signing_region for generating presigned URLs or any other + situation where the signing region information from the ruleset + resolver should be ignored. + + Returns tuple of URL and headers dictionary. Additionally, the + request_context dict is modified in place with any signing information + returned from the ruleset resolver. + """ + if self._ruleset_resolver is None: + endpoint_url = self.meta.endpoint_url + additional_headers = {} + endpoint_properties = {} + else: + endpoint_info = self._ruleset_resolver.construct_endpoint( + operation_model=operation_model, + call_args=params, + request_context=request_context, + ) + endpoint_url = endpoint_info.url + additional_headers = endpoint_info.headers + endpoint_properties = endpoint_info.properties + # If authSchemes is present, overwrite default auth type and + # signing context derived from service model. + auth_schemes = endpoint_info.properties.get('authSchemes') + if auth_schemes is not None: + auth_info = self._ruleset_resolver.auth_schemes_to_signing_ctx( + auth_schemes + ) + auth_type, signing_context = auth_info + request_context['auth_type'] = auth_type + if 'region' in signing_context and ignore_signing_region: + del signing_context['region'] + if 'signing' in request_context: + request_context['signing'].update(signing_context) + else: + request_context['signing'] = signing_context + + return endpoint_url, additional_headers, endpoint_properties + + def get_paginator(self, operation_name): + """Create a paginator for an operation. + + :type operation_name: string + :param operation_name: The operation name. This is the same name + as the method name on the client. For example, if the + method name is ``create_foo``, and you'd normally invoke the + operation as ``client.create_foo(**kwargs)``, if the + ``create_foo`` operation can be paginated, you can use the + call ``client.get_paginator("create_foo")``. + + :raise OperationNotPageableError: Raised if the operation is not + pageable. You can use the ``client.can_paginate`` method to + check if an operation is pageable. + + :rtype: ``botocore.paginate.Paginator`` + :return: A paginator object. + + """ + if not self.can_paginate(operation_name): + raise OperationNotPageableError(operation_name=operation_name) + else: + actual_operation_name = self._PY_TO_OP_NAME[operation_name] + + # Create a new paginate method that will serve as a proxy to + # the underlying Paginator.paginate method. This is needed to + # attach a docstring to the method. + def paginate(self, **kwargs): + return Paginator.paginate(self, **kwargs) + + paginator_config = self._cache['page_config'][ + actual_operation_name + ] + # Add the docstring for the paginate method. + paginate.__doc__ = PaginatorDocstring( + paginator_name=actual_operation_name, + event_emitter=self.meta.events, + service_model=self.meta.service_model, + paginator_config=paginator_config, + include_signature=False, + ) + + # Rename the paginator class based on the type of paginator. + service_module_name = get_service_module_name( + self.meta.service_model + ) + paginator_class_name = ( + f"{service_module_name}.Paginator.{actual_operation_name}" + ) + + # Create the new paginator class + documented_paginator_cls = type( + paginator_class_name, (Paginator,), {'paginate': paginate} + ) + + operation_model = self._service_model.operation_model( + actual_operation_name + ) + paginator = documented_paginator_cls( + getattr(self, operation_name), + paginator_config, + operation_model, + ) + return paginator + + def can_paginate(self, operation_name): + """Check if an operation can be paginated. + + :type operation_name: string + :param operation_name: The operation name. This is the same name + as the method name on the client. For example, if the + method name is ``create_foo``, and you'd normally invoke the + operation as ``client.create_foo(**kwargs)``, if the + ``create_foo`` operation can be paginated, you can use the + call ``client.get_paginator("create_foo")``. + + :return: ``True`` if the operation can be paginated, + ``False`` otherwise. + + """ + if 'page_config' not in self._cache: + try: + page_config = self._loader.load_service_model( + self._service_model.service_name, + 'paginators-1', + self._service_model.api_version, + )['pagination'] + self._cache['page_config'] = page_config + except DataNotFoundError: + self._cache['page_config'] = {} + actual_operation_name = self._PY_TO_OP_NAME[operation_name] + return actual_operation_name in self._cache['page_config'] + + def _get_waiter_config(self): + if 'waiter_config' not in self._cache: + try: + waiter_config = self._loader.load_service_model( + self._service_model.service_name, + 'waiters-2', + self._service_model.api_version, + ) + self._cache['waiter_config'] = waiter_config + except DataNotFoundError: + self._cache['waiter_config'] = {} + return self._cache['waiter_config'] + + def get_waiter(self, waiter_name): + """Returns an object that can wait for some condition. + + :type waiter_name: str + :param waiter_name: The name of the waiter to get. See the waiters + section of the service docs for a list of available waiters. + + :returns: The specified waiter object. + :rtype: ``botocore.waiter.Waiter`` + """ + config = self._get_waiter_config() + if not config: + raise ValueError("Waiter does not exist: %s" % waiter_name) + model = waiter.WaiterModel(config) + mapping = {} + for name in model.waiter_names: + mapping[xform_name(name)] = name + if waiter_name not in mapping: + raise ValueError("Waiter does not exist: %s" % waiter_name) + + return waiter.create_waiter_with_client( + mapping[waiter_name], model, self + ) + + @CachedProperty + def waiter_names(self): + """Returns a list of all available waiters.""" + config = self._get_waiter_config() + if not config: + return [] + model = waiter.WaiterModel(config) + # Waiter configs is a dict, we just want the waiter names + # which are the keys in the dict. + return [xform_name(name) for name in model.waiter_names] + + @property + def exceptions(self): + if self._exceptions is None: + self._exceptions = self._load_exceptions() + return self._exceptions + + def _load_exceptions(self): + return self._exceptions_factory.create_client_exceptions( + self._service_model + ) + + def _get_credentials(self): + """ + This private interface is subject to abrupt breaking changes, including + removal, in any botocore release. + """ + return self._request_signer._credentials + + +class ClientMeta: + """Holds additional client methods. + + This class holds additional information for clients. It exists for + two reasons: + + * To give advanced functionality to clients + * To namespace additional client attributes from the operation + names which are mapped to methods at runtime. This avoids + ever running into collisions with operation names. + + """ + + def __init__( + self, + events, + client_config, + endpoint_url, + service_model, + method_to_api_mapping, + partition, + ): + self.events = events + self._client_config = client_config + self._endpoint_url = endpoint_url + self._service_model = service_model + self._method_to_api_mapping = method_to_api_mapping + self._partition = partition + + @property + def service_model(self): + return self._service_model + + @property + def region_name(self): + return self._client_config.region_name + + @property + def endpoint_url(self): + return self._endpoint_url + + @property + def config(self): + return self._client_config + + @property + def method_to_api_mapping(self): + return self._method_to_api_mapping + + @property + def partition(self): + return self._partition + + +def _get_configured_signature_version( + service_name, client_config, scoped_config +): + """ + Gets the manually configured signature version. + + :returns: the customer configured signature version, or None if no + signature version was configured. + """ + # Client config overrides everything. + if client_config and client_config.signature_version is not None: + return client_config.signature_version + + # Scoped config overrides picking from the endpoint metadata. + if scoped_config is not None: + # A given service may have service specific configuration in the + # config file, so we need to check there as well. + service_config = scoped_config.get(service_name) + if service_config is not None and isinstance(service_config, dict): + version = service_config.get('signature_version') + if version: + logger.debug( + "Switching signature version for service %s " + "to version %s based on config file override.", + service_name, + version, + ) + return version + return None diff --git a/dbtzin/lib/python3.8/site-packages/botocore/compat.py b/dbtzin/lib/python3.8/site-packages/botocore/compat.py new file mode 100644 index 00000000..6f79d43e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/compat.py @@ -0,0 +1,347 @@ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import copy +import datetime +import sys +import inspect +import warnings +import hashlib +from http.client import HTTPMessage +import logging +import shlex +import re +import os +from collections import OrderedDict +from collections.abc import MutableMapping +from math import floor + +from botocore.vendored import six +from botocore.exceptions import MD5UnavailableError +from dateutil.tz import tzlocal +from urllib3 import exceptions + +logger = logging.getLogger(__name__) + + +class HTTPHeaders(HTTPMessage): + pass + +from urllib.parse import ( + quote, + urlencode, + unquote, + unquote_plus, + urlparse, + urlsplit, + urlunsplit, + urljoin, + parse_qsl, + parse_qs, +) +from http.client import HTTPResponse +from io import IOBase as _IOBase +from base64 import encodebytes +from email.utils import formatdate +from itertools import zip_longest +file_type = _IOBase +zip = zip + +# In python3, unquote takes a str() object, url decodes it, +# then takes the bytestring and decodes it to utf-8. +unquote_str = unquote_plus + +def set_socket_timeout(http_response, timeout): + """Set the timeout of the socket from an HTTPResponse. + + :param http_response: An instance of ``httplib.HTTPResponse`` + + """ + http_response._fp.fp.raw._sock.settimeout(timeout) + +def accepts_kwargs(func): + # In python3.4.1, there's backwards incompatible + # changes when using getargspec with functools.partials. + return inspect.getfullargspec(func)[2] + +def ensure_unicode(s, encoding=None, errors=None): + # NOOP in Python 3, because every string is already unicode + return s + +def ensure_bytes(s, encoding='utf-8', errors='strict'): + if isinstance(s, str): + return s.encode(encoding, errors) + if isinstance(s, bytes): + return s + raise ValueError(f"Expected str or bytes, received {type(s)}.") + + +try: + import xml.etree.cElementTree as ETree +except ImportError: + # cElementTree does not exist from Python3.9+ + import xml.etree.ElementTree as ETree +XMLParseError = ETree.ParseError +import json + + +def filter_ssl_warnings(): + # Ignore warnings related to SNI as it is not being used in validations. + warnings.filterwarnings( + 'ignore', + message="A true SSLContext object is not available.*", + category=exceptions.InsecurePlatformWarning, + module=r".*urllib3\.util\.ssl_", + ) + + +@classmethod +def from_dict(cls, d): + new_instance = cls() + for key, value in d.items(): + new_instance[key] = value + return new_instance + + +@classmethod +def from_pairs(cls, pairs): + new_instance = cls() + for key, value in pairs: + new_instance[key] = value + return new_instance + + +HTTPHeaders.from_dict = from_dict +HTTPHeaders.from_pairs = from_pairs + + +def copy_kwargs(kwargs): + """ + This used to be a compat shim for 2.6 but is now just an alias. + """ + copy_kwargs = copy.copy(kwargs) + return copy_kwargs + + +def total_seconds(delta): + """ + Returns the total seconds in a ``datetime.timedelta``. + + This used to be a compat shim for 2.6 but is now just an alias. + + :param delta: The timedelta object + :type delta: ``datetime.timedelta`` + """ + return delta.total_seconds() + + +# Checks to see if md5 is available on this system. A given system might not +# have access to it for various reasons, such as FIPS mode being enabled. +try: + hashlib.md5() + MD5_AVAILABLE = True +except ValueError: + MD5_AVAILABLE = False + + +def get_md5(*args, **kwargs): + """ + Attempts to get an md5 hashing object. + + :param args: Args to pass to the MD5 constructor + :param kwargs: Key word arguments to pass to the MD5 constructor + :return: An MD5 hashing object if available. If it is unavailable, None + is returned if raise_error_if_unavailable is set to False. + """ + if MD5_AVAILABLE: + return hashlib.md5(*args, **kwargs) + else: + raise MD5UnavailableError() + + +def compat_shell_split(s, platform=None): + if platform is None: + platform = sys.platform + + if platform == "win32": + return _windows_shell_split(s) + else: + return shlex.split(s) + + +def _windows_shell_split(s): + """Splits up a windows command as the built-in command parser would. + + Windows has potentially bizarre rules depending on where you look. When + spawning a process via the Windows C runtime (which is what python does + when you call popen) the rules are as follows: + + https://docs.microsoft.com/en-us/cpp/cpp/parsing-cpp-command-line-arguments + + To summarize: + + * Only space and tab are valid delimiters + * Double quotes are the only valid quotes + * Backslash is interpreted literally unless it is part of a chain that + leads up to a double quote. Then the backslashes escape the backslashes, + and if there is an odd number the final backslash escapes the quote. + + :param s: The command string to split up into parts. + :return: A list of command components. + """ + if not s: + return [] + + components = [] + buff = [] + is_quoted = False + num_backslashes = 0 + for character in s: + if character == '\\': + # We can't simply append backslashes because we don't know if + # they are being used as escape characters or not. Instead we + # keep track of how many we've encountered and handle them when + # we encounter a different character. + num_backslashes += 1 + elif character == '"': + if num_backslashes > 0: + # The backslashes are in a chain leading up to a double + # quote, so they are escaping each other. + buff.append('\\' * int(floor(num_backslashes / 2))) + remainder = num_backslashes % 2 + num_backslashes = 0 + if remainder == 1: + # The number of backslashes is uneven, so they are also + # escaping the double quote, so it needs to be added to + # the current component buffer. + buff.append('"') + continue + + # We've encountered a double quote that is not escaped, + # so we toggle is_quoted. + is_quoted = not is_quoted + + # If there are quotes, then we may want an empty string. To be + # safe, we add an empty string to the buffer so that we make + # sure it sticks around if there's nothing else between quotes. + # If there is other stuff between quotes, the empty string will + # disappear during the joining process. + buff.append('') + elif character in [' ', '\t'] and not is_quoted: + # Since the backslashes aren't leading up to a quote, we put in + # the exact number of backslashes. + if num_backslashes > 0: + buff.append('\\' * num_backslashes) + num_backslashes = 0 + + # Excess whitespace is ignored, so only add the components list + # if there is anything in the buffer. + if buff: + components.append(''.join(buff)) + buff = [] + else: + # Since the backslashes aren't leading up to a quote, we put in + # the exact number of backslashes. + if num_backslashes > 0: + buff.append('\\' * num_backslashes) + num_backslashes = 0 + buff.append(character) + + # Quotes must be terminated. + if is_quoted: + raise ValueError(f"No closing quotation in string: {s}") + + # There may be some leftover backslashes, so we need to add them in. + # There's no quote so we add the exact number. + if num_backslashes > 0: + buff.append('\\' * num_backslashes) + + # Add the final component in if there is anything in the buffer. + if buff: + components.append(''.join(buff)) + + return components + + +def get_tzinfo_options(): + # Due to dateutil/dateutil#197, Windows may fail to parse times in the past + # with the system clock. We can alternatively fallback to tzwininfo when + # this happens, which will get time info from the Windows registry. + if sys.platform == 'win32': + from dateutil.tz import tzwinlocal + + return (tzlocal, tzwinlocal) + else: + return (tzlocal,) + + +# Detect if CRT is available for use +try: + import awscrt.auth + + # Allow user opt-out if needed + disabled = os.environ.get('BOTO_DISABLE_CRT', "false") + HAS_CRT = not disabled.lower() == 'true' +except ImportError: + HAS_CRT = False + + +######################################################## +# urllib3 compat backports # +######################################################## + +# Vendoring IPv6 validation regex patterns from urllib3 +# https://github.com/urllib3/urllib3/blob/7e856c0/src/urllib3/util/url.py +IPV4_PAT = r"(?:[0-9]{1,3}\.){3}[0-9]{1,3}" +IPV4_RE = re.compile("^" + IPV4_PAT + "$") +HEX_PAT = "[0-9A-Fa-f]{1,4}" +LS32_PAT = "(?:{hex}:{hex}|{ipv4})".format(hex=HEX_PAT, ipv4=IPV4_PAT) +_subs = {"hex": HEX_PAT, "ls32": LS32_PAT} +_variations = [ + # 6( h16 ":" ) ls32 + "(?:%(hex)s:){6}%(ls32)s", + # "::" 5( h16 ":" ) ls32 + "::(?:%(hex)s:){5}%(ls32)s", + # [ h16 ] "::" 4( h16 ":" ) ls32 + "(?:%(hex)s)?::(?:%(hex)s:){4}%(ls32)s", + # [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + "(?:(?:%(hex)s:)?%(hex)s)?::(?:%(hex)s:){3}%(ls32)s", + # [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + "(?:(?:%(hex)s:){0,2}%(hex)s)?::(?:%(hex)s:){2}%(ls32)s", + # [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + "(?:(?:%(hex)s:){0,3}%(hex)s)?::%(hex)s:%(ls32)s", + # [ *4( h16 ":" ) h16 ] "::" ls32 + "(?:(?:%(hex)s:){0,4}%(hex)s)?::%(ls32)s", + # [ *5( h16 ":" ) h16 ] "::" h16 + "(?:(?:%(hex)s:){0,5}%(hex)s)?::%(hex)s", + # [ *6( h16 ":" ) h16 ] "::" + "(?:(?:%(hex)s:){0,6}%(hex)s)?::", +] + +UNRESERVED_PAT = ( + r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._!\-~" +) +IPV6_PAT = "(?:" + "|".join([x % _subs for x in _variations]) + ")" +ZONE_ID_PAT = "(?:%25|%)(?:[" + UNRESERVED_PAT + "]|%[a-fA-F0-9]{2})+" +IPV6_ADDRZ_PAT = r"\[" + IPV6_PAT + r"(?:" + ZONE_ID_PAT + r")?\]" +IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT + "$") + +# These are the characters that are stripped by post-bpo-43882 urlparse(). +UNSAFE_URL_CHARS = frozenset('\t\r\n') + +# Detect if gzip is available for use +try: + import gzip + HAS_GZIP = True +except ImportError: + HAS_GZIP = False diff --git a/dbtzin/lib/python3.8/site-packages/botocore/compress.py b/dbtzin/lib/python3.8/site-packages/botocore/compress.py new file mode 100644 index 00000000..1f8577e8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/compress.py @@ -0,0 +1,126 @@ +# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +""" +NOTE: All functions in this module are considered private and are +subject to abrupt breaking changes. Please do not use them directly. + +""" + +import io +import logging +from gzip import GzipFile +from gzip import compress as gzip_compress + +from botocore.compat import urlencode +from botocore.utils import determine_content_length + +logger = logging.getLogger(__name__) + + +def maybe_compress_request(config, request_dict, operation_model): + """Attempt to compress the request body using the modeled encodings.""" + if _should_compress_request(config, request_dict, operation_model): + for encoding in operation_model.request_compression['encodings']: + encoder = COMPRESSION_MAPPING.get(encoding) + if encoder is not None: + logger.debug('Compressing request with %s encoding.', encoding) + request_dict['body'] = encoder(request_dict['body']) + _set_compression_header(request_dict['headers'], encoding) + return + else: + logger.debug('Unsupported compression encoding: %s', encoding) + + +def _should_compress_request(config, request_dict, operation_model): + if ( + config.disable_request_compression is not True + and config.signature_version != 'v2' + and operation_model.request_compression is not None + ): + if not _is_compressible_type(request_dict): + body_type = type(request_dict['body']) + log_msg = 'Body type %s does not support compression.' + logger.debug(log_msg, body_type) + return False + + if operation_model.has_streaming_input: + streaming_input = operation_model.get_streaming_input() + streaming_metadata = streaming_input.metadata + return 'requiresLength' not in streaming_metadata + + body_size = _get_body_size(request_dict['body']) + min_size = config.request_min_compression_size_bytes + return min_size <= body_size + + return False + + +def _is_compressible_type(request_dict): + body = request_dict['body'] + # Coerce dict to a format compatible with compression. + if isinstance(body, dict): + body = urlencode(body, doseq=True, encoding='utf-8').encode('utf-8') + request_dict['body'] = body + is_supported_type = isinstance(body, (str, bytes, bytearray)) + return is_supported_type or hasattr(body, 'read') + + +def _get_body_size(body): + size = determine_content_length(body) + if size is None: + logger.debug( + 'Unable to get length of the request body: %s. ' + 'Skipping compression.', + body, + ) + size = 0 + return size + + +def _gzip_compress_body(body): + if isinstance(body, str): + return gzip_compress(body.encode('utf-8')) + elif isinstance(body, (bytes, bytearray)): + return gzip_compress(body) + elif hasattr(body, 'read'): + if hasattr(body, 'seek') and hasattr(body, 'tell'): + current_position = body.tell() + compressed_obj = _gzip_compress_fileobj(body) + body.seek(current_position) + return compressed_obj + return _gzip_compress_fileobj(body) + + +def _gzip_compress_fileobj(body): + compressed_obj = io.BytesIO() + with GzipFile(fileobj=compressed_obj, mode='wb') as gz: + while True: + chunk = body.read(8192) + if not chunk: + break + if isinstance(chunk, str): + chunk = chunk.encode('utf-8') + gz.write(chunk) + compressed_obj.seek(0) + return compressed_obj + + +def _set_compression_header(headers, encoding): + ce_header = headers.get('Content-Encoding') + if ce_header is None: + headers['Content-Encoding'] = encoding + else: + headers['Content-Encoding'] = f'{ce_header},{encoding}' + + +COMPRESSION_MAPPING = {'gzip': _gzip_compress_body} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/config.py b/dbtzin/lib/python3.8/site-packages/botocore/config.py new file mode 100644 index 00000000..87b52b6f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/config.py @@ -0,0 +1,376 @@ +# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import copy + +from botocore.compat import OrderedDict +from botocore.endpoint import DEFAULT_TIMEOUT, MAX_POOL_CONNECTIONS +from botocore.exceptions import ( + InvalidMaxRetryAttemptsError, + InvalidRetryConfigurationError, + InvalidRetryModeError, + InvalidS3AddressingStyleError, +) + + +class Config: + """Advanced configuration for Botocore clients. + + :type region_name: str + :param region_name: The region to use in instantiating the client + + :type signature_version: str + :param signature_version: The signature version when signing requests. + + :type user_agent: str + :param user_agent: The value to use in the User-Agent header. + + :type user_agent_extra: str + :param user_agent_extra: The value to append to the current User-Agent + header value. + + :type user_agent_appid: str + :param user_agent_appid: A value that gets included in the User-Agent + string in the format "app/". Allowed characters are + ASCII alphanumerics and ``!$%&'*+-.^_`|~``. All other characters will + be replaced by a ``-``. + + :type connect_timeout: float or int + :param connect_timeout: The time in seconds till a timeout exception is + thrown when attempting to make a connection. The default is 60 + seconds. + + :type read_timeout: float or int + :param read_timeout: The time in seconds till a timeout exception is + thrown when attempting to read from a connection. The default is + 60 seconds. + + :type parameter_validation: bool + :param parameter_validation: Whether parameter validation should occur + when serializing requests. The default is True. You can disable + parameter validation for performance reasons. Otherwise, it's + recommended to leave parameter validation enabled. + + :type max_pool_connections: int + :param max_pool_connections: The maximum number of connections to + keep in a connection pool. If this value is not set, the default + value of 10 is used. + + :type proxies: dict + :param proxies: A dictionary of proxy servers to use by protocol or + endpoint, e.g.: + ``{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}``. + The proxies are used on each request. + + :type proxies_config: dict + :param proxies_config: A dictionary of additional proxy configurations. + Valid keys are: + + * ``proxy_ca_bundle`` -- The path to a custom certificate bundle to use + when establishing SSL/TLS connections with proxy. + + * ``proxy_client_cert`` -- The path to a certificate for proxy + TLS client authentication. + + When a string is provided it is treated as a path to a proxy client + certificate. When a two element tuple is provided, it will be + interpreted as the path to the client certificate, and the path + to the certificate key. + + * ``proxy_use_forwarding_for_https`` -- For HTTPS proxies, + forward your requests to HTTPS destinations with an absolute + URI. We strongly recommend you only use this option with + trusted or corporate proxies. Value must be boolean. + + :type s3: dict + :param s3: A dictionary of S3 specific configurations. + Valid keys are: + + * ``use_accelerate_endpoint`` -- Refers to whether to use the S3 + Accelerate endpoint. The value must be a boolean. If True, the + client will use the S3 Accelerate endpoint. If the S3 Accelerate + endpoint is being used then the addressing style will always + be virtual. + + * ``payload_signing_enabled`` -- Refers to whether or not to SHA256 + sign sigv4 payloads. By default, this is disabled for streaming + uploads (UploadPart and PutObject). + + * ``addressing_style`` -- Refers to the style in which to address + s3 endpoints. Values must be a string that equals one of: + + * ``auto`` -- Addressing style is chosen for user. Depending + on the configuration of client, the endpoint may be addressed in + the virtual or the path style. Note that this is the default + behavior if no style is specified. + + * ``virtual`` -- Addressing style is always virtual. The name of the + bucket must be DNS compatible or an exception will be thrown. + Endpoints will be addressed as such: ``mybucket.s3.amazonaws.com`` + + * ``path`` -- Addressing style is always by path. Endpoints will be + addressed as such: ``s3.amazonaws.com/mybucket`` + + * ``us_east_1_regional_endpoint`` -- Refers to what S3 endpoint to use + when the region is configured to be us-east-1. Values must be a + string that equals: + + * ``regional`` -- Use the us-east-1.amazonaws.com endpoint if the + client is configured to use the us-east-1 region. + + * ``legacy`` -- Use the s3.amazonaws.com endpoint if the client is + configured to use the us-east-1 region. This is the default if + the configuration option is not specified. + + + :type retries: dict + :param retries: A dictionary for configuration related to retry behavior. + Valid keys are: + + * ``total_max_attempts`` -- An integer representing the maximum number of + total attempts that will be made on a single request. This includes + the initial request, so a value of 1 indicates that no requests + will be retried. If ``total_max_attempts`` and ``max_attempts`` + are both provided, ``total_max_attempts`` takes precedence. + ``total_max_attempts`` is preferred over ``max_attempts`` because + it maps to the ``AWS_MAX_ATTEMPTS`` environment variable and + the ``max_attempts`` config file value. + * ``max_attempts`` -- An integer representing the maximum number of + retry attempts that will be made on a single request. For + example, setting this value to 2 will result in the request + being retried at most two times after the initial request. Setting + this value to 0 will result in no retries ever being attempted after + the initial request. If not provided, the number of retries will + default to the value specified in the service model, which is + typically four retries. + * ``mode`` -- A string representing the type of retry mode botocore + should use. Valid values are: + + * ``legacy`` - The pre-existing retry behavior. + + * ``standard`` - The standardized set of retry rules. This will also + default to 3 max attempts unless overridden. + + * ``adaptive`` - Retries with additional client side throttling. + + :type client_cert: str, (str, str) + :param client_cert: The path to a certificate for TLS client authentication. + + When a string is provided it is treated as a path to a client + certificate to be used when creating a TLS connection. + + If a client key is to be provided alongside the client certificate the + client_cert should be set to a tuple of length two where the first + element is the path to the client certificate and the second element is + the path to the certificate key. + + :type inject_host_prefix: bool + :param inject_host_prefix: Whether host prefix injection should occur. + + Defaults to True. + + Setting this to False disables the injection of operation parameters + into the prefix of the hostname. This is useful for clients providing + custom endpoints that should not have their host prefix modified. + + :type use_dualstack_endpoint: bool + :param use_dualstack_endpoint: Setting to True enables dualstack + endpoint resolution. + + Defaults to None. + + :type use_fips_endpoint: bool + :param use_fips_endpoint: Setting to True enables fips + endpoint resolution. + + Defaults to None. + + :type ignore_configured_endpoint_urls: bool + :param ignore_configured_endpoint_urls: Setting to True disables use + of endpoint URLs provided via environment variables and + the shared configuration file. + + Defaults to None. + + :type tcp_keepalive: bool + :param tcp_keepalive: Enables the TCP Keep-Alive socket option used when + creating new connections if set to True. + + Defaults to False. + + :type request_min_compression_size_bytes: int + :param request_min_compression_size_bytes: The minimum size in bytes that a + request body should be to trigger compression. All requests with + streaming input that don't contain the ``requiresLength`` trait will be + compressed regardless of this setting. + + Defaults to None. + + :type disable_request_compression: bool + :param disable_request_compression: Disables request body compression if + set to True. + + Defaults to None. + + :type client_context_params: dict + :param client_context_params: A dictionary of parameters specific to + individual services. If available, valid parameters can be found in + the ``Client Context Parameters`` section of the service client's + documentation. Invalid parameters or ones that are not used by the + specified service will be ignored. + + Defaults to None. + """ + + OPTION_DEFAULTS = OrderedDict( + [ + ('region_name', None), + ('signature_version', None), + ('user_agent', None), + ('user_agent_extra', None), + ('user_agent_appid', None), + ('connect_timeout', DEFAULT_TIMEOUT), + ('read_timeout', DEFAULT_TIMEOUT), + ('parameter_validation', True), + ('max_pool_connections', MAX_POOL_CONNECTIONS), + ('proxies', None), + ('proxies_config', None), + ('s3', None), + ('retries', None), + ('client_cert', None), + ('inject_host_prefix', True), + ('endpoint_discovery_enabled', None), + ('use_dualstack_endpoint', None), + ('use_fips_endpoint', None), + ('ignore_configured_endpoint_urls', None), + ('defaults_mode', None), + ('tcp_keepalive', None), + ('request_min_compression_size_bytes', None), + ('disable_request_compression', None), + ('client_context_params', None), + ] + ) + + NON_LEGACY_OPTION_DEFAULTS = { + 'connect_timeout': None, + } + + def __init__(self, *args, **kwargs): + self._user_provided_options = self._record_user_provided_options( + args, kwargs + ) + + # Merge the user_provided options onto the default options + config_vars = copy.copy(self.OPTION_DEFAULTS) + defaults_mode = self._user_provided_options.get( + 'defaults_mode', 'legacy' + ) + if defaults_mode != 'legacy': + config_vars.update(self.NON_LEGACY_OPTION_DEFAULTS) + config_vars.update(self._user_provided_options) + + # Set the attributes based on the config_vars + for key, value in config_vars.items(): + setattr(self, key, value) + + # Validate the s3 options + self._validate_s3_configuration(self.s3) + + self._validate_retry_configuration(self.retries) + + def _record_user_provided_options(self, args, kwargs): + option_order = list(self.OPTION_DEFAULTS) + user_provided_options = {} + + # Iterate through the kwargs passed through to the constructor and + # map valid keys to the dictionary + for key, value in kwargs.items(): + if key in self.OPTION_DEFAULTS: + user_provided_options[key] = value + # The key must exist in the available options + else: + raise TypeError(f"Got unexpected keyword argument '{key}'") + + # The number of args should not be longer than the allowed + # options + if len(args) > len(option_order): + raise TypeError( + f"Takes at most {len(option_order)} arguments ({len(args)} given)" + ) + + # Iterate through the args passed through to the constructor and map + # them to appropriate keys. + for i, arg in enumerate(args): + # If a kwarg was specified for the arg, then error out + if option_order[i] in user_provided_options: + raise TypeError( + f"Got multiple values for keyword argument '{option_order[i]}'" + ) + user_provided_options[option_order[i]] = arg + + return user_provided_options + + def _validate_s3_configuration(self, s3): + if s3 is not None: + addressing_style = s3.get('addressing_style') + if addressing_style not in ['virtual', 'auto', 'path', None]: + raise InvalidS3AddressingStyleError( + s3_addressing_style=addressing_style + ) + + def _validate_retry_configuration(self, retries): + valid_options = ('max_attempts', 'mode', 'total_max_attempts') + valid_modes = ('legacy', 'standard', 'adaptive') + if retries is not None: + for key, value in retries.items(): + if key not in valid_options: + raise InvalidRetryConfigurationError( + retry_config_option=key, + valid_options=valid_options, + ) + if key == 'max_attempts' and value < 0: + raise InvalidMaxRetryAttemptsError( + provided_max_attempts=value, + min_value=0, + ) + if key == 'total_max_attempts' and value < 1: + raise InvalidMaxRetryAttemptsError( + provided_max_attempts=value, + min_value=1, + ) + if key == 'mode' and value not in valid_modes: + raise InvalidRetryModeError( + provided_retry_mode=value, + valid_modes=valid_modes, + ) + + def merge(self, other_config): + """Merges the config object with another config object + + This will merge in all non-default values from the provided config + and return a new config object + + :type other_config: botocore.config.Config + :param other config: Another config object to merge with. The values + in the provided config object will take precedence in the merging + + :returns: A config object built from the merged values of both + config objects. + """ + # Make a copy of the current attributes in the config object. + config_options = copy.copy(self._user_provided_options) + + # Merge in the user provided options from the other config + config_options.update(other_config._user_provided_options) + + # Return a new config object with the merged properties. + return Config(**config_options) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/configloader.py b/dbtzin/lib/python3.8/site-packages/botocore/configloader.py new file mode 100644 index 00000000..0b6c82bc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/configloader.py @@ -0,0 +1,287 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import configparser +import copy +import os +import shlex +import sys + +import botocore.exceptions + + +def multi_file_load_config(*filenames): + """Load and combine multiple INI configs with profiles. + + This function will take a list of filesnames and return + a single dictionary that represents the merging of the loaded + config files. + + If any of the provided filenames does not exist, then that file + is ignored. It is therefore ok to provide a list of filenames, + some of which may not exist. + + Configuration files are **not** deep merged, only the top level + keys are merged. The filenames should be passed in order of + precedence. The first config file has precedence over the + second config file, which has precedence over the third config file, + etc. The only exception to this is that the "profiles" key is + merged to combine profiles from multiple config files into a + single profiles mapping. However, if a profile is defined in + multiple config files, then the config file with the highest + precedence is used. Profile values themselves are not merged. + For example:: + + FileA FileB FileC + [foo] [foo] [bar] + a=1 a=2 a=3 + b=2 + + [bar] [baz] [profile a] + a=2 a=3 region=e + + [profile a] [profile b] [profile c] + region=c region=d region=f + + The final result of ``multi_file_load_config(FileA, FileB, FileC)`` + would be:: + + {"foo": {"a": 1}, "bar": {"a": 2}, "baz": {"a": 3}, + "profiles": {"a": {"region": "c"}}, {"b": {"region": d"}}, + {"c": {"region": "f"}}} + + Note that the "foo" key comes from A, even though it's defined in both + FileA and FileB. Because "foo" was defined in FileA first, then the values + for "foo" from FileA are used and the values for "foo" from FileB are + ignored. Also note where the profiles originate from. Profile "a" + comes FileA, profile "b" comes from FileB, and profile "c" comes + from FileC. + + """ + configs = [] + profiles = [] + for filename in filenames: + try: + loaded = load_config(filename) + except botocore.exceptions.ConfigNotFound: + continue + profiles.append(loaded.pop('profiles')) + configs.append(loaded) + merged_config = _merge_list_of_dicts(configs) + merged_profiles = _merge_list_of_dicts(profiles) + merged_config['profiles'] = merged_profiles + return merged_config + + +def _merge_list_of_dicts(list_of_dicts): + merged_dicts = {} + for single_dict in list_of_dicts: + for key, value in single_dict.items(): + if key not in merged_dicts: + merged_dicts[key] = value + return merged_dicts + + +def load_config(config_filename): + """Parse a INI config with profiles. + + This will parse an INI config file and map top level profiles + into a top level "profile" key. + + If you want to parse an INI file and map all section names to + top level keys, use ``raw_config_parse`` instead. + + """ + parsed = raw_config_parse(config_filename) + return build_profile_map(parsed) + + +def raw_config_parse(config_filename, parse_subsections=True): + """Returns the parsed INI config contents. + + Each section name is a top level key. + + :param config_filename: The name of the INI file to parse + + :param parse_subsections: If True, parse indented blocks as + subsections that represent their own configuration dictionary. + For example, if the config file had the contents:: + + s3 = + signature_version = s3v4 + addressing_style = path + + The resulting ``raw_config_parse`` would be:: + + {'s3': {'signature_version': 's3v4', 'addressing_style': 'path'}} + + If False, do not try to parse subsections and return the indented + block as its literal value:: + + {'s3': '\nsignature_version = s3v4\naddressing_style = path'} + + :returns: A dict with keys for each profile found in the config + file and the value of each key being a dict containing name + value pairs found in that profile. + + :raises: ConfigNotFound, ConfigParseError + """ + config = {} + path = config_filename + if path is not None: + path = os.path.expandvars(path) + path = os.path.expanduser(path) + if not os.path.isfile(path): + raise botocore.exceptions.ConfigNotFound(path=_unicode_path(path)) + cp = configparser.RawConfigParser() + try: + cp.read([path]) + except (configparser.Error, UnicodeDecodeError) as e: + raise botocore.exceptions.ConfigParseError( + path=_unicode_path(path), error=e + ) from None + else: + for section in cp.sections(): + config[section] = {} + for option in cp.options(section): + config_value = cp.get(section, option) + if parse_subsections and config_value.startswith('\n'): + # Then we need to parse the inner contents as + # hierarchical. We support a single level + # of nesting for now. + try: + config_value = _parse_nested(config_value) + except ValueError as e: + raise botocore.exceptions.ConfigParseError( + path=_unicode_path(path), error=e + ) from None + config[section][option] = config_value + return config + + +def _unicode_path(path): + if isinstance(path, str): + return path + # According to the documentation getfilesystemencoding can return None + # on unix in which case the default encoding is used instead. + filesystem_encoding = sys.getfilesystemencoding() + if filesystem_encoding is None: + filesystem_encoding = sys.getdefaultencoding() + return path.decode(filesystem_encoding, 'replace') + + +def _parse_nested(config_value): + # Given a value like this: + # \n + # foo = bar + # bar = baz + # We need to parse this into + # {'foo': 'bar', 'bar': 'baz} + parsed = {} + for line in config_value.splitlines(): + line = line.strip() + if not line: + continue + # The caller will catch ValueError + # and raise an appropriate error + # if this fails. + key, value = line.split('=', 1) + parsed[key.strip()] = value.strip() + return parsed + + +def _parse_section(key, values): + result = {} + try: + parts = shlex.split(key) + except ValueError: + return result + if len(parts) == 2: + result[parts[1]] = values + return result + + +def build_profile_map(parsed_ini_config): + """Convert the parsed INI config into a profile map. + + The config file format requires that every profile except the + default to be prepended with "profile", e.g.:: + + [profile test] + aws_... = foo + aws_... = bar + + [profile bar] + aws_... = foo + aws_... = bar + + # This is *not* a profile + [preview] + otherstuff = 1 + + # Neither is this + [foobar] + morestuff = 2 + + The build_profile_map will take a parsed INI config file where each top + level key represents a section name, and convert into a format where all + the profiles are under a single top level "profiles" key, and each key in + the sub dictionary is a profile name. For example, the above config file + would be converted from:: + + {"profile test": {"aws_...": "foo", "aws...": "bar"}, + "profile bar": {"aws...": "foo", "aws...": "bar"}, + "preview": {"otherstuff": ...}, + "foobar": {"morestuff": ...}, + } + + into:: + + {"profiles": {"test": {"aws_...": "foo", "aws...": "bar"}, + "bar": {"aws...": "foo", "aws...": "bar"}, + "preview": {"otherstuff": ...}, + "foobar": {"morestuff": ...}, + } + + If there are no profiles in the provided parsed INI contents, then + an empty dict will be the value associated with the ``profiles`` key. + + .. note:: + + This will not mutate the passed in parsed_ini_config. Instead it will + make a deepcopy and return that value. + + """ + parsed_config = copy.deepcopy(parsed_ini_config) + profiles = {} + sso_sessions = {} + services = {} + final_config = {} + for key, values in parsed_config.items(): + if key.startswith("profile"): + profiles.update(_parse_section(key, values)) + elif key.startswith("sso-session"): + sso_sessions.update(_parse_section(key, values)) + elif key.startswith("services"): + services.update(_parse_section(key, values)) + elif key == 'default': + # default section is special and is considered a profile + # name but we don't require you use 'profile "default"' + # as a section. + profiles[key] = values + else: + final_config[key] = values + final_config['profiles'] = profiles + final_config['sso_sessions'] = sso_sessions + final_config['services'] = services + return final_config diff --git a/dbtzin/lib/python3.8/site-packages/botocore/configprovider.py b/dbtzin/lib/python3.8/site-packages/botocore/configprovider.py new file mode 100644 index 00000000..3b68fca5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/configprovider.py @@ -0,0 +1,1020 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +"""This module contains the interface for controlling how configuration +is loaded. +""" +import copy +import logging +import os + +from botocore import utils +from botocore.exceptions import InvalidConfigError + +logger = logging.getLogger(__name__) + + +#: A default dictionary that maps the logical names for session variables +#: to the specific environment variables and configuration file names +#: that contain the values for these variables. +#: When creating a new Session object, you can pass in your own dictionary +#: to remap the logical names or to add new logical names. You can then +#: get the current value for these variables by using the +#: ``get_config_variable`` method of the :class:`botocore.session.Session` +#: class. +#: These form the keys of the dictionary. The values in the dictionary +#: are tuples of (, , , +#: ). +#: The conversion func is a function that takes the configuration value +#: as an argument and returns the converted value. If this value is +#: None, then the configuration value is returned unmodified. This +#: conversion function can be used to type convert config values to +#: values other than the default values of strings. +#: The ``profile`` and ``config_file`` variables should always have a +#: None value for the first entry in the tuple because it doesn't make +#: sense to look inside the config file for the location of the config +#: file or for the default profile to use. +#: The ``config_name`` is the name to look for in the configuration file, +#: the ``env var`` is the OS environment variable (``os.environ``) to +#: use, and ``default_value`` is the value to use if no value is otherwise +#: found. +#: NOTE: Fixing the spelling of this variable would be a breaking change. +#: Please leave as is. +BOTOCORE_DEFAUT_SESSION_VARIABLES = { + # logical: config_file, env_var, default_value, conversion_func + 'profile': (None, ['AWS_DEFAULT_PROFILE', 'AWS_PROFILE'], None, None), + 'region': ('region', 'AWS_DEFAULT_REGION', None, None), + 'data_path': ('data_path', 'AWS_DATA_PATH', None, None), + 'config_file': (None, 'AWS_CONFIG_FILE', '~/.aws/config', None), + 'ca_bundle': ('ca_bundle', 'AWS_CA_BUNDLE', None, None), + 'api_versions': ('api_versions', None, {}, None), + # This is the shared credentials file amongst sdks. + 'credentials_file': ( + None, + 'AWS_SHARED_CREDENTIALS_FILE', + '~/.aws/credentials', + None, + ), + # These variables only exist in the config file. + # This is the number of seconds until we time out a request to + # the instance metadata service. + 'metadata_service_timeout': ( + 'metadata_service_timeout', + 'AWS_METADATA_SERVICE_TIMEOUT', + 1, + int, + ), + # This is the number of request attempts we make until we give + # up trying to retrieve data from the instance metadata service. + 'metadata_service_num_attempts': ( + 'metadata_service_num_attempts', + 'AWS_METADATA_SERVICE_NUM_ATTEMPTS', + 1, + int, + ), + 'ec2_metadata_service_endpoint': ( + 'ec2_metadata_service_endpoint', + 'AWS_EC2_METADATA_SERVICE_ENDPOINT', + None, + None, + ), + 'ec2_metadata_service_endpoint_mode': ( + 'ec2_metadata_service_endpoint_mode', + 'AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE', + None, + None, + ), + 'ec2_metadata_v1_disabled': ( + 'ec2_metadata_v1_disabled', + 'AWS_EC2_METADATA_V1_DISABLED', + False, + utils.ensure_boolean, + ), + 'imds_use_ipv6': ( + 'imds_use_ipv6', + 'AWS_IMDS_USE_IPV6', + False, + utils.ensure_boolean, + ), + 'use_dualstack_endpoint': ( + 'use_dualstack_endpoint', + 'AWS_USE_DUALSTACK_ENDPOINT', + None, + utils.ensure_boolean, + ), + 'use_fips_endpoint': ( + 'use_fips_endpoint', + 'AWS_USE_FIPS_ENDPOINT', + None, + utils.ensure_boolean, + ), + 'ignore_configured_endpoint_urls': ( + 'ignore_configured_endpoint_urls', + 'AWS_IGNORE_CONFIGURED_ENDPOINT_URLS', + None, + utils.ensure_boolean, + ), + 'parameter_validation': ('parameter_validation', None, True, None), + # Client side monitoring configurations. + # Note: These configurations are considered internal to botocore. + # Do not use them until publicly documented. + 'csm_enabled': ( + 'csm_enabled', + 'AWS_CSM_ENABLED', + False, + utils.ensure_boolean, + ), + 'csm_host': ('csm_host', 'AWS_CSM_HOST', '127.0.0.1', None), + 'csm_port': ('csm_port', 'AWS_CSM_PORT', 31000, int), + 'csm_client_id': ('csm_client_id', 'AWS_CSM_CLIENT_ID', '', None), + # Endpoint discovery configuration + 'endpoint_discovery_enabled': ( + 'endpoint_discovery_enabled', + 'AWS_ENDPOINT_DISCOVERY_ENABLED', + 'auto', + None, + ), + 'sts_regional_endpoints': ( + 'sts_regional_endpoints', + 'AWS_STS_REGIONAL_ENDPOINTS', + 'legacy', + None, + ), + 'retry_mode': ('retry_mode', 'AWS_RETRY_MODE', 'legacy', None), + 'defaults_mode': ('defaults_mode', 'AWS_DEFAULTS_MODE', 'legacy', None), + # We can't have a default here for v1 because we need to defer to + # whatever the defaults are in _retry.json. + 'max_attempts': ('max_attempts', 'AWS_MAX_ATTEMPTS', None, int), + 'user_agent_appid': ('sdk_ua_app_id', 'AWS_SDK_UA_APP_ID', None, None), + 'request_min_compression_size_bytes': ( + 'request_min_compression_size_bytes', + 'AWS_REQUEST_MIN_COMPRESSION_SIZE_BYTES', + 10240, + None, + ), + 'disable_request_compression': ( + 'disable_request_compression', + 'AWS_DISABLE_REQUEST_COMPRESSION', + False, + utils.ensure_boolean, + ), +} +# A mapping for the s3 specific configuration vars. These are the configuration +# vars that typically go in the s3 section of the config file. This mapping +# follows the same schema as the previous session variable mapping. +DEFAULT_S3_CONFIG_VARS = { + 'addressing_style': (('s3', 'addressing_style'), None, None, None), + 'use_accelerate_endpoint': ( + ('s3', 'use_accelerate_endpoint'), + None, + None, + utils.ensure_boolean, + ), + 'use_dualstack_endpoint': ( + ('s3', 'use_dualstack_endpoint'), + None, + None, + utils.ensure_boolean, + ), + 'payload_signing_enabled': ( + ('s3', 'payload_signing_enabled'), + None, + None, + utils.ensure_boolean, + ), + 'use_arn_region': ( + ['s3_use_arn_region', ('s3', 'use_arn_region')], + 'AWS_S3_USE_ARN_REGION', + None, + utils.ensure_boolean, + ), + 'us_east_1_regional_endpoint': ( + [ + 's3_us_east_1_regional_endpoint', + ('s3', 'us_east_1_regional_endpoint'), + ], + 'AWS_S3_US_EAST_1_REGIONAL_ENDPOINT', + None, + None, + ), + 's3_disable_multiregion_access_points': ( + ('s3', 's3_disable_multiregion_access_points'), + 'AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS', + None, + utils.ensure_boolean, + ), +} +# A mapping for the proxy specific configuration vars. These are +# used to configure how botocore interacts with proxy setups while +# sending requests. +DEFAULT_PROXIES_CONFIG_VARS = { + 'proxy_ca_bundle': ('proxy_ca_bundle', None, None, None), + 'proxy_client_cert': ('proxy_client_cert', None, None, None), + 'proxy_use_forwarding_for_https': ( + 'proxy_use_forwarding_for_https', + None, + None, + utils.normalize_boolean, + ), +} + + +def create_botocore_default_config_mapping(session): + chain_builder = ConfigChainFactory(session=session) + config_mapping = _create_config_chain_mapping( + chain_builder, BOTOCORE_DEFAUT_SESSION_VARIABLES + ) + config_mapping['s3'] = SectionConfigProvider( + 's3', + session, + _create_config_chain_mapping(chain_builder, DEFAULT_S3_CONFIG_VARS), + ) + config_mapping['proxies_config'] = SectionConfigProvider( + 'proxies_config', + session, + _create_config_chain_mapping( + chain_builder, DEFAULT_PROXIES_CONFIG_VARS + ), + ) + return config_mapping + + +def _create_config_chain_mapping(chain_builder, config_variables): + mapping = {} + for logical_name, config in config_variables.items(): + mapping[logical_name] = chain_builder.create_config_chain( + instance_name=logical_name, + env_var_names=config[1], + config_property_names=config[0], + default=config[2], + conversion_func=config[3], + ) + return mapping + + +class DefaultConfigResolver: + def __init__(self, default_config_data): + self._base_default_config = default_config_data['base'] + self._modes = default_config_data['modes'] + self._resolved_default_configurations = {} + + def _resolve_default_values_by_mode(self, mode): + default_config = self._base_default_config.copy() + modifications = self._modes.get(mode) + + for config_var in modifications: + default_value = default_config[config_var] + modification_dict = modifications[config_var] + modification = list(modification_dict.keys())[0] + modification_value = modification_dict[modification] + if modification == 'multiply': + default_value *= modification_value + elif modification == 'add': + default_value += modification_value + elif modification == 'override': + default_value = modification_value + default_config[config_var] = default_value + return default_config + + def get_default_modes(self): + default_modes = ['legacy', 'auto'] + default_modes.extend(self._modes.keys()) + return default_modes + + def get_default_config_values(self, mode): + if mode not in self._resolved_default_configurations: + defaults = self._resolve_default_values_by_mode(mode) + self._resolved_default_configurations[mode] = defaults + return self._resolved_default_configurations[mode] + + +class ConfigChainFactory: + """Factory class to create our most common configuration chain case. + + This is a convenience class to construct configuration chains that follow + our most common pattern. This is to prevent ordering them incorrectly, + and to make the config chain construction more readable. + """ + + def __init__(self, session, environ=None): + """Initialize a ConfigChainFactory. + + :type session: :class:`botocore.session.Session` + :param session: This is the session that should be used to look up + values from the config file. + + :type environ: dict + :param environ: A mapping to use for environment variables. If this + is not provided it will default to use os.environ. + """ + self._session = session + if environ is None: + environ = os.environ + self._environ = environ + + def create_config_chain( + self, + instance_name=None, + env_var_names=None, + config_property_names=None, + default=None, + conversion_func=None, + ): + """Build a config chain following the standard botocore pattern. + + In botocore most of our config chains follow the the precendence: + session_instance_variables, environment, config_file, default_value. + + This is a convenience function for creating a chain that follow + that precendence. + + :type instance_name: str + :param instance_name: This indicates what session instance variable + corresponds to this config value. If it is None it will not be + added to the chain. + + :type env_var_names: str or list of str or None + :param env_var_names: One or more environment variable names to + search for this value. They are searched in order. If it is None + it will not be added to the chain. + + :type config_property_names: str/tuple or list of str/tuple or None + :param config_property_names: One of more strings or tuples + representing the name of the key in the config file for this + config option. They are searched in order. If it is None it will + not be added to the chain. + + :type default: Any + :param default: Any constant value to be returned. + + :type conversion_func: None or callable + :param conversion_func: If this value is None then it has no effect on + the return type. Otherwise, it is treated as a function that will + conversion_func our provided type. + + :rvalue: ConfigChain + :returns: A ConfigChain that resolves in the order env_var_names -> + config_property_name -> default. Any values that were none are + omitted form the chain. + """ + providers = [] + if instance_name is not None: + providers.append( + InstanceVarProvider( + instance_var=instance_name, session=self._session + ) + ) + if env_var_names is not None: + providers.extend(self._get_env_providers(env_var_names)) + if config_property_names is not None: + providers.extend( + self._get_scoped_config_providers(config_property_names) + ) + if default is not None: + providers.append(ConstantProvider(value=default)) + + return ChainProvider( + providers=providers, + conversion_func=conversion_func, + ) + + def _get_env_providers(self, env_var_names): + env_var_providers = [] + if not isinstance(env_var_names, list): + env_var_names = [env_var_names] + for env_var_name in env_var_names: + env_var_providers.append( + EnvironmentProvider(name=env_var_name, env=self._environ) + ) + return env_var_providers + + def _get_scoped_config_providers(self, config_property_names): + scoped_config_providers = [] + if not isinstance(config_property_names, list): + config_property_names = [config_property_names] + for config_property_name in config_property_names: + scoped_config_providers.append( + ScopedConfigProvider( + config_var_name=config_property_name, + session=self._session, + ) + ) + return scoped_config_providers + + +class ConfigValueStore: + """The ConfigValueStore object stores configuration values.""" + + def __init__(self, mapping=None): + """Initialize a ConfigValueStore. + + :type mapping: dict + :param mapping: The mapping parameter is a map of string to a subclass + of BaseProvider. When a config variable is asked for via the + get_config_variable method, the corresponding provider will be + invoked to load the value. + """ + self._overrides = {} + self._mapping = {} + if mapping is not None: + for logical_name, provider in mapping.items(): + self.set_config_provider(logical_name, provider) + + def __deepcopy__(self, memo): + config_store = ConfigValueStore(copy.deepcopy(self._mapping, memo)) + for logical_name, override_value in self._overrides.items(): + config_store.set_config_variable(logical_name, override_value) + + return config_store + + def __copy__(self): + config_store = ConfigValueStore(copy.copy(self._mapping)) + for logical_name, override_value in self._overrides.items(): + config_store.set_config_variable(logical_name, override_value) + + return config_store + + def get_config_variable(self, logical_name): + """ + Retrieve the value associeated with the specified logical_name + from the corresponding provider. If no value is found None will + be returned. + + :type logical_name: str + :param logical_name: The logical name of the session variable + you want to retrieve. This name will be mapped to the + appropriate environment variable name for this session as + well as the appropriate config file entry. + + :returns: value of variable or None if not defined. + """ + if logical_name in self._overrides: + return self._overrides[logical_name] + if logical_name not in self._mapping: + return None + provider = self._mapping[logical_name] + return provider.provide() + + def get_config_provider(self, logical_name): + """ + Retrieve the provider associated with the specified logical_name. + If no provider is found None will be returned. + + :type logical_name: str + :param logical_name: The logical name of the session variable + you want to retrieve. This name will be mapped to the + appropriate environment variable name for this session as + well as the appropriate config file entry. + + :returns: configuration provider or None if not defined. + """ + if ( + logical_name in self._overrides + or logical_name not in self._mapping + ): + return None + provider = self._mapping[logical_name] + return provider + + def set_config_variable(self, logical_name, value): + """Set a configuration variable to a specific value. + + By using this method, you can override the normal lookup + process used in ``get_config_variable`` by explicitly setting + a value. Subsequent calls to ``get_config_variable`` will + use the ``value``. This gives you per-session specific + configuration values. + + :: + >>> # Assume logical name 'foo' maps to env var 'FOO' + >>> os.environ['FOO'] = 'myvalue' + >>> s.get_config_variable('foo') + 'myvalue' + >>> s.set_config_variable('foo', 'othervalue') + >>> s.get_config_variable('foo') + 'othervalue' + + :type logical_name: str + :param logical_name: The logical name of the session variable + you want to set. These are the keys in ``SESSION_VARIABLES``. + + :param value: The value to associate with the config variable. + """ + self._overrides[logical_name] = value + + def clear_config_variable(self, logical_name): + """Remove an override config variable from the session. + + :type logical_name: str + :param logical_name: The name of the parameter to clear the override + value from. + """ + self._overrides.pop(logical_name, None) + + def set_config_provider(self, logical_name, provider): + """Set the provider for a config value. + + This provides control over how a particular configuration value is + loaded. This replaces the provider for ``logical_name`` with the new + ``provider``. + + :type logical_name: str + :param logical_name: The name of the config value to change the config + provider for. + + :type provider: :class:`botocore.configprovider.BaseProvider` + :param provider: The new provider that should be responsible for + providing a value for the config named ``logical_name``. + """ + self._mapping[logical_name] = provider + + +class SmartDefaultsConfigStoreFactory: + def __init__(self, default_config_resolver, imds_region_provider): + self._default_config_resolver = default_config_resolver + self._imds_region_provider = imds_region_provider + # Initializing _instance_metadata_region as None so we + # can fetch region in a lazy fashion only when needed. + self._instance_metadata_region = None + + def merge_smart_defaults(self, config_store, mode, region_name): + if mode == 'auto': + mode = self.resolve_auto_mode(region_name) + default_configs = ( + self._default_config_resolver.get_default_config_values(mode) + ) + for config_var in default_configs: + config_value = default_configs[config_var] + method = getattr(self, f'_set_{config_var}', None) + if method: + method(config_store, config_value) + + def resolve_auto_mode(self, region_name): + current_region = None + if os.environ.get('AWS_EXECUTION_ENV'): + default_region = os.environ.get('AWS_DEFAULT_REGION') + current_region = os.environ.get('AWS_REGION', default_region) + if not current_region: + if self._instance_metadata_region: + current_region = self._instance_metadata_region + else: + try: + current_region = self._imds_region_provider.provide() + self._instance_metadata_region = current_region + except Exception: + pass + + if current_region: + if region_name == current_region: + return 'in-region' + else: + return 'cross-region' + return 'standard' + + def _update_provider(self, config_store, variable, value): + original_provider = config_store.get_config_provider(variable) + default_provider = ConstantProvider(value) + if isinstance(original_provider, ChainProvider): + chain_provider_copy = copy.deepcopy(original_provider) + chain_provider_copy.set_default_provider(default_provider) + default_provider = chain_provider_copy + elif isinstance(original_provider, BaseProvider): + default_provider = ChainProvider( + providers=[original_provider, default_provider] + ) + config_store.set_config_provider(variable, default_provider) + + def _update_section_provider( + self, config_store, section_name, variable, value + ): + section_provider_copy = copy.deepcopy( + config_store.get_config_provider(section_name) + ) + section_provider_copy.set_default_provider( + variable, ConstantProvider(value) + ) + config_store.set_config_provider(section_name, section_provider_copy) + + def _set_retryMode(self, config_store, value): + self._update_provider(config_store, 'retry_mode', value) + + def _set_stsRegionalEndpoints(self, config_store, value): + self._update_provider(config_store, 'sts_regional_endpoints', value) + + def _set_s3UsEast1RegionalEndpoints(self, config_store, value): + self._update_section_provider( + config_store, 's3', 'us_east_1_regional_endpoint', value + ) + + def _set_connectTimeoutInMillis(self, config_store, value): + self._update_provider(config_store, 'connect_timeout', value / 1000) + + +class BaseProvider: + """Base class for configuration value providers. + + A configuration provider has some method of providing a configuration + value. + """ + + def provide(self): + """Provide a config value.""" + raise NotImplementedError('provide') + + +class ChainProvider(BaseProvider): + """This provider wraps one or more other providers. + + Each provider in the chain is called, the first one returning a non-None + value is then returned. + """ + + def __init__(self, providers=None, conversion_func=None): + """Initalize a ChainProvider. + + :type providers: list + :param providers: The initial list of providers to check for values + when invoked. + + :type conversion_func: None or callable + :param conversion_func: If this value is None then it has no affect on + the return type. Otherwise, it is treated as a function that will + transform provided value. + """ + if providers is None: + providers = [] + self._providers = providers + self._conversion_func = conversion_func + + def __deepcopy__(self, memo): + return ChainProvider( + copy.deepcopy(self._providers, memo), self._conversion_func + ) + + def provide(self): + """Provide the value from the first provider to return non-None. + + Each provider in the chain has its provide method called. The first + one in the chain to return a non-None value is the returned from the + ChainProvider. When no non-None value is found, None is returned. + """ + for provider in self._providers: + value = provider.provide() + if value is not None: + return self._convert_type(value) + return None + + def set_default_provider(self, default_provider): + if self._providers and isinstance( + self._providers[-1], ConstantProvider + ): + self._providers[-1] = default_provider + else: + self._providers.append(default_provider) + + num_of_constants = sum( + isinstance(provider, ConstantProvider) + for provider in self._providers + ) + if num_of_constants > 1: + logger.info( + 'ChainProvider object contains multiple ' + 'instances of ConstantProvider objects' + ) + + def _convert_type(self, value): + if self._conversion_func is not None: + return self._conversion_func(value) + return value + + def __repr__(self): + return '[%s]' % ', '.join([str(p) for p in self._providers]) + + +class InstanceVarProvider(BaseProvider): + """This class loads config values from the session instance vars.""" + + def __init__(self, instance_var, session): + """Initialize InstanceVarProvider. + + :type instance_var: str + :param instance_var: The instance variable to load from the session. + + :type session: :class:`botocore.session.Session` + :param session: The botocore session to get the loaded configuration + file variables from. + """ + self._instance_var = instance_var + self._session = session + + def __deepcopy__(self, memo): + return InstanceVarProvider( + copy.deepcopy(self._instance_var, memo), self._session + ) + + def provide(self): + """Provide a config value from the session instance vars.""" + instance_vars = self._session.instance_variables() + value = instance_vars.get(self._instance_var) + return value + + def __repr__(self): + return 'InstanceVarProvider(instance_var={}, session={})'.format( + self._instance_var, + self._session, + ) + + +class ScopedConfigProvider(BaseProvider): + def __init__(self, config_var_name, session): + """Initialize ScopedConfigProvider. + + :type config_var_name: str or tuple + :param config_var_name: The name of the config variable to load from + the configuration file. If the value is a tuple, it must only + consist of two items, where the first item represents the section + and the second item represents the config var name in the section. + + :type session: :class:`botocore.session.Session` + :param session: The botocore session to get the loaded configuration + file variables from. + """ + self._config_var_name = config_var_name + self._session = session + + def __deepcopy__(self, memo): + return ScopedConfigProvider( + copy.deepcopy(self._config_var_name, memo), self._session + ) + + def provide(self): + """Provide a value from a config file property.""" + scoped_config = self._session.get_scoped_config() + if isinstance(self._config_var_name, tuple): + section_config = scoped_config.get(self._config_var_name[0]) + if not isinstance(section_config, dict): + return None + return section_config.get(self._config_var_name[1]) + return scoped_config.get(self._config_var_name) + + def __repr__(self): + return 'ScopedConfigProvider(config_var_name={}, session={})'.format( + self._config_var_name, + self._session, + ) + + +class EnvironmentProvider(BaseProvider): + """This class loads config values from environment variables.""" + + def __init__(self, name, env): + """Initialize with the keys in the dictionary to check. + + :type name: str + :param name: The key with that name will be loaded and returned. + + :type env: dict + :param env: Environment variables dictionary to get variables from. + """ + self._name = name + self._env = env + + def __deepcopy__(self, memo): + return EnvironmentProvider( + copy.deepcopy(self._name, memo), copy.deepcopy(self._env, memo) + ) + + def provide(self): + """Provide a config value from a source dictionary.""" + if self._name in self._env: + return self._env[self._name] + return None + + def __repr__(self): + return f'EnvironmentProvider(name={self._name}, env={self._env})' + + +class SectionConfigProvider(BaseProvider): + """Provides a dictionary from a section in the scoped config + + This is useful for retrieving scoped config variables (i.e. s3) that have + their own set of config variables and resolving logic. + """ + + def __init__(self, section_name, session, override_providers=None): + self._section_name = section_name + self._session = session + self._scoped_config_provider = ScopedConfigProvider( + self._section_name, self._session + ) + self._override_providers = override_providers + if self._override_providers is None: + self._override_providers = {} + + def __deepcopy__(self, memo): + return SectionConfigProvider( + copy.deepcopy(self._section_name, memo), + self._session, + copy.deepcopy(self._override_providers, memo), + ) + + def provide(self): + section_config = self._scoped_config_provider.provide() + if section_config and not isinstance(section_config, dict): + logger.debug( + "The %s config key is not a dictionary type, " + "ignoring its value of: %s", + self._section_name, + section_config, + ) + return None + for section_config_var, provider in self._override_providers.items(): + provider_val = provider.provide() + if provider_val is not None: + if section_config is None: + section_config = {} + section_config[section_config_var] = provider_val + return section_config + + def set_default_provider(self, key, default_provider): + provider = self._override_providers.get(key) + if isinstance(provider, ChainProvider): + provider.set_default_provider(default_provider) + return + elif isinstance(provider, BaseProvider): + default_provider = ChainProvider( + providers=[provider, default_provider] + ) + self._override_providers[key] = default_provider + + def __repr__(self): + return ( + f'SectionConfigProvider(section_name={self._section_name}, ' + f'session={self._session}, ' + f'override_providers={self._override_providers})' + ) + + +class ConstantProvider(BaseProvider): + """This provider provides a constant value.""" + + def __init__(self, value): + self._value = value + + def __deepcopy__(self, memo): + return ConstantProvider(copy.deepcopy(self._value, memo)) + + def provide(self): + """Provide the constant value given during initialization.""" + return self._value + + def __repr__(self): + return 'ConstantProvider(value=%s)' % self._value + + +class ConfiguredEndpointProvider(BaseProvider): + """Lookup an endpoint URL from environment variable or shared config file. + + NOTE: This class is considered private and is subject to abrupt breaking + changes or removal without prior announcement. Please do not use it + directly. + """ + + _ENDPOINT_URL_LOOKUP_ORDER = [ + 'environment_service', + 'environment_global', + 'config_service', + 'config_global', + ] + + def __init__( + self, + full_config, + scoped_config, + client_name, + environ=None, + ): + """Initialize a ConfiguredEndpointProviderChain. + + :type full_config: dict + :param full_config: This is the dict representing the full + configuration file. + + :type scoped_config: dict + :param scoped_config: This is the dict representing the configuration + for the current profile for the session. + + :type client_name: str + :param client_name: The name used to instantiate a client using + botocore.session.Session.create_client. + + :type environ: dict + :param environ: A mapping to use for environment variables. If this + is not provided it will default to use os.environ. + """ + self._full_config = full_config + self._scoped_config = scoped_config + self._client_name = client_name + self._transformed_service_id = self._get_snake_case_service_id( + self._client_name + ) + if environ is None: + environ = os.environ + self._environ = environ + + def provide(self): + """Lookup the configured endpoint URL. + + The order is: + + 1. The value provided by a service-specific environment variable. + 2. The value provided by the global endpoint environment variable + (AWS_ENDPOINT_URL). + 3. The value provided by a service-specific parameter from a services + definition section in the shared configuration file. + 4. The value provided by the global parameter from a services + definition section in the shared configuration file. + """ + for location in self._ENDPOINT_URL_LOOKUP_ORDER: + logger.debug( + 'Looking for endpoint for %s via: %s', + self._client_name, + location, + ) + + endpoint_url = getattr(self, f'_get_endpoint_url_{location}')() + + if endpoint_url: + logger.info( + 'Found endpoint for %s via: %s.', + self._client_name, + location, + ) + return endpoint_url + + logger.debug('No configured endpoint found.') + return None + + def _get_snake_case_service_id(self, client_name): + # Get the service ID without loading the service data file, accounting + # for any aliases and standardizing the names with hyphens. + client_name = utils.SERVICE_NAME_ALIASES.get(client_name, client_name) + hyphenized_service_id = ( + utils.CLIENT_NAME_TO_HYPHENIZED_SERVICE_ID_OVERRIDES.get( + client_name, client_name + ) + ) + return hyphenized_service_id.replace('-', '_') + + def _get_service_env_var_name(self): + transformed_service_id_env = self._transformed_service_id.upper() + return f'AWS_ENDPOINT_URL_{transformed_service_id_env}' + + def _get_services_config(self): + if 'services' not in self._scoped_config: + return {} + + section_name = self._scoped_config['services'] + services_section = self._full_config.get('services', {}).get( + section_name + ) + + if not services_section: + error_msg = ( + f'The profile is configured to use the services ' + f'section but the "{section_name}" services ' + f'configuration does not exist.' + ) + raise InvalidConfigError(error_msg=error_msg) + + return services_section + + def _get_endpoint_url_config_service(self): + snakecase_service_id = self._transformed_service_id.lower() + return ( + self._get_services_config() + .get(snakecase_service_id, {}) + .get('endpoint_url') + ) + + def _get_endpoint_url_config_global(self): + return self._scoped_config.get('endpoint_url') + + def _get_endpoint_url_environment_service(self): + return EnvironmentProvider( + name=self._get_service_env_var_name(), env=self._environ + ).provide() + + def _get_endpoint_url_environment_global(self): + return EnvironmentProvider( + name='AWS_ENDPOINT_URL', env=self._environ + ).provide() diff --git a/dbtzin/lib/python3.8/site-packages/botocore/credentials.py b/dbtzin/lib/python3.8/site-packages/botocore/credentials.py new file mode 100644 index 00000000..42707b01 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/credentials.py @@ -0,0 +1,2297 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import datetime +import getpass +import json +import logging +import os +import subprocess +import threading +import time +from collections import namedtuple +from copy import deepcopy +from hashlib import sha1 + +from dateutil.parser import parse +from dateutil.tz import tzlocal, tzutc + +import botocore.compat +import botocore.configloader +from botocore import UNSIGNED +from botocore.compat import compat_shell_split, total_seconds +from botocore.config import Config +from botocore.exceptions import ( + ConfigNotFound, + CredentialRetrievalError, + InfiniteLoopConfigError, + InvalidConfigError, + MetadataRetrievalError, + PartialCredentialsError, + RefreshWithMFAUnsupportedError, + UnauthorizedSSOTokenError, + UnknownCredentialError, +) +from botocore.tokens import SSOTokenProvider +from botocore.utils import ( + ContainerMetadataFetcher, + FileWebIdentityTokenLoader, + InstanceMetadataFetcher, + JSONFileCache, + SSOTokenLoader, + parse_key_val_file, + resolve_imds_endpoint_mode, +) + +logger = logging.getLogger(__name__) +ReadOnlyCredentials = namedtuple( + 'ReadOnlyCredentials', ['access_key', 'secret_key', 'token'] +) + +_DEFAULT_MANDATORY_REFRESH_TIMEOUT = 10 * 60 # 10 min +_DEFAULT_ADVISORY_REFRESH_TIMEOUT = 15 * 60 # 15 min + + +def create_credential_resolver(session, cache=None, region_name=None): + """Create a default credential resolver. + + This creates a pre-configured credential resolver + that includes the default lookup chain for + credentials. + + """ + profile_name = session.get_config_variable('profile') or 'default' + metadata_timeout = session.get_config_variable('metadata_service_timeout') + num_attempts = session.get_config_variable('metadata_service_num_attempts') + disable_env_vars = session.instance_variables().get('profile') is not None + + imds_config = { + 'ec2_metadata_service_endpoint': session.get_config_variable( + 'ec2_metadata_service_endpoint' + ), + 'ec2_metadata_service_endpoint_mode': resolve_imds_endpoint_mode( + session + ), + 'ec2_credential_refresh_window': _DEFAULT_ADVISORY_REFRESH_TIMEOUT, + 'ec2_metadata_v1_disabled': session.get_config_variable( + 'ec2_metadata_v1_disabled' + ), + } + + if cache is None: + cache = {} + + env_provider = EnvProvider() + container_provider = ContainerProvider() + instance_metadata_provider = InstanceMetadataProvider( + iam_role_fetcher=InstanceMetadataFetcher( + timeout=metadata_timeout, + num_attempts=num_attempts, + user_agent=session.user_agent(), + config=imds_config, + ) + ) + + profile_provider_builder = ProfileProviderBuilder( + session, cache=cache, region_name=region_name + ) + assume_role_provider = AssumeRoleProvider( + load_config=lambda: session.full_config, + client_creator=_get_client_creator(session, region_name), + cache=cache, + profile_name=profile_name, + credential_sourcer=CanonicalNameCredentialSourcer( + [env_provider, container_provider, instance_metadata_provider] + ), + profile_provider_builder=profile_provider_builder, + ) + + pre_profile = [ + env_provider, + assume_role_provider, + ] + profile_providers = profile_provider_builder.providers( + profile_name=profile_name, + disable_env_vars=disable_env_vars, + ) + post_profile = [ + OriginalEC2Provider(), + BotoProvider(), + container_provider, + instance_metadata_provider, + ] + providers = pre_profile + profile_providers + post_profile + + if disable_env_vars: + # An explicitly provided profile will negate an EnvProvider. + # We will defer to providers that understand the "profile" + # concept to retrieve credentials. + # The one edge case if is all three values are provided via + # env vars: + # export AWS_ACCESS_KEY_ID=foo + # export AWS_SECRET_ACCESS_KEY=bar + # export AWS_PROFILE=baz + # Then, just like our client() calls, the explicit credentials + # will take precedence. + # + # This precedence is enforced by leaving the EnvProvider in the chain. + # This means that the only way a "profile" would win is if the + # EnvProvider does not return credentials, which is what we want + # in this scenario. + providers.remove(env_provider) + logger.debug( + 'Skipping environment variable credential check' + ' because profile name was explicitly set.' + ) + + resolver = CredentialResolver(providers=providers) + return resolver + + +class ProfileProviderBuilder: + """This class handles the creation of profile based providers. + + NOTE: This class is only intended for internal use. + + This class handles the creation and ordering of the various credential + providers that primarly source their configuration from the shared config. + This is needed to enable sharing between the default credential chain and + the source profile chain created by the assume role provider. + """ + + def __init__( + self, session, cache=None, region_name=None, sso_token_cache=None + ): + self._session = session + self._cache = cache + self._region_name = region_name + self._sso_token_cache = sso_token_cache + + def providers(self, profile_name, disable_env_vars=False): + return [ + self._create_web_identity_provider( + profile_name, + disable_env_vars, + ), + self._create_sso_provider(profile_name), + self._create_shared_credential_provider(profile_name), + self._create_process_provider(profile_name), + self._create_config_provider(profile_name), + ] + + def _create_process_provider(self, profile_name): + return ProcessProvider( + profile_name=profile_name, + load_config=lambda: self._session.full_config, + ) + + def _create_shared_credential_provider(self, profile_name): + credential_file = self._session.get_config_variable('credentials_file') + return SharedCredentialProvider( + profile_name=profile_name, + creds_filename=credential_file, + ) + + def _create_config_provider(self, profile_name): + config_file = self._session.get_config_variable('config_file') + return ConfigProvider( + profile_name=profile_name, + config_filename=config_file, + ) + + def _create_web_identity_provider(self, profile_name, disable_env_vars): + return AssumeRoleWithWebIdentityProvider( + load_config=lambda: self._session.full_config, + client_creator=_get_client_creator( + self._session, self._region_name + ), + cache=self._cache, + profile_name=profile_name, + disable_env_vars=disable_env_vars, + ) + + def _create_sso_provider(self, profile_name): + return SSOProvider( + load_config=lambda: self._session.full_config, + client_creator=self._session.create_client, + profile_name=profile_name, + cache=self._cache, + token_cache=self._sso_token_cache, + token_provider=SSOTokenProvider( + self._session, + cache=self._sso_token_cache, + profile_name=profile_name, + ), + ) + + +def get_credentials(session): + resolver = create_credential_resolver(session) + return resolver.load_credentials() + + +def _local_now(): + return datetime.datetime.now(tzlocal()) + + +def _parse_if_needed(value): + if isinstance(value, datetime.datetime): + return value + return parse(value) + + +def _serialize_if_needed(value, iso=False): + if isinstance(value, datetime.datetime): + if iso: + return value.isoformat() + return value.strftime('%Y-%m-%dT%H:%M:%S%Z') + return value + + +def _get_client_creator(session, region_name): + def client_creator(service_name, **kwargs): + create_client_kwargs = {'region_name': region_name} + create_client_kwargs.update(**kwargs) + return session.create_client(service_name, **create_client_kwargs) + + return client_creator + + +def create_assume_role_refresher(client, params): + def refresh(): + response = client.assume_role(**params) + credentials = response['Credentials'] + # We need to normalize the credential names to + # the values expected by the refresh creds. + return { + 'access_key': credentials['AccessKeyId'], + 'secret_key': credentials['SecretAccessKey'], + 'token': credentials['SessionToken'], + 'expiry_time': _serialize_if_needed(credentials['Expiration']), + } + + return refresh + + +def create_mfa_serial_refresher(actual_refresh): + class _Refresher: + def __init__(self, refresh): + self._refresh = refresh + self._has_been_called = False + + def __call__(self): + if self._has_been_called: + # We can explore an option in the future to support + # reprompting for MFA, but for now we just error out + # when the temp creds expire. + raise RefreshWithMFAUnsupportedError() + self._has_been_called = True + return self._refresh() + + return _Refresher(actual_refresh) + + +class Credentials: + """ + Holds the credentials needed to authenticate requests. + + :param str access_key: The access key part of the credentials. + :param str secret_key: The secret key part of the credentials. + :param str token: The security token, valid only for session credentials. + :param str method: A string which identifies where the credentials + were found. + """ + + def __init__(self, access_key, secret_key, token=None, method=None): + self.access_key = access_key + self.secret_key = secret_key + self.token = token + + if method is None: + method = 'explicit' + self.method = method + + self._normalize() + + def _normalize(self): + # Keys would sometimes (accidentally) contain non-ascii characters. + # It would cause a confusing UnicodeDecodeError in Python 2. + # We explicitly convert them into unicode to avoid such error. + # + # Eventually the service will decide whether to accept the credential. + # This also complies with the behavior in Python 3. + self.access_key = botocore.compat.ensure_unicode(self.access_key) + self.secret_key = botocore.compat.ensure_unicode(self.secret_key) + + def get_frozen_credentials(self): + return ReadOnlyCredentials( + self.access_key, self.secret_key, self.token + ) + + +class RefreshableCredentials(Credentials): + """ + Holds the credentials needed to authenticate requests. In addition, it + knows how to refresh itself. + + :param str access_key: The access key part of the credentials. + :param str secret_key: The secret key part of the credentials. + :param str token: The security token, valid only for session credentials. + :param datetime expiry_time: The expiration time of the credentials. + :param function refresh_using: Callback function to refresh the credentials. + :param str method: A string which identifies where the credentials + were found. + :param function time_fetcher: Callback function to retrieve current time. + """ + + # The time at which we'll attempt to refresh, but not + # block if someone else is refreshing. + _advisory_refresh_timeout = _DEFAULT_ADVISORY_REFRESH_TIMEOUT + # The time at which all threads will block waiting for + # refreshed credentials. + _mandatory_refresh_timeout = _DEFAULT_MANDATORY_REFRESH_TIMEOUT + + def __init__( + self, + access_key, + secret_key, + token, + expiry_time, + refresh_using, + method, + time_fetcher=_local_now, + advisory_timeout=None, + mandatory_timeout=None, + ): + self._refresh_using = refresh_using + self._access_key = access_key + self._secret_key = secret_key + self._token = token + self._expiry_time = expiry_time + self._time_fetcher = time_fetcher + self._refresh_lock = threading.Lock() + self.method = method + self._frozen_credentials = ReadOnlyCredentials( + access_key, secret_key, token + ) + self._normalize() + if advisory_timeout is not None: + self._advisory_refresh_timeout = advisory_timeout + if mandatory_timeout is not None: + self._mandatory_refresh_timeout = mandatory_timeout + + def _normalize(self): + self._access_key = botocore.compat.ensure_unicode(self._access_key) + self._secret_key = botocore.compat.ensure_unicode(self._secret_key) + + @classmethod + def create_from_metadata( + cls, + metadata, + refresh_using, + method, + advisory_timeout=None, + mandatory_timeout=None, + ): + kwargs = {} + if advisory_timeout is not None: + kwargs['advisory_timeout'] = advisory_timeout + if mandatory_timeout is not None: + kwargs['mandatory_timeout'] = mandatory_timeout + + instance = cls( + access_key=metadata['access_key'], + secret_key=metadata['secret_key'], + token=metadata['token'], + expiry_time=cls._expiry_datetime(metadata['expiry_time']), + method=method, + refresh_using=refresh_using, + **kwargs, + ) + return instance + + @property + def access_key(self): + """Warning: Using this property can lead to race conditions if you + access another property subsequently along the refresh boundary. + Please use get_frozen_credentials instead. + """ + self._refresh() + return self._access_key + + @access_key.setter + def access_key(self, value): + self._access_key = value + + @property + def secret_key(self): + """Warning: Using this property can lead to race conditions if you + access another property subsequently along the refresh boundary. + Please use get_frozen_credentials instead. + """ + self._refresh() + return self._secret_key + + @secret_key.setter + def secret_key(self, value): + self._secret_key = value + + @property + def token(self): + """Warning: Using this property can lead to race conditions if you + access another property subsequently along the refresh boundary. + Please use get_frozen_credentials instead. + """ + self._refresh() + return self._token + + @token.setter + def token(self, value): + self._token = value + + def _seconds_remaining(self): + delta = self._expiry_time - self._time_fetcher() + return total_seconds(delta) + + def refresh_needed(self, refresh_in=None): + """Check if a refresh is needed. + + A refresh is needed if the expiry time associated + with the temporary credentials is less than the + provided ``refresh_in``. If ``time_delta`` is not + provided, ``self.advisory_refresh_needed`` will be used. + + For example, if your temporary credentials expire + in 10 minutes and the provided ``refresh_in`` is + ``15 * 60``, then this function will return ``True``. + + :type refresh_in: int + :param refresh_in: The number of seconds before the + credentials expire in which refresh attempts should + be made. + + :return: True if refresh needed, False otherwise. + + """ + if self._expiry_time is None: + # No expiration, so assume we don't need to refresh. + return False + + if refresh_in is None: + refresh_in = self._advisory_refresh_timeout + # The credentials should be refreshed if they're going to expire + # in less than 5 minutes. + if self._seconds_remaining() >= refresh_in: + # There's enough time left. Don't refresh. + return False + logger.debug("Credentials need to be refreshed.") + return True + + def _is_expired(self): + # Checks if the current credentials are expired. + return self.refresh_needed(refresh_in=0) + + def _refresh(self): + # In the common case where we don't need a refresh, we + # can immediately exit and not require acquiring the + # refresh lock. + if not self.refresh_needed(self._advisory_refresh_timeout): + return + + # acquire() doesn't accept kwargs, but False is indicating + # that we should not block if we can't acquire the lock. + # If we aren't able to acquire the lock, we'll trigger + # the else clause. + if self._refresh_lock.acquire(False): + try: + if not self.refresh_needed(self._advisory_refresh_timeout): + return + is_mandatory_refresh = self.refresh_needed( + self._mandatory_refresh_timeout + ) + self._protected_refresh(is_mandatory=is_mandatory_refresh) + return + finally: + self._refresh_lock.release() + elif self.refresh_needed(self._mandatory_refresh_timeout): + # If we're within the mandatory refresh window, + # we must block until we get refreshed credentials. + with self._refresh_lock: + if not self.refresh_needed(self._mandatory_refresh_timeout): + return + self._protected_refresh(is_mandatory=True) + + def _protected_refresh(self, is_mandatory): + # precondition: this method should only be called if you've acquired + # the self._refresh_lock. + try: + metadata = self._refresh_using() + except Exception: + period_name = 'mandatory' if is_mandatory else 'advisory' + logger.warning( + "Refreshing temporary credentials failed " + "during %s refresh period.", + period_name, + exc_info=True, + ) + if is_mandatory: + # If this is a mandatory refresh, then + # all errors that occur when we attempt to refresh + # credentials are propagated back to the user. + raise + # Otherwise we'll just return. + # The end result will be that we'll use the current + # set of temporary credentials we have. + return + self._set_from_data(metadata) + self._frozen_credentials = ReadOnlyCredentials( + self._access_key, self._secret_key, self._token + ) + if self._is_expired(): + # We successfully refreshed credentials but for whatever + # reason, our refreshing function returned credentials + # that are still expired. In this scenario, the only + # thing we can do is let the user know and raise + # an exception. + msg = ( + "Credentials were refreshed, but the " + "refreshed credentials are still expired." + ) + logger.warning(msg) + raise RuntimeError(msg) + + @staticmethod + def _expiry_datetime(time_str): + return parse(time_str) + + def _set_from_data(self, data): + expected_keys = ['access_key', 'secret_key', 'token', 'expiry_time'] + if not data: + missing_keys = expected_keys + else: + missing_keys = [k for k in expected_keys if k not in data] + + if missing_keys: + message = "Credential refresh failed, response did not contain: %s" + raise CredentialRetrievalError( + provider=self.method, + error_msg=message % ', '.join(missing_keys), + ) + + self.access_key = data['access_key'] + self.secret_key = data['secret_key'] + self.token = data['token'] + self._expiry_time = parse(data['expiry_time']) + logger.debug( + "Retrieved credentials will expire at: %s", self._expiry_time + ) + self._normalize() + + def get_frozen_credentials(self): + """Return immutable credentials. + + The ``access_key``, ``secret_key``, and ``token`` properties + on this class will always check and refresh credentials if + needed before returning the particular credentials. + + This has an edge case where you can get inconsistent + credentials. Imagine this: + + # Current creds are "t1" + tmp.access_key ---> expired? no, so return t1.access_key + # ---- time is now expired, creds need refreshing to "t2" ---- + tmp.secret_key ---> expired? yes, refresh and return t2.secret_key + + This means we're using the access key from t1 with the secret key + from t2. To fix this issue, you can request a frozen credential object + which is guaranteed not to change. + + The frozen credentials returned from this method should be used + immediately and then discarded. The typical usage pattern would + be:: + + creds = RefreshableCredentials(...) + some_code = SomeSignerObject() + # I'm about to sign the request. + # The frozen credentials are only used for the + # duration of generate_presigned_url and will be + # immediately thrown away. + request = some_code.sign_some_request( + with_credentials=creds.get_frozen_credentials()) + print("Signed request:", request) + + """ + self._refresh() + return self._frozen_credentials + + +class DeferredRefreshableCredentials(RefreshableCredentials): + """Refreshable credentials that don't require initial credentials. + + refresh_using will be called upon first access. + """ + + def __init__(self, refresh_using, method, time_fetcher=_local_now): + self._refresh_using = refresh_using + self._access_key = None + self._secret_key = None + self._token = None + self._expiry_time = None + self._time_fetcher = time_fetcher + self._refresh_lock = threading.Lock() + self.method = method + self._frozen_credentials = None + + def refresh_needed(self, refresh_in=None): + if self._frozen_credentials is None: + return True + return super().refresh_needed(refresh_in) + + +class CachedCredentialFetcher: + DEFAULT_EXPIRY_WINDOW_SECONDS = 60 * 15 + + def __init__(self, cache=None, expiry_window_seconds=None): + if cache is None: + cache = {} + self._cache = cache + self._cache_key = self._create_cache_key() + if expiry_window_seconds is None: + expiry_window_seconds = self.DEFAULT_EXPIRY_WINDOW_SECONDS + self._expiry_window_seconds = expiry_window_seconds + + def _create_cache_key(self): + raise NotImplementedError('_create_cache_key()') + + def _make_file_safe(self, filename): + # Replace :, path sep, and / to make it the string filename safe. + filename = filename.replace(':', '_').replace(os.sep, '_') + return filename.replace('/', '_') + + def _get_credentials(self): + raise NotImplementedError('_get_credentials()') + + def fetch_credentials(self): + return self._get_cached_credentials() + + def _get_cached_credentials(self): + """Get up-to-date credentials. + + This will check the cache for up-to-date credentials, calling assume + role if none are available. + """ + response = self._load_from_cache() + if response is None: + response = self._get_credentials() + self._write_to_cache(response) + else: + logger.debug("Credentials for role retrieved from cache.") + + creds = response['Credentials'] + expiration = _serialize_if_needed(creds['Expiration'], iso=True) + return { + 'access_key': creds['AccessKeyId'], + 'secret_key': creds['SecretAccessKey'], + 'token': creds['SessionToken'], + 'expiry_time': expiration, + } + + def _load_from_cache(self): + if self._cache_key in self._cache: + creds = deepcopy(self._cache[self._cache_key]) + if not self._is_expired(creds): + return creds + else: + logger.debug( + "Credentials were found in cache, but they are expired." + ) + return None + + def _write_to_cache(self, response): + self._cache[self._cache_key] = deepcopy(response) + + def _is_expired(self, credentials): + """Check if credentials are expired.""" + end_time = _parse_if_needed(credentials['Credentials']['Expiration']) + seconds = total_seconds(end_time - _local_now()) + return seconds < self._expiry_window_seconds + + +class BaseAssumeRoleCredentialFetcher(CachedCredentialFetcher): + def __init__( + self, + client_creator, + role_arn, + extra_args=None, + cache=None, + expiry_window_seconds=None, + ): + self._client_creator = client_creator + self._role_arn = role_arn + + if extra_args is None: + self._assume_kwargs = {} + else: + self._assume_kwargs = deepcopy(extra_args) + self._assume_kwargs['RoleArn'] = self._role_arn + + self._role_session_name = self._assume_kwargs.get('RoleSessionName') + self._using_default_session_name = False + if not self._role_session_name: + self._generate_assume_role_name() + + super().__init__(cache, expiry_window_seconds) + + def _generate_assume_role_name(self): + self._role_session_name = 'botocore-session-%s' % (int(time.time())) + self._assume_kwargs['RoleSessionName'] = self._role_session_name + self._using_default_session_name = True + + def _create_cache_key(self): + """Create a predictable cache key for the current configuration. + + The cache key is intended to be compatible with file names. + """ + args = deepcopy(self._assume_kwargs) + + # The role session name gets randomly generated, so we don't want it + # in the hash. + if self._using_default_session_name: + del args['RoleSessionName'] + + if 'Policy' in args: + # To have a predictable hash, the keys of the policy must be + # sorted, so we have to load it here to make sure it gets sorted + # later on. + args['Policy'] = json.loads(args['Policy']) + + args = json.dumps(args, sort_keys=True) + argument_hash = sha1(args.encode('utf-8')).hexdigest() + return self._make_file_safe(argument_hash) + + +class AssumeRoleCredentialFetcher(BaseAssumeRoleCredentialFetcher): + def __init__( + self, + client_creator, + source_credentials, + role_arn, + extra_args=None, + mfa_prompter=None, + cache=None, + expiry_window_seconds=None, + ): + """ + :type client_creator: callable + :param client_creator: A callable that creates a client taking + arguments like ``Session.create_client``. + + :type source_credentials: Credentials + :param source_credentials: The credentials to use to create the + client for the call to AssumeRole. + + :type role_arn: str + :param role_arn: The ARN of the role to be assumed. + + :type extra_args: dict + :param extra_args: Any additional arguments to add to the assume + role request using the format of the botocore operation. + Possible keys include, but may not be limited to, + DurationSeconds, Policy, SerialNumber, ExternalId and + RoleSessionName. + + :type mfa_prompter: callable + :param mfa_prompter: A callable that returns input provided by the + user (i.e raw_input, getpass.getpass, etc.). + + :type cache: dict + :param cache: An object that supports ``__getitem__``, + ``__setitem__``, and ``__contains__``. An example of this is + the ``JSONFileCache`` class in aws-cli. + + :type expiry_window_seconds: int + :param expiry_window_seconds: The amount of time, in seconds, + """ + self._source_credentials = source_credentials + self._mfa_prompter = mfa_prompter + if self._mfa_prompter is None: + self._mfa_prompter = getpass.getpass + + super().__init__( + client_creator, + role_arn, + extra_args=extra_args, + cache=cache, + expiry_window_seconds=expiry_window_seconds, + ) + + def _get_credentials(self): + """Get credentials by calling assume role.""" + kwargs = self._assume_role_kwargs() + client = self._create_client() + return client.assume_role(**kwargs) + + def _assume_role_kwargs(self): + """Get the arguments for assume role based on current configuration.""" + assume_role_kwargs = deepcopy(self._assume_kwargs) + + mfa_serial = assume_role_kwargs.get('SerialNumber') + + if mfa_serial is not None: + prompt = 'Enter MFA code for %s: ' % mfa_serial + token_code = self._mfa_prompter(prompt) + assume_role_kwargs['TokenCode'] = token_code + + duration_seconds = assume_role_kwargs.get('DurationSeconds') + + if duration_seconds is not None: + assume_role_kwargs['DurationSeconds'] = duration_seconds + + return assume_role_kwargs + + def _create_client(self): + """Create an STS client using the source credentials.""" + frozen_credentials = self._source_credentials.get_frozen_credentials() + return self._client_creator( + 'sts', + aws_access_key_id=frozen_credentials.access_key, + aws_secret_access_key=frozen_credentials.secret_key, + aws_session_token=frozen_credentials.token, + ) + + +class AssumeRoleWithWebIdentityCredentialFetcher( + BaseAssumeRoleCredentialFetcher +): + def __init__( + self, + client_creator, + web_identity_token_loader, + role_arn, + extra_args=None, + cache=None, + expiry_window_seconds=None, + ): + """ + :type client_creator: callable + :param client_creator: A callable that creates a client taking + arguments like ``Session.create_client``. + + :type web_identity_token_loader: callable + :param web_identity_token_loader: A callable that takes no arguments + and returns a web identity token str. + + :type role_arn: str + :param role_arn: The ARN of the role to be assumed. + + :type extra_args: dict + :param extra_args: Any additional arguments to add to the assume + role request using the format of the botocore operation. + Possible keys include, but may not be limited to, + DurationSeconds, Policy, SerialNumber, ExternalId and + RoleSessionName. + + :type cache: dict + :param cache: An object that supports ``__getitem__``, + ``__setitem__``, and ``__contains__``. An example of this is + the ``JSONFileCache`` class in aws-cli. + + :type expiry_window_seconds: int + :param expiry_window_seconds: The amount of time, in seconds, + """ + self._web_identity_token_loader = web_identity_token_loader + + super().__init__( + client_creator, + role_arn, + extra_args=extra_args, + cache=cache, + expiry_window_seconds=expiry_window_seconds, + ) + + def _get_credentials(self): + """Get credentials by calling assume role.""" + kwargs = self._assume_role_kwargs() + # Assume role with web identity does not require credentials other than + # the token, explicitly configure the client to not sign requests. + config = Config(signature_version=UNSIGNED) + client = self._client_creator('sts', config=config) + return client.assume_role_with_web_identity(**kwargs) + + def _assume_role_kwargs(self): + """Get the arguments for assume role based on current configuration.""" + assume_role_kwargs = deepcopy(self._assume_kwargs) + identity_token = self._web_identity_token_loader() + assume_role_kwargs['WebIdentityToken'] = identity_token + + return assume_role_kwargs + + +class CredentialProvider: + # A short name to identify the provider within botocore. + METHOD = None + + # A name to identify the provider for use in cross-sdk features like + # assume role's `credential_source` configuration option. These names + # are to be treated in a case-insensitive way. NOTE: any providers not + # implemented in botocore MUST prefix their canonical names with + # 'custom' or we DO NOT guarantee that it will work with any features + # that this provides. + CANONICAL_NAME = None + + def __init__(self, session=None): + self.session = session + + def load(self): + """ + Loads the credentials from their source & sets them on the object. + + Subclasses should implement this method (by reading from disk, the + environment, the network or wherever), returning ``True`` if they were + found & loaded. + + If not found, this method should return ``False``, indictating that the + ``CredentialResolver`` should fall back to the next available method. + + The default implementation does nothing, assuming the user has set the + ``access_key/secret_key/token`` themselves. + + :returns: Whether credentials were found & set + :rtype: Credentials + """ + return True + + def _extract_creds_from_mapping(self, mapping, *key_names): + found = [] + for key_name in key_names: + try: + found.append(mapping[key_name]) + except KeyError: + raise PartialCredentialsError( + provider=self.METHOD, cred_var=key_name + ) + return found + + +class ProcessProvider(CredentialProvider): + METHOD = 'custom-process' + + def __init__(self, profile_name, load_config, popen=subprocess.Popen): + self._profile_name = profile_name + self._load_config = load_config + self._loaded_config = None + self._popen = popen + + def load(self): + credential_process = self._credential_process + if credential_process is None: + return + + creds_dict = self._retrieve_credentials_using(credential_process) + if creds_dict.get('expiry_time') is not None: + return RefreshableCredentials.create_from_metadata( + creds_dict, + lambda: self._retrieve_credentials_using(credential_process), + self.METHOD, + ) + + return Credentials( + access_key=creds_dict['access_key'], + secret_key=creds_dict['secret_key'], + token=creds_dict.get('token'), + method=self.METHOD, + ) + + def _retrieve_credentials_using(self, credential_process): + # We're not using shell=True, so we need to pass the + # command and all arguments as a list. + process_list = compat_shell_split(credential_process) + p = self._popen( + process_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + stdout, stderr = p.communicate() + if p.returncode != 0: + raise CredentialRetrievalError( + provider=self.METHOD, error_msg=stderr.decode('utf-8') + ) + parsed = botocore.compat.json.loads(stdout.decode('utf-8')) + version = parsed.get('Version', '') + if version != 1: + raise CredentialRetrievalError( + provider=self.METHOD, + error_msg=( + f"Unsupported version '{version}' for credential process " + f"provider, supported versions: 1" + ), + ) + try: + return { + 'access_key': parsed['AccessKeyId'], + 'secret_key': parsed['SecretAccessKey'], + 'token': parsed.get('SessionToken'), + 'expiry_time': parsed.get('Expiration'), + } + except KeyError as e: + raise CredentialRetrievalError( + provider=self.METHOD, + error_msg=f"Missing required key in response: {e}", + ) + + @property + def _credential_process(self): + if self._loaded_config is None: + self._loaded_config = self._load_config() + profile_config = self._loaded_config.get('profiles', {}).get( + self._profile_name, {} + ) + return profile_config.get('credential_process') + + +class InstanceMetadataProvider(CredentialProvider): + METHOD = 'iam-role' + CANONICAL_NAME = 'Ec2InstanceMetadata' + + def __init__(self, iam_role_fetcher): + self._role_fetcher = iam_role_fetcher + + def load(self): + fetcher = self._role_fetcher + # We do the first request, to see if we get useful data back. + # If not, we'll pass & move on to whatever's next in the credential + # chain. + metadata = fetcher.retrieve_iam_role_credentials() + if not metadata: + return None + logger.info( + 'Found credentials from IAM Role: %s', metadata['role_name'] + ) + # We manually set the data here, since we already made the request & + # have it. When the expiry is hit, the credentials will auto-refresh + # themselves. + creds = RefreshableCredentials.create_from_metadata( + metadata, + method=self.METHOD, + refresh_using=fetcher.retrieve_iam_role_credentials, + ) + return creds + + +class EnvProvider(CredentialProvider): + METHOD = 'env' + CANONICAL_NAME = 'Environment' + ACCESS_KEY = 'AWS_ACCESS_KEY_ID' + SECRET_KEY = 'AWS_SECRET_ACCESS_KEY' + # The token can come from either of these env var. + # AWS_SESSION_TOKEN is what other AWS SDKs have standardized on. + TOKENS = ['AWS_SECURITY_TOKEN', 'AWS_SESSION_TOKEN'] + EXPIRY_TIME = 'AWS_CREDENTIAL_EXPIRATION' + + def __init__(self, environ=None, mapping=None): + """ + + :param environ: The environment variables (defaults to + ``os.environ`` if no value is provided). + :param mapping: An optional mapping of variable names to + environment variable names. Use this if you want to + change the mapping of access_key->AWS_ACCESS_KEY_ID, etc. + The dict can have up to 3 keys: ``access_key``, ``secret_key``, + ``session_token``. + """ + if environ is None: + environ = os.environ + self.environ = environ + self._mapping = self._build_mapping(mapping) + + def _build_mapping(self, mapping): + # Mapping of variable name to env var name. + var_mapping = {} + if mapping is None: + # Use the class var default. + var_mapping['access_key'] = self.ACCESS_KEY + var_mapping['secret_key'] = self.SECRET_KEY + var_mapping['token'] = self.TOKENS + var_mapping['expiry_time'] = self.EXPIRY_TIME + else: + var_mapping['access_key'] = mapping.get( + 'access_key', self.ACCESS_KEY + ) + var_mapping['secret_key'] = mapping.get( + 'secret_key', self.SECRET_KEY + ) + var_mapping['token'] = mapping.get('token', self.TOKENS) + if not isinstance(var_mapping['token'], list): + var_mapping['token'] = [var_mapping['token']] + var_mapping['expiry_time'] = mapping.get( + 'expiry_time', self.EXPIRY_TIME + ) + return var_mapping + + def load(self): + """ + Search for credentials in explicit environment variables. + """ + + access_key = self.environ.get(self._mapping['access_key'], '') + + if access_key: + logger.info('Found credentials in environment variables.') + fetcher = self._create_credentials_fetcher() + credentials = fetcher(require_expiry=False) + + expiry_time = credentials['expiry_time'] + if expiry_time is not None: + expiry_time = parse(expiry_time) + return RefreshableCredentials( + credentials['access_key'], + credentials['secret_key'], + credentials['token'], + expiry_time, + refresh_using=fetcher, + method=self.METHOD, + ) + + return Credentials( + credentials['access_key'], + credentials['secret_key'], + credentials['token'], + method=self.METHOD, + ) + else: + return None + + def _create_credentials_fetcher(self): + mapping = self._mapping + method = self.METHOD + environ = self.environ + + def fetch_credentials(require_expiry=True): + credentials = {} + + access_key = environ.get(mapping['access_key'], '') + if not access_key: + raise PartialCredentialsError( + provider=method, cred_var=mapping['access_key'] + ) + credentials['access_key'] = access_key + + secret_key = environ.get(mapping['secret_key'], '') + if not secret_key: + raise PartialCredentialsError( + provider=method, cred_var=mapping['secret_key'] + ) + credentials['secret_key'] = secret_key + + credentials['token'] = None + for token_env_var in mapping['token']: + token = environ.get(token_env_var, '') + if token: + credentials['token'] = token + break + + credentials['expiry_time'] = None + expiry_time = environ.get(mapping['expiry_time'], '') + if expiry_time: + credentials['expiry_time'] = expiry_time + if require_expiry and not expiry_time: + raise PartialCredentialsError( + provider=method, cred_var=mapping['expiry_time'] + ) + + return credentials + + return fetch_credentials + + +class OriginalEC2Provider(CredentialProvider): + METHOD = 'ec2-credentials-file' + CANONICAL_NAME = 'Ec2Config' + + CRED_FILE_ENV = 'AWS_CREDENTIAL_FILE' + ACCESS_KEY = 'AWSAccessKeyId' + SECRET_KEY = 'AWSSecretKey' + + def __init__(self, environ=None, parser=None): + if environ is None: + environ = os.environ + if parser is None: + parser = parse_key_val_file + self._environ = environ + self._parser = parser + + def load(self): + """ + Search for a credential file used by original EC2 CLI tools. + """ + if 'AWS_CREDENTIAL_FILE' in self._environ: + full_path = os.path.expanduser( + self._environ['AWS_CREDENTIAL_FILE'] + ) + creds = self._parser(full_path) + if self.ACCESS_KEY in creds: + logger.info('Found credentials in AWS_CREDENTIAL_FILE.') + access_key = creds[self.ACCESS_KEY] + secret_key = creds[self.SECRET_KEY] + # EC2 creds file doesn't support session tokens. + return Credentials(access_key, secret_key, method=self.METHOD) + else: + return None + + +class SharedCredentialProvider(CredentialProvider): + METHOD = 'shared-credentials-file' + CANONICAL_NAME = 'SharedCredentials' + + ACCESS_KEY = 'aws_access_key_id' + SECRET_KEY = 'aws_secret_access_key' + # Same deal as the EnvProvider above. Botocore originally supported + # aws_security_token, but the SDKs are standardizing on aws_session_token + # so we support both. + TOKENS = ['aws_security_token', 'aws_session_token'] + + def __init__(self, creds_filename, profile_name=None, ini_parser=None): + self._creds_filename = creds_filename + if profile_name is None: + profile_name = 'default' + self._profile_name = profile_name + if ini_parser is None: + ini_parser = botocore.configloader.raw_config_parse + self._ini_parser = ini_parser + + def load(self): + try: + available_creds = self._ini_parser(self._creds_filename) + except ConfigNotFound: + return None + if self._profile_name in available_creds: + config = available_creds[self._profile_name] + if self.ACCESS_KEY in config: + logger.info( + "Found credentials in shared credentials file: %s", + self._creds_filename, + ) + access_key, secret_key = self._extract_creds_from_mapping( + config, self.ACCESS_KEY, self.SECRET_KEY + ) + token = self._get_session_token(config) + return Credentials( + access_key, secret_key, token, method=self.METHOD + ) + + def _get_session_token(self, config): + for token_envvar in self.TOKENS: + if token_envvar in config: + return config[token_envvar] + + +class ConfigProvider(CredentialProvider): + """INI based config provider with profile sections.""" + + METHOD = 'config-file' + CANONICAL_NAME = 'SharedConfig' + + ACCESS_KEY = 'aws_access_key_id' + SECRET_KEY = 'aws_secret_access_key' + # Same deal as the EnvProvider above. Botocore originally supported + # aws_security_token, but the SDKs are standardizing on aws_session_token + # so we support both. + TOKENS = ['aws_security_token', 'aws_session_token'] + + def __init__(self, config_filename, profile_name, config_parser=None): + """ + + :param config_filename: The session configuration scoped to the current + profile. This is available via ``session.config``. + :param profile_name: The name of the current profile. + :param config_parser: A config parser callable. + + """ + self._config_filename = config_filename + self._profile_name = profile_name + if config_parser is None: + config_parser = botocore.configloader.load_config + self._config_parser = config_parser + + def load(self): + """ + If there is are credentials in the configuration associated with + the session, use those. + """ + try: + full_config = self._config_parser(self._config_filename) + except ConfigNotFound: + return None + if self._profile_name in full_config['profiles']: + profile_config = full_config['profiles'][self._profile_name] + if self.ACCESS_KEY in profile_config: + logger.info( + "Credentials found in config file: %s", + self._config_filename, + ) + access_key, secret_key = self._extract_creds_from_mapping( + profile_config, self.ACCESS_KEY, self.SECRET_KEY + ) + token = self._get_session_token(profile_config) + return Credentials( + access_key, secret_key, token, method=self.METHOD + ) + else: + return None + + def _get_session_token(self, profile_config): + for token_name in self.TOKENS: + if token_name in profile_config: + return profile_config[token_name] + + +class BotoProvider(CredentialProvider): + METHOD = 'boto-config' + CANONICAL_NAME = 'Boto2Config' + + BOTO_CONFIG_ENV = 'BOTO_CONFIG' + DEFAULT_CONFIG_FILENAMES = ['/etc/boto.cfg', '~/.boto'] + ACCESS_KEY = 'aws_access_key_id' + SECRET_KEY = 'aws_secret_access_key' + + def __init__(self, environ=None, ini_parser=None): + if environ is None: + environ = os.environ + if ini_parser is None: + ini_parser = botocore.configloader.raw_config_parse + self._environ = environ + self._ini_parser = ini_parser + + def load(self): + """ + Look for credentials in boto config file. + """ + if self.BOTO_CONFIG_ENV in self._environ: + potential_locations = [self._environ[self.BOTO_CONFIG_ENV]] + else: + potential_locations = self.DEFAULT_CONFIG_FILENAMES + for filename in potential_locations: + try: + config = self._ini_parser(filename) + except ConfigNotFound: + # Move on to the next potential config file name. + continue + if 'Credentials' in config: + credentials = config['Credentials'] + if self.ACCESS_KEY in credentials: + logger.info( + "Found credentials in boto config file: %s", filename + ) + access_key, secret_key = self._extract_creds_from_mapping( + credentials, self.ACCESS_KEY, self.SECRET_KEY + ) + return Credentials( + access_key, secret_key, method=self.METHOD + ) + + +class AssumeRoleProvider(CredentialProvider): + METHOD = 'assume-role' + # The AssumeRole provider is logically part of the SharedConfig and + # SharedCredentials providers. Since the purpose of the canonical name + # is to provide cross-sdk compatibility, calling code will need to be + # aware that either of those providers should be tied to the AssumeRole + # provider as much as possible. + CANONICAL_NAME = None + ROLE_CONFIG_VAR = 'role_arn' + WEB_IDENTITY_TOKE_FILE_VAR = 'web_identity_token_file' + # Credentials are considered expired (and will be refreshed) once the total + # remaining time left until the credentials expires is less than the + # EXPIRY_WINDOW. + EXPIRY_WINDOW_SECONDS = 60 * 15 + + def __init__( + self, + load_config, + client_creator, + cache, + profile_name, + prompter=getpass.getpass, + credential_sourcer=None, + profile_provider_builder=None, + ): + """ + :type load_config: callable + :param load_config: A function that accepts no arguments, and + when called, will return the full configuration dictionary + for the session (``session.full_config``). + + :type client_creator: callable + :param client_creator: A factory function that will create + a client when called. Has the same interface as + ``botocore.session.Session.create_client``. + + :type cache: dict + :param cache: An object that supports ``__getitem__``, + ``__setitem__``, and ``__contains__``. An example + of this is the ``JSONFileCache`` class in the CLI. + + :type profile_name: str + :param profile_name: The name of the profile. + + :type prompter: callable + :param prompter: A callable that returns input provided + by the user (i.e raw_input, getpass.getpass, etc.). + + :type credential_sourcer: CanonicalNameCredentialSourcer + :param credential_sourcer: A credential provider that takes a + configuration, which is used to provide the source credentials + for the STS call. + """ + #: The cache used to first check for assumed credentials. + #: This is checked before making the AssumeRole API + #: calls and can be useful if you have short lived + #: scripts and you'd like to avoid calling AssumeRole + #: until the credentials are expired. + self.cache = cache + self._load_config = load_config + # client_creator is a callable that creates function. + # It's basically session.create_client + self._client_creator = client_creator + self._profile_name = profile_name + self._prompter = prompter + # The _loaded_config attribute will be populated from the + # load_config() function once the configuration is actually + # loaded. The reason we go through all this instead of just + # requiring that the loaded_config be passed to us is to that + # we can defer configuration loaded until we actually try + # to load credentials (as opposed to when the object is + # instantiated). + self._loaded_config = {} + self._credential_sourcer = credential_sourcer + self._profile_provider_builder = profile_provider_builder + self._visited_profiles = [self._profile_name] + + def load(self): + self._loaded_config = self._load_config() + profiles = self._loaded_config.get('profiles', {}) + profile = profiles.get(self._profile_name, {}) + if self._has_assume_role_config_vars(profile): + return self._load_creds_via_assume_role(self._profile_name) + + def _has_assume_role_config_vars(self, profile): + return ( + self.ROLE_CONFIG_VAR in profile + and + # We need to ensure this provider doesn't look at a profile when + # the profile has configuration for web identity. Simply relying on + # the order in the credential chain is insufficient as it doesn't + # prevent the case when we're doing an assume role chain. + self.WEB_IDENTITY_TOKE_FILE_VAR not in profile + ) + + def _load_creds_via_assume_role(self, profile_name): + role_config = self._get_role_config(profile_name) + source_credentials = self._resolve_source_credentials( + role_config, profile_name + ) + + extra_args = {} + role_session_name = role_config.get('role_session_name') + if role_session_name is not None: + extra_args['RoleSessionName'] = role_session_name + + external_id = role_config.get('external_id') + if external_id is not None: + extra_args['ExternalId'] = external_id + + mfa_serial = role_config.get('mfa_serial') + if mfa_serial is not None: + extra_args['SerialNumber'] = mfa_serial + + duration_seconds = role_config.get('duration_seconds') + if duration_seconds is not None: + extra_args['DurationSeconds'] = duration_seconds + + fetcher = AssumeRoleCredentialFetcher( + client_creator=self._client_creator, + source_credentials=source_credentials, + role_arn=role_config['role_arn'], + extra_args=extra_args, + mfa_prompter=self._prompter, + cache=self.cache, + ) + refresher = fetcher.fetch_credentials + if mfa_serial is not None: + refresher = create_mfa_serial_refresher(refresher) + + # The initial credentials are empty and the expiration time is set + # to now so that we can delay the call to assume role until it is + # strictly needed. + return DeferredRefreshableCredentials( + method=self.METHOD, + refresh_using=refresher, + time_fetcher=_local_now, + ) + + def _get_role_config(self, profile_name): + """Retrieves and validates the role configuration for the profile.""" + profiles = self._loaded_config.get('profiles', {}) + + profile = profiles[profile_name] + source_profile = profile.get('source_profile') + role_arn = profile['role_arn'] + credential_source = profile.get('credential_source') + mfa_serial = profile.get('mfa_serial') + external_id = profile.get('external_id') + role_session_name = profile.get('role_session_name') + duration_seconds = profile.get('duration_seconds') + + role_config = { + 'role_arn': role_arn, + 'external_id': external_id, + 'mfa_serial': mfa_serial, + 'role_session_name': role_session_name, + 'source_profile': source_profile, + 'credential_source': credential_source, + } + + if duration_seconds is not None: + try: + role_config['duration_seconds'] = int(duration_seconds) + except ValueError: + pass + + # Either the credential source or the source profile must be + # specified, but not both. + if credential_source is not None and source_profile is not None: + raise InvalidConfigError( + error_msg=( + 'The profile "%s" contains both source_profile and ' + 'credential_source.' % profile_name + ) + ) + elif credential_source is None and source_profile is None: + raise PartialCredentialsError( + provider=self.METHOD, + cred_var='source_profile or credential_source', + ) + elif credential_source is not None: + self._validate_credential_source(profile_name, credential_source) + else: + self._validate_source_profile(profile_name, source_profile) + + return role_config + + def _validate_credential_source(self, parent_profile, credential_source): + if self._credential_sourcer is None: + raise InvalidConfigError( + error_msg=( + f"The credential_source \"{credential_source}\" is specified " + f"in profile \"{parent_profile}\", " + f"but no source provider was configured." + ) + ) + if not self._credential_sourcer.is_supported(credential_source): + raise InvalidConfigError( + error_msg=( + f"The credential source \"{credential_source}\" referenced " + f"in profile \"{parent_profile}\" is not valid." + ) + ) + + def _source_profile_has_credentials(self, profile): + return any( + [ + self._has_static_credentials(profile), + self._has_assume_role_config_vars(profile), + ] + ) + + def _validate_source_profile( + self, parent_profile_name, source_profile_name + ): + profiles = self._loaded_config.get('profiles', {}) + if source_profile_name not in profiles: + raise InvalidConfigError( + error_msg=( + f"The source_profile \"{source_profile_name}\" referenced in " + f"the profile \"{parent_profile_name}\" does not exist." + ) + ) + + source_profile = profiles[source_profile_name] + + # Make sure we aren't going into an infinite loop. If we haven't + # visited the profile yet, we're good. + if source_profile_name not in self._visited_profiles: + return + + # If we have visited the profile and the profile isn't simply + # referencing itself, that's an infinite loop. + if source_profile_name != parent_profile_name: + raise InfiniteLoopConfigError( + source_profile=source_profile_name, + visited_profiles=self._visited_profiles, + ) + + # A profile is allowed to reference itself so that it can source + # static credentials and have configuration all in the same + # profile. This will only ever work for the top level assume + # role because the static credentials will otherwise take + # precedence. + if not self._has_static_credentials(source_profile): + raise InfiniteLoopConfigError( + source_profile=source_profile_name, + visited_profiles=self._visited_profiles, + ) + + def _has_static_credentials(self, profile): + static_keys = ['aws_secret_access_key', 'aws_access_key_id'] + return any(static_key in profile for static_key in static_keys) + + def _resolve_source_credentials(self, role_config, profile_name): + credential_source = role_config.get('credential_source') + if credential_source is not None: + return self._resolve_credentials_from_source( + credential_source, profile_name + ) + + source_profile = role_config['source_profile'] + self._visited_profiles.append(source_profile) + return self._resolve_credentials_from_profile(source_profile) + + def _resolve_credentials_from_profile(self, profile_name): + profiles = self._loaded_config.get('profiles', {}) + profile = profiles[profile_name] + + if ( + self._has_static_credentials(profile) + and not self._profile_provider_builder + ): + # This is only here for backwards compatibility. If this provider + # isn't given a profile provider builder we still want to be able + # handle the basic static credential case as we would before the + # provile provider builder parameter was added. + return self._resolve_static_credentials_from_profile(profile) + elif self._has_static_credentials( + profile + ) or not self._has_assume_role_config_vars(profile): + profile_providers = self._profile_provider_builder.providers( + profile_name=profile_name, + disable_env_vars=True, + ) + profile_chain = CredentialResolver(profile_providers) + credentials = profile_chain.load_credentials() + if credentials is None: + error_message = ( + 'The source profile "%s" must have credentials.' + ) + raise InvalidConfigError( + error_msg=error_message % profile_name, + ) + return credentials + + return self._load_creds_via_assume_role(profile_name) + + def _resolve_static_credentials_from_profile(self, profile): + try: + return Credentials( + access_key=profile['aws_access_key_id'], + secret_key=profile['aws_secret_access_key'], + token=profile.get('aws_session_token'), + ) + except KeyError as e: + raise PartialCredentialsError( + provider=self.METHOD, cred_var=str(e) + ) + + def _resolve_credentials_from_source( + self, credential_source, profile_name + ): + credentials = self._credential_sourcer.source_credentials( + credential_source + ) + if credentials is None: + raise CredentialRetrievalError( + provider=credential_source, + error_msg=( + 'No credentials found in credential_source referenced ' + 'in profile %s' % profile_name + ), + ) + return credentials + + +class AssumeRoleWithWebIdentityProvider(CredentialProvider): + METHOD = 'assume-role-with-web-identity' + CANONICAL_NAME = None + _CONFIG_TO_ENV_VAR = { + 'web_identity_token_file': 'AWS_WEB_IDENTITY_TOKEN_FILE', + 'role_session_name': 'AWS_ROLE_SESSION_NAME', + 'role_arn': 'AWS_ROLE_ARN', + } + + def __init__( + self, + load_config, + client_creator, + profile_name, + cache=None, + disable_env_vars=False, + token_loader_cls=None, + ): + self.cache = cache + self._load_config = load_config + self._client_creator = client_creator + self._profile_name = profile_name + self._profile_config = None + self._disable_env_vars = disable_env_vars + if token_loader_cls is None: + token_loader_cls = FileWebIdentityTokenLoader + self._token_loader_cls = token_loader_cls + + def load(self): + return self._assume_role_with_web_identity() + + def _get_profile_config(self, key): + if self._profile_config is None: + loaded_config = self._load_config() + profiles = loaded_config.get('profiles', {}) + self._profile_config = profiles.get(self._profile_name, {}) + return self._profile_config.get(key) + + def _get_env_config(self, key): + if self._disable_env_vars: + return None + env_key = self._CONFIG_TO_ENV_VAR.get(key) + if env_key and env_key in os.environ: + return os.environ[env_key] + return None + + def _get_config(self, key): + env_value = self._get_env_config(key) + if env_value is not None: + return env_value + return self._get_profile_config(key) + + def _assume_role_with_web_identity(self): + token_path = self._get_config('web_identity_token_file') + if not token_path: + return None + token_loader = self._token_loader_cls(token_path) + + role_arn = self._get_config('role_arn') + if not role_arn: + error_msg = ( + 'The provided profile or the current environment is ' + 'configured to assume role with web identity but has no ' + 'role ARN configured. Ensure that the profile has the role_arn' + 'configuration set or the AWS_ROLE_ARN env var is set.' + ) + raise InvalidConfigError(error_msg=error_msg) + + extra_args = {} + role_session_name = self._get_config('role_session_name') + if role_session_name is not None: + extra_args['RoleSessionName'] = role_session_name + + fetcher = AssumeRoleWithWebIdentityCredentialFetcher( + client_creator=self._client_creator, + web_identity_token_loader=token_loader, + role_arn=role_arn, + extra_args=extra_args, + cache=self.cache, + ) + # The initial credentials are empty and the expiration time is set + # to now so that we can delay the call to assume role until it is + # strictly needed. + return DeferredRefreshableCredentials( + method=self.METHOD, + refresh_using=fetcher.fetch_credentials, + ) + + +class CanonicalNameCredentialSourcer: + def __init__(self, providers): + self._providers = providers + + def is_supported(self, source_name): + """Validates a given source name. + + :type source_name: str + :param source_name: The value of credential_source in the config + file. This is the canonical name of the credential provider. + + :rtype: bool + :returns: True if the credential provider is supported, + False otherwise. + """ + return source_name in [p.CANONICAL_NAME for p in self._providers] + + def source_credentials(self, source_name): + """Loads source credentials based on the provided configuration. + + :type source_name: str + :param source_name: The value of credential_source in the config + file. This is the canonical name of the credential provider. + + :rtype: Credentials + """ + source = self._get_provider(source_name) + if isinstance(source, CredentialResolver): + return source.load_credentials() + return source.load() + + def _get_provider(self, canonical_name): + """Return a credential provider by its canonical name. + + :type canonical_name: str + :param canonical_name: The canonical name of the provider. + + :raises UnknownCredentialError: Raised if no + credential provider by the provided name + is found. + """ + provider = self._get_provider_by_canonical_name(canonical_name) + + # The AssumeRole provider should really be part of the SharedConfig + # provider rather than being its own thing, but it is not. It is + # effectively part of both the SharedConfig provider and the + # SharedCredentials provider now due to the way it behaves. + # Therefore if we want either of those providers we should return + # the AssumeRole provider with it. + if canonical_name.lower() in ['sharedconfig', 'sharedcredentials']: + assume_role_provider = self._get_provider_by_method('assume-role') + if assume_role_provider is not None: + # The SharedConfig or SharedCredentials provider may not be + # present if it was removed for some reason, but the + # AssumeRole provider could still be present. In that case, + # return the assume role provider by itself. + if provider is None: + return assume_role_provider + + # If both are present, return them both as a + # CredentialResolver so that calling code can treat them as + # a single entity. + return CredentialResolver([assume_role_provider, provider]) + + if provider is None: + raise UnknownCredentialError(name=canonical_name) + + return provider + + def _get_provider_by_canonical_name(self, canonical_name): + """Return a credential provider by its canonical name. + + This function is strict, it does not attempt to address + compatibility issues. + """ + for provider in self._providers: + name = provider.CANONICAL_NAME + # Canonical names are case-insensitive + if name and name.lower() == canonical_name.lower(): + return provider + + def _get_provider_by_method(self, method): + """Return a credential provider by its METHOD name.""" + for provider in self._providers: + if provider.METHOD == method: + return provider + + +class ContainerProvider(CredentialProvider): + METHOD = 'container-role' + CANONICAL_NAME = 'EcsContainer' + ENV_VAR = 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' + ENV_VAR_FULL = 'AWS_CONTAINER_CREDENTIALS_FULL_URI' + ENV_VAR_AUTH_TOKEN = 'AWS_CONTAINER_AUTHORIZATION_TOKEN' + ENV_VAR_AUTH_TOKEN_FILE = 'AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE' + + def __init__(self, environ=None, fetcher=None): + if environ is None: + environ = os.environ + if fetcher is None: + fetcher = ContainerMetadataFetcher() + self._environ = environ + self._fetcher = fetcher + + def load(self): + # This cred provider is only triggered if the self.ENV_VAR is set, + # which only happens if you opt into this feature. + if self.ENV_VAR in self._environ or self.ENV_VAR_FULL in self._environ: + return self._retrieve_or_fail() + + def _retrieve_or_fail(self): + if self._provided_relative_uri(): + full_uri = self._fetcher.full_url(self._environ[self.ENV_VAR]) + else: + full_uri = self._environ[self.ENV_VAR_FULL] + headers = self._build_headers() + fetcher = self._create_fetcher(full_uri, headers) + creds = fetcher() + return RefreshableCredentials( + access_key=creds['access_key'], + secret_key=creds['secret_key'], + token=creds['token'], + method=self.METHOD, + expiry_time=_parse_if_needed(creds['expiry_time']), + refresh_using=fetcher, + ) + + def _build_headers(self): + auth_token = None + if self.ENV_VAR_AUTH_TOKEN_FILE in self._environ: + auth_token_file_path = self._environ[self.ENV_VAR_AUTH_TOKEN_FILE] + with open(auth_token_file_path) as token_file: + auth_token = token_file.read() + elif self.ENV_VAR_AUTH_TOKEN in self._environ: + auth_token = self._environ[self.ENV_VAR_AUTH_TOKEN] + if auth_token is not None: + self._validate_auth_token(auth_token) + return {'Authorization': auth_token} + + def _validate_auth_token(self, auth_token): + if "\r" in auth_token or "\n" in auth_token: + raise ValueError("Auth token value is not a legal header value") + + def _create_fetcher(self, full_uri, headers): + def fetch_creds(): + try: + response = self._fetcher.retrieve_full_uri( + full_uri, headers=headers + ) + except MetadataRetrievalError as e: + logger.debug( + "Error retrieving container metadata: %s", e, exc_info=True + ) + raise CredentialRetrievalError( + provider=self.METHOD, error_msg=str(e) + ) + return { + 'access_key': response['AccessKeyId'], + 'secret_key': response['SecretAccessKey'], + 'token': response['Token'], + 'expiry_time': response['Expiration'], + } + + return fetch_creds + + def _provided_relative_uri(self): + return self.ENV_VAR in self._environ + + +class CredentialResolver: + def __init__(self, providers): + """ + + :param providers: A list of ``CredentialProvider`` instances. + + """ + self.providers = providers + + def insert_before(self, name, credential_provider): + """ + Inserts a new instance of ``CredentialProvider`` into the chain that + will be tried before an existing one. + + :param name: The short name of the credentials you'd like to insert the + new credentials before. (ex. ``env`` or ``config``). Existing names + & ordering can be discovered via ``self.available_methods``. + :type name: string + + :param cred_instance: An instance of the new ``Credentials`` object + you'd like to add to the chain. + :type cred_instance: A subclass of ``Credentials`` + """ + try: + offset = [p.METHOD for p in self.providers].index(name) + except ValueError: + raise UnknownCredentialError(name=name) + self.providers.insert(offset, credential_provider) + + def insert_after(self, name, credential_provider): + """ + Inserts a new type of ``Credentials`` instance into the chain that will + be tried after an existing one. + + :param name: The short name of the credentials you'd like to insert the + new credentials after. (ex. ``env`` or ``config``). Existing names + & ordering can be discovered via ``self.available_methods``. + :type name: string + + :param cred_instance: An instance of the new ``Credentials`` object + you'd like to add to the chain. + :type cred_instance: A subclass of ``Credentials`` + """ + offset = self._get_provider_offset(name) + self.providers.insert(offset + 1, credential_provider) + + def remove(self, name): + """ + Removes a given ``Credentials`` instance from the chain. + + :param name: The short name of the credentials instance to remove. + :type name: string + """ + available_methods = [p.METHOD for p in self.providers] + if name not in available_methods: + # It's not present. Fail silently. + return + + offset = available_methods.index(name) + self.providers.pop(offset) + + def get_provider(self, name): + """Return a credential provider by name. + + :type name: str + :param name: The name of the provider. + + :raises UnknownCredentialError: Raised if no + credential provider by the provided name + is found. + """ + return self.providers[self._get_provider_offset(name)] + + def _get_provider_offset(self, name): + try: + return [p.METHOD for p in self.providers].index(name) + except ValueError: + raise UnknownCredentialError(name=name) + + def load_credentials(self): + """ + Goes through the credentials chain, returning the first ``Credentials`` + that could be loaded. + """ + # First provider to return a non-None response wins. + for provider in self.providers: + logger.debug("Looking for credentials via: %s", provider.METHOD) + creds = provider.load() + if creds is not None: + return creds + + # If we got here, no credentials could be found. + # This feels like it should be an exception, but historically, ``None`` + # is returned. + # + # +1 + # -js + return None + + +class SSOCredentialFetcher(CachedCredentialFetcher): + _UTC_DATE_FORMAT = '%Y-%m-%dT%H:%M:%SZ' + + def __init__( + self, + start_url, + sso_region, + role_name, + account_id, + client_creator, + token_loader=None, + cache=None, + expiry_window_seconds=None, + token_provider=None, + sso_session_name=None, + ): + self._client_creator = client_creator + self._sso_region = sso_region + self._role_name = role_name + self._account_id = account_id + self._start_url = start_url + self._token_loader = token_loader + self._token_provider = token_provider + self._sso_session_name = sso_session_name + super().__init__(cache, expiry_window_seconds) + + def _create_cache_key(self): + """Create a predictable cache key for the current configuration. + + The cache key is intended to be compatible with file names. + """ + args = { + 'roleName': self._role_name, + 'accountId': self._account_id, + } + if self._sso_session_name: + args['sessionName'] = self._sso_session_name + else: + args['startUrl'] = self._start_url + # NOTE: It would be good to hoist this cache key construction logic + # into the CachedCredentialFetcher class as we should be consistent. + # Unfortunately, the current assume role fetchers that sub class don't + # pass separators resulting in non-minified JSON. In the long term, + # all fetchers should use the below caching scheme. + args = json.dumps(args, sort_keys=True, separators=(',', ':')) + argument_hash = sha1(args.encode('utf-8')).hexdigest() + return self._make_file_safe(argument_hash) + + def _parse_timestamp(self, timestamp_ms): + # fromtimestamp expects seconds so: milliseconds / 1000 = seconds + timestamp_seconds = timestamp_ms / 1000.0 + timestamp = datetime.datetime.fromtimestamp(timestamp_seconds, tzutc()) + return timestamp.strftime(self._UTC_DATE_FORMAT) + + def _get_credentials(self): + """Get credentials by calling SSO get role credentials.""" + config = Config( + signature_version=UNSIGNED, + region_name=self._sso_region, + ) + client = self._client_creator('sso', config=config) + if self._token_provider: + initial_token_data = self._token_provider.load_token() + token = initial_token_data.get_frozen_token().token + else: + token = self._token_loader(self._start_url)['accessToken'] + + kwargs = { + 'roleName': self._role_name, + 'accountId': self._account_id, + 'accessToken': token, + } + try: + response = client.get_role_credentials(**kwargs) + except client.exceptions.UnauthorizedException: + raise UnauthorizedSSOTokenError() + credentials = response['roleCredentials'] + + credentials = { + 'ProviderType': 'sso', + 'Credentials': { + 'AccessKeyId': credentials['accessKeyId'], + 'SecretAccessKey': credentials['secretAccessKey'], + 'SessionToken': credentials['sessionToken'], + 'Expiration': self._parse_timestamp(credentials['expiration']), + }, + } + return credentials + + +class SSOProvider(CredentialProvider): + METHOD = 'sso' + + _SSO_TOKEN_CACHE_DIR = os.path.expanduser( + os.path.join('~', '.aws', 'sso', 'cache') + ) + _PROFILE_REQUIRED_CONFIG_VARS = ( + 'sso_role_name', + 'sso_account_id', + ) + _SSO_REQUIRED_CONFIG_VARS = ( + 'sso_start_url', + 'sso_region', + ) + _ALL_REQUIRED_CONFIG_VARS = ( + _PROFILE_REQUIRED_CONFIG_VARS + _SSO_REQUIRED_CONFIG_VARS + ) + + def __init__( + self, + load_config, + client_creator, + profile_name, + cache=None, + token_cache=None, + token_provider=None, + ): + if token_cache is None: + token_cache = JSONFileCache(self._SSO_TOKEN_CACHE_DIR) + self._token_cache = token_cache + self._token_provider = token_provider + if cache is None: + cache = {} + self.cache = cache + self._load_config = load_config + self._client_creator = client_creator + self._profile_name = profile_name + + def _load_sso_config(self): + loaded_config = self._load_config() + profiles = loaded_config.get('profiles', {}) + profile_name = self._profile_name + profile_config = profiles.get(self._profile_name, {}) + sso_sessions = loaded_config.get('sso_sessions', {}) + + # Role name & Account ID indicate the cred provider should be used + if all( + c not in profile_config for c in self._PROFILE_REQUIRED_CONFIG_VARS + ): + return None + + resolved_config, extra_reqs = self._resolve_sso_session_reference( + profile_config, sso_sessions + ) + + config = {} + missing_config_vars = [] + all_required_configs = self._ALL_REQUIRED_CONFIG_VARS + extra_reqs + for config_var in all_required_configs: + if config_var in resolved_config: + config[config_var] = resolved_config[config_var] + else: + missing_config_vars.append(config_var) + + if missing_config_vars: + missing = ', '.join(missing_config_vars) + raise InvalidConfigError( + error_msg=( + 'The profile "%s" is configured to use SSO but is missing ' + 'required configuration: %s' % (profile_name, missing) + ) + ) + return config + + def _resolve_sso_session_reference(self, profile_config, sso_sessions): + sso_session_name = profile_config.get('sso_session') + if sso_session_name is None: + # No reference to resolve, proceed with legacy flow + return profile_config, () + + if sso_session_name not in sso_sessions: + error_msg = f'The specified sso-session does not exist: "{sso_session_name}"' + raise InvalidConfigError(error_msg=error_msg) + + config = profile_config.copy() + session = sso_sessions[sso_session_name] + for config_var, val in session.items(): + # Validate any keys referenced in both profile and sso_session match + if config.get(config_var, val) != val: + error_msg = ( + f"The value for {config_var} is inconsistent between " + f"profile ({config[config_var]}) and sso-session ({val})." + ) + raise InvalidConfigError(error_msg=error_msg) + config[config_var] = val + return config, ('sso_session',) + + def load(self): + sso_config = self._load_sso_config() + if not sso_config: + return None + + fetcher_kwargs = { + 'start_url': sso_config['sso_start_url'], + 'sso_region': sso_config['sso_region'], + 'role_name': sso_config['sso_role_name'], + 'account_id': sso_config['sso_account_id'], + 'client_creator': self._client_creator, + 'token_loader': SSOTokenLoader(cache=self._token_cache), + 'cache': self.cache, + } + if 'sso_session' in sso_config: + fetcher_kwargs['sso_session_name'] = sso_config['sso_session'] + fetcher_kwargs['token_provider'] = self._token_provider + + sso_fetcher = SSOCredentialFetcher(**fetcher_kwargs) + + return DeferredRefreshableCredentials( + method=self.METHOD, + refresh_using=sso_fetcher.fetch_credentials, + ) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/crt/__init__.py b/dbtzin/lib/python3.8/site-packages/botocore/crt/__init__.py new file mode 100644 index 00000000..952ebf34 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/crt/__init__.py @@ -0,0 +1,27 @@ +# Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +# A list of auth types supported by the signers in botocore/crt/auth.py. This +# should always match the keys of botocore.crt.auth.CRT_AUTH_TYPE_MAPS. The +# information is duplicated here so that it can be accessed in environments +# where `awscrt` is not present and any import from botocore.crt.auth would +# fail. +CRT_SUPPORTED_AUTH_TYPES = ( + 'v4', + 'v4-query', + 'v4a', + 's3v4', + 's3v4-query', + 's3v4a', + 's3v4a-query', +) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/crt/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/crt/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..f14b2b59 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/crt/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/crt/__pycache__/auth.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/crt/__pycache__/auth.cpython-38.pyc new file mode 100644 index 00000000..45522dc5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/crt/__pycache__/auth.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/crt/auth.py b/dbtzin/lib/python3.8/site-packages/botocore/crt/auth.py new file mode 100644 index 00000000..0d1a81de --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/crt/auth.py @@ -0,0 +1,629 @@ +# Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import datetime +from io import BytesIO + +from botocore.auth import ( + SIGNED_HEADERS_BLACKLIST, + STREAMING_UNSIGNED_PAYLOAD_TRAILER, + UNSIGNED_PAYLOAD, + BaseSigner, + _get_body_as_dict, + _host_from_url, +) +from botocore.compat import HTTPHeaders, awscrt, parse_qs, urlsplit, urlunsplit +from botocore.exceptions import NoCredentialsError +from botocore.utils import percent_encode_sequence + + +class CrtSigV4Auth(BaseSigner): + REQUIRES_REGION = True + _PRESIGNED_HEADERS_BLOCKLIST = [ + 'Authorization', + 'X-Amz-Date', + 'X-Amz-Content-SHA256', + 'X-Amz-Security-Token', + ] + _SIGNATURE_TYPE = awscrt.auth.AwsSignatureType.HTTP_REQUEST_HEADERS + _USE_DOUBLE_URI_ENCODE = True + _SHOULD_NORMALIZE_URI_PATH = True + + def __init__(self, credentials, service_name, region_name): + self.credentials = credentials + self._service_name = service_name + self._region_name = region_name + self._expiration_in_seconds = None + + def _is_streaming_checksum_payload(self, request): + checksum_context = request.context.get('checksum', {}) + algorithm = checksum_context.get('request_algorithm') + return isinstance(algorithm, dict) and algorithm.get('in') == 'trailer' + + def add_auth(self, request): + if self.credentials is None: + raise NoCredentialsError() + + # Use utcnow() because that's what gets mocked by tests, but set + # timezone because CRT assumes naive datetime is local time. + datetime_now = datetime.datetime.utcnow().replace( + tzinfo=datetime.timezone.utc + ) + + # Use existing 'X-Amz-Content-SHA256' header if able + existing_sha256 = self._get_existing_sha256(request) + + self._modify_request_before_signing(request) + + credentials_provider = awscrt.auth.AwsCredentialsProvider.new_static( + access_key_id=self.credentials.access_key, + secret_access_key=self.credentials.secret_key, + session_token=self.credentials.token, + ) + + if self._is_streaming_checksum_payload(request): + explicit_payload = STREAMING_UNSIGNED_PAYLOAD_TRAILER + elif self._should_sha256_sign_payload(request): + if existing_sha256: + explicit_payload = existing_sha256 + else: + explicit_payload = None # to be calculated during signing + else: + explicit_payload = UNSIGNED_PAYLOAD + + if self._should_add_content_sha256_header(explicit_payload): + body_header = ( + awscrt.auth.AwsSignedBodyHeaderType.X_AMZ_CONTENT_SHA_256 + ) + else: + body_header = awscrt.auth.AwsSignedBodyHeaderType.NONE + + signing_config = awscrt.auth.AwsSigningConfig( + algorithm=awscrt.auth.AwsSigningAlgorithm.V4, + signature_type=self._SIGNATURE_TYPE, + credentials_provider=credentials_provider, + region=self._region_name, + service=self._service_name, + date=datetime_now, + should_sign_header=self._should_sign_header, + use_double_uri_encode=self._USE_DOUBLE_URI_ENCODE, + should_normalize_uri_path=self._SHOULD_NORMALIZE_URI_PATH, + signed_body_value=explicit_payload, + signed_body_header_type=body_header, + expiration_in_seconds=self._expiration_in_seconds, + ) + crt_request = self._crt_request_from_aws_request(request) + future = awscrt.auth.aws_sign_request(crt_request, signing_config) + future.result() + self._apply_signing_changes(request, crt_request) + + def _crt_request_from_aws_request(self, aws_request): + url_parts = urlsplit(aws_request.url) + crt_path = url_parts.path if url_parts.path else '/' + if aws_request.params: + array = [] + for param, value in aws_request.params.items(): + value = str(value) + array.append(f'{param}={value}') + crt_path = crt_path + '?' + '&'.join(array) + elif url_parts.query: + crt_path = f'{crt_path}?{url_parts.query}' + + crt_headers = awscrt.http.HttpHeaders(aws_request.headers.items()) + + # CRT requires body (if it exists) to be an I/O stream. + crt_body_stream = None + if aws_request.body: + if hasattr(aws_request.body, 'seek'): + crt_body_stream = aws_request.body + else: + crt_body_stream = BytesIO(aws_request.body) + + crt_request = awscrt.http.HttpRequest( + method=aws_request.method, + path=crt_path, + headers=crt_headers, + body_stream=crt_body_stream, + ) + return crt_request + + def _apply_signing_changes(self, aws_request, signed_crt_request): + # Apply changes from signed CRT request to the AWSRequest + aws_request.headers = HTTPHeaders.from_pairs( + list(signed_crt_request.headers) + ) + + def _should_sign_header(self, name, **kwargs): + return name.lower() not in SIGNED_HEADERS_BLACKLIST + + def _modify_request_before_signing(self, request): + # This could be a retry. Make sure the previous + # authorization headers are removed first. + for h in self._PRESIGNED_HEADERS_BLOCKLIST: + if h in request.headers: + del request.headers[h] + # If necessary, add the host header + if 'host' not in request.headers: + request.headers['host'] = _host_from_url(request.url) + + def _get_existing_sha256(self, request): + return request.headers.get('X-Amz-Content-SHA256') + + def _should_sha256_sign_payload(self, request): + # Payloads will always be signed over insecure connections. + if not request.url.startswith('https'): + return True + + # Certain operations may have payload signing disabled by default. + # Since we don't have access to the operation model, we pass in this + # bit of metadata through the request context. + return request.context.get('payload_signing_enabled', True) + + def _should_add_content_sha256_header(self, explicit_payload): + # only add X-Amz-Content-SHA256 header if payload is explicitly set + return explicit_payload is not None + + +class CrtS3SigV4Auth(CrtSigV4Auth): + # For S3, we do not normalize the path. + _USE_DOUBLE_URI_ENCODE = False + _SHOULD_NORMALIZE_URI_PATH = False + + def _get_existing_sha256(self, request): + # always recalculate + return None + + def _should_sha256_sign_payload(self, request): + # S3 allows optional body signing, so to minimize the performance + # impact, we opt to not SHA256 sign the body on streaming uploads, + # provided that we're on https. + client_config = request.context.get('client_config') + s3_config = getattr(client_config, 's3', None) + + # The config could be None if it isn't set, or if the customer sets it + # to None. + if s3_config is None: + s3_config = {} + + # The explicit configuration takes precedence over any implicit + # configuration. + sign_payload = s3_config.get('payload_signing_enabled', None) + if sign_payload is not None: + return sign_payload + + # We require that both a checksum be present and https be enabled + # to implicitly disable body signing. The combination of TLS and + # a checksum is sufficiently secure and durable for us to be + # confident in the request without body signing. + checksum_header = 'Content-MD5' + checksum_context = request.context.get('checksum', {}) + algorithm = checksum_context.get('request_algorithm') + if isinstance(algorithm, dict) and algorithm.get('in') == 'header': + checksum_header = algorithm['name'] + if ( + not request.url.startswith('https') + or checksum_header not in request.headers + ): + return True + + # If the input is streaming we disable body signing by default. + if request.context.get('has_streaming_input', False): + return False + + # If the S3-specific checks had no results, delegate to the generic + # checks. + return super()._should_sha256_sign_payload(request) + + def _should_add_content_sha256_header(self, explicit_payload): + # Always add X-Amz-Content-SHA256 header + return True + + +class CrtSigV4AsymAuth(BaseSigner): + REQUIRES_REGION = True + _PRESIGNED_HEADERS_BLOCKLIST = [ + 'Authorization', + 'X-Amz-Date', + 'X-Amz-Content-SHA256', + 'X-Amz-Security-Token', + ] + _SIGNATURE_TYPE = awscrt.auth.AwsSignatureType.HTTP_REQUEST_HEADERS + _USE_DOUBLE_URI_ENCODE = True + _SHOULD_NORMALIZE_URI_PATH = True + + def __init__(self, credentials, service_name, region_name): + self.credentials = credentials + self._service_name = service_name + self._region_name = region_name + self._expiration_in_seconds = None + + def add_auth(self, request): + if self.credentials is None: + raise NoCredentialsError() + + # Use utcnow() because that's what gets mocked by tests, but set + # timezone because CRT assumes naive datetime is local time. + datetime_now = datetime.datetime.utcnow().replace( + tzinfo=datetime.timezone.utc + ) + + # Use existing 'X-Amz-Content-SHA256' header if able + existing_sha256 = self._get_existing_sha256(request) + + self._modify_request_before_signing(request) + + credentials_provider = awscrt.auth.AwsCredentialsProvider.new_static( + access_key_id=self.credentials.access_key, + secret_access_key=self.credentials.secret_key, + session_token=self.credentials.token, + ) + + if self._is_streaming_checksum_payload(request): + explicit_payload = STREAMING_UNSIGNED_PAYLOAD_TRAILER + elif self._should_sha256_sign_payload(request): + if existing_sha256: + explicit_payload = existing_sha256 + else: + explicit_payload = None # to be calculated during signing + else: + explicit_payload = UNSIGNED_PAYLOAD + + if self._should_add_content_sha256_header(explicit_payload): + body_header = ( + awscrt.auth.AwsSignedBodyHeaderType.X_AMZ_CONTENT_SHA_256 + ) + else: + body_header = awscrt.auth.AwsSignedBodyHeaderType.NONE + + signing_config = awscrt.auth.AwsSigningConfig( + algorithm=awscrt.auth.AwsSigningAlgorithm.V4_ASYMMETRIC, + signature_type=self._SIGNATURE_TYPE, + credentials_provider=credentials_provider, + region=self._region_name, + service=self._service_name, + date=datetime_now, + should_sign_header=self._should_sign_header, + use_double_uri_encode=self._USE_DOUBLE_URI_ENCODE, + should_normalize_uri_path=self._SHOULD_NORMALIZE_URI_PATH, + signed_body_value=explicit_payload, + signed_body_header_type=body_header, + expiration_in_seconds=self._expiration_in_seconds, + ) + crt_request = self._crt_request_from_aws_request(request) + future = awscrt.auth.aws_sign_request(crt_request, signing_config) + future.result() + self._apply_signing_changes(request, crt_request) + + def _crt_request_from_aws_request(self, aws_request): + url_parts = urlsplit(aws_request.url) + crt_path = url_parts.path if url_parts.path else '/' + if aws_request.params: + array = [] + for param, value in aws_request.params.items(): + value = str(value) + array.append(f'{param}={value}') + crt_path = crt_path + '?' + '&'.join(array) + elif url_parts.query: + crt_path = f'{crt_path}?{url_parts.query}' + + crt_headers = awscrt.http.HttpHeaders(aws_request.headers.items()) + + # CRT requires body (if it exists) to be an I/O stream. + crt_body_stream = None + if aws_request.body: + if hasattr(aws_request.body, 'seek'): + crt_body_stream = aws_request.body + else: + crt_body_stream = BytesIO(aws_request.body) + + crt_request = awscrt.http.HttpRequest( + method=aws_request.method, + path=crt_path, + headers=crt_headers, + body_stream=crt_body_stream, + ) + return crt_request + + def _apply_signing_changes(self, aws_request, signed_crt_request): + # Apply changes from signed CRT request to the AWSRequest + aws_request.headers = HTTPHeaders.from_pairs( + list(signed_crt_request.headers) + ) + + def _should_sign_header(self, name, **kwargs): + return name.lower() not in SIGNED_HEADERS_BLACKLIST + + def _modify_request_before_signing(self, request): + # This could be a retry. Make sure the previous + # authorization headers are removed first. + for h in self._PRESIGNED_HEADERS_BLOCKLIST: + if h in request.headers: + del request.headers[h] + # If necessary, add the host header + if 'host' not in request.headers: + request.headers['host'] = _host_from_url(request.url) + + def _get_existing_sha256(self, request): + return request.headers.get('X-Amz-Content-SHA256') + + def _is_streaming_checksum_payload(self, request): + checksum_context = request.context.get('checksum', {}) + algorithm = checksum_context.get('request_algorithm') + return isinstance(algorithm, dict) and algorithm.get('in') == 'trailer' + + def _should_sha256_sign_payload(self, request): + # Payloads will always be signed over insecure connections. + if not request.url.startswith('https'): + return True + + # Certain operations may have payload signing disabled by default. + # Since we don't have access to the operation model, we pass in this + # bit of metadata through the request context. + return request.context.get('payload_signing_enabled', True) + + def _should_add_content_sha256_header(self, explicit_payload): + # only add X-Amz-Content-SHA256 header if payload is explicitly set + return explicit_payload is not None + + +class CrtS3SigV4AsymAuth(CrtSigV4AsymAuth): + # For S3, we do not normalize the path. + _USE_DOUBLE_URI_ENCODE = False + _SHOULD_NORMALIZE_URI_PATH = False + + def _get_existing_sha256(self, request): + # always recalculate + return None + + def _should_sha256_sign_payload(self, request): + # S3 allows optional body signing, so to minimize the performance + # impact, we opt to not SHA256 sign the body on streaming uploads, + # provided that we're on https. + client_config = request.context.get('client_config') + s3_config = getattr(client_config, 's3', None) + + # The config could be None if it isn't set, or if the customer sets it + # to None. + if s3_config is None: + s3_config = {} + + # The explicit configuration takes precedence over any implicit + # configuration. + sign_payload = s3_config.get('payload_signing_enabled', None) + if sign_payload is not None: + return sign_payload + + # We require that both content-md5 be present and https be enabled + # to implicitly disable body signing. The combination of TLS and + # content-md5 is sufficiently secure and durable for us to be + # confident in the request without body signing. + if ( + not request.url.startswith('https') + or 'Content-MD5' not in request.headers + ): + return True + + # If the input is streaming we disable body signing by default. + if request.context.get('has_streaming_input', False): + return False + + # If the S3-specific checks had no results, delegate to the generic + # checks. + return super()._should_sha256_sign_payload(request) + + def _should_add_content_sha256_header(self, explicit_payload): + # Always add X-Amz-Content-SHA256 header + return True + + +class CrtSigV4AsymQueryAuth(CrtSigV4AsymAuth): + DEFAULT_EXPIRES = 3600 + _SIGNATURE_TYPE = awscrt.auth.AwsSignatureType.HTTP_REQUEST_QUERY_PARAMS + + def __init__( + self, credentials, service_name, region_name, expires=DEFAULT_EXPIRES + ): + super().__init__(credentials, service_name, region_name) + self._expiration_in_seconds = expires + + def _modify_request_before_signing(self, request): + super()._modify_request_before_signing(request) + + # We automatically set this header, so if it's the auto-set value we + # want to get rid of it since it doesn't make sense for presigned urls. + content_type = request.headers.get('content-type') + if content_type == 'application/x-www-form-urlencoded; charset=utf-8': + del request.headers['content-type'] + + # Now parse the original query string to a dict, inject our new query + # params, and serialize back to a query string. + url_parts = urlsplit(request.url) + # parse_qs makes each value a list, but in our case we know we won't + # have repeated keys so we know we have single element lists which we + # can convert back to scalar values. + query_string_parts = parse_qs(url_parts.query, keep_blank_values=True) + query_dict = {k: v[0] for k, v in query_string_parts.items()} + + # The spec is particular about this. It *has* to be: + # https://?& + # You can't mix the two types of params together, i.e just keep doing + # new_query_params.update(op_params) + # new_query_params.update(auth_params) + # percent_encode_sequence(new_query_params) + if request.data: + # We also need to move the body params into the query string. To + # do this, we first have to convert it to a dict. + query_dict.update(_get_body_as_dict(request)) + request.data = '' + new_query_string = percent_encode_sequence(query_dict) + # url_parts is a tuple (and therefore immutable) so we need to create + # a new url_parts with the new query string. + # - + # scheme - 0 + # netloc - 1 + # path - 2 + # query - 3 <-- we're replacing this. + # fragment - 4 + p = url_parts + new_url_parts = (p[0], p[1], p[2], new_query_string, p[4]) + request.url = urlunsplit(new_url_parts) + + def _apply_signing_changes(self, aws_request, signed_crt_request): + # Apply changes from signed CRT request to the AWSRequest + super()._apply_signing_changes(aws_request, signed_crt_request) + + signed_query = urlsplit(signed_crt_request.path).query + p = urlsplit(aws_request.url) + # urlsplit() returns a tuple (and therefore immutable) so we + # need to create new url with the new query string. + # - + # scheme - 0 + # netloc - 1 + # path - 2 + # query - 3 <-- we're replacing this. + # fragment - 4 + aws_request.url = urlunsplit((p[0], p[1], p[2], signed_query, p[4])) + + +class CrtS3SigV4AsymQueryAuth(CrtSigV4AsymQueryAuth): + """S3 SigV4A auth using query parameters. + This signer will sign a request using query parameters and signature + version 4A, i.e a "presigned url" signer. + """ + + # For S3, we do not normalize the path. + _USE_DOUBLE_URI_ENCODE = False + _SHOULD_NORMALIZE_URI_PATH = False + + def _should_sha256_sign_payload(self, request): + # From the doc link above: + # "You don't include a payload hash in the Canonical Request, because + # when you create a presigned URL, you don't know anything about the + # payload. Instead, you use a constant string "UNSIGNED-PAYLOAD". + return False + + def _should_add_content_sha256_header(self, explicit_payload): + # Never add X-Amz-Content-SHA256 header + return False + + +class CrtSigV4QueryAuth(CrtSigV4Auth): + DEFAULT_EXPIRES = 3600 + _SIGNATURE_TYPE = awscrt.auth.AwsSignatureType.HTTP_REQUEST_QUERY_PARAMS + + def __init__( + self, credentials, service_name, region_name, expires=DEFAULT_EXPIRES + ): + super().__init__(credentials, service_name, region_name) + self._expiration_in_seconds = expires + + def _modify_request_before_signing(self, request): + super()._modify_request_before_signing(request) + + # We automatically set this header, so if it's the auto-set value we + # want to get rid of it since it doesn't make sense for presigned urls. + content_type = request.headers.get('content-type') + if content_type == 'application/x-www-form-urlencoded; charset=utf-8': + del request.headers['content-type'] + + # Now parse the original query string to a dict, inject our new query + # params, and serialize back to a query string. + url_parts = urlsplit(request.url) + # parse_qs makes each value a list, but in our case we know we won't + # have repeated keys so we know we have single element lists which we + # can convert back to scalar values. + query_dict = { + k: v[0] + for k, v in parse_qs( + url_parts.query, keep_blank_values=True + ).items() + } + if request.params: + query_dict.update(request.params) + request.params = {} + # The spec is particular about this. It *has* to be: + # https://?& + # You can't mix the two types of params together, i.e just keep doing + # new_query_params.update(op_params) + # new_query_params.update(auth_params) + # percent_encode_sequence(new_query_params) + if request.data: + # We also need to move the body params into the query string. To + # do this, we first have to convert it to a dict. + query_dict.update(_get_body_as_dict(request)) + request.data = '' + new_query_string = percent_encode_sequence(query_dict) + # url_parts is a tuple (and therefore immutable) so we need to create + # a new url_parts with the new query string. + # - + # scheme - 0 + # netloc - 1 + # path - 2 + # query - 3 <-- we're replacing this. + # fragment - 4 + p = url_parts + new_url_parts = (p[0], p[1], p[2], new_query_string, p[4]) + request.url = urlunsplit(new_url_parts) + + def _apply_signing_changes(self, aws_request, signed_crt_request): + # Apply changes from signed CRT request to the AWSRequest + super()._apply_signing_changes(aws_request, signed_crt_request) + + signed_query = urlsplit(signed_crt_request.path).query + p = urlsplit(aws_request.url) + # urlsplit() returns a tuple (and therefore immutable) so we + # need to create new url with the new query string. + # - + # scheme - 0 + # netloc - 1 + # path - 2 + # query - 3 <-- we're replacing this. + # fragment - 4 + aws_request.url = urlunsplit((p[0], p[1], p[2], signed_query, p[4])) + + +class CrtS3SigV4QueryAuth(CrtSigV4QueryAuth): + """S3 SigV4 auth using query parameters. + This signer will sign a request using query parameters and signature + version 4, i.e a "presigned url" signer. + Based off of: + http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html + """ + + # For S3, we do not normalize the path. + _USE_DOUBLE_URI_ENCODE = False + _SHOULD_NORMALIZE_URI_PATH = False + + def _should_sha256_sign_payload(self, request): + # From the doc link above: + # "You don't include a payload hash in the Canonical Request, because + # when you create a presigned URL, you don't know anything about the + # payload. Instead, you use a constant string "UNSIGNED-PAYLOAD". + return False + + def _should_add_content_sha256_header(self, explicit_payload): + # Never add X-Amz-Content-SHA256 header + return False + + +# Defined at the bottom of module to ensure all Auth +# classes are defined. +CRT_AUTH_TYPE_MAPS = { + 'v4': CrtSigV4Auth, + 'v4-query': CrtSigV4QueryAuth, + 'v4a': CrtSigV4AsymAuth, + 's3v4': CrtS3SigV4Auth, + 's3v4-query': CrtS3SigV4QueryAuth, + 's3v4a': CrtS3SigV4AsymAuth, + 's3v4a-query': CrtS3SigV4AsymQueryAuth, +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/_retry.json b/dbtzin/lib/python3.8/site-packages/botocore/data/_retry.json new file mode 100644 index 00000000..bfdd2641 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/_retry.json @@ -0,0 +1,292 @@ +{ + "definitions": { + "throttling": { + "applies_when": { + "response": { + "service_error_code": "Throttling", + "http_status_code": 400 + } + } + }, + "throttling_exception": { + "applies_when": { + "response": { + "service_error_code": "ThrottlingException", + "http_status_code": 400 + } + } + }, + "throttled_exception": { + "applies_when": { + "response": { + "service_error_code": "ThrottledException", + "http_status_code": 400 + } + } + }, + "request_throttled_exception": { + "applies_when": { + "response": { + "service_error_code": "RequestThrottledException", + "http_status_code": 400 + } + } + }, + "too_many_requests": { + "applies_when": { + "response": { + "http_status_code": 429 + } + } + }, + "general_socket_errors": { + "applies_when": { + "socket_errors": ["GENERAL_CONNECTION_ERROR"] + } + }, + "general_server_error": { + "applies_when": { + "response": { + "http_status_code": 500 + } + } + }, + "bad_gateway": { + "applies_when": { + "response": { + "http_status_code": 502 + } + } + }, + "service_unavailable": { + "applies_when": { + "response": { + "http_status_code": 503 + } + } + }, + "gateway_timeout": { + "applies_when": { + "response": { + "http_status_code": 504 + } + } + }, + "limit_exceeded": { + "applies_when": { + "response": { + "http_status_code": 509 + } + } + }, + "throughput_exceeded": { + "applies_when": { + "response": { + "service_error_code": "ProvisionedThroughputExceededException", + "http_status_code": 400 + } + } + } + }, + "retry": { + "__default__": { + "max_attempts": 5, + "delay": { + "type": "exponential", + "base": "rand", + "growth_factor": 2 + }, + "policies": { + "general_socket_errors": {"$ref": "general_socket_errors"}, + "general_server_error": {"$ref": "general_server_error"}, + "bad_gateway": {"$ref": "bad_gateway"}, + "service_unavailable": {"$ref": "service_unavailable"}, + "gateway_timeout": {"$ref": "gateway_timeout"}, + "limit_exceeded": {"$ref": "limit_exceeded"}, + "throttling_exception": {"$ref": "throttling_exception"}, + "throttled_exception": {"$ref": "throttled_exception"}, + "request_throttled_exception": {"$ref": "request_throttled_exception"}, + "throttling": {"$ref": "throttling"}, + "too_many_requests": {"$ref": "too_many_requests"}, + "throughput_exceeded": {"$ref": "throughput_exceeded"} + } + }, + "organizations": { + "__default__": { + "policies": { + "too_many_requests": { + "applies_when": { + "response": { + "service_error_code": "TooManyRequestsException", + "http_status_code": 400 + } + } + } + } + } + }, + "dynamodb": { + "__default__": { + "max_attempts": 10, + "delay": { + "type": "exponential", + "base": 0.05, + "growth_factor": 2 + }, + "policies": { + "still_processing": { + "applies_when": { + "response": { + "service_error_code": "TransactionInProgressException", + "http_status_code": 400 + } + } + }, + "crc32": { + "applies_when": { + "response": { + "crc32body": "x-amz-crc32" + } + } + } + } + } + }, + "ec2": { + "__default__": { + "policies": { + "request_limit_exceeded": { + "applies_when": { + "response": { + "service_error_code": "RequestLimitExceeded", + "http_status_code": 503 + } + } + }, + "ec2_throttled_exception": { + "applies_when": { + "response": { + "service_error_code": "EC2ThrottledException", + "http_status_code": 503 + } + } + } + } + } + }, + "cloudsearch": { + "__default__": { + "policies": { + "request_limit_exceeded": { + "applies_when": { + "response": { + "service_error_code": "BandwidthLimitExceeded", + "http_status_code": 509 + } + } + } + } + } + }, + "kinesis": { + "__default__": { + "policies": { + "request_limit_exceeded": { + "applies_when": { + "response": { + "service_error_code": "LimitExceededException", + "http_status_code": 400 + } + } + } + } + } + }, + "sqs": { + "__default__": { + "policies": { + "request_limit_exceeded": { + "applies_when": { + "response": { + "service_error_code": "RequestThrottled", + "http_status_code": 403 + } + } + } + } + } + }, + "s3": { + "__default__": { + "policies": { + "timeouts": { + "applies_when": { + "response": { + "http_status_code": 400, + "service_error_code": "RequestTimeout" + } + } + }, + "contentmd5": { + "applies_when": { + "response": { + "http_status_code": 400, + "service_error_code": "BadDigest" + } + } + } + } + } + }, + "glacier": { + "__default__": { + "policies": { + "timeouts": { + "applies_when": { + "response": { + "http_status_code": 408, + "service_error_code": "RequestTimeoutException" + } + } + } + } + } + }, + "route53": { + "__default__": { + "policies": { + "request_limit_exceeded": { + "applies_when": { + "response": { + "service_error_code": "Throttling", + "http_status_code": 400 + } + } + }, + "still_processing": { + "applies_when": { + "response": { + "service_error_code": "PriorRequestNotComplete", + "http_status_code": 400 + } + } + } + } + } + }, + "sts": { + "__default__": { + "policies": { + "idp_unreachable_error": { + "applies_when": { + "response": { + "service_error_code": "IDPCommunicationError", + "http_status_code": 400 + } + } + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..df161dbe Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/paginators-1.json new file mode 100644 index 00000000..a975fa25 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "ListAnalyzedResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "analyzedResources" + }, + "ListAnalyzers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "analyzers" + }, + "ListArchiveRules": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "archiveRules" + }, + "ListFindings": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findings" + }, + "ListAccessPreviewFindings": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findings" + }, + "ListAccessPreviews": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "accessPreviews" + }, + "ValidatePolicy": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findings" + }, + "ListPolicyGenerations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "policyGenerations" + }, + "GetFindingV2": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findingDetails" + }, + "ListFindingsV2": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findings" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/paginators-1.sdk-extras.json new file mode 100644 index 00000000..0a06b315 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/paginators-1.sdk-extras.json @@ -0,0 +1,21 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "GetFindingV2": { + "non_aggregate_keys": [ + "resource", + "status", + "error", + "createdAt", + "resourceType", + "findingType", + "resourceOwnerAccount", + "analyzedAt", + "id", + "updatedAt" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/service-2.json.gz new file mode 100644 index 00000000..5f91cb7d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/accessanalyzer/2019-11-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a60d5cfb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/paginators-1.json new file mode 100644 index 00000000..5e75ec80 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListRegions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Regions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/service-2.json.gz new file mode 100644 index 00000000..07f6043e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/account/2021-02-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..27619f29 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/paginators-1.json new file mode 100644 index 00000000..c1f4e234 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListCertificateAuthorities": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CertificateAuthorities" + }, + "ListTags": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Tags" + }, + "ListPermissions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Permissions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/service-2.json.gz new file mode 100644 index 00000000..781593a7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/waiters-2.json new file mode 100644 index 00000000..79bf399b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/acm-pca/2017-08-22/waiters-2.json @@ -0,0 +1,61 @@ +{ + "version": 2, + "waiters": { + "CertificateAuthorityCSRCreated": { + "description": "Wait until a Certificate Authority CSR is created", + "operation": "GetCertificateAuthorityCsr", + "delay": 3, + "maxAttempts": 60, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 200 + }, + { + "state": "retry", + "matcher": "error", + "expected": "RequestInProgressException" + } + ] + }, + "CertificateIssued": { + "description": "Wait until a certificate is issued", + "operation": "GetCertificate", + "delay": 3, + "maxAttempts": 60, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 200 + }, + { + "state": "retry", + "matcher": "error", + "expected": "RequestInProgressException" + } + ] + }, + "AuditReportCreated": { + "description": "Wait until a Audit Report is created", + "operation": "DescribeCertificateAuthorityAuditReport", + "delay": 3, + "maxAttempts": 60, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "AuditReportStatus", + "expected": "SUCCESS" + }, + { + "state": "failure", + "matcher": "path", + "argument": "AuditReportStatus", + "expected": "FAILED" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..7afd0942 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/paginators-1.json new file mode 100644 index 00000000..2e2e4f9a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListCertificates": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxItems", + "result_key": "CertificateSummaryList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/service-2.json.gz new file mode 100644 index 00000000..2ecbd4bf Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/waiters-2.json new file mode 100644 index 00000000..1fba453d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/acm/2015-12-08/waiters-2.json @@ -0,0 +1,35 @@ +{ + "version": 2, + "waiters": { + "CertificateValidated": { + "delay": 60, + "maxAttempts": 40, + "operation": "DescribeCertificate", + "acceptors": [ + { + "matcher": "pathAll", + "expected": "SUCCESS", + "argument": "Certificate.DomainValidationOptions[].ValidationStatus", + "state": "success" + }, + { + "matcher": "pathAny", + "expected": "PENDING_VALIDATION", + "argument": "Certificate.DomainValidationOptions[].ValidationStatus", + "state": "retry" + }, + { + "matcher": "path", + "expected": "FAILED", + "argument": "Certificate.Status", + "state": "failure" + }, + { + "matcher": "error", + "expected": "ResourceNotFoundException", + "state": "failure" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5ab04f4a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/paginators-1.json new file mode 100644 index 00000000..ced5de2f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/paginators-1.json @@ -0,0 +1,82 @@ +{ + "pagination": { + "ListSkills": { + "result_key": "SkillSummaries", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "SearchUsers": { + "result_key": "Users", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListTags": { + "result_key": "Tags", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "SearchProfiles": { + "result_key": "Profiles", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "SearchSkillGroups": { + "result_key": "SkillGroups", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "SearchDevices": { + "result_key": "Devices", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "SearchRooms": { + "result_key": "Rooms", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListBusinessReportSchedules": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "BusinessReportSchedules" + }, + "ListConferenceProviders": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ConferenceProviders" + }, + "ListDeviceEvents": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DeviceEvents" + }, + "ListSkillsStoreCategories": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CategoryList" + }, + "ListSkillsStoreSkillsByCategory": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SkillsStoreSkills" + }, + "ListSmartHomeAppliances": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SmartHomeAppliances" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/service-2.json.gz new file mode 100644 index 00000000..25e9d6aa Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..36842747 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/paginators-1.json new file mode 100644 index 00000000..c1bf32ab --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListWorkspaces": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workspaces" + }, + "ListRuleGroupsNamespaces": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "ruleGroupsNamespaces" + }, + "ListScrapers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "scrapers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/service-2.json.gz new file mode 100644 index 00000000..3428e931 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/waiters-2.json new file mode 100644 index 00000000..93d8cd64 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/amp/2020-08-01/waiters-2.json @@ -0,0 +1,76 @@ +{ + "version" : 2, + "waiters" : { + "ScraperActive" : { + "description" : "Wait until a scraper reaches ACTIVE status", + "delay" : 2, + "maxAttempts" : 60, + "operation" : "DescribeScraper", + "acceptors" : [ { + "matcher" : "path", + "argument" : "scraper.status.statusCode", + "state" : "success", + "expected" : "ACTIVE" + }, { + "matcher" : "path", + "argument" : "scraper.status.statusCode", + "state" : "failure", + "expected" : "CREATION_FAILED" + } ] + }, + "ScraperDeleted" : { + "description" : "Wait until a scraper reaches DELETED status", + "delay" : 2, + "maxAttempts" : 60, + "operation" : "DescribeScraper", + "acceptors" : [ { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + }, { + "matcher" : "path", + "argument" : "scraper.status.statusCode", + "state" : "failure", + "expected" : "DELETION_FAILED" + } ] + }, + "WorkspaceActive" : { + "description" : "Wait until a workspace reaches ACTIVE status", + "delay" : 2, + "maxAttempts" : 60, + "operation" : "DescribeWorkspace", + "acceptors" : [ { + "matcher" : "path", + "argument" : "workspace.status.statusCode", + "state" : "success", + "expected" : "ACTIVE" + }, { + "matcher" : "path", + "argument" : "workspace.status.statusCode", + "state" : "retry", + "expected" : "UPDATING" + }, { + "matcher" : "path", + "argument" : "workspace.status.statusCode", + "state" : "retry", + "expected" : "CREATING" + } ] + }, + "WorkspaceDeleted" : { + "description" : "Wait until a workspace reaches DELETED status", + "delay" : 2, + "maxAttempts" : 60, + "operation" : "DescribeWorkspace", + "acceptors" : [ { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + }, { + "matcher" : "path", + "argument" : "workspace.status.statusCode", + "state" : "retry", + "expected" : "DELETING" + } ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..84b38999 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/paginators-1.json new file mode 100644 index 00000000..f84208e9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListApps": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "apps" + }, + "ListBranches": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "branches" + }, + "ListDomainAssociations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "domainAssociations" + }, + "ListJobs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "jobSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/service-2.json.gz new file mode 100644 index 00000000..5b8038f6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/amplify/2017-07-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplifybackend/2020-08-11/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifybackend/2020-08-11/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..13506161 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifybackend/2020-08-11/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplifybackend/2020-08-11/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifybackend/2020-08-11/paginators-1.json new file mode 100644 index 00000000..40304c7d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifybackend/2020-08-11/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListBackendJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Jobs" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplifybackend/2020-08-11/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifybackend/2020-08-11/service-2.json.gz new file mode 100644 index 00000000..0ca32775 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifybackend/2020-08-11/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8ff6cd92 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/paginators-1.json new file mode 100644 index 00000000..d0a02427 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/paginators-1.json @@ -0,0 +1,43 @@ +{ + "pagination": { + "ListComponents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "entities" + }, + "ListThemes": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "entities" + }, + "ExportComponents": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "entities" + }, + "ExportThemes": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "entities" + }, + "ExportForms": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "entities" + }, + "ListForms": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "entities" + }, + "ListCodegenJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "entities" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/service-2.json.gz new file mode 100644 index 00000000..699219ed Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/amplifyuibuilder/2021-08-11/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4ebc8bcb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/paginators-1.json new file mode 100644 index 00000000..2a875c55 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/paginators-1.json @@ -0,0 +1,117 @@ +{ + "pagination": { + "GetApiKeys": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items" + }, + "GetBasePathMappings": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items" + }, + "GetClientCertificates": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items" + }, + "GetDeployments": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items" + }, + "GetDomainNames": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items" + }, + "GetModels": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items" + }, + "GetResources": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items" + }, + "GetRestApis": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items" + }, + "GetUsage": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items", + "non_aggregate_keys": [ + "usagePlanId", + "startDate", + "endDate" + ] + }, + "GetUsagePlans": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items" + }, + "GetUsagePlanKeys": { + "input_token": "position", + "output_token": "position", + "limit_key": "limit", + "result_key": "items" + }, + "GetVpcLinks": { + "input_token": "position", + "limit_key": "limit", + "output_token": "position", + "result_key": "items" + }, + "GetAuthorizers": { + "input_token": "position", + "limit_key": "limit", + "output_token": "position", + "result_key": "items" + }, + "GetDocumentationParts": { + "input_token": "position", + "limit_key": "limit", + "output_token": "position", + "result_key": "items" + }, + "GetDocumentationVersions": { + "input_token": "position", + "limit_key": "limit", + "output_token": "position", + "result_key": "items" + }, + "GetGatewayResponses": { + "input_token": "position", + "limit_key": "limit", + "output_token": "position", + "result_key": "items" + }, + "GetRequestValidators": { + "input_token": "position", + "limit_key": "limit", + "output_token": "position", + "result_key": "items" + }, + "GetSdkTypes": { + "input_token": "position", + "limit_key": "limit", + "output_token": "position", + "result_key": "items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/service-2.json.gz new file mode 100644 index 00000000..eb29857c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/apigateway/2015-07-09/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewaymanagementapi/2018-11-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewaymanagementapi/2018-11-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..2c53a2aa Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewaymanagementapi/2018-11-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewaymanagementapi/2018-11-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewaymanagementapi/2018-11-29/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewaymanagementapi/2018-11-29/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewaymanagementapi/2018-11-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewaymanagementapi/2018-11-29/service-2.json.gz new file mode 100644 index 00000000..0782d301 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewaymanagementapi/2018-11-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewayv2/2018-11-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewayv2/2018-11-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4ebc8bcb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewayv2/2018-11-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewayv2/2018-11-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewayv2/2018-11-29/paginators-1.json new file mode 100644 index 00000000..2f57dd2c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewayv2/2018-11-29/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "GetApis": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "GetAuthorizers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "GetDeployments": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "GetDomainNames": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "GetIntegrationResponses": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "GetIntegrations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "GetModels": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "GetRouteResponses": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "GetRoutes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "GetStages": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewayv2/2018-11-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewayv2/2018-11-29/service-2.json.gz new file mode 100644 index 00000000..addd7f2f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/apigatewayv2/2018-11-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..cc2c94fc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/examples-1.json new file mode 100644 index 00000000..664e05ef --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/examples-1.json @@ -0,0 +1,720 @@ +{ + "version": "1.0", + "examples": { + "CreateApplication": [ + { + "input": { + "Description": "An application used for creating an example.", + "Name": "example-application" + }, + "output": { + "Description": "An application used for creating an example.", + "Id": "339ohji", + "Name": "example-application" + }, + "comments": { + }, + "description": "The following create-application example creates an application in AWS AppConfig.", + "id": "to-create-an-application-1632264511615", + "title": "To create an application" + } + ], + "CreateConfigurationProfile": [ + { + "input": { + "ApplicationId": "339ohji", + "LocationUri": "ssm-parameter://Example-Parameter", + "Name": "Example-Configuration-Profile", + "RetrievalRoleArn": "arn:aws:iam::111122223333:role/Example-App-Config-Role" + }, + "output": { + "ApplicationId": "339ohji", + "Id": "ur8hx2f", + "LocationUri": "ssm-parameter://Example-Parameter", + "Name": "Example-Configuration-Profile", + "RetrievalRoleArn": "arn:aws:iam::111122223333:role/Example-App-Config-Role" + }, + "comments": { + }, + "description": "The following create-configuration-profile example creates a configuration profile using a configuration stored in Parameter Store, a capability of Systems Manager.", + "id": "to-create-a-configuration-profile-1632264580336", + "title": "To create a configuration profile" + } + ], + "CreateDeploymentStrategy": [ + { + "input": { + "DeploymentDurationInMinutes": 15, + "GrowthFactor": 25, + "Name": "Example-Deployment", + "ReplicateTo": "SSM_DOCUMENT" + }, + "output": { + "DeploymentDurationInMinutes": 15, + "FinalBakeTimeInMinutes": 0, + "GrowthFactor": 25, + "GrowthType": "LINEAR", + "Id": "1225qzk", + "Name": "Example-Deployment", + "ReplicateTo": "SSM_DOCUMENT" + }, + "comments": { + }, + "description": "The following create-deployment-strategy example creates a deployment strategy called Example-Deployment that takes 15 minutes and deploys the configuration to 25% of the application at a time. The strategy is also copied to an SSM Document.", + "id": "to-create-a-deployment-strategy-1632264783812", + "title": "To create a deployment strategy" + } + ], + "CreateEnvironment": [ + { + "input": { + "ApplicationId": "339ohji", + "Name": "Example-Environment" + }, + "output": { + "ApplicationId": "339ohji", + "Id": "54j1r29", + "Name": "Example-Environment", + "State": "READY_FOR_DEPLOYMENT" + }, + "comments": { + }, + "description": "The following create-environment example creates an AWS AppConfig environment named Example-Environment using the application you created using create-application", + "id": "to-create-an-environment-1632265124975", + "title": "To create an environment" + } + ], + "CreateHostedConfigurationVersion": [ + { + "input": { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f", + "Content": "eyAiTmFtZSI6ICJFeGFtcGxlQXBwbGljYXRpb24iLCAiSWQiOiBFeGFtcGxlSUQsICJSYW5rIjogNyB9", + "ContentType": "text", + "LatestVersionNumber": 1 + }, + "output": { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f", + "ContentType": "text", + "VersionNumber": 1 + }, + "comments": { + }, + "description": "The following create-hosted-configuration-version example creates a new configuration in the AWS AppConfig configuration store.", + "id": "to-create-a-hosted-configuration-version-1632265196980", + "title": "To create a hosted configuration version" + } + ], + "DeleteApplication": [ + { + "input": { + "ApplicationId": "339ohji" + }, + "comments": { + }, + "description": "The following delete-application example deletes the specified application. \n", + "id": "to-delete-an-application-1632265343951", + "title": "To delete an application" + } + ], + "DeleteConfigurationProfile": [ + { + "input": { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f" + }, + "comments": { + }, + "description": "The following delete-configuration-profile example deletes the specified configuration profile.", + "id": "to-delete-a-configuration-profile-1632265401308", + "title": "To delete a configuration profile" + } + ], + "DeleteDeploymentStrategy": [ + { + "input": { + "DeploymentStrategyId": "1225qzk" + }, + "comments": { + }, + "description": "The following delete-deployment-strategy example deletes the specified deployment strategy.", + "id": "to-delete-a-deployment-strategy-1632265473708", + "title": "To delete a deployment strategy" + } + ], + "DeleteEnvironment": [ + { + "input": { + "ApplicationId": "339ohji", + "EnvironmentId": "54j1r29" + }, + "comments": { + }, + "description": "The following delete-environment example deletes the specified application environment.", + "id": "to-delete-an-environment-1632265641044", + "title": "To delete an environment" + } + ], + "DeleteHostedConfigurationVersion": [ + { + "input": { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f", + "VersionNumber": 1 + }, + "comments": { + }, + "description": "The following delete-hosted-configuration-version example deletes a configuration version hosted in the AWS AppConfig configuration store.", + "id": "to-delete-a-hosted-configuration-version-1632265720740", + "title": "To delete a hosted configuration version" + } + ], + "GetApplication": [ + { + "input": { + "ApplicationId": "339ohji" + }, + "output": { + "Id": "339ohji", + "Name": "example-application" + }, + "comments": { + }, + "description": "The following get-application example lists the details of the specified application.", + "id": "to-list-details-of-an-application-1632265864702", + "title": "To list details of an application" + } + ], + "GetConfiguration": [ + { + "input": { + "Application": "example-application", + "ClientId": "example-id", + "Configuration": "Example-Configuration-Profile", + "Environment": "Example-Environment" + }, + "output": { + "ConfigurationVersion": "1", + "ContentType": "application/octet-stream" + }, + "comments": { + }, + "description": "The following get-configuration example returns the configuration details of the example application. On subsequent calls to get-configuration, use the client-configuration-version parameter to only update the configuration of your application if the version has changed. Only updating the configuration when the version has changed avoids excess charges incurred by calling get-configuration.", + "id": "to-retrieve-configuration-details-1632265954314", + "title": "To retrieve configuration details" + } + ], + "GetConfigurationProfile": [ + { + "input": { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f" + }, + "output": { + "ApplicationId": "339ohji", + "Id": "ur8hx2f", + "LocationUri": "ssm-parameter://Example-Parameter", + "Name": "Example-Configuration-Profile", + "RetrievalRoleArn": "arn:aws:iam::111122223333:role/Example-App-Config-Role" + }, + "comments": { + }, + "description": "The following get-configuration-profile example returns the details of the specified configuration profile.", + "id": "to-retrieve-configuration-profile-details-1632266081013", + "title": "To retrieve configuration profile details" + } + ], + "GetDeployment": [ + { + "input": { + "ApplicationId": "339ohji", + "DeploymentNumber": 1, + "EnvironmentId": "54j1r29" + }, + "output": { + "ApplicationId": "339ohji", + "CompletedAt": "2021-09-17T21:59:03.888000+00:00", + "ConfigurationLocationUri": "ssm-parameter://Example-Parameter", + "ConfigurationName": "Example-Configuration-Profile", + "ConfigurationProfileId": "ur8hx2f", + "ConfigurationVersion": "1", + "DeploymentDurationInMinutes": 15, + "DeploymentNumber": 1, + "DeploymentStrategyId": "1225qzk", + "EnvironmentId": "54j1r29", + "EventLog": [ + { + "Description": "Deployment completed", + "EventType": "DEPLOYMENT_COMPLETED", + "OccurredAt": "2021-09-17T21:59:03.888000+00:00", + "TriggeredBy": "APPCONFIG" + }, + { + "Description": "Deployment bake time started", + "EventType": "BAKE_TIME_STARTED", + "OccurredAt": "2021-09-17T21:58:57.722000+00:00", + "TriggeredBy": "APPCONFIG" + }, + { + "Description": "Configuration available to 100.00% of clients", + "EventType": "PERCENTAGE_UPDATED", + "OccurredAt": "2021-09-17T21:55:56.816000+00:00", + "TriggeredBy": "APPCONFIG" + }, + { + "Description": "Configuration available to 75.00% of clients", + "EventType": "PERCENTAGE_UPDATED", + "OccurredAt": "2021-09-17T21:52:56.567000+00:00", + "TriggeredBy": "APPCONFIG" + }, + { + "Description": "Configuration available to 50.00% of clients", + "EventType": "PERCENTAGE_UPDATED", + "OccurredAt": "2021-09-17T21:49:55.737000+00:00", + "TriggeredBy": "APPCONFIG" + }, + { + "Description": "Configuration available to 25.00% of clients", + "EventType": "PERCENTAGE_UPDATED", + "OccurredAt": "2021-09-17T21:46:55.187000+00:00", + "TriggeredBy": "APPCONFIG" + }, + { + "Description": "Deployment started", + "EventType": "DEPLOYMENT_STARTED", + "OccurredAt": "2021-09-17T21:43:54.205000+00:00", + "TriggeredBy": "USER" + } + ], + "FinalBakeTimeInMinutes": 0, + "GrowthFactor": 25, + "GrowthType": "LINEAR", + "PercentageComplete": 100, + "StartedAt": "2021-09-17T21:43:54.205000+00:00", + "State": "COMPLETE" + }, + "comments": { + }, + "description": "The following get-deployment example lists details of the deployment to the application in the specified environment and deployment.", + "id": "to-retrieve-deployment-details-1633976766883", + "title": "To retrieve deployment details" + } + ], + "GetDeploymentStrategy": [ + { + "input": { + "DeploymentStrategyId": "1225qzk" + }, + "output": { + "DeploymentDurationInMinutes": 15, + "FinalBakeTimeInMinutes": 0, + "GrowthFactor": 25, + "GrowthType": "LINEAR", + "Id": "1225qzk", + "Name": "Example-Deployment", + "ReplicateTo": "SSM_DOCUMENT" + }, + "comments": { + }, + "description": "The following get-deployment-strategy example lists the details of the specified deployment strategy.", + "id": "to-retrieve-details-of-a-deployment-strategy-1632266385805", + "title": "To retrieve details of a deployment strategy" + } + ], + "GetEnvironment": [ + { + "input": { + "ApplicationId": "339ohji", + "EnvironmentId": "54j1r29" + }, + "output": { + "ApplicationId": "339ohji", + "Id": "54j1r29", + "Name": "Example-Environment", + "State": "READY_FOR_DEPLOYMENT" + }, + "comments": { + }, + "description": "The following get-environment example returns the details and state of the specified environment.", + "id": "to-retrieve-environment-details-1632266924806", + "title": "To retrieve environment details" + } + ], + "GetHostedConfigurationVersion": [ + { + "input": { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f", + "VersionNumber": 1 + }, + "output": { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f", + "ContentType": "application/json", + "VersionNumber": 1 + }, + "comments": { + }, + "description": "The following get-hosted-configuration-version example retrieves the configuration details of the AWS AppConfig hosted configuration.", + "id": "to-retrieve-hosted-configuration-details-1632267003527", + "title": "To retrieve hosted configuration details" + } + ], + "ListApplications": [ + { + "input": { + }, + "output": { + "Items": [ + { + "Description": "An application used for creating an example.", + "Id": "339ohji", + "Name": "test-application" + }, + { + "Id": "rwalwu7", + "Name": "Test-Application" + } + ] + }, + "comments": { + }, + "description": "The following list-applications example lists the available applications in your AWS account.", + "id": "to-list-the-available-applications-1632267111131", + "title": "To list the available applications" + } + ], + "ListConfigurationProfiles": [ + { + "input": { + "ApplicationId": "339ohji" + }, + "output": { + "Items": [ + { + "ApplicationId": "339ohji", + "Id": "ur8hx2f", + "LocationUri": "ssm-parameter://Example-Parameter", + "Name": "Example-Configuration-Profile" + } + ] + }, + "comments": { + }, + "description": "The following list-configuration-profiles example lists the available configuration profiles for the specified application.", + "id": "to-list-the-available-configuration-profiles-1632267193265", + "title": "To list the available configuration profiles" + } + ], + "ListDeploymentStrategies": [ + { + "input": { + }, + "output": { + "Items": [ + { + "DeploymentDurationInMinutes": 15, + "FinalBakeTimeInMinutes": 0, + "GrowthFactor": 25, + "GrowthType": "LINEAR", + "Id": "1225qzk", + "Name": "Example-Deployment", + "ReplicateTo": "SSM_DOCUMENT" + } + ] + }, + "comments": { + }, + "description": "The following list-deployment-strategies example lists the available deployment strategies in your AWS account.", + "id": "to-list-the-available-deployment-strategies-1632267364180", + "title": "To list the available deployment strategies" + } + ], + "ListDeployments": [ + { + "input": { + "ApplicationId": "339ohji", + "EnvironmentId": "54j1r29" + }, + "output": { + "Items": [ + { + "CompletedAt": "2021-09-17T21:59:03.888000+00:00", + "ConfigurationName": "Example-Configuration-Profile", + "ConfigurationVersion": "1", + "DeploymentDurationInMinutes": 15, + "DeploymentNumber": 1, + "FinalBakeTimeInMinutes": 0, + "GrowthFactor": 25, + "GrowthType": "LINEAR", + "PercentageComplete": 100, + "StartedAt": "2021-09-17T21:43:54.205000+00:00", + "State": "COMPLETE" + } + ] + }, + "comments": { + }, + "description": "The following list-deployments example lists the available deployments in your AWS account for the specified application and environment.", + "id": "to-list-the-available-deployments-1632267282025", + "title": "To list the available deployments" + } + ], + "ListEnvironments": [ + { + "input": { + "ApplicationId": "339ohji" + }, + "output": { + "Items": [ + { + "ApplicationId": "339ohji", + "Id": "54j1r29", + "Name": "Example-Environment", + "State": "READY_FOR_DEPLOYMENT" + } + ] + }, + "comments": { + }, + "description": "The following list-environments example lists the available environments in your AWS account for the specified application.", + "id": "to-list-the-available-environments-1632267474389", + "title": "To list the available environments" + } + ], + "ListHostedConfigurationVersions": [ + { + "input": { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f" + }, + "output": { + "Items": [ + { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f", + "ContentType": "application/json", + "VersionNumber": 1 + } + ] + }, + "comments": { + }, + "description": "The following list-hosted-configuration-versions example lists the configurations versions hosted in the AWS AppConfig hosted configuration store for the specified application and configuration profile.", + "id": "to-list-the-available-hosted-configuration-versions-1632267647667", + "title": "To list the available hosted configuration versions" + } + ], + "ListTagsForResource": [ + { + "input": { + "ResourceArn": "arn:aws:appconfig:us-east-1:111122223333:application/339ohji" + }, + "output": { + "Tags": { + "group1": "1" + } + }, + "comments": { + }, + "description": "The following list-tags-for-resource example lists the tags of a specified application.", + "id": "to-list-the-tags-of-an-application-1632328796560", + "title": "To list the tags of an application" + } + ], + "StartDeployment": [ + { + "input": { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f", + "ConfigurationVersion": "1", + "DeploymentStrategyId": "1225qzk", + "Description": "", + "EnvironmentId": "54j1r29", + "Tags": { + } + }, + "output": { + "ApplicationId": "339ohji", + "ConfigurationLocationUri": "ssm-parameter://Example-Parameter", + "ConfigurationName": "Example-Configuration-Profile", + "ConfigurationProfileId": "ur8hx2f", + "ConfigurationVersion": "1", + "DeploymentDurationInMinutes": 15, + "DeploymentNumber": 1, + "DeploymentStrategyId": "1225qzk", + "EnvironmentId": "54j1r29", + "EventLog": [ + { + "Description": "Deployment started", + "EventType": "DEPLOYMENT_STARTED", + "OccurredAt": "2021-09-17T21:43:54.205000+00:00", + "TriggeredBy": "USER" + } + ], + "FinalBakeTimeInMinutes": 0, + "GrowthFactor": 25, + "GrowthType": "LINEAR", + "PercentageComplete": 1.0, + "StartedAt": "2021-09-17T21:43:54.205000+00:00", + "State": "DEPLOYING" + }, + "comments": { + }, + "description": "The following start-deployment example starts a deployment to the application using the specified environment, deployment strategy, and configuration profile.", + "id": "to-start-a-configuration-deployment-1632328956790", + "title": "To start a configuration deployment" + } + ], + "StopDeployment": [ + { + "input": { + "ApplicationId": "339ohji", + "DeploymentNumber": 2, + "EnvironmentId": "54j1r29" + }, + "output": { + "DeploymentDurationInMinutes": 15, + "DeploymentNumber": 2, + "FinalBakeTimeInMinutes": 0, + "GrowthFactor": 25.0, + "PercentageComplete": 1.0 + }, + "comments": { + }, + "description": "The following stop-deployment example stops the deployment of an application configuration to the specified environment.", + "id": "to-stop-configuration-deployment-1632329139126", + "title": "To stop configuration deployment" + } + ], + "TagResource": [ + { + "input": { + "ResourceArn": "arn:aws:appconfig:us-east-1:111122223333:application/339ohji", + "Tags": { + "group1": "1" + } + }, + "comments": { + }, + "description": "The following tag-resource example tags an application resource.", + "id": "to-tag-an-application-1632330350645", + "title": "To tag an application" + } + ], + "UntagResource": [ + { + "input": { + "ResourceArn": "arn:aws:appconfig:us-east-1:111122223333:application/339ohji", + "TagKeys": [ + "group1" + ] + }, + "comments": { + }, + "description": "The following untag-resource example removes the group1 tag from the specified application.", + "id": "to-remove-a-tag-from-an-application-1632330429881", + "title": "To remove a tag from an application" + } + ], + "UpdateApplication": [ + { + "input": { + "ApplicationId": "339ohji", + "Description": "", + "Name": "Example-Application" + }, + "output": { + "Description": "An application used for creating an example.", + "Id": "339ohji", + "Name": "Example-Application" + }, + "comments": { + }, + "description": "The following update-application example updates the name of the specified application.", + "id": "to-update-an-application-1632330585893", + "title": "To update an application" + } + ], + "UpdateConfigurationProfile": [ + { + "input": { + "ApplicationId": "339ohji", + "ConfigurationProfileId": "ur8hx2f", + "Description": "Configuration profile used for examples." + }, + "output": { + "ApplicationId": "339ohji", + "Description": "Configuration profile used for examples.", + "Id": "ur8hx2f", + "LocationUri": "ssm-parameter://Example-Parameter", + "Name": "Example-Configuration-Profile", + "RetrievalRoleArn": "arn:aws:iam::111122223333:role/Example-App-Config-Role" + }, + "comments": { + }, + "description": "The following update-configuration-profile example updates the description of the specified configuration profile.", + "id": "to-update-a-configuration-profile-1632330721974", + "title": "To update a configuration profile" + } + ], + "UpdateDeploymentStrategy": [ + { + "input": { + "DeploymentStrategyId": "1225qzk", + "FinalBakeTimeInMinutes": 20 + }, + "output": { + "DeploymentDurationInMinutes": 15, + "FinalBakeTimeInMinutes": 20, + "GrowthFactor": 25, + "GrowthType": "LINEAR", + "Id": "1225qzk", + "Name": "Example-Deployment", + "ReplicateTo": "SSM_DOCUMENT" + }, + "comments": { + }, + "description": "The following update-deployment-strategy example updates final bake time to 20 minutes in the specified deployment strategy. ::\n", + "id": "to-update-a-deployment-strategy-1632330896602", + "title": "To update a deployment strategy" + } + ], + "UpdateEnvironment": [ + { + "input": { + "ApplicationId": "339ohji", + "Description": "An environment for examples.", + "EnvironmentId": "54j1r29" + }, + "output": { + "ApplicationId": "339ohji", + "Description": "An environment for examples.", + "Id": "54j1r29", + "Name": "Example-Environment", + "State": "ROLLED_BACK" + }, + "comments": { + }, + "description": "The following update-environment example updates an environment's description.", + "id": "to-update-an-environment-1632331382428", + "title": "To update an environment" + } + ], + "ValidateConfiguration": [ + { + "input": { + "ApplicationId": "abc1234", + "ConfigurationProfileId": "ur8hx2f", + "ConfigurationVersion": "1" + }, + "comments": { + }, + "description": "The following validate-configuration example uses the validators in a configuration profile to validate a configuration.", + "id": "to-validate-a-configuration-1632331491365", + "title": "To validate a configuration" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/paginators-1.json new file mode 100644 index 00000000..f176baba --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/paginators-1.json @@ -0,0 +1,52 @@ +{ + "pagination": { + "ListApplications": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListConfigurationProfiles": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListDeploymentStrategies": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListDeployments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListEnvironments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListExtensionAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListExtensions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListHostedConfigurationVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/service-2.json.gz new file mode 100644 index 00000000..852eed74 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfig/2019-10-09/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..630470cc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/service-2.json.gz new file mode 100644 index 00000000..8ed203ce Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appconfigdata/2021-11-11/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..7e5f069f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/paginators-1.json new file mode 100644 index 00000000..8138e8a2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListAppAuthorizations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "appAuthorizationSummaryList" + }, + "ListAppBundles": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "appBundleSummaryList" + }, + "ListIngestionDestinations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "ingestionDestinations" + }, + "ListIngestions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "ingestions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/service-2.json.gz new file mode 100644 index 00000000..ca3ada0c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appfabric/2023-05-19/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a442d984 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/service-2.json.gz new file mode 100644 index 00000000..0dd2b6dd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appflow/2020-08-23/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..681cbb35 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/paginators-1.json new file mode 100644 index 00000000..64b4b5cb --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "ListApplications": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Applications" + }, + "ListDataIntegrationAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DataIntegrationAssociations" + }, + "ListDataIntegrations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DataIntegrations" + }, + "ListEventIntegrationAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EventIntegrationAssociations" + }, + "ListEventIntegrations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EventIntegrations" + }, + "ListApplicationAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ApplicationAssociations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/service-2.json.gz new file mode 100644 index 00000000..c8c24d79 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appintegrations/2020-07-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3291b26d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/examples-1.json new file mode 100644 index 00000000..5abcd554 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/examples-1.json @@ -0,0 +1,221 @@ +{ + "version": "1.0", + "examples": { + "DeleteScalingPolicy": [ + { + "input": { + "PolicyName": "web-app-cpu-lt-25", + "ResourceId": "service/default/web-app", + "ScalableDimension": "ecs:service:DesiredCount", + "ServiceNamespace": "ecs" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes a scaling policy for the Amazon ECS service called web-app, which is running in the default cluster.", + "id": "to-delete-a-scaling-policy-1470863892689", + "title": "To delete a scaling policy" + } + ], + "DeregisterScalableTarget": [ + { + "input": { + "ResourceId": "service/default/web-app", + "ScalableDimension": "ecs:service:DesiredCount", + "ServiceNamespace": "ecs" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deregisters a scalable target for an Amazon ECS service called web-app that is running in the default cluster.", + "id": "to-deregister-a-scalable-target-1470864164895", + "title": "To deregister a scalable target" + } + ], + "DescribeScalableTargets": [ + { + "input": { + "ServiceNamespace": "ecs" + }, + "output": { + "ScalableTargets": [ + { + "CreationTime": "2019-05-06T11:21:46.199Z", + "MaxCapacity": 10, + "MinCapacity": 1, + "ResourceId": "service/default/web-app", + "RoleARN": "arn:aws:iam::012345678910:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService", + "ScalableDimension": "ecs:service:DesiredCount", + "ServiceNamespace": "ecs", + "SuspendedState": { + "DynamicScalingInSuspended": false, + "DynamicScalingOutSuspended": false, + "ScheduledScalingSuspended": false + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the scalable targets for the ECS service namespace.", + "id": "to-describe-scalable-targets-1470864286961", + "title": "To describe scalable targets" + } + ], + "DescribeScalingActivities": [ + { + "input": { + "ResourceId": "service/default/web-app", + "ScalableDimension": "ecs:service:DesiredCount", + "ServiceNamespace": "ecs" + }, + "output": { + "ScalingActivities": [ + { + "ActivityId": "e6c5f7d1-dbbb-4a3f-89b2-51f33e766399", + "Cause": "monitor alarm web-app-cpu-lt-25 in state ALARM triggered policy web-app-cpu-lt-25", + "Description": "Setting desired count to 1.", + "EndTime": "2019-05-06T16:04:32.111Z", + "ResourceId": "service/default/web-app", + "ScalableDimension": "ecs:service:DesiredCount", + "ServiceNamespace": "ecs", + "StartTime": "2019-05-06T16:03:58.171Z", + "StatusCode": "Successful", + "StatusMessage": "Successfully set desired count to 1. Change successfully fulfilled by ecs." + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the scaling activities for an Amazon ECS service called web-app that is running in the default cluster.", + "id": "to-describe-scaling-activities-for-a-scalable-target-1470864398629", + "title": "To describe scaling activities for a scalable target" + } + ], + "DescribeScalingPolicies": [ + { + "input": { + "ServiceNamespace": "ecs" + }, + "output": { + "NextToken": "", + "ScalingPolicies": [ + { + "Alarms": [ + { + "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:web-app-cpu-gt-75", + "AlarmName": "web-app-cpu-gt-75" + } + ], + "CreationTime": "2019-05-06T12:11:39.230Z", + "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy:6d8972f3-efc8-437c-92d1-6270f29a66e7:resource/ecs/service/default/web-app:policyName/web-app-cpu-gt-75", + "PolicyName": "web-app-cpu-gt-75", + "PolicyType": "StepScaling", + "ResourceId": "service/default/web-app", + "ScalableDimension": "ecs:service:DesiredCount", + "ServiceNamespace": "ecs", + "StepScalingPolicyConfiguration": { + "AdjustmentType": "PercentChangeInCapacity", + "Cooldown": 60, + "StepAdjustments": [ + { + "MetricIntervalLowerBound": 0, + "ScalingAdjustment": 200 + } + ] + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the scaling policies for the ECS service namespace.", + "id": "to-describe-scaling-policies-1470864609734", + "title": "To describe scaling policies" + } + ], + "PutScalingPolicy": [ + { + "input": { + "PolicyName": "cpu75-target-tracking-scaling-policy", + "PolicyType": "TargetTrackingScaling", + "ResourceId": "service/default/web-app", + "ScalableDimension": "ecs:service:DesiredCount", + "ServiceNamespace": "ecs", + "TargetTrackingScalingPolicyConfiguration": { + "PredefinedMetricSpecification": { + "PredefinedMetricType": "ECSServiceAverageCPUUtilization" + }, + "ScaleInCooldown": 60, + "ScaleOutCooldown": 60, + "TargetValue": 75 + } + }, + "output": { + "Alarms": [ + { + "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-service/default/web-app-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca", + "AlarmName": "TargetTracking-service/default/web-app-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca" + }, + { + "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-service/default/web-app-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d", + "AlarmName": "TargetTracking-service/default/web-app-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d" + } + ], + "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy:6d8972f3-efc8-437c-92d1-6270f29a66e7:resource/ecs/service/default/web-app:policyName/cpu75-target-tracking-scaling-policy" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example applies a target tracking scaling policy with a predefined metric specification to an Amazon ECS service called web-app in the default cluster. The policy keeps the average CPU utilization of the service at 75 percent, with scale-out and scale-in cooldown periods of 60 seconds.", + "id": "to-apply-a-target-tracking-scaling-policy-with-a-predefined-metric-specification-1569364247984", + "title": "To apply a target tracking scaling policy with a predefined metric specification" + } + ], + "RegisterScalableTarget": [ + { + "input": { + "MaxCapacity": 10, + "MinCapacity": 1, + "ResourceId": "service/default/web-app", + "ScalableDimension": "ecs:service:DesiredCount", + "ServiceNamespace": "ecs" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example registers a scalable target from an Amazon ECS service called web-app that is running on the default cluster, with a minimum desired count of 1 task and a maximum desired count of 10 tasks.", + "id": "to-register-a-new-scalable-target-1470864910380", + "title": "To register an ECS service as a scalable target" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/paginators-1.json new file mode 100644 index 00000000..7ec8f3af --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "DescribeScalableTargets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ScalableTargets" + }, + "DescribeScalingActivities": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ScalingActivities" + }, + "DescribeScalingPolicies": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ScalingPolicies" + }, + "DescribeScheduledActions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ScheduledActions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/service-2.json.gz new file mode 100644 index 00000000..ba16da63 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/application-autoscaling/2016-02-06/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..36258a06 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/service-2.json.gz new file mode 100644 index 00000000..b875ac4a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/application-insights/2018-11-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4c61c09e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/paginators-1.json new file mode 100644 index 00000000..adffd06f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListReportDefinitions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "reportDefinitions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/service-2.json.gz new file mode 100644 index 00000000..968426b9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/applicationcostprofiler/2020-09-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0bf1ea9b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/examples-1.json new file mode 100644 index 00000000..752e89e0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/examples-1.json @@ -0,0 +1,4 @@ +{ + "version": "1.0", + "examples": { } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/paginators-1.json new file mode 100644 index 00000000..162b8b96 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListMeshes": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "meshes" + }, + "ListRoutes": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "routes" + }, + "ListVirtualNodes": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "virtualNodes" + }, + "ListVirtualRouters": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "virtualRouters" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/service-2.json.gz new file mode 100644 index 00000000..d0d6a865 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2018-10-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..df816363 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/paginators-1.json new file mode 100644 index 00000000..5a79b5b5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/paginators-1.json @@ -0,0 +1,52 @@ +{ + "pagination": { + "ListMeshes": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "meshes" + }, + "ListRoutes": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "routes" + }, + "ListVirtualNodes": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "virtualNodes" + }, + "ListVirtualRouters": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "virtualRouters" + }, + "ListVirtualServices": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "virtualServices" + }, + "ListTagsForResource": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "tags" + }, + "ListGatewayRoutes": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "gatewayRoutes" + }, + "ListVirtualGateways": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "virtualGateways" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/service-2.json.gz new file mode 100644 index 00000000..a2348a80 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appmesh/2019-01-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..62ba7b8a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/service-2.json.gz new file mode 100644 index 00000000..2ec64b8c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/apprunner/2020-05-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..19188e07 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/paginators-1.json new file mode 100644 index 00000000..40cbf4ba --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/paginators-1.json @@ -0,0 +1,60 @@ +{ + "pagination": { + "DescribeDirectoryConfigs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DirectoryConfigs" + }, + "DescribeFleets": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Fleets" + }, + "DescribeImageBuilders": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ImageBuilders" + }, + "DescribeImages": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Images" + }, + "DescribeSessions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "Sessions" + }, + "DescribeStacks": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Stacks" + }, + "DescribeUserStackAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "UserStackAssociations" + }, + "DescribeUsers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Users" + }, + "ListAssociatedFleets": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Names" + }, + "ListAssociatedStacks": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Names" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/service-2.json.gz new file mode 100644 index 00000000..9a79cca4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/waiters-2.json new file mode 100644 index 00000000..1c8dea0d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appstream/2016-12-01/waiters-2.json @@ -0,0 +1,55 @@ +{ + "version": 2, + "waiters": { + "FleetStarted": { + "delay": 30, + "maxAttempts": 40, + "operation": "DescribeFleets", + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Fleets[].State", + "expected": "RUNNING" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Fleets[].State", + "expected": "STOPPING" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Fleets[].State", + "expected": "STOPPED" + } + ] + }, + "FleetStopped": { + "delay": 30, + "maxAttempts": 40, + "operation": "DescribeFleets", + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Fleets[].State", + "expected": "STOPPED" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Fleets[].State", + "expected": "STARTING" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Fleets[].State", + "expected": "RUNNING" + } + ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..850197cc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/paginators-1.json new file mode 100644 index 00000000..487d71e6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/paginators-1.json @@ -0,0 +1,46 @@ +{ + "pagination": { + "ListApiKeys": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "apiKeys" + }, + "ListDataSources": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "dataSources" + }, + "ListFunctions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "functions" + }, + "ListGraphqlApis": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "graphqlApis" + }, + "ListResolvers": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "resolvers" + }, + "ListResolversByFunction": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "resolvers" + }, + "ListTypes": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "types" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/service-2.json.gz new file mode 100644 index 00000000..b8b2dd94 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/appsync/2017-07-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/arc-zonal-shift/2022-10-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/arc-zonal-shift/2022-10-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..218d0dc1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/arc-zonal-shift/2022-10-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/arc-zonal-shift/2022-10-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/arc-zonal-shift/2022-10-30/paginators-1.json new file mode 100644 index 00000000..9fcfc565 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/arc-zonal-shift/2022-10-30/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListManagedResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListZonalShifts": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListAutoshifts": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/arc-zonal-shift/2022-10-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/arc-zonal-shift/2022-10-30/service-2.json.gz new file mode 100644 index 00000000..d84f406a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/arc-zonal-shift/2022-10-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1e55fd18 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/paginators-1.json new file mode 100644 index 00000000..3b126bab --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/paginators-1.json @@ -0,0 +1,50 @@ +{ + "pagination": { + "ListNamedQueries": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "NamedQueryIds" + }, + "ListQueryExecutions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "QueryExecutionIds" + }, + "GetQueryResults": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResultSet.Rows", + "non_aggregate_keys": [ + "ResultSet.ResultSetMetadata", + "UpdateCount" + ] + }, + "ListDataCatalogs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DataCatalogsSummary" + }, + "ListDatabases": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DatabaseList" + }, + "ListTableMetadata": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TableMetadataList" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Tags" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/service-2.json.gz new file mode 100644 index 00000000..6cc728e1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/athena/2017-05-18/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..78be09d2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/service-2.json.gz new file mode 100644 index 00000000..5e1d413e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/auditmanager/2017-07-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1dc2b86c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/paginators-1.json new file mode 100644 index 00000000..e3f812a1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "DescribeScalingPlanResources": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ScalingPlanResources" + }, + "DescribeScalingPlans": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ScalingPlans" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/service-2.json.gz new file mode 100644 index 00000000..34514160 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling-plans/2018-01-06/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..59bafcdf Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/examples-1.json new file mode 100644 index 00000000..af6929b4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/examples-1.json @@ -0,0 +1,1696 @@ +{ + "version": "1.0", + "examples": { + "AttachInstances": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "InstanceIds": [ + "i-93633f9b" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches the specified instance to the specified Auto Scaling group.", + "id": "autoscaling-attach-instances-1", + "title": "To attach an instance to an Auto Scaling group" + } + ], + "AttachLoadBalancerTargetGroups": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "TargetGroupARNs": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches the specified target group to the specified Auto Scaling group.", + "id": "autoscaling-attach-load-balancer-target-groups-1", + "title": "To attach a target group to an Auto Scaling group" + } + ], + "AttachLoadBalancers": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "LoadBalancerNames": [ + "my-load-balancer" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches the specified load balancer to the specified Auto Scaling group.", + "id": "autoscaling-attach-load-balancers-1", + "title": "To attach a load balancer to an Auto Scaling group" + } + ], + "AttachTrafficSources": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "TrafficSources": [ + { + "Identifier": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches the specified target group to the specified Auto Scaling group.", + "id": "to-attach-a-target-group-to-an-auto-scaling-group-1680036570089", + "title": "To attach a target group to an Auto Scaling group" + } + ], + "CancelInstanceRefresh": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group" + }, + "output": { + "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels an instance refresh operation in progress.", + "id": "to-cancel-an-instance-refresh-1592960979817", + "title": "To cancel an instance refresh" + } + ], + "CompleteLifecycleAction": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "LifecycleActionResult": "CONTINUE", + "LifecycleActionToken": "bcd2f1b8-9a78-44d3-8a7a-4dd07d7cf635", + "LifecycleHookName": "my-lifecycle-hook" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example notifies Auto Scaling that the specified lifecycle action is complete so that it can finish launching or terminating the instance.", + "id": "autoscaling-complete-lifecycle-action-1", + "title": "To complete the lifecycle action" + } + ], + "CreateAutoScalingGroup": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "DefaultInstanceWarmup": 120, + "LaunchTemplate": { + "LaunchTemplateName": "my-template-for-auto-scaling", + "Version": "$Default" + }, + "MaxInstanceLifetime": 2592000, + "MaxSize": 3, + "MinSize": 1, + "VPCZoneIdentifier": "subnet-057fa0918fEXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an Auto Scaling group.", + "id": "autoscaling-create-auto-scaling-group-1", + "title": "To create an Auto Scaling group" + }, + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "HealthCheckGracePeriod": 300, + "HealthCheckType": "ELB", + "LaunchTemplate": { + "LaunchTemplateName": "my-template-for-auto-scaling", + "Version": "$Default" + }, + "MaxSize": 3, + "MinSize": 1, + "TargetGroupARNs": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" + ], + "VPCZoneIdentifier": "subnet-057fa0918fEXAMPLE, subnet-610acd08EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an Auto Scaling group and attaches the specified target group.", + "id": "autoscaling-create-auto-scaling-group-2", + "title": "To create an Auto Scaling group with an attached target group" + }, + { + "input": { + "AutoScalingGroupName": "my-asg", + "DesiredCapacity": 3, + "MaxSize": 5, + "MinSize": 1, + "MixedInstancesPolicy": { + "InstancesDistribution": { + "OnDemandBaseCapacity": 1, + "OnDemandPercentageAboveBaseCapacity": 50, + "SpotAllocationStrategy": "price-capacity-optimized" + }, + "LaunchTemplate": { + "LaunchTemplateSpecification": { + "LaunchTemplateName": "my-launch-template-for-x86", + "Version": "$Default" + }, + "Overrides": [ + { + "InstanceType": "c6g.large", + "LaunchTemplateSpecification": { + "LaunchTemplateName": "my-launch-template-for-arm", + "Version": "$Default" + } + }, + { + "InstanceType": "c5.large" + }, + { + "InstanceType": "c5a.large" + } + ] + } + }, + "VPCZoneIdentifier": "subnet-057fa0918fEXAMPLE, subnet-610acd08EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an Auto Scaling group with a mixed instances policy. It specifies the c5.large, c5a.large, and c6g.large instance types and defines a different launch template for the c6g.large instance type.", + "id": "autoscaling-create-auto-scaling-group-3", + "title": "To create an Auto Scaling group with a mixed instances policy" + }, + { + "input": { + "AutoScalingGroupName": "my-asg", + "DesiredCapacity": 4, + "DesiredCapacityType": "units", + "MaxSize": 100, + "MinSize": 0, + "MixedInstancesPolicy": { + "InstancesDistribution": { + "OnDemandPercentageAboveBaseCapacity": 50, + "SpotAllocationStrategy": "price-capacity-optimized" + }, + "LaunchTemplate": { + "LaunchTemplateSpecification": { + "LaunchTemplateName": "my-template-for-auto-scaling", + "Version": "$Default" + }, + "Overrides": [ + { + "InstanceRequirements": { + "CpuManufacturers": [ + "intel" + ], + "MemoryMiB": { + "Min": 16384 + }, + "VCpuCount": { + "Max": 8, + "Min": 4 + } + } + } + ] + } + }, + "VPCZoneIdentifier": "subnet-057fa0918fEXAMPLE, subnet-610acd08EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an Auto Scaling group using attribute-based instance type selection. It requires the instance types to have a minimum of four vCPUs and a maximum of eight vCPUs, a minimum of 16,384 MiB of memory, and an Intel manufactured CPU.", + "id": "autoscaling-create-auto-scaling-group-4", + "title": "To create an Auto Scaling group using attribute-based instance type selection" + } + ], + "CreateLaunchConfiguration": [ + { + "input": { + "IamInstanceProfile": "my-iam-role", + "ImageId": "ami-12345678", + "InstanceType": "m3.medium", + "LaunchConfigurationName": "my-launch-config", + "SecurityGroups": [ + "sg-eb2af88e" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a launch configuration.", + "id": "autoscaling-create-launch-configuration-1", + "title": "To create a launch configuration" + } + ], + "CreateOrUpdateTags": [ + { + "input": { + "Tags": [ + { + "Key": "Role", + "PropagateAtLaunch": true, + "ResourceId": "my-auto-scaling-group", + "ResourceType": "auto-scaling-group", + "Value": "WebServer" + }, + { + "Key": "Dept", + "PropagateAtLaunch": true, + "ResourceId": "my-auto-scaling-group", + "ResourceType": "auto-scaling-group", + "Value": "Research" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds two tags to the specified Auto Scaling group.", + "id": "autoscaling-create-or-update-tags-1", + "title": "To create or update tags for an Auto Scaling group" + } + ], + "DeleteAutoScalingGroup": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified Auto Scaling group.", + "id": "autoscaling-delete-auto-scaling-group-1", + "title": "To delete an Auto Scaling group" + }, + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "ForceDelete": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified Auto Scaling group and all its instances.", + "id": "autoscaling-delete-auto-scaling-group-2", + "title": "To delete an Auto Scaling group and all its instances" + } + ], + "DeleteLaunchConfiguration": [ + { + "input": { + "LaunchConfigurationName": "my-launch-config" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified launch configuration.", + "id": "autoscaling-delete-launch-configuration-1", + "title": "To delete a launch configuration" + } + ], + "DeleteLifecycleHook": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "LifecycleHookName": "my-lifecycle-hook" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified lifecycle hook.", + "id": "autoscaling-delete-lifecycle-hook-1", + "title": "To delete a lifecycle hook" + } + ], + "DeleteNotificationConfiguration": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "TopicARN": "arn:aws:sns:us-west-2:123456789012:my-sns-topic" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified notification from the specified Auto Scaling group.", + "id": "autoscaling-delete-notification-configuration-1", + "title": "To delete an Auto Scaling notification" + } + ], + "DeletePolicy": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "PolicyName": "my-step-scale-out-policy" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified Auto Scaling policy.", + "id": "autoscaling-delete-policy-1", + "title": "To delete an Auto Scaling policy" + } + ], + "DeleteScheduledAction": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "ScheduledActionName": "my-scheduled-action" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified scheduled action from the specified Auto Scaling group.", + "id": "autoscaling-delete-scheduled-action-1", + "title": "To delete a scheduled action from an Auto Scaling group" + } + ], + "DeleteTags": [ + { + "input": { + "Tags": [ + { + "Key": "Dept", + "ResourceId": "my-auto-scaling-group", + "ResourceType": "auto-scaling-group", + "Value": "Research" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified tag from the specified Auto Scaling group.", + "id": "autoscaling-delete-tags-1", + "title": "To delete a tag from an Auto Scaling group" + } + ], + "DescribeAccountLimits": [ + { + "output": { + "MaxNumberOfAutoScalingGroups": 20, + "MaxNumberOfLaunchConfigurations": 100, + "NumberOfAutoScalingGroups": 3, + "NumberOfLaunchConfigurations": 5 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Amazon EC2 Auto Scaling service quotas for your account.", + "id": "autoscaling-describe-account-limits-1", + "title": "To describe your Auto Scaling account limits" + } + ], + "DescribeAdjustmentTypes": [ + { + "output": { + "AdjustmentTypes": [ + { + "AdjustmentType": "ChangeInCapacity" + }, + { + "AdjustmentType": "ExactCapcity" + }, + { + "AdjustmentType": "PercentChangeInCapacity" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the available adjustment types.", + "id": "autoscaling-describe-adjustment-types-1", + "title": "To describe the Amazon EC2 Auto Scaling adjustment types" + } + ], + "DescribeAutoScalingGroups": [ + { + "input": { + "AutoScalingGroupNames": [ + "my-auto-scaling-group" + ] + }, + "output": { + "AutoScalingGroups": [ + { + "AutoScalingGroupARN": "arn:aws:autoscaling:us-west-1:123456789012:autoScalingGroup:12345678-1234-1234-1234-123456789012:autoScalingGroupName/my-auto-scaling-group", + "AutoScalingGroupName": "my-auto-scaling-group", + "AvailabilityZones": [ + "us-west-2a", + "us-west-2b", + "us-west-2c" + ], + "CreatedTime": "2023-03-09T22:15:11.611Z", + "DefaultCooldown": 300, + "DesiredCapacity": 2, + "EnabledMetrics": [ + + ], + "HealthCheckGracePeriod": 300, + "HealthCheckType": "EC2", + "Instances": [ + { + "AvailabilityZone": "us-west-2c", + "HealthStatus": "Healthy", + "InstanceId": "i-05b4f7d5be44822a6", + "InstanceType": "t3.micro", + "LaunchConfigurationName": "my-launch-config", + "LifecycleState": "InService", + "ProtectedFromScaleIn": false + }, + { + "AvailabilityZone": "us-west-2b", + "HealthStatus": "Healthy", + "InstanceId": "i-0c20ac468fa3049e8", + "InstanceType": "t3.micro", + "LaunchConfigurationName": "my-launch-config", + "LifecycleState": "InService", + "ProtectedFromScaleIn": false + } + ], + "LaunchConfigurationName": "my-launch-config", + "LoadBalancerNames": [ + + ], + "MaxSize": 5, + "MinSize": 1, + "NewInstancesProtectedFromScaleIn": false, + "ServiceLinkedRoleARN": "arn:aws:iam::123456789012:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling", + "SuspendedProcesses": [ + + ], + "Tags": [ + + ], + "TargetGroupARNs": [ + + ], + "TerminationPolicies": [ + "Default" + ], + "TrafficSources": [ + + ], + "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Auto Scaling group.", + "id": "autoscaling-describe-auto-scaling-groups-1", + "title": "To describe an Auto Scaling group" + } + ], + "DescribeAutoScalingInstances": [ + { + "input": { + "InstanceIds": [ + "i-05b4f7d5be44822a6" + ] + }, + "output": { + "AutoScalingInstances": [ + { + "AutoScalingGroupName": "my-auto-scaling-group", + "AvailabilityZone": "us-west-2c", + "HealthStatus": "HEALTHY", + "InstanceId": "i-05b4f7d5be44822a6", + "InstanceType": "t3.micro", + "LaunchConfigurationName": "my-launch-config", + "LifecycleState": "InService", + "ProtectedFromScaleIn": false + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Auto Scaling instance.", + "id": "autoscaling-describe-auto-scaling-instances-1", + "title": "To describe one or more Auto Scaling instances" + } + ], + "DescribeAutoScalingNotificationTypes": [ + { + "output": { + "AutoScalingNotificationTypes": [ + "autoscaling:EC2_INSTANCE_LAUNCH", + "autoscaling:EC2_INSTANCE_LAUNCH_ERROR", + "autoscaling:EC2_INSTANCE_TERMINATE", + "autoscaling:EC2_INSTANCE_TERMINATE_ERROR", + "autoscaling:TEST_NOTIFICATION" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the available notification types.", + "id": "autoscaling-describe-auto-scaling-notification-types-1", + "title": "To describe the Auto Scaling notification types" + } + ], + "DescribeInstanceRefreshes": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group" + }, + "output": { + "InstanceRefreshes": [ + { + "AutoScalingGroupName": "my-auto-scaling-group", + "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b", + "InstancesToUpdate": 0, + "PercentageComplete": 50, + "Preferences": { + "AlarmSpecification": { + "Alarms": [ + "my-alarm" + ] + }, + "AutoRollback": true, + "InstanceWarmup": 200, + "MinHealthyPercentage": 90, + "ScaleInProtectedInstances": "Ignore", + "SkipMatching": false, + "StandbyInstances": "Ignore" + }, + "StartTime": "2023-06-13T16:46:52+00:00", + "Status": "InProgress", + "StatusReason": "Waiting for instances to warm up before continuing. For example: i-0645704820a8e83ff is warming up." + }, + { + "AutoScalingGroupName": "my-auto-scaling-group", + "EndTime": "2023-06-02T13:59:45+00:00", + "InstanceRefreshId": "0e151305-1e57-4a32-a256-1fd14157c5ec", + "InstancesToUpdate": 0, + "PercentageComplete": 100, + "Preferences": { + "AlarmSpecification": { + "Alarms": [ + "my-alarm" + ] + }, + "AutoRollback": true, + "InstanceWarmup": 200, + "MinHealthyPercentage": 90, + "ScaleInProtectedInstances": "Ignore", + "SkipMatching": false, + "StandbyInstances": "Ignore" + }, + "StartTime": "2023-06-02T13:53:37+00:00", + "Status": "Successful" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the instance refreshes for the specified Auto Scaling group.", + "id": "to-list-instance-refreshes-1592959593746", + "title": "To list instance refreshes" + } + ], + "DescribeLaunchConfigurations": [ + { + "input": { + "LaunchConfigurationNames": [ + "my-launch-config" + ] + }, + "output": { + "LaunchConfigurations": [ + { + "AssociatePublicIpAddress": true, + "BlockDeviceMappings": [ + + ], + "CreatedTime": "2014-05-07T17:39:28.599Z", + "EbsOptimized": false, + "ImageId": "ami-043a5034", + "InstanceMonitoring": { + "Enabled": true + }, + "InstanceType": "t1.micro", + "LaunchConfigurationARN": "arn:aws:autoscaling:us-west-2:123456789012:launchConfiguration:98d3b196-4cf9-4e88-8ca1-8547c24ced8b:launchConfigurationName/my-launch-config", + "LaunchConfigurationName": "my-launch-config", + "SecurityGroups": [ + "sg-67ef0308" + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified launch configuration.", + "id": "autoscaling-describe-launch-configurations-1", + "title": "To describe Auto Scaling launch configurations" + } + ], + "DescribeLifecycleHookTypes": [ + { + "output": { + "LifecycleHookTypes": [ + "autoscaling:EC2_INSTANCE_LAUNCHING", + "autoscaling:EC2_INSTANCE_TERMINATING" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the available lifecycle hook types.", + "id": "autoscaling-describe-lifecycle-hook-types-1", + "title": "To describe the available types of lifecycle hooks" + } + ], + "DescribeLifecycleHooks": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group" + }, + "output": { + "LifecycleHooks": [ + { + "AutoScalingGroupName": "my-auto-scaling-group", + "DefaultResult": "ABANDON", + "GlobalTimeout": 172800, + "HeartbeatTimeout": 3600, + "LifecycleHookName": "my-lifecycle-hook", + "LifecycleTransition": "autoscaling:EC2_INSTANCE_LAUNCHING", + "NotificationTargetARN": "arn:aws:sns:us-west-2:123456789012:my-sns-topic", + "RoleARN": "arn:aws:iam::123456789012:role/my-auto-scaling-role" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the lifecycle hooks for the specified Auto Scaling group.", + "id": "autoscaling-describe-lifecycle-hooks-1", + "title": "To describe your lifecycle hooks" + } + ], + "DescribeLoadBalancerTargetGroups": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group" + }, + "output": { + "LoadBalancerTargetGroups": [ + { + "LoadBalancerTargetGroupARN": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "State": "Added" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the target groups attached to the specified Auto Scaling group.", + "id": "autoscaling-describe-load-balancer-target-groups-1", + "title": "To describe the target groups for an Auto Scaling group" + } + ], + "DescribeLoadBalancers": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group" + }, + "output": { + "LoadBalancers": [ + { + "LoadBalancerName": "my-load-balancer", + "State": "Added" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the load balancers attached to the specified Auto Scaling group.", + "id": "autoscaling-describe-load-balancers-1", + "title": "To describe the load balancers for an Auto Scaling group" + } + ], + "DescribeMetricCollectionTypes": [ + { + "output": { + "Granularities": [ + { + "Granularity": "1Minute" + } + ], + "Metrics": [ + { + "Metric": "GroupMinSize" + }, + { + "Metric": "GroupMaxSize" + }, + { + "Metric": "GroupDesiredCapacity" + }, + { + "Metric": "GroupInServiceInstances" + }, + { + "Metric": "GroupPendingInstances" + }, + { + "Metric": "GroupTerminatingInstances" + }, + { + "Metric": "GroupStandbyInstances" + }, + { + "Metric": "GroupTotalInstances" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the available metric collection types.", + "id": "autoscaling-describe-metric-collection-types-1", + "title": "To describe the Auto Scaling metric collection types" + } + ], + "DescribeNotificationConfigurations": [ + { + "input": { + "AutoScalingGroupNames": [ + "my-auto-scaling-group" + ] + }, + "output": { + "NotificationConfigurations": [ + { + "AutoScalingGroupName": "my-auto-scaling-group", + "NotificationType": "autoscaling:TEST_NOTIFICATION", + "TopicARN": "arn:aws:sns:us-west-2:123456789012:my-sns-topic-2" + }, + { + "AutoScalingGroupName": "my-auto-scaling-group", + "NotificationType": "autoscaling:TEST_NOTIFICATION", + "TopicARN": "arn:aws:sns:us-west-2:123456789012:my-sns-topic" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the notification configurations for the specified Auto Scaling group.", + "id": "autoscaling-describe-notification-configurations-1", + "title": "To describe Auto Scaling notification configurations" + } + ], + "DescribePolicies": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group" + }, + "output": { + "ScalingPolicies": [ + { + "AdjustmentType": "ChangeInCapacity", + "Alarms": [ + + ], + "AutoScalingGroupName": "my-auto-scaling-group", + "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:2233f3d7-6290-403b-b632-93c553560106:autoScalingGroupName/my-auto-scaling-group:policyName/ScaleIn", + "PolicyName": "ScaleIn", + "ScalingAdjustment": -1 + }, + { + "AdjustmentType": "PercentChangeInCapacity", + "Alarms": [ + + ], + "AutoScalingGroupName": "my-auto-scaling-group", + "Cooldown": 60, + "MinAdjustmentStep": 2, + "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:2b435159-cf77-4e89-8c0e-d63b497baad7:autoScalingGroupName/my-auto-scaling-group:policyName/ScalePercentChange", + "PolicyName": "ScalePercentChange", + "ScalingAdjustment": 25 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the policies for the specified Auto Scaling group.", + "id": "autoscaling-describe-policies-1", + "title": "To describe scaling policies" + } + ], + "DescribeScalingActivities": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group" + }, + "output": { + "Activities": [ + { + "ActivityId": "f9f2d65b-f1f2-43e7-b46d-d86756459699", + "AutoScalingGroupARN": "arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:12345678-1234-1234-1234-123456789012:autoScalingGroupName/my-auto-scaling-group", + "AutoScalingGroupName": "my-auto-scaling-group", + "Cause": "At 2013-08-19T20:53:25Z a user request created an AutoScalingGroup changing the desired capacity from 0 to 1. At 2013-08-19T20:53:29Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1.", + "Description": "Launching a new EC2 instance: i-4ba0837f", + "Details": "details", + "EndTime": "2013-08-19T20:54:02Z", + "Progress": 100, + "StartTime": "2013-08-19T20:53:29.930Z", + "StatusCode": "Successful" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the scaling activities for the specified Auto Scaling group.", + "id": "autoscaling-describe-scaling-activities-1", + "title": "To describe the scaling activities for an Auto Scaling group" + } + ], + "DescribeScalingProcessTypes": [ + { + "output": { + "Processes": [ + { + "ProcessName": "AZRebalance" + }, + { + "ProcessName": "AddToLoadBalancer" + }, + { + "ProcessName": "AlarmNotification" + }, + { + "ProcessName": "HealthCheck" + }, + { + "ProcessName": "Launch" + }, + { + "ProcessName": "ReplaceUnhealthy" + }, + { + "ProcessName": "ScheduledActions" + }, + { + "ProcessName": "Terminate" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Auto Scaling process types.", + "id": "autoscaling-describe-scaling-process-types-1", + "title": "To describe the Auto Scaling process types" + } + ], + "DescribeScheduledActions": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group" + }, + "output": { + "ScheduledUpdateGroupActions": [ + { + "AutoScalingGroupName": "my-auto-scaling-group", + "DesiredCapacity": 4, + "MaxSize": 6, + "MinSize": 2, + "Recurrence": "30 0 1 12 0", + "ScheduledActionARN": "arn:aws:autoscaling:us-west-2:123456789012:scheduledUpdateGroupAction:8e86b655-b2e6-4410-8f29-b4f094d6871c:autoScalingGroupName/my-auto-scaling-group:scheduledActionName/my-scheduled-action", + "ScheduledActionName": "my-scheduled-action", + "StartTime": "2016-12-01T00:30:00Z", + "Time": "2016-12-01T00:30:00Z" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the scheduled actions for the specified Auto Scaling group.", + "id": "autoscaling-describe-scheduled-actions-1", + "title": "To describe scheduled actions" + } + ], + "DescribeTags": [ + { + "input": { + "Filters": [ + { + "Name": "auto-scaling-group", + "Values": [ + "my-auto-scaling-group" + ] + } + ] + }, + "output": { + "Tags": [ + { + "Key": "Dept", + "PropagateAtLaunch": true, + "ResourceId": "my-auto-scaling-group", + "ResourceType": "auto-scaling-group", + "Value": "Research" + }, + { + "Key": "Role", + "PropagateAtLaunch": true, + "ResourceId": "my-auto-scaling-group", + "ResourceType": "auto-scaling-group", + "Value": "WebServer" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the tags for the specified Auto Scaling group.", + "id": "autoscaling-describe-tags-1", + "title": "To describe tags" + } + ], + "DescribeTerminationPolicyTypes": [ + { + "output": { + "TerminationPolicyTypes": [ + "ClosestToNextInstanceHour", + "Default", + "NewestInstance", + "OldestInstance", + "OldestLaunchConfiguration" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the available termination policy types.", + "id": "autoscaling-describe-termination-policy-types-1", + "title": "To describe termination policy types" + } + ], + "DescribeTrafficSources": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group" + }, + "output": { + "NextToken": "", + "TrafficSources": [ + { + "Identifier": "arn:aws:vpc-lattice:us-west-2:123456789012:targetgroup/tg-0e2f2665eEXAMPLE", + "State": "InService", + "Type": "vpc-lattice" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the target groups attached to the specified Auto Scaling group.", + "id": "to-describe-the-target-groups-for-an-auto-scaling-group-1680040714521", + "title": "To describe the target groups for an Auto Scaling group" + } + ], + "DetachInstances": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "InstanceIds": [ + "i-93633f9b" + ], + "ShouldDecrementDesiredCapacity": true + }, + "output": { + "Activities": [ + { + "ActivityId": "5091cb52-547a-47ce-a236-c9ccbc2cb2c9", + "AutoScalingGroupName": "my-auto-scaling-group", + "Cause": "At 2015-04-12T15:02:16Z instance i-93633f9b was detached in response to a user request, shrinking the capacity from 2 to 1.", + "Description": "Detaching EC2 instance: i-93633f9b", + "Details": "details", + "Progress": 50, + "StartTime": "2015-04-12T15:02:16.179Z", + "StatusCode": "InProgress" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified instance from the specified Auto Scaling group.", + "id": "autoscaling-detach-instances-1", + "title": "To detach an instance from an Auto Scaling group" + } + ], + "DetachLoadBalancerTargetGroups": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "TargetGroupARNs": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified target group from the specified Auto Scaling group", + "id": "autoscaling-detach-load-balancer-target-groups-1", + "title": "To detach a target group from an Auto Scaling group" + } + ], + "DetachLoadBalancers": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "LoadBalancerNames": [ + "my-load-balancer" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified load balancer from the specified Auto Scaling group.", + "id": "autoscaling-detach-load-balancers-1", + "title": "To detach a load balancer from an Auto Scaling group" + } + ], + "DetachTrafficSources": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "TrafficSources": [ + { + "Identifier": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified target group from the specified Auto Scaling group.", + "id": "to-detach-a-target-group-from-an-auto-scaling-group-1680040404169", + "title": "To detach a target group from an Auto Scaling group" + } + ], + "DisableMetricsCollection": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "Metrics": [ + "GroupDesiredCapacity" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disables collecting data for the GroupDesiredCapacity metric for the specified Auto Scaling group.", + "id": "autoscaling-disable-metrics-collection-1", + "title": "To disable metrics collection for an Auto Scaling group" + } + ], + "EnableMetricsCollection": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "Granularity": "1Minute" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables data collection for the specified Auto Scaling group.", + "id": "autoscaling-enable-metrics-collection-1", + "title": "To enable metrics collection for an Auto Scaling group" + } + ], + "EnterStandby": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "InstanceIds": [ + "i-93633f9b" + ], + "ShouldDecrementDesiredCapacity": true + }, + "output": { + "Activities": [ + { + "ActivityId": "ffa056b4-6ed3-41ba-ae7c-249dfae6eba1", + "AutoScalingGroupName": "my-auto-scaling-group", + "Cause": "At 2015-04-12T15:10:23Z instance i-93633f9b was moved to standby in response to a user request, shrinking the capacity from 2 to 1.", + "Description": "Moving EC2 instance to Standby: i-93633f9b", + "Details": "details", + "Progress": 50, + "StartTime": "2015-04-12T15:10:23.640Z", + "StatusCode": "InProgress" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example puts the specified instance into standby mode.", + "id": "autoscaling-enter-standby-1", + "title": "To move instances into standby mode" + } + ], + "ExecutePolicy": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "BreachThreshold": 50.0, + "MetricValue": 59.0, + "PolicyName": "my-step-scale-out-policy" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example executes the specified policy.", + "id": "autoscaling-execute-policy-1", + "title": "To execute a scaling policy" + } + ], + "ExitStandby": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "InstanceIds": [ + "i-93633f9b" + ] + }, + "output": { + "Activities": [ + { + "ActivityId": "142928e1-a2dc-453a-9b24-b85ad6735928", + "AutoScalingGroupName": "my-auto-scaling-group", + "Cause": "At 2015-04-12T15:14:29Z instance i-93633f9b was moved out of standby in response to a user request, increasing the capacity from 1 to 2.", + "Description": "Moving EC2 instance out of Standby: i-93633f9b", + "Details": "details", + "Progress": 30, + "StartTime": "2015-04-12T15:14:29.886Z", + "StatusCode": "PreInService" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example moves the specified instance out of standby mode.", + "id": "autoscaling-exit-standby-1", + "title": "To move instances out of standby mode" + } + ], + "PutLifecycleHook": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "DefaultResult": "CONTINUE", + "HeartbeatTimeout": 300, + "LifecycleHookName": "my-launch-lifecycle-hook", + "LifecycleTransition": "autoscaling:EC2_INSTANCE_LAUNCHING" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a lifecycle hook for instance launch.", + "id": "autoscaling-put-lifecycle-hook-1", + "title": "To create a launch lifecycle hook" + } + ], + "PutNotificationConfiguration": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "NotificationTypes": [ + "autoscaling:TEST_NOTIFICATION" + ], + "TopicARN": "arn:aws:sns:us-west-2:123456789012:my-sns-topic" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds the specified notification to the specified Auto Scaling group.", + "id": "autoscaling-put-notification-configuration-1", + "title": "To add an Auto Scaling notification" + } + ], + "PutScalingPolicy": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "PolicyName": "alb1000-target-tracking-scaling-policy", + "PolicyType": "TargetTrackingScaling", + "TargetTrackingConfiguration": { + "PredefinedMetricSpecification": { + "PredefinedMetricType": "ALBRequestCountPerTarget", + "ResourceLabel": "app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff" + }, + "TargetValue": 1000.0 + } + }, + "output": { + "Alarms": [ + { + "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e", + "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e" + }, + { + "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2", + "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2" + } + ], + "PolicyARN": "arn:aws:autoscaling:us-west-2:123456789012:scalingPolicy:228f02c2-c665-4bfd-aaac-8b04080bea3c:autoScalingGroupName/my-auto-scaling-group:policyName/alb1000-target-tracking-scaling-policy" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds the specified policy to the specified Auto Scaling group.", + "id": "autoscaling-put-scaling-policy-1", + "title": "To add a scaling policy to an Auto Scaling group" + } + ], + "PutScheduledUpdateGroupAction": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "DesiredCapacity": 4, + "EndTime": "2014-05-12T08:00:00Z", + "MaxSize": 6, + "MinSize": 2, + "ScheduledActionName": "my-scheduled-action", + "StartTime": "2014-05-12T08:00:00Z" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds the specified scheduled action to the specified Auto Scaling group.", + "id": "autoscaling-put-scheduled-update-group-action-1", + "title": "To add a scheduled action to an Auto Scaling group" + } + ], + "PutWarmPool": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "InstanceReusePolicy": { + "ReuseOnScaleIn": true + }, + "MinSize": 30, + "PoolState": "Hibernated" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a warm pool for the specified Auto Scaling group.", + "id": "to-add-a-warm-pool-to-an-auto-scaling-group-1617818810383", + "title": "To create a warm pool for an Auto Scaling group" + } + ], + "RecordLifecycleActionHeartbeat": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "LifecycleActionToken": "bcd2f1b8-9a78-44d3-8a7a-4dd07d7cf635", + "LifecycleHookName": "my-lifecycle-hook" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example records a lifecycle action heartbeat to keep the instance in a pending state.", + "id": "autoscaling-record-lifecycle-action-heartbeat-1", + "title": "To record a lifecycle action heartbeat" + } + ], + "ResumeProcesses": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "ScalingProcesses": [ + "AlarmNotification" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example resumes the specified suspended scaling process for the specified Auto Scaling group.", + "id": "autoscaling-resume-processes-1", + "title": "To resume Auto Scaling processes" + } + ], + "SetDesiredCapacity": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "DesiredCapacity": 2, + "HonorCooldown": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example sets the desired capacity for the specified Auto Scaling group.", + "id": "autoscaling-set-desired-capacity-1", + "title": "To set the desired capacity for an Auto Scaling group" + } + ], + "SetInstanceHealth": [ + { + "input": { + "HealthStatus": "Unhealthy", + "InstanceId": "i-93633f9b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example sets the health status of the specified instance to Unhealthy.", + "id": "autoscaling-set-instance-health-1", + "title": "To set the health status of an instance" + } + ], + "SetInstanceProtection": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "InstanceIds": [ + "i-93633f9b" + ], + "ProtectedFromScaleIn": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables instance protection for the specified instance.", + "id": "autoscaling-set-instance-protection-1", + "title": "To enable instance protection for an instance" + }, + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "InstanceIds": [ + "i-93633f9b" + ], + "ProtectedFromScaleIn": false + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disables instance protection for the specified instance.", + "id": "autoscaling-set-instance-protection-2", + "title": "To disable instance protection for an instance" + } + ], + "StartInstanceRefresh": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "DesiredConfiguration": { + "LaunchTemplate": { + "LaunchTemplateName": "my-template-for-auto-scaling", + "Version": "$Latest" + } + }, + "Preferences": { + "AlarmSpecification": { + "Alarms": [ + "my-alarm" + ] + }, + "AutoRollback": true, + "InstanceWarmup": 200, + "MinHealthyPercentage": 90 + } + }, + "output": { + "InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example starts an instance refresh for the specified Auto Scaling group.", + "id": "to-start-an-instance-refresh-1592957271522", + "title": "To start an instance refresh" + } + ], + "SuspendProcesses": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "ScalingProcesses": [ + "AlarmNotification" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example suspends the specified scaling process for the specified Auto Scaling group.", + "id": "autoscaling-suspend-processes-1", + "title": "To suspend Auto Scaling processes" + } + ], + "TerminateInstanceInAutoScalingGroup": [ + { + "input": { + "InstanceId": "i-93633f9b", + "ShouldDecrementDesiredCapacity": false + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example terminates the specified instance from the specified Auto Scaling group without updating the size of the group. Auto Scaling launches a replacement instance after the specified instance terminates.", + "id": "autoscaling-terminate-instance-in-auto-scaling-group-1", + "title": "To terminate an instance in an Auto Scaling group" + } + ], + "UpdateAutoScalingGroup": [ + { + "input": { + "AutoScalingGroupName": "my-auto-scaling-group", + "LaunchTemplate": { + "LaunchTemplateName": "my-template-for-auto-scaling", + "Version": "2" + }, + "MaxSize": 5, + "MinSize": 1, + "NewInstancesProtectedFromScaleIn": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example updates multiple properties at the same time.", + "id": "autoscaling-update-auto-scaling-group-1", + "title": "To update an Auto Scaling group" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/paginators-1.json new file mode 100644 index 00000000..ac5939df --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/paginators-1.json @@ -0,0 +1,70 @@ +{ + "pagination": { + "DescribeAutoScalingGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": "AutoScalingGroups" + }, + "DescribeAutoScalingInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": "AutoScalingInstances" + }, + "DescribeLaunchConfigurations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": "LaunchConfigurations" + }, + "DescribeNotificationConfigurations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": "NotificationConfigurations" + }, + "DescribePolicies": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": "ScalingPolicies" + }, + "DescribeScalingActivities": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": "Activities" + }, + "DescribeScheduledActions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": "ScheduledUpdateGroupActions" + }, + "DescribeTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": "Tags" + }, + "DescribeLoadBalancerTargetGroups": { + "input_token": "NextToken", + "limit_key": "MaxRecords", + "output_token": "NextToken", + "result_key": "LoadBalancerTargetGroups" + }, + "DescribeLoadBalancers": { + "input_token": "NextToken", + "limit_key": "MaxRecords", + "output_token": "NextToken", + "result_key": "LoadBalancers" + }, + "DescribeWarmPool": { + "input_token": "NextToken", + "limit_key": "MaxRecords", + "output_token": "NextToken", + "result_key": "Instances" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/paginators-1.sdk-extras.json new file mode 100644 index 00000000..1c634992 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/paginators-1.sdk-extras.json @@ -0,0 +1,12 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "DescribeWarmPool": { + "non_aggregate_keys": [ + "WarmPoolConfiguration" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/service-2.json.gz new file mode 100644 index 00000000..bae627ba Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/autoscaling/2011-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/b2bi/2022-06-23/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/b2bi/2022-06-23/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3f6344ac Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/b2bi/2022-06-23/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/b2bi/2022-06-23/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/b2bi/2022-06-23/paginators-1.json new file mode 100644 index 00000000..5f3b0d24 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/b2bi/2022-06-23/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListCapabilities": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "capabilities" + }, + "ListPartnerships": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "partnerships" + }, + "ListProfiles": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "profiles" + }, + "ListTransformers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "transformers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/b2bi/2022-06-23/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/b2bi/2022-06-23/service-2.json.gz new file mode 100644 index 00000000..31b349b5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/b2bi/2022-06-23/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..2205444a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/paginators-1.json new file mode 100644 index 00000000..462aacd0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListGateways": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Gateways" + }, + "ListHypervisors": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Hypervisors" + }, + "ListVirtualMachines": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VirtualMachines" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/service-2.json.gz new file mode 100644 index 00000000..f5f2a9ce Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/backup-gateway/2021-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..49726d38 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/paginators-1.json new file mode 100644 index 00000000..1720297a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/paginators-1.json @@ -0,0 +1,106 @@ +{ + "pagination": { + "ListBackupJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "BackupJobs" + }, + "ListBackupPlanTemplates": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "BackupPlanTemplatesList" + }, + "ListBackupPlanVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "BackupPlanVersionsList" + }, + "ListBackupPlans": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "BackupPlansList" + }, + "ListBackupSelections": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "BackupSelectionsList" + }, + "ListBackupVaults": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "BackupVaultList" + }, + "ListCopyJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CopyJobs" + }, + "ListProtectedResources": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Results" + }, + "ListRecoveryPointsByBackupVault": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RecoveryPoints" + }, + "ListRecoveryPointsByResource": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RecoveryPoints" + }, + "ListRestoreJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RestoreJobs" + }, + "ListLegalHolds": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "LegalHolds" + }, + "ListRecoveryPointsByLegalHold": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RecoveryPoints" + }, + "ListProtectedResourcesByBackupVault": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Results" + }, + "ListRestoreJobsByProtectedResource": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RestoreJobs" + }, + "ListRestoreTestingPlans": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RestoreTestingPlans" + }, + "ListRestoreTestingSelections": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RestoreTestingSelections" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/service-2.json.gz new file mode 100644 index 00000000..e45615c1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/backup/2018-11-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backupstorage/2018-04-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/backupstorage/2018-04-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..84115e8c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/backupstorage/2018-04-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backupstorage/2018-04-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/backupstorage/2018-04-10/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/backupstorage/2018-04-10/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/backupstorage/2018-04-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/backupstorage/2018-04-10/service-2.json.gz new file mode 100644 index 00000000..1a964c4e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/backupstorage/2018-04-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..fc7d638b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/examples-1.json new file mode 100644 index 00000000..18203dc8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/examples-1.json @@ -0,0 +1,711 @@ +{ + "version": "1.0", + "examples": { + "CancelJob": [ + { + "input": { + "jobId": "1d828f65-7a4d-42e8-996d-3b900ed59dc4", + "reason": "Cancelling job." + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels a job with the specified job ID.", + "id": "to-cancel-a-job-1481152314733", + "title": "To cancel a job" + } + ], + "CreateComputeEnvironment": [ + { + "input": { + "type": "MANAGED", + "computeEnvironmentName": "C4OnDemand", + "computeResources": { + "type": "EC2", + "desiredvCpus": 48, + "ec2KeyPair": "id_rsa", + "instanceRole": "ecsInstanceRole", + "instanceTypes": [ + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge" + ], + "maxvCpus": 128, + "minvCpus": 0, + "securityGroupIds": [ + "sg-cf5093b2" + ], + "subnets": [ + "subnet-220c0e0a", + "subnet-1a95556d", + "subnet-978f6dce" + ], + "tags": { + "Name": "Batch Instance - C4OnDemand" + } + }, + "serviceRole": "arn:aws:iam::012345678910:role/AWSBatchServiceRole", + "state": "ENABLED" + }, + "output": { + "computeEnvironmentArn": "arn:aws:batch:us-east-1:012345678910:compute-environment/C4OnDemand", + "computeEnvironmentName": "C4OnDemand" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a managed compute environment with specific C4 instance types that are launched on demand. The compute environment is called C4OnDemand.", + "id": "to-create-a-managed-ec2-compute-environment-1481152600017", + "title": "To create a managed EC2 compute environment" + }, + { + "input": { + "type": "MANAGED", + "computeEnvironmentName": "M4Spot", + "computeResources": { + "type": "SPOT", + "bidPercentage": 20, + "desiredvCpus": 4, + "ec2KeyPair": "id_rsa", + "instanceRole": "ecsInstanceRole", + "instanceTypes": [ + "m4" + ], + "maxvCpus": 128, + "minvCpus": 0, + "securityGroupIds": [ + "sg-cf5093b2" + ], + "spotIamFleetRole": "arn:aws:iam::012345678910:role/aws-ec2-spot-fleet-role", + "subnets": [ + "subnet-220c0e0a", + "subnet-1a95556d", + "subnet-978f6dce" + ], + "tags": { + "Name": "Batch Instance - M4Spot" + } + }, + "serviceRole": "arn:aws:iam::012345678910:role/AWSBatchServiceRole", + "state": "ENABLED" + }, + "output": { + "computeEnvironmentArn": "arn:aws:batch:us-east-1:012345678910:compute-environment/M4Spot", + "computeEnvironmentName": "M4Spot" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a managed compute environment with the M4 instance type that is launched when the Spot bid price is at or below 20% of the On-Demand price for the instance type. The compute environment is called M4Spot.", + "id": "to-create-a-managed-ec2-spot-compute-environment-1481152844190", + "title": "To create a managed EC2 Spot compute environment" + } + ], + "CreateJobQueue": [ + { + "input": { + "computeEnvironmentOrder": [ + { + "computeEnvironment": "M4Spot", + "order": 1 + } + ], + "jobQueueName": "LowPriority", + "priority": 1, + "state": "ENABLED" + }, + "output": { + "jobQueueArn": "arn:aws:batch:us-east-1:012345678910:job-queue/LowPriority", + "jobQueueName": "LowPriority" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a job queue called LowPriority that uses the M4Spot compute environment.", + "id": "to-create-a-job-queue-with-a-single-compute-environment-1481152967946", + "title": "To create a job queue with a single compute environment" + }, + { + "input": { + "computeEnvironmentOrder": [ + { + "computeEnvironment": "C4OnDemand", + "order": 1 + }, + { + "computeEnvironment": "M4Spot", + "order": 2 + } + ], + "jobQueueName": "HighPriority", + "priority": 10, + "state": "ENABLED" + }, + "output": { + "jobQueueArn": "arn:aws:batch:us-east-1:012345678910:job-queue/HighPriority", + "jobQueueName": "HighPriority" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a job queue called HighPriority that uses the C4OnDemand compute environment with an order of 1 and the M4Spot compute environment with an order of 2.", + "id": "to-create-a-job-queue-with-multiple-compute-environments-1481153027051", + "title": "To create a job queue with multiple compute environments" + } + ], + "DeleteComputeEnvironment": [ + { + "input": { + "computeEnvironment": "P2OnDemand" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the P2OnDemand compute environment.", + "id": "to-delete-a-compute-environment-1481153105644", + "title": "To delete a compute environment" + } + ], + "DeleteJobQueue": [ + { + "input": { + "jobQueue": "GPGPU" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the GPGPU job queue.", + "id": "to-delete-a-job-queue-1481153508134", + "title": "To delete a job queue" + } + ], + "DeregisterJobDefinition": [ + { + "input": { + "jobDefinition": "sleep10" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deregisters a job definition called sleep10.", + "id": "to-deregister-a-job-definition-1481153579565", + "title": "To deregister a job definition" + } + ], + "DescribeComputeEnvironments": [ + { + "input": { + "computeEnvironments": [ + "P2OnDemand" + ] + }, + "output": { + "computeEnvironments": [ + { + "type": "MANAGED", + "computeEnvironmentArn": "arn:aws:batch:us-east-1:012345678910:compute-environment/P2OnDemand", + "computeEnvironmentName": "P2OnDemand", + "computeResources": { + "type": "EC2", + "desiredvCpus": 48, + "ec2KeyPair": "id_rsa", + "instanceRole": "ecsInstanceRole", + "instanceTypes": [ + "p2" + ], + "maxvCpus": 128, + "minvCpus": 0, + "securityGroupIds": [ + "sg-cf5093b2" + ], + "subnets": [ + "subnet-220c0e0a", + "subnet-1a95556d", + "subnet-978f6dce" + ], + "tags": { + "Name": "Batch Instance - P2OnDemand" + } + }, + "ecsClusterArn": "arn:aws:ecs:us-east-1:012345678910:cluster/P2OnDemand_Batch_2c06f29d-d1fe-3a49-879d-42394c86effc", + "serviceRole": "arn:aws:iam::012345678910:role/AWSBatchServiceRole", + "state": "ENABLED", + "status": "VALID", + "statusReason": "ComputeEnvironment Healthy" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the P2OnDemand compute environment.", + "id": "to-describe-a-compute-environment-1481153713334", + "title": "To describe a compute environment" + } + ], + "DescribeJobDefinitions": [ + { + "input": { + "status": "ACTIVE" + }, + "output": { + "jobDefinitions": [ + { + "type": "container", + "containerProperties": { + "command": [ + "sleep", + "60" + ], + "environment": [ + + ], + "image": "busybox", + "mountPoints": [ + + ], + "resourceRequirements": [ + { + "type": "MEMORY", + "value": "128" + }, + { + "type": "VCPU", + "value": "1" + } + ], + "ulimits": [ + + ], + "volumes": [ + + ] + }, + "jobDefinitionArn": "arn:aws:batch:us-east-1:012345678910:job-definition/sleep60:1", + "jobDefinitionName": "sleep60", + "revision": 1, + "status": "ACTIVE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all of your active job definitions.", + "id": "to-describe-active-job-definitions-1481153895831", + "title": "To describe active job definitions" + } + ], + "DescribeJobQueues": [ + { + "input": { + "jobQueues": [ + "HighPriority" + ] + }, + "output": { + "jobQueues": [ + { + "computeEnvironmentOrder": [ + { + "computeEnvironment": "arn:aws:batch:us-east-1:012345678910:compute-environment/C4OnDemand", + "order": 1 + } + ], + "jobQueueArn": "arn:aws:batch:us-east-1:012345678910:job-queue/HighPriority", + "jobQueueName": "HighPriority", + "priority": 1, + "state": "ENABLED", + "status": "VALID", + "statusReason": "JobQueue Healthy" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the HighPriority job queue.", + "id": "to-describe-a-job-queue-1481153995804", + "title": "To describe a job queue" + } + ], + "DescribeJobs": [ + { + "input": { + "jobs": [ + "24fa2d7a-64c4-49d2-8b47-f8da4fbde8e9" + ] + }, + "output": { + "jobs": [ + { + "container": { + "command": [ + "sleep", + "60" + ], + "containerInstanceArn": "arn:aws:ecs:us-east-1:012345678910:container-instance/5406d7cd-58bd-4b8f-9936-48d7c6b1526c", + "environment": [ + + ], + "exitCode": 0, + "image": "busybox", + "memory": 128, + "mountPoints": [ + + ], + "ulimits": [ + + ], + "vcpus": 1, + "volumes": [ + + ] + }, + "createdAt": 1480460782010, + "dependsOn": [ + + ], + "jobDefinition": "sleep60", + "jobId": "24fa2d7a-64c4-49d2-8b47-f8da4fbde8e9", + "jobName": "example", + "jobQueue": "arn:aws:batch:us-east-1:012345678910:job-queue/HighPriority", + "parameters": { + }, + "startedAt": 1480460816500, + "status": "SUCCEEDED", + "stoppedAt": 1480460880699 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes a job with the specified job ID.", + "id": "to-describe-a-specific-job-1481154090490", + "title": "To describe a specific job" + } + ], + "ListJobs": [ + { + "input": { + "jobQueue": "HighPriority" + }, + "output": { + "jobSummaryList": [ + { + "jobId": "e66ff5fd-a1ff-4640-b1a2-0b0a142f49bb", + "jobName": "example" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists the running jobs in the HighPriority job queue.", + "id": "to-list-running-jobs-1481154202164", + "title": "To list running jobs" + }, + { + "input": { + "jobQueue": "HighPriority", + "jobStatus": "SUBMITTED" + }, + "output": { + "jobSummaryList": [ + { + "jobId": "68f0c163-fbd4-44e6-9fd1-25b14a434786", + "jobName": "example" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists jobs in the HighPriority job queue that are in the SUBMITTED job status.", + "id": "to-list-submitted-jobs-1481154251623", + "title": "To list submitted jobs" + } + ], + "ListTagsForResource": [ + { + "input": { + "resourceArn": "arn:aws:batch:us-east-1:123456789012:job-definition/sleep30:1" + }, + "output": { + "tags": { + "Department": "Engineering", + "Stage": "Alpha", + "User": "JaneDoe" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This demonstrates calling the ListTagsForResource action.", + "id": "listtagsforresource-example-1591293003710", + "title": "ListTagsForResource Example" + } + ], + "RegisterJobDefinition": [ + { + "input": { + "type": "container", + "containerProperties": { + "command": [ + "sleep", + "10" + ], + "image": "busybox", + "resourceRequirements": [ + { + "type": "MEMORY", + "value": "128" + }, + { + "type": "VCPU", + "value": "1" + } + ] + }, + "jobDefinitionName": "sleep10" + }, + "output": { + "jobDefinitionArn": "arn:aws:batch:us-east-1:012345678910:job-definition/sleep10:1", + "jobDefinitionName": "sleep10", + "revision": 1 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example registers a job definition for a simple container job.", + "id": "to-register-a-job-definition-1481154325325", + "title": "To register a job definition" + }, + { + "input": { + "type": "container", + "containerProperties": { + "command": [ + "sleep", + "30" + ], + "image": "busybox", + "resourceRequirements": [ + { + "type": "MEMORY", + "value": "128" + }, + { + "type": "VCPU", + "value": "1" + } + ] + }, + "jobDefinitionName": "sleep30", + "tags": { + "Department": "Engineering", + "User": "JaneDoe" + } + }, + "output": { + "jobDefinitionArn": "arn:aws:batch:us-east-1:012345678910:job-definition/sleep30:1", + "jobDefinitionName": "sleep30", + "revision": 1 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This demonstrates calling the RegisterJobDefinition action, including tags.", + "id": "registerjobdefinition-with-tags-1591290509028", + "title": "RegisterJobDefinition with tags" + } + ], + "SubmitJob": [ + { + "input": { + "jobDefinition": "sleep60", + "jobName": "example", + "jobQueue": "HighPriority" + }, + "output": { + "jobId": "876da822-4198-45f2-a252-6cea32512ea8", + "jobName": "example" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example submits a simple container job called example to the HighPriority job queue.", + "id": "to-submit-a-job-to-a-queue-1481154481673", + "title": "To submit a job to a queue" + } + ], + "TagResource": [ + { + "input": { + "resourceArn": "arn:aws:batch:us-east-1:123456789012:job-definition/sleep30:1", + "tags": { + "Stage": "Alpha" + } + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This demonstrates calling the TagResource action.", + "id": "tagresource-example-1591291959952", + "title": "TagResource Example" + } + ], + "TerminateJob": [ + { + "input": { + "jobId": "61e743ed-35e4-48da-b2de-5c8333821c84", + "reason": "Terminating job." + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example terminates a job with the specified job ID.", + "id": "to-terminate-a-job-1481154558276", + "title": "To terminate a job" + } + ], + "UntagResource": [ + { + "input": { + "resourceArn": "arn:aws:batch:us-east-1:123456789012:job-definition/sleep30:1", + "tagKeys": [ + "Stage" + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This demonstrates calling the UntagResource action.", + "id": "untagresource-example-1591292811042", + "title": "UntagResource Example" + } + ], + "UpdateComputeEnvironment": [ + { + "input": { + "computeEnvironment": "P2OnDemand", + "state": "DISABLED" + }, + "output": { + "computeEnvironmentArn": "arn:aws:batch:us-east-1:012345678910:compute-environment/P2OnDemand", + "computeEnvironmentName": "P2OnDemand" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disables the P2OnDemand compute environment so it can be deleted.", + "id": "to-update-a-compute-environment-1481154702731", + "title": "To update a compute environment" + } + ], + "UpdateJobQueue": [ + { + "input": { + "jobQueue": "GPGPU", + "state": "DISABLED" + }, + "output": { + "jobQueueArn": "arn:aws:batch:us-east-1:012345678910:job-queue/GPGPU", + "jobQueueName": "GPGPU" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disables a job queue so that it can be deleted.", + "id": "to-update-a-job-queue-1481154806981", + "title": "To update a job queue" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/paginators-1.json new file mode 100644 index 00000000..166f3efa --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "DescribeComputeEnvironments": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "computeEnvironments" + }, + "DescribeJobDefinitions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "jobDefinitions" + }, + "DescribeJobQueues": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "jobQueues" + }, + "ListJobs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "jobSummaryList" + }, + "ListSchedulingPolicies": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "schedulingPolicies" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/service-2.json.gz new file mode 100644 index 00000000..06522154 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/batch/2016-08-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bcm-data-exports/2023-11-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/bcm-data-exports/2023-11-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c3a0cdb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/bcm-data-exports/2023-11-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bcm-data-exports/2023-11-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/bcm-data-exports/2023-11-26/paginators-1.json new file mode 100644 index 00000000..3d03805c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/bcm-data-exports/2023-11-26/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListExecutions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Executions" + }, + "ListExports": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Exports" + }, + "ListTables": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tables" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bcm-data-exports/2023-11-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/bcm-data-exports/2023-11-26/service-2.json.gz new file mode 100644 index 00000000..e9d0aef0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/bcm-data-exports/2023-11-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent-runtime/2023-07-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent-runtime/2023-07-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..999a6fdc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent-runtime/2023-07-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent-runtime/2023-07-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent-runtime/2023-07-26/paginators-1.json new file mode 100644 index 00000000..bd57dfbc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent-runtime/2023-07-26/paginators-1.json @@ -0,0 +1,9 @@ +{ + "pagination": { + "Retrieve": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "retrievalResults" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent-runtime/2023-07-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent-runtime/2023-07-26/service-2.json.gz new file mode 100644 index 00000000..2669b91e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent-runtime/2023-07-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent/2023-06-05/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent/2023-06-05/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0c267920 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent/2023-06-05/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent/2023-06-05/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent/2023-06-05/paginators-1.json new file mode 100644 index 00000000..8e00fb72 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent/2023-06-05/paginators-1.json @@ -0,0 +1,52 @@ +{ + "pagination": { + "ListAgentActionGroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "actionGroupSummaries" + }, + "ListAgentAliases": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "agentAliasSummaries" + }, + "ListAgentKnowledgeBases": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "agentKnowledgeBaseSummaries" + }, + "ListAgentVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "agentVersionSummaries" + }, + "ListAgents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "agentSummaries" + }, + "ListDataSources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "dataSourceSummaries" + }, + "ListIngestionJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "ingestionJobSummaries" + }, + "ListKnowledgeBases": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "knowledgeBaseSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent/2023-06-05/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent/2023-06-05/service-2.json.gz new file mode 100644 index 00000000..b1de0d8b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-agent/2023-06-05/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4d6687a4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/service-2.json.gz new file mode 100644 index 00000000..cdeb82e6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/waiters-2.json new file mode 100644 index 00000000..4b20636a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock-runtime/2023-09-30/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f6deaab9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/paginators-1.json new file mode 100644 index 00000000..e8b0ae03 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListCustomModels": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "modelSummaries" + }, + "ListModelCustomizationJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "modelCustomizationJobSummaries" + }, + "ListProvisionedModelThroughputs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "provisionedModelSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/service-2.json.gz new file mode 100644 index 00000000..34104b13 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/waiters-2.json new file mode 100644 index 00000000..4b20636a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/bedrock/2023-04-20/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..2bd38fc2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/paginators-1.json new file mode 100644 index 00000000..2ca4d75f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/paginators-1.json @@ -0,0 +1,80 @@ +{ + "pagination": { + "ListAccountAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "LinkedAccounts" + }, + "ListBillingGroupCostReports": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "BillingGroupCostReports" + }, + "ListBillingGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "BillingGroups" + }, + "ListCustomLineItems": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CustomLineItems" + }, + "ListPricingPlans": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "BillingPeriod" + ], + "output_token": "NextToken", + "result_key": "PricingPlans" + }, + "ListPricingPlansAssociatedWithPricingRule": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "BillingPeriod", + "PricingRuleArn" + ], + "output_token": "NextToken", + "result_key": "PricingPlanArns" + }, + "ListPricingRules": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "BillingPeriod" + ], + "output_token": "NextToken", + "result_key": "PricingRules" + }, + "ListPricingRulesAssociatedToPricingPlan": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "BillingPeriod", + "PricingPlanArn" + ], + "output_token": "NextToken", + "result_key": "PricingRuleArns" + }, + "ListResourcesAssociatedToCustomLineItem": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "Arn" + ], + "output_token": "NextToken", + "result_key": "AssociatedResources" + }, + "ListCustomLineItemVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CustomLineItemVersions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/service-2.json.gz new file mode 100644 index 00000000..68587877 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/waiters-2.json new file mode 100644 index 00000000..ee5023dc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/billingconductor/2021-07-30/waiters-2.json @@ -0,0 +1,4 @@ +{ + "version": 2, + "waiters": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6e20075b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/paginators-1.json new file mode 100644 index 00000000..a5be3333 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "SearchDevices": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "devices" + }, + "SearchQuantumTasks": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "quantumTasks" + }, + "SearchJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "jobs" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/service-2.json.gz new file mode 100644 index 00000000..ee6e1fbf Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/braket/2019-09-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ee31ab26 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/paginators-1.json new file mode 100644 index 00000000..15f7a63e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/paginators-1.json @@ -0,0 +1,52 @@ +{ + "pagination": { + "DescribeBudgets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Budgets" + }, + "DescribeNotificationsForBudget": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Notifications" + }, + "DescribeSubscribersForNotification": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Subscribers" + }, + "DescribeBudgetPerformanceHistory": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "BudgetPerformanceHistory" + }, + "DescribeBudgetActionHistories": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ActionHistories" + }, + "DescribeBudgetActionsForAccount": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Actions" + }, + "DescribeBudgetActionsForBudget": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Actions" + }, + "DescribeBudgetNotificationsForAccount": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "BudgetNotificationsForAccount" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/service-2.json.gz new file mode 100644 index 00000000..1052d059 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/budgets/2016-10-20/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1a1e6beb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/service-2.json.gz new file mode 100644 index 00000000..939c3a3b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ce/2017-10-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..834f2e96 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/service-2.json.gz new file mode 100644 index 00000000..f2a9ba0c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-identity/2021-04-20/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-media-pipelines/2021-07-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-media-pipelines/2021-07-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d50d647c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-media-pipelines/2021-07-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-media-pipelines/2021-07-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-media-pipelines/2021-07-15/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-media-pipelines/2021-07-15/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-media-pipelines/2021-07-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-media-pipelines/2021-07-15/service-2.json.gz new file mode 100644 index 00000000..29ee05b0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-media-pipelines/2021-07-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5daecd68 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/service-2.json.gz new file mode 100644 index 00000000..e2adfc36 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-meetings/2021-07-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0b439dc3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/service-2.json.gz new file mode 100644 index 00000000..7b1dfb9d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-messaging/2021-05-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-voice/2022-08-03/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-voice/2022-08-03/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e8a2c558 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-voice/2022-08-03/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-voice/2022-08-03/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-voice/2022-08-03/paginators-1.json new file mode 100644 index 00000000..648f71ee --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-voice/2022-08-03/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListSipMediaApplications": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SipMediaApplications" + }, + "ListSipRules": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SipRules" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-voice/2022-08-03/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-voice/2022-08-03/service-2.json.gz new file mode 100644 index 00000000..1943cc9f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime-sdk-voice/2022-08-03/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5462568f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/paginators-1.json new file mode 100644 index 00000000..617b1149 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListAccounts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Accounts" + }, + "ListUsers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Users" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/service-2.json.gz new file mode 100644 index 00000000..27b20645 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/chime/2018-05-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..71a9e2b7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/paginators-1.json new file mode 100644 index 00000000..1bbb0a6c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/paginators-1.json @@ -0,0 +1,94 @@ +{ + "pagination": { + "ListCollaborations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "collaborationList" + }, + "ListConfiguredTableAssociations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "configuredTableAssociationSummaries" + }, + "ListConfiguredTables": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "configuredTableSummaries" + }, + "ListMembers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "memberSummaries" + }, + "ListMemberships": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "membershipSummaries" + }, + "ListProtectedQueries": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "protectedQueries" + }, + "ListSchemas": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "schemaSummaries" + }, + "ListAnalysisTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "analysisTemplateSummaries" + }, + "ListCollaborationAnalysisTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "collaborationAnalysisTemplateSummaries" + }, + "ListCollaborationConfiguredAudienceModelAssociations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "collaborationConfiguredAudienceModelAssociationSummaries" + }, + "ListCollaborationPrivacyBudgetTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "collaborationPrivacyBudgetTemplateSummaries" + }, + "ListCollaborationPrivacyBudgets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "collaborationPrivacyBudgetSummaries" + }, + "ListConfiguredAudienceModelAssociations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "configuredAudienceModelAssociationSummaries" + }, + "ListPrivacyBudgetTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "privacyBudgetTemplateSummaries" + }, + "ListPrivacyBudgets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "privacyBudgetSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/service-2.json.gz new file mode 100644 index 00000000..43772d5f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanrooms/2022-02-17/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cleanroomsml/2023-09-06/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanroomsml/2023-09-06/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ab8ac9c4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanroomsml/2023-09-06/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cleanroomsml/2023-09-06/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanroomsml/2023-09-06/paginators-1.json new file mode 100644 index 00000000..c3394f11 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanroomsml/2023-09-06/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListAudienceExportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "audienceExportJobs" + }, + "ListAudienceGenerationJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "audienceGenerationJobs" + }, + "ListAudienceModels": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "audienceModels" + }, + "ListConfiguredAudienceModels": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "configuredAudienceModels" + }, + "ListTrainingDatasets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "trainingDatasets" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cleanroomsml/2023-09-06/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanroomsml/2023-09-06/service-2.json.gz new file mode 100644 index 00000000..cb1a1d55 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cleanroomsml/2023-09-06/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6400c89a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/examples-1.json new file mode 100644 index 00000000..fdef2700 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/examples-1.json @@ -0,0 +1,315 @@ +{ + "version": "1.0", + "examples": { + "CreateEnvironmentEC2": [ + { + "input": { + "name": "my-demo-environment", + "automaticStopTimeMinutes": 60, + "description": "This is my demonstration environment.", + "instanceType": "t2.micro", + "ownerArn": "arn:aws:iam::123456789012:user/MyDemoUser", + "subnetId": "subnet-6300cd1b" + }, + "output": { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "createenvironmentec2-1516821730547", + "title": "CreateEnvironmentEC2" + } + ], + "CreateEnvironmentMembership": [ + { + "input": { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX", + "permissions": "read-write", + "userArn": "arn:aws:iam::123456789012:user/AnotherDemoUser" + }, + "output": { + "membership": { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX", + "permissions": "read-write", + "userArn": "arn:aws:iam::123456789012:user/AnotherDemoUser", + "userId": "AIDAJ3BA6O2FMJWCWXHEX" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "createenvironmentmembership-1516822583452", + "title": "CreateEnvironmentMembership" + } + ], + "DeleteEnvironment": [ + { + "input": { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "deleteenvironment-1516822903149", + "title": "DeleteEnvironment" + } + ], + "DeleteEnvironmentMembership": [ + { + "input": { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX", + "userArn": "arn:aws:iam::123456789012:user/AnotherDemoUser" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "deleteenvironmentmembership-1516822975655", + "title": "DeleteEnvironmentMembership" + } + ], + "DescribeEnvironmentMemberships": [ + { + "input": { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX" + }, + "output": { + "memberships": [ + { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX", + "permissions": "read-write", + "userArn": "arn:aws:iam::123456789012:user/AnotherDemoUser", + "userId": "AIDAJ3BA6O2FMJWCWXHEX" + }, + { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX", + "permissions": "owner", + "userArn": "arn:aws:iam::123456789012:user/MyDemoUser", + "userId": "AIDAJNUEDQAQWFELJDLEX" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example gets information about all of the environment members for the specified development environment.", + "id": "describeenvironmentmemberships1-1516823070453", + "title": "DescribeEnvironmentMemberships1" + }, + { + "input": { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX", + "permissions": [ + "owner" + ] + }, + "output": { + "memberships": [ + { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX", + "permissions": "owner", + "userArn": "arn:aws:iam::123456789012:user/MyDemoUser", + "userId": "AIDAJNUEDQAQWFELJDLEX" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example gets information about the owner of the specified development environment.", + "id": "describeenvironmentmemberships2-1516823191355", + "title": "DescribeEnvironmentMemberships2" + }, + { + "input": { + "userArn": "arn:aws:iam::123456789012:user/MyDemoUser" + }, + "output": { + "memberships": [ + { + "environmentId": "10a75714bd494714929e7f5ec4125aEX", + "lastAccess": "2018-01-19T11:06:13Z", + "permissions": "owner", + "userArn": "arn:aws:iam::123456789012:user/MyDemoUser", + "userId": "AIDAJNUEDQAQWFELJDLEX" + }, + { + "environmentId": "12bfc3cd537f41cb9776f8af5525c9EX", + "lastAccess": "2018-01-19T11:39:19Z", + "permissions": "owner", + "userArn": "arn:aws:iam::123456789012:user/MyDemoUser", + "userId": "AIDAJNUEDQAQWFELJDLEX" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example gets development environment membership information for the specified user.", + "id": "describeenvironmentmemberships3-1516823268793", + "title": "DescribeEnvironmentMemberships3" + } + ], + "DescribeEnvironmentStatus": [ + { + "input": { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX" + }, + "output": { + "message": "Environment is ready to use", + "status": "ready" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "describeenvironmentstatus-1516823462133", + "title": "DescribeEnvironmentStatus" + } + ], + "DescribeEnvironments": [ + { + "input": { + "environmentIds": [ + "8d9967e2f0624182b74e7690ad69ebEX", + "349c86d4579e4e7298d500ff57a6b2EX" + ] + }, + "output": { + "environments": [ + { + "name": "my-demo-environment", + "type": "ec2", + "arn": "arn:aws:cloud9:us-east-2:123456789012:environment:8d9967e2f0624182b74e7690ad69ebEX", + "description": "This is my demonstration environment.", + "id": "8d9967e2f0624182b74e7690ad69ebEX", + "lifecycle": { + "status": "CREATED" + }, + "ownerArn": "arn:aws:iam::123456789012:user/MyDemoUser" + }, + { + "name": "another-demo-environment", + "type": "ssh", + "arn": "arn:aws:cloud9:us-east-2:123456789012:environment:349c86d4579e4e7298d500ff57a6b2EX", + "description": "", + "id": "349c86d4579e4e7298d500ff57a6b2EX", + "lifecycle": { + "status": "CREATED" + }, + "ownerArn": "arn:aws:sts::123456789012:assumed-role/AnotherDemoUser/AnotherDemoUser" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "describeenvironments-1516823568291", + "title": "DescribeEnvironments" + } + ], + "ListEnvironments": [ + { + "input": { + }, + "output": { + "environmentIds": [ + "349c86d4579e4e7298d500ff57a6b2EX", + "45a3da47af0840f2b0c0824f5ee232EX" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "listenvironments-1516823687205", + "title": "ListEnvironments" + } + ], + "UpdateEnvironment": [ + { + "input": { + "name": "my-changed-demo-environment", + "description": "This is my changed demonstration environment.", + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "updateenvironment-1516823781910", + "title": "UpdateEnvironment" + } + ], + "UpdateEnvironmentMembership": [ + { + "input": { + "environmentId": "8d9967e2f0624182b74e7690ad69ebEX", + "permissions": "read-only", + "userArn": "arn:aws:iam::123456789012:user/AnotherDemoUser" + }, + "output": { + "membership": { + "environmentId": "8d9967e2f0624182b74e7690ad69eb31", + "permissions": "read-only", + "userArn": "arn:aws:iam::123456789012:user/AnotherDemoUser", + "userId": "AIDAJ3BA6O2FMJWCWXHEX" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "updateenvironmentmembership-1516823876645", + "title": "UpdateEnvironmentMembership" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/paginators-1.json new file mode 100644 index 00000000..1c4c2ff5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "DescribeEnvironmentMemberships": { + "result_key": "memberships", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "ListEnvironments": { + "result_key": "environmentIds", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/service-2.json.gz new file mode 100644 index 00000000..3a5b2397 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloud9/2017-09-23/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..099f2671 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/paginators-1.json new file mode 100644 index 00000000..14380b07 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListResourceRequests": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResourceRequestStatusSummaries" + }, + "ListResources": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResourceDescriptions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/paginators-1.sdk-extras.json new file mode 100644 index 00000000..d0d47fb7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/paginators-1.sdk-extras.json @@ -0,0 +1,12 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "ListResources": { + "non_aggregate_keys": [ + "TypeName" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/service-2.json.gz new file mode 100644 index 00000000..c86b2662 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/waiters-2.json new file mode 100644 index 00000000..e5f82acb --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudcontrol/2021-09-30/waiters-2.json @@ -0,0 +1,27 @@ +{ + "version" : 2, + "waiters" : { + "ResourceRequestSuccess" : { + "description" : "Wait until resource operation request is successful", + "delay" : 5, + "maxAttempts" : 24, + "operation" : "GetResourceRequestStatus", + "acceptors" : [ { + "matcher" : "path", + "argument" : "ProgressEvent.OperationStatus", + "state" : "success", + "expected" : "SUCCESS" + }, { + "matcher" : "path", + "argument" : "ProgressEvent.OperationStatus", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "ProgressEvent.OperationStatus", + "state" : "failure", + "expected" : "CANCEL_COMPLETE" + } ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b079de34 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/paginators-1.json new file mode 100644 index 00000000..22cc439e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/paginators-1.json @@ -0,0 +1,100 @@ +{ + "pagination": { + "ListObjectParentPaths": { + "result_key": "PathToObjectIdentifiersList", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListFacetNames": { + "result_key": "FacetNames", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListPublishedSchemaArns": { + "result_key": "SchemaArns", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListDirectories": { + "result_key": "Directories", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListDevelopmentSchemaArns": { + "result_key": "SchemaArns", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListTypedLinkFacetNames": { + "result_key": "FacetNames", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListIndex": { + "result_key": "IndexAttachments", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListFacetAttributes": { + "result_key": "Attributes", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListObjectPolicies": { + "result_key": "AttachedPolicyIds", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListTagsForResource": { + "result_key": "Tags", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListAttachedIndices": { + "result_key": "IndexAttachments", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "LookupPolicy": { + "result_key": "PolicyToPathList", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListPolicyAttachments": { + "result_key": "ObjectIdentifiers", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListObjectAttributes": { + "result_key": "Attributes", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListAppliedSchemaArns": { + "result_key": "SchemaArns", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListTypedLinkFacetAttributes": { + "result_key": "Attributes", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/service-2.json.gz new file mode 100644 index 00000000..7f91d10f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2016-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d8369b75 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/paginators-1.json new file mode 100644 index 00000000..5a06fb0b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/paginators-1.json @@ -0,0 +1,118 @@ +{ + "pagination": { + "ListObjectParentPaths": { + "result_key": "PathToObjectIdentifiersList", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListFacetNames": { + "result_key": "FacetNames", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListPublishedSchemaArns": { + "result_key": "SchemaArns", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListDirectories": { + "result_key": "Directories", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListDevelopmentSchemaArns": { + "result_key": "SchemaArns", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListTypedLinkFacetNames": { + "result_key": "FacetNames", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListIndex": { + "result_key": "IndexAttachments", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListFacetAttributes": { + "result_key": "Attributes", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListObjectPolicies": { + "result_key": "AttachedPolicyIds", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListTagsForResource": { + "result_key": "Tags", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListAttachedIndices": { + "result_key": "IndexAttachments", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "LookupPolicy": { + "result_key": "PolicyToPathList", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListPolicyAttachments": { + "result_key": "ObjectIdentifiers", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListObjectAttributes": { + "result_key": "Attributes", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListAppliedSchemaArns": { + "result_key": "SchemaArns", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListTypedLinkFacetAttributes": { + "result_key": "Attributes", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListIncomingTypedLinks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LinkSpecifiers" + }, + "ListManagedSchemaArns": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SchemaArns" + }, + "ListOutgoingTypedLinks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TypedLinkSpecifiers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/service-2.json.gz new file mode 100644 index 00000000..cbed3076 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/clouddirectory/2017-01-11/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f5e3efbd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/paginators-1.json new file mode 100644 index 00000000..9fa6180f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/paginators-1.json @@ -0,0 +1,100 @@ +{ + "pagination": { + "DescribeAccountLimits": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "AccountLimits" + }, + "DescribeChangeSet": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Changes", + "non_aggregate_keys": [ + "ChangeSetName", + "ChangeSetId", + "StackId", + "StackName", + "Description", + "Parameters", + "CreationTime", + "ExecutionStatus", + "Status", + "StatusReason", + "NotificationARNs", + "RollbackConfiguration", + "Capabilities", + "Tags", + "ParentChangeSetId", + "IncludeNestedStacks", + "RootChangeSetId", + "OnStackFailure", + "ImportExistingResources" + ] + }, + "DescribeStackEvents": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "StackEvents" + }, + "DescribeStacks": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Stacks" + }, + "ListChangeSets": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Summaries" + }, + "ListStackInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Summaries" + }, + "ListStackResources": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "StackResourceSummaries" + }, + "ListStacks": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "StackSummaries" + }, + "ListStackSetOperationResults": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Summaries" + }, + "ListStackSetOperations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Summaries" + }, + "ListStackSets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Summaries" + }, + "ListExports": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Exports" + }, + "ListImports": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Imports" + }, + "ListTypes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TypeSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/service-2.json.gz new file mode 100644 index 00000000..3187db3b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/waiters-2.json new file mode 100644 index 00000000..cd37c911 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudformation/2010-05-15/waiters-2.json @@ -0,0 +1,348 @@ +{ + "version": 2, + "waiters": { + "StackExists": { + "delay": 5, + "operation": "DescribeStacks", + "maxAttempts": 20, + "acceptors": [ + { + "matcher": "status", + "expected": 200, + "state": "success" + }, + { + "matcher": "error", + "expected": "ValidationError", + "state": "retry" + } + ] + }, + "StackCreateComplete": { + "delay": 30, + "operation": "DescribeStacks", + "maxAttempts": 120, + "description": "Wait until stack status is CREATE_COMPLETE.", + "acceptors": [ + { + "argument": "Stacks[].StackStatus", + "expected": "CREATE_COMPLETE", + "matcher": "pathAll", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_COMPLETE", + "matcher": "pathAll", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_IN_PROGRESS", + "matcher": "pathAll", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS", + "matcher": "pathAll", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_FAILED", + "matcher": "pathAll", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_IN_PROGRESS", + "matcher": "pathAll", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_FAILED", + "matcher": "pathAll", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS", + "matcher": "pathAll", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_COMPLETE", + "matcher": "pathAll", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "CREATE_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "DELETE_COMPLETE", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "DELETE_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "ROLLBACK_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "ROLLBACK_COMPLETE", + "matcher": "pathAny", + "state": "failure" + }, + { + "expected": "ValidationError", + "matcher": "error", + "state": "failure" + } + ] + }, + "StackDeleteComplete": { + "delay": 30, + "operation": "DescribeStacks", + "maxAttempts": 120, + "description": "Wait until stack status is DELETE_COMPLETE.", + "acceptors": [ + { + "argument": "Stacks[].StackStatus", + "expected": "DELETE_COMPLETE", + "matcher": "pathAll", + "state": "success" + }, + { + "expected": "ValidationError", + "matcher": "error", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "DELETE_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "CREATE_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "ROLLBACK_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_IN_PROGRESS", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_COMPLETE", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_COMPLETE", + "matcher": "pathAny", + "state": "failure" + } + ] + }, + "StackUpdateComplete": { + "delay": 30, + "maxAttempts": 120, + "operation": "DescribeStacks", + "description": "Wait until stack status is UPDATE_COMPLETE.", + "acceptors": [ + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_COMPLETE", + "matcher": "pathAll", + "state": "success" + }, + { + "expected": "UPDATE_FAILED", + "matcher": "pathAny", + "state": "failure", + "argument": "Stacks[].StackStatus" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "expected": "UPDATE_ROLLBACK_COMPLETE", + "matcher": "pathAny", + "state": "failure", + "argument": "Stacks[].StackStatus" + }, + { + "expected": "ValidationError", + "matcher": "error", + "state": "failure" + } + ] + }, + "StackImportComplete": { + "delay": 30, + "maxAttempts": 120, + "operation": "DescribeStacks", + "description": "Wait until stack status is IMPORT_COMPLETE.", + "acceptors": [ + { + "argument": "Stacks[].StackStatus", + "expected": "IMPORT_COMPLETE", + "matcher": "pathAll", + "state": "success" + }, + { + "expected": "ROLLBACK_COMPLETE", + "matcher": "pathAny", + "state": "failure", + "argument": "Stacks[].StackStatus" + }, + { + "expected": "ROLLBACK_FAILED", + "matcher": "pathAny", + "state": "failure", + "argument": "Stacks[].StackStatus" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "IMPORT_ROLLBACK_IN_PROGRESS", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "IMPORT_ROLLBACK_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "expected": "IMPORT_ROLLBACK_COMPLETE", + "matcher": "pathAny", + "state": "failure", + "argument": "Stacks[].StackStatus" + }, + { + "expected": "ValidationError", + "matcher": "error", + "state": "failure" + } + ] + }, + "StackRollbackComplete": { + "delay": 30, + "operation": "DescribeStacks", + "maxAttempts": 120, + "description": "Wait until stack status is UPDATE_ROLLBACK_COMPLETE.", + "acceptors": [ + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_COMPLETE", + "matcher": "pathAll", + "state": "success" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "UPDATE_ROLLBACK_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "argument": "Stacks[].StackStatus", + "expected": "DELETE_FAILED", + "matcher": "pathAny", + "state": "failure" + }, + { + "expected": "ValidationError", + "matcher": "error", + "state": "failure" + } + ] + }, + "ChangeSetCreateComplete": { + "delay": 30, + "operation": "DescribeChangeSet", + "maxAttempts": 120, + "description": "Wait until change set status is CREATE_COMPLETE.", + "acceptors": [ + { + "argument": "Status", + "expected": "CREATE_COMPLETE", + "matcher": "path", + "state": "success" + }, + { + "argument": "Status", + "expected": "FAILED", + "matcher": "path", + "state": "failure" + }, + { + "expected": "ValidationError", + "matcher": "error", + "state": "failure" + } + ] + }, + "TypeRegistrationComplete": { + "delay": 30, + "operation": "DescribeTypeRegistration", + "maxAttempts": 120, + "description": "Wait until type registration is COMPLETE.", + "acceptors": [ + { + "argument": "ProgressStatus", + "expected": "COMPLETE", + "matcher": "path", + "state": "success" + }, + { + "argument": "ProgressStatus", + "expected": "FAILED", + "matcher": "path", + "state": "failure" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront-keyvaluestore/2022-07-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront-keyvaluestore/2022-07-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..789e7378 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront-keyvaluestore/2022-07-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront-keyvaluestore/2022-07-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront-keyvaluestore/2022-07-26/paginators-1.json new file mode 100644 index 00000000..8fda57a3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront-keyvaluestore/2022-07-26/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListKeys": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront-keyvaluestore/2022-07-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront-keyvaluestore/2022-07-26/service-2.json.gz new file mode 100644 index 00000000..2c877421 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront-keyvaluestore/2022-07-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c780b43a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/service-2.json.gz new file mode 100644 index 00000000..2485fcfd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-05-31/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c780b43a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/service-2.json.gz new file mode 100644 index 00000000..f2a496fe Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-10-21/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c780b43a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/service-2.json.gz new file mode 100644 index 00000000..d3c9279f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2014-11-06/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c780b43a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/service-2.json.gz new file mode 100644 index 00000000..889f1b39 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-04-17/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c780b43a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/service-2.json.gz new file mode 100644 index 00000000..5d811639 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-07-27/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c780b43a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/service-2.json.gz new file mode 100644 index 00000000..9cc074c7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2015-09-17/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c780b43a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/service-2.json.gz new file mode 100644 index 00000000..e8f06fff Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-13/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/service-2.json.gz new file mode 100644 index 00000000..0b57a218 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-01-28/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/service-2.json.gz new file mode 100644 index 00000000..b43d8263 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-01/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/service-2.json.gz new file mode 100644 index 00000000..a8d44b65 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-08-20/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/service-2.json.gz new file mode 100644 index 00000000..d84c53de Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-07/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/service-2.json.gz new file mode 100644 index 00000000..010b8590 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-09-29/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/service-2.json.gz new file mode 100644 index 00000000..3e2d682a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/waiters-2.json new file mode 100644 index 00000000..6e044bc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2016-11-25/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 60, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/service-2.json.gz new file mode 100644 index 00000000..3682b1b7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/waiters-2.json new file mode 100644 index 00000000..edd74b2a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-03-25/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 30, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/service-2.json.gz new file mode 100644 index 00000000..d8fd38e8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/waiters-2.json new file mode 100644 index 00000000..edd74b2a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2017-10-30/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 30, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/service-2.json.gz new file mode 100644 index 00000000..6da58661 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/waiters-2.json new file mode 100644 index 00000000..edd74b2a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-06-18/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 30, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/service-2.json.gz new file mode 100644 index 00000000..da011b93 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/waiters-2.json new file mode 100644 index 00000000..edd74b2a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2018-11-05/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 25, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 30, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c8da038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/paginators-1.json new file mode 100644 index 00000000..51fbb907 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/paginators-1.json @@ -0,0 +1,32 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/service-2.json.gz new file mode 100644 index 00000000..de15a34f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/waiters-2.json new file mode 100644 index 00000000..95f0a2dd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2019-03-26/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 35, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 30, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..173a9712 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/paginators-1.json new file mode 100644 index 00000000..a54900b8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/paginators-1.json @@ -0,0 +1,38 @@ +{ + "pagination": { + "ListCloudFrontOriginAccessIdentities": { + "input_token": "Marker", + "output_token": "CloudFrontOriginAccessIdentityList.NextMarker", + "limit_key": "MaxItems", + "more_results": "CloudFrontOriginAccessIdentityList.IsTruncated", + "result_key": "CloudFrontOriginAccessIdentityList.Items" + }, + "ListDistributions": { + "input_token": "Marker", + "output_token": "DistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "DistributionList.IsTruncated", + "result_key": "DistributionList.Items" + }, + "ListInvalidations": { + "input_token": "Marker", + "output_token": "InvalidationList.NextMarker", + "limit_key": "MaxItems", + "more_results": "InvalidationList.IsTruncated", + "result_key": "InvalidationList.Items" + }, + "ListStreamingDistributions": { + "input_token": "Marker", + "output_token": "StreamingDistributionList.NextMarker", + "limit_key": "MaxItems", + "more_results": "StreamingDistributionList.IsTruncated", + "result_key": "StreamingDistributionList.Items" + }, + "ListKeyValueStores": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "KeyValueStoreList.NextMarker", + "result_key": "KeyValueStoreList.Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/service-2.json.gz new file mode 100644 index 00000000..84fde799 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/waiters-2.json new file mode 100644 index 00000000..95f0a2dd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudfront/2020-05-31/waiters-2.json @@ -0,0 +1,47 @@ +{ + "version": 2, + "waiters": { + "DistributionDeployed": { + "delay": 60, + "operation": "GetDistribution", + "maxAttempts": 35, + "description": "Wait until a distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "Distribution.Status" + } + ] + }, + "InvalidationCompleted": { + "delay": 20, + "operation": "GetInvalidation", + "maxAttempts": 30, + "description": "Wait until an invalidation has completed.", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "Invalidation.Status" + } + ] + }, + "StreamingDistributionDeployed": { + "delay": 60, + "operation": "GetStreamingDistribution", + "maxAttempts": 25, + "description": "Wait until a streaming distribution is deployed.", + "acceptors": [ + { + "expected": "Deployed", + "matcher": "path", + "state": "success", + "argument": "StreamingDistribution.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6b219662 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/paginators-1.json new file mode 100644 index 00000000..3dedddf1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/paginators-1.json @@ -0,0 +1,19 @@ +{ + "pagination": { + "ListHapgs": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "HapgList" + }, + "ListHsms": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "HsmList" + }, + "ListLunaClients": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ClientList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/service-2.json.gz new file mode 100644 index 00000000..68075bca Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsm/2014-05-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b1ab419b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/paginators-1.json new file mode 100644 index 00000000..19c403f0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "DescribeBackups": { + "result_key": "Backups", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "DescribeClusters": { + "result_key": "Clusters", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListTags": { + "result_key": "TagList", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/service-2.json.gz new file mode 100644 index 00000000..e74af4dc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudhsmv2/2017-04-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2011-02-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2011-02-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..549de5bf Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2011-02-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2011-02-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2011-02-01/service-2.json.gz new file mode 100644 index 00000000..52fcb732 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2011-02-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5ae2a472 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/service-2.json.gz new file mode 100644 index 00000000..ea257dbd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearch/2013-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearchdomain/2013-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearchdomain/2013-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..aeca4361 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearchdomain/2013-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearchdomain/2013-01-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearchdomain/2013-01-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearchdomain/2013-01-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearchdomain/2013-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearchdomain/2013-01-01/service-2.json.gz new file mode 100644 index 00000000..3841f892 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudsearchdomain/2013-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail-data/2021-08-11/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail-data/2021-08-11/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..adc12547 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail-data/2021-08-11/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail-data/2021-08-11/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail-data/2021-08-11/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail-data/2021-08-11/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail-data/2021-08-11/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail-data/2021-08-11/service-2.json.gz new file mode 100644 index 00000000..7f8e0e2e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail-data/2021-08-11/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..9df75161 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/paginators-1.json new file mode 100644 index 00000000..300217d2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/paginators-1.json @@ -0,0 +1,37 @@ +{ + "pagination": { + "LookupEvents": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Events" + }, + "ListPublicKeys": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "PublicKeyList" + }, + "ListTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ResourceTagList" + }, + "ListTrails": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Trails" + }, + "ListImportFailures": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Failures" + }, + "ListImports": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Imports" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/service-2.json.gz new file mode 100644 index 00000000..55c74082 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudtrail/2013-11-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8dcbe3c6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/paginators-1.json new file mode 100644 index 00000000..b386c2f6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/paginators-1.json @@ -0,0 +1,47 @@ +{ + "pagination": { + "DescribeAlarmHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": "AlarmHistoryItems" + }, + "DescribeAlarms": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": [ + "MetricAlarms", + "CompositeAlarms" + ] + }, + "ListDashboards": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "DashboardEntries" + }, + "ListMetrics": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": [ + "Metrics", + "OwningAccounts" + ] + }, + "GetMetricData": { + "input_token": "NextToken", + "limit_key": "MaxDatapoints", + "output_token": "NextToken", + "result_key": [ + "MetricDataResults", + "Messages" + ] + }, + "DescribeAnomalyDetectors": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AnomalyDetectors" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/service-2.json.gz new file mode 100644 index 00000000..5bb948a9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/waiters-2.json new file mode 100644 index 00000000..32803bba --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cloudwatch/2010-08-01/waiters-2.json @@ -0,0 +1,31 @@ +{ + "version": 2, + "waiters": { + "AlarmExists": { + "delay": 5, + "maxAttempts": 40, + "operation": "DescribeAlarms", + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(MetricAlarms[]) > `0`", + "state": "success" + } + ] + }, + "CompositeAlarmExists": { + "delay": 5, + "maxAttempts": 40, + "operation": "DescribeAlarms", + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(CompositeAlarms[]) > `0`", + "state": "success" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0e41d24a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/paginators-1.json new file mode 100644 index 00000000..ef860284 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "ListDomains": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "domains" + }, + "ListPackageVersionAssets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assets" + }, + "ListPackageVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "versions" + }, + "ListPackages": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "packages" + }, + "ListRepositories": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "repositories" + }, + "ListRepositoriesInDomain": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "repositories" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/paginators-1.sdk-extras.json new file mode 100644 index 00000000..d58fb3f9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/paginators-1.sdk-extras.json @@ -0,0 +1,24 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "ListPackageVersionAssets": { + "non_aggregate_keys": [ + "package", + "format", + "namespace", + "version", + "versionRevision" + ] + }, + "ListPackageVersions": { + "non_aggregate_keys": [ + "defaultDisplayVersion", + "format", + "package", + "namespace" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/service-2.json.gz new file mode 100644 index 00000000..f75240d1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codeartifact/2018-09-22/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8dda4b3f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/examples-1.json new file mode 100644 index 00000000..a5fb660e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/examples-1.json @@ -0,0 +1,281 @@ +{ + "version": "1.0", + "examples": { + "BatchGetBuilds": [ + { + "input": { + "ids": [ + "codebuild-demo-project:9b0ac37f-d19e-4254-9079-f47e9a389eEX", + "codebuild-demo-project:b79a46f7-1473-4636-a23f-da9c45c208EX" + ] + }, + "output": { + "builds": [ + { + "arn": "arn:aws:codebuild:us-east-1:123456789012:build/codebuild-demo-project:9b0ac37f-d19e-4254-9079-f47e9a389eEX", + "artifacts": { + "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/codebuild-demo-project" + }, + "buildComplete": true, + "buildStatus": "SUCCEEDED", + "currentPhase": "COMPLETED", + "endTime": 1479832474.764, + "environment": { + "type": "LINUX_CONTAINER", + "computeType": "BUILD_GENERAL1_SMALL", + "environmentVariables": [ + + ], + "image": "aws/codebuild/java:openjdk-8", + "privilegedMode": false + }, + "id": "codebuild-demo-project:9b0ac37f-d19e-4254-9079-f47e9a389eEX", + "initiator": "MyDemoUser", + "logs": { + "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logEvent:group=/aws/codebuild/codebuild-demo-project;stream=9b0ac37f-d19e-4254-9079-f47e9a389eEX", + "groupName": "/aws/codebuild/codebuild-demo-project", + "streamName": "9b0ac37f-d19e-4254-9079-f47e9a389eEX" + }, + "phases": [ + { + "durationInSeconds": 0, + "endTime": 1479832342.23, + "phaseStatus": "SUCCEEDED", + "phaseType": "SUBMITTED", + "startTime": 1479832341.854 + }, + { + "contexts": [ + + ], + "durationInSeconds": 72, + "endTime": 1479832415.064, + "phaseStatus": "SUCCEEDED", + "phaseType": "PROVISIONING", + "startTime": 1479832342.23 + }, + { + "contexts": [ + + ], + "durationInSeconds": 46, + "endTime": 1479832461.261, + "phaseStatus": "SUCCEEDED", + "phaseType": "DOWNLOAD_SOURCE", + "startTime": 1479832415.064 + }, + { + "contexts": [ + + ], + "durationInSeconds": 0, + "endTime": 1479832461.354, + "phaseStatus": "SUCCEEDED", + "phaseType": "INSTALL", + "startTime": 1479832461.261 + }, + { + "contexts": [ + + ], + "durationInSeconds": 0, + "endTime": 1479832461.448, + "phaseStatus": "SUCCEEDED", + "phaseType": "PRE_BUILD", + "startTime": 1479832461.354 + }, + { + "contexts": [ + + ], + "durationInSeconds": 9, + "endTime": 1479832471.115, + "phaseStatus": "SUCCEEDED", + "phaseType": "BUILD", + "startTime": 1479832461.448 + }, + { + "contexts": [ + + ], + "durationInSeconds": 0, + "endTime": 1479832471.224, + "phaseStatus": "SUCCEEDED", + "phaseType": "POST_BUILD", + "startTime": 1479832471.115 + }, + { + "contexts": [ + + ], + "durationInSeconds": 0, + "endTime": 1479832471.791, + "phaseStatus": "SUCCEEDED", + "phaseType": "UPLOAD_ARTIFACTS", + "startTime": 1479832471.224 + }, + { + "contexts": [ + + ], + "durationInSeconds": 2, + "endTime": 1479832474.764, + "phaseStatus": "SUCCEEDED", + "phaseType": "FINALIZING", + "startTime": 1479832471.791 + }, + { + "phaseType": "COMPLETED", + "startTime": 1479832474.764 + } + ], + "projectName": "codebuild-demo-project", + "source": { + "type": "S3", + "buildspec": "", + "location": "arn:aws:s3:::codebuild-123456789012-input-bucket/MessageUtil.zip" + }, + "startTime": 1479832341.854, + "timeoutInMinutes": 60 + }, + { + "arn": "arn:aws:codebuild:us-east-1:123456789012:build/codebuild-demo-project:b79a46f7-1473-4636-a23f-da9c45c208EX", + "artifacts": { + "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/codebuild-demo-project" + }, + "buildComplete": true, + "buildStatus": "SUCCEEDED", + "currentPhase": "COMPLETED", + "endTime": 1479401214.239, + "environment": { + "type": "LINUX_CONTAINER", + "computeType": "BUILD_GENERAL1_SMALL", + "environmentVariables": [ + + ], + "image": "aws/codebuild/java:openjdk-8", + "privilegedMode": false + }, + "id": "codebuild-demo-project:b79a46f7-1473-4636-a23f-da9c45c208EX", + "initiator": "MyDemoUser", + "logs": { + "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logEvent:group=/aws/codebuild/codebuild-demo-project;stream=b79a46f7-1473-4636-a23f-da9c45c208EX", + "groupName": "/aws/codebuild/codebuild-demo-project", + "streamName": "b79a46f7-1473-4636-a23f-da9c45c208EX" + }, + "phases": [ + { + "durationInSeconds": 0, + "endTime": 1479401082.342, + "phaseStatus": "SUCCEEDED", + "phaseType": "SUBMITTED", + "startTime": 1479401081.869 + }, + { + "contexts": [ + + ], + "durationInSeconds": 71, + "endTime": 1479401154.129, + "phaseStatus": "SUCCEEDED", + "phaseType": "PROVISIONING", + "startTime": 1479401082.342 + }, + { + "contexts": [ + + ], + "durationInSeconds": 45, + "endTime": 1479401199.136, + "phaseStatus": "SUCCEEDED", + "phaseType": "DOWNLOAD_SOURCE", + "startTime": 1479401154.129 + }, + { + "contexts": [ + + ], + "durationInSeconds": 0, + "endTime": 1479401199.236, + "phaseStatus": "SUCCEEDED", + "phaseType": "INSTALL", + "startTime": 1479401199.136 + }, + { + "contexts": [ + + ], + "durationInSeconds": 0, + "endTime": 1479401199.345, + "phaseStatus": "SUCCEEDED", + "phaseType": "PRE_BUILD", + "startTime": 1479401199.236 + }, + { + "contexts": [ + + ], + "durationInSeconds": 9, + "endTime": 1479401208.68, + "phaseStatus": "SUCCEEDED", + "phaseType": "BUILD", + "startTime": 1479401199.345 + }, + { + "contexts": [ + + ], + "durationInSeconds": 0, + "endTime": 1479401208.783, + "phaseStatus": "SUCCEEDED", + "phaseType": "POST_BUILD", + "startTime": 1479401208.68 + }, + { + "contexts": [ + + ], + "durationInSeconds": 0, + "endTime": 1479401209.463, + "phaseStatus": "SUCCEEDED", + "phaseType": "UPLOAD_ARTIFACTS", + "startTime": 1479401208.783 + }, + { + "contexts": [ + + ], + "durationInSeconds": 4, + "endTime": 1479401214.239, + "phaseStatus": "SUCCEEDED", + "phaseType": "FINALIZING", + "startTime": 1479401209.463 + }, + { + "phaseType": "COMPLETED", + "startTime": 1479401214.239 + } + ], + "projectName": "codebuild-demo-project", + "source": { + "type": "S3", + "location": "arn:aws:s3:::codebuild-123456789012-input-bucket/MessageUtil.zip" + }, + "startTime": 1479401081.869, + "timeoutInMinutes": 60 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example gets information about builds with the specified build IDs.", + "id": "to-get-information-about-builds-1501187184588", + "title": "To get information about builds" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/paginators-1.json new file mode 100644 index 00000000..63a92129 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/paginators-1.json @@ -0,0 +1,73 @@ +{ + "pagination": { + "ListBuilds": { + "output_token": "nextToken", + "input_token": "nextToken", + "result_key": "ids" + }, + "ListProjects": { + "output_token": "nextToken", + "input_token": "nextToken", + "result_key": "projects" + }, + "ListBuildsForProject": { + "output_token": "nextToken", + "input_token": "nextToken", + "result_key": "ids" + }, + "DescribeTestCases": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "testCases" + }, + "ListReportGroups": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "reportGroups" + }, + "ListReports": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "reports" + }, + "ListReportsForReportGroup": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "reports" + }, + "ListSharedProjects": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "projects" + }, + "ListSharedReportGroups": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "reportGroups" + }, + "DescribeCodeCoverages": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "codeCoverages" + }, + "ListBuildBatches": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "ids" + }, + "ListBuildBatchesForProject": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "ids" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/service-2.json.gz new file mode 100644 index 00000000..8443c573 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codebuild/2016-10-06/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..131381f1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/paginators-1.json new file mode 100644 index 00000000..15ed87f6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/paginators-1.json @@ -0,0 +1,63 @@ +{ + "pagination": { + "ListAccessTokens": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListDevEnvironments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListEventLogs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListProjects": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListSourceRepositories": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListSourceRepositoryBranches": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListSpaces": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "items" + }, + "ListDevEnvironmentSessions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListWorkflowRuns": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListWorkflows": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/service-2.json.gz new file mode 100644 index 00000000..2a34743a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codecatalyst/2022-09-28/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..9542abc2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/paginators-1.json new file mode 100644 index 00000000..b3310fca --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/paginators-1.json @@ -0,0 +1,44 @@ +{ + "pagination": { + "ListBranches": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "branches" + }, + "ListRepositories": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "repositories" + }, + "GetCommentsForComparedCommit": { + "result_key": "commentsForComparedCommitData", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "DescribePullRequestEvents": { + "result_key": "pullRequestEvents", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetCommentsForPullRequest": { + "result_key": "commentsForPullRequestData", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "ListPullRequests": { + "result_key": "pullRequestIds", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetDifferences": { + "result_key": "differences", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/service-2.json.gz new file mode 100644 index 00000000..9fa2641c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codecommit/2015-04-13/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..27ea5f1d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/paginators-1.json new file mode 100644 index 00000000..aae3fad3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/paginators-1.json @@ -0,0 +1,49 @@ +{ + "pagination": { + "ListApplicationRevisions": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "revisions" + }, + "ListApplications": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "applications" + }, + "ListDeploymentConfigs": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "deploymentConfigsList" + }, + "ListDeploymentGroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "deploymentGroups" + }, + "ListDeploymentInstances": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "instancesList" + }, + "ListDeployments": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "deployments" + }, + "ListDeploymentTargets": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "targetIds" + }, + "ListGitHubAccountTokenNames": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "tokenNameList" + }, + "ListOnPremisesInstances": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "instanceNames" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/service-2.json.gz new file mode 100644 index 00000000..74996cb3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/waiters-2.json new file mode 100644 index 00000000..0fea4fac --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codedeploy/2014-10-06/waiters-2.json @@ -0,0 +1,30 @@ +{ + "version": 2, + "waiters": { + "DeploymentSuccessful": { + "delay": 15, + "operation": "GetDeployment", + "maxAttempts": 120, + "acceptors": [ + { + "expected": "Succeeded", + "matcher": "path", + "state": "success", + "argument": "deploymentInfo.status" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "deploymentInfo.status" + }, + { + "expected": "Stopped", + "matcher": "path", + "state": "failure", + "argument": "deploymentInfo.status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e723b8fd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/paginators-1.json new file mode 100644 index 00000000..bbc1f584 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListRepositoryAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RepositoryAssociationSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/service-2.json.gz new file mode 100644 index 00000000..55eb4f4c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/waiters-2.json new file mode 100644 index 00000000..cd1730fa --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-reviewer/2019-09-19/waiters-2.json @@ -0,0 +1,58 @@ +{ + "version": 2, + "waiters": + { + "RepositoryAssociationSucceeded": + { + "description": "Wait until a repository association is complete.", + "operation": "DescribeRepositoryAssociation", + "delay": 10, + "maxAttempts": 30, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "RepositoryAssociation.State", + "expected": "Associated" + }, + { + "state": "failure", + "matcher": "path", + "argument": "RepositoryAssociation.State", + "expected": "Failed" + }, + { + "state": "retry", + "matcher": "path", + "argument": "RepositoryAssociation.State", + "expected": "Associating" + }] + }, + "CodeReviewCompleted": + { + "description": "Wait until a code review is complete.", + "operation": "DescribeCodeReview", + "delay": 10, + "maxAttempts": 180, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "CodeReview.State", + "expected": "Completed" + }, + { + "state": "failure", + "matcher": "path", + "argument": "CodeReview.State", + "expected": "Failed" + }, + { + "state": "retry", + "matcher": "path", + "argument": "CodeReview.State", + "expected": "Pending" + }] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-security/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-security/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6711f9af Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-security/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-security/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-security/2018-05-10/paginators-1.json new file mode 100644 index 00000000..03e1cbfc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-security/2018-05-10/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "GetFindings": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findings" + }, + "ListFindingsMetrics": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findingsMetrics" + }, + "ListScans": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "summaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-security/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-security/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..d055c5fb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguru-security/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..806d74d2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/paginators-1.json new file mode 100644 index 00000000..c787d76c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListProfileTimes": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "profileTimes" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/service-2.json.gz new file mode 100644 index 00000000..5d0a05d0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codeguruprofiler/2019-07-18/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c93884fc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/paginators-1.json new file mode 100644 index 00000000..dca90cb7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/paginators-1.json @@ -0,0 +1,39 @@ +{ + "pagination": { + "ListActionTypes": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "actionTypes" + }, + "ListPipelineExecutions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "pipelineExecutionSummaries" + }, + "ListPipelines": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "pipelines", + "limit_key": "maxResults" + }, + "ListWebhooks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "webhooks" + }, + "ListActionExecutions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "actionExecutionDetails" + }, + "ListTagsForResource": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "tags" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/service-2.json.gz new file mode 100644 index 00000000..2cbdbc52 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codepipeline/2015-07-09/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..9499ccfc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/service-2.json.gz new file mode 100644 index 00000000..0c6461fe Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-connections/2019-12-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e5dd0543 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/paginators-1.json new file mode 100644 index 00000000..95018141 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListEventTypes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EventTypes" + }, + "ListNotificationRules": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NotificationRules" + }, + "ListTargets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Targets" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/service-2.json.gz new file mode 100644 index 00000000..6ae73900 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar-notifications/2019-10-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..15bc139b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/paginators-1.json new file mode 100644 index 00000000..d0c91820 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListProjects": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "projects" + }, + "ListResources": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "resources" + }, + "ListTeamMembers": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "teamMembers" + }, + "ListUserProfiles": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "userProfiles" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/service-2.json.gz new file mode 100644 index 00000000..7f4b4014 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/codestar/2017-04-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6723efce Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/paginators-1.json new file mode 100644 index 00000000..2af6e40c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListIdentityPools": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IdentityPools" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/service-2.json.gz new file mode 100644 index 00000000..3215c56a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-identity/2014-06-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5864cc6e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/paginators-1.json new file mode 100644 index 00000000..51b7c94d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/paginators-1.json @@ -0,0 +1,58 @@ +{ + "pagination": { + "AdminListGroupsForUser": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Groups" + }, + "AdminListUserAuthEvents": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AuthEvents" + }, + "ListGroups": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Groups" + }, + "ListIdentityProviders": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Providers" + }, + "ListResourceServers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ResourceServers" + }, + "ListUserPoolClients": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "UserPoolClients" + }, + "ListUserPools": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "UserPools" + }, + "ListUsersInGroup": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Users" + }, + "ListUsers": { + "input_token": "PaginationToken", + "limit_key": "Limit", + "output_token": "PaginationToken", + "result_key": "Users" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/service-2.json.gz new file mode 100644 index 00000000..78adbb03 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-idp/2016-04-18/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..9ceacad4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/service-2.json.gz new file mode 100644 index 00000000..e6103f7d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cognito-sync/2014-06-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..036a8f20 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/paginators-1.json new file mode 100644 index 00000000..3a458182 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "ListTopicsDetectionJobs": { + "result_key": "TopicsDetectionJobPropertiesList", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListDocumentClassificationJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DocumentClassificationJobPropertiesList" + }, + "ListDocumentClassifiers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DocumentClassifierPropertiesList" + }, + "ListDominantLanguageDetectionJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DominantLanguageDetectionJobPropertiesList" + }, + "ListEntitiesDetectionJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EntitiesDetectionJobPropertiesList" + }, + "ListEntityRecognizers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EntityRecognizerPropertiesList" + }, + "ListKeyPhrasesDetectionJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "KeyPhrasesDetectionJobPropertiesList" + }, + "ListSentimentDetectionJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SentimentDetectionJobPropertiesList" + }, + "ListEndpoints": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EndpointPropertiesList" + }, + "ListPiiEntitiesDetectionJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PiiEntitiesDetectionJobPropertiesList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/service-2.json.gz new file mode 100644 index 00000000..38564423 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehend/2017-11-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b9c150c5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/service-2.json.gz new file mode 100644 index 00000000..3fe9ec9a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/comprehendmedical/2018-10-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..00e6c23e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/paginators-1.json new file mode 100644 index 00000000..1d115fc2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "DescribeRecommendationExportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "recommendationExportJobs" + }, + "GetEnrollmentStatusesForOrganization": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "accountEnrollmentStatuses" + }, + "GetLambdaFunctionRecommendations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "lambdaFunctionRecommendations" + }, + "GetRecommendationPreferences": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "recommendationPreferencesDetails" + }, + "GetRecommendationSummaries": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "recommendationSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/service-2.json.gz new file mode 100644 index 00000000..1ef9a89f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/compute-optimizer/2019-11-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b2fa1fa2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/paginators-1.json new file mode 100644 index 00000000..1df4d34e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/paginators-1.json @@ -0,0 +1,192 @@ +{ + "pagination": { + "DescribeComplianceByConfigRule": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ComplianceByConfigRules" + }, + "DescribeComplianceByResource": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ComplianceByResources", + "limit_key": "Limit" + }, + "DescribeConfigRules": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ConfigRules" + }, + "GetComplianceDetailsByConfigRule": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "EvaluationResults", + "limit_key": "Limit" + }, + "GetComplianceDetailsByResource": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "EvaluationResults" + }, + "GetResourceConfigHistory": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "configurationItems", + "limit_key": "limit" + }, + "ListDiscoveredResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "resourceIdentifiers", + "limit_key": "limit" + }, + "DescribeAggregateComplianceByConfigRules": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "AggregateComplianceByConfigRules" + }, + "DescribeAggregationAuthorizations": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "AggregationAuthorizations" + }, + "DescribeConfigRuleEvaluationStatus": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "ConfigRulesEvaluationStatus" + }, + "DescribeConfigurationAggregatorSourcesStatus": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "AggregatedSourceStatusList" + }, + "DescribeConfigurationAggregators": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "ConfigurationAggregators" + }, + "DescribePendingAggregationRequests": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "PendingAggregationRequests" + }, + "DescribeRetentionConfigurations": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "RetentionConfigurations" + }, + "GetAggregateComplianceDetailsByConfigRule": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "AggregateEvaluationResults" + }, + "ListAggregateDiscoveredResources": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "ResourceIdentifiers" + }, + "DescribeRemediationExecutionStatus": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "RemediationExecutionStatuses" + }, + "DescribeAggregateComplianceByConformancePacks": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "AggregateComplianceByConformancePacks" + }, + "DescribeConformancePackStatus": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "ConformancePackStatusDetails" + }, + "DescribeConformancePacks": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "ConformancePackDetails" + }, + "DescribeOrganizationConfigRuleStatuses": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "OrganizationConfigRuleStatuses" + }, + "DescribeOrganizationConfigRules": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "OrganizationConfigRules" + }, + "DescribeOrganizationConformancePackStatuses": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "OrganizationConformancePackStatuses" + }, + "DescribeOrganizationConformancePacks": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "OrganizationConformancePacks" + }, + "GetConformancePackComplianceSummary": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "ConformancePackComplianceSummaryList" + }, + "GetOrganizationConfigRuleDetailedStatus": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "OrganizationConfigRuleDetailedStatus" + }, + "GetOrganizationConformancePackDetailedStatus": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "OrganizationConformancePackDetailedStatuses" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Tags" + }, + "SelectAggregateResourceConfig": { + "input_token": "NextToken", + "limit_key": "Limit", + "non_aggregate_keys": [ + "QueryInfo" + ], + "output_token": "NextToken", + "result_key": "Results" + }, + "SelectResourceConfig": { + "input_token": "NextToken", + "limit_key": "Limit", + "non_aggregate_keys": [ + "QueryInfo" + ], + "output_token": "NextToken", + "result_key": "Results" + }, + "ListResourceEvaluations": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "ResourceEvaluations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/service-2.json.gz new file mode 100644 index 00000000..0d363236 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/config/2014-11-12/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c6dc0c6b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/service-2.json.gz new file mode 100644 index 00000000..d410c75b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/connect-contact-lens/2020-08-21/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..324c3a54 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/paginators-1.json new file mode 100644 index 00000000..675e2979 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/paginators-1.json @@ -0,0 +1,373 @@ +{ + "pagination": { + "GetMetricData": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "MetricResults" + }, + "ListRoutingProfiles": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "RoutingProfileSummaryList" + }, + "ListSecurityProfiles": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SecurityProfileSummaryList" + }, + "ListUserHierarchyGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "UserHierarchyGroupSummaryList" + }, + "ListUsers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "UserSummaryList" + }, + "ListContactFlows": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ContactFlowSummaryList" + }, + "ListHoursOfOperations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "HoursOfOperationSummaryList" + }, + "ListPhoneNumbers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PhoneNumberSummaryList" + }, + "ListQueues": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "QueueSummaryList" + }, + "ListPrompts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PromptSummaryList" + }, + "ListRoutingProfileQueues": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "RoutingProfileQueueConfigSummaryList", + "non_aggregate_keys": [ + "LastModifiedRegion", + "LastModifiedTime" + ] + }, + "ListApprovedOrigins": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Origins" + }, + "ListInstanceAttributes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Attributes" + }, + "ListInstanceStorageConfigs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "StorageConfigs" + }, + "ListInstances": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InstanceSummaryList" + }, + "ListLambdaFunctions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LambdaFunctions" + }, + "ListLexBots": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LexBots" + }, + "ListSecurityKeys": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SecurityKeys" + }, + "ListIntegrationAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IntegrationAssociationSummaryList" + }, + "ListUseCases": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "UseCaseSummaryList" + }, + "ListQuickConnects": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "QuickConnectSummaryList" + }, + "ListQueueQuickConnects": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "QuickConnectSummaryList", + "non_aggregate_keys": [ + "LastModifiedRegion", + "LastModifiedTime" + ] + }, + "ListBots": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LexBots" + }, + "ListAgentStatuses": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AgentStatusSummaryList" + }, + "ListSecurityProfilePermissions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Permissions", + "non_aggregate_keys": [ + "LastModifiedRegion", + "LastModifiedTime" + ] + }, + "ListContactReferences": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ReferenceSummaryList" + }, + "ListContactFlowModules": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ContactFlowModulesSummaryList" + }, + "ListDefaultVocabularies": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DefaultVocabularyList" + }, + "SearchVocabularies": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "VocabularySummaryList" + }, + "ListPhoneNumbersV2": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ListPhoneNumbersSummaryList" + }, + "SearchAvailablePhoneNumbers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AvailableNumbersList" + }, + "SearchUsers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "ApproximateTotalCount" + ], + "output_token": "NextToken", + "result_key": "Users" + }, + "ListTaskTemplates": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TaskTemplates" + }, + "SearchSecurityProfiles": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "ApproximateTotalCount" + ], + "output_token": "NextToken", + "result_key": "SecurityProfiles" + }, + "SearchQueues": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "ApproximateTotalCount" + ], + "output_token": "NextToken", + "result_key": "Queues" + }, + "SearchRoutingProfiles": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "ApproximateTotalCount" + ], + "output_token": "NextToken", + "result_key": "RoutingProfiles" + }, + "ListTrafficDistributionGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TrafficDistributionGroupSummaryList" + }, + "ListRules": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "RuleSummaryList" + }, + "ListContactEvaluations": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "EvaluationSummaryList" + }, + "ListEvaluationFormVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EvaluationFormVersionSummaryList" + }, + "ListEvaluationForms": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EvaluationFormSummaryList" + }, + "SearchHoursOfOperations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "ApproximateTotalCount" + ], + "output_token": "NextToken", + "result_key": "HoursOfOperations" + }, + "SearchPrompts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "ApproximateTotalCount" + ], + "output_token": "NextToken", + "result_key": "Prompts" + }, + "SearchQuickConnects": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "ApproximateTotalCount" + ], + "output_token": "NextToken", + "result_key": "QuickConnects" + }, + "SearchResourceTags": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Tags" + }, + "ListTrafficDistributionGroupUsers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TrafficDistributionGroupUserSummaryList" + }, + "ListViewVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ViewVersionSummaryList" + }, + "ListViews": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ViewsSummaryList" + }, + "ListSecurityProfileApplications": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Applications", + "non_aggregate_keys": [ + "LastModifiedRegion", + "LastModifiedTime" + ] + }, + "ListFlowAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "FlowAssociationSummaryList" + }, + "ListPredefinedAttributes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PredefinedAttributeSummaryList" + }, + "ListUserProficiencies": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "LastModifiedTime", + "LastModifiedRegion" + ], + "output_token": "NextToken", + "result_key": "UserProficiencyList" + }, + "SearchContacts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "TotalCount" + ], + "output_token": "NextToken", + "result_key": "Contacts" + }, + "SearchPredefinedAttributes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "ApproximateTotalCount" + ], + "output_token": "NextToken", + "result_key": "PredefinedAttributes" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/service-2.json.gz new file mode 100644 index 00000000..f75dbce5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/connect/2017-08-08/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connectcampaigns/2021-01-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcampaigns/2021-01-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4838b681 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcampaigns/2021-01-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connectcampaigns/2021-01-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcampaigns/2021-01-30/paginators-1.json new file mode 100644 index 00000000..6ab04512 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcampaigns/2021-01-30/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListCampaigns": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "campaignSummaryList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connectcampaigns/2021-01-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcampaigns/2021-01-30/service-2.json.gz new file mode 100644 index 00000000..7f1aaeef Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcampaigns/2021-01-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connectcases/2022-10-03/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcases/2022-10-03/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c7586516 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcases/2022-10-03/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connectcases/2022-10-03/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcases/2022-10-03/paginators-1.json new file mode 100644 index 00000000..6ce244da --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcases/2022-10-03/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "SearchCases": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "cases" + }, + "SearchRelatedItems": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "relatedItems" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connectcases/2022-10-03/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcases/2022-10-03/service-2.json.gz new file mode 100644 index 00000000..cb24a805 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/connectcases/2022-10-03/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4a970e77 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/service-2.json.gz new file mode 100644 index 00000000..199a02e5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/connectparticipant/2018-09-07/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/controltower/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/controltower/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..014aad87 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/controltower/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/controltower/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/controltower/2018-05-10/paginators-1.json new file mode 100644 index 00000000..24f2f2bd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/controltower/2018-05-10/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListEnabledControls": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "enabledControls" + }, + "ListLandingZones": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "landingZones" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/controltower/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/controltower/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..e1b2920e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/controltower/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..83708400 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/paginators-1.json new file mode 100644 index 00000000..39460e68 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListEnrollmentStatuses": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListRecommendationSummaries": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListRecommendations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/paginators-1.sdk-extras.json new file mode 100644 index 00000000..7d0ffa5d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/paginators-1.sdk-extras.json @@ -0,0 +1,14 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "ListRecommendationSummaries": { + "non_aggregate_keys": [ + "groupBy", + "currencyCode", + "estimatedTotalDedupedSavings" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/service-2.json.gz new file mode 100644 index 00000000..334932b6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cost-optimization-hub/2022-07-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ff5579d8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/examples-1.json new file mode 100644 index 00000000..d647e38b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/examples-1.json @@ -0,0 +1,102 @@ +{ + "version": "1.0", + "examples": { + "DeleteReportDefinition": [ + { + "input": { + "ReportName": "ExampleReport" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes the AWS Cost and Usage report named ExampleReport.", + "id": "to-delete-a-report", + "title": "To delete the AWS Cost and Usage report named ExampleReport." + } + ], + "DescribeReportDefinitions": [ + { + "input": { + "MaxResults": 5 + }, + "output": { + "ReportDefinitions": [ + { + "AdditionalArtifacts": [ + "QUICKSIGHT" + ], + "AdditionalSchemaElements": [ + "RESOURCES" + ], + "Compression": "GZIP", + "Format": "textORcsv", + "ReportName": "ExampleReport", + "S3Bucket": "example-s3-bucket", + "S3Prefix": "exampleprefix", + "S3Region": "us-east-1", + "TimeUnit": "HOURLY" + }, + { + "AdditionalArtifacts": [ + "QUICKSIGHT" + ], + "AdditionalSchemaElements": [ + "RESOURCES" + ], + "Compression": "GZIP", + "Format": "textORcsv", + "ReportName": "ExampleReport2", + "S3Bucket": "example-s3-bucket", + "S3Prefix": "exampleprefix", + "S3Region": "us-east-1", + "TimeUnit": "HOURLY" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example lists the AWS Cost and Usage reports for the account.", + "id": "to-retrieve-report-definitions", + "title": "To list the AWS Cost and Usage reports for the account." + } + ], + "PutReportDefinition": [ + { + "input": { + "ReportDefinition": { + "AdditionalArtifacts": [ + "REDSHIFT", + "QUICKSIGHT" + ], + "AdditionalSchemaElements": [ + "RESOURCES" + ], + "Compression": "ZIP", + "Format": "textORcsv", + "ReportName": "ExampleReport", + "S3Bucket": "example-s3-bucket", + "S3Prefix": "exampleprefix", + "S3Region": "us-east-1", + "TimeUnit": "DAILY" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a AWS Cost and Usage report named ExampleReport.", + "id": "to-create-a-report-definitions", + "title": "To create a report named ExampleReport." + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/paginators-1.json new file mode 100644 index 00000000..7db4dfe1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "DescribeReportDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReportDefinitions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/service-2.json.gz new file mode 100644 index 00000000..6eed65f5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/cur/2017-01-06/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3dd4cf3c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/paginators-1.json new file mode 100644 index 00000000..58e94da6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListEventStreams": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/service-2.json.gz new file mode 100644 index 00000000..23b3b26e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/customer-profiles/2020-08-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c847e309 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/paginators-1.json new file mode 100644 index 00000000..d18a749e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/paginators-1.json @@ -0,0 +1,52 @@ +{ + "pagination": { + "ListDatasets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Datasets" + }, + "ListJobRuns": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "JobRuns" + }, + "ListJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Jobs" + }, + "ListProjects": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Projects" + }, + "ListRecipeVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Recipes" + }, + "ListRecipes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Recipes" + }, + "ListSchedules": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Schedules" + }, + "ListRulesets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Rulesets" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/service-2.json.gz new file mode 100644 index 00000000..02517bc2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/databrew/2017-07-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5ae80704 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/paginators-1.json new file mode 100644 index 00000000..1f3ae6a0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListDataSetRevisions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Revisions" + }, + "ListDataSets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DataSets" + }, + "ListJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Jobs" + }, + "ListRevisionAssets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Assets" + }, + "ListEventActions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "EventActions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/service-2.json.gz new file mode 100644 index 00000000..defcf2c7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dataexchange/2017-07-25/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1f071859 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/paginators-1.json new file mode 100644 index 00000000..c859c9fb --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/paginators-1.json @@ -0,0 +1,23 @@ +{ + "pagination": { + "ListPipelines": { + "input_token": "marker", + "output_token": "marker", + "more_results": "hasMoreResults", + "result_key": "pipelineIdList" + }, + "DescribeObjects": { + "input_token": "marker", + "output_token": "marker", + "more_results": "hasMoreResults", + "result_key": "pipelineObjects" + }, + "QueryObjects": { + "input_token": "marker", + "output_token": "marker", + "more_results": "hasMoreResults", + "limit_key": "limit", + "result_key": "ids" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/service-2.json.gz new file mode 100644 index 00000000..8cbf3eda Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/datapipeline/2012-10-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..2a7b8267 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/paginators-1.json new file mode 100644 index 00000000..6819b45e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/paginators-1.json @@ -0,0 +1,52 @@ +{ + "pagination": { + "ListAgents": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Agents" + }, + "ListLocations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Locations" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Tags" + }, + "ListTaskExecutions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TaskExecutions" + }, + "ListTasks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Tasks" + }, + "DescribeStorageSystemResourceMetrics": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Metrics" + }, + "ListDiscoveryJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DiscoveryJobs" + }, + "ListStorageSystems": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "StorageSystems" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/service-2.json.gz new file mode 100644 index 00000000..d9625caa Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/datasync/2018-11-09/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..78bdb0e0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/paginators-1.json new file mode 100644 index 00000000..1f73d489 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/paginators-1.json @@ -0,0 +1,130 @@ +{ + "pagination": { + "ListAssetRevisions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListDataSourceRunActivities": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListDataSourceRuns": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListDataSources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListDomains": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListEnvironmentBlueprintConfigurations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListEnvironmentBlueprints": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListEnvironmentProfiles": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListEnvironments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListNotifications": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "notifications" + }, + "ListProjectMemberships": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "members" + }, + "ListProjects": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListSubscriptionGrants": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListSubscriptionRequests": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListSubscriptionTargets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListSubscriptions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "Search": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "SearchGroupProfiles": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "SearchListings": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "SearchTypes": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "SearchUserProfiles": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/paginators-1.sdk-extras.json new file mode 100644 index 00000000..d4bc280f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/paginators-1.sdk-extras.json @@ -0,0 +1,22 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "Search": { + "non_aggregate_keys": [ + "totalMatchCount" + ] + }, + "SearchListings": { + "non_aggregate_keys": [ + "totalMatchCount" + ] + }, + "SearchTypes": { + "non_aggregate_keys": [ + "totalMatchCount" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..3bb04587 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/datazone/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f19dda1c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/paginators-1.json new file mode 100644 index 00000000..c13b2df9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/paginators-1.json @@ -0,0 +1,45 @@ +{ + "pagination": { + "DescribeClusters": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Clusters" + }, + "DescribeDefaultParameters": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Parameters" + }, + "DescribeEvents": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Events" + }, + "DescribeParameterGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ParameterGroups" + }, + "DescribeParameters": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Parameters" + }, + "DescribeSubnetGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SubnetGroups" + }, + "ListTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Tags" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/service-2.json.gz new file mode 100644 index 00000000..2b9a2f27 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dax/2017-04-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..58e019b7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/service-2.json.gz new file mode 100644 index 00000000..38778a63 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/detective/2018-10-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f088e4ec Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/examples-1.json new file mode 100644 index 00000000..9db4e46c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/examples-1.json @@ -0,0 +1,1242 @@ +{ + "version": "1.0", + "examples": { + "CreateDevicePool": [ + { + "input": { + "name": "MyDevicePool", + "description": "My Android devices", + "projectArn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456", + "rules": [ + + ] + }, + "output": { + "devicePool": { + } + }, + "comments": { + "input": { + "name": "A device pool contains related devices, such as devices that run only on Android or that run only on iOS.", + "projectArn": "You can get the project ARN by using the list-projects CLI command." + }, + "output": { + } + }, + "description": "The following example creates a new device pool named MyDevicePool inside an existing project.", + "id": "createdevicepool-example-1470862210860", + "title": "To create a new device pool" + } + ], + "CreateProject": [ + { + "input": { + "name": "MyProject" + }, + "output": { + "project": { + "name": "MyProject", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:5e01a8c7-c861-4c0a-b1d5-12345EXAMPLE", + "created": "1472660939.152" + } + }, + "comments": { + "input": { + "name": "A project in Device Farm is a workspace that contains test runs. A run is a test of a single app against one or more devices." + }, + "output": { + } + }, + "description": "The following example creates a new project named MyProject.", + "id": "createproject-example-1470862210860", + "title": "To create a new project" + } + ], + "CreateRemoteAccessSession": [ + { + "input": { + "name": "MySession", + "configuration": { + "billingMethod": "METERED" + }, + "deviceArn": "arn:aws:devicefarm:us-west-2::device:123EXAMPLE", + "projectArn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456" + }, + "output": { + "remoteAccessSession": { + } + }, + "comments": { + "input": { + "deviceArn": "You can get the device ARN by using the list-devices CLI command.", + "projectArn": "You can get the project ARN by using the list-projects CLI command." + }, + "output": { + } + }, + "description": "The following example creates a remote access session named MySession.", + "id": "to-create-a-remote-access-session-1470970668274", + "title": "To create a remote access session" + } + ], + "CreateUpload": [ + { + "input": { + "name": "MyAppiumPythonUpload", + "type": "APPIUM_PYTHON_TEST_PACKAGE", + "projectArn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456" + }, + "output": { + "upload": { + "name": "MyAppiumPythonUpload", + "type": "APPIUM_PYTHON_TEST_PACKAGE", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:upload:5e01a8c7-c861-4c0a-b1d5-5ec6e6c6dd23/b5340a65-3da7-4da6-a26e-12345EXAMPLE", + "created": "1472661404.186", + "status": "INITIALIZED", + "url": "https://prod-us-west-2-uploads.s3-us-west-2.amazonaws.com/arn%3Aaws%3Adevicefarm%3Aus-west-2%3A123456789101%3Aproject%3A5e01a8c7-c861-4c0a-b1d5-12345EXAMPLE/uploads/arn%3Aaws%3Adevicefarm%3Aus-west-2%3A123456789101%3Aupload%3A5e01a8c7-c861-4c0a-b1d5-5ec6e6c6dd23/b5340a65-3da7-4da6-a26e-12345EXAMPLE/MyAppiumPythonUpload?AWSAccessKeyId=1234567891011EXAMPLE&Expires=1472747804&Signature=1234567891011EXAMPLE" + } + }, + "comments": { + "input": { + "projectArn": "You can get the project ARN by using the list-projects CLI command." + }, + "output": { + } + }, + "description": "The following example creates a new Appium Python test package upload inside an existing project.", + "id": "createupload-example-1470864711775", + "title": "To create a new test package upload" + } + ], + "DeleteDevicePool": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2::devicepool:123-456-EXAMPLE-GUID" + }, + "output": { + }, + "comments": { + "input": { + "arn": "You can get the device pool ARN by using the list-device-pools CLI command." + }, + "output": { + } + }, + "description": "The following example deletes a specific device pool.", + "id": "deletedevicepool-example-1470866975494", + "title": "To delete a device pool" + } + ], + "DeleteProject": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456" + }, + "output": { + }, + "comments": { + "input": { + "arn": "You can get the project ARN by using the list-projects CLI command." + }, + "output": { + } + }, + "description": "The following example deletes a specific project.", + "id": "deleteproject-example-1470867374212", + "title": "To delete a project" + } + ], + "DeleteRemoteAccessSession": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:session:EXAMPLE-GUID-123-456" + }, + "output": { + }, + "comments": { + "input": { + "arn": "You can get the remote access session ARN by using the list-remote-access-sessions CLI command." + }, + "output": { + } + }, + "description": "The following example deletes a specific remote access session.", + "id": "to-delete-a-specific-remote-access-session-1470971431677", + "title": "To delete a specific remote access session" + } + ], + "DeleteRun": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:run:EXAMPLE-GUID-123-456" + }, + "output": { + }, + "comments": { + "input": { + "arn": "You can get the run ARN by using the list-runs CLI command." + }, + "output": { + } + }, + "description": "The following example deletes a specific test run.", + "id": "deleterun-example-1470867905129", + "title": "To delete a run" + } + ], + "DeleteUpload": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:upload:EXAMPLE-GUID-123-456" + }, + "output": { + }, + "comments": { + "input": { + "arn": "You can get the upload ARN by using the list-uploads CLI command." + }, + "output": { + } + }, + "description": "The following example deletes a specific upload.", + "id": "deleteupload-example-1470868363942", + "title": "To delete a specific upload" + } + ], + "GetAccountSettings": [ + { + "input": { + }, + "output": { + "accountSettings": { + "awsAccountNumber": "123456789101", + "unmeteredDevices": { + "ANDROID": 1, + "IOS": 2 + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns information about your Device Farm account settings.", + "id": "to-get-information-about-account-settings-1472567568189", + "title": "To get information about account settings" + } + ], + "GetDevice": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2::device:123EXAMPLE" + }, + "output": { + "device": { + "name": "LG G2 (Sprint)", + "arn": "arn:aws:devicefarm:us-west-2::device:A0E6E6E1059E45918208DF75B2B7EF6C", + "cpu": { + "architecture": "armeabi-v7a", + "clock": 2265.6, + "frequency": "MHz" + }, + "formFactor": "PHONE", + "heapSize": 256000000, + "image": "75B2B7EF6C12345EXAMPLE", + "manufacturer": "LG", + "memory": 16000000000, + "model": "G2 (Sprint)", + "os": "4.2.2", + "platform": "ANDROID", + "resolution": { + "height": 1920, + "width": 1080 + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns information about a specific device.", + "id": "getdevice-example-1470870602173", + "title": "To get information about a device" + } + ], + "GetDevicePool": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456" + }, + "output": { + "devicePool": { + } + }, + "comments": { + "input": { + "arn": "You can obtain the project ARN by using the list-projects CLI command." + }, + "output": { + } + }, + "description": "The following example returns information about a specific device pool, given a project ARN.", + "id": "getdevicepool-example-1470870873136", + "title": "To get information about a device pool" + } + ], + "GetDevicePoolCompatibility": [ + { + "input": { + "appArn": "arn:aws:devicefarm:us-west-2::app:123-456-EXAMPLE-GUID", + "devicePoolArn": "arn:aws:devicefarm:us-west-2::devicepool:123-456-EXAMPLE-GUID", + "testType": "APPIUM_PYTHON" + }, + "output": { + "compatibleDevices": [ + + ], + "incompatibleDevices": [ + + ] + }, + "comments": { + "input": { + "devicePoolArn": "You can get the device pool ARN by using the list-device-pools CLI command." + }, + "output": { + } + }, + "description": "The following example returns information about the compatibility of a specific device pool, given its ARN.", + "id": "getdevicepoolcompatibility-example-1470925003466", + "title": "To get information about the compatibility of a device pool" + } + ], + "GetJob": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2::job:123-456-EXAMPLE-GUID" + }, + "output": { + "job": { + } + }, + "comments": { + "input": { + "arn": "You can get the job ARN by using the list-jobs CLI command." + }, + "output": { + } + }, + "description": "The following example returns information about a specific job.", + "id": "getjob-example-1470928294268", + "title": "To get information about a job" + } + ], + "GetOfferingStatus": [ + { + "input": { + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE=" + }, + "output": { + "current": { + "D68B3C05-1BA6-4360-BC69-12345EXAMPLE": { + "offering": { + "type": "RECURRING", + "description": "Android Remote Access Unmetered Device Slot", + "id": "D68B3C05-1BA6-4360-BC69-12345EXAMPLE", + "platform": "ANDROID" + }, + "quantity": 1 + } + }, + "nextPeriod": { + "D68B3C05-1BA6-4360-BC69-12345EXAMPLE": { + "effectiveOn": "1472688000", + "offering": { + "type": "RECURRING", + "description": "Android Remote Access Unmetered Device Slot", + "id": "D68B3C05-1BA6-4360-BC69-12345EXAMPLE", + "platform": "ANDROID" + }, + "quantity": 1 + } + } + }, + "comments": { + "input": { + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about Device Farm offerings available to your account.", + "id": "to-get-status-information-about-device-offerings-1472568124402", + "title": "To get status information about device offerings" + } + ], + "GetProject": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:5e01a8c7-c861-4c0a-b1d5-12345EXAMPLE" + }, + "output": { + "project": { + "name": "My Project", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:5e01a8c7-c861-4c0a-b1d5-12345EXAMPLE", + "created": "1472660939.152" + } + }, + "comments": { + "input": { + "arn": "You can get the project ARN by using the list-projects CLI command." + }, + "output": { + } + }, + "description": "The following example gets information about a specific project.", + "id": "to-get-a-project-1470975038449", + "title": "To get information about a project" + } + ], + "GetRemoteAccessSession": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:session:EXAMPLE-GUID-123-456" + }, + "output": { + "remoteAccessSession": { + } + }, + "comments": { + "input": { + "arn": "You can get the remote access session ARN by using the list-remote-access-sessions CLI command." + }, + "output": { + } + }, + "description": "The following example gets a specific remote access session.", + "id": "to-get-a-remote-access-session-1471014119414", + "title": "To get a remote access session" + } + ], + "GetRun": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:run:5e01a8c7-c861-4c0a-b1d5-5ec6e6c6dd23/0fcac17b-6122-44d7-ae5a-12345EXAMPLE" + }, + "output": { + "run": { + "name": "My Test Run", + "type": "BUILTIN_EXPLORER", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:run:5e01a8c7-c861-4c0a-b1d5-5ec6e6c6dd23/0fcac17b-6122-44d7-ae5a-12345EXAMPLE", + "billingMethod": "METERED", + "completedJobs": 0, + "counters": { + "errored": 0, + "failed": 0, + "passed": 0, + "skipped": 0, + "stopped": 0, + "total": 0, + "warned": 0 + }, + "created": "1472667509.852", + "deviceMinutes": { + "metered": 0.0, + "total": 0.0, + "unmetered": 0.0 + }, + "platform": "ANDROID", + "result": "PENDING", + "status": "RUNNING", + "totalJobs": 3 + } + }, + "comments": { + "input": { + "arn": "You can get the run ARN by using the list-runs CLI command." + }, + "output": { + } + }, + "description": "The following example gets information about a specific test run.", + "id": "to-get-a-test-run-1471015895657", + "title": "To get information about a test run" + } + ], + "GetSuite": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:suite:EXAMPLE-GUID-123-456" + }, + "output": { + "suite": { + } + }, + "comments": { + "input": { + "arn": "You can get the suite ARN by using the list-suites CLI command." + }, + "output": { + } + }, + "description": "The following example gets information about a specific test suite.", + "id": "to-get-information-about-a-test-suite-1471016525008", + "title": "To get information about a test suite" + } + ], + "GetTest": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:test:EXAMPLE-GUID-123-456" + }, + "output": { + "test": { + } + }, + "comments": { + "input": { + "arn": "You can get the test ARN by using the list-tests CLI command." + }, + "output": { + } + }, + "description": "The following example gets information about a specific test.", + "id": "to-get-information-about-a-specific-test-1471025744238", + "title": "To get information about a specific test" + } + ], + "GetUpload": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:upload:EXAMPLE-GUID-123-456" + }, + "output": { + "upload": { + } + }, + "comments": { + "input": { + "arn": "You can get the test ARN by using the list-uploads CLI command." + }, + "output": { + } + }, + "description": "The following example gets information about a specific upload.", + "id": "to-get-information-about-a-specific-upload-1471025996221", + "title": "To get information about a specific upload" + } + ], + "InstallToRemoteAccessSession": [ + { + "input": { + "appArn": "arn:aws:devicefarm:us-west-2:123456789101:app:EXAMPLE-GUID-123-456", + "remoteAccessSessionArn": "arn:aws:devicefarm:us-west-2:123456789101:session:EXAMPLE-GUID-123-456" + }, + "output": { + "appUpload": { + } + }, + "comments": { + "input": { + "remoteAccessSessionArn": "You can get the remote access session ARN by using the list-remote-access-sessions CLI command." + }, + "output": { + } + }, + "description": "The following example installs a specific app to a device in a specific remote access session.", + "id": "to-install-to-a-remote-access-session-1471634453818", + "title": "To install to a remote access session" + } + ], + "ListArtifacts": [ + { + "input": { + "type": "SCREENSHOT", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:run:EXAMPLE-GUID-123-456" + }, + "comments": { + "input": { + "arn": "Can also be used to list artifacts for a Job, Suite, or Test ARN." + }, + "output": { + } + }, + "description": "The following example lists screenshot artifacts for a specific run.", + "id": "to-list-artifacts-for-a-resource-1471635409527", + "title": "To list artifacts for a resource" + } + ], + "ListDevicePools": [ + { + "input": { + "type": "PRIVATE", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456" + }, + "output": { + "devicePools": [ + { + "name": "Top Devices", + "arn": "arn:aws:devicefarm:us-west-2::devicepool:082d10e5-d7d7-48a5-ba5c-12345EXAMPLE", + "description": "Top devices", + "rules": [ + { + "value": "[\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\"]", + "attribute": "ARN", + "operator": "IN" + } + ] + }, + { + "name": "My Android Device Pool", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:devicepool:5e01a8c7-c861-4c0a-b1d5-5ec6e6c6dd23/bf96e75a-28f6-4e61-b6a7-12345EXAMPLE", + "description": "Samsung Galaxy Android devices", + "rules": [ + { + "value": "[\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\",\"arn:aws:devicefarm:us-west-2::device:123456789EXAMPLE\"]", + "attribute": "ARN", + "operator": "IN" + } + ] + } + ] + }, + "comments": { + "input": { + "arn": "You can get the project ARN by using the list-projects CLI command." + }, + "output": { + } + }, + "description": "The following example returns information about the private device pools in a specific project.", + "id": "to-get-information-about-device-pools-1471635745170", + "title": "To get information about device pools" + } + ], + "ListDevices": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456" + }, + "output": { + }, + "comments": { + "input": { + "arn": "You can get the project ARN by using the list-projects CLI command." + }, + "output": { + } + }, + "description": "The following example returns information about the available devices in a specific project.", + "id": "to-get-information-about-devices-1471641699344", + "title": "To get information about devices" + } + ], + "ListJobs": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456" + }, + "comments": { + "input": { + "arn": "You can get the project ARN by using the list-jobs CLI command." + }, + "output": { + } + }, + "description": "The following example returns information about jobs in a specific project.", + "id": "to-get-information-about-jobs-1471642228071", + "title": "To get information about jobs" + } + ], + "ListOfferingTransactions": [ + { + "input": { + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE=" + }, + "output": { + "offeringTransactions": [ + { + "cost": { + "amount": 0, + "currencyCode": "USD" + }, + "createdOn": "1470021420", + "offeringStatus": { + "type": "RENEW", + "effectiveOn": "1472688000", + "offering": { + "type": "RECURRING", + "description": "Android Remote Access Unmetered Device Slot", + "id": "D68B3C05-1BA6-4360-BC69-12345EXAMPLE", + "platform": "ANDROID" + }, + "quantity": 0 + }, + "transactionId": "03728003-d1ea-4851-abd6-12345EXAMPLE" + }, + { + "cost": { + "amount": 250, + "currencyCode": "USD" + }, + "createdOn": "1470021420", + "offeringStatus": { + "type": "PURCHASE", + "effectiveOn": "1470021420", + "offering": { + "type": "RECURRING", + "description": "Android Remote Access Unmetered Device Slot", + "id": "D68B3C05-1BA6-4360-BC69-12345EXAMPLE", + "platform": "ANDROID" + }, + "quantity": 1 + }, + "transactionId": "56820b6e-06bd-473a-8ff8-12345EXAMPLE" + }, + { + "cost": { + "amount": 175, + "currencyCode": "USD" + }, + "createdOn": "1465538520", + "offeringStatus": { + "type": "PURCHASE", + "effectiveOn": "1465538520", + "offering": { + "type": "RECURRING", + "description": "Android Unmetered Device Slot", + "id": "8980F81C-00D7-469D-8EC6-12345EXAMPLE", + "platform": "ANDROID" + }, + "quantity": 1 + }, + "transactionId": "953ae2c6-d760-4a04-9597-12345EXAMPLE" + }, + { + "cost": { + "amount": 8.07, + "currencyCode": "USD" + }, + "createdOn": "1459344300", + "offeringStatus": { + "type": "PURCHASE", + "effectiveOn": "1459344300", + "offering": { + "type": "RECURRING", + "description": "iOS Unmetered Device Slot", + "id": "A53D4D73-A6F6-4B82-A0B0-12345EXAMPLE", + "platform": "IOS" + }, + "quantity": 1 + }, + "transactionId": "2baf9021-ae3e-47f5-ab52-12345EXAMPLE" + } + ] + }, + "comments": { + "input": { + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about Device Farm offering transactions.", + "id": "to-get-information-about-device-offering-transactions-1472561712315", + "title": "To get information about device offering transactions" + } + ], + "ListOfferings": [ + { + "input": { + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE=" + }, + "output": { + "offerings": [ + { + "type": "RECURRING", + "description": "iOS Unmetered Device Slot", + "id": "A53D4D73-A6F6-4B82-A0B0-12345EXAMPLE", + "platform": "IOS", + "recurringCharges": [ + { + "cost": { + "amount": 250, + "currencyCode": "USD" + }, + "frequency": "MONTHLY" + } + ] + }, + { + "type": "RECURRING", + "description": "Android Unmetered Device Slot", + "id": "8980F81C-00D7-469D-8EC6-12345EXAMPLE", + "platform": "ANDROID", + "recurringCharges": [ + { + "cost": { + "amount": 250, + "currencyCode": "USD" + }, + "frequency": "MONTHLY" + } + ] + }, + { + "type": "RECURRING", + "description": "Android Remote Access Unmetered Device Slot", + "id": "D68B3C05-1BA6-4360-BC69-12345EXAMPLE", + "platform": "ANDROID", + "recurringCharges": [ + { + "cost": { + "amount": 250, + "currencyCode": "USD" + }, + "frequency": "MONTHLY" + } + ] + }, + { + "type": "RECURRING", + "description": "iOS Remote Access Unmetered Device Slot", + "id": "552B4DAD-A6C9-45C4-94FB-12345EXAMPLE", + "platform": "IOS", + "recurringCharges": [ + { + "cost": { + "amount": 250, + "currencyCode": "USD" + }, + "frequency": "MONTHLY" + } + ] + } + ] + }, + "comments": { + "input": { + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about available device offerings.", + "id": "to-get-information-about-device-offerings-1472562810999", + "title": "To get information about device offerings" + } + ], + "ListProjects": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:7ad300ed-8183-41a7-bf94-12345EXAMPLE", + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE" + }, + "output": { + "projects": [ + { + "name": "My Test Project", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:7ad300ed-8183-41a7-bf94-12345EXAMPLE", + "created": "1453163262.105" + }, + { + "name": "Hello World", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:d6b087d9-56db-4e44-b9ec-12345EXAMPLE", + "created": "1470350112.439" + } + ] + }, + "comments": { + "input": { + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about the specified project in Device Farm.", + "id": "to-get-information-about-a-device-farm-project-1472564014388", + "title": "To get information about a Device Farm project" + } + ], + "ListRemoteAccessSessions": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:session:EXAMPLE-GUID-123-456", + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE=" + }, + "output": { + "remoteAccessSessions": [ + + ] + }, + "comments": { + "input": { + "arn": "You can get the Amazon Resource Name (ARN) of the session by using the list-sessions CLI command.", + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about a specific Device Farm remote access session.", + "id": "to-get-information-about-a-remote-access-session-1472581144803", + "title": "To get information about a remote access session" + } + ], + "ListRuns": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:run:5e01a8c7-c861-4c0a-b1d5-5ec6e6c6dd23/0fcac17b-6122-44d7-ae5a-12345EXAMPLE", + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE" + }, + "output": { + "runs": [ + { + "name": "My Test Run", + "type": "BUILTIN_EXPLORER", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:run:5e01a8c7-c861-4c0a-b1d5-5ec6e6c6dd23/0fcac17b-6122-44d7-ae5a-12345EXAMPLE", + "billingMethod": "METERED", + "completedJobs": 0, + "counters": { + "errored": 0, + "failed": 0, + "passed": 0, + "skipped": 0, + "stopped": 0, + "total": 0, + "warned": 0 + }, + "created": "1472667509.852", + "deviceMinutes": { + "metered": 0.0, + "total": 0.0, + "unmetered": 0.0 + }, + "platform": "ANDROID", + "result": "PENDING", + "status": "RUNNING", + "totalJobs": 3 + } + ] + }, + "comments": { + "input": { + "arn": "You can get the Amazon Resource Name (ARN) of the run by using the list-runs CLI command.", + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about a specific test run.", + "id": "to-get-information-about-test-runs-1472582711069", + "title": "To get information about a test run" + } + ], + "ListSamples": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456", + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE" + }, + "output": { + "samples": [ + + ] + }, + "comments": { + "input": { + "arn": "You can get the Amazon Resource Name (ARN) of the project by using the list-projects CLI command.", + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about samples, given a specific Device Farm project.", + "id": "to-get-information-about-samples-1472582847534", + "title": "To get information about samples" + } + ], + "ListSuites": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:job:EXAMPLE-GUID-123-456", + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE" + }, + "output": { + "suites": [ + + ] + }, + "comments": { + "input": { + "arn": "You can get the Amazon Resource Name (ARN) of the job by using the list-jobs CLI command.", + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about suites, given a specific Device Farm job.", + "id": "to-get-information-about-suites-1472583038218", + "title": "To get information about suites" + } + ], + "ListTests": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456", + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE" + }, + "output": { + "tests": [ + + ] + }, + "comments": { + "input": { + "arn": "You can get the Amazon Resource Name (ARN) of the project by using the list-projects CLI command.", + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about tests, given a specific Device Farm project.", + "id": "to-get-information-about-tests-1472617372212", + "title": "To get information about tests" + } + ], + "ListUniqueProblems": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456", + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE" + }, + "output": { + "uniqueProblems": { + } + }, + "comments": { + "input": { + "arn": "You can get the Amazon Resource Name (ARN) of the project by using the list-projects CLI command.", + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about unique problems, given a specific Device Farm project.", + "id": "to-get-information-about-unique-problems-1472617781008", + "title": "To get information about unique problems" + } + ], + "ListUploads": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456", + "nextToken": "RW5DdDJkMWYwZjM2MzM2VHVpOHJIUXlDUXlhc2QzRGViYnc9SEXAMPLE" + }, + "output": { + "uploads": [ + + ] + }, + "comments": { + "input": { + "arn": "You can get the Amazon Resource Name (ARN) of the project by using the list-projects CLI command.", + "nextToken": "A dynamically generated value, used for paginating results." + }, + "output": { + } + }, + "description": "The following example returns information about uploads, given a specific Device Farm project.", + "id": "to-get-information-about-uploads-1472617943090", + "title": "To get information about uploads" + } + ], + "PurchaseOffering": [ + { + "input": { + "offeringId": "D68B3C05-1BA6-4360-BC69-12345EXAMPLE", + "quantity": 1 + }, + "output": { + "offeringTransaction": { + "cost": { + "amount": 8.07, + "currencyCode": "USD" + }, + "createdOn": "1472648340", + "offeringStatus": { + "type": "PURCHASE", + "effectiveOn": "1472648340", + "offering": { + "type": "RECURRING", + "description": "Android Remote Access Unmetered Device Slot", + "id": "D68B3C05-1BA6-4360-BC69-12345EXAMPLE", + "platform": "ANDROID" + }, + "quantity": 1 + }, + "transactionId": "d30614ed-1b03-404c-9893-12345EXAMPLE" + } + }, + "comments": { + "input": { + "offeringId": "You can get the offering ID by using the list-offerings CLI command." + }, + "output": { + } + }, + "description": "The following example purchases a specific device slot offering.", + "id": "to-purchase-a-device-slot-offering-1472648146343", + "title": "To purchase a device slot offering" + } + ], + "RenewOffering": [ + { + "input": { + "offeringId": "D68B3C05-1BA6-4360-BC69-12345EXAMPLE", + "quantity": 1 + }, + "output": { + "offeringTransaction": { + "cost": { + "amount": 250, + "currencyCode": "USD" + }, + "createdOn": "1472648880", + "offeringStatus": { + "type": "RENEW", + "effectiveOn": "1472688000", + "offering": { + "type": "RECURRING", + "description": "Android Remote Access Unmetered Device Slot", + "id": "D68B3C05-1BA6-4360-BC69-12345EXAMPLE", + "platform": "ANDROID" + }, + "quantity": 1 + }, + "transactionId": "e90f1405-8c35-4561-be43-12345EXAMPLE" + } + }, + "comments": { + "input": { + "offeringId": "You can get the offering ID by using the list-offerings CLI command." + }, + "output": { + } + }, + "description": "The following example renews a specific device slot offering.", + "id": "to-renew-a-device-slot-offering-1472648899785", + "title": "To renew a device slot offering" + } + ], + "ScheduleRun": [ + { + "input": { + "name": "MyRun", + "devicePoolArn": "arn:aws:devicefarm:us-west-2:123456789101:pool:EXAMPLE-GUID-123-456", + "projectArn": "arn:aws:devicefarm:us-west-2:123456789101:project:EXAMPLE-GUID-123-456", + "test": { + "type": "APPIUM_JAVA_JUNIT", + "testPackageArn": "arn:aws:devicefarm:us-west-2:123456789101:test:EXAMPLE-GUID-123-456" + } + }, + "output": { + "run": { + } + }, + "comments": { + "input": { + "devicePoolArn": "You can get the Amazon Resource Name (ARN) of the device pool by using the list-pools CLI command.", + "projectArn": "You can get the Amazon Resource Name (ARN) of the project by using the list-projects CLI command.", + "testPackageArn": "You can get the Amazon Resource Name (ARN) of the test package by using the list-tests CLI command." + }, + "output": { + } + }, + "description": "The following example schedules a test run named MyRun.", + "id": "to-schedule-a-test-run-1472652429636", + "title": "To schedule a test run" + } + ], + "StopRun": [ + { + "input": { + "arn": "arn:aws:devicefarm:us-west-2:123456789101:run:EXAMPLE-GUID-123-456" + }, + "output": { + "run": { + } + }, + "comments": { + "input": { + "arn": "You can get the Amazon Resource Name (ARN) of the test run by using the list-runs CLI command." + }, + "output": { + } + }, + "description": "The following example stops a specific test run.", + "id": "to-stop-a-test-run-1472653770340", + "title": "To stop a test run" + } + ], + "UpdateDevicePool": [ + { + "input": { + "name": "NewName", + "arn": "arn:aws:devicefarm:us-west-2::devicepool:082d10e5-d7d7-48a5-ba5c-12345EXAMPLE", + "description": "NewDescription", + "rules": [ + { + "value": "True", + "attribute": "REMOTE_ACCESS_ENABLED", + "operator": "EQUALS" + } + ] + }, + "output": { + "devicePool": { + } + }, + "comments": { + "input": { + "arn": "You can get the Amazon Resource Name (ARN) of the device pool by using the list-pools CLI command." + }, + "output": { + "devicePool": "Note: you cannot update curated device pools." + } + }, + "description": "The following example updates the specified device pool with a new name and description. It also enables remote access of devices in the device pool.", + "id": "to-update-a-device-pool-1472653887677", + "title": "To update a device pool" + } + ], + "UpdateProject": [ + { + "input": { + "name": "NewName", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:8f75187d-101e-4625-accc-12345EXAMPLE" + }, + "output": { + "project": { + "name": "NewName", + "arn": "arn:aws:devicefarm:us-west-2:123456789101:project:8f75187d-101e-4625-accc-12345EXAMPLE", + "created": "1448400709.927" + } + }, + "comments": { + "input": { + "arn": "You can get the Amazon Resource Name (ARN) of the project by using the list-projects CLI command." + }, + "output": { + } + }, + "description": "The following example updates the specified project with a new name.", + "id": "to-update-a-device-pool-1472653887677", + "title": "To update a device pool" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/paginators-1.json new file mode 100644 index 00000000..982e07f9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/paginators-1.json @@ -0,0 +1,110 @@ +{ + "pagination": { + "ListArtifacts": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "artifacts" + }, + "ListDevicePools": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "devicePools" + }, + "ListDevices": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "devices" + }, + "ListJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "jobs" + }, + "ListProjects": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "projects" + }, + "ListRuns": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "runs" + }, + "ListSamples": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "samples" + }, + "ListSuites": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "suites" + }, + "ListTests": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "tests" + }, + "ListUniqueProblems": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "uniqueProblems" + }, + "ListUploads": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "uploads" + }, + "GetOfferingStatus": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": [ + "current", + "nextPeriod" + ] + }, + "ListOfferingTransactions": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "offeringTransactions" + }, + "ListOfferings": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "offerings" + }, + "ListDeviceInstances": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "deviceInstances" + }, + "ListInstanceProfiles": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "instanceProfiles" + }, + "ListNetworkProfiles": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "networkProfiles" + }, + "ListOfferingPromotions": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "offeringPromotions" + }, + "ListRemoteAccessSessions": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "remoteAccessSessions" + }, + "ListVPCEConfigurations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "vpceConfigurations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/service-2.json.gz new file mode 100644 index 00000000..a8ec4fa8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/devicefarm/2015-06-23/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5bdb2dd4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/paginators-1.json new file mode 100644 index 00000000..d0d58717 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/paginators-1.json @@ -0,0 +1,125 @@ +{ + "pagination": { + "DescribeResourceCollectionHealth": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": [ + "CloudFormation", + "Service", + "Tags" + ] + }, + "GetResourceCollection": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": [ + "ResourceCollection.CloudFormation.StackNames", + "ResourceCollection.Tags" + ], + "non_aggregate_keys": [ + "ResourceCollection" + ] + }, + "ListAnomaliesForInsight": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": [ + "ReactiveAnomalies", + "ProactiveAnomalies" + ] + }, + "ListEvents": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Events" + }, + "ListInsights": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": [ + "ProactiveInsights", + "ReactiveInsights" + ] + }, + "ListNotificationChannels": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Channels" + }, + "ListRecommendations": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Recommendations" + }, + "SearchInsights": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": [ + "ProactiveInsights", + "ReactiveInsights" + ] + }, + "GetCostEstimation": { + "input_token": "NextToken", + "non_aggregate_keys": [ + "Status", + "TotalCost", + "TimeRange", + "ResourceCollection" + ], + "output_token": "NextToken", + "result_key": [ + "Costs" + ] + }, + "DescribeOrganizationResourceCollectionHealth": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": [ + "CloudFormation", + "Account", + "Service", + "Tags" + ] + }, + "ListOrganizationInsights": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": [ + "ProactiveInsights", + "ReactiveInsights" + ] + }, + "SearchOrganizationInsights": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": [ + "ProactiveInsights", + "ReactiveInsights" + ] + }, + "ListAnomalousLogGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": [ + "InsightId", + "AnomalousLogGroups" + ] + }, + "ListMonitoredResources": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": [ + "MonitoredResourceIdentifiers" + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/service-2.json.gz new file mode 100644 index 00000000..2daf7868 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/devops-guru/2020-12-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..126f844e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/paginators-1.json new file mode 100644 index 00000000..dbca668f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "DescribeDirectConnectGatewayAssociations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "directConnectGatewayAssociations" + }, + "DescribeDirectConnectGatewayAttachments": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "directConnectGatewayAttachments" + }, + "DescribeDirectConnectGateways": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "directConnectGateways" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/service-2.json.gz new file mode 100644 index 00000000..9b3ac797 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/directconnect/2012-10-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1e009851 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/paginators-1.json new file mode 100644 index 00000000..5567a777 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/paginators-1.json @@ -0,0 +1,46 @@ +{ + "pagination": { + "DescribeAgents": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "agentsInfo" + }, + "DescribeContinuousExports": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "descriptions" + }, + "DescribeExportConfigurations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "exportsInfo" + }, + "DescribeExportTasks": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "exportsInfo" + }, + "DescribeTags": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "tags" + }, + "ListConfigurations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "configurations" + }, + "DescribeImportTasks": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "tasks" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/service-2.json.gz new file mode 100644 index 00000000..307de5ed Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/discovery/2015-11-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ba3706ec Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/service-2.json.gz new file mode 100644 index 00000000..0aa0978d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dlm/2018-01-12/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3673e0a0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/examples-1.json new file mode 100644 index 00000000..f9e8c4e5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/examples-1.json @@ -0,0 +1,1074 @@ +{ + "version": "1.0", + "examples": { + "AddTagsToResource": [ + { + "input": { + "ResourceArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ASXWXJZLNWNT5HTWCGV2BUJQ7E", + "Tags": [ + { + "Key": "Acount", + "Value": "1633456" + } + ] + }, + "output": { + }, + "comments": { + "input": { + "ResourceArn": "Required. Use the ARN of the resource you want to tag.", + "Tags": "Required. Use the Key/Value pair format." + }, + "output": { + } + }, + "description": "Adds metadata tags to an AWS DMS resource, including replication instance, endpoint, security group, and migration task. These tags can also be used with cost allocation reporting to track cost associated with AWS DMS resources, or used in a Condition statement in an IAM policy for AWS DMS.", + "id": "add-tags-to-resource-1481744141435", + "title": "Add tags to resource" + } + ], + "CreateEndpoint": [ + { + "input": { + "CertificateArn": "", + "DatabaseName": "testdb", + "EndpointIdentifier": "test-endpoint-1", + "EndpointType": "source", + "EngineName": "mysql", + "ExtraConnectionAttributes": "", + "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/4c1731d6-5435-ed4d-be13-d53411a7cfbd", + "Password": "pasword", + "Port": 3306, + "ServerName": "mydb.cx1llnox7iyx.us-west-2.rds.amazonaws.com", + "SslMode": "require", + "Tags": [ + { + "Key": "Acount", + "Value": "143327655" + } + ], + "Username": "username" + }, + "output": { + "Endpoint": { + "EndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:RAAR3R22XSH46S3PWLC3NJAWKM", + "EndpointIdentifier": "test-endpoint-1", + "EndpointType": "source", + "EngineName": "mysql", + "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/4c1731d6-5435-ed4d-be13-d53411a7cfbd", + "Port": 3306, + "ServerName": "mydb.cx1llnox7iyx.us-west-2.rds.amazonaws.com", + "Status": "active", + "Username": "username" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates an endpoint using the provided settings.", + "id": "create-endpoint-1481746254348", + "title": "Create endpoint" + } + ], + "CreateReplicationInstance": [ + { + "input": { + "AllocatedStorage": 123, + "AutoMinorVersionUpgrade": true, + "AvailabilityZone": "", + "EngineVersion": "", + "KmsKeyId": "", + "MultiAZ": true, + "PreferredMaintenanceWindow": "", + "PubliclyAccessible": true, + "ReplicationInstanceClass": "", + "ReplicationInstanceIdentifier": "", + "ReplicationSubnetGroupIdentifier": "", + "Tags": [ + { + "Key": "string", + "Value": "string" + } + ], + "VpcSecurityGroupIds": [ + + ] + }, + "output": { + "ReplicationInstance": { + "AllocatedStorage": 5, + "AutoMinorVersionUpgrade": true, + "EngineVersion": "1.5.0", + "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/4c1731d6-5435-ed4d-be13-d53411a7cfbd", + "PendingModifiedValues": { + }, + "PreferredMaintenanceWindow": "sun:06:00-sun:14:00", + "PubliclyAccessible": true, + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "ReplicationInstanceClass": "dms.t2.micro", + "ReplicationInstanceIdentifier": "test-rep-1", + "ReplicationInstanceStatus": "creating", + "ReplicationSubnetGroup": { + "ReplicationSubnetGroupDescription": "default", + "ReplicationSubnetGroupIdentifier": "default", + "SubnetGroupStatus": "Complete", + "Subnets": [ + { + "SubnetAvailabilityZone": { + "Name": "us-east-1d" + }, + "SubnetIdentifier": "subnet-f6dd91af", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1b" + }, + "SubnetIdentifier": "subnet-3605751d", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1c" + }, + "SubnetIdentifier": "subnet-c2daefb5", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1e" + }, + "SubnetIdentifier": "subnet-85e90cb8", + "SubnetStatus": "Active" + } + ], + "VpcId": "vpc-6741a603" + } + } + }, + "comments": { + "output": { + } + }, + "description": "Creates the replication instance using the specified parameters.", + "id": "create-replication-instance-1481746705295", + "title": "Create replication instance" + } + ], + "CreateReplicationSubnetGroup": [ + { + "input": { + "ReplicationSubnetGroupDescription": "US West subnet group", + "ReplicationSubnetGroupIdentifier": "us-west-2ab-vpc-215ds366", + "SubnetIds": [ + "subnet-e145356n", + "subnet-58f79200" + ], + "Tags": [ + { + "Key": "Acount", + "Value": "145235" + } + ] + }, + "output": { + "ReplicationSubnetGroup": { + } + }, + "comments": { + "output": { + } + }, + "description": "Creates a replication subnet group given a list of the subnet IDs in a VPC.", + "id": "create-replication-subnet-group-1481747297930", + "title": "Create replication subnet group" + } + ], + "CreateReplicationTask": [ + { + "input": { + "CdcStartTime": "2016-12-14T18:25:43Z", + "MigrationType": "full-load", + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "ReplicationTaskIdentifier": "task1", + "ReplicationTaskSettings": "", + "SourceEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ZW5UAN6P4E77EC7YWHK4RZZ3BE", + "TableMappings": "file://mappingfile.json", + "Tags": [ + { + "Key": "Acount", + "Value": "24352226" + } + ], + "TargetEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ASXWXJZLNWNT5HTWCGV2BUJQ7E" + }, + "output": { + "ReplicationTask": { + "MigrationType": "full-load", + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "ReplicationTaskArn": "arn:aws:dms:us-east-1:123456789012:task:OEAMB3NXSTZ6LFYZFEPPBBXPYM", + "ReplicationTaskCreationDate": "2016-12-14T18:25:43Z", + "ReplicationTaskIdentifier": "task1", + "ReplicationTaskSettings": "{\"TargetMetadata\":{\"TargetSchema\":\"\",\"SupportLobs\":true,\"FullLobMode\":true,\"LobChunkSize\":64,\"LimitedSizeLobMode\":false,\"LobMaxSize\":0},\"FullLoadSettings\":{\"FullLoadEnabled\":true,\"ApplyChangesEnabled\":false,\"TargetTablePrepMode\":\"DROP_AND_CREATE\",\"CreatePkAfterFullLoad\":false,\"StopTaskCachedChangesApplied\":false,\"StopTaskCachedChangesNotApplied\":false,\"ResumeEnabled\":false,\"ResumeMinTableSize\":100000,\"ResumeOnlyClusteredPKTables\":true,\"MaxFullLoadSubTasks\":8,\"TransactionConsistencyTimeout\":600,\"CommitRate\":10000},\"Logging\":{\"EnableLogging\":false}}", + "SourceEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ZW5UAN6P4E77EC7YWHK4RZZ3BE", + "Status": "creating", + "TableMappings": "file://mappingfile.json", + "TargetEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ASXWXJZLNWNT5HTWCGV2BUJQ7E" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a replication task using the specified parameters.", + "id": "create-replication-task-1481747646288", + "title": "Create replication task" + } + ], + "DeleteCertificate": [ + { + "input": { + "CertificateArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUSM457DE6XFJCJQ" + }, + "output": { + "Certificate": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the specified certificate.", + "id": "delete-certificate-1481751957981", + "title": "Delete Certificate" + } + ], + "DeleteConnection": [ + { + "input": { + "EndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:RAAR3R22XSH46S3PWLC3NJAWKM", + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ" + }, + "output": { + "Connection": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the connection between the replication instance and the endpoint.", + "id": "delete-connection-1481751957981", + "title": "Delete Connection" + } + ], + "DeleteEndpoint": [ + { + "input": { + "EndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:RAAR3R22XSH46S3PWLC3NJAWKM" + }, + "output": { + "Endpoint": { + "EndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:RAAR3R22XSH46S3PWLC3NJAWKM", + "EndpointIdentifier": "test-endpoint-1", + "EndpointType": "source", + "EngineName": "mysql", + "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/4c1731d6-5435-ed4d-be13-d53411a7cfbd", + "Port": 3306, + "ServerName": "mydb.cx1llnox7iyx.us-west-2.rds.amazonaws.com", + "Status": "active", + "Username": "username" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the specified endpoint. All tasks associated with the endpoint must be deleted before you can delete the endpoint.\n", + "id": "delete-endpoint-1481752425530", + "title": "Delete Endpoint" + } + ], + "DeleteReplicationInstance": [ + { + "input": { + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ" + }, + "output": { + "ReplicationInstance": { + "AllocatedStorage": 5, + "AutoMinorVersionUpgrade": true, + "EngineVersion": "1.5.0", + "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/4c1731d6-5435-ed4d-be13-d53411a7cfbd", + "PendingModifiedValues": { + }, + "PreferredMaintenanceWindow": "sun:06:00-sun:14:00", + "PubliclyAccessible": true, + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "ReplicationInstanceClass": "dms.t2.micro", + "ReplicationInstanceIdentifier": "test-rep-1", + "ReplicationInstanceStatus": "creating", + "ReplicationSubnetGroup": { + "ReplicationSubnetGroupDescription": "default", + "ReplicationSubnetGroupIdentifier": "default", + "SubnetGroupStatus": "Complete", + "Subnets": [ + { + "SubnetAvailabilityZone": { + "Name": "us-east-1d" + }, + "SubnetIdentifier": "subnet-f6dd91af", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1b" + }, + "SubnetIdentifier": "subnet-3605751d", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1c" + }, + "SubnetIdentifier": "subnet-c2daefb5", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1e" + }, + "SubnetIdentifier": "subnet-85e90cb8", + "SubnetStatus": "Active" + } + ], + "VpcId": "vpc-6741a603" + } + } + }, + "comments": { + "output": { + } + }, + "description": "Deletes the specified replication instance. You must delete any migration tasks that are associated with the replication instance before you can delete it.\n\n", + "id": "delete-replication-instance-1481752552839", + "title": "Delete Replication Instance" + } + ], + "DeleteReplicationSubnetGroup": [ + { + "input": { + "ReplicationSubnetGroupIdentifier": "us-west-2ab-vpc-215ds366" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes a replication subnet group.", + "id": "delete-replication-subnet-group-1481752728597", + "title": "Delete Replication Subnet Group" + } + ], + "DeleteReplicationTask": [ + { + "input": { + "ReplicationTaskArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ" + }, + "output": { + "ReplicationTask": { + "MigrationType": "full-load", + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "ReplicationTaskArn": "arn:aws:dms:us-east-1:123456789012:task:OEAMB3NXSTZ6LFYZFEPPBBXPYM", + "ReplicationTaskCreationDate": "2016-12-14T18:25:43Z", + "ReplicationTaskIdentifier": "task1", + "ReplicationTaskSettings": "{\"TargetMetadata\":{\"TargetSchema\":\"\",\"SupportLobs\":true,\"FullLobMode\":true,\"LobChunkSize\":64,\"LimitedSizeLobMode\":false,\"LobMaxSize\":0},\"FullLoadSettings\":{\"FullLoadEnabled\":true,\"ApplyChangesEnabled\":false,\"TargetTablePrepMode\":\"DROP_AND_CREATE\",\"CreatePkAfterFullLoad\":false,\"StopTaskCachedChangesApplied\":false,\"StopTaskCachedChangesNotApplied\":false,\"ResumeEnabled\":false,\"ResumeMinTableSize\":100000,\"ResumeOnlyClusteredPKTables\":true,\"MaxFullLoadSubTasks\":8,\"TransactionConsistencyTimeout\":600,\"CommitRate\":10000},\"Logging\":{\"EnableLogging\":false}}", + "SourceEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ZW5UAN6P4E77EC7YWHK4RZZ3BE", + "Status": "creating", + "TableMappings": "file://mappingfile.json", + "TargetEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ASXWXJZLNWNT5HTWCGV2BUJQ7E" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the specified replication task.", + "id": "delete-replication-task-1481752903506", + "title": "Delete Replication Task" + } + ], + "DescribeAccountAttributes": [ + { + "input": { + }, + "output": { + "AccountQuotas": [ + { + "AccountQuotaName": "ReplicationInstances", + "Max": 20, + "Used": 0 + }, + { + "AccountQuotaName": "AllocatedStorage", + "Max": 20, + "Used": 0 + }, + { + "AccountQuotaName": "Endpoints", + "Max": 20, + "Used": 0 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists all of the AWS DMS attributes for a customer account. The attributes include AWS DMS quotas for the account, such as the number of replication instances allowed. The description for a quota includes the quota name, current usage toward that quota, and the quota's maximum value. This operation does not take any parameters.", + "id": "describe-acount-attributes-1481753085663", + "title": "Describe acount attributes" + } + ], + "DescribeCertificates": [ + { + "input": { + "Filters": [ + { + "Name": "string", + "Values": [ + "string", + "string" + ] + } + ], + "Marker": "", + "MaxRecords": 123 + }, + "output": { + "Certificates": [ + + ], + "Marker": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Provides a description of the certificate.", + "id": "describe-certificates-1481753186244", + "title": "Describe certificates" + } + ], + "DescribeConnections": [ + { + "input": { + "Filters": [ + { + "Name": "string", + "Values": [ + "string", + "string" + ] + } + ], + "Marker": "", + "MaxRecords": 123 + }, + "output": { + "Connections": [ + { + "EndpointArn": "arn:aws:dms:us-east-arn:aws:dms:us-east-1:123456789012:endpoint:ZW5UAN6P4E77EC7YWHK4RZZ3BE", + "EndpointIdentifier": "testsrc1", + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "ReplicationInstanceIdentifier": "test", + "Status": "successful" + } + ], + "Marker": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes the status of the connections that have been made between the replication instance and an endpoint. Connections are created when you test an endpoint.", + "id": "describe-connections-1481754477953", + "title": "Describe connections" + } + ], + "DescribeEndpointTypes": [ + { + "input": { + "Filters": [ + { + "Name": "string", + "Values": [ + "string", + "string" + ] + } + ], + "Marker": "", + "MaxRecords": 123 + }, + "output": { + "Marker": "", + "SupportedEndpointTypes": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about the type of endpoints available.", + "id": "describe-endpoint-types-1481754742591", + "title": "Describe endpoint types" + } + ], + "DescribeEndpoints": [ + { + "input": { + "Filters": [ + { + "Name": "string", + "Values": [ + "string", + "string" + ] + } + ], + "Marker": "", + "MaxRecords": 123 + }, + "output": { + "Endpoints": [ + + ], + "Marker": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about the endpoints for your account in the current region.", + "id": "describe-endpoints-1481754926060", + "title": "Describe endpoints" + } + ], + "DescribeOrderableReplicationInstances": [ + { + "input": { + "Marker": "", + "MaxRecords": 123 + }, + "output": { + "Marker": "", + "OrderableReplicationInstances": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about the replication instance types that can be created in the specified region.", + "id": "describe-orderable-replication-instances-1481755123669", + "title": "Describe orderable replication instances" + } + ], + "DescribeRefreshSchemasStatus": [ + { + "input": { + "EndpointArn": "" + }, + "output": { + "RefreshSchemasStatus": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns the status of the refresh-schemas operation.", + "id": "describe-refresh-schema-status-1481755303497", + "title": "Describe refresh schema status" + } + ], + "DescribeReplicationInstances": [ + { + "input": { + "Filters": [ + { + "Name": "string", + "Values": [ + "string", + "string" + ] + } + ], + "Marker": "", + "MaxRecords": 123 + }, + "output": { + "Marker": "", + "ReplicationInstances": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns the status of the refresh-schemas operation.", + "id": "describe-replication-instances-1481755443952", + "title": "Describe replication instances" + } + ], + "DescribeReplicationSubnetGroups": [ + { + "input": { + "Filters": [ + { + "Name": "string", + "Values": [ + "string", + "string" + ] + } + ], + "Marker": "", + "MaxRecords": 123 + }, + "output": { + "Marker": "", + "ReplicationSubnetGroups": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about the replication subnet groups.", + "id": "describe-replication-subnet-groups-1481755621284", + "title": "Describe replication subnet groups" + } + ], + "DescribeReplicationTasks": [ + { + "input": { + "Filters": [ + { + "Name": "string", + "Values": [ + "string", + "string" + ] + } + ], + "Marker": "", + "MaxRecords": 123 + }, + "output": { + "Marker": "", + "ReplicationTasks": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about replication tasks for your account in the current region.", + "id": "describe-replication-tasks-1481755777563", + "title": "Describe replication tasks" + } + ], + "DescribeSchemas": [ + { + "input": { + "EndpointArn": "", + "Marker": "", + "MaxRecords": 123 + }, + "output": { + "Marker": "", + "Schemas": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about the schema for the specified endpoint.", + "id": "describe-schemas-1481755933924", + "title": "Describe schemas" + } + ], + "DescribeTableStatistics": [ + { + "input": { + "Marker": "", + "MaxRecords": 123, + "ReplicationTaskArn": "" + }, + "output": { + "Marker": "", + "ReplicationTaskArn": "", + "TableStatistics": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns table statistics on the database migration task, including table name, rows inserted, rows updated, and rows deleted.", + "id": "describe-table-statistics-1481756071890", + "title": "Describe table statistics" + } + ], + "ImportCertificate": [ + { + "input": { + "CertificateIdentifier": "", + "CertificatePem": "" + }, + "output": { + "Certificate": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Uploads the specified certificate.", + "id": "import-certificate-1481756197206", + "title": "Import certificate" + } + ], + "ListTagsForResource": [ + { + "input": { + "ResourceArn": "" + }, + "output": { + "TagList": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists all tags for an AWS DMS resource.", + "id": "list-tags-for-resource-1481761095501", + "title": "List tags for resource" + } + ], + "ModifyEndpoint": [ + { + "input": { + "CertificateArn": "", + "DatabaseName": "", + "EndpointArn": "", + "EndpointIdentifier": "", + "EndpointType": "source", + "EngineName": "", + "ExtraConnectionAttributes": "", + "Password": "", + "Port": 123, + "ServerName": "", + "SslMode": "require", + "Username": "" + }, + "output": { + "Endpoint": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Modifies the specified endpoint.", + "id": "modify-endpoint-1481761649937", + "title": "Modify endpoint" + } + ], + "ModifyReplicationInstance": [ + { + "input": { + "AllocatedStorage": 123, + "AllowMajorVersionUpgrade": true, + "ApplyImmediately": true, + "AutoMinorVersionUpgrade": true, + "EngineVersion": "1.5.0", + "MultiAZ": true, + "PreferredMaintenanceWindow": "sun:06:00-sun:14:00", + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "ReplicationInstanceClass": "dms.t2.micro", + "ReplicationInstanceIdentifier": "test-rep-1", + "VpcSecurityGroupIds": [ + + ] + }, + "output": { + "ReplicationInstance": { + "AllocatedStorage": 5, + "AutoMinorVersionUpgrade": true, + "EngineVersion": "1.5.0", + "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/4c1731d6-5435-ed4d-be13-d53411a7cfbd", + "PendingModifiedValues": { + }, + "PreferredMaintenanceWindow": "sun:06:00-sun:14:00", + "PubliclyAccessible": true, + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "ReplicationInstanceClass": "dms.t2.micro", + "ReplicationInstanceIdentifier": "test-rep-1", + "ReplicationInstanceStatus": "available", + "ReplicationSubnetGroup": { + "ReplicationSubnetGroupDescription": "default", + "ReplicationSubnetGroupIdentifier": "default", + "SubnetGroupStatus": "Complete", + "Subnets": [ + { + "SubnetAvailabilityZone": { + "Name": "us-east-1d" + }, + "SubnetIdentifier": "subnet-f6dd91af", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1b" + }, + "SubnetIdentifier": "subnet-3605751d", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1c" + }, + "SubnetIdentifier": "subnet-c2daefb5", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1e" + }, + "SubnetIdentifier": "subnet-85e90cb8", + "SubnetStatus": "Active" + } + ], + "VpcId": "vpc-6741a603" + } + } + }, + "comments": { + "output": { + } + }, + "description": "Modifies the replication instance to apply new settings. You can change one or more parameters by specifying these parameters and the new values in the request. Some settings are applied during the maintenance window.", + "id": "modify-replication-instance-1481761784746", + "title": "Modify replication instance" + } + ], + "ModifyReplicationSubnetGroup": [ + { + "input": { + "ReplicationSubnetGroupDescription": "", + "ReplicationSubnetGroupIdentifier": "", + "SubnetIds": [ + + ] + }, + "output": { + "ReplicationSubnetGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Modifies the settings for the specified replication subnet group.", + "id": "modify-replication-subnet-group-1481762275392", + "title": "Modify replication subnet group" + } + ], + "RefreshSchemas": [ + { + "input": { + "EndpointArn": "", + "ReplicationInstanceArn": "" + }, + "output": { + "RefreshSchemasStatus": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Populates the schema for the specified endpoint. This is an asynchronous operation and can take several minutes. You can check the status of this operation by calling the describe-refresh-schemas-status operation.", + "id": "refresh-schema-1481762399111", + "title": "Refresh schema" + } + ], + "RemoveTagsFromResource": [ + { + "input": { + "ResourceArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ASXWXJZLNWNT5HTWCGV2BUJQ7E", + "TagKeys": [ + + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Removes metadata tags from an AWS DMS resource.", + "id": "remove-tags-from-resource-1481762571330", + "title": "Remove tags from resource" + } + ], + "StartReplicationTask": [ + { + "input": { + "CdcStartTime": "2016-12-14T13:33:20Z", + "ReplicationTaskArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "StartReplicationTaskType": "start-replication" + }, + "output": { + "ReplicationTask": { + "MigrationType": "full-load", + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "ReplicationTaskArn": "arn:aws:dms:us-east-1:123456789012:task:OEAMB3NXSTZ6LFYZFEPPBBXPYM", + "ReplicationTaskCreationDate": "2016-12-14T18:25:43Z", + "ReplicationTaskIdentifier": "task1", + "ReplicationTaskSettings": "{\"TargetMetadata\":{\"TargetSchema\":\"\",\"SupportLobs\":true,\"FullLobMode\":true,\"LobChunkSize\":64,\"LimitedSizeLobMode\":false,\"LobMaxSize\":0},\"FullLoadSettings\":{\"FullLoadEnabled\":true,\"ApplyChangesEnabled\":false,\"TargetTablePrepMode\":\"DROP_AND_CREATE\",\"CreatePkAfterFullLoad\":false,\"StopTaskCachedChangesApplied\":false,\"StopTaskCachedChangesNotApplied\":false,\"ResumeEnabled\":false,\"ResumeMinTableSize\":100000,\"ResumeOnlyClusteredPKTables\":true,\"MaxFullLoadSubTasks\":8,\"TransactionConsistencyTimeout\":600,\"CommitRate\":10000},\"Logging\":{\"EnableLogging\":false}}", + "SourceEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ZW5UAN6P4E77EC7YWHK4RZZ3BE", + "Status": "creating", + "TableMappings": "file://mappingfile.json", + "TargetEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ASXWXJZLNWNT5HTWCGV2BUJQ7E" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Starts the replication task.", + "id": "start-replication-task-1481762706778", + "title": "Start replication task" + } + ], + "StopReplicationTask": [ + { + "input": { + "ReplicationTaskArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ASXWXJZLNWNT5HTWCGV2BUJQ7E" + }, + "output": { + "ReplicationTask": { + "MigrationType": "full-load", + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ", + "ReplicationTaskArn": "arn:aws:dms:us-east-1:123456789012:task:OEAMB3NXSTZ6LFYZFEPPBBXPYM", + "ReplicationTaskCreationDate": "2016-12-14T18:25:43Z", + "ReplicationTaskIdentifier": "task1", + "ReplicationTaskSettings": "{\"TargetMetadata\":{\"TargetSchema\":\"\",\"SupportLobs\":true,\"FullLobMode\":true,\"LobChunkSize\":64,\"LimitedSizeLobMode\":false,\"LobMaxSize\":0},\"FullLoadSettings\":{\"FullLoadEnabled\":true,\"ApplyChangesEnabled\":false,\"TargetTablePrepMode\":\"DROP_AND_CREATE\",\"CreatePkAfterFullLoad\":false,\"StopTaskCachedChangesApplied\":false,\"StopTaskCachedChangesNotApplied\":false,\"ResumeEnabled\":false,\"ResumeMinTableSize\":100000,\"ResumeOnlyClusteredPKTables\":true,\"MaxFullLoadSubTasks\":8,\"TransactionConsistencyTimeout\":600,\"CommitRate\":10000},\"Logging\":{\"EnableLogging\":false}}", + "SourceEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ZW5UAN6P4E77EC7YWHK4RZZ3BE", + "Status": "creating", + "TableMappings": "file://mappingfile.json", + "TargetEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:ASXWXJZLNWNT5HTWCGV2BUJQ7E" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Stops the replication task.", + "id": "stop-replication-task-1481762924947", + "title": "Stop replication task" + } + ], + "TestConnection": [ + { + "input": { + "EndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:RAAR3R22XSH46S3PWLC3NJAWKM", + "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:6UTDJGBOUS3VI3SUWA66XFJCJQ" + }, + "output": { + "Connection": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Tests the connection between the replication instance and the endpoint.", + "id": "test-conection-1481763017636", + "title": "Test conection" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/paginators-1.json new file mode 100644 index 00000000..be68c9ea --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/paginators-1.json @@ -0,0 +1,82 @@ +{ + "pagination": { + "DescribeSchemas": { + "result_key": "Schemas", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeCertificates": { + "result_key": "Certificates", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeEndpoints": { + "result_key": "Endpoints", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeEventSubscriptions": { + "result_key": "EventSubscriptionsList", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeEndpointTypes": { + "result_key": "SupportedEndpointTypes", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeReplicationInstances": { + "result_key": "ReplicationInstances", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeTableStatistics": { + "result_key": "TableStatistics", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeConnections": { + "result_key": "Connections", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeReplicationTaskAssessmentResults": { + "result_key": "ReplicationTaskAssessmentResults", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeEvents": { + "result_key": "Events", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeOrderableReplicationInstances": { + "result_key": "OrderableReplicationInstances", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeReplicationSubnetGroups": { + "result_key": "ReplicationSubnetGroups", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + }, + "DescribeReplicationTasks": { + "result_key": "ReplicationTasks", + "output_token": "Marker", + "input_token": "Marker", + "limit_key": "MaxRecords" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/service-2.json.gz new file mode 100644 index 00000000..aa23d779 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/waiters-2.json new file mode 100644 index 00000000..73fba510 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dms/2016-01-01/waiters-2.json @@ -0,0 +1,330 @@ +{ + "version":2, + "waiters":{ + "TestConnectionSucceeds":{ + "acceptors":[ + { + "argument":"Connections[].Status", + "expected":"successful", + "matcher":"pathAll", + "state":"success" + }, + { + "argument":"Connections[].Status", + "expected":"failed", + "matcher":"pathAny", + "state":"failure" + } + ], + "delay":5, + "description":"Wait until testing connection succeeds.", + "maxAttempts":60, + "operation":"DescribeConnections" + }, + "EndpointDeleted":{ + "acceptors":[ + { + "expected":"ResourceNotFoundFault", + "matcher":"error", + "state":"success" + }, + { + "argument":"Endpoints[].Status", + "expected":"active", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"Endpoints[].Status", + "expected":"creating", + "matcher":"pathAny", + "state":"failure" + } + ], + "delay":5, + "description":"Wait until testing endpoint is deleted.", + "maxAttempts":60, + "operation":"DescribeEndpoints" + }, + "ReplicationInstanceAvailable":{ + "acceptors":[ + { + "argument":"ReplicationInstances[].ReplicationInstanceStatus", + "expected":"available", + "matcher":"pathAll", + "state":"success" + }, + { + "argument":"ReplicationInstances[].ReplicationInstanceStatus", + "expected":"deleting", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationInstances[].ReplicationInstanceStatus", + "expected":"incompatible-credentials", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationInstances[].ReplicationInstanceStatus", + "expected":"incompatible-network", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationInstances[].ReplicationInstanceStatus", + "expected":"inaccessible-encryption-credentials", + "matcher":"pathAny", + "state":"failure" + } + ], + "delay":60, + "description":"Wait until DMS replication instance is available.", + "maxAttempts":60, + "operation":"DescribeReplicationInstances" + }, + "ReplicationInstanceDeleted":{ + "acceptors":[ + { + "argument":"ReplicationInstances[].ReplicationInstanceStatus", + "expected":"available", + "matcher":"pathAny", + "state":"failure" + }, + { + "expected":"ResourceNotFoundFault", + "matcher":"error", + "state":"success" + } + ], + "delay":15, + "description":"Wait until DMS replication instance is deleted.", + "maxAttempts":60, + "operation":"DescribeReplicationInstances" + }, + "ReplicationTaskReady":{ + "acceptors":[ + { + "argument":"ReplicationTasks[].Status", + "expected":"ready", + "matcher":"pathAll", + "state":"success" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"starting", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"running", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"stopping", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"stopped", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"failed", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"modifying", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"testing", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"deleting", + "matcher":"pathAny", + "state":"failure" + } + ], + "delay":15, + "description":"Wait until DMS replication task is ready.", + "maxAttempts":60, + "operation":"DescribeReplicationTasks" + }, + "ReplicationTaskStopped":{ + "acceptors":[ + { + "argument":"ReplicationTasks[].Status", + "expected":"stopped", + "matcher":"pathAll", + "state":"success" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"ready", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"creating", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"starting", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"failed", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"modifying", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"testing", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"deleting", + "matcher":"pathAny", + "state":"failure" + } + ], + "delay":15, + "description":"Wait until DMS replication task is stopped.", + "maxAttempts":60, + "operation":"DescribeReplicationTasks" + }, + "ReplicationTaskRunning":{ + "acceptors":[ + { + "argument":"ReplicationTasks[].Status", + "expected":"running", + "matcher":"pathAll", + "state":"success" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"ready", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"creating", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"stopping", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"stopped", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"failed", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"modifying", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"testing", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"deleting", + "matcher":"pathAny", + "state":"failure" + } + ], + "delay":15, + "description":"Wait until DMS replication task is running.", + "maxAttempts":60, + "operation":"DescribeReplicationTasks" + }, + "ReplicationTaskDeleted":{ + "acceptors":[ + { + "argument":"ReplicationTasks[].Status", + "expected":"ready", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"creating", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"stopped", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"running", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"ReplicationTasks[].Status", + "expected":"failed", + "matcher":"pathAny", + "state":"failure" + }, + { + "expected":"ResourceNotFoundFault", + "matcher":"error", + "state":"success" + } + ], + "delay":15, + "description":"Wait until DMS replication task is deleted.", + "maxAttempts":60, + "operation":"DescribeReplicationTasks" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/docdb-elastic/2022-11-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb-elastic/2022-11-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..daa638da Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb-elastic/2022-11-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/docdb-elastic/2022-11-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb-elastic/2022-11-28/paginators-1.json new file mode 100644 index 00000000..db11a76b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb-elastic/2022-11-28/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListClusterSnapshots": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "snapshots" + }, + "ListClusters": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "clusters" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/docdb-elastic/2022-11-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb-elastic/2022-11-28/service-2.json.gz new file mode 100644 index 00000000..d0a1c7e0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb-elastic/2022-11-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e7f49c5d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/paginators-1.json new file mode 100644 index 00000000..cc1a2f17 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/paginators-1.json @@ -0,0 +1,82 @@ +{ + "pagination": { + "DescribeCertificates": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "Certificates" + }, + "DescribeDBClusterParameterGroups": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBClusterParameterGroups" + }, + "DescribeDBClusterParameters": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "Parameters" + }, + "DescribeDBClusterSnapshots": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBClusterSnapshots" + }, + "DescribeDBClusters": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBClusters" + }, + "DescribeDBEngineVersions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBEngineVersions" + }, + "DescribeDBInstances": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBInstances" + }, + "DescribeDBSubnetGroups": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBSubnetGroups" + }, + "DescribeEvents": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "Events" + }, + "DescribeOrderableDBInstanceOptions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "OrderableDBInstanceOptions" + }, + "DescribePendingMaintenanceActions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "PendingMaintenanceActions" + }, + "DescribeEventSubscriptions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "EventSubscriptionsList" + }, + "DescribeGlobalClusters": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "GlobalClusters" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/service-2.json.gz new file mode 100644 index 00000000..e94a7038 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/service-2.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/service-2.sdk-extras.json new file mode 100644 index 00000000..85e8a104 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/service-2.sdk-extras.json @@ -0,0 +1,23 @@ + { + "version": 1.0, + "merge": { + "shapes": { + "CopyDBClusterSnapshotMessage": { + "members": { + "SourceRegion": { + "shape": "String", + "documentation": "

The ID of the region that contains the snapshot to be copied.

" + } + } + }, + "CreateDBClusterMessage": { + "members": { + "SourceRegion": { + "shape": "String", + "documentation": "

The ID of the region that contains the source for the db cluster.

" + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/waiters-2.json new file mode 100644 index 00000000..e75f03b2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/docdb/2014-10-31/waiters-2.json @@ -0,0 +1,90 @@ +{ + "version": 2, + "waiters": { + "DBInstanceAvailable": { + "delay": 30, + "operation": "DescribeDBInstances", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "incompatible-restore", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "incompatible-parameters", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + } + ] + }, + "DBInstanceDeleted": { + "delay": 30, + "operation": "DescribeDBInstances", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "DBInstanceNotFound", + "matcher": "error", + "state": "success" + }, + { + "expected": "creating", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "modifying", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "resetting-master-credentials", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..25b69a06 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/paginators-1.json new file mode 100644 index 00000000..cfe134c7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/paginators-1.json @@ -0,0 +1,70 @@ +{ + "pagination": { + "DescribeJobLogItems": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeRecoveryInstances": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeRecoverySnapshots": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeReplicationConfigurationTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeSourceServers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListExtensibleSourceServers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListStagingAccounts": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "accounts" + }, + "DescribeLaunchConfigurationTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeSourceNetworks": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListLaunchActions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/service-2.json.gz new file mode 100644 index 00000000..5bb1f40c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/drs/2020-02-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a611451e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/paginators-1.json new file mode 100644 index 00000000..fd7f0b9e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/paginators-1.json @@ -0,0 +1,86 @@ +{ + "pagination": { + "DescribeDomainControllers": { + "result_key": "DomainControllers", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "Limit" + }, + "DescribeDirectories": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "DirectoryDescriptions" + }, + "DescribeSharedDirectories": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "SharedDirectories" + }, + "DescribeSnapshots": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Snapshots" + }, + "DescribeTrusts": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Trusts" + }, + "ListIpRoutes": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "IpRoutesInfo" + }, + "ListLogSubscriptions": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "LogSubscriptions" + }, + "ListSchemaExtensions": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "SchemaExtensionsInfo" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Tags" + }, + "DescribeClientAuthenticationSettings": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "ClientAuthenticationSettingsInfo" + }, + "DescribeLDAPSSettings": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "LDAPSSettingsInfo" + }, + "DescribeRegions": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "RegionsDescription" + }, + "DescribeUpdateDirectory": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "UpdateActivities" + }, + "ListCertificates": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "CertificatesInfo" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/service-2.json.gz new file mode 100644 index 00000000..24cc5fba Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ds/2015-04-16/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2011-12-05/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2011-12-05/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..abccbcb0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2011-12-05/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2011-12-05/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2011-12-05/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2011-12-05/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5c7e752e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/examples-1.json new file mode 100644 index 00000000..bbc763c9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/examples-1.json @@ -0,0 +1,631 @@ +{ + "version": "1.0", + "examples": { + "BatchGetItem": [ + { + "input": { + "RequestItems": { + "Music": { + "Keys": [ + { + "Artist": { + "S": "No One You Know" + }, + "SongTitle": { + "S": "Call Me Today" + } + }, + { + "Artist": { + "S": "Acme Band" + }, + "SongTitle": { + "S": "Happy Day" + } + }, + { + "Artist": { + "S": "No One You Know" + }, + "SongTitle": { + "S": "Scared of My Shadow" + } + } + ], + "ProjectionExpression": "AlbumTitle" + } + } + }, + "output": { + "Responses": { + "Music": [ + { + "AlbumTitle": { + "S": "Somewhat Famous" + } + }, + { + "AlbumTitle": { + "S": "Blue Sky Blues" + } + }, + { + "AlbumTitle": { + "S": "Louder Than Ever" + } + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example reads multiple items from the Music table using a batch of three GetItem requests. Only the AlbumTitle attribute is returned.", + "id": "to-retrieve-multiple-items-from-a-table-1476118438992", + "title": "To retrieve multiple items from a table" + } + ], + "BatchWriteItem": [ + { + "input": { + "RequestItems": { + "Music": [ + { + "PutRequest": { + "Item": { + "AlbumTitle": { + "S": "Somewhat Famous" + }, + "Artist": { + "S": "No One You Know" + }, + "SongTitle": { + "S": "Call Me Today" + } + } + } + }, + { + "PutRequest": { + "Item": { + "AlbumTitle": { + "S": "Songs About Life" + }, + "Artist": { + "S": "Acme Band" + }, + "SongTitle": { + "S": "Happy Day" + } + } + } + }, + { + "PutRequest": { + "Item": { + "AlbumTitle": { + "S": "Blue Sky Blues" + }, + "Artist": { + "S": "No One You Know" + }, + "SongTitle": { + "S": "Scared of My Shadow" + } + } + } + } + ] + } + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds three new items to the Music table using a batch of three PutItem requests.", + "id": "to-add-multiple-items-to-a-table-1476118519747", + "title": "To add multiple items to a table" + } + ], + "CreateTable": [ + { + "input": { + "AttributeDefinitions": [ + { + "AttributeName": "Artist", + "AttributeType": "S" + }, + { + "AttributeName": "SongTitle", + "AttributeType": "S" + } + ], + "KeySchema": [ + { + "AttributeName": "Artist", + "KeyType": "HASH" + }, + { + "AttributeName": "SongTitle", + "KeyType": "RANGE" + } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "TableName": "Music" + }, + "output": { + "TableDescription": { + "AttributeDefinitions": [ + { + "AttributeName": "Artist", + "AttributeType": "S" + }, + { + "AttributeName": "SongTitle", + "AttributeType": "S" + } + ], + "CreationDateTime": "1421866952.062", + "ItemCount": 0, + "KeySchema": [ + { + "AttributeName": "Artist", + "KeyType": "HASH" + }, + { + "AttributeName": "SongTitle", + "KeyType": "RANGE" + } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "TableName": "Music", + "TableSizeBytes": 0, + "TableStatus": "CREATING" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a table named Music.", + "id": "to-create-a-table-1476116291743", + "title": "To create a table" + } + ], + "DeleteItem": [ + { + "input": { + "Key": { + "Artist": { + "S": "No One You Know" + }, + "SongTitle": { + "S": "Scared of My Shadow" + } + }, + "TableName": "Music" + }, + "output": { + "ConsumedCapacity": { + "CapacityUnits": 1, + "TableName": "Music" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes an item from the Music table.", + "id": "to-delete-an-item-1475884573758", + "title": "To delete an item" + } + ], + "DeleteTable": [ + { + "input": { + "TableName": "Music" + }, + "output": { + "TableDescription": { + "ItemCount": 0, + "ProvisionedThroughput": { + "NumberOfDecreasesToday": 1, + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "TableName": "Music", + "TableSizeBytes": 0, + "TableStatus": "DELETING" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the Music table.", + "id": "to-delete-a-table-1475884368755", + "title": "To delete a table" + } + ], + "DescribeLimits": [ + { + "input": { + }, + "output": { + "AccountMaxReadCapacityUnits": 20000, + "AccountMaxWriteCapacityUnits": 20000, + "TableMaxReadCapacityUnits": 10000, + "TableMaxWriteCapacityUnits": 10000 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the maximum read and write capacity units per table, and for the AWS account, in the current AWS region.", + "id": "to-determine-capacity-limits-per-table-and-account-in-the-current-aws-region-1475884162064", + "title": "To determine capacity limits per table and account, in the current AWS region" + } + ], + "DescribeTable": [ + { + "input": { + "TableName": "Music" + }, + "output": { + "Table": { + "AttributeDefinitions": [ + { + "AttributeName": "Artist", + "AttributeType": "S" + }, + { + "AttributeName": "SongTitle", + "AttributeType": "S" + } + ], + "CreationDateTime": "1421866952.062", + "ItemCount": 0, + "KeySchema": [ + { + "AttributeName": "Artist", + "KeyType": "HASH" + }, + { + "AttributeName": "SongTitle", + "KeyType": "RANGE" + } + ], + "ProvisionedThroughput": { + "NumberOfDecreasesToday": 1, + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "TableName": "Music", + "TableSizeBytes": 0, + "TableStatus": "ACTIVE" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Music table.", + "id": "to-describe-a-table-1475884440502", + "title": "To describe a table" + } + ], + "GetItem": [ + { + "input": { + "Key": { + "Artist": { + "S": "Acme Band" + }, + "SongTitle": { + "S": "Happy Day" + } + }, + "TableName": "Music" + }, + "output": { + "Item": { + "AlbumTitle": { + "S": "Songs About Life" + }, + "Artist": { + "S": "Acme Band" + }, + "SongTitle": { + "S": "Happy Day" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example retrieves an item from the Music table. The table has a partition key and a sort key (Artist and SongTitle), so you must specify both of these attributes.", + "id": "to-read-an-item-from-a-table-1475884258350", + "title": "To read an item from a table" + } + ], + "ListTables": [ + { + "input": { + }, + "output": { + "TableNames": [ + "Forum", + "ProductCatalog", + "Reply", + "Thread" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists all of the tables associated with the current AWS account and endpoint.", + "id": "to-list-tables-1475884741238", + "title": "To list tables" + } + ], + "PutItem": [ + { + "input": { + "Item": { + "AlbumTitle": { + "S": "Somewhat Famous" + }, + "Artist": { + "S": "No One You Know" + }, + "SongTitle": { + "S": "Call Me Today" + } + }, + "ReturnConsumedCapacity": "TOTAL", + "TableName": "Music" + }, + "output": { + "ConsumedCapacity": { + "CapacityUnits": 1, + "TableName": "Music" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds a new item to the Music table.", + "id": "to-add-an-item-to-a-table-1476116191110", + "title": "To add an item to a table" + } + ], + "Query": [ + { + "input": { + "ExpressionAttributeValues": { + ":v1": { + "S": "No One You Know" + } + }, + "KeyConditionExpression": "Artist = :v1", + "ProjectionExpression": "SongTitle", + "TableName": "Music" + }, + "output": { + "ConsumedCapacity": { + }, + "Count": 2, + "Items": [ + { + "SongTitle": { + "S": "Call Me Today" + } + } + ], + "ScannedCount": 2 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example queries items in the Music table. The table has a partition key and sort key (Artist and SongTitle), but this query only specifies the partition key value. It returns song titles by the artist named \"No One You Know\".", + "id": "to-query-an-item-1475883874631", + "title": "To query an item" + } + ], + "Scan": [ + { + "input": { + "ExpressionAttributeNames": { + "#AT": "AlbumTitle", + "#ST": "SongTitle" + }, + "ExpressionAttributeValues": { + ":a": { + "S": "No One You Know" + } + }, + "FilterExpression": "Artist = :a", + "ProjectionExpression": "#ST, #AT", + "TableName": "Music" + }, + "output": { + "ConsumedCapacity": { + }, + "Count": 2, + "Items": [ + { + "AlbumTitle": { + "S": "Somewhat Famous" + }, + "SongTitle": { + "S": "Call Me Today" + } + }, + { + "AlbumTitle": { + "S": "Blue Sky Blues" + }, + "SongTitle": { + "S": "Scared of My Shadow" + } + } + ], + "ScannedCount": 3 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example scans the entire Music table, and then narrows the results to songs by the artist \"No One You Know\". For each item, only the album title and song title are returned.", + "id": "to-scan-a-table-1475883652470", + "title": "To scan a table" + } + ], + "UpdateItem": [ + { + "input": { + "ExpressionAttributeNames": { + "#AT": "AlbumTitle", + "#Y": "Year" + }, + "ExpressionAttributeValues": { + ":t": { + "S": "Louder Than Ever" + }, + ":y": { + "N": "2015" + } + }, + "Key": { + "Artist": { + "S": "Acme Band" + }, + "SongTitle": { + "S": "Happy Day" + } + }, + "ReturnValues": "ALL_NEW", + "TableName": "Music", + "UpdateExpression": "SET #Y = :y, #AT = :t" + }, + "output": { + "Attributes": { + "AlbumTitle": { + "S": "Louder Than Ever" + }, + "Artist": { + "S": "Acme Band" + }, + "SongTitle": { + "S": "Happy Day" + }, + "Year": { + "N": "2015" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example updates an item in the Music table. It adds a new attribute (Year) and modifies the AlbumTitle attribute. All of the attributes in the item, as they appear after the update, are returned in the response.", + "id": "to-update-an-item-in-a-table-1476118250055", + "title": "To update an item in a table" + } + ], + "UpdateTable": [ + { + "input": { + "ProvisionedThroughput": { + "ReadCapacityUnits": 10, + "WriteCapacityUnits": 10 + }, + "TableName": "MusicCollection" + }, + "output": { + "TableDescription": { + "AttributeDefinitions": [ + { + "AttributeName": "Artist", + "AttributeType": "S" + }, + { + "AttributeName": "SongTitle", + "AttributeType": "S" + } + ], + "CreationDateTime": "1421866952.062", + "ItemCount": 0, + "KeySchema": [ + { + "AttributeName": "Artist", + "KeyType": "HASH" + }, + { + "AttributeName": "SongTitle", + "KeyType": "RANGE" + } + ], + "ProvisionedThroughput": { + "LastIncreaseDateTime": "1421874759.194", + "NumberOfDecreasesToday": 1, + "ReadCapacityUnits": 1, + "WriteCapacityUnits": 1 + }, + "TableName": "MusicCollection", + "TableSizeBytes": 0, + "TableStatus": "UPDATING" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example increases the provisioned read and write capacity on the Music table.", + "id": "to-modify-a-tables-provisioned-throughput-1476118076147", + "title": "To modify a table's provisioned throughput" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/paginators-1.json new file mode 100644 index 00000000..8e10a0c7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/paginators-1.json @@ -0,0 +1,47 @@ +{ + "pagination": { + "ListBackups": { + "input_token": "ExclusiveStartBackupArn", + "output_token": "LastEvaluatedBackupArn", + "limit_key": "Limit", + "result_key": "BackupSummaries" + }, + "ListTables": { + "input_token": "ExclusiveStartTableName", + "output_token": "LastEvaluatedTableName", + "limit_key": "Limit", + "result_key": "TableNames" + }, + "Query": { + "input_token": "ExclusiveStartKey", + "output_token": "LastEvaluatedKey", + "limit_key": "Limit", + "result_key": [ + "Items", + "Count", + "ScannedCount" + ], + "non_aggregate_keys": [ + "ConsumedCapacity" + ] + }, + "Scan": { + "input_token": "ExclusiveStartKey", + "output_token": "LastEvaluatedKey", + "limit_key": "Limit", + "result_key": [ + "Items", + "Count", + "ScannedCount" + ], + "non_aggregate_keys": [ + "ConsumedCapacity" + ] + }, + "ListTagsOfResource": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Tags" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/service-2.json.gz new file mode 100644 index 00000000..280a3cfe Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/waiters-2.json new file mode 100644 index 00000000..43a55ca7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodb/2012-08-10/waiters-2.json @@ -0,0 +1,35 @@ +{ + "version": 2, + "waiters": { + "TableExists": { + "delay": 20, + "operation": "DescribeTable", + "maxAttempts": 25, + "acceptors": [ + { + "expected": "ACTIVE", + "matcher": "path", + "state": "success", + "argument": "Table.TableStatus" + }, + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "retry" + } + ] + }, + "TableNotExists": { + "delay": 20, + "operation": "DescribeTable", + "maxAttempts": 25, + "acceptors": [ + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "success" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8b47a58b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/examples-1.json new file mode 100644 index 00000000..8287e2c4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/examples-1.json @@ -0,0 +1,212 @@ +{ + "version": "1.0", + "examples": { + "DescribeStream": [ + { + "input": { + "StreamArn": "arn:aws:dynamodb:us-west-2:111122223333:table/Forum/stream/2015-05-20T20:51:10.252" + }, + "output": { + "StreamDescription": { + "CreationRequestDateTime": "Wed May 20 13:51:10 PDT 2015", + "KeySchema": [ + { + "AttributeName": "ForumName", + "KeyType": "HASH" + }, + { + "AttributeName": "Subject", + "KeyType": "RANGE" + } + ], + "Shards": [ + { + "SequenceNumberRange": { + "EndingSequenceNumber": "20500000000000000910398", + "StartingSequenceNumber": "20500000000000000910398" + }, + "ShardId": "shardId-00000001414562045508-2bac9cd2" + }, + { + "ParentShardId": "shardId-00000001414562045508-2bac9cd2", + "SequenceNumberRange": { + "EndingSequenceNumber": "820400000000000001192334", + "StartingSequenceNumber": "820400000000000001192334" + }, + "ShardId": "shardId-00000001414576573621-f55eea83" + }, + { + "ParentShardId": "shardId-00000001414576573621-f55eea83", + "SequenceNumberRange": { + "EndingSequenceNumber": "1683700000000000001135967", + "StartingSequenceNumber": "1683700000000000001135967" + }, + "ShardId": "shardId-00000001414592258131-674fd923" + }, + { + "ParentShardId": "shardId-00000001414592258131-674fd923", + "SequenceNumberRange": { + "StartingSequenceNumber": "2574600000000000000935255" + }, + "ShardId": "shardId-00000001414608446368-3a1afbaf" + } + ], + "StreamArn": "arn:aws:dynamodb:us-west-2:111122223333:table/Forum/stream/2015-05-20T20:51:10.252", + "StreamLabel": "2015-05-20T20:51:10.252", + "StreamStatus": "ENABLED", + "StreamViewType": "NEW_AND_OLD_IMAGES", + "TableName": "Forum" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example describes a stream with a given stream ARN.", + "id": "to-describe-a-stream-with-a-given-stream-arn-1473457835200", + "title": "To describe a stream with a given stream ARN" + } + ], + "GetRecords": [ + { + "input": { + "ShardIterator": "arn:aws:dynamodb:us-west-2:111122223333:table/Forum/stream/2015-05-20T20:51:10.252|1|AAAAAAAAAAEvJp6D+zaQ... ..." + }, + "output": { + "NextShardIterator": "arn:aws:dynamodb:us-west-2:111122223333:table/Forum/stream/2015-05-20T20:51:10.252|1|AAAAAAAAAAGQBYshYDEe ... ...", + "Records": [ + { + "awsRegion": "us-west-2", + "dynamodb": { + "ApproximateCreationDateTime": "1.46480646E9", + "Keys": { + "ForumName": { + "S": "DynamoDB" + }, + "Subject": { + "S": "DynamoDB Thread 3" + } + }, + "SequenceNumber": "300000000000000499659", + "SizeBytes": 41, + "StreamViewType": "KEYS_ONLY" + }, + "eventID": "e2fd9c34eff2d779b297b26f5fef4206", + "eventName": "INSERT", + "eventSource": "aws:dynamodb", + "eventVersion": "1.0" + }, + { + "awsRegion": "us-west-2", + "dynamodb": { + "ApproximateCreationDateTime": "1.46480527E9", + "Keys": { + "ForumName": { + "S": "DynamoDB" + }, + "Subject": { + "S": "DynamoDB Thread 1" + } + }, + "SequenceNumber": "400000000000000499660", + "SizeBytes": 41, + "StreamViewType": "KEYS_ONLY" + }, + "eventID": "4b25bd0da9a181a155114127e4837252", + "eventName": "MODIFY", + "eventSource": "aws:dynamodb", + "eventVersion": "1.0" + }, + { + "awsRegion": "us-west-2", + "dynamodb": { + "ApproximateCreationDateTime": "1.46480646E9", + "Keys": { + "ForumName": { + "S": "DynamoDB" + }, + "Subject": { + "S": "DynamoDB Thread 2" + } + }, + "SequenceNumber": "500000000000000499661", + "SizeBytes": 41, + "StreamViewType": "KEYS_ONLY" + }, + "eventID": "740280c73a3df7842edab3548a1b08ad", + "eventName": "REMOVE", + "eventSource": "aws:dynamodb", + "eventVersion": "1.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves all the stream records from a shard.", + "id": "to-retrieve-all-the-stream-records-from-a-shard-1473707781419", + "title": "To retrieve all the stream records from a shard" + } + ], + "GetShardIterator": [ + { + "input": { + "ShardId": "00000001414576573621-f55eea83", + "ShardIteratorType": "TRIM_HORIZON", + "StreamArn": "arn:aws:dynamodb:us-west-2:111122223333:table/Forum/stream/2015-05-20T20:51:10.252" + }, + "output": { + "ShardIterator": "arn:aws:dynamodb:us-west-2:111122223333:table/Forum/stream/2015-05-20T20:51:10.252|1|AAAAAAAAAAEvJp6D+zaQ... ..." + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns a shard iterator for the provided stream ARN and shard ID.", + "id": "to-obtain-a-shard-iterator-for-the-provided-stream-arn-and-shard-id-1473459941476", + "title": "To obtain a shard iterator for the provided stream ARN and shard ID" + } + ], + "ListStreams": [ + { + "input": { + }, + "output": { + "Streams": [ + { + "StreamArn": "arn:aws:dynamodb:us-wesst-2:111122223333:table/Forum/stream/2015-05-20T20:51:10.252", + "StreamLabel": "2015-05-20T20:51:10.252", + "TableName": "Forum" + }, + { + "StreamArn": "arn:aws:dynamodb:us-west-2:111122223333:table/Forum/stream/2015-05-20T20:50:02.714", + "StreamLabel": "2015-05-20T20:50:02.714", + "TableName": "Forum" + }, + { + "StreamArn": "arn:aws:dynamodb:us-west-2:111122223333:table/Forum/stream/2015-05-19T23:03:50.641", + "StreamLabel": "2015-05-19T23:03:50.641", + "TableName": "Forum" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example lists all of the stream ARNs.", + "id": "to-list-all-of-the-stream-arns--1473459534285", + "title": "To list all of the stream ARNs " + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/service-2.json.gz new file mode 100644 index 00000000..7b4812cd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/dynamodbstreams/2012-08-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c767eca2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/service-2.json.gz new file mode 100644 index 00000000..140434d9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ebs/2019-11-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d64ac1b4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/examples-1.json new file mode 100644 index 00000000..c5c60013 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/examples-1.json @@ -0,0 +1,34 @@ +{ + "version": "1.0", + "examples": { + "SendSSHPublicKey": [ + { + "input": { + "AvailabilityZone": "us-west-2a", + "InstanceId": "i-abcd1234", + "InstanceOSUser": "ec2-user", + "SSHPublicKey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3FlHqj2eqCdrGHuA6dRjfZXQ4HX5lXEIRHaNbxEwE5Te7xNF7StwhrDtiV7IdT5fDqbRyGw/szPj3xGkNTVoElCZ2dDFb2qYZ1WLIpZwj/UhO9l2mgfjR56UojjQut5Jvn2KZ1OcyrNO0J83kCaJCV7JoVbXY79FBMUccYNY45zmv9+1FMCfY6i2jdIhwR6+yLk8oubL8lIPyq7X+6b9S0yKCkB7Peml1DvghlybpAIUrC9vofHt6XP4V1i0bImw1IlljQS+DUmULRFSccATDscCX9ajnj7Crhm0HAZC0tBPXpFdHkPwL3yzYo546SCS9LKEwz62ymxxbL9k7h09t" + }, + "output": { + "RequestId": "abcd1234-abcd-1234-abcd-1234abcd1234", + "Success": true + }, + "comments": { + "input": { + "AvailabilityZone": "The zone where the instance was launched", + "InstanceId": "The instance ID to publish the key to.", + "InstanceOSUser": "This should be the user you wish to be when ssh-ing to the instance (eg, ec2-user@[instance IP])", + "SSHPublicKey": "This should be in standard OpenSSH format (ssh-rsa [key body])" + }, + "output": { + "RequestId": "This request ID should be provided when contacting AWS Support.", + "Success": "Should be true if the service does not return an error response." + } + }, + "description": "The following example pushes a sample SSH public key to the EC2 instance i-abcd1234 in AZ us-west-2b for use by the instance OS user ec2-user.", + "id": "send-ssh-key-to-an-ec2-instance-1518124883100", + "title": "To push an SSH key to an EC2 instance" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/service-2.json.gz new file mode 100644 index 00000000..3cb00625 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2-instance-connect/2018-04-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ba56adfd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/paginators-1.json new file mode 100644 index 00000000..b643e696 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/paginators-1.json @@ -0,0 +1,45 @@ +{ + "pagination": { + "DescribeInstanceStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceStatuses" + }, + "DescribeInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Reservations" + }, + "DescribeReservedInstancesModifications": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ReservedInstancesModifications" + }, + "DescribeReservedInstancesOfferings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReservedInstancesOfferings" + }, + "DescribeSpotPriceHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotPriceHistory" + }, + "DescribeTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tags" + }, + "DescribeVolumeStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VolumeStatuses" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/service-2.json.gz new file mode 100644 index 00000000..1dbc41e6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/waiters-2.json new file mode 100644 index 00000000..fb8c16bd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-09-01/waiters-2.json @@ -0,0 +1,341 @@ +{ + "version": 2, + "waiters": { + "BundleTaskComplete": { + "delay": 15, + "operation": "DescribeBundleTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "complete", + "matcher": "pathAll", + "state": "success", + "argument": "BundleTasks[].State" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "BundleTasks[].State" + } + ] + }, + "ConversionTaskCancelled": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskCompleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelled", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelling", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskDeleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "CustomerGatewayAvailable": { + "delay": 15, + "operation": "DescribeCustomerGateways", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + } + ] + }, + "ExportTaskCancelled": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ExportTaskCompleted": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "InstanceRunning": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "running", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "shutting-down", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceStopped": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "stopped", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceTerminated": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "terminated", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "SnapshotCompleted": { + "delay": 15, + "operation": "DescribeSnapshots", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "Snapshots[].State" + } + ] + }, + "SubnetAvailable": { + "delay": 15, + "operation": "DescribeSubnets", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Subnets[].State" + } + ] + }, + "VolumeAvailable": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VolumeDeleted": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + } + ] + }, + "VolumeInUse": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "in-use", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VpcAvailable": { + "delay": 15, + "operation": "DescribeVpcs", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Vpcs[].State" + } + ] + }, + "VpnConnectionAvailable": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpnConnectionDeleted": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ba56adfd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/paginators-1.json new file mode 100644 index 00000000..ca7a8767 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/paginators-1.json @@ -0,0 +1,51 @@ +{ + "pagination": { + "DescribeInstanceStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceStatuses" + }, + "DescribeInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Reservations" + }, + "DescribeReservedInstancesModifications": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ReservedInstancesModifications" + }, + "DescribeReservedInstancesOfferings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReservedInstancesOfferings" + }, + "DescribeSpotPriceHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotPriceHistory" + }, + "DescribeTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tags" + }, + "DescribeVolumeStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VolumeStatuses" + }, + "DescribeSnapshots": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Snapshots" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/service-2.json.gz new file mode 100644 index 00000000..43181ff3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/waiters-2.json new file mode 100644 index 00000000..17f08705 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2014-10-01/waiters-2.json @@ -0,0 +1,436 @@ +{ + "version": 2, + "waiters": { + "BundleTaskComplete": { + "delay": 15, + "operation": "DescribeBundleTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "complete", + "matcher": "pathAll", + "state": "success", + "argument": "BundleTasks[].State" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "BundleTasks[].State" + } + ] + }, + "ConversionTaskCancelled": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskCompleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelled", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelling", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskDeleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "CustomerGatewayAvailable": { + "delay": 15, + "operation": "DescribeCustomerGateways", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + } + ] + }, + "ExportTaskCancelled": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ExportTaskCompleted": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ImageAvailable": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Images[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Images[].State", + "expected": "failed" + } + ] + }, + "InstanceRunning": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "running", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "shutting-down", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].InstanceStatus.Status", + "expected": "ok" + } + ] + }, + "InstanceStopped": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "stopped", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceTerminated": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "terminated", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "PasswordDataAvailable": { + "operation": "GetPasswordData", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "length(PasswordData) > `0`", + "expected": true + } + ] + }, + "SnapshotCompleted": { + "delay": 15, + "operation": "DescribeSnapshots", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "Snapshots[].State" + } + ] + }, + "SpotInstanceRequestFulfilled": { + "operation": "DescribeSpotInstanceRequests", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "fulfilled" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "schedule-expired" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "canceled-before-fulfillment" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "bad-parameters" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "system-error" + } + ] + }, + "SubnetAvailable": { + "delay": 15, + "operation": "DescribeSubnets", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Subnets[].State" + } + ] + }, + "SystemStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].SystemStatus.Status", + "expected": "ok" + } + ] + }, + "VolumeAvailable": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VolumeDeleted": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + } + ] + }, + "VolumeInUse": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "in-use", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VpcAvailable": { + "delay": 15, + "operation": "DescribeVpcs", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Vpcs[].State" + } + ] + }, + "VpnConnectionAvailable": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpnConnectionDeleted": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ba56adfd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/paginators-1.json new file mode 100644 index 00000000..ca7a8767 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/paginators-1.json @@ -0,0 +1,51 @@ +{ + "pagination": { + "DescribeInstanceStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceStatuses" + }, + "DescribeInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Reservations" + }, + "DescribeReservedInstancesModifications": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ReservedInstancesModifications" + }, + "DescribeReservedInstancesOfferings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReservedInstancesOfferings" + }, + "DescribeSpotPriceHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotPriceHistory" + }, + "DescribeTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tags" + }, + "DescribeVolumeStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VolumeStatuses" + }, + "DescribeSnapshots": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Snapshots" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/service-2.json.gz new file mode 100644 index 00000000..ce5e7570 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/waiters-2.json new file mode 100644 index 00000000..17f08705 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-03-01/waiters-2.json @@ -0,0 +1,436 @@ +{ + "version": 2, + "waiters": { + "BundleTaskComplete": { + "delay": 15, + "operation": "DescribeBundleTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "complete", + "matcher": "pathAll", + "state": "success", + "argument": "BundleTasks[].State" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "BundleTasks[].State" + } + ] + }, + "ConversionTaskCancelled": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskCompleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelled", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelling", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskDeleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "CustomerGatewayAvailable": { + "delay": 15, + "operation": "DescribeCustomerGateways", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + } + ] + }, + "ExportTaskCancelled": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ExportTaskCompleted": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ImageAvailable": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Images[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Images[].State", + "expected": "failed" + } + ] + }, + "InstanceRunning": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "running", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "shutting-down", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].InstanceStatus.Status", + "expected": "ok" + } + ] + }, + "InstanceStopped": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "stopped", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceTerminated": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "terminated", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "PasswordDataAvailable": { + "operation": "GetPasswordData", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "length(PasswordData) > `0`", + "expected": true + } + ] + }, + "SnapshotCompleted": { + "delay": 15, + "operation": "DescribeSnapshots", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "Snapshots[].State" + } + ] + }, + "SpotInstanceRequestFulfilled": { + "operation": "DescribeSpotInstanceRequests", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "fulfilled" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "schedule-expired" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "canceled-before-fulfillment" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "bad-parameters" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "system-error" + } + ] + }, + "SubnetAvailable": { + "delay": 15, + "operation": "DescribeSubnets", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Subnets[].State" + } + ] + }, + "SystemStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].SystemStatus.Status", + "expected": "ok" + } + ] + }, + "VolumeAvailable": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VolumeDeleted": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + } + ] + }, + "VolumeInUse": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "in-use", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VpcAvailable": { + "delay": 15, + "operation": "DescribeVpcs", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Vpcs[].State" + } + ] + }, + "VpnConnectionAvailable": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpnConnectionDeleted": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ba56adfd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/paginators-1.json new file mode 100644 index 00000000..ca7a8767 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/paginators-1.json @@ -0,0 +1,51 @@ +{ + "pagination": { + "DescribeInstanceStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceStatuses" + }, + "DescribeInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Reservations" + }, + "DescribeReservedInstancesModifications": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ReservedInstancesModifications" + }, + "DescribeReservedInstancesOfferings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReservedInstancesOfferings" + }, + "DescribeSpotPriceHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotPriceHistory" + }, + "DescribeTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tags" + }, + "DescribeVolumeStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VolumeStatuses" + }, + "DescribeSnapshots": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Snapshots" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/service-2.json.gz new file mode 100644 index 00000000..12dfa34a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/waiters-2.json new file mode 100644 index 00000000..5a6dbbc9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-04-15/waiters-2.json @@ -0,0 +1,458 @@ +{ + "version": 2, + "waiters": { + "InstanceExists": { + "delay": 5, + "maxAttempts": 40, + "operation": "DescribeInstances", + "acceptors": [ + { + "matcher": "status", + "expected": 200, + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidInstanceIDNotFound", + "state": "retry" + } + ] + }, + "BundleTaskComplete": { + "delay": 15, + "operation": "DescribeBundleTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "complete", + "matcher": "pathAll", + "state": "success", + "argument": "BundleTasks[].State" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "BundleTasks[].State" + } + ] + }, + "ConversionTaskCancelled": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskCompleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelled", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelling", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskDeleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "CustomerGatewayAvailable": { + "delay": 15, + "operation": "DescribeCustomerGateways", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + } + ] + }, + "ExportTaskCancelled": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ExportTaskCompleted": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ImageAvailable": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Images[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Images[].State", + "expected": "failed" + } + ] + }, + "InstanceRunning": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "running", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "shutting-down", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].InstanceStatus.Status", + "expected": "ok" + } + ] + }, + "InstanceStopped": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "stopped", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceTerminated": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "terminated", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "PasswordDataAvailable": { + "operation": "GetPasswordData", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "length(PasswordData) > `0`", + "expected": true + } + ] + }, + "SnapshotCompleted": { + "delay": 15, + "operation": "DescribeSnapshots", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "Snapshots[].State" + } + ] + }, + "SpotInstanceRequestFulfilled": { + "operation": "DescribeSpotInstanceRequests", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "fulfilled" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "schedule-expired" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "canceled-before-fulfillment" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "bad-parameters" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "system-error" + } + ] + }, + "SubnetAvailable": { + "delay": 15, + "operation": "DescribeSubnets", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Subnets[].State" + } + ] + }, + "SystemStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].SystemStatus.Status", + "expected": "ok" + } + ] + }, + "VolumeAvailable": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VolumeDeleted": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "matcher": "error", + "expected": "InvalidVolumeNotFound", + "state": "success" + } + ] + }, + "VolumeInUse": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "in-use", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VpcAvailable": { + "delay": 15, + "operation": "DescribeVpcs", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Vpcs[].State" + } + ] + }, + "VpnConnectionAvailable": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpnConnectionDeleted": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..352bfc85 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/paginators-1.json new file mode 100644 index 00000000..2bd01ad5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/paginators-1.json @@ -0,0 +1,63 @@ +{ + "pagination": { + "DescribeInstanceStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceStatuses" + }, + "DescribeInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Reservations" + }, + "DescribeReservedInstancesOfferings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReservedInstancesOfferings" + }, + "DescribeReservedInstancesModifications": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ReservedInstancesModifications" + }, + "DescribeSnapshots": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Snapshots" + }, + "DescribeSpotFleetRequests": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotFleetRequestConfigs" + }, + "DescribeSpotPriceHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotPriceHistory" + }, + "DescribeTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tags" + }, + "DescribeVolumeStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VolumeStatuses" + }, + "DescribeVolumes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Volumes" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/service-2.json.gz new file mode 100644 index 00000000..6ca7233b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/waiters-2.json new file mode 100644 index 00000000..652a8cad --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2015-10-01/waiters-2.json @@ -0,0 +1,589 @@ +{ + "version": 2, + "waiters": { + "InstanceExists": { + "delay": 5, + "maxAttempts": 40, + "operation": "DescribeInstances", + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(Reservations[]) > `0`", + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "BundleTaskComplete": { + "delay": 15, + "operation": "DescribeBundleTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "complete", + "matcher": "pathAll", + "state": "success", + "argument": "BundleTasks[].State" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "BundleTasks[].State" + } + ] + }, + "ConsoleOutputAvailable": { + "operation": "GetConsoleOutput", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "length(Output || '') > `0`", + "expected": true + } + ] + }, + "ConversionTaskCancelled": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskCompleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelled", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelling", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskDeleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "CustomerGatewayAvailable": { + "delay": 15, + "operation": "DescribeCustomerGateways", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + } + ] + }, + "ExportTaskCancelled": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ExportTaskCompleted": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ImageExists": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(Images[]) > `0`", + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidAMIID.NotFound", + "state": "retry" + } + ] + }, + "ImageAvailable": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Images[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Images[].State", + "expected": "failed" + } + ] + }, + "InstanceRunning": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "running", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "shutting-down", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "InstanceStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].InstanceStatus.Status", + "expected": "ok" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "InstanceStopped": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "stopped", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceTerminated": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "terminated", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "KeyPairExists": { + "operation": "DescribeKeyPairs", + "delay": 5, + "maxAttempts": 6, + "acceptors": [ + { + "expected": true, + "matcher": "pathAll", + "state": "success", + "argument": "length(KeyPairs[].KeyName) > `0`" + }, + { + "expected": "InvalidKeyPair.NotFound", + "matcher": "error", + "state": "retry" + } + ] + }, + "NatGatewayAvailable": { + "operation": "DescribeNatGateways", + "delay": 15, + "maxAttempts": 40, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "NatGateways[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "failed" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "deleting" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "deleted" + }, + { + "state": "retry", + "matcher": "error", + "expected": "NatGatewayNotFound" + } + ] + }, + "NetworkInterfaceAvailable": { + "operation": "DescribeNetworkInterfaces", + "delay": 20, + "maxAttempts": 10, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "NetworkInterfaces[].Status" + }, + { + "expected": "InvalidNetworkInterfaceID.NotFound", + "matcher": "error", + "state": "failure" + } + ] + }, + "PasswordDataAvailable": { + "operation": "GetPasswordData", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "length(PasswordData) > `0`", + "expected": true + } + ] + }, + "SnapshotCompleted": { + "delay": 15, + "operation": "DescribeSnapshots", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "Snapshots[].State" + } + ] + }, + "SpotInstanceRequestFulfilled": { + "operation": "DescribeSpotInstanceRequests", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "fulfilled" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "schedule-expired" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "canceled-before-fulfillment" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "bad-parameters" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "system-error" + } + ] + }, + "SubnetAvailable": { + "delay": 15, + "operation": "DescribeSubnets", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Subnets[].State" + } + ] + }, + "SystemStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].SystemStatus.Status", + "expected": "ok" + } + ] + }, + "VolumeAvailable": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VolumeDeleted": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "matcher": "error", + "expected": "InvalidVolume.NotFound", + "state": "success" + } + ] + }, + "VolumeInUse": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "in-use", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VpcAvailable": { + "delay": 15, + "operation": "DescribeVpcs", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Vpcs[].State" + } + ] + }, + "VpnConnectionAvailable": { + "delay": 60, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpnConnectionDeleted": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpcPeeringConnectionExists": { + "delay": 15, + "operation": "DescribeVpcPeeringConnections", + "maxAttempts": 40, + "acceptors": [ + { + "matcher": "status", + "expected": 200, + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidVpcPeeringConnectionID.NotFound", + "state": "retry" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..352bfc85 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/examples-1.json new file mode 100644 index 00000000..3f584e9f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/examples-1.json @@ -0,0 +1,3729 @@ +{ + "version": "1.0", + "examples": { + "AllocateAddress": [ + { + "input": { + "Domain": "vpc" + }, + "output": { + "AllocationId": "eipalloc-64d5890a", + "Domain": "vpc", + "PublicIp": "203.0.113.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example allocates an Elastic IP address to use with an instance in a VPC.", + "id": "ec2-allocate-address-1", + "title": "To allocate an Elastic IP address for EC2-VPC" + }, + { + "output": { + "Domain": "standard", + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example allocates an Elastic IP address to use with an instance in EC2-Classic.", + "id": "ec2-allocate-address-2", + "title": "To allocate an Elastic IP address for EC2-Classic" + } + ], + "AssignPrivateIpAddresses": [ + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3", + "PrivateIpAddresses": [ + "10.0.0.82" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example assigns the specified secondary private IP address to the specified network interface.", + "id": "ec2-assign-private-ip-addresses-1", + "title": "To assign a specific secondary private IP address to an interface" + }, + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3", + "SecondaryPrivateIpAddressCount": 2 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example assigns two secondary private IP addresses to the specified network interface. Amazon EC2 automatically assigns these IP addresses from the available IP addresses in the CIDR block range of the subnet the network interface is associated with.", + "id": "ec2-assign-private-ip-addresses-2", + "title": "To assign secondary private IP addresses that Amazon EC2 selects to an interface" + } + ], + "AssociateAddress": [ + { + "input": { + "AllocationId": "eipalloc-64d5890a", + "InstanceId": "i-0b263919b6498b123" + }, + "output": { + "AssociationId": "eipassoc-2bebb745" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified Elastic IP address with the specified instance in a VPC.", + "id": "ec2-associate-address-1", + "title": "To associate an Elastic IP address in EC2-VPC" + }, + { + "input": { + "AllocationId": "eipalloc-64d5890a", + "NetworkInterfaceId": "eni-1a2b3c4d" + }, + "output": { + "AssociationId": "eipassoc-2bebb745" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified Elastic IP address with the specified network interface.", + "id": "ec2-associate-address-2", + "title": "To associate an Elastic IP address with a network interface" + }, + { + "input": { + "InstanceId": "i-07ffe74c7330ebf53", + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates an Elastic IP address with an instance in EC2-Classic.", + "id": "ec2-associate-address-3", + "title": "To associate an Elastic IP address in EC2-Classic" + } + ], + "AssociateDhcpOptions": [ + { + "input": { + "DhcpOptionsId": "dopt-d9070ebb", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified DHCP options set with the specified VPC.", + "id": "ec2-associate-dhcp-options-1", + "title": "To associate a DHCP options set with a VPC" + }, + { + "input": { + "DhcpOptionsId": "default", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the default DHCP options set with the specified VPC.", + "id": "ec2-associate-dhcp-options-2", + "title": "To associate the default DHCP options set with a VPC" + } + ], + "AssociateRouteTable": [ + { + "input": { + "RouteTableId": "rtb-22574640", + "SubnetId": "subnet-9d4a7b6" + }, + "output": { + "AssociationId": "rtbassoc-781d0d1a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified route table with the specified subnet.", + "id": "ec2-associate-route-table-1", + "title": "To associate a route table with a subnet" + } + ], + "AttachInternetGateway": [ + { + "input": { + "InternetGatewayId": "igw-c0a643a9", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches the specified Internet gateway to the specified VPC.", + "id": "ec2-attach-internet-gateway-1", + "title": "To attach an Internet gateway to a VPC" + } + ], + "AttachNetworkInterface": [ + { + "input": { + "DeviceIndex": 1, + "InstanceId": "i-1234567890abcdef0", + "NetworkInterfaceId": "eni-e5aa89a3" + }, + "output": { + "AttachmentId": "eni-attach-66c4350a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches the specified network interface to the specified instance.", + "id": "ec2-attach-network-interface-1", + "title": "To attach a network interface to an instance" + } + ], + "AttachVolume": [ + { + "input": { + "Device": "/dev/sdf", + "InstanceId": "i-01474ef662b89480", + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + "AttachTime": "2016-08-29T18:52:32.724Z", + "Device": "/dev/sdf", + "InstanceId": "i-01474ef662b89480", + "State": "attaching", + "VolumeId": "vol-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches a volume (``vol-1234567890abcdef0``) to an instance (``i-01474ef662b89480``) as ``/dev/sdf``.", + "id": "to-attach-a-volume-to-an-instance-1472499213109", + "title": "To attach a volume to an instance" + } + ], + "CancelSpotFleetRequests": [ + { + "input": { + "SpotFleetRequestIds": [ + "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + ], + "TerminateInstances": true + }, + "output": { + "SuccessfulFleetRequests": [ + { + "CurrentSpotFleetRequestState": "cancelled_running", + "PreviousSpotFleetRequestState": "active", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels the specified Spot fleet request and terminates its associated Spot Instances.", + "id": "ec2-cancel-spot-fleet-requests-1", + "title": "To cancel a Spot fleet request" + }, + { + "input": { + "SpotFleetRequestIds": [ + "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + ], + "TerminateInstances": false + }, + "output": { + "SuccessfulFleetRequests": [ + { + "CurrentSpotFleetRequestState": "cancelled_terminating", + "PreviousSpotFleetRequestState": "active", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels the specified Spot fleet request without terminating its associated Spot Instances.", + "id": "ec2-cancel-spot-fleet-requests-2", + "title": "To cancel a Spot fleet request without terminating its Spot Instances" + } + ], + "CancelSpotInstanceRequests": [ + { + "input": { + "SpotInstanceRequestIds": [ + "sir-08b93456" + ] + }, + "output": { + "CancelledSpotInstanceRequests": [ + { + "SpotInstanceRequestId": "sir-08b93456", + "State": "cancelled" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels a Spot Instance request.", + "id": "ec2-cancel-spot-instance-requests-1", + "title": "To cancel Spot Instance requests" + } + ], + "ConfirmProductInstance": [ + { + "input": { + "InstanceId": "i-1234567890abcdef0", + "ProductCode": "774F4FF8" + }, + "output": { + "OwnerId": "123456789012" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example determines whether the specified product code is associated with the specified instance.", + "id": "to-confirm-the-product-instance-1472712108494", + "title": "To confirm the product instance" + } + ], + "CopySnapshot": [ + { + "input": { + "Description": "This is my copied snapshot.", + "DestinationRegion": "us-east-1", + "SourceRegion": "us-west-2", + "SourceSnapshotId": "snap-066877671789bd71b" + }, + "output": { + "SnapshotId": "snap-066877671789bd71b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example copies a snapshot with the snapshot ID of ``snap-066877671789bd71b`` from the ``us-west-2`` region to the ``us-east-1`` region and adds a short description to identify the snapshot.", + "id": "to-copy-a-snapshot-1472502259774", + "title": "To copy a snapshot" + } + ], + "CreateCustomerGateway": [ + { + "input": { + "BgpAsn": 65534, + "PublicIp": "12.1.2.3", + "Type": "ipsec.1" + }, + "output": { + "CustomerGateway": { + "BgpAsn": "65534", + "CustomerGatewayId": "cgw-0e11f167", + "IpAddress": "12.1.2.3", + "State": "available", + "Type": "ipsec.1" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a customer gateway with the specified IP address for its outside interface.", + "id": "ec2-create-customer-gateway-1", + "title": "To create a customer gateway" + } + ], + "CreateDhcpOptions": [ + { + "input": { + "DhcpConfigurations": [ + { + "Key": "domain-name-servers", + "Values": [ + "10.2.5.1", + "10.2.5.2" + ] + } + ] + }, + "output": { + "DhcpOptions": { + "DhcpConfigurations": [ + { + "Key": "domain-name-servers", + "Values": [ + "10.2.5.2", + "10.2.5.1" + ] + } + ], + "DhcpOptionsId": "dopt-d9070ebb" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DHCP options set.", + "id": "ec2-create-dhcp-options-1", + "title": "To create a DHCP options set" + } + ], + "CreateInternetGateway": [ + { + "output": { + "InternetGateway": { + "Attachments": [ + + ], + "InternetGatewayId": "igw-c0a643a9", + "Tags": [ + + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an Internet gateway.", + "id": "ec2-create-internet-gateway-1", + "title": "To create an Internet gateway" + } + ], + "CreateKeyPair": [ + { + "input": { + "KeyName": "my-key-pair" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a key pair named my-key-pair.", + "id": "ec2-create-key-pair-1", + "title": "To create a key pair" + } + ], + "CreateNatGateway": [ + { + "input": { + "AllocationId": "eipalloc-37fc1a52", + "SubnetId": "subnet-1a2b3c4d" + }, + "output": { + "NatGateway": { + "CreateTime": "2015-12-17T12:45:26.732Z", + "NatGatewayAddresses": [ + { + "AllocationId": "eipalloc-37fc1a52" + } + ], + "NatGatewayId": "nat-08d48af2a8e83edfd", + "State": "pending", + "SubnetId": "subnet-1a2b3c4d", + "VpcId": "vpc-1122aabb" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a NAT gateway in subnet subnet-1a2b3c4d and associates an Elastic IP address with the allocation ID eipalloc-37fc1a52 with the NAT gateway.", + "id": "ec2-create-nat-gateway-1", + "title": "To create a NAT gateway" + } + ], + "CreateNetworkAcl": [ + { + "input": { + "VpcId": "vpc-a01106c2" + }, + "output": { + "NetworkAcl": { + "Associations": [ + + ], + "Entries": [ + { + "CidrBlock": "0.0.0.0/0", + "Egress": true, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + }, + { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + } + ], + "IsDefault": false, + "NetworkAclId": "acl-5fb85d36", + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a network ACL for the specified VPC.", + "id": "ec2-create-network-acl-1", + "title": "To create a network ACL" + } + ], + "CreateNetworkAclEntry": [ + { + "input": { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "NetworkAclId": "acl-5fb85d36", + "PortRange": { + "From": 53, + "To": 53 + }, + "Protocol": "udp", + "RuleAction": "allow", + "RuleNumber": 100 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an entry for the specified network ACL. The rule allows ingress traffic from anywhere (0.0.0.0/0) on UDP port 53 (DNS) into any associated subnet.", + "id": "ec2-create-network-acl-entry-1", + "title": "To create a network ACL entry" + } + ], + "CreateNetworkInterface": [ + { + "input": { + "Description": "my network interface", + "Groups": [ + "sg-903004f8" + ], + "PrivateIpAddress": "10.0.2.17", + "SubnetId": "subnet-9d4a7b6c" + }, + "output": { + "NetworkInterface": { + "AvailabilityZone": "us-east-1d", + "Description": "my network interface", + "Groups": [ + { + "GroupId": "sg-903004f8", + "GroupName": "default" + } + ], + "MacAddress": "02:1a:80:41:52:9c", + "NetworkInterfaceId": "eni-e5aa89a3", + "OwnerId": "123456789012", + "PrivateIpAddress": "10.0.2.17", + "PrivateIpAddresses": [ + { + "Primary": true, + "PrivateIpAddress": "10.0.2.17" + } + ], + "RequesterManaged": false, + "SourceDestCheck": true, + "Status": "pending", + "SubnetId": "subnet-9d4a7b6c", + "TagSet": [ + + ], + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a network interface for the specified subnet.", + "id": "ec2-create-network-interface-1", + "title": "To create a network interface" + } + ], + "CreatePlacementGroup": [ + { + "input": { + "GroupName": "my-cluster", + "Strategy": "cluster" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a placement group with the specified name.", + "id": "to-create-a-placement-group-1472712245768", + "title": "To create a placement group" + } + ], + "CreateRoute": [ + { + "input": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": "igw-c0a643a9", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a route for the specified route table. The route matches all traffic (0.0.0.0/0) and routes it to the specified Internet gateway.", + "id": "ec2-create-route-1", + "title": "To create a route" + } + ], + "CreateRouteTable": [ + { + "input": { + "VpcId": "vpc-a01106c2" + }, + "output": { + "RouteTable": { + "Associations": [ + + ], + "PropagatingVgws": [ + + ], + "RouteTableId": "rtb-22574640", + "Routes": [ + { + "DestinationCidrBlock": "10.0.0.0/16", + "GatewayId": "local", + "State": "active" + } + ], + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a route table for the specified VPC.", + "id": "ec2-create-route-table-1", + "title": "To create a route table" + } + ], + "CreateSnapshot": [ + { + "input": { + "Description": "This is my root volume snapshot.", + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + "Description": "This is my root volume snapshot.", + "OwnerId": "012345678910", + "SnapshotId": "snap-066877671789bd71b", + "StartTime": "2014-02-28T21:06:01.000Z", + "State": "pending", + "Tags": [ + + ], + "VolumeId": "vol-1234567890abcdef0", + "VolumeSize": 8 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a snapshot of the volume with a volume ID of ``vol-1234567890abcdef0`` and a short description to identify the snapshot.", + "id": "to-create-a-snapshot-1472502529790", + "title": "To create a snapshot" + } + ], + "CreateSpotDatafeedSubscription": [ + { + "input": { + "Bucket": "my-s3-bucket", + "Prefix": "spotdata" + }, + "output": { + "SpotDatafeedSubscription": { + "Bucket": "my-s3-bucket", + "OwnerId": "123456789012", + "Prefix": "spotdata", + "State": "Active" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot Instance data feed for your AWS account.", + "id": "ec2-create-spot-datafeed-subscription-1", + "title": "To create a Spot Instance datafeed" + } + ], + "CreateSubnet": [ + { + "input": { + "CidrBlock": "10.0.1.0/24", + "VpcId": "vpc-a01106c2" + }, + "output": { + "Subnet": { + "AvailabilityZone": "us-west-2c", + "AvailableIpAddressCount": 251, + "CidrBlock": "10.0.1.0/24", + "State": "pending", + "SubnetId": "subnet-9d4a7b6c", + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a subnet in the specified VPC with the specified CIDR block. We recommend that you let us select an Availability Zone for you.", + "id": "ec2-create-subnet-1", + "title": "To create a subnet" + } + ], + "CreateTags": [ + { + "input": { + "Resources": [ + "ami-78a54011" + ], + "Tags": [ + { + "Key": "Stack", + "Value": "production" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds the tag Stack=production to the specified image, or overwrites an existing tag for the AMI where the tag key is Stack.", + "id": "ec2-create-tags-1", + "title": "To add a tag to a resource" + } + ], + "CreateVolume": [ + { + "input": { + "AvailabilityZone": "us-east-1a", + "Size": 80, + "VolumeType": "gp2" + }, + "output": { + "AvailabilityZone": "us-east-1a", + "CreateTime": "2016-08-29T18:52:32.724Z", + "Encrypted": false, + "Iops": 240, + "Size": 80, + "SnapshotId": "", + "State": "creating", + "VolumeId": "vol-6b60b7c7", + "VolumeType": "gp2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an 80 GiB General Purpose (SSD) volume in the Availability Zone ``us-east-1a``.", + "id": "to-create-a-new-volume-1472496724296", + "title": "To create a new volume" + }, + { + "input": { + "AvailabilityZone": "us-east-1a", + "Iops": 1000, + "SnapshotId": "snap-066877671789bd71b", + "VolumeType": "io1" + }, + "output": { + "Attachments": [ + + ], + "AvailabilityZone": "us-east-1a", + "CreateTime": "2016-08-29T18:52:32.724Z", + "Iops": 1000, + "Size": 500, + "SnapshotId": "snap-066877671789bd71b", + "State": "creating", + "Tags": [ + + ], + "VolumeId": "vol-1234567890abcdef0", + "VolumeType": "io1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a new Provisioned IOPS (SSD) volume with 1000 provisioned IOPS from a snapshot in the Availability Zone ``us-east-1a``.", + "id": "to-create-a-new-provisioned-iops-ssd-volume-from-a-snapshot-1472498975176", + "title": "To create a new Provisioned IOPS (SSD) volume from a snapshot" + } + ], + "CreateVpc": [ + { + "input": { + "CidrBlock": "10.0.0.0/16" + }, + "output": { + "Vpc": { + "CidrBlock": "10.0.0.0/16", + "DhcpOptionsId": "dopt-7a8b9c2d", + "InstanceTenancy": "default", + "State": "pending", + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a VPC with the specified CIDR block.", + "id": "ec2-create-vpc-1", + "title": "To create a VPC" + } + ], + "DeleteCustomerGateway": [ + { + "input": { + "CustomerGatewayId": "cgw-0e11f167" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified customer gateway.", + "id": "ec2-delete-customer-gateway-1", + "title": "To delete a customer gateway" + } + ], + "DeleteDhcpOptions": [ + { + "input": { + "DhcpOptionsId": "dopt-d9070ebb" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified DHCP options set.", + "id": "ec2-delete-dhcp-options-1", + "title": "To delete a DHCP options set" + } + ], + "DeleteInternetGateway": [ + { + "input": { + "InternetGatewayId": "igw-c0a643a9" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified Internet gateway.", + "id": "ec2-delete-internet-gateway-1", + "title": "To delete an Internet gateway" + } + ], + "DeleteKeyPair": [ + { + "input": { + "KeyName": "my-key-pair" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified key pair.", + "id": "ec2-delete-key-pair-1", + "title": "To delete a key pair" + } + ], + "DeleteNatGateway": [ + { + "input": { + "NatGatewayId": "nat-04ae55e711cec5680" + }, + "output": { + "NatGatewayId": "nat-04ae55e711cec5680" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified NAT gateway.", + "id": "ec2-delete-nat-gateway-1", + "title": "To delete a NAT gateway" + } + ], + "DeleteNetworkAcl": [ + { + "input": { + "NetworkAclId": "acl-5fb85d36" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified network ACL.", + "id": "ec2-delete-network-acl-1", + "title": "To delete a network ACL" + } + ], + "DeleteNetworkAclEntry": [ + { + "input": { + "Egress": true, + "NetworkAclId": "acl-5fb85d36", + "RuleNumber": 100 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes ingress rule number 100 from the specified network ACL.", + "id": "ec2-delete-network-acl-entry-1", + "title": "To delete a network ACL entry" + } + ], + "DeleteNetworkInterface": [ + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified network interface.", + "id": "ec2-delete-network-interface-1", + "title": "To delete a network interface" + } + ], + "DeletePlacementGroup": [ + { + "input": { + "GroupName": "my-cluster" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified placement group.\n", + "id": "to-delete-a-placement-group-1472712349959", + "title": "To delete a placement group" + } + ], + "DeleteRoute": [ + { + "input": { + "DestinationCidrBlock": "0.0.0.0/0", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified route from the specified route table.", + "id": "ec2-delete-route-1", + "title": "To delete a route" + } + ], + "DeleteRouteTable": [ + { + "input": { + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified route table.", + "id": "ec2-delete-route-table-1", + "title": "To delete a route table" + } + ], + "DeleteSnapshot": [ + { + "input": { + "SnapshotId": "snap-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes a snapshot with the snapshot ID of ``snap-1234567890abcdef0``. If the command succeeds, no output is returned.", + "id": "to-delete-a-snapshot-1472503042567", + "title": "To delete a snapshot" + } + ], + "DeleteSpotDatafeedSubscription": [ + { + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes a Spot data feed subscription for the account.", + "id": "ec2-delete-spot-datafeed-subscription-1", + "title": "To cancel a Spot Instance data feed subscription" + } + ], + "DeleteSubnet": [ + { + "input": { + "SubnetId": "subnet-9d4a7b6c" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified subnet.", + "id": "ec2-delete-subnet-1", + "title": "To delete a subnet" + } + ], + "DeleteTags": [ + { + "input": { + "Resources": [ + "ami-78a54011" + ], + "Tags": [ + { + "Key": "Stack", + "Value": "test" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the tag Stack=test from the specified image.", + "id": "ec2-delete-tags-1", + "title": "To delete a tag from a resource" + } + ], + "DeleteVolume": [ + { + "input": { + "VolumeId": "vol-049df61146c4d7901" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes an available volume with the volume ID of ``vol-049df61146c4d7901``. If the command succeeds, no output is returned.", + "id": "to-delete-a-volume-1472503111160", + "title": "To delete a volume" + } + ], + "DeleteVpc": [ + { + "input": { + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified VPC.", + "id": "ec2-delete-vpc-1", + "title": "To delete a VPC" + } + ], + "DescribeAccountAttributes": [ + { + "input": { + "AttributeNames": [ + "supported-platforms" + ] + }, + "output": { + "AccountAttributes": [ + { + "AttributeName": "supported-platforms", + "AttributeValues": [ + { + "AttributeValue": "EC2" + }, + { + "AttributeValue": "VPC" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the supported-platforms attribute for your AWS account.", + "id": "ec2-describe-account-attributes-1", + "title": "To describe a single attribute for your AWS account" + }, + { + "output": { + "AccountAttributes": [ + { + "AttributeName": "supported-platforms", + "AttributeValues": [ + { + "AttributeValue": "EC2" + }, + { + "AttributeValue": "VPC" + } + ] + }, + { + "AttributeName": "vpc-max-security-groups-per-interface", + "AttributeValues": [ + { + "AttributeValue": "5" + } + ] + }, + { + "AttributeName": "max-elastic-ips", + "AttributeValues": [ + { + "AttributeValue": "5" + } + ] + }, + { + "AttributeName": "max-instances", + "AttributeValues": [ + { + "AttributeValue": "20" + } + ] + }, + { + "AttributeName": "vpc-max-elastic-ips", + "AttributeValues": [ + { + "AttributeValue": "5" + } + ] + }, + { + "AttributeName": "default-vpc", + "AttributeValues": [ + { + "AttributeValue": "none" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the attributes for your AWS account.", + "id": "ec2-describe-account-attributes-2", + "title": "To describe all attributes for your AWS account" + } + ], + "DescribeAddresses": [ + { + "output": { + "Addresses": [ + { + "Domain": "standard", + "InstanceId": "i-1234567890abcdef0", + "PublicIp": "198.51.100.0" + }, + { + "AllocationId": "eipalloc-12345678", + "AssociationId": "eipassoc-12345678", + "Domain": "vpc", + "InstanceId": "i-1234567890abcdef0", + "NetworkInterfaceId": "eni-12345678", + "NetworkInterfaceOwnerId": "123456789012", + "PrivateIpAddress": "10.0.1.241", + "PublicIp": "203.0.113.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes your Elastic IP addresses.", + "id": "ec2-describe-addresses-1", + "title": "To describe your Elastic IP addresses" + }, + { + "input": { + "Filters": [ + { + "Name": "domain", + "Values": [ + "vpc" + ] + } + ] + }, + "output": { + "Addresses": [ + { + "AllocationId": "eipalloc-12345678", + "AssociationId": "eipassoc-12345678", + "Domain": "vpc", + "InstanceId": "i-1234567890abcdef0", + "NetworkInterfaceId": "eni-12345678", + "NetworkInterfaceOwnerId": "123456789012", + "PrivateIpAddress": "10.0.1.241", + "PublicIp": "203.0.113.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes your Elastic IP addresses for use with instances in a VPC.", + "id": "ec2-describe-addresses-2", + "title": "To describe your Elastic IP addresses for EC2-VPC" + }, + { + "input": { + "Filters": [ + { + "Name": "domain", + "Values": [ + "standard" + ] + } + ] + }, + "output": { + "Addresses": [ + { + "Domain": "standard", + "InstanceId": "i-1234567890abcdef0", + "PublicIp": "198.51.100.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes your Elastic IP addresses for use with instances in EC2-Classic.", + "id": "ec2-describe-addresses-3", + "title": "To describe your Elastic IP addresses for EC2-Classic" + } + ], + "DescribeAvailabilityZones": [ + { + "output": { + "AvailabilityZones": [ + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1b" + }, + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1c" + }, + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1d" + }, + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1e" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Availability Zones that are available to you. The response includes Availability Zones only for the current region.", + "id": "ec2-describe-availability-zones-1", + "title": "To describe your Availability Zones" + } + ], + "DescribeCustomerGateways": [ + { + "input": { + "CustomerGatewayIds": [ + "cgw-0e11f167" + ] + }, + "output": { + "CustomerGateways": [ + { + "BgpAsn": "65534", + "CustomerGatewayId": "cgw-0e11f167", + "IpAddress": "12.1.2.3", + "State": "available", + "Type": "ipsec.1" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified customer gateway.", + "id": "ec2-describe-customer-gateways-1", + "title": "To describe a customer gateway" + } + ], + "DescribeDhcpOptions": [ + { + "input": { + "DhcpOptionsIds": [ + "dopt-d9070ebb" + ] + }, + "output": { + "DhcpOptions": [ + { + "DhcpConfigurations": [ + { + "Key": "domain-name-servers", + "Values": [ + "10.2.5.2", + "10.2.5.1" + ] + } + ], + "DhcpOptionsId": "dopt-d9070ebb" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified DHCP options set.", + "id": "ec2-describe-dhcp-options-1", + "title": "To describe a DHCP options set" + } + ], + "DescribeInstanceAttribute": [ + { + "input": { + "Attribute": "instanceType", + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + "InstanceId": "i-1234567890abcdef0", + "InstanceType": { + "Value": "t1.micro" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the instance type of the specified instance.\n", + "id": "to-describe-the-instance-type-1472712432132", + "title": "To describe the instance type" + }, + { + "input": { + "Attribute": "disableApiTermination", + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + "DisableApiTermination": { + "Value": "false" + }, + "InstanceId": "i-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``disableApiTermination`` attribute of the specified instance.\n", + "id": "to-describe-the-disableapitermination-attribute-1472712533466", + "title": "To describe the disableApiTermination attribute" + }, + { + "input": { + "Attribute": "blockDeviceMapping", + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/sda1", + "Ebs": { + "AttachTime": "2013-05-17T22:42:34.000Z", + "DeleteOnTermination": true, + "Status": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + }, + { + "DeviceName": "/dev/sdf", + "Ebs": { + "AttachTime": "2013-09-10T23:07:00.000Z", + "DeleteOnTermination": false, + "Status": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + } + ], + "InstanceId": "i-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``blockDeviceMapping`` attribute of the specified instance.\n", + "id": "to-describe-the-block-device-mapping-for-an-instance-1472712645423", + "title": "To describe the block device mapping for an instance" + } + ], + "DescribeInternetGateways": [ + { + "input": { + "Filters": [ + { + "Name": "attachment.vpc-id", + "Values": [ + "vpc-a01106c2" + ] + } + ] + }, + "output": { + "InternetGateways": [ + { + "Attachments": [ + { + "State": "available", + "VpcId": "vpc-a01106c2" + } + ], + "InternetGatewayId": "igw-c0a643a9", + "Tags": [ + + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Internet gateway for the specified VPC.", + "id": "ec2-describe-internet-gateways-1", + "title": "To describe the Internet gateway for a VPC" + } + ], + "DescribeKeyPairs": [ + { + "input": { + "KeyNames": [ + "my-key-pair" + ] + }, + "output": { + "KeyPairs": [ + { + "KeyFingerprint": "1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f", + "KeyName": "my-key-pair" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example displays the fingerprint for the specified key.", + "id": "ec2-describe-key-pairs-1", + "title": "To display a key pair" + } + ], + "DescribeMovingAddresses": [ + { + "output": { + "MovingAddressStatuses": [ + { + "MoveStatus": "MovingToVpc", + "PublicIp": "198.51.100.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all of your moving Elastic IP addresses.", + "id": "ec2-describe-moving-addresses-1", + "title": "To describe your moving addresses" + } + ], + "DescribeNatGateways": [ + { + "input": { + "Filters": [ + { + "Name": "vpc-id", + "Values": [ + "vpc-1a2b3c4d" + ] + } + ] + }, + "output": { + "NatGateways": [ + { + "CreateTime": "2015-12-01T12:26:55.983Z", + "NatGatewayAddresses": [ + { + "AllocationId": "eipalloc-89c620ec", + "NetworkInterfaceId": "eni-9dec76cd", + "PrivateIp": "10.0.0.149", + "PublicIp": "198.11.222.333" + } + ], + "NatGatewayId": "nat-05dba92075d71c408", + "State": "available", + "SubnetId": "subnet-847e4dc2", + "VpcId": "vpc-1a2b3c4d" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the NAT gateway for the specified VPC.", + "id": "ec2-describe-nat-gateways-1", + "title": "To describe a NAT gateway" + } + ], + "DescribeNetworkAcls": [ + { + "input": { + "NetworkAclIds": [ + "acl-5fb85d36" + ] + }, + "output": { + "NetworkAcls": [ + { + "Associations": [ + { + "NetworkAclAssociationId": "aclassoc-66ea5f0b", + "NetworkAclId": "acl-9aeb5ef7", + "SubnetId": "subnet-65ea5f08" + } + ], + "Entries": [ + { + "CidrBlock": "0.0.0.0/0", + "Egress": true, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + }, + { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + } + ], + "IsDefault": false, + "NetworkAclId": "acl-5fb85d36", + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified network ACL.", + "id": "ec2-", + "title": "To describe a network ACL" + } + ], + "DescribeNetworkInterfaceAttribute": [ + { + "input": { + "Attribute": "attachment", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "Attachment": { + "AttachTime": "2015-05-21T20:02:20.000Z", + "AttachmentId": "eni-attach-43348162", + "DeleteOnTermination": true, + "DeviceIndex": 0, + "InstanceId": "i-1234567890abcdef0", + "InstanceOwnerId": "123456789012", + "Status": "attached" + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the attachment attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-1", + "title": "To describe the attachment attribute of a network interface" + }, + { + "input": { + "Attribute": "description", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "Description": { + "Value": "My description" + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the description attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-2", + "title": "To describe the description attribute of a network interface" + }, + { + "input": { + "Attribute": "groupSet", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "Groups": [ + { + "GroupId": "sg-903004f8", + "GroupName": "my-security-group" + } + ], + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the groupSet attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-3", + "title": "To describe the groupSet attribute of a network interface" + }, + { + "input": { + "Attribute": "sourceDestCheck", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "NetworkInterfaceId": "eni-686ea200", + "SourceDestCheck": { + "Value": true + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the sourceDestCheck attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-4", + "title": "To describe the sourceDestCheck attribute of a network interface" + } + ], + "DescribeNetworkInterfaces": [ + { + "input": { + "NetworkInterfaceIds": [ + "eni-e5aa89a3" + ] + }, + "output": { + "NetworkInterfaces": [ + { + "Association": { + "AssociationId": "eipassoc-0fbb766a", + "IpOwnerId": "123456789012", + "PublicDnsName": "ec2-203-0-113-12.compute-1.amazonaws.com", + "PublicIp": "203.0.113.12" + }, + "Attachment": { + "AttachTime": "2013-11-30T23:36:42.000Z", + "AttachmentId": "eni-attach-66c4350a", + "DeleteOnTermination": false, + "DeviceIndex": 1, + "InstanceId": "i-1234567890abcdef0", + "InstanceOwnerId": "123456789012", + "Status": "attached" + }, + "AvailabilityZone": "us-east-1d", + "Description": "my network interface", + "Groups": [ + { + "GroupId": "sg-8637d3e3", + "GroupName": "default" + } + ], + "MacAddress": "02:2f:8f:b0:cf:75", + "NetworkInterfaceId": "eni-e5aa89a3", + "OwnerId": "123456789012", + "PrivateDnsName": "ip-10-0-1-17.ec2.internal", + "PrivateIpAddress": "10.0.1.17", + "PrivateIpAddresses": [ + { + "Association": { + "AssociationId": "eipassoc-0fbb766a", + "IpOwnerId": "123456789012", + "PublicDnsName": "ec2-203-0-113-12.compute-1.amazonaws.com", + "PublicIp": "203.0.113.12" + }, + "Primary": true, + "PrivateDnsName": "ip-10-0-1-17.ec2.internal", + "PrivateIpAddress": "10.0.1.17" + } + ], + "RequesterManaged": false, + "SourceDestCheck": true, + "Status": "in-use", + "SubnetId": "subnet-b61f49f0", + "TagSet": [ + + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "ec2-describe-network-interfaces-1", + "title": "To describe a network interface" + } + ], + "DescribeRegions": [ + { + "output": { + "Regions": [ + { + "Endpoint": "ec2.ap-south-1.amazonaws.com", + "RegionName": "ap-south-1" + }, + { + "Endpoint": "ec2.eu-west-1.amazonaws.com", + "RegionName": "eu-west-1" + }, + { + "Endpoint": "ec2.ap-southeast-1.amazonaws.com", + "RegionName": "ap-southeast-1" + }, + { + "Endpoint": "ec2.ap-southeast-2.amazonaws.com", + "RegionName": "ap-southeast-2" + }, + { + "Endpoint": "ec2.eu-central-1.amazonaws.com", + "RegionName": "eu-central-1" + }, + { + "Endpoint": "ec2.ap-northeast-2.amazonaws.com", + "RegionName": "ap-northeast-2" + }, + { + "Endpoint": "ec2.ap-northeast-1.amazonaws.com", + "RegionName": "ap-northeast-1" + }, + { + "Endpoint": "ec2.us-east-1.amazonaws.com", + "RegionName": "us-east-1" + }, + { + "Endpoint": "ec2.sa-east-1.amazonaws.com", + "RegionName": "sa-east-1" + }, + { + "Endpoint": "ec2.us-west-1.amazonaws.com", + "RegionName": "us-west-1" + }, + { + "Endpoint": "ec2.us-west-2.amazonaws.com", + "RegionName": "us-west-2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all the regions that are available to you.", + "id": "ec2-describe-regions-1", + "title": "To describe your regions" + } + ], + "DescribeRouteTables": [ + { + "input": { + "RouteTableIds": [ + "rtb-1f382e7d" + ] + }, + "output": { + "RouteTables": [ + { + "Associations": [ + { + "Main": true, + "RouteTableAssociationId": "rtbassoc-d8ccddba", + "RouteTableId": "rtb-1f382e7d" + } + ], + "PropagatingVgws": [ + + ], + "RouteTableId": "rtb-1f382e7d", + "Routes": [ + { + "DestinationCidrBlock": "10.0.0.0/16", + "GatewayId": "local", + "State": "active" + } + ], + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified route table.", + "id": "ec2-describe-route-tables-1", + "title": "To describe a route table" + } + ], + "DescribeScheduledInstanceAvailability": [ + { + "input": { + "FirstSlotStartTimeRange": { + "EarliestTime": "2016-01-31T00:00:00Z", + "LatestTime": "2016-01-31T04:00:00Z" + }, + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDays": [ + 1 + ] + } + }, + "output": { + "ScheduledInstanceAvailabilitySet": [ + { + "AvailabilityZone": "us-west-2b", + "AvailableInstanceCount": 20, + "FirstSlotStartTime": "2016-01-31T00:00:00Z", + "HourlyPrice": "0.095", + "InstanceType": "c4.large", + "MaxTermDurationInDays": 366, + "MinTermDurationInDays": 366, + "NetworkPlatform": "EC2-VPC", + "Platform": "Linux/UNIX", + "PurchaseToken": "eyJ2IjoiMSIsInMiOjEsImMiOi...", + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDaySet": [ + 1 + ], + "OccurrenceRelativeToEnd": false + }, + "SlotDurationInHours": 23, + "TotalScheduledInstanceHours": 1219 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes a schedule that occurs every week on Sunday, starting on the specified date. Note that the output contains a single schedule as an example.", + "id": "ec2-describe-scheduled-instance-availability-1", + "title": "To describe an available schedule" + } + ], + "DescribeScheduledInstances": [ + { + "input": { + "ScheduledInstanceIds": [ + "sci-1234-1234-1234-1234-123456789012" + ] + }, + "output": { + "ScheduledInstanceSet": [ + { + "AvailabilityZone": "us-west-2b", + "CreateDate": "2016-01-25T21:43:38.612Z", + "HourlyPrice": "0.095", + "InstanceCount": 1, + "InstanceType": "c4.large", + "NetworkPlatform": "EC2-VPC", + "NextSlotStartTime": "2016-01-31T09:00:00Z", + "Platform": "Linux/UNIX", + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDaySet": [ + 1 + ], + "OccurrenceRelativeToEnd": false, + "OccurrenceUnit": "" + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012", + "SlotDurationInHours": 32, + "TermEndDate": "2017-01-31T09:00:00Z", + "TermStartDate": "2016-01-31T09:00:00Z", + "TotalScheduledInstanceHours": 1696 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Scheduled Instance.", + "id": "ec2-describe-scheduled-instances-1", + "title": "To describe your Scheduled Instances" + } + ], + "DescribeSnapshotAttribute": [ + { + "input": { + "Attribute": "createVolumePermission", + "SnapshotId": "snap-066877671789bd71b" + }, + "output": { + "CreateVolumePermissions": [ + + ], + "SnapshotId": "snap-066877671789bd71b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``createVolumePermission`` attribute on a snapshot with the snapshot ID of ``snap-066877671789bd71b``.", + "id": "to-describe-snapshot-attributes-1472503199736", + "title": "To describe snapshot attributes" + } + ], + "DescribeSnapshots": [ + { + "input": { + "SnapshotIds": [ + "snap-1234567890abcdef0" + ] + }, + "output": { + "NextToken": "", + "Snapshots": [ + { + "Description": "This is my snapshot.", + "OwnerId": "012345678910", + "Progress": "100%", + "SnapshotId": "snap-1234567890abcdef0", + "StartTime": "2014-02-28T21:28:32.000Z", + "State": "completed", + "VolumeId": "vol-049df61146c4d7901", + "VolumeSize": 8 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes a snapshot with the snapshot ID of ``snap-1234567890abcdef0``.", + "id": "to-describe-a-snapshot-1472503807850", + "title": "To describe a snapshot" + }, + { + "input": { + "Filters": [ + { + "Name": "status", + "Values": [ + "pending" + ] + } + ], + "OwnerIds": [ + "012345678910" + ] + }, + "output": { + "NextToken": "", + "Snapshots": [ + { + "Description": "This is my copied snapshot.", + "OwnerId": "012345678910", + "Progress": "87%", + "SnapshotId": "snap-066877671789bd71b", + "StartTime": "2014-02-28T21:37:27.000Z", + "State": "pending", + "VolumeId": "vol-1234567890abcdef0", + "VolumeSize": 8 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all snapshots owned by the ID 012345678910 that are in the ``pending`` status.", + "id": "to-describe-snapshots-using-filters-1472503929793", + "title": "To describe snapshots using filters" + } + ], + "DescribeSpotDatafeedSubscription": [ + { + "output": { + "SpotDatafeedSubscription": { + "Bucket": "my-s3-bucket", + "OwnerId": "123456789012", + "Prefix": "spotdata", + "State": "Active" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Spot Instance datafeed subscription for your AWS account.", + "id": "ec2-describe-spot-datafeed-subscription-1", + "title": "To describe the datafeed for your AWS account" + } + ], + "DescribeSpotFleetInstances": [ + { + "input": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "output": { + "ActiveInstances": [ + { + "InstanceId": "i-1234567890abcdef0", + "InstanceType": "m3.medium", + "SpotInstanceRequestId": "sir-08b93456" + } + ], + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists the Spot Instances associated with the specified Spot fleet.", + "id": "ec2-describe-spot-fleet-instances-1", + "title": "To describe the Spot Instances associated with a Spot fleet" + } + ], + "DescribeSpotFleetRequestHistory": [ + { + "input": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "StartTime": "2015-05-26T00:00:00Z" + }, + "output": { + "HistoryRecords": [ + { + "EventInformation": { + "EventSubType": "submitted" + }, + "EventType": "fleetRequestChange", + "Timestamp": "2015-05-26T23:17:20.697Z" + }, + { + "EventInformation": { + "EventSubType": "active" + }, + "EventType": "fleetRequestChange", + "Timestamp": "2015-05-26T23:17:20.873Z" + }, + { + "EventInformation": { + "EventSubType": "launched", + "InstanceId": "i-1234567890abcdef0" + }, + "EventType": "instanceChange", + "Timestamp": "2015-05-26T23:21:21.712Z" + }, + { + "EventInformation": { + "EventSubType": "launched", + "InstanceId": "i-1234567890abcdef1" + }, + "EventType": "instanceChange", + "Timestamp": "2015-05-26T23:21:21.816Z" + } + ], + "NextToken": "CpHNsscimcV5oH7bSbub03CI2Qms5+ypNpNm+53MNlR0YcXAkp0xFlfKf91yVxSExmbtma3awYxMFzNA663ZskT0AHtJ6TCb2Z8bQC2EnZgyELbymtWPfpZ1ZbauVg+P+TfGlWxWWB/Vr5dk5d4LfdgA/DRAHUrYgxzrEXAMPLE=", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "StartTime": "2015-05-26T00:00:00Z" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example returns the history for the specified Spot fleet starting at the specified time.", + "id": "ec2-describe-spot-fleet-request-history-1", + "title": "To describe Spot fleet history" + } + ], + "DescribeSpotFleetRequests": [ + { + "input": { + "SpotFleetRequestIds": [ + "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + ] + }, + "output": { + "SpotFleetRequestConfigs": [ + { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "EbsOptimized": false, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "cc2.8xlarge", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeleteOnTermination": false, + "DeviceIndex": 0, + "SecondaryPrivateIpAddressCount": 0, + "SubnetId": "subnet-a61dafcf" + } + ] + }, + { + "EbsOptimized": false, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "r3.8xlarge", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeleteOnTermination": false, + "DeviceIndex": 0, + "SecondaryPrivateIpAddressCount": 0, + "SubnetId": "subnet-a61dafcf" + } + ] + } + ], + "SpotPrice": "0.05", + "TargetCapacity": 20 + }, + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "SpotFleetRequestState": "active" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Spot fleet request.", + "id": "ec2-describe-spot-fleet-requests-1", + "title": "To describe a Spot fleet request" + } + ], + "DescribeSpotInstanceRequests": [ + { + "input": { + "SpotInstanceRequestIds": [ + "sir-08b93456" + ] + }, + "output": { + "SpotInstanceRequests": [ + { + "CreateTime": "2014-04-30T18:14:55.000Z", + "InstanceId": "i-1234567890abcdef0", + "LaunchSpecification": { + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/sda1", + "Ebs": { + "DeleteOnTermination": true, + "VolumeSize": 8, + "VolumeType": "standard" + } + } + ], + "EbsOptimized": false, + "ImageId": "ami-7aba833f", + "InstanceType": "m1.small", + "KeyName": "my-key-pair", + "SecurityGroups": [ + { + "GroupId": "sg-e38f24a7", + "GroupName": "my-security-group" + } + ] + }, + "LaunchedAvailabilityZone": "us-west-1b", + "ProductDescription": "Linux/UNIX", + "SpotInstanceRequestId": "sir-08b93456", + "SpotPrice": "0.010000", + "State": "active", + "Status": { + "Code": "fulfilled", + "Message": "Your Spot request is fulfilled.", + "UpdateTime": "2014-04-30T18:16:21.000Z" + }, + "Type": "one-time" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Spot Instance request.", + "id": "ec2-describe-spot-instance-requests-1", + "title": "To describe a Spot Instance request" + } + ], + "DescribeSpotPriceHistory": [ + { + "input": { + "EndTime": "2014-01-06T08:09:10", + "InstanceTypes": [ + "m1.xlarge" + ], + "ProductDescriptions": [ + "Linux/UNIX (Amazon VPC)" + ], + "StartTime": "2014-01-06T07:08:09" + }, + "output": { + "SpotPriceHistory": [ + { + "AvailabilityZone": "us-west-1a", + "InstanceType": "m1.xlarge", + "ProductDescription": "Linux/UNIX (Amazon VPC)", + "SpotPrice": "0.080000", + "Timestamp": "2014-01-06T04:32:53.000Z" + }, + { + "AvailabilityZone": "us-west-1c", + "InstanceType": "m1.xlarge", + "ProductDescription": "Linux/UNIX (Amazon VPC)", + "SpotPrice": "0.080000", + "Timestamp": "2014-01-05T11:28:26.000Z" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example returns the Spot Price history for m1.xlarge, Linux/UNIX (Amazon VPC) instances for a particular day in January.", + "id": "ec2-describe-spot-price-history-1", + "title": "To describe Spot price history for Linux/UNIX (Amazon VPC)" + } + ], + "DescribeSubnets": [ + { + "input": { + "Filters": [ + { + "Name": "vpc-id", + "Values": [ + "vpc-a01106c2" + ] + } + ] + }, + "output": { + "Subnets": [ + { + "AvailabilityZone": "us-east-1c", + "AvailableIpAddressCount": 251, + "CidrBlock": "10.0.1.0/24", + "DefaultForAz": false, + "MapPublicIpOnLaunch": false, + "State": "available", + "SubnetId": "subnet-9d4a7b6c", + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the subnets for the specified VPC.", + "id": "ec2-describe-subnets-1", + "title": "To describe the subnets for a VPC" + } + ], + "DescribeTags": [ + { + "input": { + "Filters": [ + { + "Name": "resource-id", + "Values": [ + "i-1234567890abcdef8" + ] + } + ] + }, + "output": { + "Tags": [ + { + "Key": "Stack", + "ResourceId": "i-1234567890abcdef8", + "ResourceType": "instance", + "Value": "test" + }, + { + "Key": "Name", + "ResourceId": "i-1234567890abcdef8", + "ResourceType": "instance", + "Value": "Beta Server" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the tags for the specified instance.", + "id": "ec2-describe-tags-1", + "title": "To describe the tags for a single resource" + } + ], + "DescribeVolumeAttribute": [ + { + "input": { + "Attribute": "autoEnableIO", + "VolumeId": "vol-049df61146c4d7901" + }, + "output": { + "AutoEnableIO": { + "Value": false + }, + "VolumeId": "vol-049df61146c4d7901" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``autoEnableIo`` attribute of the volume with the ID ``vol-049df61146c4d7901``.", + "id": "to-describe-a-volume-attribute-1472505773492", + "title": "To describe a volume attribute" + } + ], + "DescribeVolumeStatus": [ + { + "input": { + "VolumeIds": [ + "vol-1234567890abcdef0" + ] + }, + "output": { + "VolumeStatuses": [ + { + "Actions": [ + + ], + "AvailabilityZone": "us-east-1a", + "Events": [ + + ], + "VolumeId": "vol-1234567890abcdef0", + "VolumeStatus": { + "Details": [ + { + "Name": "io-enabled", + "Status": "passed" + }, + { + "Name": "io-performance", + "Status": "not-applicable" + } + ], + "Status": "ok" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the status for the volume ``vol-1234567890abcdef0``.", + "id": "to-describe-the-status-of-a-single-volume-1472507016193", + "title": "To describe the status of a single volume" + }, + { + "input": { + "Filters": [ + { + "Name": "volume-status.status", + "Values": [ + "impaired" + ] + } + ] + }, + "output": { + "VolumeStatuses": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the status for all volumes that are impaired. In this example output, there are no impaired volumes.", + "id": "to-describe-the-status-of-impaired-volumes-1472507239821", + "title": "To describe the status of impaired volumes" + } + ], + "DescribeVolumes": [ + { + "input": { + }, + "output": { + "NextToken": "", + "Volumes": [ + { + "Attachments": [ + { + "AttachTime": "2013-12-18T22:35:00.000Z", + "DeleteOnTermination": true, + "Device": "/dev/sda1", + "InstanceId": "i-1234567890abcdef0", + "State": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + ], + "AvailabilityZone": "us-east-1a", + "CreateTime": "2013-12-18T22:35:00.084Z", + "Size": 8, + "SnapshotId": "snap-1234567890abcdef0", + "State": "in-use", + "VolumeId": "vol-049df61146c4d7901", + "VolumeType": "standard" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all of your volumes in the default region.", + "id": "to-describe-all-volumes-1472506358883", + "title": "To describe all volumes" + }, + { + "input": { + "Filters": [ + { + "Name": "attachment.instance-id", + "Values": [ + "i-1234567890abcdef0" + ] + }, + { + "Name": "attachment.delete-on-termination", + "Values": [ + "true" + ] + } + ] + }, + "output": { + "Volumes": [ + { + "Attachments": [ + { + "AttachTime": "2013-12-18T22:35:00.000Z", + "DeleteOnTermination": true, + "Device": "/dev/sda1", + "InstanceId": "i-1234567890abcdef0", + "State": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + ], + "AvailabilityZone": "us-east-1a", + "CreateTime": "2013-12-18T22:35:00.084Z", + "Size": 8, + "SnapshotId": "snap-1234567890abcdef0", + "State": "in-use", + "VolumeId": "vol-049df61146c4d7901", + "VolumeType": "standard" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all volumes that are both attached to the instance with the ID i-1234567890abcdef0 and set to delete when the instance terminates.", + "id": "to-describe-volumes-that-are-attached-to-a-specific-instance-1472506613578", + "title": "To describe volumes that are attached to a specific instance" + } + ], + "DescribeVpcAttribute": [ + { + "input": { + "Attribute": "enableDnsSupport", + "VpcId": "vpc-a01106c2" + }, + "output": { + "EnableDnsSupport": { + "Value": true + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the enableDnsSupport attribute. This attribute indicates whether DNS resolution is enabled for the VPC. If this attribute is true, the Amazon DNS server resolves DNS hostnames for your instances to their corresponding IP addresses; otherwise, it does not.", + "id": "ec2-describe-vpc-attribute-1", + "title": "To describe the enableDnsSupport attribute" + }, + { + "input": { + "Attribute": "enableDnsHostnames", + "VpcId": "vpc-a01106c2" + }, + "output": { + "EnableDnsHostnames": { + "Value": true + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the enableDnsHostnames attribute. This attribute indicates whether the instances launched in the VPC get DNS hostnames. If this attribute is true, instances in the VPC get DNS hostnames; otherwise, they do not.", + "id": "ec2-describe-vpc-attribute-2", + "title": "To describe the enableDnsHostnames attribute" + } + ], + "DescribeVpcs": [ + { + "input": { + "VpcIds": [ + "vpc-a01106c2" + ] + }, + "output": { + "Vpcs": [ + { + "CidrBlock": "10.0.0.0/16", + "DhcpOptionsId": "dopt-7a8b9c2d", + "InstanceTenancy": "default", + "IsDefault": false, + "State": "available", + "Tags": [ + { + "Key": "Name", + "Value": "MyVPC" + } + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified VPC.", + "id": "ec2-describe-vpcs-1", + "title": "To describe a VPC" + } + ], + "DetachInternetGateway": [ + { + "input": { + "InternetGatewayId": "igw-c0a643a9", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified Internet gateway from the specified VPC.", + "id": "ec2-detach-internet-gateway-1", + "title": "To detach an Internet gateway from a VPC" + } + ], + "DetachNetworkInterface": [ + { + "input": { + "AttachmentId": "eni-attach-66c4350a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified network interface from its attached instance.", + "id": "ec2-detach-network-interface-1", + "title": "To detach a network interface from an instance" + } + ], + "DetachVolume": [ + { + "input": { + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + "AttachTime": "2014-02-27T19:23:06.000Z", + "Device": "/dev/sdb", + "InstanceId": "i-1234567890abcdef0", + "State": "detaching", + "VolumeId": "vol-049df61146c4d7901" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the volume (``vol-049df61146c4d7901``) from the instance it is attached to.", + "id": "to-detach-a-volume-from-an-instance-1472507977694", + "title": "To detach a volume from an instance" + } + ], + "DisableVgwRoutePropagation": [ + { + "input": { + "GatewayId": "vgw-9a4cacf3", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disables the specified virtual private gateway from propagating static routes to the specified route table.", + "id": "ec2-disable-vgw-route-propagation-1", + "title": "To disable route propagation" + } + ], + "DisassociateAddress": [ + { + "input": { + "AssociationId": "eipassoc-2bebb745" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disassociates an Elastic IP address from an instance in a VPC.", + "id": "ec2-disassociate-address-1", + "title": "To disassociate an Elastic IP address in EC2-VPC" + }, + { + "input": { + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disassociates an Elastic IP address from an instance in EC2-Classic.", + "id": "ec2-disassociate-address-2", + "title": "To disassociate an Elastic IP addresses in EC2-Classic" + } + ], + "DisassociateRouteTable": [ + { + "input": { + "AssociationId": "rtbassoc-781d0d1a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disassociates the specified route table from its associated subnet.", + "id": "ec2-disassociate-route-table-1", + "title": "To disassociate a route table" + } + ], + "EnableVgwRoutePropagation": [ + { + "input": { + "GatewayId": "vgw-9a4cacf3", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables the specified virtual private gateway to propagate static routes to the specified route table.", + "id": "ec2-enable-vgw-route-propagation-1", + "title": "To enable route propagation" + } + ], + "EnableVolumeIO": [ + { + "input": { + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + "Return": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables I/O on volume ``vol-1234567890abcdef0``.", + "id": "to-enable-io-for-a-volume-1472508114867", + "title": "To enable I/O for a volume" + } + ], + "ModifyNetworkInterfaceAttribute": [ + { + "input": { + "Attachment": { + "AttachmentId": "eni-attach-43348162", + "DeleteOnTermination": false + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the attachment attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-1", + "title": "To modify the attachment attribute of a network interface" + }, + { + "input": { + "Description": "My description", + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the description attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-2", + "title": "To modify the description attribute of a network interface" + }, + { + "input": { + "Groups": [ + "sg-903004f8", + "sg-1a2b3c4d" + ], + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command modifies the groupSet attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-3", + "title": "To modify the groupSet attribute of a network interface" + }, + { + "input": { + "NetworkInterfaceId": "eni-686ea200", + "SourceDestCheck": false + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command modifies the sourceDestCheck attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-4", + "title": "To modify the sourceDestCheck attribute of a network interface" + } + ], + "ModifySnapshotAttribute": [ + { + "input": { + "Attribute": "createVolumePermission", + "OperationType": "remove", + "SnapshotId": "snap-1234567890abcdef0", + "UserIds": [ + "123456789012" + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies snapshot ``snap-1234567890abcdef0`` to remove the create volume permission for a user with the account ID ``123456789012``. If the command succeeds, no output is returned.", + "id": "to-modify-a-snapshot-attribute-1472508385907", + "title": "To modify a snapshot attribute" + }, + { + "input": { + "Attribute": "createVolumePermission", + "GroupNames": [ + "all" + ], + "OperationType": "add", + "SnapshotId": "snap-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example makes the snapshot ``snap-1234567890abcdef0`` public.", + "id": "to-make-a-snapshot-public-1472508470529", + "title": "To make a snapshot public" + } + ], + "ModifySpotFleetRequest": [ + { + "input": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "TargetCapacity": 20 + }, + "output": { + "Return": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example increases the target capacity of the specified Spot fleet request.", + "id": "ec2-modify-spot-fleet-request-1", + "title": "To increase the target capacity of a Spot fleet request" + }, + { + "input": { + "ExcessCapacityTerminationPolicy": "NoTermination ", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "TargetCapacity": 10 + }, + "output": { + "Return": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example decreases the target capacity of the specified Spot fleet request without terminating any Spot Instances as a result.", + "id": "ec2-modify-spot-fleet-request-2", + "title": "To decrease the target capacity of a Spot fleet request" + } + ], + "ModifySubnetAttribute": [ + { + "input": { + "MapPublicIpOnLaunch": true, + "SubnetId": "subnet-1a2b3c4d" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the specified subnet so that all instances launched into this subnet are assigned a public IP address.", + "id": "ec2-modify-subnet-attribute-1", + "title": "To change a subnet's public IP addressing behavior" + } + ], + "ModifyVolumeAttribute": [ + { + "input": { + "AutoEnableIO": { + "Value": true + }, + "DryRun": true, + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example sets the ``autoEnableIo`` attribute of the volume with the ID ``vol-1234567890abcdef0`` to ``true``. If the command succeeds, no output is returned.", + "id": "to-modify-a-volume-attribute-1472508596749", + "title": "To modify a volume attribute" + } + ], + "ModifyVpcAttribute": [ + { + "input": { + "EnableDnsSupport": { + "Value": false + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the enableDnsSupport attribute. This attribute indicates whether DNS resolution is enabled for the VPC. If this attribute is true, the Amazon DNS server resolves DNS hostnames for instances in the VPC to their corresponding IP addresses; otherwise, it does not.", + "id": "ec2-modify-vpc-attribute-1", + "title": "To modify the enableDnsSupport attribute" + }, + { + "input": { + "EnableDnsHostnames": { + "Value": false + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the enableDnsHostnames attribute. This attribute indicates whether instances launched in the VPC get DNS hostnames. If this attribute is true, instances in the VPC get DNS hostnames; otherwise, they do not.", + "id": "ec2-modify-vpc-attribute-2", + "title": "To modify the enableDnsHostnames attribute" + } + ], + "MoveAddressToVpc": [ + { + "input": { + "PublicIp": "54.123.4.56" + }, + "output": { + "Status": "MoveInProgress" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example moves the specified Elastic IP address to the EC2-VPC platform.", + "id": "ec2-move-address-to-vpc-1", + "title": "To move an address to EC2-VPC" + } + ], + "PurchaseScheduledInstances": [ + { + "input": { + "PurchaseRequests": [ + { + "InstanceCount": 1, + "PurchaseToken": "eyJ2IjoiMSIsInMiOjEsImMiOi..." + } + ] + }, + "output": { + "ScheduledInstanceSet": [ + { + "AvailabilityZone": "us-west-2b", + "CreateDate": "2016-01-25T21:43:38.612Z", + "HourlyPrice": "0.095", + "InstanceCount": 1, + "InstanceType": "c4.large", + "NetworkPlatform": "EC2-VPC", + "NextSlotStartTime": "2016-01-31T09:00:00Z", + "Platform": "Linux/UNIX", + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDaySet": [ + 1 + ], + "OccurrenceRelativeToEnd": false, + "OccurrenceUnit": "" + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012", + "SlotDurationInHours": 32, + "TermEndDate": "2017-01-31T09:00:00Z", + "TermStartDate": "2016-01-31T09:00:00Z", + "TotalScheduledInstanceHours": 1696 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example purchases a Scheduled Instance.", + "id": "ec2-purchase-scheduled-instances-1", + "title": "To purchase a Scheduled Instance" + } + ], + "ReleaseAddress": [ + { + "input": { + "AllocationId": "eipalloc-64d5890a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example releases an Elastic IP address for use with instances in a VPC.", + "id": "ec2-release-address-1", + "title": "To release an Elastic IP address for EC2-VPC" + }, + { + "input": { + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example releases an Elastic IP address for use with instances in EC2-Classic.", + "id": "ec2-release-address-2", + "title": "To release an Elastic IP addresses for EC2-Classic" + } + ], + "ReplaceNetworkAclAssociation": [ + { + "input": { + "AssociationId": "aclassoc-e5b95c8c", + "NetworkAclId": "acl-5fb85d36" + }, + "output": { + "NewAssociationId": "aclassoc-3999875b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified network ACL with the subnet for the specified network ACL association.", + "id": "ec2-replace-network-acl-association-1", + "title": "To replace the network ACL associated with a subnet" + } + ], + "ReplaceNetworkAclEntry": [ + { + "input": { + "CidrBlock": "203.0.113.12/24", + "Egress": false, + "NetworkAclId": "acl-5fb85d36", + "PortRange": { + "From": 53, + "To": 53 + }, + "Protocol": "udp", + "RuleAction": "allow", + "RuleNumber": 100 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example replaces an entry for the specified network ACL. The new rule 100 allows ingress traffic from 203.0.113.12/24 on UDP port 53 (DNS) into any associated subnet.", + "id": "ec2-replace-network-acl-entry-1", + "title": "To replace a network ACL entry" + } + ], + "ReplaceRoute": [ + { + "input": { + "DestinationCidrBlock": "10.0.0.0/16", + "GatewayId": "vgw-9a4cacf3", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example replaces the specified route in the specified table table. The new route matches the specified CIDR and sends the traffic to the specified virtual private gateway.", + "id": "ec2-replace-route-1", + "title": "To replace a route" + } + ], + "ReplaceRouteTableAssociation": [ + { + "input": { + "AssociationId": "rtbassoc-781d0d1a", + "RouteTableId": "rtb-22574640" + }, + "output": { + "NewAssociationId": "rtbassoc-3a1f0f58" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified route table with the subnet for the specified route table association.", + "id": "ec2-replace-route-table-association-1", + "title": "To replace the route table associated with a subnet" + } + ], + "RequestSpotFleet": [ + { + "input": { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "SecurityGroups": [ + { + "GroupId": "sg-1a2b3c4d" + } + ], + "SubnetId": "subnet-1a2b3c4d, subnet-3c4d5e6f" + } + ], + "SpotPrice": "0.04", + "TargetCapacity": 2 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot fleet request with two launch specifications that differ only by subnet. The Spot fleet launches the instances in the specified subnet with the lowest price. If the instances are launched in a default VPC, they receive a public IP address by default. If the instances are launched in a nondefault VPC, they do not receive a public IP address by default. Note that you can't specify different subnets from the same Availability Zone in a Spot fleet request.", + "id": "ec2-request-spot-fleet-1", + "title": "To request a Spot fleet in the subnet with the lowest price" + }, + { + "input": { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "Placement": { + "AvailabilityZone": "us-west-2a, us-west-2b" + }, + "SecurityGroups": [ + { + "GroupId": "sg-1a2b3c4d" + } + ] + } + ], + "SpotPrice": "0.04", + "TargetCapacity": 2 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot fleet request with two launch specifications that differ only by Availability Zone. The Spot fleet launches the instances in the specified Availability Zone with the lowest price. If your account supports EC2-VPC only, Amazon EC2 launches the Spot instances in the default subnet of the Availability Zone. If your account supports EC2-Classic, Amazon EC2 launches the instances in EC2-Classic in the Availability Zone.", + "id": "ec2-request-spot-fleet-2", + "title": "To request a Spot fleet in the Availability Zone with the lowest price" + }, + { + "input": { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::880185128111:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeviceIndex": 0, + "Groups": [ + "sg-1a2b3c4d" + ], + "SubnetId": "subnet-1a2b3c4d" + } + ] + } + ], + "SpotPrice": "0.04", + "TargetCapacity": 2 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example assigns public addresses to instances launched in a nondefault VPC. Note that when you specify a network interface, you must include the subnet ID and security group ID using the network interface.", + "id": "ec2-request-spot-fleet-3", + "title": "To launch Spot instances in a subnet and assign them public IP addresses" + }, + { + "input": { + "SpotFleetRequestConfig": { + "AllocationStrategy": "diversified", + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "ImageId": "ami-1a2b3c4d", + "InstanceType": "c4.2xlarge", + "SubnetId": "subnet-1a2b3c4d" + }, + { + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.2xlarge", + "SubnetId": "subnet-1a2b3c4d" + }, + { + "ImageId": "ami-1a2b3c4d", + "InstanceType": "r3.2xlarge", + "SubnetId": "subnet-1a2b3c4d" + } + ], + "SpotPrice": "0.70", + "TargetCapacity": 30 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot fleet request that launches 30 instances using the diversified allocation strategy. The launch specifications differ by instance type. The Spot fleet distributes the instances across the launch specifications such that there are 10 instances of each type.", + "id": "ec2-request-spot-fleet-4", + "title": "To request a Spot fleet using the diversified allocation strategy" + } + ], + "RequestSpotInstances": [ + { + "input": { + "InstanceCount": 5, + "LaunchSpecification": { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "Placement": { + "AvailabilityZone": "us-west-2a" + }, + "SecurityGroupIds": [ + "sg-1a2b3c4d" + ] + }, + "SpotPrice": "0.03", + "Type": "one-time" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a one-time Spot Instance request for five instances in the specified Availability Zone. If your account supports EC2-VPC only, Amazon EC2 launches the instances in the default subnet of the specified Availability Zone. If your account supports EC2-Classic, Amazon EC2 launches the instances in EC2-Classic in the specified Availability Zone.", + "id": "ec2-request-spot-instances-1", + "title": "To create a one-time Spot Instance request" + }, + { + "input": { + "InstanceCount": 5, + "LaunchSpecification": { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "SecurityGroupIds": [ + "sg-1a2b3c4d" + ], + "SubnetId": "subnet-1a2b3c4d" + }, + "SpotPrice": "0.050", + "Type": "one-time" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command creates a one-time Spot Instance request for five instances in the specified subnet. Amazon EC2 launches the instances in the specified subnet. If the VPC is a nondefault VPC, the instances do not receive a public IP address by default.", + "id": "ec2-request-spot-instances-2", + "title": "To create a one-time Spot Instance request" + } + ], + "ResetSnapshotAttribute": [ + { + "input": { + "Attribute": "createVolumePermission", + "SnapshotId": "snap-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example resets the create volume permissions for snapshot ``snap-1234567890abcdef0``. If the command succeeds, no output is returned.", + "id": "to-reset-a-snapshot-attribute-1472508825735", + "title": "To reset a snapshot attribute" + } + ], + "RestoreAddressToClassic": [ + { + "input": { + "PublicIp": "198.51.100.0" + }, + "output": { + "PublicIp": "198.51.100.0", + "Status": "MoveInProgress" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example restores the specified Elastic IP address to the EC2-Classic platform.", + "id": "ec2-restore-address-to-classic-1", + "title": "To restore an address to EC2-Classic" + } + ], + "RunScheduledInstances": [ + { + "input": { + "InstanceCount": 1, + "LaunchSpecification": { + "IamInstanceProfile": { + "Name": "my-iam-role" + }, + "ImageId": "ami-12345678", + "InstanceType": "c4.large", + "KeyName": "my-key-pair", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeviceIndex": 0, + "Groups": [ + "sg-12345678" + ], + "SubnetId": "subnet-12345678" + } + ] + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012" + }, + "output": { + "InstanceIdSet": [ + "i-1234567890abcdef0" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example launches the specified Scheduled Instance in a VPC.", + "id": "ec2-run-scheduled-instances-1", + "title": "To launch a Scheduled Instance in a VPC" + }, + { + "input": { + "InstanceCount": 1, + "LaunchSpecification": { + "IamInstanceProfile": { + "Name": "my-iam-role" + }, + "ImageId": "ami-12345678", + "InstanceType": "c4.large", + "KeyName": "my-key-pair", + "Placement": { + "AvailabilityZone": "us-west-2b" + }, + "SecurityGroupIds": [ + "sg-12345678" + ] + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012" + }, + "output": { + "InstanceIdSet": [ + "i-1234567890abcdef0" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example launches the specified Scheduled Instance in EC2-Classic.", + "id": "ec2-run-scheduled-instances-2", + "title": "To launch a Scheduled Instance in EC2-Classic" + } + ], + "UnassignPrivateIpAddresses": [ + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3", + "PrivateIpAddresses": [ + "10.0.0.82" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example unassigns the specified private IP address from the specified network interface.", + "id": "ec2-unassign-private-ip-addresses-1", + "title": "To unassign a secondary private IP address from a network interface" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/paginators-1.json new file mode 100644 index 00000000..2bd01ad5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/paginators-1.json @@ -0,0 +1,63 @@ +{ + "pagination": { + "DescribeInstanceStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceStatuses" + }, + "DescribeInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Reservations" + }, + "DescribeReservedInstancesOfferings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReservedInstancesOfferings" + }, + "DescribeReservedInstancesModifications": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ReservedInstancesModifications" + }, + "DescribeSnapshots": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Snapshots" + }, + "DescribeSpotFleetRequests": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotFleetRequestConfigs" + }, + "DescribeSpotPriceHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotPriceHistory" + }, + "DescribeTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tags" + }, + "DescribeVolumeStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VolumeStatuses" + }, + "DescribeVolumes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Volumes" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/service-2.json.gz new file mode 100644 index 00000000..d8b4986f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/waiters-2.json new file mode 100644 index 00000000..aa36a044 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-04-01/waiters-2.json @@ -0,0 +1,607 @@ +{ + "version": 2, + "waiters": { + "InstanceExists": { + "delay": 5, + "maxAttempts": 40, + "operation": "DescribeInstances", + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(Reservations[]) > `0`", + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "BundleTaskComplete": { + "delay": 15, + "operation": "DescribeBundleTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "complete", + "matcher": "pathAll", + "state": "success", + "argument": "BundleTasks[].State" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "BundleTasks[].State" + } + ] + }, + "ConsoleOutputAvailable": { + "operation": "GetConsoleOutput", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "length(Output || '') > `0`", + "expected": true + } + ] + }, + "ConversionTaskCancelled": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskCompleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelled", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelling", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskDeleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "CustomerGatewayAvailable": { + "delay": 15, + "operation": "DescribeCustomerGateways", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + } + ] + }, + "ExportTaskCancelled": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ExportTaskCompleted": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ImageExists": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(Images[]) > `0`", + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidAMIID.NotFound", + "state": "retry" + } + ] + }, + "ImageAvailable": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Images[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Images[].State", + "expected": "failed" + } + ] + }, + "InstanceRunning": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "running", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "shutting-down", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "InstanceStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].InstanceStatus.Status", + "expected": "ok" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "InstanceStopped": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "stopped", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceTerminated": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "terminated", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "KeyPairExists": { + "operation": "DescribeKeyPairs", + "delay": 5, + "maxAttempts": 6, + "acceptors": [ + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(KeyPairs[].KeyName) > `0`" + }, + { + "expected": "InvalidKeyPair.NotFound", + "matcher": "error", + "state": "retry" + } + ] + }, + "NatGatewayAvailable": { + "operation": "DescribeNatGateways", + "delay": 15, + "maxAttempts": 40, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "NatGateways[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "failed" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "deleting" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "deleted" + }, + { + "state": "retry", + "matcher": "error", + "expected": "NatGatewayNotFound" + } + ] + }, + "NetworkAclExists": { + "operation": "DescribeNetworkAcls", + "delay": 20, + "maxAttempts": 10, + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(NetworkAcls[]) > `0`", + "state": "success" + }, + { + "expected": "InvalidNetworkAclID.NotFound", + "matcher": "error", + "state": "retry" + } + ] + }, + "NetworkInterfaceAvailable": { + "operation": "DescribeNetworkInterfaces", + "delay": 20, + "maxAttempts": 10, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "NetworkInterfaces[].Status" + }, + { + "expected": "InvalidNetworkInterfaceID.NotFound", + "matcher": "error", + "state": "failure" + } + ] + }, + "PasswordDataAvailable": { + "operation": "GetPasswordData", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "length(PasswordData) > `0`", + "expected": true + } + ] + }, + "SnapshotCompleted": { + "delay": 15, + "operation": "DescribeSnapshots", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "Snapshots[].State" + } + ] + }, + "SpotInstanceRequestFulfilled": { + "operation": "DescribeSpotInstanceRequests", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "fulfilled" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "schedule-expired" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "canceled-before-fulfillment" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "bad-parameters" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "system-error" + } + ] + }, + "SubnetAvailable": { + "delay": 15, + "operation": "DescribeSubnets", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Subnets[].State" + } + ] + }, + "SystemStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].SystemStatus.Status", + "expected": "ok" + } + ] + }, + "VolumeAvailable": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VolumeDeleted": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "matcher": "error", + "expected": "InvalidVolume.NotFound", + "state": "success" + } + ] + }, + "VolumeInUse": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "in-use", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VpcAvailable": { + "delay": 15, + "operation": "DescribeVpcs", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Vpcs[].State" + } + ] + }, + "VpnConnectionAvailable": { + "delay": 60, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpnConnectionDeleted": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpcPeeringConnectionExists": { + "delay": 15, + "operation": "DescribeVpcPeeringConnections", + "maxAttempts": 40, + "acceptors": [ + { + "matcher": "status", + "expected": 200, + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidVpcPeeringConnectionID.NotFound", + "state": "retry" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..352bfc85 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/examples-1.json new file mode 100644 index 00000000..f6a8719f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/examples-1.json @@ -0,0 +1,3740 @@ +{ + "version": "1.0", + "examples": { + "AllocateAddress": [ + { + "input": { + "Domain": "vpc" + }, + "output": { + "AllocationId": "eipalloc-64d5890a", + "Domain": "vpc", + "PublicIp": "203.0.113.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example allocates an Elastic IP address to use with an instance in a VPC.", + "id": "ec2-allocate-address-1", + "title": "To allocate an Elastic IP address for EC2-VPC" + }, + { + "output": { + "Domain": "standard", + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example allocates an Elastic IP address to use with an instance in EC2-Classic.", + "id": "ec2-allocate-address-2", + "title": "To allocate an Elastic IP address for EC2-Classic" + } + ], + "AssignPrivateIpAddresses": [ + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3", + "PrivateIpAddresses": [ + "10.0.0.82" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example assigns the specified secondary private IP address to the specified network interface.", + "id": "ec2-assign-private-ip-addresses-1", + "title": "To assign a specific secondary private IP address to an interface" + }, + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3", + "SecondaryPrivateIpAddressCount": 2 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example assigns two secondary private IP addresses to the specified network interface. Amazon EC2 automatically assigns these IP addresses from the available IP addresses in the CIDR block range of the subnet the network interface is associated with.", + "id": "ec2-assign-private-ip-addresses-2", + "title": "To assign secondary private IP addresses that Amazon EC2 selects to an interface" + } + ], + "AssociateAddress": [ + { + "input": { + "AllocationId": "eipalloc-64d5890a", + "InstanceId": "i-0b263919b6498b123" + }, + "output": { + "AssociationId": "eipassoc-2bebb745" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified Elastic IP address with the specified instance in a VPC.", + "id": "ec2-associate-address-1", + "title": "To associate an Elastic IP address in EC2-VPC" + }, + { + "input": { + "AllocationId": "eipalloc-64d5890a", + "NetworkInterfaceId": "eni-1a2b3c4d" + }, + "output": { + "AssociationId": "eipassoc-2bebb745" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified Elastic IP address with the specified network interface.", + "id": "ec2-associate-address-2", + "title": "To associate an Elastic IP address with a network interface" + }, + { + "input": { + "InstanceId": "i-07ffe74c7330ebf53", + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates an Elastic IP address with an instance in EC2-Classic.", + "id": "ec2-associate-address-3", + "title": "To associate an Elastic IP address in EC2-Classic" + } + ], + "AssociateDhcpOptions": [ + { + "input": { + "DhcpOptionsId": "dopt-d9070ebb", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified DHCP options set with the specified VPC.", + "id": "ec2-associate-dhcp-options-1", + "title": "To associate a DHCP options set with a VPC" + }, + { + "input": { + "DhcpOptionsId": "default", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the default DHCP options set with the specified VPC.", + "id": "ec2-associate-dhcp-options-2", + "title": "To associate the default DHCP options set with a VPC" + } + ], + "AssociateRouteTable": [ + { + "input": { + "RouteTableId": "rtb-22574640", + "SubnetId": "subnet-9d4a7b6" + }, + "output": { + "AssociationId": "rtbassoc-781d0d1a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified route table with the specified subnet.", + "id": "ec2-associate-route-table-1", + "title": "To associate a route table with a subnet" + } + ], + "AttachInternetGateway": [ + { + "input": { + "InternetGatewayId": "igw-c0a643a9", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches the specified Internet gateway to the specified VPC.", + "id": "ec2-attach-internet-gateway-1", + "title": "To attach an Internet gateway to a VPC" + } + ], + "AttachNetworkInterface": [ + { + "input": { + "DeviceIndex": 1, + "InstanceId": "i-1234567890abcdef0", + "NetworkInterfaceId": "eni-e5aa89a3" + }, + "output": { + "AttachmentId": "eni-attach-66c4350a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches the specified network interface to the specified instance.", + "id": "ec2-attach-network-interface-1", + "title": "To attach a network interface to an instance" + } + ], + "AttachVolume": [ + { + "input": { + "Device": "/dev/sdf", + "InstanceId": "i-01474ef662b89480", + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + "AttachTime": "2016-08-29T18:52:32.724Z", + "Device": "/dev/sdf", + "InstanceId": "i-01474ef662b89480", + "State": "attaching", + "VolumeId": "vol-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches a volume (``vol-1234567890abcdef0``) to an instance (``i-01474ef662b89480``) as ``/dev/sdf``.", + "id": "to-attach-a-volume-to-an-instance-1472499213109", + "title": "To attach a volume to an instance" + } + ], + "CancelSpotFleetRequests": [ + { + "input": { + "SpotFleetRequestIds": [ + "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + ], + "TerminateInstances": true + }, + "output": { + "SuccessfulFleetRequests": [ + { + "CurrentSpotFleetRequestState": "cancelled_running", + "PreviousSpotFleetRequestState": "active", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels the specified Spot fleet request and terminates its associated Spot Instances.", + "id": "ec2-cancel-spot-fleet-requests-1", + "title": "To cancel a Spot fleet request" + }, + { + "input": { + "SpotFleetRequestIds": [ + "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + ], + "TerminateInstances": false + }, + "output": { + "SuccessfulFleetRequests": [ + { + "CurrentSpotFleetRequestState": "cancelled_terminating", + "PreviousSpotFleetRequestState": "active", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels the specified Spot fleet request without terminating its associated Spot Instances.", + "id": "ec2-cancel-spot-fleet-requests-2", + "title": "To cancel a Spot fleet request without terminating its Spot Instances" + } + ], + "CancelSpotInstanceRequests": [ + { + "input": { + "SpotInstanceRequestIds": [ + "sir-08b93456" + ] + }, + "output": { + "CancelledSpotInstanceRequests": [ + { + "SpotInstanceRequestId": "sir-08b93456", + "State": "cancelled" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels a Spot Instance request.", + "id": "ec2-cancel-spot-instance-requests-1", + "title": "To cancel Spot Instance requests" + } + ], + "ConfirmProductInstance": [ + { + "input": { + "InstanceId": "i-1234567890abcdef0", + "ProductCode": "774F4FF8" + }, + "output": { + "OwnerId": "123456789012" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example determines whether the specified product code is associated with the specified instance.", + "id": "to-confirm-the-product-instance-1472712108494", + "title": "To confirm the product instance" + } + ], + "CopySnapshot": [ + { + "input": { + "Description": "This is my copied snapshot.", + "DestinationRegion": "us-east-1", + "SourceRegion": "us-west-2", + "SourceSnapshotId": "snap-066877671789bd71b" + }, + "output": { + "SnapshotId": "snap-066877671789bd71b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example copies a snapshot with the snapshot ID of ``snap-066877671789bd71b`` from the ``us-west-2`` region to the ``us-east-1`` region and adds a short description to identify the snapshot.", + "id": "to-copy-a-snapshot-1472502259774", + "title": "To copy a snapshot" + } + ], + "CreateCustomerGateway": [ + { + "input": { + "BgpAsn": 65534, + "PublicIp": "12.1.2.3", + "Type": "ipsec.1" + }, + "output": { + "CustomerGateway": { + "BgpAsn": "65534", + "CustomerGatewayId": "cgw-0e11f167", + "IpAddress": "12.1.2.3", + "State": "available", + "Type": "ipsec.1" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a customer gateway with the specified IP address for its outside interface.", + "id": "ec2-create-customer-gateway-1", + "title": "To create a customer gateway" + } + ], + "CreateDhcpOptions": [ + { + "input": { + "DhcpConfigurations": [ + { + "Key": "domain-name-servers", + "Values": [ + "10.2.5.1", + "10.2.5.2" + ] + } + ] + }, + "output": { + "DhcpOptions": { + "DhcpConfigurations": [ + { + "Key": "domain-name-servers", + "Values": [ + { + "Value": "10.2.5.2" + }, + { + "Value": "10.2.5.1" + } + ] + } + ], + "DhcpOptionsId": "dopt-d9070ebb" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DHCP options set.", + "id": "ec2-create-dhcp-options-1", + "title": "To create a DHCP options set" + } + ], + "CreateInternetGateway": [ + { + "output": { + "InternetGateway": { + "Attachments": [ + + ], + "InternetGatewayId": "igw-c0a643a9", + "Tags": [ + + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an Internet gateway.", + "id": "ec2-create-internet-gateway-1", + "title": "To create an Internet gateway" + } + ], + "CreateKeyPair": [ + { + "input": { + "KeyName": "my-key-pair" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a key pair named my-key-pair.", + "id": "ec2-create-key-pair-1", + "title": "To create a key pair" + } + ], + "CreateNatGateway": [ + { + "input": { + "AllocationId": "eipalloc-37fc1a52", + "SubnetId": "subnet-1a2b3c4d" + }, + "output": { + "NatGateway": { + "CreateTime": "2015-12-17T12:45:26.732Z", + "NatGatewayAddresses": [ + { + "AllocationId": "eipalloc-37fc1a52" + } + ], + "NatGatewayId": "nat-08d48af2a8e83edfd", + "State": "pending", + "SubnetId": "subnet-1a2b3c4d", + "VpcId": "vpc-1122aabb" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a NAT gateway in subnet subnet-1a2b3c4d and associates an Elastic IP address with the allocation ID eipalloc-37fc1a52 with the NAT gateway.", + "id": "ec2-create-nat-gateway-1", + "title": "To create a NAT gateway" + } + ], + "CreateNetworkAcl": [ + { + "input": { + "VpcId": "vpc-a01106c2" + }, + "output": { + "NetworkAcl": { + "Associations": [ + + ], + "Entries": [ + { + "CidrBlock": "0.0.0.0/0", + "Egress": true, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + }, + { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + } + ], + "IsDefault": false, + "NetworkAclId": "acl-5fb85d36", + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a network ACL for the specified VPC.", + "id": "ec2-create-network-acl-1", + "title": "To create a network ACL" + } + ], + "CreateNetworkAclEntry": [ + { + "input": { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "NetworkAclId": "acl-5fb85d36", + "PortRange": { + "From": 53, + "To": 53 + }, + "Protocol": "udp", + "RuleAction": "allow", + "RuleNumber": 100 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an entry for the specified network ACL. The rule allows ingress traffic from anywhere (0.0.0.0/0) on UDP port 53 (DNS) into any associated subnet.", + "id": "ec2-create-network-acl-entry-1", + "title": "To create a network ACL entry" + } + ], + "CreateNetworkInterface": [ + { + "input": { + "Description": "my network interface", + "Groups": [ + "sg-903004f8" + ], + "PrivateIpAddress": "10.0.2.17", + "SubnetId": "subnet-9d4a7b6c" + }, + "output": { + "NetworkInterface": { + "AvailabilityZone": "us-east-1d", + "Description": "my network interface", + "Groups": [ + { + "GroupId": "sg-903004f8", + "GroupName": "default" + } + ], + "MacAddress": "02:1a:80:41:52:9c", + "NetworkInterfaceId": "eni-e5aa89a3", + "OwnerId": "123456789012", + "PrivateIpAddress": "10.0.2.17", + "PrivateIpAddresses": [ + { + "Primary": true, + "PrivateIpAddress": "10.0.2.17" + } + ], + "RequesterManaged": false, + "SourceDestCheck": true, + "Status": "pending", + "SubnetId": "subnet-9d4a7b6c", + "TagSet": [ + + ], + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a network interface for the specified subnet.", + "id": "ec2-create-network-interface-1", + "title": "To create a network interface" + } + ], + "CreatePlacementGroup": [ + { + "input": { + "GroupName": "my-cluster", + "Strategy": "cluster" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a placement group with the specified name.", + "id": "to-create-a-placement-group-1472712245768", + "title": "To create a placement group" + } + ], + "CreateRoute": [ + { + "input": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": "igw-c0a643a9", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a route for the specified route table. The route matches all traffic (0.0.0.0/0) and routes it to the specified Internet gateway.", + "id": "ec2-create-route-1", + "title": "To create a route" + } + ], + "CreateRouteTable": [ + { + "input": { + "VpcId": "vpc-a01106c2" + }, + "output": { + "RouteTable": { + "Associations": [ + + ], + "PropagatingVgws": [ + + ], + "RouteTableId": "rtb-22574640", + "Routes": [ + { + "DestinationCidrBlock": "10.0.0.0/16", + "GatewayId": "local", + "State": "active" + } + ], + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a route table for the specified VPC.", + "id": "ec2-create-route-table-1", + "title": "To create a route table" + } + ], + "CreateSnapshot": [ + { + "input": { + "Description": "This is my root volume snapshot.", + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + "Description": "This is my root volume snapshot.", + "OwnerId": "012345678910", + "SnapshotId": "snap-066877671789bd71b", + "StartTime": "2014-02-28T21:06:01.000Z", + "State": "pending", + "Tags": [ + + ], + "VolumeId": "vol-1234567890abcdef0", + "VolumeSize": 8 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a snapshot of the volume with a volume ID of ``vol-1234567890abcdef0`` and a short description to identify the snapshot.", + "id": "to-create-a-snapshot-1472502529790", + "title": "To create a snapshot" + } + ], + "CreateSpotDatafeedSubscription": [ + { + "input": { + "Bucket": "my-s3-bucket", + "Prefix": "spotdata" + }, + "output": { + "SpotDatafeedSubscription": { + "Bucket": "my-s3-bucket", + "OwnerId": "123456789012", + "Prefix": "spotdata", + "State": "Active" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot Instance data feed for your AWS account.", + "id": "ec2-create-spot-datafeed-subscription-1", + "title": "To create a Spot Instance datafeed" + } + ], + "CreateSubnet": [ + { + "input": { + "CidrBlock": "10.0.1.0/24", + "VpcId": "vpc-a01106c2" + }, + "output": { + "Subnet": { + "AvailabilityZone": "us-west-2c", + "AvailableIpAddressCount": 251, + "CidrBlock": "10.0.1.0/24", + "State": "pending", + "SubnetId": "subnet-9d4a7b6c", + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a subnet in the specified VPC with the specified CIDR block. We recommend that you let us select an Availability Zone for you.", + "id": "ec2-create-subnet-1", + "title": "To create a subnet" + } + ], + "CreateTags": [ + { + "input": { + "Resources": [ + "ami-78a54011" + ], + "Tags": [ + { + "Key": "Stack", + "Value": "production" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds the tag Stack=production to the specified image, or overwrites an existing tag for the AMI where the tag key is Stack.", + "id": "ec2-create-tags-1", + "title": "To add a tag to a resource" + } + ], + "CreateVolume": [ + { + "input": { + "AvailabilityZone": "us-east-1a", + "Size": 80, + "VolumeType": "gp2" + }, + "output": { + "AvailabilityZone": "us-east-1a", + "CreateTime": "2016-08-29T18:52:32.724Z", + "Encrypted": false, + "Iops": 240, + "Size": 80, + "SnapshotId": "", + "State": "creating", + "VolumeId": "vol-6b60b7c7", + "VolumeType": "gp2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an 80 GiB General Purpose (SSD) volume in the Availability Zone ``us-east-1a``.", + "id": "to-create-a-new-volume-1472496724296", + "title": "To create a new volume" + }, + { + "input": { + "AvailabilityZone": "us-east-1a", + "Iops": 1000, + "SnapshotId": "snap-066877671789bd71b", + "VolumeType": "io1" + }, + "output": { + "Attachments": [ + + ], + "AvailabilityZone": "us-east-1a", + "CreateTime": "2016-08-29T18:52:32.724Z", + "Iops": 1000, + "Size": 500, + "SnapshotId": "snap-066877671789bd71b", + "State": "creating", + "Tags": [ + + ], + "VolumeId": "vol-1234567890abcdef0", + "VolumeType": "io1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a new Provisioned IOPS (SSD) volume with 1000 provisioned IOPS from a snapshot in the Availability Zone ``us-east-1a``.", + "id": "to-create-a-new-provisioned-iops-ssd-volume-from-a-snapshot-1472498975176", + "title": "To create a new Provisioned IOPS (SSD) volume from a snapshot" + } + ], + "CreateVpc": [ + { + "input": { + "CidrBlock": "10.0.0.0/16" + }, + "output": { + "Vpc": { + "CidrBlock": "10.0.0.0/16", + "DhcpOptionsId": "dopt-7a8b9c2d", + "InstanceTenancy": "default", + "State": "pending", + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a VPC with the specified CIDR block.", + "id": "ec2-create-vpc-1", + "title": "To create a VPC" + } + ], + "DeleteCustomerGateway": [ + { + "input": { + "CustomerGatewayId": "cgw-0e11f167" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified customer gateway.", + "id": "ec2-delete-customer-gateway-1", + "title": "To delete a customer gateway" + } + ], + "DeleteDhcpOptions": [ + { + "input": { + "DhcpOptionsId": "dopt-d9070ebb" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified DHCP options set.", + "id": "ec2-delete-dhcp-options-1", + "title": "To delete a DHCP options set" + } + ], + "DeleteInternetGateway": [ + { + "input": { + "InternetGatewayId": "igw-c0a643a9" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified Internet gateway.", + "id": "ec2-delete-internet-gateway-1", + "title": "To delete an Internet gateway" + } + ], + "DeleteKeyPair": [ + { + "input": { + "KeyName": "my-key-pair" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified key pair.", + "id": "ec2-delete-key-pair-1", + "title": "To delete a key pair" + } + ], + "DeleteNatGateway": [ + { + "input": { + "NatGatewayId": "nat-04ae55e711cec5680" + }, + "output": { + "NatGatewayId": "nat-04ae55e711cec5680" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified NAT gateway.", + "id": "ec2-delete-nat-gateway-1", + "title": "To delete a NAT gateway" + } + ], + "DeleteNetworkAcl": [ + { + "input": { + "NetworkAclId": "acl-5fb85d36" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified network ACL.", + "id": "ec2-delete-network-acl-1", + "title": "To delete a network ACL" + } + ], + "DeleteNetworkAclEntry": [ + { + "input": { + "Egress": true, + "NetworkAclId": "acl-5fb85d36", + "RuleNumber": 100 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes ingress rule number 100 from the specified network ACL.", + "id": "ec2-delete-network-acl-entry-1", + "title": "To delete a network ACL entry" + } + ], + "DeleteNetworkInterface": [ + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified network interface.", + "id": "ec2-delete-network-interface-1", + "title": "To delete a network interface" + } + ], + "DeletePlacementGroup": [ + { + "input": { + "GroupName": "my-cluster" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified placement group.\n", + "id": "to-delete-a-placement-group-1472712349959", + "title": "To delete a placement group" + } + ], + "DeleteRoute": [ + { + "input": { + "DestinationCidrBlock": "0.0.0.0/0", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified route from the specified route table.", + "id": "ec2-delete-route-1", + "title": "To delete a route" + } + ], + "DeleteRouteTable": [ + { + "input": { + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified route table.", + "id": "ec2-delete-route-table-1", + "title": "To delete a route table" + } + ], + "DeleteSnapshot": [ + { + "input": { + "SnapshotId": "snap-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes a snapshot with the snapshot ID of ``snap-1234567890abcdef0``. If the command succeeds, no output is returned.", + "id": "to-delete-a-snapshot-1472503042567", + "title": "To delete a snapshot" + } + ], + "DeleteSpotDatafeedSubscription": [ + { + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes a Spot data feed subscription for the account.", + "id": "ec2-delete-spot-datafeed-subscription-1", + "title": "To cancel a Spot Instance data feed subscription" + } + ], + "DeleteSubnet": [ + { + "input": { + "SubnetId": "subnet-9d4a7b6c" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified subnet.", + "id": "ec2-delete-subnet-1", + "title": "To delete a subnet" + } + ], + "DeleteTags": [ + { + "input": { + "Resources": [ + "ami-78a54011" + ], + "Tags": [ + { + "Key": "Stack", + "Value": "test" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the tag Stack=test from the specified image.", + "id": "ec2-delete-tags-1", + "title": "To delete a tag from a resource" + } + ], + "DeleteVolume": [ + { + "input": { + "VolumeId": "vol-049df61146c4d7901" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes an available volume with the volume ID of ``vol-049df61146c4d7901``. If the command succeeds, no output is returned.", + "id": "to-delete-a-volume-1472503111160", + "title": "To delete a volume" + } + ], + "DeleteVpc": [ + { + "input": { + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified VPC.", + "id": "ec2-delete-vpc-1", + "title": "To delete a VPC" + } + ], + "DescribeAccountAttributes": [ + { + "input": { + "AttributeNames": [ + "supported-platforms" + ] + }, + "output": { + "AccountAttributes": [ + { + "AttributeName": "supported-platforms", + "AttributeValues": [ + { + "AttributeValue": "EC2" + }, + { + "AttributeValue": "VPC" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the supported-platforms attribute for your AWS account.", + "id": "ec2-describe-account-attributes-1", + "title": "To describe a single attribute for your AWS account" + }, + { + "output": { + "AccountAttributes": [ + { + "AttributeName": "supported-platforms", + "AttributeValues": [ + { + "AttributeValue": "EC2" + }, + { + "AttributeValue": "VPC" + } + ] + }, + { + "AttributeName": "vpc-max-security-groups-per-interface", + "AttributeValues": [ + { + "AttributeValue": "5" + } + ] + }, + { + "AttributeName": "max-elastic-ips", + "AttributeValues": [ + { + "AttributeValue": "5" + } + ] + }, + { + "AttributeName": "max-instances", + "AttributeValues": [ + { + "AttributeValue": "20" + } + ] + }, + { + "AttributeName": "vpc-max-elastic-ips", + "AttributeValues": [ + { + "AttributeValue": "5" + } + ] + }, + { + "AttributeName": "default-vpc", + "AttributeValues": [ + { + "AttributeValue": "none" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the attributes for your AWS account.", + "id": "ec2-describe-account-attributes-2", + "title": "To describe all attributes for your AWS account" + } + ], + "DescribeAddresses": [ + { + "output": { + "Addresses": [ + { + "Domain": "standard", + "InstanceId": "i-1234567890abcdef0", + "PublicIp": "198.51.100.0" + }, + { + "AllocationId": "eipalloc-12345678", + "AssociationId": "eipassoc-12345678", + "Domain": "vpc", + "InstanceId": "i-1234567890abcdef0", + "NetworkInterfaceId": "eni-12345678", + "NetworkInterfaceOwnerId": "123456789012", + "PrivateIpAddress": "10.0.1.241", + "PublicIp": "203.0.113.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes your Elastic IP addresses.", + "id": "ec2-describe-addresses-1", + "title": "To describe your Elastic IP addresses" + }, + { + "input": { + "Filters": [ + { + "Name": "domain", + "Values": [ + "vpc" + ] + } + ] + }, + "output": { + "Addresses": [ + { + "AllocationId": "eipalloc-12345678", + "AssociationId": "eipassoc-12345678", + "Domain": "vpc", + "InstanceId": "i-1234567890abcdef0", + "NetworkInterfaceId": "eni-12345678", + "NetworkInterfaceOwnerId": "123456789012", + "PrivateIpAddress": "10.0.1.241", + "PublicIp": "203.0.113.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes your Elastic IP addresses for use with instances in a VPC.", + "id": "ec2-describe-addresses-2", + "title": "To describe your Elastic IP addresses for EC2-VPC" + }, + { + "input": { + "Filters": [ + { + "Name": "domain", + "Values": [ + "standard" + ] + } + ] + }, + "output": { + "Addresses": [ + { + "Domain": "standard", + "InstanceId": "i-1234567890abcdef0", + "PublicIp": "198.51.100.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes your Elastic IP addresses for use with instances in EC2-Classic.", + "id": "ec2-describe-addresses-3", + "title": "To describe your Elastic IP addresses for EC2-Classic" + } + ], + "DescribeAvailabilityZones": [ + { + "output": { + "AvailabilityZones": [ + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1b" + }, + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1c" + }, + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1d" + }, + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1e" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Availability Zones that are available to you. The response includes Availability Zones only for the current region.", + "id": "ec2-describe-availability-zones-1", + "title": "To describe your Availability Zones" + } + ], + "DescribeCustomerGateways": [ + { + "input": { + "CustomerGatewayIds": [ + "cgw-0e11f167" + ] + }, + "output": { + "CustomerGateways": [ + { + "BgpAsn": "65534", + "CustomerGatewayId": "cgw-0e11f167", + "IpAddress": "12.1.2.3", + "State": "available", + "Type": "ipsec.1" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified customer gateway.", + "id": "ec2-describe-customer-gateways-1", + "title": "To describe a customer gateway" + } + ], + "DescribeDhcpOptions": [ + { + "input": { + "DhcpOptionsIds": [ + "dopt-d9070ebb" + ] + }, + "output": { + "DhcpOptions": [ + { + "DhcpConfigurations": [ + { + "Key": "domain-name-servers", + "Values": [ + { + "Value": "10.2.5.2" + }, + { + "Value": "10.2.5.1" + } + ] + } + ], + "DhcpOptionsId": "dopt-d9070ebb" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified DHCP options set.", + "id": "ec2-describe-dhcp-options-1", + "title": "To describe a DHCP options set" + } + ], + "DescribeInstanceAttribute": [ + { + "input": { + "Attribute": "instanceType", + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + "InstanceId": "i-1234567890abcdef0", + "InstanceType": { + "Value": "t1.micro" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the instance type of the specified instance.\n", + "id": "to-describe-the-instance-type-1472712432132", + "title": "To describe the instance type" + }, + { + "input": { + "Attribute": "disableApiTermination", + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + "DisableApiTermination": { + "Value": "false" + }, + "InstanceId": "i-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``disableApiTermination`` attribute of the specified instance.\n", + "id": "to-describe-the-disableapitermination-attribute-1472712533466", + "title": "To describe the disableApiTermination attribute" + }, + { + "input": { + "Attribute": "blockDeviceMapping", + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/sda1", + "Ebs": { + "AttachTime": "2013-05-17T22:42:34.000Z", + "DeleteOnTermination": true, + "Status": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + }, + { + "DeviceName": "/dev/sdf", + "Ebs": { + "AttachTime": "2013-09-10T23:07:00.000Z", + "DeleteOnTermination": false, + "Status": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + } + ], + "InstanceId": "i-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``blockDeviceMapping`` attribute of the specified instance.\n", + "id": "to-describe-the-block-device-mapping-for-an-instance-1472712645423", + "title": "To describe the block device mapping for an instance" + } + ], + "DescribeInternetGateways": [ + { + "input": { + "Filters": [ + { + "Name": "attachment.vpc-id", + "Values": [ + "vpc-a01106c2" + ] + } + ] + }, + "output": { + "InternetGateways": [ + { + "Attachments": [ + { + "State": "available", + "VpcId": "vpc-a01106c2" + } + ], + "InternetGatewayId": "igw-c0a643a9", + "Tags": [ + + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Internet gateway for the specified VPC.", + "id": "ec2-describe-internet-gateways-1", + "title": "To describe the Internet gateway for a VPC" + } + ], + "DescribeKeyPairs": [ + { + "input": { + "KeyNames": [ + "my-key-pair" + ] + }, + "output": { + "KeyPairs": [ + { + "KeyFingerprint": "1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f", + "KeyName": "my-key-pair" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example displays the fingerprint for the specified key.", + "id": "ec2-describe-key-pairs-1", + "title": "To display a key pair" + } + ], + "DescribeMovingAddresses": [ + { + "output": { + "MovingAddressStatuses": [ + { + "MoveStatus": "MovingToVpc", + "PublicIp": "198.51.100.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all of your moving Elastic IP addresses.", + "id": "ec2-describe-moving-addresses-1", + "title": "To describe your moving addresses" + } + ], + "DescribeNatGateways": [ + { + "input": { + "Filter": [ + { + "Name": "vpc-id", + "Values": [ + "vpc-1a2b3c4d" + ] + } + ] + }, + "output": { + "NatGateways": [ + { + "CreateTime": "2015-12-01T12:26:55.983Z", + "NatGatewayAddresses": [ + { + "AllocationId": "eipalloc-89c620ec", + "NetworkInterfaceId": "eni-9dec76cd", + "PrivateIp": "10.0.0.149", + "PublicIp": "198.11.222.333" + } + ], + "NatGatewayId": "nat-05dba92075d71c408", + "State": "available", + "SubnetId": "subnet-847e4dc2", + "VpcId": "vpc-1a2b3c4d" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the NAT gateway for the specified VPC.", + "id": "ec2-describe-nat-gateways-1", + "title": "To describe a NAT gateway" + } + ], + "DescribeNetworkAcls": [ + { + "input": { + "NetworkAclIds": [ + "acl-5fb85d36" + ] + }, + "output": { + "NetworkAcls": [ + { + "Associations": [ + { + "NetworkAclAssociationId": "aclassoc-66ea5f0b", + "NetworkAclId": "acl-9aeb5ef7", + "SubnetId": "subnet-65ea5f08" + } + ], + "Entries": [ + { + "CidrBlock": "0.0.0.0/0", + "Egress": true, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + }, + { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + } + ], + "IsDefault": false, + "NetworkAclId": "acl-5fb85d36", + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified network ACL.", + "id": "ec2-", + "title": "To describe a network ACL" + } + ], + "DescribeNetworkInterfaceAttribute": [ + { + "input": { + "Attribute": "attachment", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "Attachment": { + "AttachTime": "2015-05-21T20:02:20.000Z", + "AttachmentId": "eni-attach-43348162", + "DeleteOnTermination": true, + "DeviceIndex": 0, + "InstanceId": "i-1234567890abcdef0", + "InstanceOwnerId": "123456789012", + "Status": "attached" + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the attachment attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-1", + "title": "To describe the attachment attribute of a network interface" + }, + { + "input": { + "Attribute": "description", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "Description": { + "Value": "My description" + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the description attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-2", + "title": "To describe the description attribute of a network interface" + }, + { + "input": { + "Attribute": "groupSet", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "Groups": [ + { + "GroupId": "sg-903004f8", + "GroupName": "my-security-group" + } + ], + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the groupSet attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-3", + "title": "To describe the groupSet attribute of a network interface" + }, + { + "input": { + "Attribute": "sourceDestCheck", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "NetworkInterfaceId": "eni-686ea200", + "SourceDestCheck": { + "Value": true + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the sourceDestCheck attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-4", + "title": "To describe the sourceDestCheck attribute of a network interface" + } + ], + "DescribeNetworkInterfaces": [ + { + "input": { + "NetworkInterfaceIds": [ + "eni-e5aa89a3" + ] + }, + "output": { + "NetworkInterfaces": [ + { + "Association": { + "AssociationId": "eipassoc-0fbb766a", + "IpOwnerId": "123456789012", + "PublicDnsName": "ec2-203-0-113-12.compute-1.amazonaws.com", + "PublicIp": "203.0.113.12" + }, + "Attachment": { + "AttachTime": "2013-11-30T23:36:42.000Z", + "AttachmentId": "eni-attach-66c4350a", + "DeleteOnTermination": false, + "DeviceIndex": 1, + "InstanceId": "i-1234567890abcdef0", + "InstanceOwnerId": "123456789012", + "Status": "attached" + }, + "AvailabilityZone": "us-east-1d", + "Description": "my network interface", + "Groups": [ + { + "GroupId": "sg-8637d3e3", + "GroupName": "default" + } + ], + "MacAddress": "02:2f:8f:b0:cf:75", + "NetworkInterfaceId": "eni-e5aa89a3", + "OwnerId": "123456789012", + "PrivateDnsName": "ip-10-0-1-17.ec2.internal", + "PrivateIpAddress": "10.0.1.17", + "PrivateIpAddresses": [ + { + "Association": { + "AssociationId": "eipassoc-0fbb766a", + "IpOwnerId": "123456789012", + "PublicDnsName": "ec2-203-0-113-12.compute-1.amazonaws.com", + "PublicIp": "203.0.113.12" + }, + "Primary": true, + "PrivateDnsName": "ip-10-0-1-17.ec2.internal", + "PrivateIpAddress": "10.0.1.17" + } + ], + "RequesterManaged": false, + "SourceDestCheck": true, + "Status": "in-use", + "SubnetId": "subnet-b61f49f0", + "TagSet": [ + + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "ec2-describe-network-interfaces-1", + "title": "To describe a network interface" + } + ], + "DescribeRegions": [ + { + "output": { + "Regions": [ + { + "Endpoint": "ec2.ap-south-1.amazonaws.com", + "RegionName": "ap-south-1" + }, + { + "Endpoint": "ec2.eu-west-1.amazonaws.com", + "RegionName": "eu-west-1" + }, + { + "Endpoint": "ec2.ap-southeast-1.amazonaws.com", + "RegionName": "ap-southeast-1" + }, + { + "Endpoint": "ec2.ap-southeast-2.amazonaws.com", + "RegionName": "ap-southeast-2" + }, + { + "Endpoint": "ec2.eu-central-1.amazonaws.com", + "RegionName": "eu-central-1" + }, + { + "Endpoint": "ec2.ap-northeast-2.amazonaws.com", + "RegionName": "ap-northeast-2" + }, + { + "Endpoint": "ec2.ap-northeast-1.amazonaws.com", + "RegionName": "ap-northeast-1" + }, + { + "Endpoint": "ec2.us-east-1.amazonaws.com", + "RegionName": "us-east-1" + }, + { + "Endpoint": "ec2.sa-east-1.amazonaws.com", + "RegionName": "sa-east-1" + }, + { + "Endpoint": "ec2.us-west-1.amazonaws.com", + "RegionName": "us-west-1" + }, + { + "Endpoint": "ec2.us-west-2.amazonaws.com", + "RegionName": "us-west-2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all the regions that are available to you.", + "id": "ec2-describe-regions-1", + "title": "To describe your regions" + } + ], + "DescribeRouteTables": [ + { + "input": { + "RouteTableIds": [ + "rtb-1f382e7d" + ] + }, + "output": { + "RouteTables": [ + { + "Associations": [ + { + "Main": true, + "RouteTableAssociationId": "rtbassoc-d8ccddba", + "RouteTableId": "rtb-1f382e7d" + } + ], + "PropagatingVgws": [ + + ], + "RouteTableId": "rtb-1f382e7d", + "Routes": [ + { + "DestinationCidrBlock": "10.0.0.0/16", + "GatewayId": "local", + "State": "active" + } + ], + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified route table.", + "id": "ec2-describe-route-tables-1", + "title": "To describe a route table" + } + ], + "DescribeScheduledInstanceAvailability": [ + { + "input": { + "FirstSlotStartTimeRange": { + "EarliestTime": "2016-01-31T00:00:00Z", + "LatestTime": "2016-01-31T04:00:00Z" + }, + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDays": [ + 1 + ] + } + }, + "output": { + "ScheduledInstanceAvailabilitySet": [ + { + "AvailabilityZone": "us-west-2b", + "AvailableInstanceCount": 20, + "FirstSlotStartTime": "2016-01-31T00:00:00Z", + "HourlyPrice": "0.095", + "InstanceType": "c4.large", + "MaxTermDurationInDays": 366, + "MinTermDurationInDays": 366, + "NetworkPlatform": "EC2-VPC", + "Platform": "Linux/UNIX", + "PurchaseToken": "eyJ2IjoiMSIsInMiOjEsImMiOi...", + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDaySet": [ + 1 + ], + "OccurrenceRelativeToEnd": false + }, + "SlotDurationInHours": 23, + "TotalScheduledInstanceHours": 1219 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes a schedule that occurs every week on Sunday, starting on the specified date. Note that the output contains a single schedule as an example.", + "id": "ec2-describe-scheduled-instance-availability-1", + "title": "To describe an available schedule" + } + ], + "DescribeScheduledInstances": [ + { + "input": { + "ScheduledInstanceIds": [ + "sci-1234-1234-1234-1234-123456789012" + ] + }, + "output": { + "ScheduledInstanceSet": [ + { + "AvailabilityZone": "us-west-2b", + "CreateDate": "2016-01-25T21:43:38.612Z", + "HourlyPrice": "0.095", + "InstanceCount": 1, + "InstanceType": "c4.large", + "NetworkPlatform": "EC2-VPC", + "NextSlotStartTime": "2016-01-31T09:00:00Z", + "Platform": "Linux/UNIX", + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDaySet": [ + 1 + ], + "OccurrenceRelativeToEnd": false, + "OccurrenceUnit": "" + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012", + "SlotDurationInHours": 32, + "TermEndDate": "2017-01-31T09:00:00Z", + "TermStartDate": "2016-01-31T09:00:00Z", + "TotalScheduledInstanceHours": 1696 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Scheduled Instance.", + "id": "ec2-describe-scheduled-instances-1", + "title": "To describe your Scheduled Instances" + } + ], + "DescribeSnapshotAttribute": [ + { + "input": { + "Attribute": "createVolumePermission", + "SnapshotId": "snap-066877671789bd71b" + }, + "output": { + "CreateVolumePermissions": [ + + ], + "SnapshotId": "snap-066877671789bd71b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``createVolumePermission`` attribute on a snapshot with the snapshot ID of ``snap-066877671789bd71b``.", + "id": "to-describe-snapshot-attributes-1472503199736", + "title": "To describe snapshot attributes" + } + ], + "DescribeSnapshots": [ + { + "input": { + "SnapshotIds": [ + "snap-1234567890abcdef0" + ] + }, + "output": { + "NextToken": "", + "Snapshots": [ + { + "Description": "This is my snapshot.", + "OwnerId": "012345678910", + "Progress": "100%", + "SnapshotId": "snap-1234567890abcdef0", + "StartTime": "2014-02-28T21:28:32.000Z", + "State": "completed", + "VolumeId": "vol-049df61146c4d7901", + "VolumeSize": 8 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes a snapshot with the snapshot ID of ``snap-1234567890abcdef0``.", + "id": "to-describe-a-snapshot-1472503807850", + "title": "To describe a snapshot" + }, + { + "input": { + "Filters": [ + { + "Name": "status", + "Values": [ + "pending" + ] + } + ], + "OwnerIds": [ + "012345678910" + ] + }, + "output": { + "NextToken": "", + "Snapshots": [ + { + "Description": "This is my copied snapshot.", + "OwnerId": "012345678910", + "Progress": "87%", + "SnapshotId": "snap-066877671789bd71b", + "StartTime": "2014-02-28T21:37:27.000Z", + "State": "pending", + "VolumeId": "vol-1234567890abcdef0", + "VolumeSize": 8 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all snapshots owned by the ID 012345678910 that are in the ``pending`` status.", + "id": "to-describe-snapshots-using-filters-1472503929793", + "title": "To describe snapshots using filters" + } + ], + "DescribeSpotDatafeedSubscription": [ + { + "output": { + "SpotDatafeedSubscription": { + "Bucket": "my-s3-bucket", + "OwnerId": "123456789012", + "Prefix": "spotdata", + "State": "Active" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Spot Instance datafeed subscription for your AWS account.", + "id": "ec2-describe-spot-datafeed-subscription-1", + "title": "To describe the datafeed for your AWS account" + } + ], + "DescribeSpotFleetInstances": [ + { + "input": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "output": { + "ActiveInstances": [ + { + "InstanceId": "i-1234567890abcdef0", + "InstanceType": "m3.medium", + "SpotInstanceRequestId": "sir-08b93456" + } + ], + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists the Spot Instances associated with the specified Spot fleet.", + "id": "ec2-describe-spot-fleet-instances-1", + "title": "To describe the Spot Instances associated with a Spot fleet" + } + ], + "DescribeSpotFleetRequestHistory": [ + { + "input": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "StartTime": "2015-05-26T00:00:00Z" + }, + "output": { + "HistoryRecords": [ + { + "EventInformation": { + "EventSubType": "submitted" + }, + "EventType": "fleetRequestChange", + "Timestamp": "2015-05-26T23:17:20.697Z" + }, + { + "EventInformation": { + "EventSubType": "active" + }, + "EventType": "fleetRequestChange", + "Timestamp": "2015-05-26T23:17:20.873Z" + }, + { + "EventInformation": { + "EventSubType": "launched", + "InstanceId": "i-1234567890abcdef0" + }, + "EventType": "instanceChange", + "Timestamp": "2015-05-26T23:21:21.712Z" + }, + { + "EventInformation": { + "EventSubType": "launched", + "InstanceId": "i-1234567890abcdef1" + }, + "EventType": "instanceChange", + "Timestamp": "2015-05-26T23:21:21.816Z" + } + ], + "NextToken": "CpHNsscimcV5oH7bSbub03CI2Qms5+ypNpNm+53MNlR0YcXAkp0xFlfKf91yVxSExmbtma3awYxMFzNA663ZskT0AHtJ6TCb2Z8bQC2EnZgyELbymtWPfpZ1ZbauVg+P+TfGlWxWWB/Vr5dk5d4LfdgA/DRAHUrYgxzrEXAMPLE=", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "StartTime": "2015-05-26T00:00:00Z" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example returns the history for the specified Spot fleet starting at the specified time.", + "id": "ec2-describe-spot-fleet-request-history-1", + "title": "To describe Spot fleet history" + } + ], + "DescribeSpotFleetRequests": [ + { + "input": { + "SpotFleetRequestIds": [ + "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + ] + }, + "output": { + "SpotFleetRequestConfigs": [ + { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "EbsOptimized": false, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "cc2.8xlarge", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeleteOnTermination": false, + "DeviceIndex": 0, + "SecondaryPrivateIpAddressCount": 0, + "SubnetId": "subnet-a61dafcf" + } + ] + }, + { + "EbsOptimized": false, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "r3.8xlarge", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeleteOnTermination": false, + "DeviceIndex": 0, + "SecondaryPrivateIpAddressCount": 0, + "SubnetId": "subnet-a61dafcf" + } + ] + } + ], + "SpotPrice": "0.05", + "TargetCapacity": 20 + }, + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "SpotFleetRequestState": "active" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Spot fleet request.", + "id": "ec2-describe-spot-fleet-requests-1", + "title": "To describe a Spot fleet request" + } + ], + "DescribeSpotInstanceRequests": [ + { + "input": { + "SpotInstanceRequestIds": [ + "sir-08b93456" + ] + }, + "output": { + "SpotInstanceRequests": [ + { + "CreateTime": "2014-04-30T18:14:55.000Z", + "InstanceId": "i-1234567890abcdef0", + "LaunchSpecification": { + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/sda1", + "Ebs": { + "DeleteOnTermination": true, + "VolumeSize": 8, + "VolumeType": "standard" + } + } + ], + "EbsOptimized": false, + "ImageId": "ami-7aba833f", + "InstanceType": "m1.small", + "KeyName": "my-key-pair", + "SecurityGroups": [ + { + "GroupId": "sg-e38f24a7", + "GroupName": "my-security-group" + } + ] + }, + "LaunchedAvailabilityZone": "us-west-1b", + "ProductDescription": "Linux/UNIX", + "SpotInstanceRequestId": "sir-08b93456", + "SpotPrice": "0.010000", + "State": "active", + "Status": { + "Code": "fulfilled", + "Message": "Your Spot request is fulfilled.", + "UpdateTime": "2014-04-30T18:16:21.000Z" + }, + "Type": "one-time" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Spot Instance request.", + "id": "ec2-describe-spot-instance-requests-1", + "title": "To describe a Spot Instance request" + } + ], + "DescribeSpotPriceHistory": [ + { + "input": { + "EndTime": "2014-01-06T08:09:10", + "InstanceTypes": [ + "m1.xlarge" + ], + "ProductDescriptions": [ + "Linux/UNIX (Amazon VPC)" + ], + "StartTime": "2014-01-06T07:08:09" + }, + "output": { + "SpotPriceHistory": [ + { + "AvailabilityZone": "us-west-1a", + "InstanceType": "m1.xlarge", + "ProductDescription": "Linux/UNIX (Amazon VPC)", + "SpotPrice": "0.080000", + "Timestamp": "2014-01-06T04:32:53.000Z" + }, + { + "AvailabilityZone": "us-west-1c", + "InstanceType": "m1.xlarge", + "ProductDescription": "Linux/UNIX (Amazon VPC)", + "SpotPrice": "0.080000", + "Timestamp": "2014-01-05T11:28:26.000Z" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example returns the Spot Price history for m1.xlarge, Linux/UNIX (Amazon VPC) instances for a particular day in January.", + "id": "ec2-describe-spot-price-history-1", + "title": "To describe Spot price history for Linux/UNIX (Amazon VPC)" + } + ], + "DescribeSubnets": [ + { + "input": { + "Filters": [ + { + "Name": "vpc-id", + "Values": [ + "vpc-a01106c2" + ] + } + ] + }, + "output": { + "Subnets": [ + { + "AvailabilityZone": "us-east-1c", + "AvailableIpAddressCount": 251, + "CidrBlock": "10.0.1.0/24", + "DefaultForAz": false, + "MapPublicIpOnLaunch": false, + "State": "available", + "SubnetId": "subnet-9d4a7b6c", + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the subnets for the specified VPC.", + "id": "ec2-describe-subnets-1", + "title": "To describe the subnets for a VPC" + } + ], + "DescribeTags": [ + { + "input": { + "Filters": [ + { + "Name": "resource-id", + "Values": [ + "i-1234567890abcdef8" + ] + } + ] + }, + "output": { + "Tags": [ + { + "Key": "Stack", + "ResourceId": "i-1234567890abcdef8", + "ResourceType": "instance", + "Value": "test" + }, + { + "Key": "Name", + "ResourceId": "i-1234567890abcdef8", + "ResourceType": "instance", + "Value": "Beta Server" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the tags for the specified instance.", + "id": "ec2-describe-tags-1", + "title": "To describe the tags for a single resource" + } + ], + "DescribeVolumeAttribute": [ + { + "input": { + "Attribute": "autoEnableIO", + "VolumeId": "vol-049df61146c4d7901" + }, + "output": { + "AutoEnableIO": { + "Value": false + }, + "VolumeId": "vol-049df61146c4d7901" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``autoEnableIo`` attribute of the volume with the ID ``vol-049df61146c4d7901``.", + "id": "to-describe-a-volume-attribute-1472505773492", + "title": "To describe a volume attribute" + } + ], + "DescribeVolumeStatus": [ + { + "input": { + "VolumeIds": [ + "vol-1234567890abcdef0" + ] + }, + "output": { + "VolumeStatuses": [ + { + "Actions": [ + + ], + "AvailabilityZone": "us-east-1a", + "Events": [ + + ], + "VolumeId": "vol-1234567890abcdef0", + "VolumeStatus": { + "Details": [ + { + "Name": "io-enabled", + "Status": "passed" + }, + { + "Name": "io-performance", + "Status": "not-applicable" + } + ], + "Status": "ok" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the status for the volume ``vol-1234567890abcdef0``.", + "id": "to-describe-the-status-of-a-single-volume-1472507016193", + "title": "To describe the status of a single volume" + }, + { + "input": { + "Filters": [ + { + "Name": "volume-status.status", + "Values": [ + "impaired" + ] + } + ] + }, + "output": { + "VolumeStatuses": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the status for all volumes that are impaired. In this example output, there are no impaired volumes.", + "id": "to-describe-the-status-of-impaired-volumes-1472507239821", + "title": "To describe the status of impaired volumes" + } + ], + "DescribeVolumes": [ + { + "input": { + }, + "output": { + "NextToken": "", + "Volumes": [ + { + "Attachments": [ + { + "AttachTime": "2013-12-18T22:35:00.000Z", + "DeleteOnTermination": true, + "Device": "/dev/sda1", + "InstanceId": "i-1234567890abcdef0", + "State": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + ], + "AvailabilityZone": "us-east-1a", + "CreateTime": "2013-12-18T22:35:00.084Z", + "Size": 8, + "SnapshotId": "snap-1234567890abcdef0", + "State": "in-use", + "VolumeId": "vol-049df61146c4d7901", + "VolumeType": "standard" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all of your volumes in the default region.", + "id": "to-describe-all-volumes-1472506358883", + "title": "To describe all volumes" + }, + { + "input": { + "Filters": [ + { + "Name": "attachment.instance-id", + "Values": [ + "i-1234567890abcdef0" + ] + }, + { + "Name": "attachment.delete-on-termination", + "Values": [ + "true" + ] + } + ] + }, + "output": { + "Volumes": [ + { + "Attachments": [ + { + "AttachTime": "2013-12-18T22:35:00.000Z", + "DeleteOnTermination": true, + "Device": "/dev/sda1", + "InstanceId": "i-1234567890abcdef0", + "State": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + ], + "AvailabilityZone": "us-east-1a", + "CreateTime": "2013-12-18T22:35:00.084Z", + "Size": 8, + "SnapshotId": "snap-1234567890abcdef0", + "State": "in-use", + "VolumeId": "vol-049df61146c4d7901", + "VolumeType": "standard" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all volumes that are both attached to the instance with the ID i-1234567890abcdef0 and set to delete when the instance terminates.", + "id": "to-describe-volumes-that-are-attached-to-a-specific-instance-1472506613578", + "title": "To describe volumes that are attached to a specific instance" + } + ], + "DescribeVpcAttribute": [ + { + "input": { + "Attribute": "enableDnsSupport", + "VpcId": "vpc-a01106c2" + }, + "output": { + "EnableDnsSupport": { + "Value": true + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the enableDnsSupport attribute. This attribute indicates whether DNS resolution is enabled for the VPC. If this attribute is true, the Amazon DNS server resolves DNS hostnames for your instances to their corresponding IP addresses; otherwise, it does not.", + "id": "ec2-describe-vpc-attribute-1", + "title": "To describe the enableDnsSupport attribute" + }, + { + "input": { + "Attribute": "enableDnsHostnames", + "VpcId": "vpc-a01106c2" + }, + "output": { + "EnableDnsHostnames": { + "Value": true + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the enableDnsHostnames attribute. This attribute indicates whether the instances launched in the VPC get DNS hostnames. If this attribute is true, instances in the VPC get DNS hostnames; otherwise, they do not.", + "id": "ec2-describe-vpc-attribute-2", + "title": "To describe the enableDnsHostnames attribute" + } + ], + "DescribeVpcs": [ + { + "input": { + "VpcIds": [ + "vpc-a01106c2" + ] + }, + "output": { + "Vpcs": [ + { + "CidrBlock": "10.0.0.0/16", + "DhcpOptionsId": "dopt-7a8b9c2d", + "InstanceTenancy": "default", + "IsDefault": false, + "State": "available", + "Tags": [ + { + "Key": "Name", + "Value": "MyVPC" + } + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified VPC.", + "id": "ec2-describe-vpcs-1", + "title": "To describe a VPC" + } + ], + "DetachInternetGateway": [ + { + "input": { + "InternetGatewayId": "igw-c0a643a9", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified Internet gateway from the specified VPC.", + "id": "ec2-detach-internet-gateway-1", + "title": "To detach an Internet gateway from a VPC" + } + ], + "DetachNetworkInterface": [ + { + "input": { + "AttachmentId": "eni-attach-66c4350a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified network interface from its attached instance.", + "id": "ec2-detach-network-interface-1", + "title": "To detach a network interface from an instance" + } + ], + "DetachVolume": [ + { + "input": { + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + "AttachTime": "2014-02-27T19:23:06.000Z", + "Device": "/dev/sdb", + "InstanceId": "i-1234567890abcdef0", + "State": "detaching", + "VolumeId": "vol-049df61146c4d7901" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the volume (``vol-049df61146c4d7901``) from the instance it is attached to.", + "id": "to-detach-a-volume-from-an-instance-1472507977694", + "title": "To detach a volume from an instance" + } + ], + "DisableVgwRoutePropagation": [ + { + "input": { + "GatewayId": "vgw-9a4cacf3", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disables the specified virtual private gateway from propagating static routes to the specified route table.", + "id": "ec2-disable-vgw-route-propagation-1", + "title": "To disable route propagation" + } + ], + "DisassociateAddress": [ + { + "input": { + "AssociationId": "eipassoc-2bebb745" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disassociates an Elastic IP address from an instance in a VPC.", + "id": "ec2-disassociate-address-1", + "title": "To disassociate an Elastic IP address in EC2-VPC" + }, + { + "input": { + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disassociates an Elastic IP address from an instance in EC2-Classic.", + "id": "ec2-disassociate-address-2", + "title": "To disassociate an Elastic IP addresses in EC2-Classic" + } + ], + "DisassociateRouteTable": [ + { + "input": { + "AssociationId": "rtbassoc-781d0d1a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disassociates the specified route table from its associated subnet.", + "id": "ec2-disassociate-route-table-1", + "title": "To disassociate a route table" + } + ], + "EnableVgwRoutePropagation": [ + { + "input": { + "GatewayId": "vgw-9a4cacf3", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables the specified virtual private gateway to propagate static routes to the specified route table.", + "id": "ec2-enable-vgw-route-propagation-1", + "title": "To enable route propagation" + } + ], + "EnableVolumeIO": [ + { + "input": { + "VolumeId": "vol-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables I/O on volume ``vol-1234567890abcdef0``.", + "id": "to-enable-io-for-a-volume-1472508114867", + "title": "To enable I/O for a volume" + } + ], + "ModifyNetworkInterfaceAttribute": [ + { + "input": { + "Attachment": { + "AttachmentId": "eni-attach-43348162", + "DeleteOnTermination": false + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the attachment attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-1", + "title": "To modify the attachment attribute of a network interface" + }, + { + "input": { + "Description": { + "Value": "My description" + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the description attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-2", + "title": "To modify the description attribute of a network interface" + }, + { + "input": { + "Groups": [ + "sg-903004f8", + "sg-1a2b3c4d" + ], + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command modifies the groupSet attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-3", + "title": "To modify the groupSet attribute of a network interface" + }, + { + "input": { + "NetworkInterfaceId": "eni-686ea200", + "SourceDestCheck": { + "Value": false + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command modifies the sourceDestCheck attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-4", + "title": "To modify the sourceDestCheck attribute of a network interface" + } + ], + "ModifySnapshotAttribute": [ + { + "input": { + "Attribute": "createVolumePermission", + "OperationType": "remove", + "SnapshotId": "snap-1234567890abcdef0", + "UserIds": [ + "123456789012" + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies snapshot ``snap-1234567890abcdef0`` to remove the create volume permission for a user with the account ID ``123456789012``. If the command succeeds, no output is returned.", + "id": "to-modify-a-snapshot-attribute-1472508385907", + "title": "To modify a snapshot attribute" + }, + { + "input": { + "Attribute": "createVolumePermission", + "GroupNames": [ + "all" + ], + "OperationType": "add", + "SnapshotId": "snap-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example makes the snapshot ``snap-1234567890abcdef0`` public.", + "id": "to-make-a-snapshot-public-1472508470529", + "title": "To make a snapshot public" + } + ], + "ModifySpotFleetRequest": [ + { + "input": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "TargetCapacity": 20 + }, + "output": { + "Return": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example increases the target capacity of the specified Spot fleet request.", + "id": "ec2-modify-spot-fleet-request-1", + "title": "To increase the target capacity of a Spot fleet request" + }, + { + "input": { + "ExcessCapacityTerminationPolicy": "NoTermination ", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "TargetCapacity": 10 + }, + "output": { + "Return": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example decreases the target capacity of the specified Spot fleet request without terminating any Spot Instances as a result.", + "id": "ec2-modify-spot-fleet-request-2", + "title": "To decrease the target capacity of a Spot fleet request" + } + ], + "ModifySubnetAttribute": [ + { + "input": { + "MapPublicIpOnLaunch": { + "Value": true + }, + "SubnetId": "subnet-1a2b3c4d" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the specified subnet so that all instances launched into this subnet are assigned a public IP address.", + "id": "ec2-modify-subnet-attribute-1", + "title": "To change a subnet's public IP addressing behavior" + } + ], + "ModifyVolumeAttribute": [ + { + "input": { + "AutoEnableIO": { + "Value": true + }, + "DryRun": true, + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example sets the ``autoEnableIo`` attribute of the volume with the ID ``vol-1234567890abcdef0`` to ``true``. If the command succeeds, no output is returned.", + "id": "to-modify-a-volume-attribute-1472508596749", + "title": "To modify a volume attribute" + } + ], + "ModifyVpcAttribute": [ + { + "input": { + "EnableDnsSupport": { + "Value": false + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the enableDnsSupport attribute. This attribute indicates whether DNS resolution is enabled for the VPC. If this attribute is true, the Amazon DNS server resolves DNS hostnames for instances in the VPC to their corresponding IP addresses; otherwise, it does not.", + "id": "ec2-modify-vpc-attribute-1", + "title": "To modify the enableDnsSupport attribute" + }, + { + "input": { + "EnableDnsHostnames": { + "Value": false + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the enableDnsHostnames attribute. This attribute indicates whether instances launched in the VPC get DNS hostnames. If this attribute is true, instances in the VPC get DNS hostnames; otherwise, they do not.", + "id": "ec2-modify-vpc-attribute-2", + "title": "To modify the enableDnsHostnames attribute" + } + ], + "MoveAddressToVpc": [ + { + "input": { + "PublicIp": "54.123.4.56" + }, + "output": { + "Status": "MoveInProgress" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example moves the specified Elastic IP address to the EC2-VPC platform.", + "id": "ec2-move-address-to-vpc-1", + "title": "To move an address to EC2-VPC" + } + ], + "PurchaseScheduledInstances": [ + { + "input": { + "PurchaseRequests": [ + { + "InstanceCount": 1, + "PurchaseToken": "eyJ2IjoiMSIsInMiOjEsImMiOi..." + } + ] + }, + "output": { + "ScheduledInstanceSet": [ + { + "AvailabilityZone": "us-west-2b", + "CreateDate": "2016-01-25T21:43:38.612Z", + "HourlyPrice": "0.095", + "InstanceCount": 1, + "InstanceType": "c4.large", + "NetworkPlatform": "EC2-VPC", + "NextSlotStartTime": "2016-01-31T09:00:00Z", + "Platform": "Linux/UNIX", + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDaySet": [ + 1 + ], + "OccurrenceRelativeToEnd": false, + "OccurrenceUnit": "" + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012", + "SlotDurationInHours": 32, + "TermEndDate": "2017-01-31T09:00:00Z", + "TermStartDate": "2016-01-31T09:00:00Z", + "TotalScheduledInstanceHours": 1696 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example purchases a Scheduled Instance.", + "id": "ec2-purchase-scheduled-instances-1", + "title": "To purchase a Scheduled Instance" + } + ], + "ReleaseAddress": [ + { + "input": { + "AllocationId": "eipalloc-64d5890a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example releases an Elastic IP address for use with instances in a VPC.", + "id": "ec2-release-address-1", + "title": "To release an Elastic IP address for EC2-VPC" + }, + { + "input": { + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example releases an Elastic IP address for use with instances in EC2-Classic.", + "id": "ec2-release-address-2", + "title": "To release an Elastic IP addresses for EC2-Classic" + } + ], + "ReplaceNetworkAclAssociation": [ + { + "input": { + "AssociationId": "aclassoc-e5b95c8c", + "NetworkAclId": "acl-5fb85d36" + }, + "output": { + "NewAssociationId": "aclassoc-3999875b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified network ACL with the subnet for the specified network ACL association.", + "id": "ec2-replace-network-acl-association-1", + "title": "To replace the network ACL associated with a subnet" + } + ], + "ReplaceNetworkAclEntry": [ + { + "input": { + "CidrBlock": "203.0.113.12/24", + "Egress": false, + "NetworkAclId": "acl-5fb85d36", + "PortRange": { + "From": 53, + "To": 53 + }, + "Protocol": "udp", + "RuleAction": "allow", + "RuleNumber": 100 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example replaces an entry for the specified network ACL. The new rule 100 allows ingress traffic from 203.0.113.12/24 on UDP port 53 (DNS) into any associated subnet.", + "id": "ec2-replace-network-acl-entry-1", + "title": "To replace a network ACL entry" + } + ], + "ReplaceRoute": [ + { + "input": { + "DestinationCidrBlock": "10.0.0.0/16", + "GatewayId": "vgw-9a4cacf3", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example replaces the specified route in the specified table table. The new route matches the specified CIDR and sends the traffic to the specified virtual private gateway.", + "id": "ec2-replace-route-1", + "title": "To replace a route" + } + ], + "ReplaceRouteTableAssociation": [ + { + "input": { + "AssociationId": "rtbassoc-781d0d1a", + "RouteTableId": "rtb-22574640" + }, + "output": { + "NewAssociationId": "rtbassoc-3a1f0f58" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified route table with the subnet for the specified route table association.", + "id": "ec2-replace-route-table-association-1", + "title": "To replace the route table associated with a subnet" + } + ], + "RequestSpotFleet": [ + { + "input": { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "SecurityGroups": [ + { + "GroupId": "sg-1a2b3c4d" + } + ], + "SubnetId": "subnet-1a2b3c4d, subnet-3c4d5e6f" + } + ], + "SpotPrice": "0.04", + "TargetCapacity": 2 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot fleet request with two launch specifications that differ only by subnet. The Spot fleet launches the instances in the specified subnet with the lowest price. If the instances are launched in a default VPC, they receive a public IP address by default. If the instances are launched in a nondefault VPC, they do not receive a public IP address by default. Note that you can't specify different subnets from the same Availability Zone in a Spot fleet request.", + "id": "ec2-request-spot-fleet-1", + "title": "To request a Spot fleet in the subnet with the lowest price" + }, + { + "input": { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "Placement": { + "AvailabilityZone": "us-west-2a, us-west-2b" + }, + "SecurityGroups": [ + { + "GroupId": "sg-1a2b3c4d" + } + ] + } + ], + "SpotPrice": "0.04", + "TargetCapacity": 2 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot fleet request with two launch specifications that differ only by Availability Zone. The Spot fleet launches the instances in the specified Availability Zone with the lowest price. If your account supports EC2-VPC only, Amazon EC2 launches the Spot instances in the default subnet of the Availability Zone. If your account supports EC2-Classic, Amazon EC2 launches the instances in EC2-Classic in the Availability Zone.", + "id": "ec2-request-spot-fleet-2", + "title": "To request a Spot fleet in the Availability Zone with the lowest price" + }, + { + "input": { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::880185128111:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeviceIndex": 0, + "Groups": [ + "sg-1a2b3c4d" + ], + "SubnetId": "subnet-1a2b3c4d" + } + ] + } + ], + "SpotPrice": "0.04", + "TargetCapacity": 2 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example assigns public addresses to instances launched in a nondefault VPC. Note that when you specify a network interface, you must include the subnet ID and security group ID using the network interface.", + "id": "ec2-request-spot-fleet-3", + "title": "To launch Spot instances in a subnet and assign them public IP addresses" + }, + { + "input": { + "SpotFleetRequestConfig": { + "AllocationStrategy": "diversified", + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "ImageId": "ami-1a2b3c4d", + "InstanceType": "c4.2xlarge", + "SubnetId": "subnet-1a2b3c4d" + }, + { + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.2xlarge", + "SubnetId": "subnet-1a2b3c4d" + }, + { + "ImageId": "ami-1a2b3c4d", + "InstanceType": "r3.2xlarge", + "SubnetId": "subnet-1a2b3c4d" + } + ], + "SpotPrice": "0.70", + "TargetCapacity": 30 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot fleet request that launches 30 instances using the diversified allocation strategy. The launch specifications differ by instance type. The Spot fleet distributes the instances across the launch specifications such that there are 10 instances of each type.", + "id": "ec2-request-spot-fleet-4", + "title": "To request a Spot fleet using the diversified allocation strategy" + } + ], + "RequestSpotInstances": [ + { + "input": { + "InstanceCount": 5, + "LaunchSpecification": { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "Placement": { + "AvailabilityZone": "us-west-2a" + }, + "SecurityGroupIds": [ + "sg-1a2b3c4d" + ] + }, + "SpotPrice": "0.03", + "Type": "one-time" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a one-time Spot Instance request for five instances in the specified Availability Zone. If your account supports EC2-VPC only, Amazon EC2 launches the instances in the default subnet of the specified Availability Zone. If your account supports EC2-Classic, Amazon EC2 launches the instances in EC2-Classic in the specified Availability Zone.", + "id": "ec2-request-spot-instances-1", + "title": "To create a one-time Spot Instance request" + }, + { + "input": { + "InstanceCount": 5, + "LaunchSpecification": { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "SecurityGroupIds": [ + "sg-1a2b3c4d" + ], + "SubnetId": "subnet-1a2b3c4d" + }, + "SpotPrice": "0.050", + "Type": "one-time" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command creates a one-time Spot Instance request for five instances in the specified subnet. Amazon EC2 launches the instances in the specified subnet. If the VPC is a nondefault VPC, the instances do not receive a public IP address by default.", + "id": "ec2-request-spot-instances-2", + "title": "To create a one-time Spot Instance request" + } + ], + "ResetSnapshotAttribute": [ + { + "input": { + "Attribute": "createVolumePermission", + "SnapshotId": "snap-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example resets the create volume permissions for snapshot ``snap-1234567890abcdef0``. If the command succeeds, no output is returned.", + "id": "to-reset-a-snapshot-attribute-1472508825735", + "title": "To reset a snapshot attribute" + } + ], + "RestoreAddressToClassic": [ + { + "input": { + "PublicIp": "198.51.100.0" + }, + "output": { + "PublicIp": "198.51.100.0", + "Status": "MoveInProgress" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example restores the specified Elastic IP address to the EC2-Classic platform.", + "id": "ec2-restore-address-to-classic-1", + "title": "To restore an address to EC2-Classic" + } + ], + "RunScheduledInstances": [ + { + "input": { + "InstanceCount": 1, + "LaunchSpecification": { + "IamInstanceProfile": { + "Name": "my-iam-role" + }, + "ImageId": "ami-12345678", + "InstanceType": "c4.large", + "KeyName": "my-key-pair", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeviceIndex": 0, + "Groups": [ + "sg-12345678" + ], + "SubnetId": "subnet-12345678" + } + ] + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012" + }, + "output": { + "InstanceIdSet": [ + "i-1234567890abcdef0" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example launches the specified Scheduled Instance in a VPC.", + "id": "ec2-run-scheduled-instances-1", + "title": "To launch a Scheduled Instance in a VPC" + }, + { + "input": { + "InstanceCount": 1, + "LaunchSpecification": { + "IamInstanceProfile": { + "Name": "my-iam-role" + }, + "ImageId": "ami-12345678", + "InstanceType": "c4.large", + "KeyName": "my-key-pair", + "Placement": { + "AvailabilityZone": "us-west-2b" + }, + "SecurityGroupIds": [ + "sg-12345678" + ] + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012" + }, + "output": { + "InstanceIdSet": [ + "i-1234567890abcdef0" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example launches the specified Scheduled Instance in EC2-Classic.", + "id": "ec2-run-scheduled-instances-2", + "title": "To launch a Scheduled Instance in EC2-Classic" + } + ], + "UnassignPrivateIpAddresses": [ + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3", + "PrivateIpAddresses": [ + "10.0.0.82" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example unassigns the specified private IP address from the specified network interface.", + "id": "ec2-unassign-private-ip-addresses-1", + "title": "To unassign a secondary private IP address from a network interface" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/paginators-1.json new file mode 100644 index 00000000..2bd01ad5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/paginators-1.json @@ -0,0 +1,63 @@ +{ + "pagination": { + "DescribeInstanceStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceStatuses" + }, + "DescribeInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Reservations" + }, + "DescribeReservedInstancesOfferings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReservedInstancesOfferings" + }, + "DescribeReservedInstancesModifications": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ReservedInstancesModifications" + }, + "DescribeSnapshots": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Snapshots" + }, + "DescribeSpotFleetRequests": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotFleetRequestConfigs" + }, + "DescribeSpotPriceHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotPriceHistory" + }, + "DescribeTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tags" + }, + "DescribeVolumeStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VolumeStatuses" + }, + "DescribeVolumes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Volumes" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/service-2.json.gz new file mode 100644 index 00000000..d3ae2ef5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/waiters-2.json new file mode 100644 index 00000000..71051948 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-09-15/waiters-2.json @@ -0,0 +1,593 @@ +{ + "version": 2, + "waiters": { + "InstanceExists": { + "delay": 5, + "maxAttempts": 40, + "operation": "DescribeInstances", + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(Reservations[]) > `0`", + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "BundleTaskComplete": { + "delay": 15, + "operation": "DescribeBundleTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "complete", + "matcher": "pathAll", + "state": "success", + "argument": "BundleTasks[].State" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "BundleTasks[].State" + } + ] + }, + "ConversionTaskCancelled": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskCompleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelled", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelling", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskDeleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "CustomerGatewayAvailable": { + "delay": 15, + "operation": "DescribeCustomerGateways", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + } + ] + }, + "ExportTaskCancelled": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ExportTaskCompleted": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ImageExists": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(Images[]) > `0`", + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidAMIID.NotFound", + "state": "retry" + } + ] + }, + "ImageAvailable": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Images[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Images[].State", + "expected": "failed" + } + ] + }, + "InstanceRunning": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "running", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "shutting-down", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "InstanceStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].InstanceStatus.Status", + "expected": "ok" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "InstanceStopped": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "stopped", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceTerminated": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "terminated", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "KeyPairExists": { + "operation": "DescribeKeyPairs", + "delay": 5, + "maxAttempts": 6, + "acceptors": [ + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(KeyPairs[].KeyName) > `0`" + }, + { + "expected": "InvalidKeyPair.NotFound", + "matcher": "error", + "state": "retry" + } + ] + }, + "NatGatewayAvailable": { + "operation": "DescribeNatGateways", + "delay": 15, + "maxAttempts": 40, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "NatGateways[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "failed" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "deleting" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "deleted" + }, + { + "state": "retry", + "matcher": "error", + "expected": "NatGatewayNotFound" + } + ] + }, + "NetworkInterfaceAvailable": { + "operation": "DescribeNetworkInterfaces", + "delay": 20, + "maxAttempts": 10, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "NetworkInterfaces[].Status" + }, + { + "expected": "InvalidNetworkInterfaceID.NotFound", + "matcher": "error", + "state": "failure" + } + ] + }, + "PasswordDataAvailable": { + "operation": "GetPasswordData", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "length(PasswordData) > `0`", + "expected": true + } + ] + }, + "SnapshotCompleted": { + "delay": 15, + "operation": "DescribeSnapshots", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "Snapshots[].State" + } + ] + }, + "SpotInstanceRequestFulfilled": { + "operation": "DescribeSpotInstanceRequests", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "fulfilled" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "schedule-expired" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "canceled-before-fulfillment" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "bad-parameters" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "system-error" + } + ] + }, + "SubnetAvailable": { + "delay": 15, + "operation": "DescribeSubnets", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Subnets[].State" + } + ] + }, + "SystemStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].SystemStatus.Status", + "expected": "ok" + } + ] + }, + "VolumeAvailable": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VolumeDeleted": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "matcher": "error", + "expected": "InvalidVolume.NotFound", + "state": "success" + } + ] + }, + "VolumeInUse": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "in-use", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VpcAvailable": { + "delay": 15, + "operation": "DescribeVpcs", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Vpcs[].State" + } + ] + }, + "VpcExists": { + "operation": "DescribeVpcs", + "delay": 1, + "maxAttempts": 5, + "acceptors": [ + { + "matcher": "status", + "expected": 200, + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidVpcID.NotFound", + "state": "retry" + } + ] + }, + "VpnConnectionAvailable": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpnConnectionDeleted": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpcPeeringConnectionExists": { + "delay": 15, + "operation": "DescribeVpcPeeringConnections", + "maxAttempts": 40, + "acceptors": [ + { + "matcher": "status", + "expected": 200, + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidVpcPeeringConnectionID.NotFound", + "state": "retry" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8d9a9699 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/examples-1.json new file mode 100644 index 00000000..93b4bf88 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/examples-1.json @@ -0,0 +1,5048 @@ +{ + "version": "1.0", + "examples": { + "AllocateAddress": [ + { + "input": { + "Domain": "vpc" + }, + "output": { + "AllocationId": "eipalloc-64d5890a", + "Domain": "vpc", + "PublicIp": "203.0.113.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example allocates an Elastic IP address to use with an instance in a VPC.", + "id": "ec2-allocate-address-1", + "title": "To allocate an Elastic IP address for EC2-VPC" + }, + { + "output": { + "Domain": "standard", + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example allocates an Elastic IP address to use with an instance in EC2-Classic.", + "id": "ec2-allocate-address-2", + "title": "To allocate an Elastic IP address for EC2-Classic" + } + ], + "AssignPrivateIpAddresses": [ + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3", + "PrivateIpAddresses": [ + "10.0.0.82" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example assigns the specified secondary private IP address to the specified network interface.", + "id": "ec2-assign-private-ip-addresses-1", + "title": "To assign a specific secondary private IP address to an interface" + }, + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3", + "SecondaryPrivateIpAddressCount": 2 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example assigns two secondary private IP addresses to the specified network interface. Amazon EC2 automatically assigns these IP addresses from the available IP addresses in the CIDR block range of the subnet the network interface is associated with.", + "id": "ec2-assign-private-ip-addresses-2", + "title": "To assign secondary private IP addresses that Amazon EC2 selects to an interface" + } + ], + "AssociateAddress": [ + { + "input": { + "AllocationId": "eipalloc-64d5890a", + "InstanceId": "i-0b263919b6498b123" + }, + "output": { + "AssociationId": "eipassoc-2bebb745" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified Elastic IP address with the specified instance in a VPC.", + "id": "ec2-associate-address-1", + "title": "To associate an Elastic IP address in EC2-VPC" + }, + { + "input": { + "AllocationId": "eipalloc-64d5890a", + "NetworkInterfaceId": "eni-1a2b3c4d" + }, + "output": { + "AssociationId": "eipassoc-2bebb745" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified Elastic IP address with the specified network interface.", + "id": "ec2-associate-address-2", + "title": "To associate an Elastic IP address with a network interface" + }, + { + "input": { + "InstanceId": "i-07ffe74c7330ebf53", + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates an Elastic IP address with an instance in EC2-Classic.", + "id": "ec2-associate-address-3", + "title": "To associate an Elastic IP address in EC2-Classic" + } + ], + "AssociateDhcpOptions": [ + { + "input": { + "DhcpOptionsId": "dopt-d9070ebb", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified DHCP options set with the specified VPC.", + "id": "ec2-associate-dhcp-options-1", + "title": "To associate a DHCP options set with a VPC" + }, + { + "input": { + "DhcpOptionsId": "default", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the default DHCP options set with the specified VPC.", + "id": "ec2-associate-dhcp-options-2", + "title": "To associate the default DHCP options set with a VPC" + } + ], + "AssociateIamInstanceProfile": [ + { + "input": { + "IamInstanceProfile": { + "Name": "admin-role" + }, + "InstanceId": "i-123456789abcde123" + }, + "output": { + "IamInstanceProfileAssociation": { + "AssociationId": "iip-assoc-0e7736511a163c209", + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/admin-role", + "Id": "AIPAJBLK7RKJKWDXVHIEC" + }, + "InstanceId": "i-123456789abcde123", + "State": "associating" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates an IAM instance profile named admin-role with the specified instance.", + "id": "to-associate-an-iam-instance-profile-with-an-instance-1528928429850", + "title": "To associate an IAM instance profile with an instance" + } + ], + "AssociateRouteTable": [ + { + "input": { + "RouteTableId": "rtb-22574640", + "SubnetId": "subnet-9d4a7b6" + }, + "output": { + "AssociationId": "rtbassoc-781d0d1a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified route table with the specified subnet.", + "id": "ec2-associate-route-table-1", + "title": "To associate a route table with a subnet" + } + ], + "AttachInternetGateway": [ + { + "input": { + "InternetGatewayId": "igw-c0a643a9", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches the specified Internet gateway to the specified VPC.", + "id": "ec2-attach-internet-gateway-1", + "title": "To attach an Internet gateway to a VPC" + } + ], + "AttachNetworkInterface": [ + { + "input": { + "DeviceIndex": 1, + "InstanceId": "i-1234567890abcdef0", + "NetworkInterfaceId": "eni-e5aa89a3" + }, + "output": { + "AttachmentId": "eni-attach-66c4350a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches the specified network interface to the specified instance.", + "id": "ec2-attach-network-interface-1", + "title": "To attach a network interface to an instance" + } + ], + "AttachVolume": [ + { + "input": { + "Device": "/dev/sdf", + "InstanceId": "i-01474ef662b89480", + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + "AttachTime": "2016-08-29T18:52:32.724Z", + "Device": "/dev/sdf", + "InstanceId": "i-01474ef662b89480", + "State": "attaching", + "VolumeId": "vol-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example attaches a volume (``vol-1234567890abcdef0``) to an instance (``i-01474ef662b89480``) as ``/dev/sdf``.", + "id": "to-attach-a-volume-to-an-instance-1472499213109", + "title": "To attach a volume to an instance" + } + ], + "AuthorizeSecurityGroupEgress": [ + { + "input": { + "GroupId": "sg-1a2b3c4d", + "IpPermissions": [ + { + "FromPort": 80, + "IpProtocol": "tcp", + "IpRanges": [ + { + "CidrIp": "10.0.0.0/16" + } + ], + "ToPort": 80 + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds a rule that grants access to the specified address ranges on TCP port 80.", + "id": "to-add-a-rule-that-allows-outbound-traffic-to-a-specific-address-range-1528929309636", + "title": "To add a rule that allows outbound traffic to a specific address range" + }, + { + "input": { + "GroupId": "sg-1a2b3c4d", + "IpPermissions": [ + { + "FromPort": 80, + "IpProtocol": "tcp", + "ToPort": 80, + "UserIdGroupPairs": [ + { + "GroupId": "sg-4b51a32f" + } + ] + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds a rule that grants access to the specified security group on TCP port 80.", + "id": "to-add-a-rule-that-allows-outbound-traffic-to-a-specific-security-group-1528929760260", + "title": "To add a rule that allows outbound traffic to a specific security group" + } + ], + "AuthorizeSecurityGroupIngress": [ + { + "input": { + "GroupId": "sg-903004f8", + "IpPermissions": [ + { + "FromPort": 22, + "IpProtocol": "tcp", + "IpRanges": [ + { + "CidrIp": "203.0.113.0/24", + "Description": "SSH access from the LA office" + } + ], + "ToPort": 22 + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables inbound traffic on TCP port 22 (SSH). The rule includes a description to help you identify it later.", + "id": "to-add-a-rule-that-allows-inbound-ssh-traffic-1529011610328", + "title": "To add a rule that allows inbound SSH traffic from an IPv4 address range" + }, + { + "input": { + "GroupId": "sg-111aaa22", + "IpPermissions": [ + { + "FromPort": 80, + "IpProtocol": "tcp", + "ToPort": 80, + "UserIdGroupPairs": [ + { + "Description": "HTTP access from other instances", + "GroupId": "sg-1a2b3c4d" + } + ] + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables inbound traffic on TCP port 80 from the specified security group. The group must be in the same VPC or a peer VPC. Incoming traffic is allowed based on the private IP addresses of instances that are associated with the specified security group.", + "id": "to-add-a-rule-that-allows-inbound-http-traffic-from-another-security-group-1529012163168", + "title": "To add a rule that allows inbound HTTP traffic from another security group" + }, + { + "input": { + "GroupId": "sg-123abc12 ", + "IpPermissions": [ + { + "FromPort": 3389, + "IpProtocol": "tcp", + "Ipv6Ranges": [ + { + "CidrIpv6": "2001:db8:1234:1a00::/64", + "Description": "RDP access from the NY office" + } + ], + "ToPort": 3389 + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds an inbound rule that allows RDP traffic from the specified IPv6 address range. The rule includes a description to help you identify it later.", + "id": "to-add-a-rule-with-a-description-1529012418116", + "title": "To add a rule that allows inbound RDP traffic from an IPv6 address range" + } + ], + "CancelSpotFleetRequests": [ + { + "input": { + "SpotFleetRequestIds": [ + "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + ], + "TerminateInstances": true + }, + "output": { + "SuccessfulFleetRequests": [ + { + "CurrentSpotFleetRequestState": "cancelled_running", + "PreviousSpotFleetRequestState": "active", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels the specified Spot fleet request and terminates its associated Spot Instances.", + "id": "ec2-cancel-spot-fleet-requests-1", + "title": "To cancel a Spot fleet request" + }, + { + "input": { + "SpotFleetRequestIds": [ + "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + ], + "TerminateInstances": false + }, + "output": { + "SuccessfulFleetRequests": [ + { + "CurrentSpotFleetRequestState": "cancelled_terminating", + "PreviousSpotFleetRequestState": "active", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels the specified Spot fleet request without terminating its associated Spot Instances.", + "id": "ec2-cancel-spot-fleet-requests-2", + "title": "To cancel a Spot fleet request without terminating its Spot Instances" + } + ], + "CancelSpotInstanceRequests": [ + { + "input": { + "SpotInstanceRequestIds": [ + "sir-08b93456" + ] + }, + "output": { + "CancelledSpotInstanceRequests": [ + { + "SpotInstanceRequestId": "sir-08b93456", + "State": "cancelled" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example cancels a Spot Instance request.", + "id": "ec2-cancel-spot-instance-requests-1", + "title": "To cancel Spot Instance requests" + } + ], + "ConfirmProductInstance": [ + { + "input": { + "InstanceId": "i-1234567890abcdef0", + "ProductCode": "774F4FF8" + }, + "output": { + "OwnerId": "123456789012" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example determines whether the specified product code is associated with the specified instance.", + "id": "to-confirm-the-product-instance-1472712108494", + "title": "To confirm the product instance" + } + ], + "CopyImage": [ + { + "input": { + "Description": "", + "Name": "My server", + "SourceImageId": "ami-5731123e", + "SourceRegion": "us-east-1" + }, + "output": { + "ImageId": "ami-438bea42" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example copies the specified AMI from the us-east-1 region to the current region.", + "id": "to-copy-an-ami-to-another-region-1529022820832", + "title": "To copy an AMI to another region" + } + ], + "CopySnapshot": [ + { + "input": { + "Description": "This is my copied snapshot.", + "DestinationRegion": "us-east-1", + "SourceRegion": "us-west-2", + "SourceSnapshotId": "snap-066877671789bd71b" + }, + "output": { + "SnapshotId": "snap-066877671789bd71b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example copies a snapshot with the snapshot ID of ``snap-066877671789bd71b`` from the ``us-west-2`` region to the ``us-east-1`` region and adds a short description to identify the snapshot.", + "id": "to-copy-a-snapshot-1472502259774", + "title": "To copy a snapshot" + } + ], + "CreateCustomerGateway": [ + { + "input": { + "BgpAsn": 65534, + "PublicIp": "12.1.2.3", + "Type": "ipsec.1" + }, + "output": { + "CustomerGateway": { + "BgpAsn": "65534", + "CustomerGatewayId": "cgw-0e11f167", + "IpAddress": "12.1.2.3", + "State": "available", + "Type": "ipsec.1" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a customer gateway with the specified IP address for its outside interface.", + "id": "ec2-create-customer-gateway-1", + "title": "To create a customer gateway" + } + ], + "CreateDhcpOptions": [ + { + "input": { + "DhcpConfigurations": [ + { + "Key": "domain-name-servers", + "Values": [ + "10.2.5.1", + "10.2.5.2" + ] + } + ] + }, + "output": { + "DhcpOptions": { + "DhcpConfigurations": [ + { + "Key": "domain-name-servers", + "Values": [ + { + "Value": "10.2.5.2" + }, + { + "Value": "10.2.5.1" + } + ] + } + ], + "DhcpOptionsId": "dopt-d9070ebb" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DHCP options set.", + "id": "ec2-create-dhcp-options-1", + "title": "To create a DHCP options set" + } + ], + "CreateImage": [ + { + "input": { + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/sdh", + "Ebs": { + "VolumeSize": "100" + } + }, + { + "DeviceName": "/dev/sdc", + "VirtualName": "ephemeral1" + } + ], + "Description": "An AMI for my server", + "InstanceId": "i-1234567890abcdef0", + "Name": "My server", + "NoReboot": true + }, + "output": { + "ImageId": "ami-1a2b3c4d" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an AMI from the specified instance and adds an EBS volume with the device name /dev/sdh and an instance store volume with the device name /dev/sdc.", + "id": "to-create-an-ami-from-an-amazon-ebs-backed-instance-1529023150636", + "title": "To create an AMI from an Amazon EBS-backed instance" + } + ], + "CreateInternetGateway": [ + { + "output": { + "InternetGateway": { + "Attachments": [ + + ], + "InternetGatewayId": "igw-c0a643a9", + "Tags": [ + + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an Internet gateway.", + "id": "ec2-create-internet-gateway-1", + "title": "To create an Internet gateway" + } + ], + "CreateKeyPair": [ + { + "input": { + "KeyName": "my-key-pair" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a key pair named my-key-pair.", + "id": "ec2-create-key-pair-1", + "title": "To create a key pair" + } + ], + "CreateLaunchTemplate": [ + { + "input": { + "LaunchTemplateData": { + "ImageId": "ami-8c1be5f6", + "InstanceType": "t2.small", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeviceIndex": 0, + "Ipv6AddressCount": 1, + "SubnetId": "subnet-7b16de0c" + } + ], + "TagSpecifications": [ + { + "ResourceType": "instance", + "Tags": [ + { + "Key": "Name", + "Value": "webserver" + } + ] + } + ] + }, + "LaunchTemplateName": "my-template", + "VersionDescription": "WebVersion1" + }, + "output": { + "LaunchTemplate": { + "CreateTime": "2017-11-27T09:13:24.000Z", + "CreatedBy": "arn:aws:iam::123456789012:root", + "DefaultVersionNumber": 1, + "LatestVersionNumber": 1, + "LaunchTemplateId": "lt-01238c059e3466abc", + "LaunchTemplateName": "my-template" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a launch template that specifies the subnet in which to launch the instance, assigns a public IP address and an IPv6 address to the instance, and creates a tag for the instance.", + "id": "to-create-a-launch-template-1529023655488", + "title": "To create a launch template" + } + ], + "CreateLaunchTemplateVersion": [ + { + "input": { + "LaunchTemplateData": { + "ImageId": "ami-c998b6b2" + }, + "LaunchTemplateId": "lt-0abcd290751193123", + "SourceVersion": "1", + "VersionDescription": "WebVersion2" + }, + "output": { + "LaunchTemplateVersion": { + "CreateTime": "2017-12-01T13:35:46.000Z", + "CreatedBy": "arn:aws:iam::123456789012:root", + "DefaultVersion": false, + "LaunchTemplateData": { + "ImageId": "ami-c998b6b2", + "InstanceType": "t2.micro", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeviceIndex": 0, + "Ipv6Addresses": [ + { + "Ipv6Address": "2001:db8:1234:1a00::123" + } + ], + "SubnetId": "subnet-7b16de0c" + } + ] + }, + "LaunchTemplateId": "lt-0abcd290751193123", + "LaunchTemplateName": "my-template", + "VersionDescription": "WebVersion2", + "VersionNumber": 2 + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a new launch template version based on version 1 of the specified launch template and specifies a different AMI ID.", + "id": "to-create-a-launch-template-version-1529024195702", + "title": "To create a launch template version" + } + ], + "CreateNatGateway": [ + { + "input": { + "AllocationId": "eipalloc-37fc1a52", + "SubnetId": "subnet-1a2b3c4d" + }, + "output": { + "NatGateway": { + "CreateTime": "2015-12-17T12:45:26.732Z", + "NatGatewayAddresses": [ + { + "AllocationId": "eipalloc-37fc1a52" + } + ], + "NatGatewayId": "nat-08d48af2a8e83edfd", + "State": "pending", + "SubnetId": "subnet-1a2b3c4d", + "VpcId": "vpc-1122aabb" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a NAT gateway in subnet subnet-1a2b3c4d and associates an Elastic IP address with the allocation ID eipalloc-37fc1a52 with the NAT gateway.", + "id": "ec2-create-nat-gateway-1", + "title": "To create a NAT gateway" + } + ], + "CreateNetworkAcl": [ + { + "input": { + "VpcId": "vpc-a01106c2" + }, + "output": { + "NetworkAcl": { + "Associations": [ + + ], + "Entries": [ + { + "CidrBlock": "0.0.0.0/0", + "Egress": true, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + }, + { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + } + ], + "IsDefault": false, + "NetworkAclId": "acl-5fb85d36", + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a network ACL for the specified VPC.", + "id": "ec2-create-network-acl-1", + "title": "To create a network ACL" + } + ], + "CreateNetworkAclEntry": [ + { + "input": { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "NetworkAclId": "acl-5fb85d36", + "PortRange": { + "From": 53, + "To": 53 + }, + "Protocol": "17", + "RuleAction": "allow", + "RuleNumber": 100 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an entry for the specified network ACL. The rule allows ingress traffic from anywhere (0.0.0.0/0) on UDP port 53 (DNS) into any associated subnet.", + "id": "ec2-create-network-acl-entry-1", + "title": "To create a network ACL entry" + } + ], + "CreateNetworkInterface": [ + { + "input": { + "Description": "my network interface", + "Groups": [ + "sg-903004f8" + ], + "PrivateIpAddress": "10.0.2.17", + "SubnetId": "subnet-9d4a7b6c" + }, + "output": { + "NetworkInterface": { + "AvailabilityZone": "us-east-1d", + "Description": "my network interface", + "Groups": [ + { + "GroupId": "sg-903004f8", + "GroupName": "default" + } + ], + "MacAddress": "02:1a:80:41:52:9c", + "NetworkInterfaceId": "eni-e5aa89a3", + "OwnerId": "123456789012", + "PrivateIpAddress": "10.0.2.17", + "PrivateIpAddresses": [ + { + "Primary": true, + "PrivateIpAddress": "10.0.2.17" + } + ], + "RequesterManaged": false, + "SourceDestCheck": true, + "Status": "pending", + "SubnetId": "subnet-9d4a7b6c", + "TagSet": [ + + ], + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a network interface for the specified subnet.", + "id": "ec2-create-network-interface-1", + "title": "To create a network interface" + } + ], + "CreatePlacementGroup": [ + { + "input": { + "GroupName": "my-cluster", + "Strategy": "cluster" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a placement group with the specified name.", + "id": "to-create-a-placement-group-1472712245768", + "title": "To create a placement group" + } + ], + "CreateRoute": [ + { + "input": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": "igw-c0a643a9", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a route for the specified route table. The route matches all traffic (0.0.0.0/0) and routes it to the specified Internet gateway.", + "id": "ec2-create-route-1", + "title": "To create a route" + } + ], + "CreateRouteTable": [ + { + "input": { + "VpcId": "vpc-a01106c2" + }, + "output": { + "RouteTable": { + "Associations": [ + + ], + "PropagatingVgws": [ + + ], + "RouteTableId": "rtb-22574640", + "Routes": [ + { + "DestinationCidrBlock": "10.0.0.0/16", + "GatewayId": "local", + "State": "active" + } + ], + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a route table for the specified VPC.", + "id": "ec2-create-route-table-1", + "title": "To create a route table" + } + ], + "CreateSecurityGroup": [ + { + "input": { + "Description": "My security group", + "GroupName": "my-security-group", + "VpcId": "vpc-1a2b3c4d" + }, + "output": { + "GroupId": "sg-903004f8" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a security group for the specified VPC.", + "id": "to-create-a-security-group-for-a-vpc-1529024532716", + "title": "To create a security group for a VPC" + } + ], + "CreateSnapshot": [ + { + "input": { + "Description": "This is my root volume snapshot.", + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + "Description": "This is my root volume snapshot.", + "OwnerId": "012345678910", + "SnapshotId": "snap-066877671789bd71b", + "StartTime": "2014-02-28T21:06:01.000Z", + "State": "pending", + "Tags": [ + + ], + "VolumeId": "vol-1234567890abcdef0", + "VolumeSize": 8 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a snapshot of the volume with a volume ID of ``vol-1234567890abcdef0`` and a short description to identify the snapshot.", + "id": "to-create-a-snapshot-1472502529790", + "title": "To create a snapshot" + } + ], + "CreateSpotDatafeedSubscription": [ + { + "input": { + "Bucket": "my-s3-bucket", + "Prefix": "spotdata" + }, + "output": { + "SpotDatafeedSubscription": { + "Bucket": "my-s3-bucket", + "OwnerId": "123456789012", + "Prefix": "spotdata", + "State": "Active" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot Instance data feed for your AWS account.", + "id": "ec2-create-spot-datafeed-subscription-1", + "title": "To create a Spot Instance datafeed" + } + ], + "CreateSubnet": [ + { + "input": { + "CidrBlock": "10.0.1.0/24", + "VpcId": "vpc-a01106c2" + }, + "output": { + "Subnet": { + "AvailabilityZone": "us-west-2c", + "AvailableIpAddressCount": 251, + "CidrBlock": "10.0.1.0/24", + "State": "pending", + "SubnetId": "subnet-9d4a7b6c", + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a subnet in the specified VPC with the specified CIDR block. We recommend that you let us select an Availability Zone for you.", + "id": "ec2-create-subnet-1", + "title": "To create a subnet" + } + ], + "CreateTags": [ + { + "input": { + "Resources": [ + "ami-78a54011" + ], + "Tags": [ + { + "Key": "Stack", + "Value": "production" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds the tag Stack=production to the specified image, or overwrites an existing tag for the AMI where the tag key is Stack.", + "id": "ec2-create-tags-1", + "title": "To add a tag to a resource" + } + ], + "CreateVolume": [ + { + "input": { + "AvailabilityZone": "us-east-1a", + "Size": 80, + "VolumeType": "gp2" + }, + "output": { + "AvailabilityZone": "us-east-1a", + "CreateTime": "2016-08-29T18:52:32.724Z", + "Encrypted": false, + "Iops": 240, + "Size": 80, + "SnapshotId": "", + "State": "creating", + "VolumeId": "vol-6b60b7c7", + "VolumeType": "gp2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an 80 GiB General Purpose (SSD) volume in the Availability Zone ``us-east-1a``.", + "id": "to-create-a-new-volume-1472496724296", + "title": "To create a new volume" + }, + { + "input": { + "AvailabilityZone": "us-east-1a", + "Iops": 1000, + "SnapshotId": "snap-066877671789bd71b", + "VolumeType": "io1" + }, + "output": { + "Attachments": [ + + ], + "AvailabilityZone": "us-east-1a", + "CreateTime": "2016-08-29T18:52:32.724Z", + "Iops": 1000, + "Size": 500, + "SnapshotId": "snap-066877671789bd71b", + "State": "creating", + "Tags": [ + + ], + "VolumeId": "vol-1234567890abcdef0", + "VolumeType": "io1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a new Provisioned IOPS (SSD) volume with 1000 provisioned IOPS from a snapshot in the Availability Zone ``us-east-1a``.", + "id": "to-create-a-new-provisioned-iops-ssd-volume-from-a-snapshot-1472498975176", + "title": "To create a new Provisioned IOPS (SSD) volume from a snapshot" + } + ], + "CreateVpc": [ + { + "input": { + "CidrBlock": "10.0.0.0/16" + }, + "output": { + "Vpc": { + "CidrBlock": "10.0.0.0/16", + "DhcpOptionsId": "dopt-7a8b9c2d", + "InstanceTenancy": "default", + "State": "pending", + "VpcId": "vpc-a01106c2" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a VPC with the specified CIDR block.", + "id": "ec2-create-vpc-1", + "title": "To create a VPC" + } + ], + "DeleteCustomerGateway": [ + { + "input": { + "CustomerGatewayId": "cgw-0e11f167" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified customer gateway.", + "id": "ec2-delete-customer-gateway-1", + "title": "To delete a customer gateway" + } + ], + "DeleteDhcpOptions": [ + { + "input": { + "DhcpOptionsId": "dopt-d9070ebb" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified DHCP options set.", + "id": "ec2-delete-dhcp-options-1", + "title": "To delete a DHCP options set" + } + ], + "DeleteInternetGateway": [ + { + "input": { + "InternetGatewayId": "igw-c0a643a9" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified Internet gateway.", + "id": "ec2-delete-internet-gateway-1", + "title": "To delete an Internet gateway" + } + ], + "DeleteKeyPair": [ + { + "input": { + "KeyName": "my-key-pair" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified key pair.", + "id": "ec2-delete-key-pair-1", + "title": "To delete a key pair" + } + ], + "DeleteLaunchTemplate": [ + { + "input": { + "LaunchTemplateId": "lt-0abcd290751193123" + }, + "output": { + "LaunchTemplate": { + "CreateTime": "2017-11-23T16:46:25.000Z", + "CreatedBy": "arn:aws:iam::123456789012:root", + "DefaultVersionNumber": 2, + "LatestVersionNumber": 2, + "LaunchTemplateId": "lt-0abcd290751193123", + "LaunchTemplateName": "my-template" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified launch template.", + "id": "to-delete-a-launch-template-1529024658216", + "title": "To delete a launch template" + } + ], + "DeleteLaunchTemplateVersions": [ + { + "input": { + "LaunchTemplateId": "lt-0abcd290751193123", + "Versions": [ + "1" + ] + }, + "output": { + "SuccessfullyDeletedLaunchTemplateVersions": [ + { + "LaunchTemplateId": "lt-0abcd290751193123", + "LaunchTemplateName": "my-template", + "VersionNumber": 1 + } + ], + "UnsuccessfullyDeletedLaunchTemplateVersions": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified launch template version.", + "id": "to-delete-a-launch-template-version-1529024790864", + "title": "To delete a launch template version" + } + ], + "DeleteNatGateway": [ + { + "input": { + "NatGatewayId": "nat-04ae55e711cec5680" + }, + "output": { + "NatGatewayId": "nat-04ae55e711cec5680" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified NAT gateway.", + "id": "ec2-delete-nat-gateway-1", + "title": "To delete a NAT gateway" + } + ], + "DeleteNetworkAcl": [ + { + "input": { + "NetworkAclId": "acl-5fb85d36" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified network ACL.", + "id": "ec2-delete-network-acl-1", + "title": "To delete a network ACL" + } + ], + "DeleteNetworkAclEntry": [ + { + "input": { + "Egress": true, + "NetworkAclId": "acl-5fb85d36", + "RuleNumber": 100 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes ingress rule number 100 from the specified network ACL.", + "id": "ec2-delete-network-acl-entry-1", + "title": "To delete a network ACL entry" + } + ], + "DeleteNetworkInterface": [ + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified network interface.", + "id": "ec2-delete-network-interface-1", + "title": "To delete a network interface" + } + ], + "DeletePlacementGroup": [ + { + "input": { + "GroupName": "my-cluster" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified placement group.\n", + "id": "to-delete-a-placement-group-1472712349959", + "title": "To delete a placement group" + } + ], + "DeleteRoute": [ + { + "input": { + "DestinationCidrBlock": "0.0.0.0/0", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified route from the specified route table.", + "id": "ec2-delete-route-1", + "title": "To delete a route" + } + ], + "DeleteRouteTable": [ + { + "input": { + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified route table.", + "id": "ec2-delete-route-table-1", + "title": "To delete a route table" + } + ], + "DeleteSecurityGroup": [ + { + "input": { + "GroupId": "sg-903004f8" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified security group.", + "id": "to-delete-a-security-group-1529024952972", + "title": "To delete a security group" + } + ], + "DeleteSnapshot": [ + { + "input": { + "SnapshotId": "snap-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes a snapshot with the snapshot ID of ``snap-1234567890abcdef0``. If the command succeeds, no output is returned.", + "id": "to-delete-a-snapshot-1472503042567", + "title": "To delete a snapshot" + } + ], + "DeleteSpotDatafeedSubscription": [ + { + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes a Spot data feed subscription for the account.", + "id": "ec2-delete-spot-datafeed-subscription-1", + "title": "To cancel a Spot Instance data feed subscription" + } + ], + "DeleteSubnet": [ + { + "input": { + "SubnetId": "subnet-9d4a7b6c" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified subnet.", + "id": "ec2-delete-subnet-1", + "title": "To delete a subnet" + } + ], + "DeleteTags": [ + { + "input": { + "Resources": [ + "ami-78a54011" + ], + "Tags": [ + { + "Key": "Stack", + "Value": "test" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the tag Stack=test from the specified image.", + "id": "ec2-delete-tags-1", + "title": "To delete a tag from a resource" + } + ], + "DeleteVolume": [ + { + "input": { + "VolumeId": "vol-049df61146c4d7901" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes an available volume with the volume ID of ``vol-049df61146c4d7901``. If the command succeeds, no output is returned.", + "id": "to-delete-a-volume-1472503111160", + "title": "To delete a volume" + } + ], + "DeleteVpc": [ + { + "input": { + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified VPC.", + "id": "ec2-delete-vpc-1", + "title": "To delete a VPC" + } + ], + "DescribeAccountAttributes": [ + { + "input": { + "AttributeNames": [ + "supported-platforms" + ] + }, + "output": { + "AccountAttributes": [ + { + "AttributeName": "supported-platforms", + "AttributeValues": [ + { + "AttributeValue": "EC2" + }, + { + "AttributeValue": "VPC" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the supported-platforms attribute for your AWS account.", + "id": "ec2-describe-account-attributes-1", + "title": "To describe a single attribute for your AWS account" + }, + { + "output": { + "AccountAttributes": [ + { + "AttributeName": "supported-platforms", + "AttributeValues": [ + { + "AttributeValue": "EC2" + }, + { + "AttributeValue": "VPC" + } + ] + }, + { + "AttributeName": "vpc-max-security-groups-per-interface", + "AttributeValues": [ + { + "AttributeValue": "5" + } + ] + }, + { + "AttributeName": "max-elastic-ips", + "AttributeValues": [ + { + "AttributeValue": "5" + } + ] + }, + { + "AttributeName": "max-instances", + "AttributeValues": [ + { + "AttributeValue": "20" + } + ] + }, + { + "AttributeName": "vpc-max-elastic-ips", + "AttributeValues": [ + { + "AttributeValue": "5" + } + ] + }, + { + "AttributeName": "default-vpc", + "AttributeValues": [ + { + "AttributeValue": "none" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the attributes for your AWS account.", + "id": "ec2-describe-account-attributes-2", + "title": "To describe all attributes for your AWS account" + } + ], + "DescribeAddresses": [ + { + "output": { + "Addresses": [ + { + "Domain": "standard", + "InstanceId": "i-1234567890abcdef0", + "PublicIp": "198.51.100.0" + }, + { + "AllocationId": "eipalloc-12345678", + "AssociationId": "eipassoc-12345678", + "Domain": "vpc", + "InstanceId": "i-1234567890abcdef0", + "NetworkInterfaceId": "eni-12345678", + "NetworkInterfaceOwnerId": "123456789012", + "PrivateIpAddress": "10.0.1.241", + "PublicIp": "203.0.113.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes your Elastic IP addresses.", + "id": "ec2-describe-addresses-1", + "title": "To describe your Elastic IP addresses" + }, + { + "input": { + "Filters": [ + { + "Name": "domain", + "Values": [ + "vpc" + ] + } + ] + }, + "output": { + "Addresses": [ + { + "AllocationId": "eipalloc-12345678", + "AssociationId": "eipassoc-12345678", + "Domain": "vpc", + "InstanceId": "i-1234567890abcdef0", + "NetworkInterfaceId": "eni-12345678", + "NetworkInterfaceOwnerId": "123456789012", + "PrivateIpAddress": "10.0.1.241", + "PublicIp": "203.0.113.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes your Elastic IP addresses for use with instances in a VPC.", + "id": "ec2-describe-addresses-2", + "title": "To describe your Elastic IP addresses for EC2-VPC" + }, + { + "input": { + "Filters": [ + { + "Name": "domain", + "Values": [ + "standard" + ] + } + ] + }, + "output": { + "Addresses": [ + { + "Domain": "standard", + "InstanceId": "i-1234567890abcdef0", + "PublicIp": "198.51.100.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes your Elastic IP addresses for use with instances in EC2-Classic.", + "id": "ec2-describe-addresses-3", + "title": "To describe your Elastic IP addresses for EC2-Classic" + } + ], + "DescribeAvailabilityZones": [ + { + "output": { + "AvailabilityZones": [ + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1b" + }, + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1c" + }, + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1d" + }, + { + "Messages": [ + + ], + "RegionName": "us-east-1", + "State": "available", + "ZoneName": "us-east-1e" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Availability Zones that are available to you. The response includes Availability Zones only for the current region.", + "id": "ec2-describe-availability-zones-1", + "title": "To describe your Availability Zones" + } + ], + "DescribeCustomerGateways": [ + { + "input": { + "CustomerGatewayIds": [ + "cgw-0e11f167" + ] + }, + "output": { + "CustomerGateways": [ + { + "BgpAsn": "65534", + "CustomerGatewayId": "cgw-0e11f167", + "IpAddress": "12.1.2.3", + "State": "available", + "Type": "ipsec.1" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified customer gateway.", + "id": "ec2-describe-customer-gateways-1", + "title": "To describe a customer gateway" + } + ], + "DescribeDhcpOptions": [ + { + "input": { + "DhcpOptionsIds": [ + "dopt-d9070ebb" + ] + }, + "output": { + "DhcpOptions": [ + { + "DhcpConfigurations": [ + { + "Key": "domain-name-servers", + "Values": [ + { + "Value": "10.2.5.2" + }, + { + "Value": "10.2.5.1" + } + ] + } + ], + "DhcpOptionsId": "dopt-d9070ebb" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified DHCP options set.", + "id": "ec2-describe-dhcp-options-1", + "title": "To describe a DHCP options set" + } + ], + "DescribeIamInstanceProfileAssociations": [ + { + "input": { + "AssociationIds": [ + "iip-assoc-0db249b1f25fa24b8" + ] + }, + "output": { + "IamInstanceProfileAssociations": [ + { + "AssociationId": "iip-assoc-0db249b1f25fa24b8", + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/admin-role", + "Id": "AIPAJVQN4F5WVLGCJDRGM" + }, + "InstanceId": "i-09eb09efa73ec1dee", + "State": "associated" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified IAM instance profile association.", + "id": "to-describe-an-iam-instance-profile-association-1529025123918", + "title": "To describe an IAM instance profile association" + } + ], + "DescribeImageAttribute": [ + { + "input": { + "Attribute": "launchPermission", + "ImageId": "ami-5731123e" + }, + "output": { + "ImageId": "ami-5731123e", + "LaunchPermissions": [ + { + "UserId": "123456789012" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the launch permissions for the specified AMI.", + "id": "to-describe-the-launch-permissions-for-an-ami-1529025296264", + "title": "To describe the launch permissions for an AMI" + } + ], + "DescribeImages": [ + { + "input": { + "ImageIds": [ + "ami-5731123e" + ] + }, + "output": { + "Images": [ + { + "Architecture": "x86_64", + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/sda1", + "Ebs": { + "DeleteOnTermination": true, + "SnapshotId": "snap-1234567890abcdef0", + "VolumeSize": 8, + "VolumeType": "standard" + } + } + ], + "Description": "An AMI for my server", + "Hypervisor": "xen", + "ImageId": "ami-5731123e", + "ImageLocation": "123456789012/My server", + "ImageType": "machine", + "KernelId": "aki-88aa75e1", + "Name": "My server", + "OwnerId": "123456789012", + "Public": false, + "RootDeviceName": "/dev/sda1", + "RootDeviceType": "ebs", + "State": "available", + "VirtualizationType": "paravirtual" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified AMI.", + "id": "to-describe-an-ami-1529025482866", + "title": "To describe an AMI" + } + ], + "DescribeInstanceAttribute": [ + { + "input": { + "Attribute": "instanceType", + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + "InstanceId": "i-1234567890abcdef0", + "InstanceType": { + "Value": "t1.micro" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the instance type of the specified instance.\n", + "id": "to-describe-the-instance-type-1472712432132", + "title": "To describe the instance type" + }, + { + "input": { + "Attribute": "disableApiTermination", + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + "DisableApiTermination": { + "Value": "false" + }, + "InstanceId": "i-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``disableApiTermination`` attribute of the specified instance.\n", + "id": "to-describe-the-disableapitermination-attribute-1472712533466", + "title": "To describe the disableApiTermination attribute" + }, + { + "input": { + "Attribute": "blockDeviceMapping", + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/sda1", + "Ebs": { + "AttachTime": "2013-05-17T22:42:34.000Z", + "DeleteOnTermination": true, + "Status": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + }, + { + "DeviceName": "/dev/sdf", + "Ebs": { + "AttachTime": "2013-09-10T23:07:00.000Z", + "DeleteOnTermination": false, + "Status": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + } + ], + "InstanceId": "i-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``blockDeviceMapping`` attribute of the specified instance.\n", + "id": "to-describe-the-block-device-mapping-for-an-instance-1472712645423", + "title": "To describe the block device mapping for an instance" + } + ], + "DescribeInstanceStatus": [ + { + "input": { + "InstanceIds": [ + "i-1234567890abcdef0" + ] + }, + "output": { + "InstanceStatuses": [ + { + "AvailabilityZone": "us-east-1d", + "InstanceId": "i-1234567890abcdef0", + "InstanceState": { + "Code": 16, + "Name": "running" + }, + "InstanceStatus": { + "Details": [ + { + "Name": "reachability", + "Status": "passed" + } + ], + "Status": "ok" + }, + "SystemStatus": { + "Details": [ + { + "Name": "reachability", + "Status": "passed" + } + ], + "Status": "ok" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the current status of the specified instance.", + "id": "to-describe-the-status-of-an-instance-1529025696830", + "title": "To describe the status of an instance" + } + ], + "DescribeInstances": [ + { + "input": { + "InstanceIds": [ + "i-1234567890abcdef0" + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified instance.", + "id": "to-describe-an-amazon-ec2-instance-1529025982172", + "title": "To describe an Amazon EC2 instance" + }, + { + "input": { + "Filters": [ + { + "Name": "instance-type", + "Values": [ + "t2.micro" + ] + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the instances with the t2.micro instance type.", + "id": "to-describe-the-instances-with-the-instance-type-t2micro-1529026147602", + "title": "To describe the instances with a specific instance type" + }, + { + "input": { + "Filters": [ + { + "Name": "tag:Purpose", + "Values": [ + "test" + ] + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the instances with the Purpose=test tag.", + "id": "to-describe-the-instances-with-a-specific-tag-1529026251928", + "title": "To describe the instances with a specific tag" + } + ], + "DescribeInternetGateways": [ + { + "input": { + "Filters": [ + { + "Name": "attachment.vpc-id", + "Values": [ + "vpc-a01106c2" + ] + } + ] + }, + "output": { + "InternetGateways": [ + { + "Attachments": [ + { + "State": "available", + "VpcId": "vpc-a01106c2" + } + ], + "InternetGatewayId": "igw-c0a643a9", + "Tags": [ + + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Internet gateway for the specified VPC.", + "id": "ec2-describe-internet-gateways-1", + "title": "To describe the Internet gateway for a VPC" + } + ], + "DescribeKeyPairs": [ + { + "input": { + "KeyNames": [ + "my-key-pair" + ] + }, + "output": { + "KeyPairs": [ + { + "KeyFingerprint": "1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f", + "KeyName": "my-key-pair" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example displays the fingerprint for the specified key.", + "id": "ec2-describe-key-pairs-1", + "title": "To display a key pair" + } + ], + "DescribeLaunchTemplateVersions": [ + { + "input": { + "LaunchTemplateId": "068f72b72934aff71" + }, + "output": { + "LaunchTemplateVersions": [ + { + "CreateTime": "2017-11-20T13:12:32.000Z", + "CreatedBy": "arn:aws:iam::123456789102:root", + "DefaultVersion": false, + "LaunchTemplateData": { + "ImageId": "ami-6057e21a", + "InstanceType": "t2.medium", + "KeyName": "kp-us-east", + "NetworkInterfaces": [ + { + "DeviceIndex": 0, + "Groups": [ + "sg-7c227019" + ], + "SubnetId": "subnet-1a2b3c4d" + } + ] + }, + "LaunchTemplateId": "lt-068f72b72934aff71", + "LaunchTemplateName": "Webservers", + "VersionNumber": 2 + }, + { + "CreateTime": "2017-11-20T12:52:33.000Z", + "CreatedBy": "arn:aws:iam::123456789102:root", + "DefaultVersion": true, + "LaunchTemplateData": { + "ImageId": "ami-aabbcc11", + "InstanceType": "t2.medium", + "KeyName": "kp-us-east", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeleteOnTermination": false, + "DeviceIndex": 0, + "Groups": [ + "sg-7c227019" + ], + "SubnetId": "subnet-7b16de0c" + } + ], + "UserData": "" + }, + "LaunchTemplateId": "lt-068f72b72934aff71", + "LaunchTemplateName": "Webservers", + "VersionNumber": 1 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the versions for the specified launch template.", + "id": "to-describe-the-versions-for-a-launch-template-1529344425048", + "title": "To describe the versions for a launch template" + } + ], + "DescribeLaunchTemplates": [ + { + "input": { + "LaunchTemplateIds": [ + "lt-01238c059e3466abc" + ] + }, + "output": { + "LaunchTemplates": [ + { + "CreateTime": "2018-01-16T04:32:57.000Z", + "CreatedBy": "arn:aws:iam::123456789012:root", + "DefaultVersionNumber": 1, + "LatestVersionNumber": 1, + "LaunchTemplateId": "lt-01238c059e3466abc", + "LaunchTemplateName": "my-template" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified launch template.", + "id": "to-describe-a-launch-template-1529344182862", + "title": "To describe a launch template" + } + ], + "DescribeMovingAddresses": [ + { + "output": { + "MovingAddressStatuses": [ + { + "MoveStatus": "MovingToVpc", + "PublicIp": "198.51.100.0" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all of your moving Elastic IP addresses.", + "id": "ec2-describe-moving-addresses-1", + "title": "To describe your moving addresses" + } + ], + "DescribeNatGateways": [ + { + "input": { + "Filter": [ + { + "Name": "vpc-id", + "Values": [ + "vpc-1a2b3c4d" + ] + } + ] + }, + "output": { + "NatGateways": [ + { + "CreateTime": "2015-12-01T12:26:55.983Z", + "NatGatewayAddresses": [ + { + "AllocationId": "eipalloc-89c620ec", + "NetworkInterfaceId": "eni-9dec76cd", + "PrivateIp": "10.0.0.149", + "PublicIp": "198.11.222.333" + } + ], + "NatGatewayId": "nat-05dba92075d71c408", + "State": "available", + "SubnetId": "subnet-847e4dc2", + "VpcId": "vpc-1a2b3c4d" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the NAT gateway for the specified VPC.", + "id": "ec2-describe-nat-gateways-1", + "title": "To describe a NAT gateway" + } + ], + "DescribeNetworkAcls": [ + { + "input": { + "NetworkAclIds": [ + "acl-5fb85d36" + ] + }, + "output": { + "NetworkAcls": [ + { + "Associations": [ + { + "NetworkAclAssociationId": "aclassoc-66ea5f0b", + "NetworkAclId": "acl-9aeb5ef7", + "SubnetId": "subnet-65ea5f08" + } + ], + "Entries": [ + { + "CidrBlock": "0.0.0.0/0", + "Egress": true, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + }, + { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "Protocol": "-1", + "RuleAction": "deny", + "RuleNumber": 32767 + } + ], + "IsDefault": false, + "NetworkAclId": "acl-5fb85d36", + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified network ACL.", + "id": "ec2-", + "title": "To describe a network ACL" + } + ], + "DescribeNetworkInterfaceAttribute": [ + { + "input": { + "Attribute": "attachment", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "Attachment": { + "AttachTime": "2015-05-21T20:02:20.000Z", + "AttachmentId": "eni-attach-43348162", + "DeleteOnTermination": true, + "DeviceIndex": 0, + "InstanceId": "i-1234567890abcdef0", + "InstanceOwnerId": "123456789012", + "Status": "attached" + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the attachment attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-1", + "title": "To describe the attachment attribute of a network interface" + }, + { + "input": { + "Attribute": "description", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "Description": { + "Value": "My description" + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the description attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-2", + "title": "To describe the description attribute of a network interface" + }, + { + "input": { + "Attribute": "groupSet", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "Groups": [ + { + "GroupId": "sg-903004f8", + "GroupName": "my-security-group" + } + ], + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the groupSet attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-3", + "title": "To describe the groupSet attribute of a network interface" + }, + { + "input": { + "Attribute": "sourceDestCheck", + "NetworkInterfaceId": "eni-686ea200" + }, + "output": { + "NetworkInterfaceId": "eni-686ea200", + "SourceDestCheck": { + "Value": true + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the sourceDestCheck attribute of the specified network interface.", + "id": "ec2-describe-network-interface-attribute-4", + "title": "To describe the sourceDestCheck attribute of a network interface" + } + ], + "DescribeNetworkInterfaces": [ + { + "input": { + "NetworkInterfaceIds": [ + "eni-e5aa89a3" + ] + }, + "output": { + "NetworkInterfaces": [ + { + "Association": { + "AssociationId": "eipassoc-0fbb766a", + "IpOwnerId": "123456789012", + "PublicDnsName": "ec2-203-0-113-12.compute-1.amazonaws.com", + "PublicIp": "203.0.113.12" + }, + "Attachment": { + "AttachTime": "2013-11-30T23:36:42.000Z", + "AttachmentId": "eni-attach-66c4350a", + "DeleteOnTermination": false, + "DeviceIndex": 1, + "InstanceId": "i-1234567890abcdef0", + "InstanceOwnerId": "123456789012", + "Status": "attached" + }, + "AvailabilityZone": "us-east-1d", + "Description": "my network interface", + "Groups": [ + { + "GroupId": "sg-8637d3e3", + "GroupName": "default" + } + ], + "MacAddress": "02:2f:8f:b0:cf:75", + "NetworkInterfaceId": "eni-e5aa89a3", + "OwnerId": "123456789012", + "PrivateDnsName": "ip-10-0-1-17.ec2.internal", + "PrivateIpAddress": "10.0.1.17", + "PrivateIpAddresses": [ + { + "Association": { + "AssociationId": "eipassoc-0fbb766a", + "IpOwnerId": "123456789012", + "PublicDnsName": "ec2-203-0-113-12.compute-1.amazonaws.com", + "PublicIp": "203.0.113.12" + }, + "Primary": true, + "PrivateDnsName": "ip-10-0-1-17.ec2.internal", + "PrivateIpAddress": "10.0.1.17" + } + ], + "RequesterManaged": false, + "SourceDestCheck": true, + "Status": "in-use", + "SubnetId": "subnet-b61f49f0", + "TagSet": [ + + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "ec2-describe-network-interfaces-1", + "title": "To describe a network interface" + } + ], + "DescribeRegions": [ + { + "output": { + "Regions": [ + { + "Endpoint": "ec2.ap-south-1.amazonaws.com", + "RegionName": "ap-south-1" + }, + { + "Endpoint": "ec2.eu-west-1.amazonaws.com", + "RegionName": "eu-west-1" + }, + { + "Endpoint": "ec2.ap-southeast-1.amazonaws.com", + "RegionName": "ap-southeast-1" + }, + { + "Endpoint": "ec2.ap-southeast-2.amazonaws.com", + "RegionName": "ap-southeast-2" + }, + { + "Endpoint": "ec2.eu-central-1.amazonaws.com", + "RegionName": "eu-central-1" + }, + { + "Endpoint": "ec2.ap-northeast-2.amazonaws.com", + "RegionName": "ap-northeast-2" + }, + { + "Endpoint": "ec2.ap-northeast-1.amazonaws.com", + "RegionName": "ap-northeast-1" + }, + { + "Endpoint": "ec2.us-east-1.amazonaws.com", + "RegionName": "us-east-1" + }, + { + "Endpoint": "ec2.sa-east-1.amazonaws.com", + "RegionName": "sa-east-1" + }, + { + "Endpoint": "ec2.us-west-1.amazonaws.com", + "RegionName": "us-west-1" + }, + { + "Endpoint": "ec2.us-west-2.amazonaws.com", + "RegionName": "us-west-2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all the regions that are available to you.", + "id": "ec2-describe-regions-1", + "title": "To describe your regions" + } + ], + "DescribeRouteTables": [ + { + "input": { + "RouteTableIds": [ + "rtb-1f382e7d" + ] + }, + "output": { + "RouteTables": [ + { + "Associations": [ + { + "Main": true, + "RouteTableAssociationId": "rtbassoc-d8ccddba", + "RouteTableId": "rtb-1f382e7d" + } + ], + "PropagatingVgws": [ + + ], + "RouteTableId": "rtb-1f382e7d", + "Routes": [ + { + "DestinationCidrBlock": "10.0.0.0/16", + "GatewayId": "local", + "State": "active" + } + ], + "Tags": [ + + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified route table.", + "id": "ec2-describe-route-tables-1", + "title": "To describe a route table" + } + ], + "DescribeScheduledInstanceAvailability": [ + { + "input": { + "FirstSlotStartTimeRange": { + "EarliestTime": "2016-01-31T00:00:00Z", + "LatestTime": "2016-01-31T04:00:00Z" + }, + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDays": [ + 1 + ] + } + }, + "output": { + "ScheduledInstanceAvailabilitySet": [ + { + "AvailabilityZone": "us-west-2b", + "AvailableInstanceCount": 20, + "FirstSlotStartTime": "2016-01-31T00:00:00Z", + "HourlyPrice": "0.095", + "InstanceType": "c4.large", + "MaxTermDurationInDays": 366, + "MinTermDurationInDays": 366, + "NetworkPlatform": "EC2-VPC", + "Platform": "Linux/UNIX", + "PurchaseToken": "eyJ2IjoiMSIsInMiOjEsImMiOi...", + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDaySet": [ + 1 + ], + "OccurrenceRelativeToEnd": false + }, + "SlotDurationInHours": 23, + "TotalScheduledInstanceHours": 1219 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes a schedule that occurs every week on Sunday, starting on the specified date. Note that the output contains a single schedule as an example.", + "id": "ec2-describe-scheduled-instance-availability-1", + "title": "To describe an available schedule" + } + ], + "DescribeScheduledInstances": [ + { + "input": { + "ScheduledInstanceIds": [ + "sci-1234-1234-1234-1234-123456789012" + ] + }, + "output": { + "ScheduledInstanceSet": [ + { + "AvailabilityZone": "us-west-2b", + "CreateDate": "2016-01-25T21:43:38.612Z", + "HourlyPrice": "0.095", + "InstanceCount": 1, + "InstanceType": "c4.large", + "NetworkPlatform": "EC2-VPC", + "NextSlotStartTime": "2016-01-31T09:00:00Z", + "Platform": "Linux/UNIX", + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDaySet": [ + 1 + ], + "OccurrenceRelativeToEnd": false, + "OccurrenceUnit": "" + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012", + "SlotDurationInHours": 32, + "TermEndDate": "2017-01-31T09:00:00Z", + "TermStartDate": "2016-01-31T09:00:00Z", + "TotalScheduledInstanceHours": 1696 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Scheduled Instance.", + "id": "ec2-describe-scheduled-instances-1", + "title": "To describe your Scheduled Instances" + } + ], + "DescribeSecurityGroupReferences": [ + { + "input": { + "GroupId": [ + "sg-903004f8" + ] + }, + "output": { + "SecurityGroupReferenceSet": [ + { + "GroupId": "sg-903004f8", + "ReferencingVpcId": "vpc-1a2b3c4d", + "VpcPeeringConnectionId": "pcx-b04deed9" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the security group references for the specified security group.", + "id": "to-describe-security-group-references-1529354312088", + "title": "To describe security group references" + } + ], + "DescribeSecurityGroups": [ + { + "input": { + "GroupIds": [ + "sg-903004f8" + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified security group.", + "id": "to-describe-a-security-group-1529354426314", + "title": "To describe a security group" + }, + { + "input": { + "Filters": [ + { + "Name": "tag:Purpose", + "Values": [ + "test" + ] + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the security groups that include the specified tag (Purpose=test).", + "id": "to-describe-a-tagged-security-group-1529354553880", + "title": "To describe a tagged security group" + } + ], + "DescribeSnapshotAttribute": [ + { + "input": { + "Attribute": "createVolumePermission", + "SnapshotId": "snap-066877671789bd71b" + }, + "output": { + "CreateVolumePermissions": [ + + ], + "SnapshotId": "snap-066877671789bd71b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``createVolumePermission`` attribute on a snapshot with the snapshot ID of ``snap-066877671789bd71b``.", + "id": "to-describe-snapshot-attributes-1472503199736", + "title": "To describe snapshot attributes" + } + ], + "DescribeSnapshots": [ + { + "input": { + "SnapshotIds": [ + "snap-1234567890abcdef0" + ] + }, + "output": { + "NextToken": "", + "Snapshots": [ + { + "Description": "This is my snapshot.", + "OwnerId": "012345678910", + "Progress": "100%", + "SnapshotId": "snap-1234567890abcdef0", + "StartTime": "2014-02-28T21:28:32.000Z", + "State": "completed", + "VolumeId": "vol-049df61146c4d7901", + "VolumeSize": 8 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes a snapshot with the snapshot ID of ``snap-1234567890abcdef0``.", + "id": "to-describe-a-snapshot-1472503807850", + "title": "To describe a snapshot" + }, + { + "input": { + "Filters": [ + { + "Name": "status", + "Values": [ + "pending" + ] + } + ], + "OwnerIds": [ + "012345678910" + ] + }, + "output": { + "NextToken": "", + "Snapshots": [ + { + "Description": "This is my copied snapshot.", + "OwnerId": "012345678910", + "Progress": "87%", + "SnapshotId": "snap-066877671789bd71b", + "StartTime": "2014-02-28T21:37:27.000Z", + "State": "pending", + "VolumeId": "vol-1234567890abcdef0", + "VolumeSize": 8 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all snapshots owned by the ID 012345678910 that are in the ``pending`` status.", + "id": "to-describe-snapshots-using-filters-1472503929793", + "title": "To describe snapshots using filters" + } + ], + "DescribeSpotDatafeedSubscription": [ + { + "output": { + "SpotDatafeedSubscription": { + "Bucket": "my-s3-bucket", + "OwnerId": "123456789012", + "Prefix": "spotdata", + "State": "Active" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the Spot Instance datafeed subscription for your AWS account.", + "id": "ec2-describe-spot-datafeed-subscription-1", + "title": "To describe the datafeed for your AWS account" + } + ], + "DescribeSpotFleetInstances": [ + { + "input": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "output": { + "ActiveInstances": [ + { + "InstanceId": "i-1234567890abcdef0", + "InstanceType": "m3.medium", + "SpotInstanceRequestId": "sir-08b93456" + } + ], + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists the Spot Instances associated with the specified Spot fleet.", + "id": "ec2-describe-spot-fleet-instances-1", + "title": "To describe the Spot Instances associated with a Spot fleet" + } + ], + "DescribeSpotFleetRequestHistory": [ + { + "input": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "StartTime": "2015-05-26T00:00:00Z" + }, + "output": { + "HistoryRecords": [ + { + "EventInformation": { + "EventSubType": "submitted" + }, + "EventType": "fleetRequestChange", + "Timestamp": "2015-05-26T23:17:20.697Z" + }, + { + "EventInformation": { + "EventSubType": "active" + }, + "EventType": "fleetRequestChange", + "Timestamp": "2015-05-26T23:17:20.873Z" + }, + { + "EventInformation": { + "EventSubType": "launched", + "InstanceId": "i-1234567890abcdef0" + }, + "EventType": "instanceChange", + "Timestamp": "2015-05-26T23:21:21.712Z" + }, + { + "EventInformation": { + "EventSubType": "launched", + "InstanceId": "i-1234567890abcdef1" + }, + "EventType": "instanceChange", + "Timestamp": "2015-05-26T23:21:21.816Z" + } + ], + "NextToken": "CpHNsscimcV5oH7bSbub03CI2Qms5+ypNpNm+53MNlR0YcXAkp0xFlfKf91yVxSExmbtma3awYxMFzNA663ZskT0AHtJ6TCb2Z8bQC2EnZgyELbymtWPfpZ1ZbauVg+P+TfGlWxWWB/Vr5dk5d4LfdgA/DRAHUrYgxzrEXAMPLE=", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "StartTime": "2015-05-26T00:00:00Z" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example returns the history for the specified Spot fleet starting at the specified time.", + "id": "ec2-describe-spot-fleet-request-history-1", + "title": "To describe Spot fleet history" + } + ], + "DescribeSpotFleetRequests": [ + { + "input": { + "SpotFleetRequestIds": [ + "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + ] + }, + "output": { + "SpotFleetRequestConfigs": [ + { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "EbsOptimized": false, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "cc2.8xlarge", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeleteOnTermination": false, + "DeviceIndex": 0, + "SecondaryPrivateIpAddressCount": 0, + "SubnetId": "subnet-a61dafcf" + } + ] + }, + { + "EbsOptimized": false, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "r3.8xlarge", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeleteOnTermination": false, + "DeviceIndex": 0, + "SecondaryPrivateIpAddressCount": 0, + "SubnetId": "subnet-a61dafcf" + } + ] + } + ], + "SpotPrice": "0.05", + "TargetCapacity": 20 + }, + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "SpotFleetRequestState": "active" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Spot fleet request.", + "id": "ec2-describe-spot-fleet-requests-1", + "title": "To describe a Spot fleet request" + } + ], + "DescribeSpotInstanceRequests": [ + { + "input": { + "SpotInstanceRequestIds": [ + "sir-08b93456" + ] + }, + "output": { + "SpotInstanceRequests": [ + { + "CreateTime": "2014-04-30T18:14:55.000Z", + "InstanceId": "i-1234567890abcdef0", + "LaunchSpecification": { + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/sda1", + "Ebs": { + "DeleteOnTermination": true, + "VolumeSize": 8, + "VolumeType": "standard" + } + } + ], + "EbsOptimized": false, + "ImageId": "ami-7aba833f", + "InstanceType": "m1.small", + "KeyName": "my-key-pair", + "SecurityGroups": [ + { + "GroupId": "sg-e38f24a7", + "GroupName": "my-security-group" + } + ] + }, + "LaunchedAvailabilityZone": "us-west-1b", + "ProductDescription": "Linux/UNIX", + "SpotInstanceRequestId": "sir-08b93456", + "SpotPrice": "0.010000", + "State": "active", + "Status": { + "Code": "fulfilled", + "Message": "Your Spot request is fulfilled.", + "UpdateTime": "2014-04-30T18:16:21.000Z" + }, + "Type": "one-time" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified Spot Instance request.", + "id": "ec2-describe-spot-instance-requests-1", + "title": "To describe a Spot Instance request" + } + ], + "DescribeSpotPriceHistory": [ + { + "input": { + "EndTime": "2014-01-06T08:09:10", + "InstanceTypes": [ + "m1.xlarge" + ], + "ProductDescriptions": [ + "Linux/UNIX (Amazon VPC)" + ], + "StartTime": "2014-01-06T07:08:09" + }, + "output": { + "SpotPriceHistory": [ + { + "AvailabilityZone": "us-west-1a", + "InstanceType": "m1.xlarge", + "ProductDescription": "Linux/UNIX (Amazon VPC)", + "SpotPrice": "0.080000", + "Timestamp": "2014-01-06T04:32:53.000Z" + }, + { + "AvailabilityZone": "us-west-1c", + "InstanceType": "m1.xlarge", + "ProductDescription": "Linux/UNIX (Amazon VPC)", + "SpotPrice": "0.080000", + "Timestamp": "2014-01-05T11:28:26.000Z" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example returns the Spot Price history for m1.xlarge, Linux/UNIX (Amazon VPC) instances for a particular day in January.", + "id": "ec2-describe-spot-price-history-1", + "title": "To describe Spot price history for Linux/UNIX (Amazon VPC)" + } + ], + "DescribeSubnets": [ + { + "input": { + "Filters": [ + { + "Name": "vpc-id", + "Values": [ + "vpc-a01106c2" + ] + } + ] + }, + "output": { + "Subnets": [ + { + "AvailabilityZone": "us-east-1c", + "AvailableIpAddressCount": 251, + "CidrBlock": "10.0.1.0/24", + "DefaultForAz": false, + "MapPublicIpOnLaunch": false, + "State": "available", + "SubnetId": "subnet-9d4a7b6c", + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the subnets for the specified VPC.", + "id": "ec2-describe-subnets-1", + "title": "To describe the subnets for a VPC" + } + ], + "DescribeTags": [ + { + "input": { + "Filters": [ + { + "Name": "resource-id", + "Values": [ + "i-1234567890abcdef8" + ] + } + ] + }, + "output": { + "Tags": [ + { + "Key": "Stack", + "ResourceId": "i-1234567890abcdef8", + "ResourceType": "instance", + "Value": "test" + }, + { + "Key": "Name", + "ResourceId": "i-1234567890abcdef8", + "ResourceType": "instance", + "Value": "Beta Server" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the tags for the specified instance.", + "id": "ec2-describe-tags-1", + "title": "To describe the tags for a single resource" + } + ], + "DescribeVolumeAttribute": [ + { + "input": { + "Attribute": "autoEnableIO", + "VolumeId": "vol-049df61146c4d7901" + }, + "output": { + "AutoEnableIO": { + "Value": false + }, + "VolumeId": "vol-049df61146c4d7901" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the ``autoEnableIo`` attribute of the volume with the ID ``vol-049df61146c4d7901``.", + "id": "to-describe-a-volume-attribute-1472505773492", + "title": "To describe a volume attribute" + } + ], + "DescribeVolumeStatus": [ + { + "input": { + "VolumeIds": [ + "vol-1234567890abcdef0" + ] + }, + "output": { + "VolumeStatuses": [ + { + "Actions": [ + + ], + "AvailabilityZone": "us-east-1a", + "Events": [ + + ], + "VolumeId": "vol-1234567890abcdef0", + "VolumeStatus": { + "Details": [ + { + "Name": "io-enabled", + "Status": "passed" + }, + { + "Name": "io-performance", + "Status": "not-applicable" + } + ], + "Status": "ok" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the status for the volume ``vol-1234567890abcdef0``.", + "id": "to-describe-the-status-of-a-single-volume-1472507016193", + "title": "To describe the status of a single volume" + }, + { + "input": { + "Filters": [ + { + "Name": "volume-status.status", + "Values": [ + "impaired" + ] + } + ] + }, + "output": { + "VolumeStatuses": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the status for all volumes that are impaired. In this example output, there are no impaired volumes.", + "id": "to-describe-the-status-of-impaired-volumes-1472507239821", + "title": "To describe the status of impaired volumes" + } + ], + "DescribeVolumes": [ + { + "input": { + }, + "output": { + "NextToken": "", + "Volumes": [ + { + "Attachments": [ + { + "AttachTime": "2013-12-18T22:35:00.000Z", + "DeleteOnTermination": true, + "Device": "/dev/sda1", + "InstanceId": "i-1234567890abcdef0", + "State": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + ], + "AvailabilityZone": "us-east-1a", + "CreateTime": "2013-12-18T22:35:00.084Z", + "Size": 8, + "SnapshotId": "snap-1234567890abcdef0", + "State": "in-use", + "VolumeId": "vol-049df61146c4d7901", + "VolumeType": "standard" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all of your volumes in the default region.", + "id": "to-describe-all-volumes-1472506358883", + "title": "To describe all volumes" + }, + { + "input": { + "Filters": [ + { + "Name": "attachment.instance-id", + "Values": [ + "i-1234567890abcdef0" + ] + }, + { + "Name": "attachment.delete-on-termination", + "Values": [ + "true" + ] + } + ] + }, + "output": { + "Volumes": [ + { + "Attachments": [ + { + "AttachTime": "2013-12-18T22:35:00.000Z", + "DeleteOnTermination": true, + "Device": "/dev/sda1", + "InstanceId": "i-1234567890abcdef0", + "State": "attached", + "VolumeId": "vol-049df61146c4d7901" + } + ], + "AvailabilityZone": "us-east-1a", + "CreateTime": "2013-12-18T22:35:00.084Z", + "Size": 8, + "SnapshotId": "snap-1234567890abcdef0", + "State": "in-use", + "VolumeId": "vol-049df61146c4d7901", + "VolumeType": "standard" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes all volumes that are both attached to the instance with the ID i-1234567890abcdef0 and set to delete when the instance terminates.", + "id": "to-describe-volumes-that-are-attached-to-a-specific-instance-1472506613578", + "title": "To describe volumes that are attached to a specific instance" + } + ], + "DescribeVpcAttribute": [ + { + "input": { + "Attribute": "enableDnsSupport", + "VpcId": "vpc-a01106c2" + }, + "output": { + "EnableDnsSupport": { + "Value": true + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the enableDnsSupport attribute. This attribute indicates whether DNS resolution is enabled for the VPC. If this attribute is true, the Amazon DNS server resolves DNS hostnames for your instances to their corresponding IP addresses; otherwise, it does not.", + "id": "ec2-describe-vpc-attribute-1", + "title": "To describe the enableDnsSupport attribute" + }, + { + "input": { + "Attribute": "enableDnsHostnames", + "VpcId": "vpc-a01106c2" + }, + "output": { + "EnableDnsHostnames": { + "Value": true + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the enableDnsHostnames attribute. This attribute indicates whether the instances launched in the VPC get DNS hostnames. If this attribute is true, instances in the VPC get DNS hostnames; otherwise, they do not.", + "id": "ec2-describe-vpc-attribute-2", + "title": "To describe the enableDnsHostnames attribute" + } + ], + "DescribeVpcs": [ + { + "input": { + "VpcIds": [ + "vpc-a01106c2" + ] + }, + "output": { + "Vpcs": [ + { + "CidrBlock": "10.0.0.0/16", + "DhcpOptionsId": "dopt-7a8b9c2d", + "InstanceTenancy": "default", + "IsDefault": false, + "State": "available", + "Tags": [ + { + "Key": "Name", + "Value": "MyVPC" + } + ], + "VpcId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified VPC.", + "id": "ec2-describe-vpcs-1", + "title": "To describe a VPC" + } + ], + "DetachInternetGateway": [ + { + "input": { + "InternetGatewayId": "igw-c0a643a9", + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified Internet gateway from the specified VPC.", + "id": "ec2-detach-internet-gateway-1", + "title": "To detach an Internet gateway from a VPC" + } + ], + "DetachNetworkInterface": [ + { + "input": { + "AttachmentId": "eni-attach-66c4350a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified network interface from its attached instance.", + "id": "ec2-detach-network-interface-1", + "title": "To detach a network interface from an instance" + } + ], + "DetachVolume": [ + { + "input": { + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + "AttachTime": "2014-02-27T19:23:06.000Z", + "Device": "/dev/sdb", + "InstanceId": "i-1234567890abcdef0", + "State": "detaching", + "VolumeId": "vol-049df61146c4d7901" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the volume (``vol-049df61146c4d7901``) from the instance it is attached to.", + "id": "to-detach-a-volume-from-an-instance-1472507977694", + "title": "To detach a volume from an instance" + } + ], + "DisableVgwRoutePropagation": [ + { + "input": { + "GatewayId": "vgw-9a4cacf3", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disables the specified virtual private gateway from propagating static routes to the specified route table.", + "id": "ec2-disable-vgw-route-propagation-1", + "title": "To disable route propagation" + } + ], + "DisassociateAddress": [ + { + "input": { + "AssociationId": "eipassoc-2bebb745" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disassociates an Elastic IP address from an instance in a VPC.", + "id": "ec2-disassociate-address-1", + "title": "To disassociate an Elastic IP address in EC2-VPC" + }, + { + "input": { + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disassociates an Elastic IP address from an instance in EC2-Classic.", + "id": "ec2-disassociate-address-2", + "title": "To disassociate an Elastic IP addresses in EC2-Classic" + } + ], + "DisassociateIamInstanceProfile": [ + { + "input": { + "AssociationId": "iip-assoc-05020b59952902f5f" + }, + "output": { + "IamInstanceProfileAssociation": { + "AssociationId": "iip-assoc-05020b59952902f5f", + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/admin-role", + "Id": "AIPAI5IVIHMFFYY2DKV5Y" + }, + "InstanceId": "i-123456789abcde123", + "State": "disassociating" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disassociates the specified IAM instance profile from an instance.", + "id": "to-disassociate-an-iam-instance-profile-1529355364478", + "title": "To disassociate an IAM instance profile" + } + ], + "DisassociateRouteTable": [ + { + "input": { + "AssociationId": "rtbassoc-781d0d1a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example disassociates the specified route table from its associated subnet.", + "id": "ec2-disassociate-route-table-1", + "title": "To disassociate a route table" + } + ], + "EnableVgwRoutePropagation": [ + { + "input": { + "GatewayId": "vgw-9a4cacf3", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables the specified virtual private gateway to propagate static routes to the specified route table.", + "id": "ec2-enable-vgw-route-propagation-1", + "title": "To enable route propagation" + } + ], + "EnableVolumeIO": [ + { + "input": { + "VolumeId": "vol-1234567890abcdef0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables I/O on volume ``vol-1234567890abcdef0``.", + "id": "to-enable-io-for-a-volume-1472508114867", + "title": "To enable I/O for a volume" + } + ], + "GetConsoleOutput": [ + { + "input": { + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + "InstanceId": "i-1234567890abcdef0", + "Output": "...", + "Timestamp": "2018-05-25T21:23:53.000Z" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example gets the console output for the specified instance.", + "id": "to-get-the-console-output-1529355683194", + "title": "To get the console output" + } + ], + "GetLaunchTemplateData": [ + { + "input": { + "InstanceId": "0123d646e8048babc" + }, + "output": { + "LaunchTemplateData": { + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/xvda", + "Ebs": { + "DeleteOnTermination": true, + "Encrypted": false, + "Iops": 100, + "SnapshotId": "snap-02594938353ef77d3", + "VolumeSize": 8, + "VolumeType": "gp2" + } + } + ], + "EbsOptimized": false, + "ImageId": "ami-32cf7b4a", + "InstanceType": "t2.medium", + "KeyName": "my-key-pair", + "Monitoring": { + "Enabled": false + }, + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": false, + "DeleteOnTermination": true, + "Description": "", + "DeviceIndex": 0, + "Groups": [ + "sg-d14e1bb4" + ], + "Ipv6Addresses": [ + + ], + "NetworkInterfaceId": "eni-4338b5a9", + "PrivateIpAddress": "10.0.3.233", + "PrivateIpAddresses": [ + { + "Primary": true, + "PrivateIpAddress": "10.0.3.233" + } + ], + "SubnetId": "subnet-5264e837" + } + ], + "Placement": { + "AvailabilityZone": "us-east-2b", + "GroupName": "", + "Tenancy": "default" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example gets the launch template data for the specified instance.", + "id": "to-get-the-launch-template-data-for-an-instance--1529356515702", + "title": "To get the launch template data for an instance " + } + ], + "ModifyImageAttribute": [ + { + "input": { + "ImageId": "ami-5731123e", + "LaunchPermission": { + "Add": [ + { + "Group": "all" + } + ] + } + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example makes the specified AMI public.", + "id": "to-make-an-ami-public-1529357395278", + "title": "To make an AMI public" + }, + { + "input": { + "ImageId": "ami-5731123e", + "LaunchPermission": { + "Add": [ + { + "UserId": "123456789012" + } + ] + } + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example grants launch permissions for the specified AMI to the specified AWS account.", + "id": "to-grant-launch-permissions-1529357727906", + "title": "To grant launch permissions" + } + ], + "ModifyInstanceAttribute": [ + { + "input": { + "InstanceId": "i-1234567890abcdef0", + "InstanceType": { + "Value": "m5.large" + } + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the instance type of the specified stopped instance.", + "id": "to-modify-the-instance-type-1529357844378", + "title": "To modify the instance type" + }, + { + "input": { + "EnaSupport": { + "Value": true + }, + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables enhanced networking for the specified stopped instance.", + "id": "to-enable-enhanced-networking-1529358279870", + "title": "To enable enhanced networking" + } + ], + "ModifyLaunchTemplate": [ + { + "input": { + "DefaultVersion": "2", + "LaunchTemplateId": "lt-0abcd290751193123" + }, + "output": { + "LaunchTemplate": { + "CreateTime": "2017-12-01T13:35:46.000Z", + "CreatedBy": "arn:aws:iam::123456789012:root", + "DefaultVersionNumber": 2, + "LatestVersionNumber": 2, + "LaunchTemplateId": "lt-0abcd290751193123", + "LaunchTemplateName": "WebServers" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example specifies version 2 as the default version of the specified launch template.", + "id": "to-change-the-default-version-of-a-launch-template-1529358440364", + "title": "To change the default version of a launch template" + } + ], + "ModifyNetworkInterfaceAttribute": [ + { + "input": { + "Attachment": { + "AttachmentId": "eni-attach-43348162", + "DeleteOnTermination": false + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the attachment attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-1", + "title": "To modify the attachment attribute of a network interface" + }, + { + "input": { + "Description": { + "Value": "My description" + }, + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the description attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-2", + "title": "To modify the description attribute of a network interface" + }, + { + "input": { + "Groups": [ + "sg-903004f8", + "sg-1a2b3c4d" + ], + "NetworkInterfaceId": "eni-686ea200" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command modifies the groupSet attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-3", + "title": "To modify the groupSet attribute of a network interface" + }, + { + "input": { + "NetworkInterfaceId": "eni-686ea200", + "SourceDestCheck": { + "Value": false + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command modifies the sourceDestCheck attribute of the specified network interface.", + "id": "ec2-modify-network-interface-attribute-4", + "title": "To modify the sourceDestCheck attribute of a network interface" + } + ], + "ModifySnapshotAttribute": [ + { + "input": { + "Attribute": "createVolumePermission", + "OperationType": "remove", + "SnapshotId": "snap-1234567890abcdef0", + "UserIds": [ + "123456789012" + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies snapshot ``snap-1234567890abcdef0`` to remove the create volume permission for a user with the account ID ``123456789012``. If the command succeeds, no output is returned.", + "id": "to-modify-a-snapshot-attribute-1472508385907", + "title": "To modify a snapshot attribute" + }, + { + "input": { + "Attribute": "createVolumePermission", + "GroupNames": [ + "all" + ], + "OperationType": "add", + "SnapshotId": "snap-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example makes the snapshot ``snap-1234567890abcdef0`` public.", + "id": "to-make-a-snapshot-public-1472508470529", + "title": "To make a snapshot public" + } + ], + "ModifySpotFleetRequest": [ + { + "input": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "TargetCapacity": 20 + }, + "output": { + "Return": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example increases the target capacity of the specified Spot fleet request.", + "id": "ec2-modify-spot-fleet-request-1", + "title": "To increase the target capacity of a Spot fleet request" + }, + { + "input": { + "ExcessCapacityTerminationPolicy": "NoTermination ", + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", + "TargetCapacity": 10 + }, + "output": { + "Return": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example decreases the target capacity of the specified Spot fleet request without terminating any Spot Instances as a result.", + "id": "ec2-modify-spot-fleet-request-2", + "title": "To decrease the target capacity of a Spot fleet request" + } + ], + "ModifySubnetAttribute": [ + { + "input": { + "MapPublicIpOnLaunch": { + "Value": true + }, + "SubnetId": "subnet-1a2b3c4d" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the specified subnet so that all instances launched into this subnet are assigned a public IP address.", + "id": "ec2-modify-subnet-attribute-1", + "title": "To change a subnet's public IP addressing behavior" + } + ], + "ModifyVolumeAttribute": [ + { + "input": { + "AutoEnableIO": { + "Value": true + }, + "DryRun": true, + "VolumeId": "vol-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example sets the ``autoEnableIo`` attribute of the volume with the ID ``vol-1234567890abcdef0`` to ``true``. If the command succeeds, no output is returned.", + "id": "to-modify-a-volume-attribute-1472508596749", + "title": "To modify a volume attribute" + } + ], + "ModifyVpcAttribute": [ + { + "input": { + "EnableDnsSupport": { + "Value": false + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the enableDnsSupport attribute. This attribute indicates whether DNS resolution is enabled for the VPC. If this attribute is true, the Amazon DNS server resolves DNS hostnames for instances in the VPC to their corresponding IP addresses; otherwise, it does not.", + "id": "ec2-modify-vpc-attribute-1", + "title": "To modify the enableDnsSupport attribute" + }, + { + "input": { + "EnableDnsHostnames": { + "Value": false + }, + "VpcId": "vpc-a01106c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the enableDnsHostnames attribute. This attribute indicates whether instances launched in the VPC get DNS hostnames. If this attribute is true, instances in the VPC get DNS hostnames; otherwise, they do not.", + "id": "ec2-modify-vpc-attribute-2", + "title": "To modify the enableDnsHostnames attribute" + } + ], + "MoveAddressToVpc": [ + { + "input": { + "PublicIp": "54.123.4.56" + }, + "output": { + "Status": "MoveInProgress" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example moves the specified Elastic IP address to the EC2-VPC platform.", + "id": "ec2-move-address-to-vpc-1", + "title": "To move an address to EC2-VPC" + } + ], + "PurchaseScheduledInstances": [ + { + "input": { + "PurchaseRequests": [ + { + "InstanceCount": 1, + "PurchaseToken": "eyJ2IjoiMSIsInMiOjEsImMiOi..." + } + ] + }, + "output": { + "ScheduledInstanceSet": [ + { + "AvailabilityZone": "us-west-2b", + "CreateDate": "2016-01-25T21:43:38.612Z", + "HourlyPrice": "0.095", + "InstanceCount": 1, + "InstanceType": "c4.large", + "NetworkPlatform": "EC2-VPC", + "NextSlotStartTime": "2016-01-31T09:00:00Z", + "Platform": "Linux/UNIX", + "Recurrence": { + "Frequency": "Weekly", + "Interval": 1, + "OccurrenceDaySet": [ + 1 + ], + "OccurrenceRelativeToEnd": false, + "OccurrenceUnit": "" + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012", + "SlotDurationInHours": 32, + "TermEndDate": "2017-01-31T09:00:00Z", + "TermStartDate": "2016-01-31T09:00:00Z", + "TotalScheduledInstanceHours": 1696 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example purchases a Scheduled Instance.", + "id": "ec2-purchase-scheduled-instances-1", + "title": "To purchase a Scheduled Instance" + } + ], + "RebootInstances": [ + { + "input": { + "InstanceIds": [ + "i-1234567890abcdef5" + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example reboots the specified EC2 instance.", + "id": "to-reboot-an-ec2-instance-1529358566382", + "title": "To reboot an EC2 instance" + } + ], + "ReleaseAddress": [ + { + "input": { + "AllocationId": "eipalloc-64d5890a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example releases an Elastic IP address for use with instances in a VPC.", + "id": "ec2-release-address-1", + "title": "To release an Elastic IP address for EC2-VPC" + }, + { + "input": { + "PublicIp": "198.51.100.0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example releases an Elastic IP address for use with instances in EC2-Classic.", + "id": "ec2-release-address-2", + "title": "To release an Elastic IP addresses for EC2-Classic" + } + ], + "ReplaceNetworkAclAssociation": [ + { + "input": { + "AssociationId": "aclassoc-e5b95c8c", + "NetworkAclId": "acl-5fb85d36" + }, + "output": { + "NewAssociationId": "aclassoc-3999875b" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified network ACL with the subnet for the specified network ACL association.", + "id": "ec2-replace-network-acl-association-1", + "title": "To replace the network ACL associated with a subnet" + } + ], + "ReplaceNetworkAclEntry": [ + { + "input": { + "CidrBlock": "203.0.113.12/24", + "Egress": false, + "NetworkAclId": "acl-5fb85d36", + "PortRange": { + "From": 53, + "To": 53 + }, + "Protocol": "17", + "RuleAction": "allow", + "RuleNumber": 100 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example replaces an entry for the specified network ACL. The new rule 100 allows ingress traffic from 203.0.113.12/24 on UDP port 53 (DNS) into any associated subnet.", + "id": "ec2-replace-network-acl-entry-1", + "title": "To replace a network ACL entry" + } + ], + "ReplaceRoute": [ + { + "input": { + "DestinationCidrBlock": "10.0.0.0/16", + "GatewayId": "vgw-9a4cacf3", + "RouteTableId": "rtb-22574640" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example replaces the specified route in the specified table table. The new route matches the specified CIDR and sends the traffic to the specified virtual private gateway.", + "id": "ec2-replace-route-1", + "title": "To replace a route" + } + ], + "ReplaceRouteTableAssociation": [ + { + "input": { + "AssociationId": "rtbassoc-781d0d1a", + "RouteTableId": "rtb-22574640" + }, + "output": { + "NewAssociationId": "rtbassoc-3a1f0f58" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified route table with the subnet for the specified route table association.", + "id": "ec2-replace-route-table-association-1", + "title": "To replace the route table associated with a subnet" + } + ], + "RequestSpotFleet": [ + { + "input": { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "SecurityGroups": [ + { + "GroupId": "sg-1a2b3c4d" + } + ], + "SubnetId": "subnet-1a2b3c4d, subnet-3c4d5e6f" + } + ], + "SpotPrice": "0.04", + "TargetCapacity": 2 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot fleet request with two launch specifications that differ only by subnet. The Spot fleet launches the instances in the specified subnet with the lowest price. If the instances are launched in a default VPC, they receive a public IP address by default. If the instances are launched in a nondefault VPC, they do not receive a public IP address by default. Note that you can't specify different subnets from the same Availability Zone in a Spot fleet request.", + "id": "ec2-request-spot-fleet-1", + "title": "To request a Spot fleet in the subnet with the lowest price" + }, + { + "input": { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "Placement": { + "AvailabilityZone": "us-west-2a, us-west-2b" + }, + "SecurityGroups": [ + { + "GroupId": "sg-1a2b3c4d" + } + ] + } + ], + "SpotPrice": "0.04", + "TargetCapacity": 2 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot fleet request with two launch specifications that differ only by Availability Zone. The Spot fleet launches the instances in the specified Availability Zone with the lowest price. If your account supports EC2-VPC only, Amazon EC2 launches the Spot instances in the default subnet of the Availability Zone. If your account supports EC2-Classic, Amazon EC2 launches the instances in EC2-Classic in the Availability Zone.", + "id": "ec2-request-spot-fleet-2", + "title": "To request a Spot fleet in the Availability Zone with the lowest price" + }, + { + "input": { + "SpotFleetRequestConfig": { + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::880185128111:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeviceIndex": 0, + "Groups": [ + "sg-1a2b3c4d" + ], + "SubnetId": "subnet-1a2b3c4d" + } + ] + } + ], + "SpotPrice": "0.04", + "TargetCapacity": 2 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example assigns public addresses to instances launched in a nondefault VPC. Note that when you specify a network interface, you must include the subnet ID and security group ID using the network interface.", + "id": "ec2-request-spot-fleet-3", + "title": "To launch Spot instances in a subnet and assign them public IP addresses" + }, + { + "input": { + "SpotFleetRequestConfig": { + "AllocationStrategy": "diversified", + "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", + "LaunchSpecifications": [ + { + "ImageId": "ami-1a2b3c4d", + "InstanceType": "c4.2xlarge", + "SubnetId": "subnet-1a2b3c4d" + }, + { + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.2xlarge", + "SubnetId": "subnet-1a2b3c4d" + }, + { + "ImageId": "ami-1a2b3c4d", + "InstanceType": "r3.2xlarge", + "SubnetId": "subnet-1a2b3c4d" + } + ], + "SpotPrice": "0.70", + "TargetCapacity": 30 + } + }, + "output": { + "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a Spot fleet request that launches 30 instances using the diversified allocation strategy. The launch specifications differ by instance type. The Spot fleet distributes the instances across the launch specifications such that there are 10 instances of each type.", + "id": "ec2-request-spot-fleet-4", + "title": "To request a Spot fleet using the diversified allocation strategy" + } + ], + "RequestSpotInstances": [ + { + "input": { + "InstanceCount": 5, + "LaunchSpecification": { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "KeyName": "my-key-pair", + "Placement": { + "AvailabilityZone": "us-west-2a" + }, + "SecurityGroupIds": [ + "sg-1a2b3c4d" + ] + }, + "SpotPrice": "0.03", + "Type": "one-time" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a one-time Spot Instance request for five instances in the specified Availability Zone. If your account supports EC2-VPC only, Amazon EC2 launches the instances in the default subnet of the specified Availability Zone. If your account supports EC2-Classic, Amazon EC2 launches the instances in EC2-Classic in the specified Availability Zone.", + "id": "ec2-request-spot-instances-1", + "title": "To create a one-time Spot Instance request" + }, + { + "input": { + "InstanceCount": 5, + "LaunchSpecification": { + "IamInstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" + }, + "ImageId": "ami-1a2b3c4d", + "InstanceType": "m3.medium", + "SecurityGroupIds": [ + "sg-1a2b3c4d" + ], + "SubnetId": "subnet-1a2b3c4d" + }, + "SpotPrice": "0.050", + "Type": "one-time" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command creates a one-time Spot Instance request for five instances in the specified subnet. Amazon EC2 launches the instances in the specified subnet. If the VPC is a nondefault VPC, the instances do not receive a public IP address by default.", + "id": "ec2-request-spot-instances-2", + "title": "To create a one-time Spot Instance request" + } + ], + "ResetImageAttribute": [ + { + "input": { + "Attribute": "launchPermission", + "ImageId": "ami-5731123e" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example resets the launchPermission attribute for the specified AMI. By default, AMIs are private.", + "id": "to-reset-the-launchpermission-attribute-1529359519534", + "title": "To reset the launchPermission attribute" + } + ], + "ResetInstanceAttribute": [ + { + "input": { + "Attribute": "sourceDestCheck", + "InstanceId": "i-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example resets the sourceDestCheck attribute for the specified instance.", + "id": "to-reset-the-sourcedestcheck-attribute-1529359630708", + "title": "To reset the sourceDestCheck attribute" + } + ], + "ResetSnapshotAttribute": [ + { + "input": { + "Attribute": "createVolumePermission", + "SnapshotId": "snap-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example resets the create volume permissions for snapshot ``snap-1234567890abcdef0``. If the command succeeds, no output is returned.", + "id": "to-reset-a-snapshot-attribute-1472508825735", + "title": "To reset a snapshot attribute" + } + ], + "RestoreAddressToClassic": [ + { + "input": { + "PublicIp": "198.51.100.0" + }, + "output": { + "PublicIp": "198.51.100.0", + "Status": "MoveInProgress" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example restores the specified Elastic IP address to the EC2-Classic platform.", + "id": "ec2-restore-address-to-classic-1", + "title": "To restore an address to EC2-Classic" + } + ], + "RunInstances": [ + { + "input": { + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/sdh", + "Ebs": { + "VolumeSize": 100 + } + } + ], + "ImageId": "ami-abc12345", + "InstanceType": "t2.micro", + "KeyName": "my-key-pair", + "MaxCount": 1, + "MinCount": 1, + "SecurityGroupIds": [ + "sg-1a2b3c4d" + ], + "SubnetId": "subnet-6e7f829e", + "TagSpecifications": [ + { + "ResourceType": "instance", + "Tags": [ + { + "Key": "Purpose", + "Value": "test" + } + ] + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example launches an instance using the specified AMI, instance type, security group, subnet, block device mapping, and tags.", + "id": "to-launch-an-instance-1529360150806", + "title": "To launch an instance" + } + ], + "RunScheduledInstances": [ + { + "input": { + "InstanceCount": 1, + "LaunchSpecification": { + "IamInstanceProfile": { + "Name": "my-iam-role" + }, + "ImageId": "ami-12345678", + "InstanceType": "c4.large", + "KeyName": "my-key-pair", + "NetworkInterfaces": [ + { + "AssociatePublicIpAddress": true, + "DeviceIndex": 0, + "Groups": [ + "sg-12345678" + ], + "SubnetId": "subnet-12345678" + } + ] + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012" + }, + "output": { + "InstanceIdSet": [ + "i-1234567890abcdef0" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example launches the specified Scheduled Instance in a VPC.", + "id": "ec2-run-scheduled-instances-1", + "title": "To launch a Scheduled Instance in a VPC" + }, + { + "input": { + "InstanceCount": 1, + "LaunchSpecification": { + "IamInstanceProfile": { + "Name": "my-iam-role" + }, + "ImageId": "ami-12345678", + "InstanceType": "c4.large", + "KeyName": "my-key-pair", + "Placement": { + "AvailabilityZone": "us-west-2b" + }, + "SecurityGroupIds": [ + "sg-12345678" + ] + }, + "ScheduledInstanceId": "sci-1234-1234-1234-1234-123456789012" + }, + "output": { + "InstanceIdSet": [ + "i-1234567890abcdef0" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example launches the specified Scheduled Instance in EC2-Classic.", + "id": "ec2-run-scheduled-instances-2", + "title": "To launch a Scheduled Instance in EC2-Classic" + } + ], + "StartInstances": [ + { + "input": { + "InstanceIds": [ + "i-1234567890abcdef0" + ] + }, + "output": { + "StartingInstances": [ + { + "CurrentState": { + "Code": 0, + "Name": "pending" + }, + "InstanceId": "i-1234567890abcdef0", + "PreviousState": { + "Code": 80, + "Name": "stopped" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example starts the specified EC2 instance.", + "id": "to-start-a-stopped-ec2-instance-1529358792730", + "title": "To start a stopped EC2 instance" + } + ], + "StopInstances": [ + { + "input": { + "InstanceIds": [ + "i-1234567890abcdef0" + ] + }, + "output": { + "StoppingInstances": [ + { + "CurrentState": { + "Code": 64, + "Name": "stopping" + }, + "InstanceId": "i-1234567890abcdef0", + "PreviousState": { + "Code": 16, + "Name": "running" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example stops the specified EC2 instance.", + "id": "to-stop-a-running-ec2-instance-1529358905540", + "title": "To stop a running EC2 instance" + } + ], + "TerminateInstances": [ + { + "input": { + "InstanceIds": [ + "i-1234567890abcdef0" + ] + }, + "output": { + "TerminatingInstances": [ + { + "CurrentState": { + "Code": 32, + "Name": "shutting-down" + }, + "InstanceId": "i-1234567890abcdef0", + "PreviousState": { + "Code": 16, + "Name": "running" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example terminates the specified EC2 instance.", + "id": "to-terminate-an-ec2-instance-1529359350660", + "title": "To terminate an EC2 instance" + } + ], + "UnassignPrivateIpAddresses": [ + { + "input": { + "NetworkInterfaceId": "eni-e5aa89a3", + "PrivateIpAddresses": [ + "10.0.0.82" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example unassigns the specified private IP address from the specified network interface.", + "id": "ec2-unassign-private-ip-addresses-1", + "title": "To unassign a secondary private IP address from a network interface" + } + ], + "UpdateSecurityGroupRuleDescriptionsEgress": [ + { + "input": { + "GroupId": "sg-123abc12", + "IpPermissions": [ + { + "FromPort": 80, + "IpProtocol": "tcp", + "IpRanges": [ + { + "CidrIp": "203.0.113.0/24", + "Description": "Outbound HTTP access to server 2" + } + ], + "ToPort": 80 + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example updates the description for the specified security group rule.", + "id": "to-update-an-outbound-security-group-rule-description-1529360481544", + "title": "To update an outbound security group rule description" + } + ], + "UpdateSecurityGroupRuleDescriptionsIngress": [ + { + "input": { + "GroupId": "sg-123abc12", + "IpPermissions": [ + { + "FromPort": 22, + "IpProtocol": "tcp", + "IpRanges": [ + { + "CidrIp": "203.0.113.0/16", + "Description": "SSH access from the LA office" + } + ], + "ToPort": 22 + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example updates the description for the specified security group rule.", + "id": "to-update-an-inbound-security-group-rule-description-1529360820372", + "title": "To update an inbound security group rule description" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/paginators-1.json new file mode 100644 index 00000000..cfde129c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/paginators-1.json @@ -0,0 +1,852 @@ +{ + "pagination": { + "DescribeRouteTables": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RouteTables" + }, + "DescribeIamInstanceProfileAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "IamInstanceProfileAssociations" + }, + "DescribeInstanceStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceStatuses" + }, + "DescribeInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Reservations" + }, + "DescribeReservedInstancesOfferings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReservedInstancesOfferings" + }, + "DescribeReservedInstancesModifications": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ReservedInstancesModifications" + }, + "DescribeSecurityGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SecurityGroups" + }, + "DescribeSnapshots": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Snapshots" + }, + "DescribeSpotFleetInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ActiveInstances" + }, + "DescribeSpotFleetRequests": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotFleetRequestConfigs" + }, + "DescribeSpotPriceHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpotPriceHistory" + }, + "DescribeTags": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tags" + }, + "DescribeVolumeStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VolumeStatuses" + }, + "DescribeVolumes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Volumes" + }, + "DescribeNatGateways": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NatGateways" + }, + "DescribeNetworkInterfaces": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NetworkInterfaces" + }, + "DescribeVpcEndpoints": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VpcEndpoints" + }, + "DescribeVpcEndpointServices": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": [ + "ServiceDetails", + "ServiceNames" + ] + }, + "DescribeVpcEndpointConnections": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VpcEndpointConnections" + }, + "DescribeByoipCidrs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ByoipCidrs" + }, + "DescribeCapacityReservations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CapacityReservations" + }, + "DescribeClassicLinkInstances": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Instances" + }, + "DescribeClientVpnAuthorizationRules": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AuthorizationRules" + }, + "DescribeClientVpnConnections": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Connections" + }, + "DescribeClientVpnEndpoints": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ClientVpnEndpoints" + }, + "DescribeClientVpnRoutes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Routes" + }, + "DescribeClientVpnTargetNetworks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ClientVpnTargetNetworks" + }, + "DescribeEgressOnlyInternetGateways": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EgressOnlyInternetGateways" + }, + "DescribeFleets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Fleets" + }, + "DescribeFlowLogs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "FlowLogs" + }, + "DescribeFpgaImages": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "FpgaImages" + }, + "DescribeHostReservationOfferings": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "OfferingSet" + }, + "DescribeHostReservations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "HostReservationSet" + }, + "DescribeHosts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Hosts" + }, + "DescribeImportImageTasks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ImportImageTasks" + }, + "DescribeImportSnapshotTasks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ImportSnapshotTasks" + }, + "DescribeInstanceCreditSpecifications": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InstanceCreditSpecifications" + }, + "DescribeLaunchTemplateVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LaunchTemplateVersions" + }, + "DescribeLaunchTemplates": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LaunchTemplates" + }, + "DescribeMovingAddresses": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "MovingAddressStatuses" + }, + "DescribeNetworkInterfacePermissions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NetworkInterfacePermissions" + }, + "DescribePrefixLists": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PrefixLists" + }, + "DescribePrincipalIdFormat": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Principals" + }, + "DescribePublicIpv4Pools": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PublicIpv4Pools" + }, + "DescribeScheduledInstanceAvailability": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ScheduledInstanceAvailabilitySet" + }, + "DescribeScheduledInstances": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ScheduledInstanceSet" + }, + "DescribeStaleSecurityGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "StaleSecurityGroupSet" + }, + "DescribeTransitGatewayAttachments": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayAttachments" + }, + "DescribeTransitGatewayRouteTables": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayRouteTables" + }, + "DescribeTransitGatewayVpcAttachments": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayVpcAttachments" + }, + "DescribeTransitGateways": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGateways" + }, + "DescribeVolumesModifications": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "VolumesModifications" + }, + "DescribeVpcClassicLinkDnsSupport": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Vpcs" + }, + "DescribeVpcEndpointConnectionNotifications": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ConnectionNotificationSet" + }, + "DescribeVpcEndpointServiceConfigurations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ServiceConfigurations" + }, + "DescribeVpcEndpointServicePermissions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AllowedPrincipals" + }, + "DescribeVpcPeeringConnections": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "VpcPeeringConnections" + }, + "GetTransitGatewayAttachmentPropagations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayAttachmentPropagations" + }, + "GetTransitGatewayRouteTableAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Associations" + }, + "GetTransitGatewayRouteTablePropagations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayRouteTablePropagations" + }, + "DescribeInternetGateways": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InternetGateways" + }, + "DescribeNetworkAcls": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NetworkAcls" + }, + "DescribeVpcs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Vpcs" + }, + "DescribeSpotInstanceRequests": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SpotInstanceRequests" + }, + "DescribeDhcpOptions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DhcpOptions" + }, + "DescribeSubnets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Subnets" + }, + "DescribeTrafficMirrorFilters": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TrafficMirrorFilters" + }, + "DescribeTrafficMirrorSessions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TrafficMirrorSessions" + }, + "DescribeTrafficMirrorTargets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TrafficMirrorTargets" + }, + "DescribeExportImageTasks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ExportImageTasks" + }, + "DescribeFastSnapshotRestores": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "FastSnapshotRestores" + }, + "DescribeIpv6Pools": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Ipv6Pools" + }, + "GetAssociatedIpv6PoolCidrs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Ipv6CidrAssociations" + }, + "DescribeCoipPools": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CoipPools" + }, + "DescribeInstanceTypeOfferings": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InstanceTypeOfferings" + }, + "DescribeInstanceTypes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InstanceTypes" + }, + "DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LocalGatewayRouteTableVirtualInterfaceGroupAssociations" + }, + "DescribeLocalGatewayRouteTableVpcAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LocalGatewayRouteTableVpcAssociations" + }, + "DescribeLocalGatewayRouteTables": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LocalGatewayRouteTables" + }, + "DescribeLocalGatewayVirtualInterfaceGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LocalGatewayVirtualInterfaceGroups" + }, + "DescribeLocalGatewayVirtualInterfaces": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LocalGatewayVirtualInterfaces" + }, + "DescribeLocalGateways": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LocalGateways" + }, + "DescribeTransitGatewayMulticastDomains": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayMulticastDomains" + }, + "DescribeTransitGatewayPeeringAttachments": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayPeeringAttachments" + }, + "GetTransitGatewayMulticastDomainAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "MulticastDomainAssociations" + }, + "SearchLocalGatewayRoutes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Routes" + }, + "SearchTransitGatewayMulticastGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "MulticastGroups" + }, + "DescribeManagedPrefixLists": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PrefixLists" + }, + "GetManagedPrefixListAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PrefixListAssociations" + }, + "GetManagedPrefixListEntries": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Entries" + }, + "GetGroupsForCapacityReservation": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CapacityReservationGroups" + }, + "DescribeCarrierGateways": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CarrierGateways" + }, + "GetTransitGatewayPrefixListReferences": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayPrefixListReferences" + }, + "DescribeNetworkInsightsAnalyses": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NetworkInsightsAnalyses" + }, + "DescribeNetworkInsightsPaths": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NetworkInsightsPaths" + }, + "DescribeTransitGatewayConnectPeers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayConnectPeers" + }, + "DescribeTransitGatewayConnects": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayConnects" + }, + "DescribeAddressesAttribute": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Addresses" + }, + "DescribeReplaceRootVolumeTasks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ReplaceRootVolumeTasks" + }, + "DescribeStoreImageTasks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "StoreImageTaskResults" + }, + "DescribeSecurityGroupRules": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SecurityGroupRules" + }, + "DescribeInstanceEventWindows": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InstanceEventWindows" + }, + "DescribeTrunkInterfaceAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InterfaceAssociations" + }, + "GetVpnConnectionDeviceTypes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "VpnConnectionDeviceTypes" + }, + "DescribeCapacityReservationFleets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CapacityReservationFleets" + }, + "GetInstanceTypesFromInstanceRequirements": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InstanceTypes" + }, + "GetSpotPlacementScores": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SpotPlacementScores" + }, + "DescribeSnapshotTierStatus": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SnapshotTierStatuses" + }, + "ListSnapshotsInRecycleBin": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Snapshots" + }, + "DescribeIpamPools": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IpamPools" + }, + "DescribeIpamScopes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IpamScopes" + }, + "DescribeIpams": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Ipams" + }, + "DescribeNetworkInsightsAccessScopeAnalyses": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NetworkInsightsAccessScopeAnalyses" + }, + "DescribeNetworkInsightsAccessScopes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NetworkInsightsAccessScopes" + }, + "GetIpamAddressHistory": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "HistoryRecords" + }, + "GetIpamPoolAllocations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IpamPoolAllocations" + }, + "GetIpamPoolCidrs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IpamPoolCidrs" + }, + "GetIpamResourceCidrs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IpamResourceCidrs" + }, + "DescribeFastLaunchImages": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "FastLaunchImages" + }, + "ListImagesInRecycleBin": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Images" + }, + "DescribeTransitGatewayPolicyTables": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayPolicyTables" + }, + "DescribeTransitGatewayRouteTableAnnouncements": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransitGatewayRouteTableAnnouncements" + }, + "GetTransitGatewayPolicyTableAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Associations" + }, + "DescribeAddressTransfers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AddressTransfers" + }, + "DescribeAwsNetworkPerformanceMetricSubscriptions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Subscriptions" + }, + "GetAwsNetworkPerformanceData": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DataResponses" + }, + "DescribeVerifiedAccessEndpoints": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "VerifiedAccessEndpoints" + }, + "DescribeVerifiedAccessGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "VerifiedAccessGroups" + }, + "DescribeVerifiedAccessInstanceLoggingConfigurations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LoggingConfigurations" + }, + "DescribeVerifiedAccessInstances": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "VerifiedAccessInstances" + }, + "DescribeVerifiedAccessTrustProviders": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "VerifiedAccessTrustProviders" + }, + "DescribeImages": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Images" + }, + "DescribeIpamResourceDiscoveries": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IpamResourceDiscoveries" + }, + "DescribeIpamResourceDiscoveryAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IpamResourceDiscoveryAssociations" + }, + "GetIpamDiscoveredAccounts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IpamDiscoveredAccounts" + }, + "GetIpamDiscoveredResourceCidrs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IpamDiscoveredResourceCidrs" + }, + "GetNetworkInsightsAccessScopeAnalysisFindings": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AnalysisFindings" + }, + "DescribeInstanceConnectEndpoints": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InstanceConnectEndpoints" + }, + "GetSecurityGroupsForVpc": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SecurityGroupForVpcs" + }, + "DescribeCapacityBlockOfferings": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CapacityBlockOfferings" + }, + "DescribeInstanceTopology": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Instances" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/paginators-1.sdk-extras.json new file mode 100644 index 00000000..823bbb5d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/paginators-1.sdk-extras.json @@ -0,0 +1,13 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "GetNetworkInsightsAccessScopeAnalysisFindings": { + "non_aggregate_keys": [ + "AnalysisStatus", + "NetworkInsightsAccessScopeAnalysisId" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/service-2.json.gz new file mode 100644 index 00000000..67c37528 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/waiters-2.json new file mode 100644 index 00000000..e890388e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ec2/2016-11-15/waiters-2.json @@ -0,0 +1,726 @@ +{ + "version": 2, + "waiters": { + "InstanceExists": { + "delay": 5, + "maxAttempts": 40, + "operation": "DescribeInstances", + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(Reservations[]) > `0`", + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "BundleTaskComplete": { + "delay": 15, + "operation": "DescribeBundleTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "complete", + "matcher": "pathAll", + "state": "success", + "argument": "BundleTasks[].State" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "BundleTasks[].State" + } + ] + }, + "ConversionTaskCancelled": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskCompleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelled", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + }, + { + "expected": "cancelling", + "matcher": "pathAny", + "state": "failure", + "argument": "ConversionTasks[].State" + } + ] + }, + "ConversionTaskDeleted": { + "delay": 15, + "operation": "DescribeConversionTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "ConversionTasks[].State" + } + ] + }, + "CustomerGatewayAvailable": { + "delay": 15, + "operation": "DescribeCustomerGateways", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "CustomerGateways[].State" + } + ] + }, + "ExportTaskCancelled": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "cancelled", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ExportTaskCompleted": { + "delay": 15, + "operation": "DescribeExportTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ExportTasks[].State" + } + ] + }, + "ImageExists": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "matcher": "path", + "expected": true, + "argument": "length(Images[]) > `0`", + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidAMIID.NotFound", + "state": "retry" + } + ] + }, + "ImageAvailable": { + "operation": "DescribeImages", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Images[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Images[].State", + "expected": "failed" + } + ] + }, + "InstanceRunning": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "running", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "shutting-down", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "InstanceStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].InstanceStatus.Status", + "expected": "ok" + }, + { + "matcher": "error", + "expected": "InvalidInstanceID.NotFound", + "state": "retry" + } + ] + }, + "InstanceStopped": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "stopped", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InstanceTerminated": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "terminated", + "matcher": "pathAll", + "state": "success", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Reservations[].Instances[].State.Name" + } + ] + }, + "InternetGatewayExists": { + "operation": "DescribeInternetGateways", + "delay": 5, + "maxAttempts": 6, + "acceptors": [ + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(InternetGateways[].InternetGatewayId) > `0`" + }, + { + "expected": "InvalidInternetGateway.NotFound", + "matcher": "error", + "state": "retry" + } + ] + }, + "KeyPairExists": { + "operation": "DescribeKeyPairs", + "delay": 5, + "maxAttempts": 6, + "acceptors": [ + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(KeyPairs[].KeyName) > `0`" + }, + { + "expected": "InvalidKeyPair.NotFound", + "matcher": "error", + "state": "retry" + } + ] + }, + "NatGatewayAvailable": { + "operation": "DescribeNatGateways", + "delay": 15, + "maxAttempts": 40, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "NatGateways[].State", + "expected": "available" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "failed" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "deleting" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "NatGateways[].State", + "expected": "deleted" + }, + { + "state": "retry", + "matcher": "error", + "expected": "NatGatewayNotFound" + } + ] + }, + "NatGatewayDeleted": { + "operation": "DescribeNatGateways", + "delay": 15, + "maxAttempts": 40, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "NatGateways[].State", + "expected": "deleted" + }, + { + "state": "success", + "matcher": "error", + "expected": "NatGatewayNotFound" + } + ] + }, + "NetworkInterfaceAvailable": { + "operation": "DescribeNetworkInterfaces", + "delay": 20, + "maxAttempts": 10, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "NetworkInterfaces[].Status" + }, + { + "expected": "InvalidNetworkInterfaceID.NotFound", + "matcher": "error", + "state": "failure" + } + ] + }, + "PasswordDataAvailable": { + "operation": "GetPasswordData", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "length(PasswordData) > `0`", + "expected": true + } + ] + }, + "SnapshotCompleted": { + "delay": 15, + "operation": "DescribeSnapshots", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "Snapshots[].State" + }, + { + "expected": "error", + "matcher": "pathAny", + "state": "failure", + "argument": "Snapshots[].State" + } + ] + }, + "SnapshotImported": { + "delay": 15, + "operation": "DescribeImportSnapshotTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "completed", + "matcher": "pathAll", + "state": "success", + "argument": "ImportSnapshotTasks[].SnapshotTaskDetail.Status" + }, + { + "expected": "error", + "matcher": "pathAny", + "state": "failure", + "argument": "ImportSnapshotTasks[].SnapshotTaskDetail.Status" + } + ] + }, + "SecurityGroupExists": { + "operation": "DescribeSecurityGroups", + "delay": 5, + "maxAttempts": 6, + "acceptors": [ + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(SecurityGroups[].GroupId) > `0`" + }, + { + "expected": "InvalidGroup.NotFound", + "matcher": "error", + "state": "retry" + } + ] + }, + "SpotInstanceRequestFulfilled": { + "operation": "DescribeSpotInstanceRequests", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "fulfilled" + }, + { + "state": "success", + "matcher": "pathAll", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "request-canceled-and-instance-running" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "schedule-expired" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "canceled-before-fulfillment" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "bad-parameters" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "SpotInstanceRequests[].Status.Code", + "expected": "system-error" + }, + { + "state": "retry", + "matcher": "error", + "expected": "InvalidSpotInstanceRequestID.NotFound" + } + ] + }, + "StoreImageTaskComplete": { + "delay": 5, + "operation": "DescribeStoreImageTasks", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "Completed", + "matcher": "pathAll", + "state": "success", + "argument": "StoreImageTaskResults[].StoreTaskState" + }, + { + "expected": "Failed", + "matcher": "pathAny", + "state": "failure", + "argument": "StoreImageTaskResults[].StoreTaskState" + }, + { + "expected": "InProgress", + "matcher": "pathAny", + "state": "retry", + "argument": "StoreImageTaskResults[].StoreTaskState" + } + ] + }, + "SubnetAvailable": { + "delay": 15, + "operation": "DescribeSubnets", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Subnets[].State" + } + ] + }, + "SystemStatusOk": { + "operation": "DescribeInstanceStatus", + "maxAttempts": 40, + "delay": 15, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "InstanceStatuses[].SystemStatus.Status", + "expected": "ok" + } + ] + }, + "VolumeAvailable": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VolumeDeleted": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "matcher": "error", + "expected": "InvalidVolume.NotFound", + "state": "success" + } + ] + }, + "VolumeInUse": { + "delay": 15, + "operation": "DescribeVolumes", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "in-use", + "matcher": "pathAll", + "state": "success", + "argument": "Volumes[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Volumes[].State" + } + ] + }, + "VpcAvailable": { + "delay": 15, + "operation": "DescribeVpcs", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Vpcs[].State" + } + ] + }, + "VpcExists": { + "operation": "DescribeVpcs", + "delay": 1, + "maxAttempts": 5, + "acceptors": [ + { + "matcher": "status", + "expected": 200, + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidVpcID.NotFound", + "state": "retry" + } + ] + }, + "VpnConnectionAvailable": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpnConnectionDeleted": { + "delay": 15, + "operation": "DescribeVpnConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "VpnConnections[].State" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "VpnConnections[].State" + } + ] + }, + "VpcPeeringConnectionExists": { + "delay": 15, + "operation": "DescribeVpcPeeringConnections", + "maxAttempts": 40, + "acceptors": [ + { + "matcher": "status", + "expected": 200, + "state": "success" + }, + { + "matcher": "error", + "expected": "InvalidVpcPeeringConnectionID.NotFound", + "state": "retry" + } + ] + }, + "VpcPeeringConnectionDeleted": { + "delay": 15, + "operation": "DescribeVpcPeeringConnections", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "VpcPeeringConnections[].Status.Code" + }, + { + "matcher": "error", + "expected": "InvalidVpcPeeringConnectionID.NotFound", + "state": "success" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..80864a0d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/paginators-1.json new file mode 100644 index 00000000..b9dbda45 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "DescribeImageTags": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "imageTagDetails" + }, + "DescribeImages": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "imageDetails" + }, + "DescribeRegistries": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "registries" + }, + "DescribeRepositories": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "repositories" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/service-2.json.gz new file mode 100644 index 00000000..fd32a11d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr-public/2020-10-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..7073c9c9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/examples-1.json new file mode 100644 index 00000000..7daf57f3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/examples-1.json @@ -0,0 +1,195 @@ +{ + "version": "1.0", + "examples": { + "BatchDeleteImage": [ + { + "input": { + "imageIds": [ + { + "imageTag": "precise" + } + ], + "repositoryName": "ubuntu" + }, + "output": { + "failures": [ + + ], + "imageIds": [ + { + "imageDigest": "sha256:examplee6d1e504117a17000003d3753086354a38375961f2e665416ef4b1b2f", + "imageTag": "precise" + } + ] + }, + "comments": { + }, + "description": "This example deletes images with the tags precise and trusty in a repository called ubuntu in the default registry for an account.", + "id": "batchdeleteimages-example-1470860541707", + "title": "To delete multiple images" + } + ], + "BatchGetImage": [ + { + "input": { + "imageIds": [ + { + "imageTag": "precise" + } + ], + "repositoryName": "ubuntu" + }, + "output": { + "failures": [ + + ], + "images": [ + { + "imageId": { + "imageDigest": "sha256:example76bdff6d83a09ba2a818f0d00000063724a9ac3ba5019c56f74ebf42a", + "imageTag": "precise" + }, + "imageManifest": "{\n \"schemaVersion\": 1,\n \"name\": \"ubuntu\",\n \"tag\": \"precise\",\n...", + "registryId": "244698725403", + "repositoryName": "ubuntu" + } + ] + }, + "comments": { + "output": { + "imageManifest": "In this example, the imageManifest in the output JSON has been truncated." + } + }, + "description": "This example obtains information for an image with a specified image digest ID from the repository named ubuntu in the current account.", + "id": "batchgetimage-example-1470862771437", + "title": "To obtain multiple images in a single request" + } + ], + "CreateRepository": [ + { + "input": { + "repositoryName": "project-a/nginx-web-app" + }, + "output": { + "repository": { + "registryId": "012345678901", + "repositoryArn": "arn:aws:ecr:us-west-2:012345678901:repository/project-a/nginx-web-app", + "repositoryName": "project-a/nginx-web-app" + } + }, + "comments": { + "output": { + "imageManifest": "In this example, the imageManifest in the output JSON has been truncated." + } + }, + "description": "This example creates a repository called nginx-web-app inside the project-a namespace in the default registry for an account.", + "id": "createrepository-example-1470863688724", + "title": "To create a new repository" + } + ], + "DeleteRepository": [ + { + "input": { + "force": true, + "repositoryName": "ubuntu" + }, + "output": { + "repository": { + "registryId": "012345678901", + "repositoryArn": "arn:aws:ecr:us-west-2:012345678901:repository/ubuntu", + "repositoryName": "ubuntu" + } + }, + "comments": { + "output": { + "imageManifest": "In this example, the imageManifest in the output JSON has been truncated." + } + }, + "description": "This example force deletes a repository named ubuntu in the default registry for an account. The force parameter is required if the repository contains images.", + "id": "deleterepository-example-1470863805703", + "title": "To force delete a repository" + } + ], + "DeleteRepositoryPolicy": [ + { + "input": { + "repositoryName": "ubuntu" + }, + "output": { + "policyText": "{ ... }", + "registryId": "012345678901", + "repositoryName": "ubuntu" + }, + "comments": { + }, + "description": "This example deletes the policy associated with the repository named ubuntu in the current account.", + "id": "deleterepositorypolicy-example-1470866943748", + "title": "To delete the policy associated with a repository" + } + ], + "DescribeRepositories": [ + { + "input": { + }, + "output": { + "repositories": [ + { + "registryId": "012345678910", + "repositoryArn": "arn:aws:ecr:us-west-2:012345678910:repository/ubuntu", + "repositoryName": "ubuntu" + }, + { + "registryId": "012345678910", + "repositoryArn": "arn:aws:ecr:us-west-2:012345678910:repository/test", + "repositoryName": "test" + } + ] + }, + "comments": { + "output": { + } + }, + "description": "The following example obtains a list and description of all repositories in the default registry to which the current user has access.", + "id": "describe-repositories-1470856017467", + "title": "To describe all repositories in the current account" + } + ], + "GetRepositoryPolicy": [ + { + "input": { + "repositoryName": "ubuntu" + }, + "output": { + "policyText": "{\n \"Version\" : \"2008-10-17\",\n \"Statement\" : [ {\n \"Sid\" : \"new statement\",\n \"Effect\" : \"Allow\",\n \"Principal\" : {\n \"AWS\" : \"arn:aws:iam::012345678901:role/CodeDeployDemo\"\n },\n\"Action\" : [ \"ecr:GetDownloadUrlForLayer\", \"ecr:BatchGetImage\", \"ecr:BatchCheckLayerAvailability\" ]\n } ]\n}", + "registryId": "012345678901", + "repositoryName": "ubuntu" + }, + "comments": { + }, + "description": "This example obtains the repository policy for the repository named ubuntu.", + "id": "getrepositorypolicy-example-1470867669211", + "title": "To get the current policy for a repository" + } + ], + "ListImages": [ + { + "input": { + "repositoryName": "ubuntu" + }, + "output": { + "imageIds": [ + { + "imageDigest": "sha256:764f63476bdff6d83a09ba2a818f0d35757063724a9ac3ba5019c56f74ebf42a", + "imageTag": "precise" + } + ] + }, + "comments": { + }, + "description": "This example lists all of the images in the repository named ubuntu in the default registry in the current account. ", + "id": "listimages-example-1470868161594", + "title": "To list all images in a repository" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/paginators-1.json new file mode 100644 index 00000000..3db2db09 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/paginators-1.json @@ -0,0 +1,57 @@ +{ + "pagination": { + "ListImages": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "imageIds" + }, + "DescribeImages": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "imageDetails" + }, + "DescribeRepositories": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "repositories" + }, + "DescribeImageScanFindings": { + "input_token": "nextToken", + "limit_key": "maxResults", + "non_aggregate_keys": [ + "registryId", + "repositoryName", + "imageId", + "imageScanStatus", + "imageScanFindings" + ], + "output_token": "nextToken", + "result_key": [ + "imageScanFindings.findings", + "imageScanFindings.enhancedFindings" + ] + }, + "GetLifecyclePolicyPreview": { + "input_token": "nextToken", + "limit_key": "maxResults", + "non_aggregate_keys": [ + "registryId", + "repositoryName", + "lifecyclePolicyText", + "status", + "summary" + ], + "output_token": "nextToken", + "result_key": "previewResults" + }, + "DescribePullThroughCacheRules": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "pullThroughCacheRules" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/service-2.json.gz new file mode 100644 index 00000000..0ea6302c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/waiters-2.json new file mode 100644 index 00000000..9ef9608f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ecr/2015-09-21/waiters-2.json @@ -0,0 +1,45 @@ +{ + "version": 2, + "waiters": { + "ImageScanComplete": { + "description": "Wait until an image scan is complete and findings can be accessed", + "operation": "DescribeImageScanFindings", + "delay": 5, + "maxAttempts": 60, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "imageScanStatus.status", + "expected": "COMPLETE" + }, + { + "state": "failure", + "matcher": "path", + "argument": "imageScanStatus.status", + "expected": "FAILED" + } + ] + }, + "LifecyclePolicyPreviewComplete": { + "description": "Wait until a lifecycle policy preview request is complete and results can be accessed", + "operation": "GetLifecyclePolicyPreview", + "delay": 5, + "maxAttempts": 20, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "status", + "expected": "COMPLETE" + }, + { + "state": "failure", + "matcher": "path", + "argument": "status", + "expected": "FAILED" + } + ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d33ed39c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/examples-1.json new file mode 100644 index 00000000..0fbf7b36 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/examples-1.json @@ -0,0 +1,1137 @@ +{ + "version": "1.0", + "examples": { + "CreateCluster": [ + { + "input": { + "clusterName": "my_cluster" + }, + "output": { + "cluster": { + "activeServicesCount": 0, + "clusterArn": "arn:aws:ecs:us-east-1:012345678910:cluster/my_cluster", + "clusterName": "my_cluster", + "pendingTasksCount": 0, + "registeredContainerInstancesCount": 0, + "runningTasksCount": 0, + "status": "ACTIVE" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a cluster in your default region.", + "id": "to-create-a-new-cluster-1472514079365", + "title": "To create a new cluster" + } + ], + "CreateService": [ + { + "input": { + "desiredCount": 10, + "serviceName": "ecs-simple-service", + "taskDefinition": "hello_world" + }, + "output": { + "service": { + "clusterArn": "arn:aws:ecs:us-east-1:012345678910:cluster/default", + "createdAt": "2016-08-29T16:13:47.298Z", + "deploymentConfiguration": { + "maximumPercent": 200, + "minimumHealthyPercent": 100 + }, + "deployments": [ + { + "createdAt": "2016-08-29T16:13:47.298Z", + "desiredCount": 10, + "id": "ecs-svc/9223370564342348388", + "pendingCount": 0, + "runningCount": 0, + "status": "PRIMARY", + "taskDefinition": "arn:aws:ecs:us-east-1:012345678910:task-definition/hello_world:6", + "updatedAt": "2016-08-29T16:13:47.298Z" + }, + { + "createdAt": "2016-08-29T15:52:44.481Z", + "desiredCount": 0, + "id": "ecs-svc/9223370564343611322", + "pendingCount": 0, + "runningCount": 0, + "status": "ACTIVE", + "taskDefinition": "arn:aws:ecs:us-east-1:012345678910:task-definition/hello_world:6", + "updatedAt": "2016-08-29T16:11:38.941Z" + } + ], + "desiredCount": 10, + "events": [ + + ], + "loadBalancers": [ + + ], + "pendingCount": 0, + "runningCount": 0, + "serviceArn": "arn:aws:ecs:us-east-1:012345678910:service/ecs-simple-service", + "serviceName": "ecs-simple-service", + "status": "ACTIVE", + "taskDefinition": "arn:aws:ecs:us-east-1:012345678910:task-definition/hello_world:6" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a service in your default region called ``ecs-simple-service``. The service uses the ``hello_world`` task definition and it maintains 10 copies of that task.", + "id": "to-create-a-new-service-1472512584282", + "title": "To create a new service" + }, + { + "input": { + "desiredCount": 10, + "loadBalancers": [ + { + "containerName": "simple-app", + "containerPort": 80, + "loadBalancerName": "EC2Contai-EcsElast-15DCDAURT3ZO2" + } + ], + "role": "ecsServiceRole", + "serviceName": "ecs-simple-service-elb", + "taskDefinition": "console-sample-app-static" + }, + "output": { + "service": { + "clusterArn": "arn:aws:ecs:us-east-1:012345678910:cluster/default", + "createdAt": "2016-08-29T16:02:54.884Z", + "deploymentConfiguration": { + "maximumPercent": 200, + "minimumHealthyPercent": 100 + }, + "deployments": [ + { + "createdAt": "2016-08-29T16:02:54.884Z", + "desiredCount": 10, + "id": "ecs-svc/9223370564343000923", + "pendingCount": 0, + "runningCount": 0, + "status": "PRIMARY", + "taskDefinition": "arn:aws:ecs:us-east-1:012345678910:task-definition/console-sample-app-static:6", + "updatedAt": "2016-08-29T16:02:54.884Z" + } + ], + "desiredCount": 10, + "events": [ + + ], + "loadBalancers": [ + { + "containerName": "simple-app", + "containerPort": 80, + "loadBalancerName": "EC2Contai-EcsElast-15DCDAURT3ZO2" + } + ], + "pendingCount": 0, + "roleArn": "arn:aws:iam::012345678910:role/ecsServiceRole", + "runningCount": 0, + "serviceArn": "arn:aws:ecs:us-east-1:012345678910:service/ecs-simple-service-elb", + "serviceName": "ecs-simple-service-elb", + "status": "ACTIVE", + "taskDefinition": "arn:aws:ecs:us-east-1:012345678910:task-definition/console-sample-app-static:6" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a service in your default region called ``ecs-simple-service-elb``. The service uses the ``ecs-demo`` task definition and it maintains 10 copies of that task. You must reference an existing load balancer in the same region by its name.", + "id": "to-create-a-new-service-behind-a-load-balancer-1472512484823", + "title": "To create a new service behind a load balancer" + } + ], + "DeleteAccountSetting": [ + { + "input": { + "name": "serviceLongArnFormat" + }, + "output": { + "setting": { + "name": "serviceLongArnFormat", + "value": "enabled", + "principalArn": "arn:aws:iam:::user/principalName" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the account setting for your user for the specified resource type.", + "id": "to-delete-the-account-setting-for-your-user-account-1549524548115", + "title": "To delete your account setting" + }, + { + "input": { + "name": "containerInstanceLongArnFormat", + "principalArn": "arn:aws:iam:::user/principalName" + }, + "output": { + "setting": { + "name": "containerInstanceLongArnFormat", + "value": "enabled", + "principalArn": "arn:aws:iam:::user/principalName" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the account setting for a specific IAM user or IAM role for the specified resource type. Only the root user can view or modify the account settings for another user.", + "id": "to-delete-the-account-setting-for-a-specific-iam-user-or-iam-role-1549524612917", + "title": "To delete the account settings for a specific IAM user or IAM role" + } + ], + "DeleteCluster": [ + { + "input": { + "cluster": "my_cluster" + }, + "output": { + "cluster": { + "activeServicesCount": 0, + "clusterArn": "arn:aws:ecs:us-east-1:012345678910:cluster/my_cluster", + "clusterName": "my_cluster", + "pendingTasksCount": 0, + "registeredContainerInstancesCount": 0, + "runningTasksCount": 0, + "status": "INACTIVE" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes an empty cluster in your default region.", + "id": "to-delete-an-empty-cluster-1472512705352", + "title": "To delete an empty cluster" + } + ], + "DeleteService": [ + { + "input": { + "service": "my-http-service" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the my-http-service service. The service must have a desired count and running count of 0 before you can delete it.", + "id": "e8183e38-f86e-4390-b811-f74f30a6007d", + "title": "To delete a service" + } + ], + "DeregisterContainerInstance": [ + { + "input": { + "cluster": "default", + "containerInstance": "container_instance_UUID", + "force": true + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deregisters a container instance from the specified cluster in your default region. If there are still tasks running on the container instance, you must either stop those tasks before deregistering, or use the force option.", + "id": "bf624927-cf64-4f4b-8b7e-c024a4e682f6", + "title": "To deregister a container instance from a cluster" + } + ], + "DescribeClusters": [ + { + "input": { + "clusters": [ + "default" + ] + }, + "output": { + "clusters": [ + { + "clusterArn": "arn:aws:ecs:us-east-1:aws_account_id:cluster/default", + "clusterName": "default", + "status": "ACTIVE" + } + ], + "failures": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example provides a description of the specified cluster in your default region.", + "id": "ba88d100-9672-4231-80da-a4bd210bf728", + "title": "To describe a cluster" + } + ], + "DescribeContainerInstances": [ + { + "input": { + "cluster": "default", + "containerInstances": [ + "f2756532-8f13-4d53-87c9-aed50dc94cd7" + ] + }, + "output": { + "containerInstances": [ + { + "agentConnected": true, + "containerInstanceArn": "arn:aws:ecs:us-east-1:012345678910:container-instance/f2756532-8f13-4d53-87c9-aed50dc94cd7", + "ec2InstanceId": "i-807f3249", + "pendingTasksCount": 0, + "registeredResources": [ + { + "name": "CPU", + "type": "INTEGER", + "doubleValue": 0.0, + "integerValue": 2048, + "longValue": 0 + }, + { + "name": "MEMORY", + "type": "INTEGER", + "doubleValue": 0.0, + "integerValue": 3768, + "longValue": 0 + }, + { + "name": "PORTS", + "type": "STRINGSET", + "doubleValue": 0.0, + "integerValue": 0, + "longValue": 0, + "stringSetValue": [ + "2376", + "22", + "51678", + "2375" + ] + } + ], + "remainingResources": [ + { + "name": "CPU", + "type": "INTEGER", + "doubleValue": 0.0, + "integerValue": 1948, + "longValue": 0 + }, + { + "name": "MEMORY", + "type": "INTEGER", + "doubleValue": 0.0, + "integerValue": 3668, + "longValue": 0 + }, + { + "name": "PORTS", + "type": "STRINGSET", + "doubleValue": 0.0, + "integerValue": 0, + "longValue": 0, + "stringSetValue": [ + "2376", + "22", + "80", + "51678", + "2375" + ] + } + ], + "runningTasksCount": 1, + "status": "ACTIVE" + } + ], + "failures": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example provides a description of the specified container instance in your default region, using the container instance UUID as an identifier.", + "id": "c8f439de-eb27-4269-8ca7-2c0a7ba75ab0", + "title": "To describe container instance" + } + ], + "DescribeServices": [ + { + "input": { + "services": [ + "ecs-simple-service" + ] + }, + "output": { + "failures": [ + + ], + "services": [ + { + "clusterArn": "arn:aws:ecs:us-east-1:012345678910:cluster/default", + "createdAt": "2016-08-29T16:25:52.130Z", + "deploymentConfiguration": { + "maximumPercent": 200, + "minimumHealthyPercent": 100 + }, + "deployments": [ + { + "createdAt": "2016-08-29T16:25:52.130Z", + "desiredCount": 1, + "id": "ecs-svc/9223370564341623665", + "pendingCount": 0, + "runningCount": 0, + "status": "PRIMARY", + "taskDefinition": "arn:aws:ecs:us-east-1:012345678910:task-definition/hello_world:6", + "updatedAt": "2016-08-29T16:25:52.130Z" + } + ], + "desiredCount": 1, + "events": [ + { + "createdAt": "2016-08-29T16:25:58.520Z", + "id": "38c285e5-d335-4b68-8b15-e46dedc8e88d", + "message": "(service ecs-simple-service) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance 3f4de1c5-ffdd-4954-af7e-75b4be0c8841) is already using a port required by your task. For more information, see the Troubleshooting section of the Amazon ECS Developer Guide." + } + ], + "loadBalancers": [ + + ], + "pendingCount": 0, + "runningCount": 0, + "serviceArn": "arn:aws:ecs:us-east-1:012345678910:service/ecs-simple-service", + "serviceName": "ecs-simple-service", + "status": "ACTIVE", + "taskDefinition": "arn:aws:ecs:us-east-1:012345678910:task-definition/hello_world:6" + } + ] + }, + "comments": { + "input": { + }, + "output": { + "services[0].events[0].message": "In this example, there is a service event that shows unavailable cluster resources." + } + }, + "description": "This example provides descriptive information about the service named ``ecs-simple-service``.", + "id": "to-describe-a-service-1472513256350", + "title": "To describe a service" + } + ], + "DescribeTaskDefinition": [ + { + "input": { + "taskDefinition": "hello_world:8" + }, + "output": { + "taskDefinition": { + "containerDefinitions": [ + { + "name": "wordpress", + "cpu": 10, + "environment": [ + + ], + "essential": true, + "image": "wordpress", + "links": [ + "mysql" + ], + "memory": 500, + "mountPoints": [ + + ], + "portMappings": [ + { + "containerPort": 80, + "hostPort": 80 + } + ], + "volumesFrom": [ + + ] + }, + { + "name": "mysql", + "cpu": 10, + "environment": [ + { + "name": "MYSQL_ROOT_PASSWORD", + "value": "password" + } + ], + "essential": true, + "image": "mysql", + "memory": 500, + "mountPoints": [ + + ], + "portMappings": [ + + ], + "volumesFrom": [ + + ] + } + ], + "family": "hello_world", + "revision": 8, + "taskDefinitionArn": "arn:aws:ecs:us-east-1::task-definition/hello_world:8", + "volumes": [ + + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example provides a description of the specified task definition.", + "id": "4c21eeb1-f1da-4a08-8c44-297fc8d0ea88", + "title": "To describe a task definition" + } + ], + "DescribeTasks": [ + { + "input": { + "tasks": [ + "c5cba4eb-5dad-405e-96db-71ef8eefe6a8" + ] + }, + "output": { + "failures": [ + + ], + "tasks": [ + { + "clusterArn": "arn:aws:ecs:::cluster/default", + "containerInstanceArn": "arn:aws:ecs:::container-instance/18f9eda5-27d7-4c19-b133-45adc516e8fb", + "containers": [ + { + "name": "ecs-demo", + "containerArn": "arn:aws:ecs:::container/7c01765b-c588-45b3-8290-4ba38bd6c5a6", + "lastStatus": "RUNNING", + "networkBindings": [ + { + "bindIP": "0.0.0.0", + "containerPort": 80, + "hostPort": 80 + } + ], + "taskArn": "arn:aws:ecs:::task/c5cba4eb-5dad-405e-96db-71ef8eefe6a8" + } + ], + "desiredStatus": "RUNNING", + "lastStatus": "RUNNING", + "overrides": { + "containerOverrides": [ + { + "name": "ecs-demo" + } + ] + }, + "startedBy": "ecs-svc/9223370608528463088", + "taskArn": "arn:aws:ecs:::task/c5cba4eb-5dad-405e-96db-71ef8eefe6a8", + "taskDefinitionArn": "arn:aws:ecs:::task-definition/amazon-ecs-sample:1" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example provides a description of the specified task, using the task UUID as an identifier.", + "id": "a90b0cde-f965-4946-b55e-cfd8cc54e827", + "title": "To describe a task" + } + ], + "ListAccountSettings": [ + { + "input": { + "effectiveSettings": true + }, + "output": { + "settings": [ + { + "name": "containerInstanceLongArnFormat", + "value": "disabled", + "principalArn": "arn:aws:iam:::user/principalName" + }, + { + "name": "serviceLongArnFormat", + "value": "enabled", + "principalArn": "arn:aws:iam:::user/principalName" + }, + { + "name": "taskLongArnFormat", + "value": "disabled", + "principalArn": "arn:aws:iam:::user/principalName" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example displays the effective account settings for your account.", + "id": "to-view-your-account-settings-1549524118170", + "title": "To view your effective account settings" + }, + { + "input": { + "effectiveSettings": true, + "principalArn": "arn:aws:iam:::user/principalName" + }, + "output": { + "settings": [ + { + "name": "containerInstanceLongArnFormat", + "value": "disabled", + "principalArn": "arn:aws:iam:::user/principalName" + }, + { + "name": "serviceLongArnFormat", + "value": "enabled", + "principalArn": "arn:aws:iam:::user/principalName" + }, + { + "name": "taskLongArnFormat", + "value": "disabled", + "principalArn": "arn:aws:iam:::user/principalName" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example displays the effective account settings for the specified user or role.", + "id": "to-view-the-account-settings-for-a-specific-iam-user-or-iam-role-1549524237932", + "title": "To view the effective account settings for a specific IAM user or IAM role" + } + ], + "ListClusters": [ + { + "input": { + }, + "output": { + "clusterArns": [ + "arn:aws:ecs:us-east-1::cluster/test", + "arn:aws:ecs:us-east-1::cluster/default" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists all of your available clusters in your default region.", + "id": "e337d059-134f-4125-ba8e-4f499139facf", + "title": "To list your available clusters" + } + ], + "ListContainerInstances": [ + { + "input": { + "cluster": "default" + }, + "output": { + "containerInstanceArns": [ + "arn:aws:ecs:us-east-1::container-instance/f6bbb147-5370-4ace-8c73-c7181ded911f", + "arn:aws:ecs:us-east-1::container-instance/ffe3d344-77e2-476c-a4d0-bf560ad50acb" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists all of your available container instances in the specified cluster in your default region.", + "id": "62a82a94-713c-4e18-8420-1d2b2ba9d484", + "title": "To list your available container instances in a cluster" + } + ], + "ListServices": [ + { + "input": { + }, + "output": { + "serviceArns": [ + "arn:aws:ecs:us-east-1:012345678910:service/my-http-service" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists the services running in the default cluster for an account.", + "id": "1d9a8037-4e0e-4234-a528-609656809a3a", + "title": "To list the services in a cluster" + } + ], + "ListTagsForResource": [ + { + "input": { + "resourceArn": "arn:aws:ecs:region:aws_account_id:cluster/dev" + }, + "output": { + "tags": [ + { + "key": "team", + "value": "dev" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists the tags for the 'dev' cluster.", + "id": "to-list-the-tags-for-a-cluster-1540582700259", + "title": "To list the tags for a cluster." + } + ], + "ListTaskDefinitionFamilies": [ + { + "input": { + }, + "output": { + "families": [ + "node-js-app", + "web-timer", + "hpcc", + "hpcc-c4-8xlarge" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists all of your registered task definition families.", + "id": "b5c89769-1d94-4ca2-a79e-8069103c7f75", + "title": "To list your registered task definition families" + }, + { + "input": { + "familyPrefix": "hpcc" + }, + "output": { + "families": [ + "hpcc", + "hpcc-c4-8xlarge" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists the task definition revisions that start with \"hpcc\".", + "id": "8a4cf9a6-42c1-4fe3-852d-99ac8968e11b", + "title": "To filter your registered task definition families" + } + ], + "ListTaskDefinitions": [ + { + "input": { + }, + "output": { + "taskDefinitionArns": [ + "arn:aws:ecs:us-east-1::task-definition/sleep300:2", + "arn:aws:ecs:us-east-1::task-definition/sleep360:1", + "arn:aws:ecs:us-east-1::task-definition/wordpress:3", + "arn:aws:ecs:us-east-1::task-definition/wordpress:4", + "arn:aws:ecs:us-east-1::task-definition/wordpress:5", + "arn:aws:ecs:us-east-1::task-definition/wordpress:6" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists all of your registered task definitions.", + "id": "b381ebaf-7eba-4d60-b99b-7f6ae49d3d60", + "title": "To list your registered task definitions" + }, + { + "input": { + "familyPrefix": "wordpress" + }, + "output": { + "taskDefinitionArns": [ + "arn:aws:ecs:us-east-1::task-definition/wordpress:3", + "arn:aws:ecs:us-east-1::task-definition/wordpress:4", + "arn:aws:ecs:us-east-1::task-definition/wordpress:5", + "arn:aws:ecs:us-east-1::task-definition/wordpress:6" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists the task definition revisions of a specified family.", + "id": "734e7afd-753a-4bc2-85d0-badddce10910", + "title": "To list the registered task definitions in a family" + } + ], + "ListTasks": [ + { + "input": { + "cluster": "default" + }, + "output": { + "taskArns": [ + "arn:aws:ecs:us-east-1:012345678910:task/0cc43cdb-3bee-4407-9c26-c0e6ea5bee84", + "arn:aws:ecs:us-east-1:012345678910:task/6b809ef6-c67e-4467-921f-ee261c15a0a1" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists all of the tasks in a cluster.", + "id": "9a6ec707-1a77-45d0-b2eb-516b5dd9e924", + "title": "To list the tasks in a cluster" + }, + { + "input": { + "cluster": "default", + "containerInstance": "f6bbb147-5370-4ace-8c73-c7181ded911f" + }, + "output": { + "taskArns": [ + "arn:aws:ecs:us-east-1:012345678910:task/0cc43cdb-3bee-4407-9c26-c0e6ea5bee84" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists the tasks of a specified container instance. Specifying a ``containerInstance`` value limits the results to tasks that belong to that container instance.", + "id": "024bf3b7-9cbb-44e3-848f-9d074e1fecce", + "title": "To list the tasks on a particular container instance" + } + ], + "PutAccountSetting": [ + { + "input": { + "name": "serviceLongArnFormat", + "value": "enabled" + }, + "output": { + "setting": { + "name": "serviceLongArnFormat", + "value": "enabled", + "principalArn": "arn:aws:iam:::user/principalName" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies your account settings to opt in to the new ARN and resource ID format for Amazon ECS services. If you’re using this command as the root user, then changes apply to the entire AWS account, unless an IAM user or role explicitly overrides these settings for themselves.", + "id": "to-modify-the-account-settings-for-your-iam-user-account-1549523130939", + "title": "To modify your account settings" + }, + { + "input": { + "name": "containerInstanceLongArnFormat", + "value": "enabled", + "principalArn": "arn:aws:iam:::user/principalName" + }, + "output": { + "setting": { + "name": "containerInstanceLongArnFormat", + "value": "enabled", + "principalArn": "arn:aws:iam:::user/principalName" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the account setting for a specific IAM user or IAM role to opt in to the new ARN and resource ID format for Amazon ECS container instances. If you’re using this command as the root user, then changes apply to the entire AWS account, unless an IAM user or role explicitly overrides these settings for themselves.", + "id": "to-modify-the-account-settings-for-a-specific-iam-user-or-iam-role-1549523518390", + "title": "To modify the account settings for a specific IAM user or IAM role" + } + ], + "PutAccountSettingDefault": [ + { + "input": { + "name": "serviceLongArnFormat", + "value": "enabled" + }, + "output": { + "setting": { + "name": "serviceLongArnFormat", + "value": "enabled", + "principalArn": "arn:aws:iam:::root" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the default account setting for the specified resource for all IAM users or roles on an account. These changes apply to the entire AWS account, unless an IAM user or role explicitly overrides these settings for themselves.", + "id": "to-modify-the-default-account-settings-for-all-iam-users-or-roles-on-your-account-1549523794603", + "title": "To modify the default account settings for all IAM users or roles on an account" + } + ], + "RegisterTaskDefinition": [ + { + "input": { + "containerDefinitions": [ + { + "name": "sleep", + "command": [ + "sleep", + "360" + ], + "cpu": 10, + "essential": true, + "image": "busybox", + "memory": 10 + } + ], + "family": "sleep360", + "taskRoleArn": "", + "volumes": [ + + ] + }, + "output": { + "taskDefinition": { + "containerDefinitions": [ + { + "name": "sleep", + "command": [ + "sleep", + "360" + ], + "cpu": 10, + "environment": [ + + ], + "essential": true, + "image": "busybox", + "memory": 10, + "mountPoints": [ + + ], + "portMappings": [ + + ], + "volumesFrom": [ + + ] + } + ], + "family": "sleep360", + "revision": 1, + "taskDefinitionArn": "arn:aws:ecs:us-east-1::task-definition/sleep360:19", + "volumes": [ + + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example registers a task definition to the specified family.", + "id": "to-register-a-task-definition-1470764550877", + "title": "To register a task definition" + } + ], + "RunTask": [ + { + "input": { + "cluster": "default", + "taskDefinition": "sleep360:1" + }, + "output": { + "tasks": [ + { + "containerInstanceArn": "arn:aws:ecs:us-east-1::container-instance/ffe3d344-77e2-476c-a4d0-bf560ad50acb", + "containers": [ + { + "name": "sleep", + "containerArn": "arn:aws:ecs:us-east-1::container/58591c8e-be29-4ddf-95aa-ee459d4c59fd", + "lastStatus": "PENDING", + "taskArn": "arn:aws:ecs:us-east-1::task/a9f21ea7-c9f5-44b1-b8e6-b31f50ed33c0" + } + ], + "desiredStatus": "RUNNING", + "lastStatus": "PENDING", + "overrides": { + "containerOverrides": [ + { + "name": "sleep" + } + ] + }, + "taskArn": "arn:aws:ecs:us-east-1::task/a9f21ea7-c9f5-44b1-b8e6-b31f50ed33c0", + "taskDefinitionArn": "arn:aws:ecs:us-east-1::task-definition/sleep360:1" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example runs the specified task definition on your default cluster.", + "id": "6f238c83-a133-42cd-ab3d-abeca0560445", + "title": "To run a task on your default cluster" + } + ], + "TagResource": [ + { + "input": { + "resourceArn": "arn:aws:ecs:region:aws_account_id:cluster/dev", + "tags": [ + { + "key": "team", + "value": "dev" + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example tags the 'dev' cluster with key 'team' and value 'dev'.", + "id": "to-tag-a-cluster-1540581863751", + "title": "To tag a cluster." + } + ], + "UntagResource": [ + { + "input": { + "resourceArn": "arn:aws:ecs:region:aws_account_id:cluster/dev", + "tagKeys": [ + "team" + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the 'team' tag from the 'dev' cluster.", + "id": "to-untag-a-cluster-1540582546056", + "title": "To untag a cluster." + } + ], + "UpdateService": [ + { + "input": { + "service": "my-http-service", + "taskDefinition": "amazon-ecs-sample" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example updates the my-http-service service to use the amazon-ecs-sample task definition.", + "id": "cc9e8900-0cc2-44d2-8491-64d1d3d37887", + "title": "To change the task definition used in a service" + }, + { + "input": { + "desiredCount": 10, + "service": "my-http-service" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example updates the desired count of the my-http-service service to 10.", + "id": "9581d6c5-02e3-4140-8cc1-5a4301586633", + "title": "To change the number of tasks in a service" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/paginators-1.json new file mode 100644 index 00000000..cd66d4ab --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/paginators-1.json @@ -0,0 +1,58 @@ +{ + "pagination": { + "ListClusters": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "clusterArns" + }, + "ListContainerInstances": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "containerInstanceArns" + }, + "ListTaskDefinitions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "taskDefinitionArns" + }, + "ListTaskDefinitionFamilies": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "families" + }, + "ListTasks": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "taskArns" + }, + "ListServices": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "serviceArns" + }, + "ListAccountSettings": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "settings" + }, + "ListAttributes": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "attributes" + }, + "ListServicesByNamespace": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "serviceArns" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/service-2.json.gz new file mode 100644 index 00000000..56b3daa1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/waiters-2.json new file mode 100644 index 00000000..8a0b19d8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ecs/2014-11-13/waiters-2.json @@ -0,0 +1,93 @@ +{ + "version": 2, + "waiters": { + "TasksRunning": { + "delay": 6, + "operation": "DescribeTasks", + "maxAttempts": 100, + "acceptors": [ + { + "expected": "STOPPED", + "matcher": "pathAny", + "state": "failure", + "argument": "tasks[].lastStatus" + }, + { + "expected": "MISSING", + "matcher": "pathAny", + "state": "failure", + "argument": "failures[].reason" + }, + { + "expected": "RUNNING", + "matcher": "pathAll", + "state": "success", + "argument": "tasks[].lastStatus" + } + ] + }, + "TasksStopped": { + "delay": 6, + "operation": "DescribeTasks", + "maxAttempts": 100, + "acceptors": [ + { + "expected": "STOPPED", + "matcher": "pathAll", + "state": "success", + "argument": "tasks[].lastStatus" + } + ] + }, + "ServicesStable": { + "delay": 15, + "operation": "DescribeServices", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "MISSING", + "matcher": "pathAny", + "state": "failure", + "argument": "failures[].reason" + }, + { + "expected": "DRAINING", + "matcher": "pathAny", + "state": "failure", + "argument": "services[].status" + }, + { + "expected": "INACTIVE", + "matcher": "pathAny", + "state": "failure", + "argument": "services[].status" + }, + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(services[?!(length(deployments) == `1` && runningCount == desiredCount)]) == `0`" + } + ] + }, + "ServicesInactive": { + "delay": 15, + "operation": "DescribeServices", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "MISSING", + "matcher": "pathAny", + "state": "failure", + "argument": "failures[].reason" + }, + { + "expected": "INACTIVE", + "matcher": "pathAny", + "state": "success", + "argument": "services[].status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d911007f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/examples-1.json new file mode 100644 index 00000000..f3c75b34 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/examples-1.json @@ -0,0 +1,294 @@ +{ + "version": "1.0", + "examples": { + "CreateFileSystem": [ + { + "input": { + "Backup": true, + "CreationToken": "tokenstring", + "Encrypted": true, + "PerformanceMode": "generalPurpose", + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ] + }, + "output": { + "CreationTime": "1481841524.0", + "CreationToken": "tokenstring", + "Encrypted": true, + "FileSystemId": "fs-01234567", + "LifeCycleState": "creating", + "NumberOfMountTargets": 0, + "OwnerId": "012345678912", + "PerformanceMode": "generalPurpose", + "SizeInBytes": { + "Value": 0 + }, + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation creates a new, encrypted file system with automatic backups enabled, and the default generalpurpose performance mode.", + "id": "to-create-a-new-file-system-1481840798547", + "title": "To create a new file system" + } + ], + "CreateMountTarget": [ + { + "input": { + "FileSystemId": "fs-01234567", + "SubnetId": "subnet-1234abcd" + }, + "output": { + "FileSystemId": "fs-01234567", + "IpAddress": "192.0.0.2", + "LifeCycleState": "creating", + "MountTargetId": "fsmt-12340abc", + "NetworkInterfaceId": "eni-cedf6789", + "OwnerId": "012345678912", + "SubnetId": "subnet-1234abcd" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation creates a new mount target for an EFS file system.", + "id": "to-create-a-new-mount-target-1481842289329", + "title": "To create a new mount target" + } + ], + "CreateTags": [ + { + "input": { + "FileSystemId": "fs-01234567", + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ] + }, + "comments": { + }, + "description": "This operation creates a new tag for an EFS file system.", + "id": "to-create-a-new-tag-1481843409357", + "title": "To create a new tag" + } + ], + "DeleteFileSystem": [ + { + "input": { + "FileSystemId": "fs-01234567" + }, + "comments": { + }, + "description": "This operation deletes an EFS file system.", + "id": "to-delete-a-file-system-1481847318348", + "title": "To delete a file system" + } + ], + "DeleteMountTarget": [ + { + "input": { + "MountTargetId": "fsmt-12340abc" + }, + "comments": { + }, + "description": "This operation deletes a mount target.", + "id": "to-delete-a-mount-target-1481847635607", + "title": "To delete a mount target" + } + ], + "DeleteTags": [ + { + "input": { + "FileSystemId": "fs-01234567", + "TagKeys": [ + "Name" + ] + }, + "comments": { + }, + "description": "This operation deletes tags for an EFS file system.", + "id": "to-delete-tags-for-an-efs-file-system-1481848189061", + "title": "To delete tags for an EFS file system" + } + ], + "DescribeFileSystems": [ + { + "input": { + }, + "output": { + "FileSystems": [ + { + "CreationTime": "1481841524.0", + "CreationToken": "tokenstring", + "FileSystemId": "fs-01234567", + "LifeCycleState": "available", + "Name": "MyFileSystem", + "NumberOfMountTargets": 1, + "OwnerId": "012345678912", + "PerformanceMode": "generalPurpose", + "SizeInBytes": { + "Value": 6144 + }, + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ] + } + ] + }, + "comments": { + }, + "description": "This operation describes all of the EFS file systems in an account.", + "id": "to-describe-an-efs-file-system-1481848448460", + "title": "To describe an EFS file system" + } + ], + "DescribeLifecycleConfiguration": [ + { + "input": { + "FileSystemId": "fs-01234567" + }, + "output": { + "LifecyclePolicies": [ + { + "TransitionToIA": "AFTER_30_DAYS" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation describes a file system's LifecycleConfiguration. EFS lifecycle management uses the LifecycleConfiguration object to identify which files to move to the EFS Infrequent Access (IA) storage class. ", + "id": "to-describe-the-lifecycle-configuration-for-a-file-system-1551200664502", + "title": "To describe the lifecycle configuration for a file system" + } + ], + "DescribeMountTargetSecurityGroups": [ + { + "input": { + "MountTargetId": "fsmt-12340abc" + }, + "output": { + "SecurityGroups": [ + "sg-4567abcd" + ] + }, + "comments": { + }, + "description": "This operation describes all of the security groups for a file system's mount target.", + "id": "to-describe-the-security-groups-for-a-mount-target-1481849317823", + "title": "To describe the security groups for a mount target" + } + ], + "DescribeMountTargets": [ + { + "input": { + "FileSystemId": "fs-01234567" + }, + "output": { + "MountTargets": [ + { + "FileSystemId": "fs-01234567", + "IpAddress": "192.0.0.2", + "LifeCycleState": "available", + "MountTargetId": "fsmt-12340abc", + "NetworkInterfaceId": "eni-cedf6789", + "OwnerId": "012345678912", + "SubnetId": "subnet-1234abcd" + } + ] + }, + "comments": { + }, + "description": "This operation describes all of a file system's mount targets.", + "id": "to-describe-the-mount-targets-for-a-file-system-1481849958584", + "title": "To describe the mount targets for a file system" + } + ], + "DescribeTags": [ + { + "input": { + "FileSystemId": "fs-01234567" + }, + "output": { + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ] + }, + "comments": { + }, + "description": "This operation describes all of a file system's tags.", + "id": "to-describe-the-tags-for-a-file-system-1481850497090", + "title": "To describe the tags for a file system" + } + ], + "ModifyMountTargetSecurityGroups": [ + { + "input": { + "MountTargetId": "fsmt-12340abc", + "SecurityGroups": [ + "sg-abcd1234" + ] + }, + "comments": { + }, + "description": "This operation modifies the security groups associated with a mount target for a file system.", + "id": "to-modify-the-security-groups-associated-with-a-mount-target-for-a-file-system-1481850772562", + "title": "To modify the security groups associated with a mount target for a file system" + } + ], + "PutLifecycleConfiguration": [ + { + "input": { + "FileSystemId": "fs-01234567", + "LifecyclePolicies": [ + { + "TransitionToIA": "AFTER_30_DAYS" + } + ] + }, + "output": { + "LifecyclePolicies": [ + { + "TransitionToIA": "AFTER_30_DAYS" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation enables lifecycle management on a file system by creating a new LifecycleConfiguration object. A LifecycleConfiguration object defines when files in an Amazon EFS file system are automatically transitioned to the lower-cost EFS Infrequent Access (IA) storage class. A LifecycleConfiguration applies to all files in a file system.", + "id": "creates-a-new-lifecycleconfiguration-object-for-a-file-system-1551201594692", + "title": "Creates a new lifecycleconfiguration object for a file system" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/paginators-1.json new file mode 100644 index 00000000..047d3e2f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "DescribeFileSystems": { + "input_token": "Marker", + "output_token": "NextMarker", + "limit_key": "MaxItems", + "result_key": "FileSystems" + }, + "DescribeMountTargets": { + "input_token": "Marker", + "output_token": "NextMarker", + "limit_key": "MaxItems", + "result_key": "MountTargets" + }, + "DescribeTags": { + "input_token": "Marker", + "output_token": "NextMarker", + "limit_key": "MaxItems", + "result_key": "Tags" + }, + "DescribeAccessPoints": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AccessPoints" + }, + "DescribeReplicationConfigurations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Replications" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/service-2.json.gz new file mode 100644 index 00000000..0622c97d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/efs/2015-02-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6659944e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/service-2.json.gz new file mode 100644 index 00000000..1f527d22 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/waiters-2.json new file mode 100644 index 00000000..4b20636a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/eks-auth/2023-11-26/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8c3e8c1b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/examples-1.json new file mode 100644 index 00000000..8ea25175 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/examples-1.json @@ -0,0 +1,135 @@ +{ + "version": "1.0", + "examples": { + "CreateCluster": [ + { + "input": { + "version": "1.10", + "name": "prod", + "clientRequestToken": "1d2129a1-3d38-460a-9756-e5b91fddb951", + "resourcesVpcConfig": { + "securityGroupIds": [ + "sg-6979fe18" + ], + "subnetIds": [ + "subnet-6782e71e", + "subnet-e7e761ac" + ] + }, + "roleArn": "arn:aws:iam::012345678910:role/eks-service-role-AWSServiceRoleForAmazonEKS-J7ONKE3BQ4PI" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates an Amazon EKS cluster called prod.", + "id": "to-create-a-new-cluster-1527868185648", + "title": "To create a new cluster" + } + ], + "DeleteCluster": [ + { + "input": { + "name": "devel" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command deletes a cluster named `devel` in your default region.", + "id": "to-delete-a-cluster-1527868641252", + "title": "To delete a cluster" + } + ], + "DescribeCluster": [ + { + "input": { + "name": "devel" + }, + "output": { + "cluster": { + "version": "1.10", + "name": "devel", + "arn": "arn:aws:eks:us-west-2:012345678910:cluster/devel", + "certificateAuthority": { + "data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRFNE1EVXpNVEl6TVRFek1Wb1hEVEk0TURVeU9ESXpNVEV6TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTTZWCjVUaG4rdFcySm9Xa2hQMzRlVUZMNitaRXJOZGIvWVdrTmtDdWNGS2RaaXl2TjlMVmdvUmV2MjlFVFZlN1ZGbSsKUTJ3ZURyRXJiQyt0dVlibkFuN1ZLYmE3ay9hb1BHekZMdmVnb0t6b0M1N2NUdGVwZzRIazRlK2tIWHNaME10MApyb3NzcjhFM1ROeExETnNJTThGL1cwdjhsTGNCbWRPcjQyV2VuTjFHZXJnaDNSZ2wzR3JIazBnNTU0SjFWenJZCm9hTi8zODFUczlOTFF2QTBXb0xIcjBFRlZpTFdSZEoyZ3lXaC9ybDVyOFNDOHZaQXg1YW1BU0hVd01aTFpWRC8KTDBpOW4wRVM0MkpVdzQyQmxHOEdpd3NhTkJWV3lUTHZKclNhRXlDSHFtVVZaUTFDZkFXUjl0L3JleVVOVXM3TApWV1FqM3BFbk9RMitMSWJrc0RzQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFNZ3RsQ1dIQ2U2YzVHMXl2YlFTS0Q4K2hUalkKSm1NSG56L2EvRGt0WG9YUjFVQzIrZUgzT1BZWmVjRVZZZHVaSlZCckNNQ2VWR0ZkeWdBYlNLc1FxWDg0S2RXbAp1MU5QaERDSmEyRHliN2pVMUV6VThTQjFGZUZ5ZFE3a0hNS1E1blpBRVFQOTY4S01hSGUrSm0yQ2x1UFJWbEJVCjF4WlhTS1gzTVZ0K1Q0SU1EV2d6c3JRSjVuQkRjdEtLcUZtM3pKdVVubHo5ZEpVckdscEltMjVJWXJDckxYUFgKWkUwRUtRNWEzMHhkVWNrTHRGQkQrOEtBdFdqSS9yZUZPNzM1YnBMdVoyOTBaNm42QlF3elRrS0p4cnhVc3QvOAppNGsxcnlsaUdWMm5SSjBUYjNORkczNHgrYWdzYTRoSTFPbU90TFM0TmgvRXJxT3lIUXNDc2hEQUtKUT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + }, + "createdAt": 1527807879.988, + "endpoint": "https://A0DCCD80A04F01705DD065655C30CC3D.yl4.us-west-2.eks.amazonaws.com", + "resourcesVpcConfig": { + "securityGroupIds": [ + "sg-6979fe18" + ], + "subnetIds": [ + "subnet-6782e71e", + "subnet-e7e761ac" + ], + "vpcId": "vpc-950809ec" + }, + "roleArn": "arn:aws:iam::012345678910:role/eks-service-role-AWSServiceRoleForAmazonEKS-J7ONKE3BQ4PI", + "status": "ACTIVE" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command provides a description of the specified cluster in your default region.", + "id": "to-describe-a-cluster-1527868708512", + "title": "To describe a cluster" + } + ], + "ListClusters": [ + { + "input": { + }, + "output": { + "clusters": [ + "devel", + "prod" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example command lists all of your available clusters in your default region.", + "id": "to-list-your-available-clusters-1527868801040", + "title": "To list your available clusters" + } + ], + "ListTagsForResource": [ + { + "input": { + "resourceArn": "arn:aws:eks:us-west-2:012345678910:cluster/beta" + }, + "output": { + "tags": { + "aws:tag:domain": "beta" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists all of the tags for the `beta` cluster.", + "id": "to-list-tags-for-a-cluster-1568666903378", + "title": "To list tags for a cluster" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/paginators-1.json new file mode 100644 index 00000000..a89a938f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/paginators-1.json @@ -0,0 +1,86 @@ +{ + "pagination": { + "ListClusters": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "clusters" + }, + "ListUpdates": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "updateIds" + }, + "ListNodegroups": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "nodegroups" + }, + "ListFargateProfiles": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "fargateProfileNames" + }, + "DescribeAddonVersions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "addons" + }, + "ListAddons": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "addons" + }, + "ListIdentityProviderConfigs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "identityProviderConfigs" + }, + "ListEksAnywhereSubscriptions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "subscriptions" + }, + "ListPodIdentityAssociations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "associations" + }, + "ListAccessEntries": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "accessEntries" + }, + "ListAccessPolicies": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "accessPolicies" + }, + "ListAssociatedAccessPolicies": { + "input_token": "nextToken", + "limit_key": "maxResults", + "non_aggregate_keys": [ + "clusterName", + "principalArn" + ], + "output_token": "nextToken", + "result_key": "associatedAccessPolicies" + }, + "ListInsights": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "insights" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/service-2.json.gz new file mode 100644 index 00000000..1da9130b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/service-2.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/service-2.sdk-extras.json new file mode 100644 index 00000000..b636c211 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/service-2.sdk-extras.json @@ -0,0 +1,8 @@ +{ + "version": 1.0, + "merge": { + "metadata": { + "serviceId":"EKS" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/waiters-2.json new file mode 100644 index 00000000..c0689097 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/eks/2017-11-01/waiters-2.json @@ -0,0 +1,177 @@ +{ + "version": 2, + "waiters": { + "ClusterActive": { + "delay": 30, + "operation": "DescribeCluster", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "DELETING", + "matcher": "path", + "state": "failure", + "argument": "cluster.status" + }, + { + "expected": "FAILED", + "matcher": "path", + "state": "failure", + "argument": "cluster.status" + }, + { + "expected": "ACTIVE", + "matcher": "path", + "state": "success", + "argument": "cluster.status" + } + ] + }, + "ClusterDeleted": { + "delay": 30, + "operation": "DescribeCluster", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "ACTIVE", + "matcher": "path", + "state": "failure", + "argument": "cluster.status" + }, + { + "expected": "CREATING", + "matcher": "path", + "state": "failure", + "argument": "cluster.status" + }, + { + "expected": "PENDING", + "matcher": "path", + "state": "failure", + "argument": "cluster.status" + }, + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "success" + } + ] + }, + "NodegroupActive": { + "delay": 30, + "operation": "DescribeNodegroup", + "maxAttempts": 80, + "acceptors": [ + { + "expected": "CREATE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "nodegroup.status" + }, + { + "expected": "ACTIVE", + "matcher": "path", + "state": "success", + "argument": "nodegroup.status" + } + ] + }, + "NodegroupDeleted": { + "delay": 30, + "operation": "DescribeNodegroup", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "DELETE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "nodegroup.status" + }, + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "success" + } + ] + }, + "AddonActive": { + "delay": 10, + "operation": "DescribeAddon", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "CREATE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "addon.status" + }, + { + "expected": "DEGRADED", + "matcher": "path", + "state": "failure", + "argument": "addon.status" + }, + { + "expected": "ACTIVE", + "matcher": "path", + "state": "success", + "argument": "addon.status" + } + ] + }, + "AddonDeleted": { + "delay": 10, + "operation": "DescribeAddon", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "DELETE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "addon.status" + }, + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "success" + } + ] + }, + "FargateProfileActive": { + "delay": 10, + "operation": "DescribeFargateProfile", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "CREATE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "fargateProfile.status" + }, + { + "expected": "ACTIVE", + "matcher": "path", + "state": "success", + "argument": "fargateProfile.status" + } + ] + }, + "FargateProfileDeleted": { + "delay": 30, + "operation": "DescribeFargateProfile", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "DELETE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "fargateProfile.status" + }, + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "success" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..22f9e81d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/paginators-1.json new file mode 100644 index 00000000..909b792b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "DescribeAccelerators": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "acceleratorSet" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/service-2.json.gz new file mode 100644 index 00000000..71ddb52a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elastic-inference/2017-07-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a2bf9bb2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/paginators-1.json new file mode 100644 index 00000000..8724740d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/paginators-1.json @@ -0,0 +1,76 @@ +{ + "pagination": { + "DescribeCacheClusters": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "CacheClusters" + }, + "DescribeCacheEngineVersions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "CacheEngineVersions" + }, + "DescribeCacheParameterGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "CacheParameterGroups" + }, + "DescribeCacheParameters": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Parameters" + }, + "DescribeCacheSecurityGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "CacheSecurityGroups" + }, + "DescribeCacheSubnetGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "CacheSubnetGroups" + }, + "DescribeEngineDefaultParameters": { + "input_token": "Marker", + "output_token": "EngineDefaults.Marker", + "limit_key": "MaxRecords", + "result_key": "EngineDefaults.Parameters" + }, + "DescribeEvents": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Events" + }, + "DescribeReservedCacheNodes": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReservedCacheNodes" + }, + "DescribeReservedCacheNodesOfferings": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReservedCacheNodesOfferings" + }, + "DescribeReplicationGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReplicationGroups" + }, + "DescribeSnapshots": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Snapshots" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/service-2.json.gz new file mode 100644 index 00000000..4146ea38 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/waiters-2.json new file mode 100644 index 00000000..ccb904aa --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2014-09-30/waiters-2.json @@ -0,0 +1,139 @@ +{ + "version": 2, + "waiters": { + "CacheClusterAvailable": { + "delay": 30, + "operation": "DescribeCacheClusters", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "CacheClusters[].CacheClusterStatus" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "CacheClusters[].CacheClusterStatus" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "CacheClusters[].CacheClusterStatus" + }, + { + "expected": "incompatible-network", + "matcher": "pathAny", + "state": "failure", + "argument": "CacheClusters[].CacheClusterStatus" + }, + { + "expected": "restore-failed", + "matcher": "pathAny", + "state": "failure", + "argument": "CacheClusters[].CacheClusterStatus" + } + ] + }, + "CacheClusterDeleted": { + "delay": 30, + "operation": "DescribeCacheClusters", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "CacheClusterNotFound", + "matcher": "error", + "state": "success" + }, + { + "expected": "creating", + "matcher": "pathAny", + "state": "failure", + "argument": "CacheClusters[].CacheClusterStatus" + }, + { + "expected": "modifying", + "matcher": "pathAny", + "state": "failure", + "argument": "CacheClusters[].CacheClusterStatus" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "CacheClusters[].CacheClusterStatus" + } + ] + }, + "ReplicationGroupAvailable": { + "delay": 30, + "operation": "DescribeReplicationGroups", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "ReplicationGroups[].Status" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "ReplicationGroups[].Status" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "ReplicationGroups[].Status" + }, + { + "expected": "incompatible-network", + "matcher": "pathAny", + "state": "failure", + "argument": "ReplicationGroups[].Status" + }, + { + "expected": "restore-failed", + "matcher": "pathAny", + "state": "failure", + "argument": "ReplicationGroups[].Status" + } + ] + }, + "ReplicationGroupDeleted": { + "delay": 30, + "operation": "DescribeReplicationGroups", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "ReplicationGroupNotFoundFault", + "matcher": "error", + "state": "success" + }, + { + "expected": "creating", + "matcher": "pathAny", + "state": "failure", + "argument": "ReplicationGroups[].Status" + }, + { + "expected": "modifying", + "matcher": "pathAny", + "state": "failure", + "argument": "ReplicationGroups[].Status" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "ReplicationGroups[].Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e94be369 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/examples-1.json new file mode 100644 index 00000000..f1d21bd7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/examples-1.json @@ -0,0 +1,3149 @@ +{ + "version": "1.0", + "examples": { + "AddTagsToResource": [ + { + "input": { + "ResourceName": "arn:aws:elasticache:us-east-1:1234567890:cluster:my-mem-cluster", + "Tags": [ + { + "Key": "APIVersion", + "Value": "20150202" + }, + { + "Key": "Service", + "Value": "ElastiCache" + } + ] + }, + "output": { + "TagList": [ + { + "Key": "APIVersion", + "Value": "20150202" + }, + { + "Key": "Service", + "Value": "ElastiCache" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Adds up to 10 tags, key/value pairs, to a cluster or snapshot resource.", + "id": "addtagstoresource-1482430264385", + "title": "AddTagsToResource" + } + ], + "AuthorizeCacheSecurityGroupIngress": [ + { + "input": { + "CacheSecurityGroupName": "my-sec-grp", + "EC2SecurityGroupName": "my-ec2-sec-grp", + "EC2SecurityGroupOwnerId": "1234567890" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Allows network ingress to a cache security group. Applications using ElastiCache must be running on Amazon EC2. Amazon EC2 security groups are used as the authorization mechanism.", + "id": "authorizecachecachesecuritygroupingress-1483046446206", + "title": "AuthorizeCacheCacheSecurityGroupIngress" + } + ], + "CopySnapshot": [ + { + "input": { + "SourceSnapshotName": "my-snapshot", + "TargetBucket": "", + "TargetSnapshotName": "my-snapshot-copy" + }, + "output": { + "Snapshot": { + "AutoMinorVersionUpgrade": true, + "CacheClusterCreateTime": "2016-12-21T22:24:04.955Z", + "CacheClusterId": "my-redis4", + "CacheNodeType": "cache.m3.large", + "CacheParameterGroupName": "default.redis3.2", + "CacheSubnetGroupName": "default", + "Engine": "redis", + "EngineVersion": "3.2.4", + "NodeSnapshots": [ + { + "CacheNodeCreateTime": "2016-12-21T22:24:04.955Z", + "CacheNodeId": "0001", + "CacheSize": "3 MB", + "SnapshotCreateTime": "2016-12-28T07:00:52Z" + } + ], + "NumCacheNodes": 1, + "Port": 6379, + "PreferredAvailabilityZone": "us-east-1c", + "PreferredMaintenanceWindow": "tue:09:30-tue:10:30", + "SnapshotName": "my-snapshot-copy", + "SnapshotRetentionLimit": 7, + "SnapshotSource": "manual", + "SnapshotStatus": "creating", + "SnapshotWindow": "07:00-08:00", + "VpcId": "vpc-3820329f3" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Copies a snapshot to a specified name.", + "id": "copysnapshot-1482961393820", + "title": "CopySnapshot" + } + ], + "CreateCacheCluster": [ + { + "input": { + "AZMode": "cross-az", + "CacheClusterId": "my-memcached-cluster", + "CacheNodeType": "cache.r3.large", + "CacheSubnetGroupName": "default", + "Engine": "memcached", + "EngineVersion": "1.4.24", + "NumCacheNodes": 2, + "Port": 11211 + }, + "output": { + "CacheCluster": { + "AutoMinorVersionUpgrade": true, + "CacheClusterId": "my-memcached-cluster", + "CacheClusterStatus": "creating", + "CacheNodeType": "cache.r3.large", + "CacheParameterGroup": { + "CacheNodeIdsToReboot": [ + + ], + "CacheParameterGroupName": "default.memcached1.4", + "ParameterApplyStatus": "in-sync" + }, + "CacheSecurityGroups": [ + + ], + "CacheSubnetGroupName": "default", + "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", + "Engine": "memcached", + "EngineVersion": "1.4.24", + "NumCacheNodes": 2, + "PendingModifiedValues": { + }, + "PreferredAvailabilityZone": "Multiple", + "PreferredMaintenanceWindow": "wed:09:00-wed:10:00" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a Memcached cluster with 2 nodes. ", + "id": "createcachecluster-1474994727381", + "title": "CreateCacheCluster" + }, + { + "input": { + "AutoMinorVersionUpgrade": true, + "CacheClusterId": "my-redis", + "CacheNodeType": "cache.r3.larage", + "CacheSubnetGroupName": "default", + "Engine": "redis", + "EngineVersion": "3.2.4", + "NumCacheNodes": 1, + "Port": 6379, + "PreferredAvailabilityZone": "us-east-1c", + "SnapshotRetentionLimit": 7 + }, + "output": { + "CacheCluster": { + "AutoMinorVersionUpgrade": true, + "CacheClusterId": "my-redis", + "CacheClusterStatus": "creating", + "CacheNodeType": "cache.m3.large", + "CacheParameterGroup": { + "CacheNodeIdsToReboot": [ + + ], + "CacheParameterGroupName": "default.redis3.2", + "ParameterApplyStatus": "in-sync" + }, + "CacheSecurityGroups": [ + + ], + "CacheSubnetGroupName": "default", + "ClientDownloadLandingPage": "https: //console.aws.amazon.com/elasticache/home#client-download: ", + "Engine": "redis", + "EngineVersion": "3.2.4", + "NumCacheNodes": 1, + "PendingModifiedValues": { + }, + "PreferredAvailabilityZone": "us-east-1c", + "PreferredMaintenanceWindow": "fri: 05: 30-fri: 06: 30", + "SnapshotRetentionLimit": 7, + "SnapshotWindow": "10: 00-11: 00" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a Redis cluster with 1 node. ", + "id": "createcachecluster-1474994727381", + "title": "CreateCacheCluster" + } + ], + "CreateCacheParameterGroup": [ + { + "input": { + "CacheParameterGroupFamily": "redis2.8", + "CacheParameterGroupName": "custom-redis2-8", + "Description": "Custom Redis 2.8 parameter group." + }, + "output": { + "CacheParameterGroup": { + "CacheParameterGroupFamily": "redis2.8", + "CacheParameterGroupName": "custom-redis2-8", + "Description": "Custom Redis 2.8 parameter group." + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates the Amazon ElastiCache parameter group custom-redis2-8.", + "id": "createcacheparametergroup-1474997699362", + "title": "CreateCacheParameterGroup" + } + ], + "CreateCacheSecurityGroup": [ + { + "input": { + "CacheSecurityGroupName": "my-cache-sec-grp", + "Description": "Example ElastiCache security group." + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates an ElastiCache security group. ElastiCache security groups are only for clusters not running in an AWS VPC.", + "id": "createcachesecuritygroup-1483041506604", + "title": "CreateCacheSecurityGroup" + } + ], + "CreateCacheSubnetGroup": [ + { + "input": { + "CacheSubnetGroupDescription": "Sample subnet group", + "CacheSubnetGroupName": "my-sn-grp2", + "SubnetIds": [ + "subnet-6f28c982", + "subnet-bcd382f3", + "subnet-845b3e7c0" + ] + }, + "output": { + "CacheSubnetGroup": { + "CacheSubnetGroupDescription": "My subnet group.", + "CacheSubnetGroupName": "my-sn-grp", + "Subnets": [ + { + "SubnetAvailabilityZone": { + "Name": "us-east-1a" + }, + "SubnetIdentifier": "subnet-6f28c982" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1c" + }, + "SubnetIdentifier": "subnet-bcd382f3" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1b" + }, + "SubnetIdentifier": "subnet-845b3e7c0" + } + ], + "VpcId": "vpc-91280df6" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a new cache subnet group.", + "id": "createcachesubnet-1483042274558", + "title": "CreateCacheSubnet" + } + ], + "CreateReplicationGroup": [ + { + "input": { + "AutomaticFailoverEnabled": true, + "CacheNodeType": "cache.m3.medium", + "Engine": "redis", + "EngineVersion": "2.8.24", + "NumCacheClusters": 3, + "ReplicationGroupDescription": "A Redis replication group.", + "ReplicationGroupId": "my-redis-rg", + "SnapshotRetentionLimit": 30 + }, + "output": { + "ReplicationGroup": { + "AutomaticFailover": "enabling", + "Description": "A Redis replication group.", + "MemberClusters": [ + "my-redis-rg-001", + "my-redis-rg-002", + "my-redis-rg-003" + ], + "PendingModifiedValues": { + }, + "ReplicationGroupId": "my-redis-rg", + "SnapshottingClusterId": "my-redis-rg-002", + "Status": "creating" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a Redis replication group with 3 nodes.", + "id": "createcachereplicationgroup-1474998730655", + "title": "CreateCacheReplicationGroup" + }, + { + "input": { + "AutoMinorVersionUpgrade": true, + "CacheNodeType": "cache.m3.medium", + "CacheParameterGroupName": "default.redis3.2.cluster.on", + "Engine": "redis", + "EngineVersion": "3.2.4", + "NodeGroupConfiguration": [ + { + "PrimaryAvailabilityZone": "us-east-1c", + "ReplicaAvailabilityZones": [ + "us-east-1b" + ], + "ReplicaCount": 1, + "Slots": "0-8999" + }, + { + "PrimaryAvailabilityZone": "us-east-1a", + "ReplicaAvailabilityZones": [ + "us-east-1a", + "us-east-1c" + ], + "ReplicaCount": 2, + "Slots": "9000-16383" + } + ], + "NumNodeGroups": 2, + "ReplicationGroupDescription": "A multi-sharded replication group", + "ReplicationGroupId": "clustered-redis-rg", + "SnapshotRetentionLimit": 8 + }, + "output": { + "ReplicationGroup": { + "AutomaticFailover": "enabled", + "Description": "Sharded replication group", + "MemberClusters": [ + "rc-rg3-0001-001", + "rc-rg3-0001-002", + "rc-rg3-0002-001", + "rc-rg3-0002-002", + "rc-rg3-0002-003" + ], + "PendingModifiedValues": { + }, + "ReplicationGroupId": "clustered-redis-rg", + "SnapshotRetentionLimit": 8, + "SnapshotWindow": "05:30-06:30", + "Status": "creating" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a Redis (cluster mode enabled) replication group with two shards. One shard has one read replica node and the other shard has two read replicas.", + "id": "createreplicationgroup-1483657035585", + "title": "CreateReplicationGroup" + } + ], + "CreateSnapshot": [ + { + "input": { + "CacheClusterId": "onenoderedis", + "SnapshotName": "snapshot-1" + }, + "output": { + "Snapshot": { + "AutoMinorVersionUpgrade": true, + "CacheClusterCreateTime": "2017-02-03T15:43:36.278Z", + "CacheClusterId": "onenoderedis", + "CacheNodeType": "cache.m3.medium", + "CacheParameterGroupName": "default.redis3.2", + "CacheSubnetGroupName": "default", + "Engine": "redis", + "EngineVersion": "3.2.4", + "NodeSnapshots": [ + { + "CacheNodeCreateTime": "2017-02-03T15:43:36.278Z", + "CacheNodeId": "0001", + "CacheSize": "" + } + ], + "NumCacheNodes": 1, + "Port": 6379, + "PreferredAvailabilityZone": "us-west-2c", + "PreferredMaintenanceWindow": "sat:08:00-sat:09:00", + "SnapshotName": "snapshot-1", + "SnapshotRetentionLimit": 1, + "SnapshotSource": "manual", + "SnapshotStatus": "creating", + "SnapshotWindow": "00:00-01:00", + "VpcId": "vpc-73c3cd17" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a snapshot of a non-clustered Redis cluster that has only one node.", + "id": "createsnapshot-1474999681024", + "title": "CreateSnapshot - NonClustered Redis, no read-replicas" + }, + { + "input": { + "CacheClusterId": "threenoderedis-001", + "SnapshotName": "snapshot-2" + }, + "output": { + "Snapshot": { + "AutoMinorVersionUpgrade": true, + "CacheClusterCreateTime": "2017-02-03T15:43:36.278Z", + "CacheClusterId": "threenoderedis-001", + "CacheNodeType": "cache.m3.medium", + "CacheParameterGroupName": "default.redis3.2", + "CacheSubnetGroupName": "default", + "Engine": "redis", + "EngineVersion": "3.2.4", + "NodeSnapshots": [ + { + "CacheNodeCreateTime": "2017-02-03T15:43:36.278Z", + "CacheNodeId": "0001", + "CacheSize": "" + } + ], + "NumCacheNodes": 1, + "Port": 6379, + "PreferredAvailabilityZone": "us-west-2c", + "PreferredMaintenanceWindow": "sat:08:00-sat:09:00", + "SnapshotName": "snapshot-2", + "SnapshotRetentionLimit": 1, + "SnapshotSource": "manual", + "SnapshotStatus": "creating", + "SnapshotWindow": "00:00-01:00", + "VpcId": "vpc-73c3cd17" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a snapshot of a non-clustered Redis cluster that has only three nodes, primary and two read-replicas. CacheClusterId must be a specific node in the cluster.", + "id": "createsnapshot-1474999681024", + "title": "CreateSnapshot - NonClustered Redis, 2 read-replicas" + }, + { + "input": { + "ReplicationGroupId": "clusteredredis", + "SnapshotName": "snapshot-2x5" + }, + "output": { + "Snapshot": { + "AutoMinorVersionUpgrade": true, + "AutomaticFailover": "enabled", + "CacheNodeType": "cache.m3.medium", + "CacheParameterGroupName": "default.redis3.2.cluster.on", + "CacheSubnetGroupName": "default", + "Engine": "redis", + "EngineVersion": "3.2.4", + "NodeSnapshots": [ + { + "CacheSize": "", + "NodeGroupId": "0001" + }, + { + "CacheSize": "", + "NodeGroupId": "0002" + } + ], + "NumNodeGroups": 2, + "Port": 6379, + "PreferredMaintenanceWindow": "mon:09:30-mon:10:30", + "ReplicationGroupDescription": "Redis cluster with 2 shards.", + "ReplicationGroupId": "clusteredredis", + "SnapshotName": "snapshot-2x5", + "SnapshotRetentionLimit": 1, + "SnapshotSource": "manual", + "SnapshotStatus": "creating", + "SnapshotWindow": "12:00-13:00", + "VpcId": "vpc-73c3cd17" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a snapshot of a clustered Redis cluster that has 2 shards, each with a primary and 4 read-replicas.", + "id": "createsnapshot-clustered-redis-1486144841758", + "title": "CreateSnapshot-clustered Redis" + } + ], + "DeleteCacheCluster": [ + { + "input": { + "CacheClusterId": "my-memcached" + }, + "output": { + "CacheCluster": { + "AutoMinorVersionUpgrade": true, + "CacheClusterCreateTime": "2016-12-22T16:05:17.314Z", + "CacheClusterId": "my-memcached", + "CacheClusterStatus": "deleting", + "CacheNodeType": "cache.r3.large", + "CacheParameterGroup": { + "CacheNodeIdsToReboot": [ + + ], + "CacheParameterGroupName": "default.memcached1.4", + "ParameterApplyStatus": "in-sync" + }, + "CacheSecurityGroups": [ + + ], + "CacheSubnetGroupName": "default", + "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", + "ConfigurationEndpoint": { + "Address": "my-memcached2.ameaqx.cfg.use1.cache.amazonaws.com", + "Port": 11211 + }, + "Engine": "memcached", + "EngineVersion": "1.4.24", + "NumCacheNodes": 2, + "PendingModifiedValues": { + }, + "PreferredAvailabilityZone": "Multiple", + "PreferredMaintenanceWindow": "tue:07:30-tue:08:30" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes an Amazon ElastiCache cluster.", + "id": "deletecachecluster-1475010605291", + "title": "DeleteCacheCluster" + } + ], + "DeleteCacheParameterGroup": [ + { + "input": { + "CacheParameterGroupName": "custom-mem1-4" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the Amazon ElastiCache parameter group custom-mem1-4.", + "id": "deletecacheparametergroup-1475010933957", + "title": "DeleteCacheParameterGroup" + } + ], + "DeleteCacheSecurityGroup": [ + { + "input": { + "CacheSecurityGroupName": "my-sec-group" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes a cache security group.", + "id": "deletecachesecuritygroup-1483046967507", + "title": "DeleteCacheSecurityGroup" + } + ], + "DeleteCacheSubnetGroup": [ + { + "input": { + "CacheSubnetGroupName": "my-subnet-group" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the Amazon ElastiCache subnet group my-subnet-group.", + "id": "deletecachesubnetgroup-1475011431325", + "title": "DeleteCacheSubnetGroup" + } + ], + "DeleteReplicationGroup": [ + { + "input": { + "ReplicationGroupId": "my-redis-rg", + "RetainPrimaryCluster": false + }, + "output": { + "ReplicationGroup": { + "AutomaticFailover": "disabled", + "Description": "simple redis cluster", + "PendingModifiedValues": { + }, + "ReplicationGroupId": "my-redis-rg", + "Status": "deleting" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the Amazon ElastiCache replication group my-redis-rg.", + "id": "deletereplicationgroup-1475011641804", + "title": "DeleteReplicationGroup" + } + ], + "DeleteSnapshot": [ + { + "input": { + "SnapshotName": "snapshot-20161212" + }, + "output": { + "Snapshot": { + "AutoMinorVersionUpgrade": true, + "CacheClusterCreateTime": "2016-12-21T22:27:12.543Z", + "CacheClusterId": "my-redis5", + "CacheNodeType": "cache.m3.large", + "CacheParameterGroupName": "default.redis3.2", + "CacheSubnetGroupName": "default", + "Engine": "redis", + "EngineVersion": "3.2.4", + "NodeSnapshots": [ + { + "CacheNodeCreateTime": "2016-12-21T22:27:12.543Z", + "CacheNodeId": "0001", + "CacheSize": "3 MB", + "SnapshotCreateTime": "2016-12-21T22:30:26Z" + } + ], + "NumCacheNodes": 1, + "Port": 6379, + "PreferredAvailabilityZone": "us-east-1c", + "PreferredMaintenanceWindow": "fri:05:30-fri:06:30", + "SnapshotName": "snapshot-20161212", + "SnapshotRetentionLimit": 7, + "SnapshotSource": "manual", + "SnapshotStatus": "deleting", + "SnapshotWindow": "10:00-11:00", + "VpcId": "vpc-91280df6" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the Redis snapshot snapshot-20160822.", + "id": "deletesnapshot-1475011945779", + "title": "DeleteSnapshot" + } + ], + "DescribeCacheClusters": [ + { + "input": { + "CacheClusterId": "my-mem-cluster" + }, + "output": { + "CacheClusters": [ + { + "AutoMinorVersionUpgrade": true, + "CacheClusterCreateTime": "2016-12-21T21:59:43.794Z", + "CacheClusterId": "my-mem-cluster", + "CacheClusterStatus": "available", + "CacheNodeType": "cache.t2.medium", + "CacheParameterGroup": { + "CacheNodeIdsToReboot": [ + + ], + "CacheParameterGroupName": "default.memcached1.4", + "ParameterApplyStatus": "in-sync" + }, + "CacheSecurityGroups": [ + + ], + "CacheSubnetGroupName": "default", + "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", + "ConfigurationEndpoint": { + "Address": "my-mem-cluster.abcdef.cfg.use1.cache.amazonaws.com", + "Port": 11211 + }, + "Engine": "memcached", + "EngineVersion": "1.4.24", + "NumCacheNodes": 2, + "PendingModifiedValues": { + }, + "PreferredAvailabilityZone": "Multiple", + "PreferredMaintenanceWindow": "wed:06:00-wed:07:00" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the details for up to 50 cache clusters.", + "id": "describecacheclusters-1475012269754", + "title": "DescribeCacheClusters" + }, + { + "input": { + "CacheClusterId": "my-mem-cluster", + "ShowCacheNodeInfo": true + }, + "output": { + "CacheClusters": [ + { + "AutoMinorVersionUpgrade": true, + "CacheClusterCreateTime": "2016-12-21T21:59:43.794Z", + "CacheClusterId": "my-mem-cluster", + "CacheClusterStatus": "available", + "CacheNodeType": "cache.t2.medium", + "CacheNodes": [ + { + "CacheNodeCreateTime": "2016-12-21T21:59:43.794Z", + "CacheNodeId": "0001", + "CacheNodeStatus": "available", + "CustomerAvailabilityZone": "us-east-1b", + "Endpoint": { + "Address": "my-mem-cluster.ameaqx.0001.use1.cache.amazonaws.com", + "Port": 11211 + }, + "ParameterGroupStatus": "in-sync" + }, + { + "CacheNodeCreateTime": "2016-12-21T21:59:43.794Z", + "CacheNodeId": "0002", + "CacheNodeStatus": "available", + "CustomerAvailabilityZone": "us-east-1a", + "Endpoint": { + "Address": "my-mem-cluster.ameaqx.0002.use1.cache.amazonaws.com", + "Port": 11211 + }, + "ParameterGroupStatus": "in-sync" + } + ], + "CacheParameterGroup": { + "CacheNodeIdsToReboot": [ + + ], + "CacheParameterGroupName": "default.memcached1.4", + "ParameterApplyStatus": "in-sync" + }, + "CacheSecurityGroups": [ + + ], + "CacheSubnetGroupName": "default", + "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", + "ConfigurationEndpoint": { + "Address": "my-mem-cluster.ameaqx.cfg.use1.cache.amazonaws.com", + "Port": 11211 + }, + "Engine": "memcached", + "EngineVersion": "1.4.24", + "NumCacheNodes": 2, + "PendingModifiedValues": { + }, + "PreferredAvailabilityZone": "Multiple", + "PreferredMaintenanceWindow": "wed:06:00-wed:07:00" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the details for the cache cluster my-mem-cluster.", + "id": "describecacheclusters-1475012269754", + "title": "DescribeCacheClusters" + } + ], + "DescribeCacheEngineVersions": [ + { + "input": { + }, + "output": { + "CacheEngineVersions": [ + { + "CacheEngineDescription": "memcached", + "CacheEngineVersionDescription": "memcached version 1.4.14", + "CacheParameterGroupFamily": "memcached1.4", + "Engine": "memcached", + "EngineVersion": "1.4.14" + }, + { + "CacheEngineDescription": "memcached", + "CacheEngineVersionDescription": "memcached version 1.4.24", + "CacheParameterGroupFamily": "memcached1.4", + "Engine": "memcached", + "EngineVersion": "1.4.24" + }, + { + "CacheEngineDescription": "memcached", + "CacheEngineVersionDescription": "memcached version 1.4.33", + "CacheParameterGroupFamily": "memcached1.4", + "Engine": "memcached", + "EngineVersion": "1.4.33" + }, + { + "CacheEngineDescription": "memcached", + "CacheEngineVersionDescription": "memcached version 1.4.5", + "CacheParameterGroupFamily": "memcached1.4", + "Engine": "memcached", + "EngineVersion": "1.4.5" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.6.13", + "CacheParameterGroupFamily": "redis2.6", + "Engine": "redis", + "EngineVersion": "2.6.13" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.19", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.19" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.21", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.21" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.22 R5", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.22" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.23 R4", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.23" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.24 R3", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.24" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.6", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.6" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 3.2.4", + "CacheParameterGroupFamily": "redis3.2", + "Engine": "redis", + "EngineVersion": "3.2.4" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the details for up to 25 Memcached and Redis cache engine versions.", + "id": "describecacheengineversions-1475012638790", + "title": "DescribeCacheEngineVersions" + }, + { + "input": { + "DefaultOnly": false, + "Engine": "redis", + "MaxRecords": 50 + }, + "output": { + "CacheEngineVersions": [ + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.6.13", + "CacheParameterGroupFamily": "redis2.6", + "Engine": "redis", + "EngineVersion": "2.6.13" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.19", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.19" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.21", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.21" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.22 R5", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.22" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.23 R4", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.23" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.24 R3", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.24" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 2.8.6", + "CacheParameterGroupFamily": "redis2.8", + "Engine": "redis", + "EngineVersion": "2.8.6" + }, + { + "CacheEngineDescription": "Redis", + "CacheEngineVersionDescription": "redis version 3.2.4", + "CacheParameterGroupFamily": "redis3.2", + "Engine": "redis", + "EngineVersion": "3.2.4" + } + ], + "Marker": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the details for up to 50 Redis cache engine versions.", + "id": "describecacheengineversions-1475012638790", + "title": "DescribeCacheEngineVersions" + } + ], + "DescribeCacheParameterGroups": [ + { + "input": { + "CacheParameterGroupName": "custom-mem1-4" + }, + "output": { + "CacheParameterGroups": [ + { + "CacheParameterGroupFamily": "memcached1.4", + "CacheParameterGroupName": "custom-mem1-4", + "Description": "Custom memcache param group" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns a list of cache parameter group descriptions. If a cache parameter group name is specified, the list contains only the descriptions for that group.", + "id": "describecacheparametergroups-1483045457557", + "title": "DescribeCacheParameterGroups" + } + ], + "DescribeCacheParameters": [ + { + "input": { + "CacheParameterGroupName": "custom-redis2-8", + "MaxRecords": 100, + "Source": "user" + }, + "output": { + "Marker": "", + "Parameters": [ + { + "AllowedValues": "yes,no", + "ChangeType": "requires-reboot", + "DataType": "string", + "Description": "Apply rehashing or not.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "activerehashing", + "ParameterValue": "yes", + "Source": "system" + }, + { + "AllowedValues": "always,everysec,no", + "ChangeType": "immediate", + "DataType": "string", + "Description": "fsync policy for AOF persistence", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "appendfsync", + "ParameterValue": "everysec", + "Source": "system" + }, + { + "AllowedValues": "yes,no", + "ChangeType": "immediate", + "DataType": "string", + "Description": "Enable Redis persistence.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "appendonly", + "ParameterValue": "no", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Normal client output buffer hard limit in bytes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-normal-hard-limit", + "ParameterValue": "0", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Normal client output buffer soft limit in bytes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-normal-soft-limit", + "ParameterValue": "0", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Normal client output buffer soft limit in seconds.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-normal-soft-seconds", + "ParameterValue": "0", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Pubsub client output buffer hard limit in bytes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-pubsub-hard-limit", + "ParameterValue": "33554432", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Pubsub client output buffer soft limit in bytes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-pubsub-soft-limit", + "ParameterValue": "8388608", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Pubsub client output buffer soft limit in seconds.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-pubsub-soft-seconds", + "ParameterValue": "60", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Slave client output buffer soft limit in seconds.", + "IsModifiable": false, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-slave-soft-seconds", + "ParameterValue": "60", + "Source": "system" + }, + { + "AllowedValues": "yes,no", + "ChangeType": "immediate", + "DataType": "string", + "Description": "If enabled, clients who attempt to write to a read-only slave will be disconnected. Applicable to 2.8.23 and higher.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.23", + "ParameterName": "close-on-slave-write", + "ParameterValue": "yes", + "Source": "system" + }, + { + "AllowedValues": "1-1200000", + "ChangeType": "requires-reboot", + "DataType": "integer", + "Description": "Set the number of databases.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "databases", + "ParameterValue": "16", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The maximum number of hash entries in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "hash-max-ziplist-entries", + "ParameterValue": "512", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The threshold of biggest hash entries in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "hash-max-ziplist-value", + "ParameterValue": "64", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The maximum number of list entries in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "list-max-ziplist-entries", + "ParameterValue": "512", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The threshold of biggest list entries in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "list-max-ziplist-value", + "ParameterValue": "64", + "Source": "system" + }, + { + "AllowedValues": "5000", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Max execution time of a Lua script in milliseconds. 0 for unlimited execution without warnings.", + "IsModifiable": false, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "lua-time-limit", + "ParameterValue": "5000", + "Source": "system" + }, + { + "AllowedValues": "1-65000", + "ChangeType": "requires-reboot", + "DataType": "integer", + "Description": "The maximum number of Redis clients.", + "IsModifiable": false, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "maxclients", + "ParameterValue": "65000", + "Source": "system" + }, + { + "AllowedValues": "volatile-lru,allkeys-lru,volatile-random,allkeys-random,volatile-ttl,noeviction", + "ChangeType": "immediate", + "DataType": "string", + "Description": "Max memory policy.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "maxmemory-policy", + "ParameterValue": "volatile-lru", + "Source": "system" + }, + { + "AllowedValues": "1-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Max memory samples.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "maxmemory-samples", + "ParameterValue": "3", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Maximum number of seconds within which the master must receive a ping from a slave to take writes. Use this parameter together with min-slaves-to-write to regulate when the master stops accepting writes. Setting this value to 0 means the master always takes writes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "min-slaves-max-lag", + "ParameterValue": "10", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Number of slaves that must be connected in order for master to take writes. Use this parameter together with min-slaves-max-lag to regulate when the master stops accepting writes. Setting this to 0 means the master always takes writes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "min-slaves-to-write", + "ParameterValue": "0", + "Source": "system" + }, + { + "ChangeType": "immediate", + "DataType": "string", + "Description": "The keyspace events for Redis to notify Pub/Sub clients about. By default all notifications are disabled", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "notify-keyspace-events", + "Source": "system" + }, + { + "AllowedValues": "16384-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The replication backlog size in bytes for PSYNC. This is the size of the buffer which accumulates slave data when slave is disconnected for some time, so that when slave reconnects again, only transfer the portion of data which the slave missed. Minimum value is 16K.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "repl-backlog-size", + "ParameterValue": "1048576", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The amount of time in seconds after the master no longer have any slaves connected for the master to free the replication backlog. A value of 0 means to never release the backlog.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "repl-backlog-ttl", + "ParameterValue": "3600", + "Source": "system" + }, + { + "AllowedValues": "11-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The timeout in seconds for bulk transfer I/O during sync and master timeout from the perspective of the slave, and slave timeout from the perspective of the master.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "repl-timeout", + "ParameterValue": "60", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The amount of memory reserved for non-cache memory usage, in bytes. You may want to increase this parameter for nodes with read replicas, AOF enabled, etc, to reduce swap usage.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "reserved-memory", + "ParameterValue": "0", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The limit in the size of the set in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "set-max-intset-entries", + "ParameterValue": "512", + "Source": "system" + }, + { + "AllowedValues": "yes,no", + "ChangeType": "immediate", + "DataType": "string", + "Description": "Configures if chaining of slaves is allowed", + "IsModifiable": false, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "slave-allow-chaining", + "ParameterValue": "no", + "Source": "system" + }, + { + "AllowedValues": "-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The execution time, in microseconds, to exceed in order for the command to get logged. Note that a negative number disables the slow log, while a value of zero forces the logging of every command.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "slowlog-log-slower-than", + "ParameterValue": "10000", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The length of the slow log. There is no limit to this length. Just be aware that it will consume memory. You can reclaim memory used by the slow log with SLOWLOG RESET.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "slowlog-max-len", + "ParameterValue": "128", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "If non-zero, send ACKs every given number of seconds.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "tcp-keepalive", + "ParameterValue": "0", + "Source": "system" + }, + { + "AllowedValues": "0,20-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Close connection if client is idle for a given number of seconds, or never if 0.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "timeout", + "ParameterValue": "0", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The maximum number of sorted set entries in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "zset-max-ziplist-entries", + "ParameterValue": "128", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The threshold of biggest sorted set entries in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "zset-max-ziplist-value", + "ParameterValue": "64", + "Source": "system" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists up to 100 user parameter values for the parameter group custom.redis2.8.", + "id": "describecacheparameters-1475013576900", + "title": "DescribeCacheParameters" + } + ], + "DescribeCacheSecurityGroups": [ + { + "input": { + "CacheSecurityGroupName": "my-sec-group" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns a list of cache security group descriptions. If a cache security group name is specified, the list contains only the description of that group.", + "id": "describecachesecuritygroups-1483047200801", + "title": "DescribeCacheSecurityGroups" + } + ], + "DescribeCacheSubnetGroups": [ + { + "input": { + "MaxRecords": 25 + }, + "output": { + "CacheSubnetGroups": [ + { + "CacheSubnetGroupDescription": "Default CacheSubnetGroup", + "CacheSubnetGroupName": "default", + "Subnets": [ + { + "SubnetAvailabilityZone": { + "Name": "us-east-1a" + }, + "SubnetIdentifier": "subnet-1a2b3c4d" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1c" + }, + "SubnetIdentifier": "subnet-a1b2c3d4" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1e" + }, + "SubnetIdentifier": "subnet-abcd1234" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1b" + }, + "SubnetIdentifier": "subnet-1234abcd" + } + ], + "VpcId": "vpc-91280df6" + } + ], + "Marker": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes up to 25 cache subnet groups.", + "id": "describecachesubnetgroups-1482439214064", + "title": "DescribeCacheSubnetGroups" + } + ], + "DescribeEngineDefaultParameters": [ + { + "input": { + "CacheParameterGroupFamily": "redis2.8", + "MaxRecords": 25 + }, + "output": { + "EngineDefaults": { + "CacheNodeTypeSpecificParameters": [ + { + "AllowedValues": "0-", + "CacheNodeTypeSpecificValues": [ + { + "CacheNodeType": "cache.c1.xlarge", + "Value": "650117120" + }, + { + "CacheNodeType": "cache.m1.large", + "Value": "702545920" + }, + { + "CacheNodeType": "cache.m1.medium", + "Value": "309329920" + }, + { + "CacheNodeType": "cache.m1.small", + "Value": "94371840" + }, + { + "CacheNodeType": "cache.m1.xlarge", + "Value": "1488977920" + }, + { + "CacheNodeType": "cache.m2.2xlarge", + "Value": "3502243840" + }, + { + "CacheNodeType": "cache.m2.4xlarge", + "Value": "7088373760" + }, + { + "CacheNodeType": "cache.m2.xlarge", + "Value": "1709178880" + }, + { + "CacheNodeType": "cache.m3.2xlarge", + "Value": "2998927360" + }, + { + "CacheNodeType": "cache.m3.large", + "Value": "650117120" + }, + { + "CacheNodeType": "cache.m3.medium", + "Value": "309329920" + }, + { + "CacheNodeType": "cache.m3.xlarge", + "Value": "1426063360" + }, + { + "CacheNodeType": "cache.m4.10xlarge", + "Value": "16604761424" + }, + { + "CacheNodeType": "cache.m4.2xlarge", + "Value": "3188912636" + }, + { + "CacheNodeType": "cache.m4.4xlarge", + "Value": "6525729063" + }, + { + "CacheNodeType": "cache.m4.large", + "Value": "689259315" + }, + { + "CacheNodeType": "cache.m4.xlarge", + "Value": "1532850176" + }, + { + "CacheNodeType": "cache.r3.2xlarge", + "Value": "6081740800" + }, + { + "CacheNodeType": "cache.r3.4xlarge", + "Value": "12268339200" + }, + { + "CacheNodeType": "cache.r3.8xlarge", + "Value": "24536678400" + }, + { + "CacheNodeType": "cache.r3.large", + "Value": "1468006400" + }, + { + "CacheNodeType": "cache.r3.xlarge", + "Value": "3040870400" + }, + { + "CacheNodeType": "cache.t1.micro", + "Value": "14260633" + }, + { + "CacheNodeType": "cache.t2.medium", + "Value": "346134937" + }, + { + "CacheNodeType": "cache.t2.micro", + "Value": "58195968" + }, + { + "CacheNodeType": "cache.t2.small", + "Value": "166513868" + } + ], + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Slave client output buffer hard limit in bytes.", + "IsModifiable": false, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-slave-hard-limit", + "Source": "system" + }, + { + "AllowedValues": "0-", + "CacheNodeTypeSpecificValues": [ + { + "CacheNodeType": "cache.c1.xlarge", + "Value": "650117120" + }, + { + "CacheNodeType": "cache.m1.large", + "Value": "702545920" + }, + { + "CacheNodeType": "cache.m1.medium", + "Value": "309329920" + }, + { + "CacheNodeType": "cache.m1.small", + "Value": "94371840" + }, + { + "CacheNodeType": "cache.m1.xlarge", + "Value": "1488977920" + }, + { + "CacheNodeType": "cache.m2.2xlarge", + "Value": "3502243840" + }, + { + "CacheNodeType": "cache.m2.4xlarge", + "Value": "7088373760" + }, + { + "CacheNodeType": "cache.m2.xlarge", + "Value": "1709178880" + }, + { + "CacheNodeType": "cache.m3.2xlarge", + "Value": "2998927360" + }, + { + "CacheNodeType": "cache.m3.large", + "Value": "650117120" + }, + { + "CacheNodeType": "cache.m3.medium", + "Value": "309329920" + }, + { + "CacheNodeType": "cache.m3.xlarge", + "Value": "1426063360" + }, + { + "CacheNodeType": "cache.m4.10xlarge", + "Value": "16604761424" + }, + { + "CacheNodeType": "cache.m4.2xlarge", + "Value": "3188912636" + }, + { + "CacheNodeType": "cache.m4.4xlarge", + "Value": "6525729063" + }, + { + "CacheNodeType": "cache.m4.large", + "Value": "689259315" + }, + { + "CacheNodeType": "cache.m4.xlarge", + "Value": "1532850176" + }, + { + "CacheNodeType": "cache.r3.2xlarge", + "Value": "6081740800" + }, + { + "CacheNodeType": "cache.r3.4xlarge", + "Value": "12268339200" + }, + { + "CacheNodeType": "cache.r3.8xlarge", + "Value": "24536678400" + }, + { + "CacheNodeType": "cache.r3.large", + "Value": "1468006400" + }, + { + "CacheNodeType": "cache.r3.xlarge", + "Value": "3040870400" + }, + { + "CacheNodeType": "cache.t1.micro", + "Value": "14260633" + }, + { + "CacheNodeType": "cache.t2.medium", + "Value": "346134937" + }, + { + "CacheNodeType": "cache.t2.micro", + "Value": "58195968" + }, + { + "CacheNodeType": "cache.t2.small", + "Value": "166513868" + } + ], + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Slave client output buffer soft limit in bytes.", + "IsModifiable": false, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-slave-soft-limit", + "Source": "system" + }, + { + "AllowedValues": "0-", + "CacheNodeTypeSpecificValues": [ + { + "CacheNodeType": "cache.c1.xlarge", + "Value": "6501171200" + }, + { + "CacheNodeType": "cache.m1.large", + "Value": "7025459200" + }, + { + "CacheNodeType": "cache.m1.medium", + "Value": "3093299200" + }, + { + "CacheNodeType": "cache.m1.small", + "Value": "943718400" + }, + { + "CacheNodeType": "cache.m1.xlarge", + "Value": "14889779200" + }, + { + "CacheNodeType": "cache.m2.2xlarge", + "Value": "35022438400" + }, + { + "CacheNodeType": "cache.m2.4xlarge", + "Value": "70883737600" + }, + { + "CacheNodeType": "cache.m2.xlarge", + "Value": "17091788800" + }, + { + "CacheNodeType": "cache.m3.2xlarge", + "Value": "29989273600" + }, + { + "CacheNodeType": "cache.m3.large", + "Value": "6501171200" + }, + { + "CacheNodeType": "cache.m3.medium", + "Value": "2988441600" + }, + { + "CacheNodeType": "cache.m3.xlarge", + "Value": "14260633600" + }, + { + "CacheNodeType": "cache.m4.10xlarge", + "Value": "166047614239" + }, + { + "CacheNodeType": "cache.m4.2xlarge", + "Value": "31889126359" + }, + { + "CacheNodeType": "cache.m4.4xlarge", + "Value": "65257290629" + }, + { + "CacheNodeType": "cache.m4.large", + "Value": "6892593152" + }, + { + "CacheNodeType": "cache.m4.xlarge", + "Value": "15328501760" + }, + { + "CacheNodeType": "cache.r3.2xlarge", + "Value": "62495129600" + }, + { + "CacheNodeType": "cache.r3.4xlarge", + "Value": "126458265600" + }, + { + "CacheNodeType": "cache.r3.8xlarge", + "Value": "254384537600" + }, + { + "CacheNodeType": "cache.r3.large", + "Value": "14470348800" + }, + { + "CacheNodeType": "cache.r3.xlarge", + "Value": "30513561600" + }, + { + "CacheNodeType": "cache.t1.micro", + "Value": "142606336" + }, + { + "CacheNodeType": "cache.t2.medium", + "Value": "3461349376" + }, + { + "CacheNodeType": "cache.t2.micro", + "Value": "581959680" + }, + { + "CacheNodeType": "cache.t2.small", + "Value": "1665138688" + } + ], + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The maximum configurable amount of memory to use to store items, in bytes.", + "IsModifiable": false, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "maxmemory", + "Source": "system" + } + ], + "CacheParameterGroupFamily": "redis2.8", + "Marker": "bWluLXNsYXZlcy10by13cml0ZQ==", + "Parameters": [ + { + "AllowedValues": "yes,no", + "ChangeType": "requires-reboot", + "DataType": "string", + "Description": "Apply rehashing or not.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "activerehashing", + "ParameterValue": "yes", + "Source": "system" + }, + { + "AllowedValues": "always,everysec,no", + "ChangeType": "immediate", + "DataType": "string", + "Description": "fsync policy for AOF persistence", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "appendfsync", + "ParameterValue": "everysec", + "Source": "system" + }, + { + "AllowedValues": "yes,no", + "ChangeType": "immediate", + "DataType": "string", + "Description": "Enable Redis persistence.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "appendonly", + "ParameterValue": "no", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Normal client output buffer hard limit in bytes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-normal-hard-limit", + "ParameterValue": "0", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Normal client output buffer soft limit in bytes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-normal-soft-limit", + "ParameterValue": "0", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Normal client output buffer soft limit in seconds.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-normal-soft-seconds", + "ParameterValue": "0", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Pubsub client output buffer hard limit in bytes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-pubsub-hard-limit", + "ParameterValue": "33554432", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Pubsub client output buffer soft limit in bytes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-pubsub-soft-limit", + "ParameterValue": "8388608", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Pubsub client output buffer soft limit in seconds.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-pubsub-soft-seconds", + "ParameterValue": "60", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Slave client output buffer soft limit in seconds.", + "IsModifiable": false, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "client-output-buffer-limit-slave-soft-seconds", + "ParameterValue": "60", + "Source": "system" + }, + { + "AllowedValues": "yes,no", + "ChangeType": "immediate", + "DataType": "string", + "Description": "If enabled, clients who attempt to write to a read-only slave will be disconnected. Applicable to 2.8.23 and higher.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.23", + "ParameterName": "close-on-slave-write", + "ParameterValue": "yes", + "Source": "system" + }, + { + "AllowedValues": "1-1200000", + "ChangeType": "requires-reboot", + "DataType": "integer", + "Description": "Set the number of databases.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "databases", + "ParameterValue": "16", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The maximum number of hash entries in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "hash-max-ziplist-entries", + "ParameterValue": "512", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The threshold of biggest hash entries in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "hash-max-ziplist-value", + "ParameterValue": "64", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The maximum number of list entries in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "list-max-ziplist-entries", + "ParameterValue": "512", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "The threshold of biggest list entries in order for the dataset to be compressed.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "list-max-ziplist-value", + "ParameterValue": "64", + "Source": "system" + }, + { + "AllowedValues": "5000", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Max execution time of a Lua script in milliseconds. 0 for unlimited execution without warnings.", + "IsModifiable": false, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "lua-time-limit", + "ParameterValue": "5000", + "Source": "system" + }, + { + "AllowedValues": "1-65000", + "ChangeType": "requires-reboot", + "DataType": "integer", + "Description": "The maximum number of Redis clients.", + "IsModifiable": false, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "maxclients", + "ParameterValue": "65000", + "Source": "system" + }, + { + "AllowedValues": "volatile-lru,allkeys-lru,volatile-random,allkeys-random,volatile-ttl,noeviction", + "ChangeType": "immediate", + "DataType": "string", + "Description": "Max memory policy.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "maxmemory-policy", + "ParameterValue": "volatile-lru", + "Source": "system" + }, + { + "AllowedValues": "1-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Max memory samples.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "maxmemory-samples", + "ParameterValue": "3", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Maximum number of seconds within which the master must receive a ping from a slave to take writes. Use this parameter together with min-slaves-to-write to regulate when the master stops accepting writes. Setting this value to 0 means the master always takes writes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "min-slaves-max-lag", + "ParameterValue": "10", + "Source": "system" + }, + { + "AllowedValues": "0-", + "ChangeType": "immediate", + "DataType": "integer", + "Description": "Number of slaves that must be connected in order for master to take writes. Use this parameter together with min-slaves-max-lag to regulate when the master stops accepting writes. Setting this to 0 means the master always takes writes.", + "IsModifiable": true, + "MinimumEngineVersion": "2.8.6", + "ParameterName": "min-slaves-to-write", + "ParameterValue": "0", + "Source": "system" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns the default engine and system parameter information for the specified cache engine.", + "id": "describeenginedefaultparameters-1481738057686", + "title": "DescribeEngineDefaultParameters" + } + ], + "DescribeEvents": [ + { + "input": { + "Duration": 360, + "SourceType": "cache-cluster" + }, + "output": { + "Events": [ + { + "Date": "2016-12-22T16:27:56.088Z", + "Message": "Added cache node 0001 in availability zone us-east-1e", + "SourceIdentifier": "redis-cluster", + "SourceType": "cache-cluster" + }, + { + "Date": "2016-12-22T16:27:56.078Z", + "Message": "Cache cluster created", + "SourceIdentifier": "redis-cluster", + "SourceType": "cache-cluster" + }, + { + "Date": "2016-12-22T16:05:17.326Z", + "Message": "Added cache node 0002 in availability zone us-east-1c", + "SourceIdentifier": "my-memcached2", + "SourceType": "cache-cluster" + }, + { + "Date": "2016-12-22T16:05:17.323Z", + "Message": "Added cache node 0001 in availability zone us-east-1e", + "SourceIdentifier": "my-memcached2", + "SourceType": "cache-cluster" + }, + { + "Date": "2016-12-22T16:05:17.314Z", + "Message": "Cache cluster created", + "SourceIdentifier": "my-memcached2", + "SourceType": "cache-cluster" + } + ], + "Marker": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes all the cache-cluster events for the past 120 minutes.", + "id": "describeevents-1481843894757", + "title": "DescribeEvents" + }, + { + "input": { + "StartTime": "2016-12-22T15:00:00.000Z" + }, + "output": { + "Events": [ + { + "Date": "2016-12-22T21:35:46.674Z", + "Message": "Snapshot succeeded for snapshot with ID 'cr-bkup' of replication group with ID 'clustered-redis'", + "SourceIdentifier": "clustered-redis-0001-001", + "SourceType": "cache-cluster" + }, + { + "Date": "2016-12-22T16:27:56.088Z", + "Message": "Added cache node 0001 in availability zone us-east-1e", + "SourceIdentifier": "redis-cluster", + "SourceType": "cache-cluster" + }, + { + "Date": "2016-12-22T16:27:56.078Z", + "Message": "Cache cluster created", + "SourceIdentifier": "redis-cluster", + "SourceType": "cache-cluster" + }, + { + "Date": "2016-12-22T16:05:17.326Z", + "Message": "Added cache node 0002 in availability zone us-east-1c", + "SourceIdentifier": "my-memcached2", + "SourceType": "cache-cluster" + }, + { + "Date": "2016-12-22T16:05:17.323Z", + "Message": "Added cache node 0001 in availability zone us-east-1e", + "SourceIdentifier": "my-memcached2", + "SourceType": "cache-cluster" + }, + { + "Date": "2016-12-22T16:05:17.314Z", + "Message": "Cache cluster created", + "SourceIdentifier": "my-memcached2", + "SourceType": "cache-cluster" + } + ], + "Marker": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes all the replication-group events from 3:00P to 5:00P on November 11, 2016.", + "id": "describeevents-1481843894757", + "title": "DescribeEvents" + } + ], + "DescribeReplicationGroups": [ + { + "input": { + }, + "output": { + "Marker": "", + "ReplicationGroups": [ + { + "AutomaticFailover": "enabled", + "Description": "Test cluster", + "MemberClusters": [ + "clustered-redis-0001-001", + "clustered-redis-0001-002", + "clustered-redis-0002-001", + "clustered-redis-0002-002" + ], + "NodeGroups": [ + { + "NodeGroupId": "0001", + "NodeGroupMembers": [ + { + "CacheClusterId": "clustered-redis-0001-001", + "CacheNodeId": "0001", + "PreferredAvailabilityZone": "us-east-1e" + }, + { + "CacheClusterId": "clustered-redis-0001-002", + "CacheNodeId": "0001", + "PreferredAvailabilityZone": "us-east-1c" + } + ], + "Status": "available" + }, + { + "NodeGroupId": "0002", + "NodeGroupMembers": [ + { + "CacheClusterId": "clustered-redis-0002-001", + "CacheNodeId": "0001", + "PreferredAvailabilityZone": "us-east-1c" + }, + { + "CacheClusterId": "clustered-redis-0002-002", + "CacheNodeId": "0001", + "PreferredAvailabilityZone": "us-east-1b" + } + ], + "Status": "available" + } + ], + "PendingModifiedValues": { + }, + "ReplicationGroupId": "clustered-redis", + "Status": "available" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about the replication group myreplgroup.", + "id": "describereplicationgroups-1481742639427", + "title": "DescribeReplicationGroups" + } + ], + "DescribeReservedCacheNodes": [ + { + "input": { + "MaxRecords": 25 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about reserved cache nodes for this account, or about a specified reserved cache node. If the account has no reserved cache nodes, the operation returns an empty list, as shown here.", + "id": "describereservedcachenodes-1481742348045", + "title": "DescribeReservedCacheNodes" + } + ], + "DescribeReservedCacheNodesOfferings": [ + { + "input": { + "MaxRecords": 20 + }, + "output": { + "Marker": "1ef01f5b-433f-94ff-a530-61a56bfc8e7a", + "ReservedCacheNodesOfferings": [ + { + "CacheNodeType": "cache.m1.small", + "Duration": 94608000, + "FixedPrice": 157.0, + "OfferingType": "Medium Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + + ], + "ReservedCacheNodesOfferingId": "0167633d-37f6-4222-b872-b1f22eb79ba4", + "UsagePrice": 0.017 + }, + { + "CacheNodeType": "cache.m4.xlarge", + "Duration": 94608000, + "FixedPrice": 1248.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "redis", + "RecurringCharges": [ + { + "RecurringChargeAmount": 0.077, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "02c04e13-baca-4e71-9ceb-620eed94827d", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.m2.4xlarge", + "Duration": 94608000, + "FixedPrice": 2381.0, + "OfferingType": "Medium Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + + ], + "ReservedCacheNodesOfferingId": "02e1755e-76e8-48e3-8d82-820a5726a458", + "UsagePrice": 0.276 + }, + { + "CacheNodeType": "cache.m1.small", + "Duration": 94608000, + "FixedPrice": 188.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "redis", + "RecurringCharges": [ + { + "RecurringChargeAmount": 0.013, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "03315215-7b87-421a-a3dd-785021e4113f", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.m4.10xlarge", + "Duration": 31536000, + "FixedPrice": 6158.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "redis", + "RecurringCharges": [ + { + "RecurringChargeAmount": 1.125, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "05ffbb44-2ace-4476-a2a5-8ec99f866fb3", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.m1.small", + "Duration": 31536000, + "FixedPrice": 101.0, + "OfferingType": "Medium Utilization", + "ProductDescription": "redis", + "RecurringCharges": [ + + ], + "ReservedCacheNodesOfferingId": "065c71ae-4a4e-4f1e-bebf-37525f4c6cb2", + "UsagePrice": 0.023 + }, + { + "CacheNodeType": "cache.m1.medium", + "Duration": 94608000, + "FixedPrice": 314.0, + "OfferingType": "Medium Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + + ], + "ReservedCacheNodesOfferingId": "06774b12-7f5e-48c1-907a-f286c63f327d", + "UsagePrice": 0.034 + }, + { + "CacheNodeType": "cache.m2.xlarge", + "Duration": 31536000, + "FixedPrice": 163.0, + "OfferingType": "Light Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + + ], + "ReservedCacheNodesOfferingId": "0924ac6b-847f-4761-ba6b-4290b2adf719", + "UsagePrice": 0.137 + }, + { + "CacheNodeType": "cache.m2.xlarge", + "Duration": 94608000, + "FixedPrice": 719.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "redis", + "RecurringCharges": [ + { + "RecurringChargeAmount": 0.049, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "09eeb126-69b6-4d3f-8f94-ca3510629f53", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.r3.2xlarge", + "Duration": 94608000, + "FixedPrice": 4132.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "redis", + "RecurringCharges": [ + { + "RecurringChargeAmount": 0.182, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "0a516ad8-557f-4310-9dd0-2448c2ff4d62", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.c1.xlarge", + "Duration": 94608000, + "FixedPrice": 875.0, + "OfferingType": "Light Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + + ], + "ReservedCacheNodesOfferingId": "0b0c1cc5-2177-4150-95d7-c67ec34dcb19", + "UsagePrice": 0.363 + }, + { + "CacheNodeType": "cache.m4.10xlarge", + "Duration": 94608000, + "FixedPrice": 12483.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + { + "RecurringChargeAmount": 0.76, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "0c2b139b-1cff-43d0-8fba-0c753f9b1950", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.c1.xlarge", + "Duration": 31536000, + "FixedPrice": 1620.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + { + "RecurringChargeAmount": 0.207, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "0c52115b-38cb-47a2-8dbc-e02e40b6a13f", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.m2.4xlarge", + "Duration": 94608000, + "FixedPrice": 2381.0, + "OfferingType": "Medium Utilization", + "ProductDescription": "redis", + "RecurringCharges": [ + + ], + "ReservedCacheNodesOfferingId": "12fcb19c-5416-4e1d-934f-28f1e2cb8599", + "UsagePrice": 0.276 + }, + { + "CacheNodeType": "cache.m4.xlarge", + "Duration": 31536000, + "FixedPrice": 616.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + { + "RecurringChargeAmount": 0.112, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "13af20ad-914d-4d8b-9763-fa2e565f3549", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.r3.8xlarge", + "Duration": 94608000, + "FixedPrice": 16528.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + { + "RecurringChargeAmount": 0.729, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "14da3d3f-b526-4dbf-b09b-355578b2a576", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.m1.medium", + "Duration": 94608000, + "FixedPrice": 140.0, + "OfferingType": "Light Utilization", + "ProductDescription": "redis", + "RecurringCharges": [ + + ], + "ReservedCacheNodesOfferingId": "15d7018c-71fb-4717-8409-4bdcdca18da7", + "UsagePrice": 0.052 + }, + { + "CacheNodeType": "cache.m4.4xlarge", + "Duration": 94608000, + "FixedPrice": 4993.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + { + "RecurringChargeAmount": 0.304, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "1ae7ec5f-a76e-49b6-822b-629b1768a13a", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.m3.2xlarge", + "Duration": 31536000, + "FixedPrice": 1772.0, + "OfferingType": "Heavy Utilization", + "ProductDescription": "redis", + "RecurringCharges": [ + { + "RecurringChargeAmount": 0.25, + "RecurringChargeFrequency": "Hourly" + } + ], + "ReservedCacheNodesOfferingId": "1d31242b-3925-48d1-b882-ce03204e6013", + "UsagePrice": 0.0 + }, + { + "CacheNodeType": "cache.t1.micro", + "Duration": 31536000, + "FixedPrice": 54.0, + "OfferingType": "Medium Utilization", + "ProductDescription": "memcached", + "RecurringCharges": [ + + ], + "ReservedCacheNodesOfferingId": "1ef01f5b-94ff-433f-a530-61a56bfc8e7a", + "UsagePrice": 0.008 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists available reserved cache node offerings.", + "id": "describereseredcachenodeofferings-1481742869998", + "title": "DescribeReseredCacheNodeOfferings" + }, + { + "input": { + "CacheNodeType": "cache.r3.large", + "Duration": "3", + "MaxRecords": 25, + "OfferingType": "Light Utilization", + "ReservedCacheNodesOfferingId": "" + }, + "output": { + "Marker": "", + "ReservedCacheNodesOfferings": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists available reserved cache node offerings for cache.r3.large nodes with a 3 year commitment.", + "id": "describereseredcachenodeofferings-1481742869998", + "title": "DescribeReseredCacheNodeOfferings" + }, + { + "input": { + "CacheNodeType": "", + "Duration": "", + "Marker": "", + "MaxRecords": 25, + "OfferingType": "", + "ProductDescription": "", + "ReservedCacheNodesOfferingId": "438012d3-4052-4cc7-b2e3-8d3372e0e706" + }, + "output": { + "Marker": "", + "ReservedCacheNodesOfferings": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists available reserved cache node offerings.", + "id": "describereseredcachenodeofferings-1481742869998", + "title": "DescribeReseredCacheNodeOfferings" + } + ], + "DescribeSnapshots": [ + { + "input": { + "SnapshotName": "snapshot-20161212" + }, + "output": { + "Marker": "", + "Snapshots": [ + { + "AutoMinorVersionUpgrade": true, + "CacheClusterCreateTime": "2016-12-21T22:27:12.543Z", + "CacheClusterId": "my-redis5", + "CacheNodeType": "cache.m3.large", + "CacheParameterGroupName": "default.redis3.2", + "CacheSubnetGroupName": "default", + "Engine": "redis", + "EngineVersion": "3.2.4", + "NodeSnapshots": [ + { + "CacheNodeCreateTime": "2016-12-21T22:27:12.543Z", + "CacheNodeId": "0001", + "CacheSize": "3 MB", + "SnapshotCreateTime": "2016-12-21T22:30:26Z" + } + ], + "NumCacheNodes": 1, + "Port": 6379, + "PreferredAvailabilityZone": "us-east-1c", + "PreferredMaintenanceWindow": "fri:05:30-fri:06:30", + "SnapshotName": "snapshot-20161212", + "SnapshotRetentionLimit": 7, + "SnapshotSource": "manual", + "SnapshotStatus": "available", + "SnapshotWindow": "10:00-11:00", + "VpcId": "vpc-91280df6" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about the snapshot mysnapshot. By default.", + "id": "describesnapshots-1481743399584", + "title": "DescribeSnapshots" + } + ], + "ListAllowedNodeTypeModifications": [ + { + "input": { + "ReplicationGroupId": "myreplgroup" + }, + "output": { + "ScaleUpModifications": [ + "cache.m4.10xlarge", + "cache.m4.2xlarge", + "cache.m4.4xlarge", + "cache.m4.xlarge", + "cache.r3.2xlarge", + "cache.r3.4xlarge", + "cache.r3.8xlarge", + "cache.r3.xlarge" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists all available node types that you can scale your Redis cluster's or replication group's current node type up to.", + "id": "listallowednodetypemodifications-1481748494872", + "title": "ListAllowedNodeTypeModifications" + }, + { + "input": { + "CacheClusterId": "mycluster" + }, + "output": { + "ScaleUpModifications": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists all available node types that you can scale your Redis cluster's or replication group's current node type up to.", + "id": "listallowednodetypemodifications-1481748494872", + "title": "ListAllowedNodeTypeModifications" + } + ], + "ListTagsForResource": [ + { + "input": { + "ResourceName": "arn:aws:elasticache:us-west-2::cluster:mycluster" + }, + "output": { + "TagList": [ + { + "Key": "APIVersion", + "Value": "20150202" + }, + { + "Key": "Service", + "Value": "ElastiCache" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists all cost allocation tags currently on the named resource. A cost allocation tag is a key-value pair where the key is case-sensitive and the value is optional. You can use cost allocation tags to categorize and track your AWS costs.", + "id": "listtagsforresource-1481748784584", + "title": "ListTagsForResource" + } + ], + "ModifyCacheCluster": [ + { + "input": { + "ApplyImmediately": true, + "CacheClusterId": "redis-cluster", + "SnapshotRetentionLimit": 14 + }, + "output": { + "CacheCluster": { + "AutoMinorVersionUpgrade": true, + "CacheClusterCreateTime": "2016-12-22T16:27:56.078Z", + "CacheClusterId": "redis-cluster", + "CacheClusterStatus": "available", + "CacheNodeType": "cache.r3.large", + "CacheParameterGroup": { + "CacheNodeIdsToReboot": [ + + ], + "CacheParameterGroupName": "default.redis3.2", + "ParameterApplyStatus": "in-sync" + }, + "CacheSecurityGroups": [ + + ], + "CacheSubnetGroupName": "default", + "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", + "Engine": "redis", + "EngineVersion": "3.2.4", + "NumCacheNodes": 1, + "PendingModifiedValues": { + }, + "PreferredAvailabilityZone": "us-east-1e", + "PreferredMaintenanceWindow": "fri:09:00-fri:10:00", + "SnapshotRetentionLimit": 14, + "SnapshotWindow": "07:00-08:00" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Copies a snapshot to a specified name.", + "id": "modifycachecluster-1482962725919", + "title": "ModifyCacheCluster" + } + ], + "ModifyCacheParameterGroup": [ + { + "input": { + "CacheParameterGroupName": "custom-mem1-4", + "ParameterNameValues": [ + { + "ParameterName": "binding_protocol", + "ParameterValue": "ascii" + }, + { + "ParameterName": "chunk_size", + "ParameterValue": "96" + } + ] + }, + "output": { + "CacheParameterGroupName": "custom-mem1-4" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Modifies one or more parameter values in the specified parameter group. You cannot modify any default parameter group.", + "id": "modifycacheparametergroup-1482966746787", + "title": "ModifyCacheParameterGroup" + } + ], + "ModifyCacheSubnetGroup": [ + { + "input": { + "CacheSubnetGroupName": "my-sn-grp", + "SubnetIds": [ + "subnet-bcde2345" + ] + }, + "output": { + "CacheSubnetGroup": { + "CacheSubnetGroupDescription": "My subnet group.", + "CacheSubnetGroupName": "my-sn-grp", + "Subnets": [ + { + "SubnetAvailabilityZone": { + "Name": "us-east-1c" + }, + "SubnetIdentifier": "subnet-a1b2c3d4" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1e" + }, + "SubnetIdentifier": "subnet-1a2b3c4d" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1e" + }, + "SubnetIdentifier": "subnet-bcde2345" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1c" + }, + "SubnetIdentifier": "subnet-1234abcd" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-east-1b" + }, + "SubnetIdentifier": "subnet-abcd1234" + } + ], + "VpcId": "vpc-91280df6" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Modifies an existing ElastiCache subnet group.", + "id": "modifycachesubnetgroup-1483043446226", + "title": "ModifyCacheSubnetGroup" + } + ], + "ModifyReplicationGroup": [ + { + "input": { + "ApplyImmediately": true, + "ReplicationGroupDescription": "Modified replication group", + "ReplicationGroupId": "my-redis-rg", + "SnapshotRetentionLimit": 30, + "SnapshottingClusterId": "my-redis-rg-001" + }, + "output": { + "ReplicationGroup": { + "AutomaticFailover": "enabled", + "Description": "Modified replication group", + "MemberClusters": [ + "my-redis-rg-001", + "my-redis-rg-002", + "my-redis-rg-003" + ], + "NodeGroups": [ + { + "NodeGroupId": "0001", + "NodeGroupMembers": [ + { + "CacheClusterId": "my-redis-rg-001", + "CacheNodeId": "0001", + "CurrentRole": "primary", + "PreferredAvailabilityZone": "us-east-1b", + "ReadEndpoint": { + "Address": "my-redis-rg-001.abcdef.0001.use1.cache.amazonaws.com", + "Port": 6379 + } + }, + { + "CacheClusterId": "my-redis-rg-002", + "CacheNodeId": "0001", + "CurrentRole": "replica", + "PreferredAvailabilityZone": "us-east-1a", + "ReadEndpoint": { + "Address": "my-redis-rg-002.abcdef.0001.use1.cache.amazonaws.com", + "Port": 6379 + } + }, + { + "CacheClusterId": "my-redis-rg-003", + "CacheNodeId": "0001", + "CurrentRole": "replica", + "PreferredAvailabilityZone": "us-east-1c", + "ReadEndpoint": { + "Address": "my-redis-rg-003.abcdef.0001.use1.cache.amazonaws.com", + "Port": 6379 + } + } + ], + "PrimaryEndpoint": { + "Address": "my-redis-rg.abcdef.ng.0001.use1.cache.amazonaws.com", + "Port": 6379 + }, + "Status": "available" + } + ], + "PendingModifiedValues": { + }, + "ReplicationGroupId": "my-redis-rg", + "SnapshottingClusterId": "my-redis-rg-002", + "Status": "available" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "modifyreplicationgroup-1483039689581", + "title": "ModifyReplicationGroup" + } + ], + "PurchaseReservedCacheNodesOffering": [ + { + "input": { + "ReservedCacheNodesOfferingId": "1ef01f5b-94ff-433f-a530-61a56bfc8e7a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Allows you to purchase a reserved cache node offering.", + "id": "purchasereservedcachenodesofferings-1483040798484", + "title": "PurchaseReservedCacheNodesOfferings" + } + ], + "RebootCacheCluster": [ + { + "input": { + "CacheClusterId": "custom-mem1-4 ", + "CacheNodeIdsToReboot": [ + "0001", + "0002" + ] + }, + "output": { + "CacheCluster": { + "AutoMinorVersionUpgrade": true, + "CacheClusterCreateTime": "2016-12-21T21:59:43.794Z", + "CacheClusterId": "my-mem-cluster", + "CacheClusterStatus": "rebooting cache cluster nodes", + "CacheNodeType": "cache.t2.medium", + "CacheParameterGroup": { + "CacheNodeIdsToReboot": [ + + ], + "CacheParameterGroupName": "default.memcached1.4", + "ParameterApplyStatus": "in-sync" + }, + "CacheSecurityGroups": [ + + ], + "CacheSubnetGroupName": "default", + "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", + "ConfigurationEndpoint": { + "Address": "my-mem-cluster.abcdef.cfg.use1.cache.amazonaws.com", + "Port": 11211 + }, + "Engine": "memcached", + "EngineVersion": "1.4.24", + "NumCacheNodes": 2, + "PendingModifiedValues": { + }, + "PreferredAvailabilityZone": "Multiple", + "PreferredMaintenanceWindow": "wed:06:00-wed:07:00" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Reboots the specified nodes in the names cluster.", + "id": "rebootcachecluster-1482969019505", + "title": "RebootCacheCluster" + } + ], + "RemoveTagsFromResource": [ + { + "input": { + "ResourceName": "arn:aws:elasticache:us-east-1:1234567890:cluster:my-mem-cluster", + "TagKeys": [ + "A", + "C", + "E" + ] + }, + "output": { + "TagList": [ + { + "Key": "B", + "Value": "Banana" + }, + { + "Key": "D", + "Value": "Dog" + }, + { + "Key": "F", + "Value": "Fox" + }, + { + "Key": "I", + "Value": "" + }, + { + "Key": "K", + "Value": "Kite" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Removes tags identified by a list of tag keys from the list of tags on the specified resource.", + "id": "removetagsfromresource-1483037920947", + "title": "RemoveTagsFromResource" + } + ], + "ResetCacheParameterGroup": [ + { + "input": { + "CacheParameterGroupName": "custom-mem1-4", + "ResetAllParameters": true + }, + "output": { + "CacheParameterGroupName": "custom-mem1-4" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Modifies the parameters of a cache parameter group to the engine or system default value.", + "id": "resetcacheparametergroup-1483038334014", + "title": "ResetCacheParameterGroup" + } + ], + "RevokeCacheSecurityGroupIngress": [ + { + "input": { + "CacheSecurityGroupName": "my-sec-grp", + "EC2SecurityGroupName": "my-ec2-sec-grp", + "EC2SecurityGroupOwnerId": "1234567890" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns a list of cache security group descriptions. If a cache security group name is specified, the list contains only the description of that group.", + "id": "describecachesecuritygroups-1483047200801", + "title": "DescribeCacheSecurityGroups" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/paginators-1.json new file mode 100644 index 00000000..12368b96 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/paginators-1.json @@ -0,0 +1,118 @@ +{ + "pagination": { + "DescribeCacheClusters": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "CacheClusters" + }, + "DescribeCacheEngineVersions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "CacheEngineVersions" + }, + "DescribeCacheParameterGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "CacheParameterGroups" + }, + "DescribeCacheParameters": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Parameters" + }, + "DescribeCacheSecurityGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "CacheSecurityGroups" + }, + "DescribeCacheSubnetGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "CacheSubnetGroups" + }, + "DescribeEngineDefaultParameters": { + "input_token": "Marker", + "output_token": "EngineDefaults.Marker", + "limit_key": "MaxRecords", + "result_key": "EngineDefaults.Parameters" + }, + "DescribeEvents": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Events" + }, + "DescribeReservedCacheNodes": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReservedCacheNodes" + }, + "DescribeReservedCacheNodesOfferings": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReservedCacheNodesOfferings" + }, + "DescribeReplicationGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReplicationGroups" + }, + "DescribeSnapshots": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Snapshots" + }, + "DescribeServiceUpdates": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "ServiceUpdates" + }, + "DescribeUpdateActions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "UpdateActions" + }, + "DescribeGlobalReplicationGroups": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "GlobalReplicationGroups" + }, + "DescribeUserGroups": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "UserGroups" + }, + "DescribeUsers": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "Users" + }, + "DescribeServerlessCacheSnapshots": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ServerlessCacheSnapshots" + }, + "DescribeServerlessCaches": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ServerlessCaches" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/service-2.json.gz new file mode 100644 index 00000000..d1cf936d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/waiters-2.json new file mode 100644 index 00000000..c177d7b9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticache/2015-02-02/waiters-2.json @@ -0,0 +1,143 @@ +{ + "version":2, + "waiters":{ + "CacheClusterAvailable":{ + "acceptors":[ + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"available", + "matcher":"pathAll", + "state":"success" + }, + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"deleted", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"deleting", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"incompatible-network", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"restore-failed", + "matcher":"pathAny", + "state":"failure" + } + ], + "delay":15, + "description":"Wait until ElastiCache cluster is available.", + "maxAttempts":40, + "operation":"DescribeCacheClusters" + }, + "CacheClusterDeleted":{ + "acceptors":[ + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"deleted", + "matcher":"pathAll", + "state":"success" + }, + { + "expected":"CacheClusterNotFound", + "matcher":"error", + "state":"success" + }, + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"available", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"creating", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"incompatible-network", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"modifying", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"restore-failed", + "matcher":"pathAny", + "state":"failure" + }, + { + "argument":"CacheClusters[].CacheClusterStatus", + "expected":"snapshotting", + "matcher":"pathAny", + "state":"failure" + } + ], + "delay":15, + "description":"Wait until ElastiCache cluster is deleted.", + "maxAttempts":40, + "operation":"DescribeCacheClusters" + }, + "ReplicationGroupAvailable":{ + "acceptors":[ + { + "argument":"ReplicationGroups[].Status", + "expected":"available", + "matcher":"pathAll", + "state":"success" + }, + { + "argument":"ReplicationGroups[].Status", + "expected":"deleted", + "matcher":"pathAny", + "state":"failure" + } + ], + "delay":15, + "description":"Wait until ElastiCache replication group is available.", + "maxAttempts":40, + "operation":"DescribeReplicationGroups" + }, + "ReplicationGroupDeleted":{ + "acceptors":[ + { + "argument":"ReplicationGroups[].Status", + "expected":"deleted", + "matcher":"pathAll", + "state":"success" + }, + { + "argument":"ReplicationGroups[].Status", + "expected":"available", + "matcher":"pathAny", + "state":"failure" + }, + { + "expected":"ReplicationGroupNotFoundFault", + "matcher":"error", + "state":"success" + } + ], + "delay":15, + "description":"Wait until ElastiCache replication group is deleted.", + "maxAttempts":40, + "operation":"DescribeReplicationGroups" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d541c557 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/examples-1.json new file mode 100644 index 00000000..0fded628 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/examples-1.json @@ -0,0 +1,1109 @@ +{ + "version": "1.0", + "examples": { + "AbortEnvironmentUpdate": [ + { + "input": { + "EnvironmentName": "my-env" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following code aborts a running application version deployment for an environment named my-env:", + "id": "to-abort-a-deployment-1456267848227", + "title": "To abort a deployment" + } + ], + "CheckDNSAvailability": [ + { + "input": { + "CNAMEPrefix": "my-cname" + }, + "output": { + "Available": true, + "FullyQualifiedCNAME": "my-cname.us-west-2.elasticbeanstalk.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation checks the availability of the subdomain my-cname:", + "id": "to-check-the-availability-of-a-cname-1456268589537", + "title": "To check the availability of a CNAME" + } + ], + "CreateApplication": [ + { + "input": { + "ApplicationName": "my-app", + "Description": "my application" + }, + "output": { + "Application": { + "ApplicationName": "my-app", + "ConfigurationTemplates": [ + + ], + "DateCreated": "2015-02-12T18:32:21.181Z", + "DateUpdated": "2015-02-12T18:32:21.181Z", + "Description": "my application" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation creates a new application named my-app:", + "id": "to-create-a-new-application-1456268895683", + "title": "To create a new application" + } + ], + "CreateApplicationVersion": [ + { + "input": { + "ApplicationName": "my-app", + "AutoCreateApplication": true, + "Description": "my-app-v1", + "Process": true, + "SourceBundle": { + "S3Bucket": "my-bucket", + "S3Key": "sample.war" + }, + "VersionLabel": "v1" + }, + "output": { + "ApplicationVersion": { + "ApplicationName": "my-app", + "DateCreated": "2015-02-03T23:01:25.412Z", + "DateUpdated": "2015-02-03T23:01:25.412Z", + "Description": "my-app-v1", + "SourceBundle": { + "S3Bucket": "my-bucket", + "S3Key": "sample.war" + }, + "VersionLabel": "v1" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation creates a new version (v1) of an application named my-app:", + "id": "to-create-a-new-application-1456268895683", + "title": "To create a new application" + } + ], + "CreateConfigurationTemplate": [ + { + "input": { + "ApplicationName": "my-app", + "EnvironmentId": "e-rpqsewtp2j", + "TemplateName": "my-app-v1" + }, + "output": { + "ApplicationName": "my-app", + "DateCreated": "2015-08-12T18:40:39Z", + "DateUpdated": "2015-08-12T18:40:39Z", + "SolutionStackName": "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 8 Java 8", + "TemplateName": "my-app-v1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation creates a configuration template named my-app-v1 from the settings applied to an environment with the id e-rpqsewtp2j:", + "id": "to-create-a-configuration-template-1456269283586", + "title": "To create a configuration template" + } + ], + "CreateEnvironment": [ + { + "input": { + "ApplicationName": "my-app", + "CNAMEPrefix": "my-app", + "EnvironmentName": "my-env", + "SolutionStackName": "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 8 Java 8", + "VersionLabel": "v1" + }, + "output": { + "ApplicationName": "my-app", + "CNAME": "my-app.elasticbeanstalk.com", + "DateCreated": "2015-02-03T23:04:54.479Z", + "DateUpdated": "2015-02-03T23:04:54.479Z", + "EnvironmentId": "e-izqpassy4h", + "EnvironmentName": "my-env", + "Health": "Grey", + "SolutionStackName": "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 8 Java 8", + "Status": "Launching", + "Tier": { + "Name": "WebServer", + "Type": "Standard", + "Version": " " + }, + "VersionLabel": "v1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation creates a new environment for version v1 of a java application named my-app:", + "id": "to-create-a-new-environment-for-an-application-1456269380396", + "title": "To create a new environment for an application" + } + ], + "CreateStorageLocation": [ + { + "output": { + "S3Bucket": "elasticbeanstalk-us-west-2-0123456789012" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation creates a new environment for version v1 of a java application named my-app:", + "id": "to-create-a-new-environment-for-an-application-1456269380396", + "title": "To create a new environment for an application" + } + ], + "DeleteApplication": [ + { + "input": { + "ApplicationName": "my-app" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation deletes an application named my-app:", + "id": "to-delete-an-application-1456269699366", + "title": "To delete an application" + } + ], + "DeleteApplicationVersion": [ + { + "input": { + "ApplicationName": "my-app", + "DeleteSourceBundle": true, + "VersionLabel": "22a0-stage-150819_182129" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation deletes an application version named 22a0-stage-150819_182129 for an application named my-app:", + "id": "to-delete-an-application-version-1456269792956", + "title": "To delete an application version" + } + ], + "DeleteConfigurationTemplate": [ + { + "input": { + "ApplicationName": "my-app", + "TemplateName": "my-template" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation deletes a configuration template named my-template for an application named my-app:", + "id": "to-delete-a-configuration-template-1456269836701", + "title": "To delete a configuration template" + } + ], + "DeleteEnvironmentConfiguration": [ + { + "input": { + "ApplicationName": "my-app", + "EnvironmentName": "my-env" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation deletes a draft configuration for an environment named my-env:", + "id": "to-delete-a-draft-configuration-1456269886654", + "title": "To delete a draft configuration" + } + ], + "DescribeApplicationVersions": [ + { + "input": { + "ApplicationName": "my-app", + "VersionLabels": [ + "v2" + ] + }, + "output": { + "ApplicationVersions": [ + { + "ApplicationName": "my-app", + "DateCreated": "2015-07-23T01:32:26.079Z", + "DateUpdated": "2015-07-23T01:32:26.079Z", + "Description": "update cover page", + "SourceBundle": { + "S3Bucket": "elasticbeanstalk-us-west-2-015321684451", + "S3Key": "my-app/5026-stage-150723_224258.war" + }, + "VersionLabel": "v2" + }, + { + "ApplicationName": "my-app", + "DateCreated": "2015-07-23T22:26:10.816Z", + "DateUpdated": "2015-07-23T22:26:10.816Z", + "Description": "initial version", + "SourceBundle": { + "S3Bucket": "elasticbeanstalk-us-west-2-015321684451", + "S3Key": "my-app/5026-stage-150723_222618.war" + }, + "VersionLabel": "v1" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation retrieves information about an application version labeled v2:", + "id": "to-view-information-about-an-application-version-1456269947428", + "title": "To view information about an application version" + } + ], + "DescribeApplications": [ + { + "input": { + }, + "output": { + "Applications": [ + { + "ApplicationName": "ruby", + "ConfigurationTemplates": [ + + ], + "DateCreated": "2015-08-13T21:05:44.376Z", + "DateUpdated": "2015-08-13T21:05:44.376Z", + "Versions": [ + "Sample Application" + ] + }, + { + "ApplicationName": "pythonsample", + "ConfigurationTemplates": [ + + ], + "DateCreated": "2015-08-13T19:05:43.637Z", + "DateUpdated": "2015-08-13T19:05:43.637Z", + "Description": "Application created from the EB CLI using \"eb init\"", + "Versions": [ + "Sample Application" + ] + }, + { + "ApplicationName": "nodejs-example", + "ConfigurationTemplates": [ + + ], + "DateCreated": "2015-08-06T17:50:02.486Z", + "DateUpdated": "2015-08-06T17:50:02.486Z", + "Versions": [ + "add elasticache", + "First Release" + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation retrieves information about applications in the current region:", + "id": "to-view-a-list-of-applications-1456270027373", + "title": "To view a list of applications" + } + ], + "DescribeConfigurationOptions": [ + { + "input": { + "ApplicationName": "my-app", + "EnvironmentName": "my-env" + }, + "output": { + "Options": [ + { + "ChangeSeverity": "NoInterruption", + "DefaultValue": "30", + "MaxValue": 300, + "MinValue": 5, + "Name": "Interval", + "Namespace": "aws:elb:healthcheck", + "UserDefined": false, + "ValueType": "Scalar" + }, + { + "ChangeSeverity": "NoInterruption", + "DefaultValue": "2000000", + "MinValue": 0, + "Name": "LowerThreshold", + "Namespace": "aws:autoscaling:trigger", + "UserDefined": false, + "ValueType": "Scalar" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation retrieves descriptions of all available configuration options for an environment named my-env:", + "id": "to-view-configuration-options-for-an-environment-1456276763917", + "title": "To view configuration options for an environment" + } + ], + "DescribeConfigurationSettings": [ + { + "input": { + "ApplicationName": "my-app", + "EnvironmentName": "my-env" + }, + "output": { + "ConfigurationSettings": [ + { + "ApplicationName": "my-app", + "DateCreated": "2015-08-13T19:16:25Z", + "DateUpdated": "2015-08-13T23:30:07Z", + "DeploymentStatus": "deployed", + "Description": "Environment created from the EB CLI using \"eb create\"", + "EnvironmentName": "my-env", + "OptionSettings": [ + { + "Namespace": "aws:autoscaling:asg", + "OptionName": "Availability Zones", + "ResourceName": "AWSEBAutoScalingGroup", + "Value": "Any" + }, + { + "Namespace": "aws:autoscaling:asg", + "OptionName": "Cooldown", + "ResourceName": "AWSEBAutoScalingGroup", + "Value": "360" + }, + { + "Namespace": "aws:elb:policies", + "OptionName": "ConnectionDrainingTimeout", + "ResourceName": "AWSEBLoadBalancer", + "Value": "20" + }, + { + "Namespace": "aws:elb:policies", + "OptionName": "ConnectionSettingIdleTimeout", + "ResourceName": "AWSEBLoadBalancer", + "Value": "60" + } + ], + "SolutionStackName": "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 8 Java 8" + } + ] + }, + "comments": { + "input": { + }, + "output": { + "abbreviated": "Output is abbreviated" + } + }, + "description": "The following operation retrieves configuration settings for an environment named my-env:", + "id": "to-view-configurations-settings-for-an-environment-1456276924537", + "title": "To view configurations settings for an environment" + } + ], + "DescribeEnvironmentHealth": [ + { + "input": { + "AttributeNames": [ + "All" + ], + "EnvironmentName": "my-env" + }, + "output": { + "ApplicationMetrics": { + "Duration": 10, + "Latency": { + "P10": 0.001, + "P50": 0.001, + "P75": 0.002, + "P85": 0.003, + "P90": 0.003, + "P95": 0.004, + "P99": 0.004, + "P999": 0.004 + }, + "RequestCount": 45, + "StatusCodes": { + "Status2xx": 45, + "Status3xx": 0, + "Status4xx": 0, + "Status5xx": 0 + } + }, + "Causes": [ + + ], + "Color": "Green", + "EnvironmentName": "my-env", + "HealthStatus": "Ok", + "InstancesHealth": { + "Degraded": 0, + "Info": 0, + "NoData": 0, + "Ok": 1, + "Pending": 0, + "Severe": 0, + "Unknown": 0, + "Warning": 0 + }, + "RefreshedAt": "2015-08-20T21:09:18Z" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation retrieves overall health information for an environment named my-env:", + "id": "to-view-environment-health-1456277109510", + "title": "To view environment health" + } + ], + "DescribeEnvironmentResources": [ + { + "input": { + "EnvironmentName": "my-env" + }, + "output": { + "EnvironmentResources": { + "AutoScalingGroups": [ + { + "Name": "awseb-e-qu3fyyjyjs-stack-AWSEBAutoScalingGroup-QSB2ZO88SXZT" + } + ], + "EnvironmentName": "my-env", + "Instances": [ + { + "Id": "i-0c91c786" + } + ], + "LaunchConfigurations": [ + { + "Name": "awseb-e-qu3fyyjyjs-stack-AWSEBAutoScalingLaunchConfiguration-1UUVQIBC96TQ2" + } + ], + "LoadBalancers": [ + { + "Name": "awseb-e-q-AWSEBLoa-1EEPZ0K98BIF0" + } + ], + "Queues": [ + + ], + "Triggers": [ + + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation retrieves information about resources in an environment named my-env:", + "id": "to-view-information-about-the-aws-resources-in-your-environment-1456277206232", + "title": "To view information about the AWS resources in your environment" + } + ], + "DescribeEnvironments": [ + { + "input": { + "EnvironmentNames": [ + "my-env" + ] + }, + "output": { + "Environments": [ + { + "AbortableOperationInProgress": false, + "ApplicationName": "my-app", + "CNAME": "my-env.elasticbeanstalk.com", + "DateCreated": "2015-08-07T20:48:49.599Z", + "DateUpdated": "2015-08-12T18:16:55.019Z", + "EndpointURL": "awseb-e-w-AWSEBLoa-1483140XB0Q4L-109QXY8121.us-west-2.elb.amazonaws.com", + "EnvironmentId": "e-rpqsewtp2j", + "EnvironmentName": "my-env", + "Health": "Green", + "SolutionStackName": "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 8 Java 8", + "Status": "Ready", + "Tier": { + "Name": "WebServer", + "Type": "Standard", + "Version": " " + }, + "VersionLabel": "7f58-stage-150812_025409" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation retrieves information about an environment named my-env:", + "id": "to-view-information-about-an-environment-1456277288662", + "title": "To view information about an environment" + } + ], + "DescribeEvents": [ + { + "input": { + "EnvironmentName": "my-env" + }, + "output": { + "Events": [ + { + "ApplicationName": "my-app", + "EnvironmentName": "my-env", + "EventDate": "2015-08-20T07:06:53.535Z", + "Message": "Environment health has transitioned from Info to Ok.", + "Severity": "INFO" + }, + { + "ApplicationName": "my-app", + "EnvironmentName": "my-env", + "EventDate": "2015-08-20T07:06:02.049Z", + "Message": "Environment update completed successfully.", + "RequestId": "b7f3960b-4709-11e5-ba1e-07e16200da41", + "Severity": "INFO" + }, + { + "ApplicationName": "my-app", + "EnvironmentName": "my-env", + "EventDate": "2015-08-13T19:16:27.561Z", + "Message": "Using elasticbeanstalk-us-west-2-012445113685 as Amazon S3 storage bucket for environment data.", + "RequestId": "ca8dfbf6-41ef-11e5-988b-651aa638f46b", + "Severity": "INFO" + }, + { + "ApplicationName": "my-app", + "EnvironmentName": "my-env", + "EventDate": "2015-08-13T19:16:26.581Z", + "Message": "createEnvironment is starting.", + "RequestId": "cdfba8f6-41ef-11e5-988b-65638f41aa6b", + "Severity": "INFO" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation retrieves events for an environment named my-env:", + "id": "to-view-events-for-an-environment-1456277367589", + "title": "To view events for an environment" + } + ], + "DescribeInstancesHealth": [ + { + "input": { + "AttributeNames": [ + "All" + ], + "EnvironmentName": "my-env" + }, + "output": { + "InstanceHealthList": [ + { + "ApplicationMetrics": { + "Duration": 10, + "Latency": { + "P10": 0, + "P50": 0.001, + "P75": 0.002, + "P85": 0.003, + "P90": 0.004, + "P95": 0.005, + "P99": 0.006, + "P999": 0.006 + }, + "RequestCount": 48, + "StatusCodes": { + "Status2xx": 47, + "Status3xx": 0, + "Status4xx": 1, + "Status5xx": 0 + } + }, + "Causes": [ + + ], + "Color": "Green", + "HealthStatus": "Ok", + "InstanceId": "i-08691cc7", + "LaunchedAt": "2015-08-13T19:17:09Z", + "System": { + "CPUUtilization": { + "IOWait": 0.2, + "IRQ": 0, + "Idle": 97.8, + "Nice": 0.1, + "SoftIRQ": 0.1, + "System": 0.3, + "User": 1.5 + }, + "LoadAverage": [ + 0, + 0.02, + 0.05 + ] + } + } + ], + "RefreshedAt": "2015-08-20T21:09:08Z" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation retrieves health information for instances in an environment named my-env:", + "id": "to-view-environment-health-1456277424757", + "title": "To view environment health" + } + ], + "ListAvailableSolutionStacks": [ + { + "output": { + "SolutionStackDetails": [ + { + "PermittedFileTypes": [ + "zip" + ], + "SolutionStackName": "64bit Amazon Linux 2015.03 v2.0.0 running Node.js" + } + ], + "SolutionStacks": [ + "64bit Amazon Linux 2015.03 v2.0.0 running Node.js", + "64bit Amazon Linux 2015.03 v2.0.0 running PHP 5.6", + "64bit Amazon Linux 2015.03 v2.0.0 running PHP 5.5", + "64bit Amazon Linux 2015.03 v2.0.0 running PHP 5.4", + "64bit Amazon Linux 2015.03 v2.0.0 running Python 3.4", + "64bit Amazon Linux 2015.03 v2.0.0 running Python 2.7", + "64bit Amazon Linux 2015.03 v2.0.0 running Python", + "64bit Amazon Linux 2015.03 v2.0.0 running Ruby 2.2 (Puma)", + "64bit Amazon Linux 2015.03 v2.0.0 running Ruby 2.2 (Passenger Standalone)", + "64bit Amazon Linux 2015.03 v2.0.0 running Ruby 2.1 (Puma)", + "64bit Amazon Linux 2015.03 v2.0.0 running Ruby 2.1 (Passenger Standalone)", + "64bit Amazon Linux 2015.03 v2.0.0 running Ruby 2.0 (Puma)", + "64bit Amazon Linux 2015.03 v2.0.0 running Ruby 2.0 (Passenger Standalone)", + "64bit Amazon Linux 2015.03 v2.0.0 running Ruby 1.9.3", + "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 8 Java 8", + "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 7 Java 7", + "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 7 Java 6", + "64bit Windows Server Core 2012 R2 running IIS 8.5", + "64bit Windows Server 2012 R2 running IIS 8.5", + "64bit Windows Server 2012 running IIS 8", + "64bit Windows Server 2008 R2 running IIS 7.5", + "64bit Amazon Linux 2015.03 v2.0.0 running Docker 1.6.2", + "64bit Amazon Linux 2015.03 v2.0.0 running Multi-container Docker 1.6.2 (Generic)", + "64bit Debian jessie v2.0.0 running GlassFish 4.1 Java 8 (Preconfigured - Docker)", + "64bit Debian jessie v2.0.0 running GlassFish 4.0 Java 7 (Preconfigured - Docker)", + "64bit Debian jessie v2.0.0 running Go 1.4 (Preconfigured - Docker)", + "64bit Debian jessie v2.0.0 running Go 1.3 (Preconfigured - Docker)", + "64bit Debian jessie v2.0.0 running Python 3.4 (Preconfigured - Docker)" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation lists solution stacks for all currently available platform configurations and any that you have used in the past:", + "id": "to-view-solution-stacks-1456277504811", + "title": "To view solution stacks" + } + ], + "RebuildEnvironment": [ + { + "input": { + "EnvironmentName": "my-env" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation terminates and recreates the resources in an environment named my-env:", + "id": "to-rebuild-an-environment-1456277600918", + "title": "To rebuild an environment" + } + ], + "RequestEnvironmentInfo": [ + { + "input": { + "EnvironmentName": "my-env", + "InfoType": "tail" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation requests logs from an environment named my-env:", + "id": "to-request-tailed-logs-1456277657045", + "title": "To request tailed logs" + } + ], + "RestartAppServer": [ + { + "input": { + "EnvironmentName": "my-env" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation restarts application servers on all instances in an environment named my-env:", + "id": "to-restart-application-servers-1456277739302", + "title": "To restart application servers" + } + ], + "RetrieveEnvironmentInfo": [ + { + "input": { + "EnvironmentName": "my-env", + "InfoType": "tail" + }, + "output": { + "EnvironmentInfo": [ + { + "Ec2InstanceId": "i-09c1c867", + "InfoType": "tail", + "Message": "https://elasticbeanstalk-us-west-2-0123456789012.s3.amazonaws.com/resources/environments/logs/tail/e-fyqyju3yjs/i-09c1c867/TailLogs-1440109397703.out?AWSAccessKeyId=AKGPT4J56IAJ2EUBL5CQ&Expires=1440195891&Signature=n%2BEalOV6A2HIOx4Rcfb7LT16bBM%3D", + "SampleTimestamp": "2015-08-20T22:23:17.703Z" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation retrieves a link to logs from an environment named my-env:", + "id": "to-retrieve-tailed-logs-1456277792734", + "title": "To retrieve tailed logs" + } + ], + "SwapEnvironmentCNAMEs": [ + { + "input": { + "DestinationEnvironmentName": "my-env-green", + "SourceEnvironmentName": "my-env-blue" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation swaps the assigned subdomains of two environments:", + "id": "to-swap-environment-cnames-1456277839438", + "title": "To swap environment CNAMES" + } + ], + "TerminateEnvironment": [ + { + "input": { + "EnvironmentName": "my-env" + }, + "output": { + "AbortableOperationInProgress": false, + "ApplicationName": "my-app", + "CNAME": "my-env.elasticbeanstalk.com", + "DateCreated": "2015-08-12T18:52:53.622Z", + "DateUpdated": "2015-08-12T19:05:54.744Z", + "EndpointURL": "awseb-e-f-AWSEBLoa-1I9XUMP4-8492WNUP202574.us-west-2.elb.amazonaws.com", + "EnvironmentId": "e-fh2eravpns", + "EnvironmentName": "my-env", + "Health": "Grey", + "SolutionStackName": "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 8 Java 8", + "Status": "Terminating", + "Tier": { + "Name": "WebServer", + "Type": "Standard", + "Version": " " + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation terminates an Elastic Beanstalk environment named my-env:", + "id": "to-terminate-an-environment-1456277888556", + "title": "To terminate an environment" + } + ], + "UpdateApplication": [ + { + "input": { + "ApplicationName": "my-app", + "Description": "my Elastic Beanstalk application" + }, + "output": { + "Application": { + "ApplicationName": "my-app", + "ConfigurationTemplates": [ + + ], + "DateCreated": "2015-08-13T19:15:50.449Z", + "DateUpdated": "2015-08-20T22:34:56.195Z", + "Description": "my Elastic Beanstalk application", + "Versions": [ + "2fba-stage-150819_234450", + "bf07-stage-150820_214945", + "93f8", + "fd7c-stage-150820_000431", + "22a0-stage-150819_185942" + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation updates the description of an application named my-app:", + "id": "to-change-an-applications-description-1456277957075", + "title": "To change an application's description" + } + ], + "UpdateApplicationVersion": [ + { + "input": { + "ApplicationName": "my-app", + "Description": "new description", + "VersionLabel": "22a0-stage-150819_185942" + }, + "output": { + "ApplicationVersion": { + "ApplicationName": "my-app", + "DateCreated": "2015-08-19T18:59:17.646Z", + "DateUpdated": "2015-08-20T22:53:28.871Z", + "Description": "new description", + "SourceBundle": { + "S3Bucket": "elasticbeanstalk-us-west-2-0123456789012", + "S3Key": "my-app/22a0-stage-150819_185942.war" + }, + "VersionLabel": "22a0-stage-150819_185942" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation updates the description of an application version named 22a0-stage-150819_185942:", + "id": "to-change-an-application-versions-description-1456278019237", + "title": "To change an application version's description" + } + ], + "UpdateConfigurationTemplate": [ + { + "input": { + "ApplicationName": "my-app", + "OptionsToRemove": [ + { + "Namespace": "aws:elasticbeanstalk:healthreporting:system", + "OptionName": "ConfigDocument" + } + ], + "TemplateName": "my-template" + }, + "output": { + "ApplicationName": "my-app", + "DateCreated": "2015-08-20T22:39:31Z", + "DateUpdated": "2015-08-20T22:43:11Z", + "SolutionStackName": "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 8 Java 8", + "TemplateName": "my-template" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation removes the configured CloudWatch custom health metrics configuration ConfigDocument from a saved configuration template named my-template:", + "id": "to-update-a-configuration-template-1456278075300", + "title": "To update a configuration template" + } + ], + "UpdateEnvironment": [ + { + "input": { + "EnvironmentName": "my-env", + "VersionLabel": "v2" + }, + "output": { + "ApplicationName": "my-app", + "CNAME": "my-env.elasticbeanstalk.com", + "DateCreated": "2015-02-03T23:04:54.453Z", + "DateUpdated": "2015-02-03T23:12:29.119Z", + "EndpointURL": "awseb-e-i-AWSEBLoa-1RDLX6TC9VUAO-0123456789.us-west-2.elb.amazonaws.com", + "EnvironmentId": "e-szqipays4h", + "EnvironmentName": "my-env", + "Health": "Grey", + "SolutionStackName": "64bit Amazon Linux running Tomcat 7", + "Status": "Updating", + "Tier": { + "Name": "WebServer", + "Type": "Standard", + "Version": " " + }, + "VersionLabel": "v2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation updates an environment named \"my-env\" to version \"v2\" of the application to which it belongs:", + "id": "to-update-an-environment-to-a-new-version-1456278210718", + "title": "To update an environment to a new version" + }, + { + "input": { + "EnvironmentName": "my-env", + "OptionSettings": [ + { + "Namespace": "aws:elb:healthcheck", + "OptionName": "Interval", + "Value": "15" + }, + { + "Namespace": "aws:elb:healthcheck", + "OptionName": "Timeout", + "Value": "8" + }, + { + "Namespace": "aws:elb:healthcheck", + "OptionName": "HealthyThreshold", + "Value": "2" + }, + { + "Namespace": "aws:elb:healthcheck", + "OptionName": "UnhealthyThreshold", + "Value": "3" + } + ] + }, + "output": { + "AbortableOperationInProgress": true, + "ApplicationName": "my-app", + "CNAME": "my-env.elasticbeanstalk.com", + "DateCreated": "2015-08-07T20:48:49.599Z", + "DateUpdated": "2015-08-12T18:15:23.804Z", + "EndpointURL": "awseb-e-w-AWSEBLoa-14XB83101Q4L-104QXY80921.sa-east-1.elb.amazonaws.com", + "EnvironmentId": "e-wtp2rpqsej", + "EnvironmentName": "my-env", + "Health": "Grey", + "SolutionStackName": "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 8 Java 8", + "Status": "Updating", + "Tier": { + "Name": "WebServer", + "Type": "Standard", + "Version": " " + }, + "VersionLabel": "7f58-stage-150812_025409" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation configures several options in the aws:elb:loadbalancer namespace:", + "id": "to-configure-option-settings-1456278286349", + "title": "To configure option settings" + } + ], + "ValidateConfigurationSettings": [ + { + "input": { + "ApplicationName": "my-app", + "EnvironmentName": "my-env", + "OptionSettings": [ + { + "Namespace": "aws:elasticbeanstalk:healthreporting:system", + "OptionName": "ConfigDocument", + "Value": "{\"CloudWatchMetrics\": {\"Environment\": {\"ApplicationLatencyP99.9\": null,\"InstancesSevere\": 60,\"ApplicationLatencyP90\": 60,\"ApplicationLatencyP99\": null,\"ApplicationLatencyP95\": 60,\"InstancesUnknown\": 60,\"ApplicationLatencyP85\": 60,\"InstancesInfo\": null,\"ApplicationRequests2xx\": null,\"InstancesDegraded\": null,\"InstancesWarning\": 60,\"ApplicationLatencyP50\": 60,\"ApplicationRequestsTotal\": null,\"InstancesNoData\": null,\"InstancesPending\": 60,\"ApplicationLatencyP10\": null,\"ApplicationRequests5xx\": null,\"ApplicationLatencyP75\": null,\"InstancesOk\": 60,\"ApplicationRequests3xx\": null,\"ApplicationRequests4xx\": null},\"Instance\": {\"ApplicationLatencyP99.9\": null,\"ApplicationLatencyP90\": 60,\"ApplicationLatencyP99\": null,\"ApplicationLatencyP95\": null,\"ApplicationLatencyP85\": null,\"CPUUser\": 60,\"ApplicationRequests2xx\": null,\"CPUIdle\": null,\"ApplicationLatencyP50\": null,\"ApplicationRequestsTotal\": 60,\"RootFilesystemUtil\": null,\"LoadAverage1min\": null,\"CPUIrq\": null,\"CPUNice\": 60,\"CPUIowait\": 60,\"ApplicationLatencyP10\": null,\"LoadAverage5min\": null,\"ApplicationRequests5xx\": null,\"ApplicationLatencyP75\": 60,\"CPUSystem\": 60,\"ApplicationRequests3xx\": 60,\"ApplicationRequests4xx\": null,\"InstanceHealth\": null,\"CPUSoftirq\": 60}},\"Version\": 1}" + } + ] + }, + "output": { + "Messages": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation validates a CloudWatch custom metrics config document:", + "id": "to-validate-configuration-settings-1456278393654", + "title": "To validate configuration settings" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/paginators-1.json new file mode 100644 index 00000000..4f53c866 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "DescribeEvents": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxRecords", + "result_key": "Events" + }, + "DescribeApplicationVersions": { + "input_token": "NextToken", + "limit_key": "MaxRecords", + "output_token": "NextToken", + "result_key": "ApplicationVersions" + }, + "DescribeEnvironmentManagedActionHistory": { + "input_token": "NextToken", + "limit_key": "MaxItems", + "output_token": "NextToken", + "result_key": "ManagedActionHistoryItems" + }, + "DescribeEnvironments": { + "input_token": "NextToken", + "limit_key": "MaxRecords", + "output_token": "NextToken", + "result_key": "Environments" + }, + "ListPlatformVersions": { + "input_token": "NextToken", + "limit_key": "MaxRecords", + "output_token": "NextToken", + "result_key": "PlatformSummaryList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/service-2.json.gz new file mode 100644 index 00000000..2641429e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/waiters-2.json new file mode 100644 index 00000000..4fb906b4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elasticbeanstalk/2010-12-01/waiters-2.json @@ -0,0 +1,63 @@ +{ + "version": 2, + "waiters": { + "EnvironmentExists": { + "delay": 20, + "maxAttempts": 20, + "operation": "DescribeEnvironments", + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Environments[].Status", + "expected": "Ready" + }, + { + "state": "retry", + "matcher": "pathAll", + "argument": "Environments[].Status", + "expected": "Launching" + } + ] + }, + "EnvironmentUpdated": { + "delay": 20, + "maxAttempts": 20, + "operation": "DescribeEnvironments", + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Environments[].Status", + "expected": "Ready" + }, + { + "state": "retry", + "matcher": "pathAll", + "argument": "Environments[].Status", + "expected": "Updating" + } + ] + }, + "EnvironmentTerminated": { + "delay": 20, + "maxAttempts": 20, + "operation": "DescribeEnvironments", + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Environments[].Status", + "expected": "Terminated" + }, + { + "state": "retry", + "matcher": "pathAll", + "argument": "Environments[].Status", + "expected": "Terminating" + } + ] + } + } +} + diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..fdad5e19 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/paginators-1.json new file mode 100644 index 00000000..5a145d36 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/paginators-1.json @@ -0,0 +1,24 @@ +{ + "pagination": { + "ListJobsByPipeline": { + "input_token": "PageToken", + "output_token": "NextPageToken", + "result_key": "Jobs" + }, + "ListJobsByStatus": { + "input_token": "PageToken", + "output_token": "NextPageToken", + "result_key": "Jobs" + }, + "ListPipelines": { + "input_token": "PageToken", + "output_token": "NextPageToken", + "result_key": "Pipelines" + }, + "ListPresets": { + "input_token": "PageToken", + "output_token": "NextPageToken", + "result_key": "Presets" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/service-2.json.gz new file mode 100644 index 00000000..fd9a2ce0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/waiters-2.json new file mode 100644 index 00000000..55c36280 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elastictranscoder/2012-09-25/waiters-2.json @@ -0,0 +1,30 @@ +{ + "version": 2, + "waiters": { + "JobComplete": { + "delay": 30, + "operation": "ReadJob", + "maxAttempts": 120, + "acceptors": [ + { + "expected": "Complete", + "matcher": "path", + "state": "success", + "argument": "Job.Status" + }, + { + "expected": "Canceled", + "matcher": "path", + "state": "failure", + "argument": "Job.Status" + }, + { + "expected": "Error", + "matcher": "path", + "state": "failure", + "argument": "Job.Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..efe00569 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/examples-1.json new file mode 100644 index 00000000..ce50fdd1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/examples-1.json @@ -0,0 +1,1036 @@ +{ + "version": "1.0", + "examples": { + "AddTags": [ + { + "input": { + "LoadBalancerNames": [ + "my-load-balancer" + ], + "Tags": [ + { + "Key": "project", + "Value": "lima" + }, + { + "Key": "department", + "Value": "digital-media" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds two tags to the specified load balancer.", + "id": "elb-add-tags-1", + "title": "To add tags to a load balancer" + } + ], + "ApplySecurityGroupsToLoadBalancer": [ + { + "input": { + "LoadBalancerName": "my-load-balancer", + "SecurityGroups": [ + "sg-fc448899" + ] + }, + "output": { + "SecurityGroups": [ + "sg-fc448899" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates a security group with the specified load balancer in a VPC.", + "id": "elb-apply-security-groups-to-load-balancer-1", + "title": "To associate a security group with a load balancer in a VPC" + } + ], + "AttachLoadBalancerToSubnets": [ + { + "input": { + "LoadBalancerName": "my-load-balancer", + "Subnets": [ + "subnet-0ecac448" + ] + }, + "output": { + "Subnets": [ + "subnet-15aaab61", + "subnet-0ecac448" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds the specified subnet to the set of configured subnets for the specified load balancer.", + "id": "elb-attach-load-balancer-to-subnets-1", + "title": "To attach subnets to a load balancer" + } + ], + "ConfigureHealthCheck": [ + { + "input": { + "HealthCheck": { + "HealthyThreshold": 2, + "Interval": 30, + "Target": "HTTP:80/png", + "Timeout": 3, + "UnhealthyThreshold": 2 + }, + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "HealthCheck": { + "HealthyThreshold": 2, + "Interval": 30, + "Target": "HTTP:80/png", + "Timeout": 3, + "UnhealthyThreshold": 2 + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example specifies the health check settings used to evaluate the health of your backend EC2 instances.", + "id": "elb-configure-health-check-1", + "title": "To specify the health check settings for your backend EC2 instances" + } + ], + "CreateAppCookieStickinessPolicy": [ + { + "input": { + "CookieName": "my-app-cookie", + "LoadBalancerName": "my-load-balancer", + "PolicyName": "my-app-cookie-policy" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example generates a stickiness policy that follows the sticky session lifetimes of the application-generated cookie.", + "id": "elb-create-app-cookie-stickiness-policy-1", + "title": "To generate a stickiness policy for your load balancer" + } + ], + "CreateLBCookieStickinessPolicy": [ + { + "input": { + "CookieExpirationPeriod": 60, + "LoadBalancerName": "my-load-balancer", + "PolicyName": "my-duration-cookie-policy" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example generates a stickiness policy with sticky session lifetimes controlled by the specified expiration period.", + "id": "elb-create-lb-cookie-stickiness-policy-1", + "title": "To generate a duration-based stickiness policy for your load balancer" + } + ], + "CreateLoadBalancer": [ + { + "input": { + "Listeners": [ + { + "InstancePort": 80, + "InstanceProtocol": "HTTP", + "LoadBalancerPort": 80, + "Protocol": "HTTP" + } + ], + "LoadBalancerName": "my-load-balancer", + "SecurityGroups": [ + "sg-a61988c3" + ], + "Subnets": [ + "subnet-15aaab61" + ] + }, + "output": { + "DNSName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a load balancer with an HTTP listener in a VPC.", + "id": "elb-create-load-balancer-1", + "title": "To create an HTTP load balancer in a VPC" + }, + { + "input": { + "AvailabilityZones": [ + "us-west-2a" + ], + "Listeners": [ + { + "InstancePort": 80, + "InstanceProtocol": "HTTP", + "LoadBalancerPort": 80, + "Protocol": "HTTP" + } + ], + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "DNSName": "my-load-balancer-123456789.us-west-2.elb.amazonaws.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a load balancer with an HTTP listener in EC2-Classic.", + "id": "elb-create-load-balancer-2", + "title": "To create an HTTP load balancer in EC2-Classic" + }, + { + "input": { + "Listeners": [ + { + "InstancePort": 80, + "InstanceProtocol": "HTTP", + "LoadBalancerPort": 80, + "Protocol": "HTTP" + }, + { + "InstancePort": 80, + "InstanceProtocol": "HTTP", + "LoadBalancerPort": 443, + "Protocol": "HTTPS", + "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-cert" + } + ], + "LoadBalancerName": "my-load-balancer", + "SecurityGroups": [ + "sg-a61988c3" + ], + "Subnets": [ + "subnet-15aaab61" + ] + }, + "output": { + "DNSName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a load balancer with an HTTPS listener in a VPC.", + "id": "elb-create-load-balancer-3", + "title": "To create an HTTPS load balancer in a VPC" + }, + { + "input": { + "AvailabilityZones": [ + "us-west-2a" + ], + "Listeners": [ + { + "InstancePort": 80, + "InstanceProtocol": "HTTP", + "LoadBalancerPort": 80, + "Protocol": "HTTP" + }, + { + "InstancePort": 80, + "InstanceProtocol": "HTTP", + "LoadBalancerPort": 443, + "Protocol": "HTTPS", + "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-cert" + } + ], + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "DNSName": "my-load-balancer-123456789.us-west-2.elb.amazonaws.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a load balancer with an HTTPS listener in EC2-Classic.", + "id": "elb-create-load-balancer-4", + "title": "To create an HTTPS load balancer in EC2-Classic" + }, + { + "input": { + "Listeners": [ + { + "InstancePort": 80, + "InstanceProtocol": "HTTP", + "LoadBalancerPort": 80, + "Protocol": "HTTP" + } + ], + "LoadBalancerName": "my-load-balancer", + "Scheme": "internal", + "SecurityGroups": [ + "sg-a61988c3" + ], + "Subnets": [ + "subnet-15aaab61" + ] + }, + "output": { + "DNSName": "internal-my-load-balancer-123456789.us-west-2.elb.amazonaws.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an internal load balancer with an HTTP listener in a VPC.", + "id": "elb-create-load-balancer-5", + "title": "To create an internal load balancer" + } + ], + "CreateLoadBalancerListeners": [ + { + "input": { + "Listeners": [ + { + "InstancePort": 80, + "InstanceProtocol": "HTTP", + "LoadBalancerPort": 80, + "Protocol": "HTTP" + } + ], + "LoadBalancerName": "my-load-balancer" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a listener for your load balancer at port 80 using the HTTP protocol.", + "id": "elb-create-load-balancer-listeners-1", + "title": "To create an HTTP listener for a load balancer" + }, + { + "input": { + "Listeners": [ + { + "InstancePort": 80, + "InstanceProtocol": "HTTP", + "LoadBalancerPort": 443, + "Protocol": "HTTPS", + "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-cert" + } + ], + "LoadBalancerName": "my-load-balancer" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a listener for your load balancer at port 443 using the HTTPS protocol.", + "id": "elb-create-load-balancer-listeners-2", + "title": "To create an HTTPS listener for a load balancer" + } + ], + "CreateLoadBalancerPolicy": [ + { + "input": { + "LoadBalancerName": "my-load-balancer", + "PolicyAttributes": [ + { + "AttributeName": "ProxyProtocol", + "AttributeValue": "true" + } + ], + "PolicyName": "my-ProxyProtocol-policy", + "PolicyTypeName": "ProxyProtocolPolicyType" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a policy that enables Proxy Protocol on the specified load balancer.", + "id": "elb-create-load-balancer-policy-1", + "title": "To create a policy that enables Proxy Protocol on a load balancer" + }, + { + "input": { + "LoadBalancerName": "my-load-balancer", + "PolicyAttributes": [ + { + "AttributeName": "PublicKey", + "AttributeValue": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwAYUjnfyEyXr1pxjhFWBpMlggUcqoi3kl+dS74kj//c6x7ROtusUaeQCTgIUkayttRDWchuqo1pHC1u+n5xxXnBBe2ejbb2WRsKIQ5rXEeixsjFpFsojpSQKkzhVGI6mJVZBJDVKSHmswnwLBdofLhzvllpovBPTHe+o4haAWvDBALJU0pkSI1FecPHcs2hwxf14zHoXy1e2k36A64nXW43wtfx5qcVSIxtCEOjnYRg7RPvybaGfQ+v6Iaxb/+7J5kEvZhTFQId+bSiJImF1FSUT1W1xwzBZPUbcUkkXDj45vC2s3Z8E+Lk7a3uZhvsQHLZnrfuWjBWGWvZ/MhZYgEXAMPLE" + } + ], + "PolicyName": "my-PublicKey-policy", + "PolicyTypeName": "PublicKeyPolicyType" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a public key policy.", + "id": "elb-create-load-balancer-policy-2", + "title": "To create a public key policy" + }, + { + "input": { + "LoadBalancerName": "my-load-balancer", + "PolicyAttributes": [ + { + "AttributeName": "PublicKeyPolicyName", + "AttributeValue": "my-PublicKey-policy" + } + ], + "PolicyName": "my-authentication-policy", + "PolicyTypeName": "BackendServerAuthenticationPolicyType" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a backend server authentication policy that enables authentication on your backend instance using a public key policy.", + "id": "elb-create-load-balancer-policy-3", + "title": "To create a backend server authentication policy" + } + ], + "DeleteLoadBalancer": [ + { + "input": { + "LoadBalancerName": "my-load-balancer" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified load balancer.", + "id": "elb-delete-load-balancer-1", + "title": "To delete a load balancer" + } + ], + "DeleteLoadBalancerListeners": [ + { + "input": { + "LoadBalancerName": "my-load-balancer", + "LoadBalancerPorts": [ + 80 + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the listener for the specified port from the specified load balancer.", + "id": "elb-delete-load-balancer-listeners-1", + "title": "To delete a listener from your load balancer" + } + ], + "DeleteLoadBalancerPolicy": [ + { + "input": { + "LoadBalancerName": "my-load-balancer", + "PolicyName": "my-duration-cookie-policy" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified policy from the specified load balancer. The policy must not be enabled on any listener.", + "id": "elb-delete-load-balancer-policy-1", + "title": "To delete a policy from your load balancer" + } + ], + "DeregisterInstancesFromLoadBalancer": [ + { + "input": { + "Instances": [ + { + "InstanceId": "i-d6f6fae3" + } + ], + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "Instances": [ + { + "InstanceId": "i-207d9717" + }, + { + "InstanceId": "i-afefb49b" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deregisters the specified instance from the specified load balancer.", + "id": "elb-deregister-instances-from-load-balancer-1", + "title": "To deregister instances from a load balancer" + } + ], + "DescribeInstanceHealth": [ + { + "input": { + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "InstanceStates": [ + { + "Description": "N/A", + "InstanceId": "i-207d9717", + "ReasonCode": "N/A", + "State": "InService" + }, + { + "Description": "N/A", + "InstanceId": "i-afefb49b", + "ReasonCode": "N/A", + "State": "InService" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the health of the instances for the specified load balancer.", + "id": "elb-describe-instance-health-1", + "title": "To describe the health of the instances for a load balancer" + } + ], + "DescribeLoadBalancerAttributes": [ + { + "input": { + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "LoadBalancerAttributes": { + "AccessLog": { + "Enabled": false + }, + "ConnectionDraining": { + "Enabled": false, + "Timeout": 300 + }, + "ConnectionSettings": { + "IdleTimeout": 60 + }, + "CrossZoneLoadBalancing": { + "Enabled": false + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the attributes of the specified load balancer.", + "id": "elb-describe-load-balancer-attributes-1", + "title": "To describe the attributes of a load balancer" + } + ], + "DescribeLoadBalancerPolicies": [ + { + "input": { + "LoadBalancerName": "my-load-balancer", + "PolicyNames": [ + "my-authentication-policy" + ] + }, + "output": { + "PolicyDescriptions": [ + { + "PolicyAttributeDescriptions": [ + { + "AttributeName": "PublicKeyPolicyName", + "AttributeValue": "my-PublicKey-policy" + } + ], + "PolicyName": "my-authentication-policy", + "PolicyTypeName": "BackendServerAuthenticationPolicyType" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified policy associated with the specified load balancer.", + "id": "elb-describe-load-balancer-policies-1", + "title": "To describe a policy associated with a load balancer" + } + ], + "DescribeLoadBalancerPolicyTypes": [ + { + "input": { + "PolicyTypeNames": [ + "ProxyProtocolPolicyType" + ] + }, + "output": { + "PolicyTypeDescriptions": [ + { + "Description": "Policy that controls whether to include the IP address and port of the originating request for TCP messages. This policy operates on TCP listeners only.", + "PolicyAttributeTypeDescriptions": [ + { + "AttributeName": "ProxyProtocol", + "AttributeType": "Boolean", + "Cardinality": "ONE" + } + ], + "PolicyTypeName": "ProxyProtocolPolicyType" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified load balancer policy type.", + "id": "elb-describe-load-balancer-policy-types-1", + "title": "To describe a load balancer policy type defined by Elastic Load Balancing" + } + ], + "DescribeLoadBalancers": [ + { + "input": { + "LoadBalancerNames": [ + "my-load-balancer" + ] + }, + "output": { + "LoadBalancerDescriptions": [ + { + "AvailabilityZones": [ + "us-west-2a" + ], + "BackendServerDescriptions": [ + { + "InstancePort": 80, + "PolicyNames": [ + "my-ProxyProtocol-policy" + ] + } + ], + "CanonicalHostedZoneName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com", + "CanonicalHostedZoneNameID": "Z3DZXE0EXAMPLE", + "CreatedTime": "2015-03-19T03:24:02.650Z", + "DNSName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com", + "HealthCheck": { + "HealthyThreshold": 2, + "Interval": 30, + "Target": "HTTP:80/png", + "Timeout": 3, + "UnhealthyThreshold": 2 + }, + "Instances": [ + { + "InstanceId": "i-207d9717" + }, + { + "InstanceId": "i-afefb49b" + } + ], + "ListenerDescriptions": [ + { + "Listener": { + "InstancePort": 80, + "InstanceProtocol": "HTTP", + "LoadBalancerPort": 80, + "Protocol": "HTTP" + }, + "PolicyNames": [ + + ] + }, + { + "Listener": { + "InstancePort": 443, + "InstanceProtocol": "HTTPS", + "LoadBalancerPort": 443, + "Protocol": "HTTPS", + "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-cert" + }, + "PolicyNames": [ + "ELBSecurityPolicy-2015-03" + ] + } + ], + "LoadBalancerName": "my-load-balancer", + "Policies": { + "AppCookieStickinessPolicies": [ + + ], + "LBCookieStickinessPolicies": [ + { + "CookieExpirationPeriod": 60, + "PolicyName": "my-duration-cookie-policy" + } + ], + "OtherPolicies": [ + "my-PublicKey-policy", + "my-authentication-policy", + "my-SSLNegotiation-policy", + "my-ProxyProtocol-policy", + "ELBSecurityPolicy-2015-03" + ] + }, + "Scheme": "internet-facing", + "SecurityGroups": [ + "sg-a61988c3" + ], + "SourceSecurityGroup": { + "GroupName": "my-elb-sg", + "OwnerAlias": "123456789012" + }, + "Subnets": [ + "subnet-15aaab61" + ], + "VPCId": "vpc-a01106c2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified load balancer.", + "id": "elb-describe-load-balancers-1", + "title": "To describe one of your load balancers" + } + ], + "DescribeTags": [ + { + "input": { + "LoadBalancerNames": [ + "my-load-balancer" + ] + }, + "output": { + "TagDescriptions": [ + { + "LoadBalancerName": "my-load-balancer", + "Tags": [ + { + "Key": "project", + "Value": "lima" + }, + { + "Key": "department", + "Value": "digital-media" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the tags for the specified load balancer.", + "id": "elb-describe-tags-1", + "title": "To describe the tags for a load balancer" + } + ], + "DetachLoadBalancerFromSubnets": [ + { + "input": { + "LoadBalancerName": "my-load-balancer", + "Subnets": [ + "subnet-0ecac448" + ] + }, + "output": { + "Subnets": [ + "subnet-15aaab61" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example detaches the specified load balancer from the specified subnet.", + "id": "elb-detach-load-balancer-from-subnets-1", + "title": "To detach a load balancer from a subnet" + } + ], + "DisableAvailabilityZonesForLoadBalancer": [ + { + "input": { + "AvailabilityZones": [ + "us-west-2a" + ], + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "AvailabilityZones": [ + "us-west-2b" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example removes the specified Availability Zone from the set of Availability Zones for the specified load balancer.", + "id": "elb-disable-availability-zones-for-load-balancer-1", + "title": "To disable an Availability Zone for a load balancer" + } + ], + "EnableAvailabilityZonesForLoadBalancer": [ + { + "input": { + "AvailabilityZones": [ + "us-west-2b" + ], + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "AvailabilityZones": [ + "us-west-2a", + "us-west-2b" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds the specified Availability Zone to the specified load balancer.", + "id": "elb-enable-availability-zones-for-load-balancer-1", + "title": "To enable an Availability Zone for a load balancer" + } + ], + "ModifyLoadBalancerAttributes": [ + { + "input": { + "LoadBalancerAttributes": { + "CrossZoneLoadBalancing": { + "Enabled": true + } + }, + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "LoadBalancerAttributes": { + "CrossZoneLoadBalancing": { + "Enabled": true + } + }, + "LoadBalancerName": "my-load-balancer" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables cross-zone load balancing for the specified load balancer.", + "id": "elb-modify-load-balancer-attributes-1", + "title": "To enable cross-zone load balancing" + }, + { + "input": { + "LoadBalancerAttributes": { + "ConnectionDraining": { + "Enabled": true, + "Timeout": 300 + } + }, + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "LoadBalancerAttributes": { + "ConnectionDraining": { + "Enabled": true, + "Timeout": 300 + } + }, + "LoadBalancerName": "my-load-balancer" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables connection draining for the specified load balancer.", + "id": "elb-modify-load-balancer-attributes-2", + "title": "To enable connection draining" + } + ], + "RegisterInstancesWithLoadBalancer": [ + { + "input": { + "Instances": [ + { + "InstanceId": "i-d6f6fae3" + } + ], + "LoadBalancerName": "my-load-balancer" + }, + "output": { + "Instances": [ + { + "InstanceId": "i-d6f6fae3" + }, + { + "InstanceId": "i-207d9717" + }, + { + "InstanceId": "i-afefb49b" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example registers the specified instance with the specified load balancer.", + "id": "elb-register-instances-with-load-balancer-1", + "title": "To register instances with a load balancer" + } + ], + "RemoveTags": [ + { + "input": { + "LoadBalancerNames": [ + "my-load-balancer" + ], + "Tags": [ + { + "Key": "project" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example removes the specified tag from the specified load balancer.", + "id": "elb-remove-tags-1", + "title": "To remove tags from a load balancer" + } + ], + "SetLoadBalancerListenerSSLCertificate": [ + { + "input": { + "LoadBalancerName": "my-load-balancer", + "LoadBalancerPort": 443, + "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/new-server-cert" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example replaces the existing SSL certificate for the specified HTTPS listener.", + "id": "elb-set-load-balancer-listener-ssl-certificate-1", + "title": "To update the SSL certificate for an HTTPS listener" + } + ], + "SetLoadBalancerPoliciesForBackendServer": [ + { + "input": { + "InstancePort": 80, + "LoadBalancerName": "my-load-balancer", + "PolicyNames": [ + "my-ProxyProtocol-policy" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example replaces the policies that are currently associated with the specified port.", + "id": "elb-set-load-balancer-policies-for-backend-server-1", + "title": "To replace the policies associated with a port for a backend instance" + } + ], + "SetLoadBalancerPoliciesOfListener": [ + { + "input": { + "LoadBalancerName": "my-load-balancer", + "LoadBalancerPort": 80, + "PolicyNames": [ + "my-SSLNegotiation-policy" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example replaces the policies that are currently associated with the specified listener.", + "id": "elb-set-load-balancer-policies-of-listener-1", + "title": "To replace the policies associated with a listener" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/paginators-1.json new file mode 100644 index 00000000..b3bd3301 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "DescribeLoadBalancers": { + "input_token": "Marker", + "output_token": "NextMarker", + "result_key": "LoadBalancerDescriptions", + "limit_key": "PageSize" + }, + "DescribeAccountLimits": { + "input_token": "Marker", + "limit_key": "PageSize", + "output_token": "NextMarker", + "result_key": "Limits" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/service-2.json.gz new file mode 100644 index 00000000..d3c1cdf3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/waiters-2.json new file mode 100644 index 00000000..182e070b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elb/2012-06-01/waiters-2.json @@ -0,0 +1,54 @@ +{ + "version":2, + "waiters":{ + "InstanceDeregistered": { + "delay": 15, + "operation": "DescribeInstanceHealth", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "OutOfService", + "matcher": "pathAll", + "state": "success", + "argument": "InstanceStates[].State" + }, + { + "matcher": "error", + "expected": "InvalidInstance", + "state": "success" + } + ] + }, + "AnyInstanceInService":{ + "acceptors":[ + { + "argument":"InstanceStates[].State", + "expected":"InService", + "matcher":"pathAny", + "state":"success" + } + ], + "delay":15, + "maxAttempts":40, + "operation":"DescribeInstanceHealth" + }, + "InstanceInService":{ + "acceptors":[ + { + "argument":"InstanceStates[].State", + "expected":"InService", + "matcher":"pathAll", + "state":"success" + }, + { + "matcher": "error", + "expected": "InvalidInstance", + "state": "retry" + } + ], + "delay":15, + "maxAttempts":40, + "operation":"DescribeInstanceHealth" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..74ad2f60 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/examples-1.json new file mode 100644 index 00000000..508b0991 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/examples-1.json @@ -0,0 +1,1384 @@ +{ + "version": "1.0", + "examples": { + "AddTags": [ + { + "input": { + "ResourceArns": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + ], + "Tags": [ + { + "Key": "project", + "Value": "lima" + }, + { + "Key": "department", + "Value": "digital-media" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds the specified tags to the specified load balancer.", + "id": "elbv2-add-tags-1", + "title": "To add tags to a load balancer" + } + ], + "CreateListener": [ + { + "input": { + "DefaultActions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "Port": 80, + "Protocol": "HTTP" + }, + "output": { + "Listeners": [ + { + "DefaultActions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2", + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "Port": 80, + "Protocol": "HTTP" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an HTTP listener for the specified load balancer that forwards requests to the specified target group.", + "id": "elbv2-create-listener-1", + "title": "To create an HTTP listener" + }, + { + "input": { + "Certificates": [ + { + "CertificateArn": "arn:aws:iam::123456789012:server-certificate/my-server-cert" + } + ], + "DefaultActions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "Port": 443, + "Protocol": "HTTPS", + "SslPolicy": "ELBSecurityPolicy-2015-05" + }, + "output": { + "Listeners": [ + { + "Certificates": [ + { + "CertificateArn": "arn:aws:iam::123456789012:server-certificate/my-server-cert" + } + ], + "DefaultActions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2", + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "Port": 443, + "Protocol": "HTTPS", + "SslPolicy": "ELBSecurityPolicy-2015-05" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an HTTPS listener for the specified load balancer that forwards requests to the specified target group. Note that you must specify an SSL certificate for an HTTPS listener. You can create and manage certificates using AWS Certificate Manager (ACM). Alternatively, you can create a certificate using SSL/TLS tools, get the certificate signed by a certificate authority (CA), and upload the certificate to AWS Identity and Access Management (IAM).", + "id": "elbv2-create-listener-2", + "title": "To create an HTTPS listener" + } + ], + "CreateLoadBalancer": [ + { + "input": { + "Name": "my-load-balancer", + "Subnets": [ + "subnet-b7d581c0", + "subnet-8360a9e7" + ] + }, + "output": { + "LoadBalancers": [ + { + "AvailabilityZones": [ + { + "SubnetId": "subnet-8360a9e7", + "ZoneName": "us-west-2a" + }, + { + "SubnetId": "subnet-b7d581c0", + "ZoneName": "us-west-2b" + } + ], + "CanonicalHostedZoneId": "Z2P70J7EXAMPLE", + "CreatedTime": "2016-03-25T21:26:12.920Z", + "DNSName": "my-load-balancer-424835706.us-west-2.elb.amazonaws.com", + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "LoadBalancerName": "my-load-balancer", + "Scheme": "internet-facing", + "SecurityGroups": [ + "sg-5943793c" + ], + "State": { + "Code": "provisioning" + }, + "Type": "application", + "VpcId": "vpc-3ac0fb5f" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an Internet-facing load balancer and enables the Availability Zones for the specified subnets.", + "id": "elbv2-create-load-balancer-1", + "title": "To create an Internet-facing load balancer" + }, + { + "input": { + "Name": "my-internal-load-balancer", + "Scheme": "internal", + "SecurityGroups": [ + + ], + "Subnets": [ + "subnet-b7d581c0", + "subnet-8360a9e7" + ] + }, + "output": { + "LoadBalancers": [ + { + "AvailabilityZones": [ + { + "SubnetId": "subnet-8360a9e7", + "ZoneName": "us-west-2a" + }, + { + "SubnetId": "subnet-b7d581c0", + "ZoneName": "us-west-2b" + } + ], + "CanonicalHostedZoneId": "Z2P70J7EXAMPLE", + "CreatedTime": "2016-03-25T21:29:48.850Z", + "DNSName": "internal-my-internal-load-balancer-1529930873.us-west-2.elb.amazonaws.com", + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-internal-load-balancer/5b49b8d4303115c2", + "LoadBalancerName": "my-internal-load-balancer", + "Scheme": "internal", + "SecurityGroups": [ + "sg-5943793c" + ], + "State": { + "Code": "provisioning" + }, + "Type": "application", + "VpcId": "vpc-3ac0fb5f" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an internal load balancer and enables the Availability Zones for the specified subnets.", + "id": "elbv2-create-load-balancer-2", + "title": "To create an internal load balancer" + } + ], + "CreateRule": [ + { + "input": { + "Actions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "Conditions": [ + { + "Field": "path-pattern", + "Values": [ + "/img/*" + ] + } + ], + "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2", + "Priority": 10 + }, + "output": { + "Rules": [ + { + "Actions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "Conditions": [ + { + "Field": "path-pattern", + "Values": [ + "/img/*" + ] + } + ], + "IsDefault": false, + "Priority": "10", + "RuleArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2/9683b2d02a6cabee" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a rule that forwards requests to the specified target group if the URL contains the specified pattern (for example, /img/*).", + "id": "elbv2-create-rule-1", + "title": "To create a rule" + } + ], + "CreateTargetGroup": [ + { + "input": { + "Name": "my-targets", + "Port": 80, + "Protocol": "HTTP", + "VpcId": "vpc-3ac0fb5f" + }, + "output": { + "TargetGroups": [ + { + "HealthCheckIntervalSeconds": 30, + "HealthCheckPath": "/", + "HealthCheckPort": "traffic-port", + "HealthCheckProtocol": "HTTP", + "HealthCheckTimeoutSeconds": 5, + "HealthyThresholdCount": 5, + "Matcher": { + "HttpCode": "200" + }, + "Port": 80, + "Protocol": "HTTP", + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "TargetGroupName": "my-targets", + "UnhealthyThresholdCount": 2, + "VpcId": "vpc-3ac0fb5f" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a target group that you can use to route traffic to targets using HTTP on port 80. This target group uses the default health check configuration.", + "id": "elbv2-create-target-group-1", + "title": "To create a target group" + } + ], + "DeleteListener": [ + { + "input": { + "ListenerArn": "arn:aws:elasticloadbalancing:ua-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified listener.", + "id": "elbv2-delete-listener-1", + "title": "To delete a listener" + } + ], + "DeleteLoadBalancer": [ + { + "input": { + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified load balancer.", + "id": "elbv2-delete-load-balancer-1", + "title": "To delete a load balancer" + } + ], + "DeleteRule": [ + { + "input": { + "RuleArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2/1291d13826f405c3" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified rule.", + "id": "elbv2-delete-rule-1", + "title": "To delete a rule" + } + ], + "DeleteTargetGroup": [ + { + "input": { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified target group.", + "id": "elbv2-delete-target-group-1", + "title": "To delete a target group" + } + ], + "DeregisterTargets": [ + { + "input": { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Targets": [ + { + "Id": "i-0f76fade" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deregisters the specified instance from the specified target group.", + "id": "elbv2-deregister-targets-1", + "title": "To deregister a target from a target group" + } + ], + "DescribeListeners": [ + { + "input": { + "ListenerArns": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2" + ] + }, + "output": { + "Listeners": [ + { + "DefaultActions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2", + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "Port": 80, + "Protocol": "HTTP" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified listener.", + "id": "elbv2-describe-listeners-1", + "title": "To describe a listener" + } + ], + "DescribeLoadBalancerAttributes": [ + { + "input": { + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + }, + "output": { + "Attributes": [ + { + "Key": "access_logs.s3.enabled", + "Value": "false" + }, + { + "Key": "idle_timeout.timeout_seconds", + "Value": "60" + }, + { + "Key": "access_logs.s3.prefix", + "Value": "" + }, + { + "Key": "deletion_protection.enabled", + "Value": "false" + }, + { + "Key": "access_logs.s3.bucket", + "Value": "" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the attributes of the specified load balancer.", + "id": "elbv2-describe-load-balancer-attributes-1", + "title": "To describe load balancer attributes" + } + ], + "DescribeLoadBalancers": [ + { + "input": { + "LoadBalancerArns": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + ] + }, + "output": { + "LoadBalancers": [ + { + "AvailabilityZones": [ + { + "SubnetId": "subnet-8360a9e7", + "ZoneName": "us-west-2a" + }, + { + "SubnetId": "subnet-b7d581c0", + "ZoneName": "us-west-2b" + } + ], + "CanonicalHostedZoneId": "Z2P70J7EXAMPLE", + "CreatedTime": "2016-03-25T21:26:12.920Z", + "DNSName": "my-load-balancer-424835706.us-west-2.elb.amazonaws.com", + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "LoadBalancerName": "my-load-balancer", + "Scheme": "internet-facing", + "SecurityGroups": [ + "sg-5943793c" + ], + "State": { + "Code": "active" + }, + "Type": "application", + "VpcId": "vpc-3ac0fb5f" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified load balancer.", + "id": "elbv2-describe-load-balancers-1", + "title": "To describe a load balancer" + } + ], + "DescribeRules": [ + { + "input": { + "RuleArns": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2/9683b2d02a6cabee" + ] + }, + "output": { + "Rules": [ + { + "Actions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "Conditions": [ + { + "Field": "path-pattern", + "Values": [ + "/img/*" + ] + } + ], + "IsDefault": false, + "Priority": "10", + "RuleArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2/9683b2d02a6cabee" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified rule.", + "id": "elbv2-describe-rules-1", + "title": "To describe a rule" + } + ], + "DescribeSSLPolicies": [ + { + "input": { + "Names": [ + "ELBSecurityPolicy-2015-05" + ] + }, + "output": { + "SslPolicies": [ + { + "Ciphers": [ + { + "Name": "ECDHE-ECDSA-AES128-GCM-SHA256", + "Priority": 1 + }, + { + "Name": "ECDHE-RSA-AES128-GCM-SHA256", + "Priority": 2 + }, + { + "Name": "ECDHE-ECDSA-AES128-SHA256", + "Priority": 3 + }, + { + "Name": "ECDHE-RSA-AES128-SHA256", + "Priority": 4 + }, + { + "Name": "ECDHE-ECDSA-AES128-SHA", + "Priority": 5 + }, + { + "Name": "ECDHE-RSA-AES128-SHA", + "Priority": 6 + }, + { + "Name": "DHE-RSA-AES128-SHA", + "Priority": 7 + }, + { + "Name": "ECDHE-ECDSA-AES256-GCM-SHA384", + "Priority": 8 + }, + { + "Name": "ECDHE-RSA-AES256-GCM-SHA384", + "Priority": 9 + }, + { + "Name": "ECDHE-ECDSA-AES256-SHA384", + "Priority": 10 + }, + { + "Name": "ECDHE-RSA-AES256-SHA384", + "Priority": 11 + }, + { + "Name": "ECDHE-RSA-AES256-SHA", + "Priority": 12 + }, + { + "Name": "ECDHE-ECDSA-AES256-SHA", + "Priority": 13 + }, + { + "Name": "AES128-GCM-SHA256", + "Priority": 14 + }, + { + "Name": "AES128-SHA256", + "Priority": 15 + }, + { + "Name": "AES128-SHA", + "Priority": 16 + }, + { + "Name": "AES256-GCM-SHA384", + "Priority": 17 + }, + { + "Name": "AES256-SHA256", + "Priority": 18 + }, + { + "Name": "AES256-SHA", + "Priority": 19 + } + ], + "Name": "ELBSecurityPolicy-2015-05", + "SslProtocols": [ + "TLSv1", + "TLSv1.1", + "TLSv1.2" + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified policy used for SSL negotiation.", + "id": "elbv2-describe-ssl-policies-1", + "title": "To describe a policy used for SSL negotiation" + } + ], + "DescribeTags": [ + { + "input": { + "ResourceArns": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + ] + }, + "output": { + "TagDescriptions": [ + { + "ResourceArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "Tags": [ + { + "Key": "project", + "Value": "lima" + }, + { + "Key": "department", + "Value": "digital-media" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the tags assigned to the specified load balancer.", + "id": "elbv2-describe-tags-1", + "title": "To describe the tags assigned to a load balancer" + } + ], + "DescribeTargetGroupAttributes": [ + { + "input": { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" + }, + "output": { + "Attributes": [ + { + "Key": "stickiness.enabled", + "Value": "false" + }, + { + "Key": "deregistration_delay.timeout_seconds", + "Value": "300" + }, + { + "Key": "stickiness.type", + "Value": "lb_cookie" + }, + { + "Key": "stickiness.lb_cookie.duration_seconds", + "Value": "86400" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the attributes of the specified target group.", + "id": "elbv2-describe-target-group-attributes-1", + "title": "To describe target group attributes" + } + ], + "DescribeTargetGroups": [ + { + "input": { + "TargetGroupArns": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" + ] + }, + "output": { + "TargetGroups": [ + { + "HealthCheckIntervalSeconds": 30, + "HealthCheckPath": "/", + "HealthCheckPort": "traffic-port", + "HealthCheckProtocol": "HTTP", + "HealthCheckTimeoutSeconds": 5, + "HealthyThresholdCount": 5, + "LoadBalancerArns": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + ], + "Matcher": { + "HttpCode": "200" + }, + "Port": 80, + "Protocol": "HTTP", + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "TargetGroupName": "my-targets", + "UnhealthyThresholdCount": 2, + "VpcId": "vpc-3ac0fb5f" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the specified target group.", + "id": "elbv2-describe-target-groups-1", + "title": "To describe a target group" + } + ], + "DescribeTargetHealth": [ + { + "input": { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" + }, + "output": { + "TargetHealthDescriptions": [ + { + "Target": { + "Id": "i-0f76fade", + "Port": 80 + }, + "TargetHealth": { + "Description": "Given target group is not configured to receive traffic from ELB", + "Reason": "Target.NotInUse", + "State": "unused" + } + }, + { + "HealthCheckPort": "80", + "Target": { + "Id": "i-0f76fade", + "Port": 80 + }, + "TargetHealth": { + "State": "healthy" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the health of the targets for the specified target group. One target is healthy but the other is not specified in an action, so it can't receive traffic from the load balancer.", + "id": "elbv2-describe-target-health-1", + "title": "To describe the health of the targets for a target group" + }, + { + "input": { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Targets": [ + { + "Id": "i-0f76fade", + "Port": 80 + } + ] + }, + "output": { + "TargetHealthDescriptions": [ + { + "HealthCheckPort": "80", + "Target": { + "Id": "i-0f76fade", + "Port": 80 + }, + "TargetHealth": { + "State": "healthy" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example describes the health of the specified target. This target is healthy.", + "id": "elbv2-describe-target-health-2", + "title": "To describe the health of a target" + } + ], + "ModifyListener": [ + { + "input": { + "DefaultActions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-new-targets/2453ed029918f21f", + "Type": "forward" + } + ], + "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2" + }, + "output": { + "Listeners": [ + { + "DefaultActions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-new-targets/2453ed029918f21f", + "Type": "forward" + } + ], + "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2", + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "Port": 80, + "Protocol": "HTTP" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example changes the default action for the specified listener.", + "id": "elbv2-modify-listener-1", + "title": "To change the default action for a listener" + }, + { + "input": { + "Certificates": [ + { + "CertificateArn": "arn:aws:iam::123456789012:server-certificate/my-new-server-cert" + } + ], + "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/0467ef3c8400ae65" + }, + "output": { + "Listeners": [ + { + "Certificates": [ + { + "CertificateArn": "arn:aws:iam::123456789012:server-certificate/my-new-server-cert" + } + ], + "DefaultActions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/0467ef3c8400ae65", + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "Port": 443, + "Protocol": "HTTPS", + "SslPolicy": "ELBSecurityPolicy-2015-05" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example changes the server certificate for the specified HTTPS listener.", + "id": "elbv2-modify-listener-2", + "title": "To change the server certificate" + } + ], + "ModifyLoadBalancerAttributes": [ + { + "input": { + "Attributes": [ + { + "Key": "deletion_protection.enabled", + "Value": "true" + } + ], + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + }, + "output": { + "Attributes": [ + { + "Key": "deletion_protection.enabled", + "Value": "true" + }, + { + "Key": "access_logs.s3.enabled", + "Value": "false" + }, + { + "Key": "idle_timeout.timeout_seconds", + "Value": "60" + }, + { + "Key": "access_logs.s3.prefix", + "Value": "" + }, + { + "Key": "access_logs.s3.bucket", + "Value": "" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables deletion protection for the specified load balancer.", + "id": "elbv2-modify-load-balancer-attributes-1", + "title": "To enable deletion protection" + }, + { + "input": { + "Attributes": [ + { + "Key": "idle_timeout.timeout_seconds", + "Value": "30" + } + ], + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + }, + "output": { + "Attributes": [ + { + "Key": "idle_timeout.timeout_seconds", + "Value": "30" + }, + { + "Key": "access_logs.s3.enabled", + "Value": "false" + }, + { + "Key": "access_logs.s3.prefix", + "Value": "" + }, + { + "Key": "deletion_protection.enabled", + "Value": "true" + }, + { + "Key": "access_logs.s3.bucket", + "Value": "" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example changes the idle timeout value for the specified load balancer.", + "id": "elbv2-modify-load-balancer-attributes-2", + "title": "To change the idle timeout" + }, + { + "input": { + "Attributes": [ + { + "Key": "access_logs.s3.enabled", + "Value": "true" + }, + { + "Key": "access_logs.s3.bucket", + "Value": "my-loadbalancer-logs" + }, + { + "Key": "access_logs.s3.prefix", + "Value": "myapp" + } + ], + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + }, + "output": { + "Attributes": [ + { + "Key": "access_logs.s3.enabled", + "Value": "true" + }, + { + "Key": "access_logs.s3.bucket", + "Value": "my-load-balancer-logs" + }, + { + "Key": "access_logs.s3.prefix", + "Value": "myapp" + }, + { + "Key": "idle_timeout.timeout_seconds", + "Value": "60" + }, + { + "Key": "deletion_protection.enabled", + "Value": "false" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables access logs for the specified load balancer. Note that the S3 bucket must exist in the same region as the load balancer and must have a policy attached that grants access to the Elastic Load Balancing service.", + "id": "elbv2-modify-load-balancer-attributes-3", + "title": "To enable access logs" + } + ], + "ModifyRule": [ + { + "input": { + "Conditions": [ + { + "Field": "path-pattern", + "Values": [ + "/images/*" + ] + } + ], + "RuleArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2/9683b2d02a6cabee" + }, + "output": { + "Rules": [ + { + "Actions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "Conditions": [ + { + "Field": "path-pattern", + "Values": [ + "/images/*" + ] + } + ], + "IsDefault": false, + "Priority": "10", + "RuleArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2/9683b2d02a6cabee" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example modifies the condition for the specified rule.", + "id": "elbv2-modify-rule-1", + "title": "To modify a rule" + } + ], + "ModifyTargetGroup": [ + { + "input": { + "HealthCheckPort": "443", + "HealthCheckProtocol": "HTTPS", + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-https-targets/2453ed029918f21f" + }, + "output": { + "TargetGroups": [ + { + "HealthCheckIntervalSeconds": 30, + "HealthCheckPort": "443", + "HealthCheckProtocol": "HTTPS", + "HealthCheckTimeoutSeconds": 5, + "HealthyThresholdCount": 5, + "LoadBalancerArns": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + ], + "Matcher": { + "HttpCode": "200" + }, + "Port": 443, + "Protocol": "HTTPS", + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-https-targets/2453ed029918f21f", + "TargetGroupName": "my-https-targets", + "UnhealthyThresholdCount": 2, + "VpcId": "vpc-3ac0fb5f" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example changes the configuration of the health checks used to evaluate the health of the targets for the specified target group.", + "id": "elbv2-modify-target-group-1", + "title": "To modify the health check configuration for a target group" + } + ], + "ModifyTargetGroupAttributes": [ + { + "input": { + "Attributes": [ + { + "Key": "deregistration_delay.timeout_seconds", + "Value": "600" + } + ], + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" + }, + "output": { + "Attributes": [ + { + "Key": "stickiness.enabled", + "Value": "false" + }, + { + "Key": "deregistration_delay.timeout_seconds", + "Value": "600" + }, + { + "Key": "stickiness.type", + "Value": "lb_cookie" + }, + { + "Key": "stickiness.lb_cookie.duration_seconds", + "Value": "86400" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example sets the deregistration delay timeout to the specified value for the specified target group.", + "id": "elbv2-modify-target-group-attributes-1", + "title": "To modify the deregistration delay timeout" + } + ], + "RegisterTargets": [ + { + "input": { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Targets": [ + { + "Id": "i-80c8dd94" + }, + { + "Id": "i-ceddcd4d" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example registers the specified instances with the specified target group.", + "id": "elbv2-register-targets-1", + "title": "To register targets with a target group" + }, + { + "input": { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-new-targets/3bb63f11dfb0faf9", + "Targets": [ + { + "Id": "i-80c8dd94", + "Port": 80 + }, + { + "Id": "i-80c8dd94", + "Port": 766 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example registers the specified instance with the specified target group using multiple ports. This enables you to register ECS containers on the same instance as targets in the target group.", + "id": "elbv2-register-targets-2", + "title": "To register targets with a target group using port overrides" + } + ], + "RemoveTags": [ + { + "input": { + "ResourceArns": [ + "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188" + ], + "TagKeys": [ + "project", + "department" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example removes the specified tags from the specified load balancer.", + "id": "elbv2-remove-tags-1", + "title": "To remove tags from a load balancer" + } + ], + "SetRulePriorities": [ + { + "input": { + "RulePriorities": [ + { + "Priority": 5, + "RuleArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2/1291d13826f405c3" + } + ] + }, + "output": { + "Rules": [ + { + "Actions": [ + { + "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067", + "Type": "forward" + } + ], + "Conditions": [ + { + "Field": "path-pattern", + "Values": [ + "/img/*" + ] + } + ], + "IsDefault": false, + "Priority": "5", + "RuleArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2/1291d13826f405c3" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example sets the priority of the specified rule.", + "id": "elbv2-set-rule-priorities-1", + "title": "To set the rule priority" + } + ], + "SetSecurityGroups": [ + { + "input": { + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "SecurityGroups": [ + "sg-5943793c" + ] + }, + "output": { + "SecurityGroupIds": [ + "sg-5943793c" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example associates the specified security group with the specified load balancer.", + "id": "elbv2-set-security-groups-1", + "title": "To associate a security group with a load balancer" + } + ], + "SetSubnets": [ + { + "input": { + "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188", + "Subnets": [ + "subnet-8360a9e7", + "subnet-b7d581c0" + ] + }, + "output": { + "AvailabilityZones": [ + { + "SubnetId": "subnet-8360a9e7", + "ZoneName": "us-west-2a" + }, + { + "SubnetId": "subnet-b7d581c0", + "ZoneName": "us-west-2b" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example enables the Availability Zones for the specified subnets for the specified load balancer.", + "id": "elbv2-set-subnets-1", + "title": "To enable Availability Zones for a load balancer" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/paginators-1.json new file mode 100644 index 00000000..4521f5c2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/paginators-1.json @@ -0,0 +1,46 @@ +{ + "pagination": { + "DescribeLoadBalancers": { + "input_token": "Marker", + "output_token": "NextMarker", + "limit_key": "PageSize", + "result_key": "LoadBalancers" + }, + "DescribeTargetGroups": { + "input_token": "Marker", + "output_token": "NextMarker", + "limit_key": "PageSize", + "result_key": "TargetGroups" + }, + "DescribeListeners": { + "input_token": "Marker", + "output_token": "NextMarker", + "limit_key": "PageSize", + "result_key": "Listeners" + }, + "DescribeAccountLimits": { + "input_token": "Marker", + "limit_key": "PageSize", + "output_token": "NextMarker", + "result_key": "Limits" + }, + "DescribeListenerCertificates": { + "input_token": "Marker", + "limit_key": "PageSize", + "output_token": "NextMarker", + "result_key": "Certificates" + }, + "DescribeRules": { + "input_token": "Marker", + "limit_key": "PageSize", + "output_token": "NextMarker", + "result_key": "Rules" + }, + "DescribeSSLPolicies": { + "input_token": "Marker", + "limit_key": "PageSize", + "output_token": "NextMarker", + "result_key": "SslPolicies" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/service-2.json.gz new file mode 100644 index 00000000..7007b781 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/waiters-2.json new file mode 100644 index 00000000..9f3d77d8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/elbv2/2015-12-01/waiters-2.json @@ -0,0 +1,100 @@ +{ + "version": 2, + "waiters": { + "LoadBalancerExists": { + "delay": 15, + "operation": "DescribeLoadBalancers", + "maxAttempts": 40, + "acceptors": [ + { + "matcher": "status", + "expected": 200, + "state": "success" + }, + { + "matcher": "error", + "expected": "LoadBalancerNotFound", + "state": "retry" + } + ] + }, + "LoadBalancerAvailable": { + "delay": 15, + "operation": "DescribeLoadBalancers", + "maxAttempts": 40, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "LoadBalancers[].State.Code", + "expected": "active" + }, + { + "state": "retry", + "matcher": "pathAny", + "argument": "LoadBalancers[].State.Code", + "expected": "provisioning" + }, + { + "state": "retry", + "matcher": "error", + "expected": "LoadBalancerNotFound" + } + ] + }, + "LoadBalancersDeleted": { + "delay": 15, + "operation": "DescribeLoadBalancers", + "maxAttempts": 40, + "acceptors": [ + { + "state": "retry", + "matcher": "pathAll", + "argument": "LoadBalancers[].State.Code", + "expected": "active" + }, + { + "matcher": "error", + "expected": "LoadBalancerNotFound", + "state": "success" + } + ] + }, + "TargetInService":{ + "delay":15, + "maxAttempts":40, + "operation":"DescribeTargetHealth", + "acceptors":[ + { + "argument":"TargetHealthDescriptions[].TargetHealth.State", + "expected":"healthy", + "matcher":"pathAll", + "state":"success" + }, + { + "matcher": "error", + "expected": "InvalidInstance", + "state": "retry" + } + ] + }, + "TargetDeregistered": { + "delay": 15, + "maxAttempts": 40, + "operation": "DescribeTargetHealth", + "acceptors": [ + { + "matcher": "error", + "expected": "InvalidTarget", + "state": "success" + }, + { + "argument":"TargetHealthDescriptions[].TargetHealth.State", + "expected":"unused", + "matcher":"pathAll", + "state":"success" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0056d878 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/paginators-1.json new file mode 100644 index 00000000..f21b1ed0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListJobRuns": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "jobRuns" + }, + "ListManagedEndpoints": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "endpoints" + }, + "ListVirtualClusters": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "virtualClusters" + }, + "ListJobTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "templates" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/service-2.json.gz new file mode 100644 index 00000000..70e4b0c4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-containers/2020-10-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr-serverless/2021-07-13/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-serverless/2021-07-13/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1b6a29ad Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-serverless/2021-07-13/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr-serverless/2021-07-13/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-serverless/2021-07-13/paginators-1.json new file mode 100644 index 00000000..7193d855 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-serverless/2021-07-13/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListApplications": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "applications" + }, + "ListJobRuns": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "jobRuns" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr-serverless/2021-07-13/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-serverless/2021-07-13/service-2.json.gz new file mode 100644 index 00000000..52c0cbde Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/emr-serverless/2021-07-13/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..20d25074 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/paginators-1.json new file mode 100644 index 00000000..447759f1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/paginators-1.json @@ -0,0 +1,54 @@ +{ + "pagination": { + "ListBootstrapActions": { + "input_token": "Marker", + "output_token": "Marker", + "result_key": "BootstrapActions" + }, + "ListClusters": { + "input_token": "Marker", + "output_token": "Marker", + "result_key": "Clusters" + }, + "ListInstanceGroups": { + "input_token": "Marker", + "output_token": "Marker", + "result_key": "InstanceGroups" + }, + "ListInstances": { + "input_token": "Marker", + "output_token": "Marker", + "result_key": "Instances" + }, + "ListSteps": { + "input_token": "Marker", + "output_token": "Marker", + "result_key": "Steps" + }, + "ListInstanceFleets": { + "input_token": "Marker", + "output_token": "Marker", + "result_key": "InstanceFleets" + }, + "ListSecurityConfigurations": { + "input_token": "Marker", + "output_token": "Marker", + "result_key": "SecurityConfigurations" + }, + "ListNotebookExecutions": { + "input_token": "Marker", + "output_token": "Marker", + "result_key": "NotebookExecutions" + }, + "ListStudioSessionMappings": { + "input_token": "Marker", + "output_token": "Marker", + "result_key": "SessionMappings" + }, + "ListStudios": { + "input_token": "Marker", + "output_token": "Marker", + "result_key": "Studios" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/service-2.json.gz new file mode 100644 index 00000000..09aeb5b7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/waiters-2.json new file mode 100644 index 00000000..abba8c3c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/emr/2009-03-31/waiters-2.json @@ -0,0 +1,86 @@ +{ + "version": 2, + "waiters": { + "ClusterRunning": { + "delay": 30, + "operation": "DescribeCluster", + "maxAttempts": 60, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "Cluster.Status.State", + "expected": "RUNNING" + }, + { + "state": "success", + "matcher": "path", + "argument": "Cluster.Status.State", + "expected": "WAITING" + }, + { + "state": "failure", + "matcher": "path", + "argument": "Cluster.Status.State", + "expected": "TERMINATING" + }, + { + "state": "failure", + "matcher": "path", + "argument": "Cluster.Status.State", + "expected": "TERMINATED" + }, + { + "state": "failure", + "matcher": "path", + "argument": "Cluster.Status.State", + "expected": "TERMINATED_WITH_ERRORS" + } + ] + }, + "StepComplete": { + "delay": 30, + "operation": "DescribeStep", + "maxAttempts": 60, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "Step.Status.State", + "expected": "COMPLETED" + }, + { + "state": "failure", + "matcher": "path", + "argument": "Step.Status.State", + "expected": "FAILED" + }, + { + "state": "failure", + "matcher": "path", + "argument": "Step.Status.State", + "expected": "CANCELLED" + } + ] + }, + "ClusterTerminated": { + "delay": 30, + "operation": "DescribeCluster", + "maxAttempts": 60, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "Cluster.Status.State", + "expected": "TERMINATED" + }, + { + "state": "failure", + "matcher": "path", + "argument": "Cluster.Status.State", + "expected": "TERMINATED_WITH_ERRORS" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/endpoints.json b/dbtzin/lib/python3.8/site-packages/botocore/data/endpoints.json new file mode 100644 index 00000000..56197ac1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/endpoints.json @@ -0,0 +1,27597 @@ +{ + "partitions" : [ { + "defaults" : { + "hostname" : "{service}.{region}.{dnsSuffix}", + "protocols" : [ "https" ], + "signatureVersions" : [ "v4" ], + "variants" : [ { + "dnsSuffix" : "amazonaws.com", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + }, { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "dualstack", "fips" ] + }, { + "dnsSuffix" : "api.aws", + "hostname" : "{service}.{region}.{dnsSuffix}", + "tags" : [ "dualstack" ] + } ] + }, + "dnsSuffix" : "amazonaws.com", + "partition" : "aws", + "partitionName" : "AWS Standard", + "regionRegex" : "^(us|eu|ap|sa|ca|me|af|il)\\-\\w+\\-\\d+$", + "regions" : { + "af-south-1" : { + "description" : "Africa (Cape Town)" + }, + "ap-east-1" : { + "description" : "Asia Pacific (Hong Kong)" + }, + "ap-northeast-1" : { + "description" : "Asia Pacific (Tokyo)" + }, + "ap-northeast-2" : { + "description" : "Asia Pacific (Seoul)" + }, + "ap-northeast-3" : { + "description" : "Asia Pacific (Osaka)" + }, + "ap-south-1" : { + "description" : "Asia Pacific (Mumbai)" + }, + "ap-south-2" : { + "description" : "Asia Pacific (Hyderabad)" + }, + "ap-southeast-1" : { + "description" : "Asia Pacific (Singapore)" + }, + "ap-southeast-2" : { + "description" : "Asia Pacific (Sydney)" + }, + "ap-southeast-3" : { + "description" : "Asia Pacific (Jakarta)" + }, + "ap-southeast-4" : { + "description" : "Asia Pacific (Melbourne)" + }, + "ca-central-1" : { + "description" : "Canada (Central)" + }, + "ca-west-1" : { + "description" : "Canada West (Calgary)" + }, + "eu-central-1" : { + "description" : "Europe (Frankfurt)" + }, + "eu-central-2" : { + "description" : "Europe (Zurich)" + }, + "eu-north-1" : { + "description" : "Europe (Stockholm)" + }, + "eu-south-1" : { + "description" : "Europe (Milan)" + }, + "eu-south-2" : { + "description" : "Europe (Spain)" + }, + "eu-west-1" : { + "description" : "Europe (Ireland)" + }, + "eu-west-2" : { + "description" : "Europe (London)" + }, + "eu-west-3" : { + "description" : "Europe (Paris)" + }, + "il-central-1" : { + "description" : "Israel (Tel Aviv)" + }, + "me-central-1" : { + "description" : "Middle East (UAE)" + }, + "me-south-1" : { + "description" : "Middle East (Bahrain)" + }, + "sa-east-1" : { + "description" : "South America (Sao Paulo)" + }, + "us-east-1" : { + "description" : "US East (N. Virginia)" + }, + "us-east-2" : { + "description" : "US East (Ohio)" + }, + "us-west-1" : { + "description" : "US West (N. California)" + }, + "us-west-2" : { + "description" : "US West (Oregon)" + } + }, + "services" : { + "a4b" : { + "endpoints" : { + "us-east-1" : { } + } + }, + "access-analyzer" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "access-analyzer-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "access-analyzer-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "access-analyzer-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "access-analyzer-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "access-analyzer-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "access-analyzer-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "access-analyzer-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "access-analyzer-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "access-analyzer-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "access-analyzer-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "account" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "account.us-east-1.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "acm" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "acm-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "acm-fips.ca-central-1.amazonaws.com" + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "acm-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1-fips" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "acm-fips.ca-west-1.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "acm-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "acm-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "acm-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "acm-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "acm-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "acm-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "acm-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "acm-fips.us-west-2.amazonaws.com" + } + } + }, + "acm-pca" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "acm-pca-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "acm-pca-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "acm-pca-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "acm-pca-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "acm-pca-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "acm-pca-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "acm-pca-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "acm-pca-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "acm-pca-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "acm-pca-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "agreement-marketplace" : { + "endpoints" : { + "us-east-1" : { } + } + }, + "airflow" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "amplify" : { + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "amplifybackend" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "amplifyuibuilder" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "aoss" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "api.detective" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "api.detective-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "api.detective-fips.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "api.detective-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "api.detective-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "api.detective-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "api.detective-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "api.detective-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "api.detective-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "api.detective-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "api.detective-fips.us-west-2.amazonaws.com" + } + } + }, + "api.ecr" : { + "defaults" : { + "variants" : [ { + "hostname" : "ecr-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "hostname" : "api.ecr.af-south-1.amazonaws.com" + }, + "ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "hostname" : "api.ecr.ap-east-1.amazonaws.com" + }, + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "api.ecr.ap-northeast-1.amazonaws.com" + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "api.ecr.ap-northeast-2.amazonaws.com" + }, + "ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "hostname" : "api.ecr.ap-northeast-3.amazonaws.com" + }, + "ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "api.ecr.ap-south-1.amazonaws.com" + }, + "ap-south-2" : { + "credentialScope" : { + "region" : "ap-south-2" + }, + "hostname" : "api.ecr.ap-south-2.amazonaws.com" + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "api.ecr.ap-southeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "api.ecr.ap-southeast-2.amazonaws.com" + }, + "ap-southeast-3" : { + "credentialScope" : { + "region" : "ap-southeast-3" + }, + "hostname" : "api.ecr.ap-southeast-3.amazonaws.com" + }, + "ap-southeast-4" : { + "credentialScope" : { + "region" : "ap-southeast-4" + }, + "hostname" : "api.ecr.ap-southeast-4.amazonaws.com" + }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "api.ecr.ca-central-1.amazonaws.com" + }, + "ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "hostname" : "api.ecr.ca-west-1.amazonaws.com" + }, + "dkr-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "ecr-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "dkr-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "ecr-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "dkr-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "ecr-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "dkr-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "ecr-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "api.ecr.eu-central-1.amazonaws.com" + }, + "eu-central-2" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "hostname" : "api.ecr.eu-central-2.amazonaws.com" + }, + "eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "hostname" : "api.ecr.eu-north-1.amazonaws.com" + }, + "eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "hostname" : "api.ecr.eu-south-1.amazonaws.com" + }, + "eu-south-2" : { + "credentialScope" : { + "region" : "eu-south-2" + }, + "hostname" : "api.ecr.eu-south-2.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "api.ecr.eu-west-1.amazonaws.com" + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "api.ecr.eu-west-2.amazonaws.com" + }, + "eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "hostname" : "api.ecr.eu-west-3.amazonaws.com" + }, + "fips-dkr-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-east-1.amazonaws.com" + }, + "fips-dkr-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-east-2.amazonaws.com" + }, + "fips-dkr-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-west-1.amazonaws.com" + }, + "fips-dkr-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-west-2.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "hostname" : "api.ecr.il-central-1.amazonaws.com" + }, + "me-central-1" : { + "credentialScope" : { + "region" : "me-central-1" + }, + "hostname" : "api.ecr.me-central-1.amazonaws.com" + }, + "me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "hostname" : "api.ecr.me-south-1.amazonaws.com" + }, + "sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "api.ecr.sa-east-1.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "api.ecr.us-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "ecr-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "api.ecr.us-east-2.amazonaws.com", + "variants" : [ { + "hostname" : "ecr-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "api.ecr.us-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "ecr-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "api.ecr.us-west-2.amazonaws.com", + "variants" : [ { + "hostname" : "ecr-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "api.ecr-public" : { + "endpoints" : { + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "api.ecr-public.us-east-1.amazonaws.com" + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "api.ecr-public.us-west-2.amazonaws.com" + } + } + }, + "api.elastic-inference" : { + "endpoints" : { + "ap-northeast-1" : { + "hostname" : "api.elastic-inference.ap-northeast-1.amazonaws.com" + }, + "ap-northeast-2" : { + "hostname" : "api.elastic-inference.ap-northeast-2.amazonaws.com" + }, + "eu-west-1" : { + "hostname" : "api.elastic-inference.eu-west-1.amazonaws.com" + }, + "us-east-1" : { + "hostname" : "api.elastic-inference.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "hostname" : "api.elastic-inference.us-east-2.amazonaws.com" + }, + "us-west-2" : { + "hostname" : "api.elastic-inference.us-west-2.amazonaws.com" + } + } + }, + "api.fleethub.iot" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "api.fleethub.iot-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "api.fleethub.iot-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "api.fleethub.iot-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "api.fleethub.iot-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "api.fleethub.iot-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "api.fleethub.iot-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "api.fleethub.iot-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "api.fleethub.iot-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "api.iotdeviceadvisor" : { + "endpoints" : { + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "api.iotdeviceadvisor.ap-northeast-1.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "api.iotdeviceadvisor.eu-west-1.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "api.iotdeviceadvisor.us-east-1.amazonaws.com" + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "api.iotdeviceadvisor.us-west-2.amazonaws.com" + } + } + }, + "api.iotwireless" : { + "endpoints" : { + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "api.iotwireless.ap-northeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "api.iotwireless.ap-southeast-2.amazonaws.com" + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "api.iotwireless.eu-central-1.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "api.iotwireless.eu-west-1.amazonaws.com" + }, + "sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "api.iotwireless.sa-east-1.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "api.iotwireless.us-east-1.amazonaws.com" + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "api.iotwireless.us-west-2.amazonaws.com" + } + } + }, + "api.mediatailor" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "api.pricing" : { + "defaults" : { + "credentialScope" : { + "service" : "pricing" + } + }, + "endpoints" : { + "ap-south-1" : { }, + "eu-central-1" : { }, + "us-east-1" : { } + } + }, + "api.sagemaker" : { + "defaults" : { + "variants" : [ { + "hostname" : "api-fips.sagemaker.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "api-fips.sagemaker.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "api-fips.sagemaker.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "api-fips.sagemaker.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "api-fips.sagemaker.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "api-fips.sagemaker.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "api-fips.sagemaker.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "api-fips.sagemaker.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "api-fips.sagemaker.us-west-2.amazonaws.com" + } + } + }, + "api.tunneling.iot" : { + "defaults" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-west-2.amazonaws.com" + }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "apigateway" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "apigateway-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "apigateway-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "apigateway-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "apigateway-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "apigateway-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "apigateway-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "apigateway-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "apigateway-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "apigateway-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "apigateway-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "apigateway-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "apigateway-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "app-integrations" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "appconfig" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "appconfigdata" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "appflow" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "appflow-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "appflow-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "appflow-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "appflow-fips.us-west-2.amazonaws.com" + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "appflow-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "appflow-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "appflow-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "appflow-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "application-autoscaling" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "applicationinsights" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "appmesh" : { + "endpoints" : { + "af-south-1" : { + "variants" : [ { + "hostname" : "appmesh.af-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-east-1" : { + "variants" : [ { + "hostname" : "appmesh.ap-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-1" : { + "variants" : [ { + "hostname" : "appmesh.ap-northeast-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "hostname" : "appmesh.ap-northeast-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-3" : { + "variants" : [ { + "hostname" : "appmesh.ap-northeast-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "appmesh.ap-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-1" : { + "variants" : [ { + "hostname" : "appmesh.ap-southeast-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-2" : { + "variants" : [ { + "hostname" : "appmesh.ap-southeast-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-3" : { + "variants" : [ { + "hostname" : "appmesh.ap-southeast-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "appmesh-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "appmesh-fips.ca-central-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "appmesh.ca-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "appmesh-fips.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { + "variants" : [ { + "hostname" : "appmesh.eu-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-north-1" : { + "variants" : [ { + "hostname" : "appmesh.eu-north-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-1" : { + "variants" : [ { + "hostname" : "appmesh.eu-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-1" : { + "variants" : [ { + "hostname" : "appmesh.eu-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "hostname" : "appmesh.eu-west-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "hostname" : "appmesh.eu-west-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "il-central-1" : { + "variants" : [ { + "hostname" : "appmesh.il-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "me-south-1" : { + "variants" : [ { + "hostname" : "appmesh.me-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "sa-east-1" : { + "variants" : [ { + "hostname" : "appmesh.sa-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "appmesh-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "appmesh-fips.us-east-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "appmesh.us-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "appmesh-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "appmesh-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "appmesh-fips.us-east-2.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "appmesh.us-east-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "appmesh-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "appmesh-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "appmesh-fips.us-west-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "appmesh.us-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "appmesh-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "appmesh-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "appmesh-fips.us-west-2.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "appmesh.us-west-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "appmesh-fips.us-west-2.amazonaws.com" + } + } + }, + "apprunner" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "apprunner-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "apprunner-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "apprunner-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "apprunner-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "apprunner-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "apprunner-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "appstream2" : { + "defaults" : { + "credentialScope" : { + "service" : "appstream" + }, + "protocols" : [ "https" ] + }, + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "appstream2-fips.us-west-2.amazonaws.com" + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "appstream2-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "appstream2-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { }, + "us-west-2" : { + "variants" : [ { + "hostname" : "appstream2-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "appstream2-fips.us-west-2.amazonaws.com" + } + } + }, + "appsync" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "aps" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "arc-zonal-shift" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "athena" : { + "endpoints" : { + "af-south-1" : { + "variants" : [ { + "hostname" : "athena.af-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-east-1" : { + "variants" : [ { + "hostname" : "athena.ap-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-1" : { + "variants" : [ { + "hostname" : "athena.ap-northeast-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "hostname" : "athena.ap-northeast-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-3" : { + "variants" : [ { + "hostname" : "athena.ap-northeast-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "athena.ap-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-2" : { + "variants" : [ { + "hostname" : "athena.ap-south-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-1" : { + "variants" : [ { + "hostname" : "athena.ap-southeast-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-2" : { + "variants" : [ { + "hostname" : "athena.ap-southeast-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-3" : { + "variants" : [ { + "hostname" : "athena.ap-southeast-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-4" : { + "variants" : [ { + "hostname" : "athena.ap-southeast-4.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "athena.ca-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-central-1" : { + "variants" : [ { + "hostname" : "athena.eu-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-central-2" : { + "variants" : [ { + "hostname" : "athena.eu-central-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-north-1" : { + "variants" : [ { + "hostname" : "athena.eu-north-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-1" : { + "variants" : [ { + "hostname" : "athena.eu-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-2" : { + "variants" : [ { + "hostname" : "athena.eu-south-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-1" : { + "variants" : [ { + "hostname" : "athena.eu-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "hostname" : "athena.eu-west-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "hostname" : "athena.eu-west-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "athena-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "athena-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "athena-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "athena-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { + "variants" : [ { + "hostname" : "athena.il-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "me-central-1" : { + "variants" : [ { + "hostname" : "athena.me-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "me-south-1" : { + "variants" : [ { + "hostname" : "athena.me-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "sa-east-1" : { + "variants" : [ { + "hostname" : "athena.sa-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "athena-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "athena-fips.us-east-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "athena.us-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "athena-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "athena-fips.us-east-2.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "athena.us-east-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "athena-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "athena-fips.us-west-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "athena.us-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "athena-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "athena-fips.us-west-2.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "athena.us-west-2.api.aws", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "auditmanager" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "autoscaling" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "autoscaling-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "autoscaling-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "autoscaling-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "autoscaling-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "autoscaling-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "autoscaling-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "autoscaling-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "autoscaling-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "autoscaling-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "autoscaling-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "autoscaling-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "autoscaling-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "autoscaling-plans" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "backup" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "backup-gateway" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "backupstorage" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "batch" : { + "defaults" : { + "variants" : [ { + "hostname" : "fips.batch.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "fips.batch.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "fips.batch.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "fips.batch.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "fips.batch.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "fips.batch.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "fips.batch.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "fips.batch.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "fips.batch.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "bedrock" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "bedrock-ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "bedrock.ap-northeast-1.amazonaws.com" + }, + "bedrock-ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "bedrock.ap-southeast-1.amazonaws.com" + }, + "bedrock-eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "bedrock.eu-central-1.amazonaws.com" + }, + "bedrock-fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "bedrock-fips.us-east-1.amazonaws.com" + }, + "bedrock-fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "bedrock-fips.us-west-2.amazonaws.com" + }, + "bedrock-runtime-ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "bedrock-runtime.ap-northeast-1.amazonaws.com" + }, + "bedrock-runtime-ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "bedrock-runtime.ap-southeast-1.amazonaws.com" + }, + "bedrock-runtime-eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "bedrock-runtime.eu-central-1.amazonaws.com" + }, + "bedrock-runtime-fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "bedrock-runtime-fips.us-east-1.amazonaws.com" + }, + "bedrock-runtime-fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "bedrock-runtime-fips.us-west-2.amazonaws.com" + }, + "bedrock-runtime-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "bedrock-runtime.us-east-1.amazonaws.com" + }, + "bedrock-runtime-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "bedrock-runtime.us-west-2.amazonaws.com" + }, + "bedrock-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "bedrock.us-east-1.amazonaws.com" + }, + "bedrock-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "bedrock.us-west-2.amazonaws.com" + }, + "eu-central-1" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "billingconductor" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "billingconductor.us-east-1.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "braket" : { + "endpoints" : { + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "budgets" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "budgets.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "cases" : { + "endpoints" : { + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "deprecated" : true + }, + "fips-us-west-2" : { + "deprecated" : true + }, + "us-east-1" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + } + } + }, + "cassandra" : { + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "cassandra-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "cassandra-fips.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "cassandra-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { + "variants" : [ { + "hostname" : "cassandra-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "catalog.marketplace" : { + "endpoints" : { + "us-east-1" : { } + } + }, + "ce" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "ce.us-east-1.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "chime" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "chime.us-east-1.amazonaws.com", + "protocols" : [ "https" ] + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "cleanrooms" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "cloud9" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "cloudcontrolapi" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "cloudcontrolapi-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "cloudcontrolapi-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "cloudcontrolapi-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "cloudcontrolapi-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "cloudcontrolapi-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "cloudcontrolapi-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "cloudcontrolapi-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "cloudcontrolapi-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "cloudcontrolapi-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "cloudcontrolapi-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "cloudcontrolapi-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "cloudcontrolapi-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "clouddirectory" : { + "endpoints" : { + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "cloudformation" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "cloudformation-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "cloudformation-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "cloudformation-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "cloudformation-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "cloudformation-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "cloudformation-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "cloudformation-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "cloudformation-fips.us-west-2.amazonaws.com" + } + } + }, + "cloudfront" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "cloudfront.amazonaws.com", + "protocols" : [ "http", "https" ] + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "cloudhsm" : { + "endpoints" : { + "us-east-1" : { } + } + }, + "cloudhsmv2" : { + "defaults" : { + "credentialScope" : { + "service" : "cloudhsm" + } + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "cloudsearch" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "cloudtrail" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "cloudtrail-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "cloudtrail-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "cloudtrail-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "cloudtrail-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "cloudtrail-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "cloudtrail-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "cloudtrail-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "cloudtrail-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "cloudtrail-data" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "codeartifact" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "codebuild" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "codebuild-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "codebuild-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "codebuild-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "codebuild-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "codebuild-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "codebuild-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "codebuild-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "codebuild-fips.us-west-2.amazonaws.com" + } + } + }, + "codecatalyst" : { + "endpoints" : { + "aws-global" : { + "hostname" : "codecatalyst.global.api.aws" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "codecommit" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "codecommit-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "codecommit-fips.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "codecommit-fips.ca-central-1.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "codecommit-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "codecommit-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "codecommit-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "codecommit-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "codecommit-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "codecommit-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "codecommit-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "codecommit-fips.us-west-2.amazonaws.com" + } + } + }, + "codedeploy" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "codedeploy-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "codedeploy-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "codedeploy-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "codedeploy-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "codedeploy-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "codedeploy-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "codedeploy-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "codedeploy-fips.us-west-2.amazonaws.com" + } + } + }, + "codeguru-reviewer" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "codepipeline" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "codepipeline-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "codepipeline-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "codepipeline-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "codepipeline-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "codepipeline-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "codepipeline-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "codepipeline-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "codepipeline-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "codepipeline-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "codepipeline-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "codestar" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "codestar-connections" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "codestar-notifications" : { + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "cognito-identity" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "cognito-identity-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "cognito-identity-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "cognito-identity-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "cognito-identity-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "cognito-identity-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "cognito-identity-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "cognito-identity-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "cognito-identity-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "cognito-idp" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "cognito-idp-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "cognito-idp-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "cognito-idp-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "cognito-idp-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "cognito-idp-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "cognito-idp-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "cognito-idp-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "cognito-idp-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "cognito-sync" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "comprehend" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "comprehend-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "comprehend-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "comprehend-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "comprehend-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "comprehend-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "comprehend-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "comprehendmedical" : { + "endpoints" : { + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "comprehendmedical-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "comprehendmedical-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "comprehendmedical-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "comprehendmedical-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "comprehendmedical-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "comprehendmedical-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "compute-optimizer" : { + "endpoints" : { + "af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "hostname" : "compute-optimizer.af-south-1.amazonaws.com" + }, + "ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "hostname" : "compute-optimizer.ap-east-1.amazonaws.com" + }, + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "compute-optimizer.ap-northeast-1.amazonaws.com" + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "compute-optimizer.ap-northeast-2.amazonaws.com" + }, + "ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "hostname" : "compute-optimizer.ap-northeast-3.amazonaws.com" + }, + "ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "compute-optimizer.ap-south-1.amazonaws.com" + }, + "ap-south-2" : { + "credentialScope" : { + "region" : "ap-south-2" + }, + "hostname" : "compute-optimizer.ap-south-2.amazonaws.com" + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "compute-optimizer.ap-southeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "compute-optimizer.ap-southeast-2.amazonaws.com" + }, + "ap-southeast-3" : { + "credentialScope" : { + "region" : "ap-southeast-3" + }, + "hostname" : "compute-optimizer.ap-southeast-3.amazonaws.com" + }, + "ap-southeast-4" : { + "credentialScope" : { + "region" : "ap-southeast-4" + }, + "hostname" : "compute-optimizer.ap-southeast-4.amazonaws.com" + }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "compute-optimizer.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "compute-optimizer.eu-central-1.amazonaws.com" + }, + "eu-central-2" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "hostname" : "compute-optimizer.eu-central-2.amazonaws.com" + }, + "eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "hostname" : "compute-optimizer.eu-north-1.amazonaws.com" + }, + "eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "hostname" : "compute-optimizer.eu-south-1.amazonaws.com" + }, + "eu-south-2" : { + "credentialScope" : { + "region" : "eu-south-2" + }, + "hostname" : "compute-optimizer.eu-south-2.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "compute-optimizer.eu-west-1.amazonaws.com" + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "compute-optimizer.eu-west-2.amazonaws.com" + }, + "eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "hostname" : "compute-optimizer.eu-west-3.amazonaws.com" + }, + "il-central-1" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "hostname" : "compute-optimizer.il-central-1.amazonaws.com" + }, + "me-central-1" : { + "credentialScope" : { + "region" : "me-central-1" + }, + "hostname" : "compute-optimizer.me-central-1.amazonaws.com" + }, + "me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "hostname" : "compute-optimizer.me-south-1.amazonaws.com" + }, + "sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "compute-optimizer.sa-east-1.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "compute-optimizer.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "compute-optimizer.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "compute-optimizer.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "compute-optimizer.us-west-2.amazonaws.com" + } + } + }, + "config" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "config-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "config-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "config-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "config-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "config-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "config-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "config-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "config-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "connect" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "connect-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "connect-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "connect-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "connect-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "connect-campaigns" : { + "endpoints" : { + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "connect-campaigns-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "connect-campaigns-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "connect-campaigns-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "connect-campaigns-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "contact-lens" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "controltower" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "controltower-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "controltower-fips.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "controltower-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "controltower-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "controltower-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "controltower-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "controltower-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "controltower-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "controltower-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "controltower-fips.us-west-2.amazonaws.com" + } + } + }, + "cost-optimization-hub" : { + "endpoints" : { + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "cost-optimization-hub.us-east-1.amazonaws.com" + } + } + }, + "cur" : { + "endpoints" : { + "us-east-1" : { } + } + }, + "data-ats.iot" : { + "defaults" : { + "credentialScope" : { + "service" : "iotdata" + }, + "protocols" : [ "https" ] + }, + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "data.iot-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-west-2.amazonaws.com" + }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "data.iot" : { + "defaults" : { + "credentialScope" : { + "service" : "iotdata" + }, + "protocols" : [ "https" ] + }, + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "data.iot-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "data.jobs.iot" : { + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "data.jobs.iot-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "data.jobs.iot-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "data.jobs.iot-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "data.jobs.iot-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "data.jobs.iot-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "data.jobs.iot-fips.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "data.jobs.iot-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "data.jobs.iot-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "data.jobs.iot-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "data.jobs.iot-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "data.mediastore" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "databrew" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "databrew-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "databrew-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "databrew-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "databrew-fips.us-west-2.amazonaws.com" + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "databrew-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "databrew-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "databrew-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "databrew-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "dataexchange" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "datapipeline" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-2" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "datasync" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "datasync-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "datasync-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "datasync-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "datasync-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "datasync-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "datasync-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "datasync-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "datasync-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "datasync-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "datasync-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "datasync-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "datasync-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "datazone" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { + "hostname" : "datazone.af-south-1.api.aws" + }, + "ap-east-1" : { + "hostname" : "datazone.ap-east-1.api.aws" + }, + "ap-northeast-1" : { + "hostname" : "datazone.ap-northeast-1.api.aws" + }, + "ap-northeast-2" : { + "hostname" : "datazone.ap-northeast-2.api.aws" + }, + "ap-northeast-3" : { + "hostname" : "datazone.ap-northeast-3.api.aws" + }, + "ap-south-1" : { + "hostname" : "datazone.ap-south-1.api.aws" + }, + "ap-south-2" : { + "hostname" : "datazone.ap-south-2.api.aws" + }, + "ap-southeast-1" : { + "hostname" : "datazone.ap-southeast-1.api.aws" + }, + "ap-southeast-2" : { + "hostname" : "datazone.ap-southeast-2.api.aws" + }, + "ap-southeast-3" : { + "hostname" : "datazone.ap-southeast-3.api.aws" + }, + "ap-southeast-4" : { + "hostname" : "datazone.ap-southeast-4.api.aws" + }, + "ca-central-1" : { + "hostname" : "datazone.ca-central-1.api.aws", + "variants" : [ { + "hostname" : "datazone-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "hostname" : "datazone.ca-west-1.api.aws" + }, + "eu-central-1" : { + "hostname" : "datazone.eu-central-1.api.aws" + }, + "eu-central-2" : { + "hostname" : "datazone.eu-central-2.api.aws" + }, + "eu-north-1" : { + "hostname" : "datazone.eu-north-1.api.aws" + }, + "eu-south-1" : { + "hostname" : "datazone.eu-south-1.api.aws" + }, + "eu-south-2" : { + "hostname" : "datazone.eu-south-2.api.aws" + }, + "eu-west-1" : { + "hostname" : "datazone.eu-west-1.api.aws" + }, + "eu-west-2" : { + "hostname" : "datazone.eu-west-2.api.aws" + }, + "eu-west-3" : { + "hostname" : "datazone.eu-west-3.api.aws" + }, + "il-central-1" : { + "hostname" : "datazone.il-central-1.api.aws" + }, + "me-central-1" : { + "hostname" : "datazone.me-central-1.api.aws" + }, + "me-south-1" : { + "hostname" : "datazone.me-south-1.api.aws" + }, + "sa-east-1" : { + "hostname" : "datazone.sa-east-1.api.aws" + }, + "us-east-1" : { + "hostname" : "datazone.us-east-1.api.aws", + "variants" : [ { + "hostname" : "datazone-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "hostname" : "datazone.us-east-2.api.aws", + "variants" : [ { + "hostname" : "datazone-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "hostname" : "datazone.us-west-1.api.aws" + }, + "us-west-2" : { + "hostname" : "datazone.us-west-2.api.aws", + "variants" : [ { + "hostname" : "datazone-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "dax" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "devicefarm" : { + "endpoints" : { + "us-west-2" : { } + } + }, + "devops-guru" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "devops-guru-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "devops-guru-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "devops-guru-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "devops-guru-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "devops-guru-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "devops-guru-fips.us-west-2.amazonaws.com" + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "devops-guru-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "devops-guru-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "devops-guru-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "devops-guru-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "directconnect" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "directconnect-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "directconnect-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "directconnect-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "directconnect-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "directconnect-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "directconnect-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "directconnect-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "directconnect-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "discovery" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "dlm" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "dms" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "dms" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "dms-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "dms-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "dms-fips.us-west-1.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "dms-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "dms-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "dms-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "dms-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "dms-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "dms-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "dms-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "dms-fips.us-west-2.amazonaws.com" + } + } + }, + "docdb" : { + "endpoints" : { + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "rds.ap-northeast-1.amazonaws.com" + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "rds.ap-northeast-2.amazonaws.com" + }, + "ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "rds.ap-south-1.amazonaws.com" + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "rds.ap-southeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "rds.ap-southeast-2.amazonaws.com" + }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "rds.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "rds.eu-central-1.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "rds.eu-west-1.amazonaws.com" + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "rds.eu-west-2.amazonaws.com" + }, + "eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "hostname" : "rds.eu-west-3.amazonaws.com" + }, + "sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "rds.sa-east-1.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "rds.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "rds.us-east-2.amazonaws.com" + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "rds.us-west-2.amazonaws.com" + } + } + }, + "drs" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "drs-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "drs-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "drs-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "drs-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "drs-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "drs-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "drs-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "drs-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "ds" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "ds-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "ds-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "ds-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "ds-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ds-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ds-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ds-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ds-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "ds-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "ds-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "ds-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "ds-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "dynamodb" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "dynamodb-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "dynamodb-fips.ca-central-1.amazonaws.com" + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "dynamodb-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1-fips" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "dynamodb-fips.ca-west-1.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "local" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "localhost:8000", + "protocols" : [ "http" ] + }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "dynamodb-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "dynamodb-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "dynamodb-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "dynamodb-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "dynamodb-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "dynamodb-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "dynamodb-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "dynamodb-fips.us-west-2.amazonaws.com" + } + } + }, + "ebs" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "ebs-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "ebs-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "ebs-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "ebs-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ebs-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ebs-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ebs-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ebs-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "ebs-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "ebs-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "ebs-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "ebs-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "ec2" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "ec2.ap-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "ec2-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { + "variants" : [ { + "hostname" : "ec2.eu-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "ec2-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ec2-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ec2-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ec2-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ec2-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { + "variants" : [ { + "hostname" : "ec2.sa-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "ec2-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "ec2.us-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "ec2-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "ec2.us-east-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "ec2-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "ec2-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "ec2.us-west-2.api.aws", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "ecs" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ecs-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ecs-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ecs-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ecs-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "ecs-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "ecs-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "ecs-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "ecs-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "edge.sagemaker" : { + "endpoints" : { + "ap-northeast-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "eks" : { + "defaults" : { + "protocols" : [ "http", "https" ], + "variants" : [ { + "hostname" : "fips.eks.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "fips.eks.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "fips.eks.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "fips.eks.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "fips.eks.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "fips.eks.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "fips.eks.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "fips.eks.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "fips.eks.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "eks-auth" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { + "hostname" : "eks-auth.af-south-1.api.aws" + }, + "ap-east-1" : { + "hostname" : "eks-auth.ap-east-1.api.aws" + }, + "ap-northeast-1" : { + "hostname" : "eks-auth.ap-northeast-1.api.aws" + }, + "ap-northeast-2" : { + "hostname" : "eks-auth.ap-northeast-2.api.aws" + }, + "ap-northeast-3" : { + "hostname" : "eks-auth.ap-northeast-3.api.aws" + }, + "ap-south-1" : { + "hostname" : "eks-auth.ap-south-1.api.aws" + }, + "ap-south-2" : { + "hostname" : "eks-auth.ap-south-2.api.aws" + }, + "ap-southeast-1" : { + "hostname" : "eks-auth.ap-southeast-1.api.aws" + }, + "ap-southeast-2" : { + "hostname" : "eks-auth.ap-southeast-2.api.aws" + }, + "ap-southeast-3" : { + "hostname" : "eks-auth.ap-southeast-3.api.aws" + }, + "ap-southeast-4" : { + "hostname" : "eks-auth.ap-southeast-4.api.aws" + }, + "ca-central-1" : { + "hostname" : "eks-auth.ca-central-1.api.aws" + }, + "ca-west-1" : { + "hostname" : "eks-auth.ca-west-1.api.aws" + }, + "eu-central-1" : { + "hostname" : "eks-auth.eu-central-1.api.aws" + }, + "eu-central-2" : { + "hostname" : "eks-auth.eu-central-2.api.aws" + }, + "eu-north-1" : { + "hostname" : "eks-auth.eu-north-1.api.aws" + }, + "eu-south-1" : { + "hostname" : "eks-auth.eu-south-1.api.aws" + }, + "eu-south-2" : { + "hostname" : "eks-auth.eu-south-2.api.aws" + }, + "eu-west-1" : { + "hostname" : "eks-auth.eu-west-1.api.aws" + }, + "eu-west-2" : { + "hostname" : "eks-auth.eu-west-2.api.aws" + }, + "eu-west-3" : { + "hostname" : "eks-auth.eu-west-3.api.aws" + }, + "il-central-1" : { + "hostname" : "eks-auth.il-central-1.api.aws" + }, + "me-central-1" : { + "hostname" : "eks-auth.me-central-1.api.aws" + }, + "me-south-1" : { + "hostname" : "eks-auth.me-south-1.api.aws" + }, + "sa-east-1" : { + "hostname" : "eks-auth.sa-east-1.api.aws" + }, + "us-east-1" : { + "hostname" : "eks-auth.us-east-1.api.aws" + }, + "us-east-2" : { + "hostname" : "eks-auth.us-east-2.api.aws" + }, + "us-west-1" : { + "hostname" : "eks-auth.us-west-1.api.aws" + }, + "us-west-2" : { + "hostname" : "eks-auth.us-west-2.api.aws" + } + } + }, + "elasticache" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "elasticache-fips.us-west-1.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "elasticache-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "elasticache-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "elasticache-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "elasticache-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "elasticache-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "elasticache-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "elasticache-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "elasticache-fips.us-west-2.amazonaws.com" + } + } + }, + "elasticbeanstalk" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "elasticbeanstalk-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "elasticbeanstalk-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "elasticbeanstalk-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "elasticbeanstalk-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "elasticbeanstalk-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "elasticbeanstalk-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "elasticbeanstalk-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "elasticbeanstalk-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "elasticfilesystem" : { + "endpoints" : { + "af-south-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.af-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-east-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ap-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ap-northeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ap-northeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-3" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ap-northeast-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ap-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-south-2" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ap-south-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ap-southeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-2" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ap-southeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-3" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ap-southeast-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-4" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ap-southeast-4.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.eu-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-2" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.eu-central-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-north-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.eu-north-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-south-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.eu-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-south-2" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.eu-south-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.eu-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.eu-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.eu-west-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.af-south-1.amazonaws.com" + }, + "fips-ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ap-east-1.amazonaws.com" + }, + "fips-ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ap-northeast-1.amazonaws.com" + }, + "fips-ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ap-northeast-2.amazonaws.com" + }, + "fips-ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ap-northeast-3.amazonaws.com" + }, + "fips-ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ap-south-1.amazonaws.com" + }, + "fips-ap-south-2" : { + "credentialScope" : { + "region" : "ap-south-2" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ap-south-2.amazonaws.com" + }, + "fips-ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ap-southeast-1.amazonaws.com" + }, + "fips-ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ap-southeast-2.amazonaws.com" + }, + "fips-ap-southeast-3" : { + "credentialScope" : { + "region" : "ap-southeast-3" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ap-southeast-3.amazonaws.com" + }, + "fips-ap-southeast-4" : { + "credentialScope" : { + "region" : "ap-southeast-4" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ap-southeast-4.amazonaws.com" + }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.ca-central-1.amazonaws.com" + }, + "fips-eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.eu-central-1.amazonaws.com" + }, + "fips-eu-central-2" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.eu-central-2.amazonaws.com" + }, + "fips-eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.eu-north-1.amazonaws.com" + }, + "fips-eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.eu-south-1.amazonaws.com" + }, + "fips-eu-south-2" : { + "credentialScope" : { + "region" : "eu-south-2" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.eu-south-2.amazonaws.com" + }, + "fips-eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.eu-west-1.amazonaws.com" + }, + "fips-eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.eu-west-2.amazonaws.com" + }, + "fips-eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.eu-west-3.amazonaws.com" + }, + "fips-il-central-1" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.il-central-1.amazonaws.com" + }, + "fips-me-central-1" : { + "credentialScope" : { + "region" : "me-central-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.me-central-1.amazonaws.com" + }, + "fips-me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.me-south-1.amazonaws.com" + }, + "fips-sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.sa-east-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.il-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "me-central-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.me-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "me-south-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.me-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "sa-east-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.sa-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "elasticloadbalancing" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "elasticloadbalancing-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "elasticloadbalancing-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "elasticloadbalancing-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "elasticloadbalancing-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "elasticloadbalancing-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "elasticloadbalancing-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "elasticloadbalancing-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "elasticloadbalancing-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "elasticmapreduce" : { + "defaults" : { + "protocols" : [ "https" ], + "sslCommonName" : "{region}.{service}.{dnsSuffix}" + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "elasticmapreduce-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "elasticmapreduce-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { + "sslCommonName" : "{service}.{region}.{dnsSuffix}" + }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "sslCommonName" : "{service}.{region}.{dnsSuffix}", + "variants" : [ { + "hostname" : "elasticmapreduce-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "elasticmapreduce-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "elasticmapreduce.us-east-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "elasticmapreduce-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "elasticmapreduce-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "elastictranscoder" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "email" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "email-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "email-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "email-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "email-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "email-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "email-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "email-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "email-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "email-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "email-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "emr-containers" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "emr-containers-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "emr-containers-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "emr-containers-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "emr-containers-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "emr-containers-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "emr-containers-fips.us-west-2.amazonaws.com" + }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "emr-containers-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "emr-containers-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "emr-containers-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "emr-containers-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "emr-serverless" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "emr-serverless-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "emr-serverless-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "emr-serverless-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "emr-serverless-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "emr-serverless-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "emr-serverless-fips.us-west-2.amazonaws.com" + }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "emr-serverless-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "emr-serverless-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "emr-serverless-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "emr-serverless-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "entitlement.marketplace" : { + "defaults" : { + "credentialScope" : { + "service" : "aws-marketplace" + } + }, + "endpoints" : { + "us-east-1" : { } + } + }, + "es" : { + "endpoints" : { + "af-south-1" : { + "variants" : [ { + "hostname" : "aos.af-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-east-1" : { + "variants" : [ { + "hostname" : "aos.ap-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-1" : { + "variants" : [ { + "hostname" : "aos.ap-northeast-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "hostname" : "aos.ap-northeast-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-3" : { + "variants" : [ { + "hostname" : "aos.ap-northeast-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "aos.ap-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-2" : { + "variants" : [ { + "hostname" : "aos.ap-south-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-1" : { + "variants" : [ { + "hostname" : "aos.ap-southeast-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-2" : { + "variants" : [ { + "hostname" : "aos.ap-southeast-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-3" : { + "variants" : [ { + "hostname" : "aos.ap-southeast-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-4" : { + "variants" : [ { + "hostname" : "aos.ap-southeast-4.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "aos.ca-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "aos.ca-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-central-1" : { + "variants" : [ { + "hostname" : "aos.eu-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-central-2" : { + "variants" : [ { + "hostname" : "aos.eu-central-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-north-1" : { + "variants" : [ { + "hostname" : "aos.eu-north-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-1" : { + "variants" : [ { + "hostname" : "aos.eu-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-2" : { + "variants" : [ { + "hostname" : "aos.eu-south-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-1" : { + "variants" : [ { + "hostname" : "aos.eu-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "hostname" : "aos.eu-west-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "hostname" : "aos.eu-west-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "es-fips.us-west-1.amazonaws.com" + }, + "il-central-1" : { + "variants" : [ { + "hostname" : "aos.il-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "me-central-1" : { + "variants" : [ { + "hostname" : "aos.me-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "me-south-1" : { + "variants" : [ { + "hostname" : "aos.me-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "sa-east-1" : { + "variants" : [ { + "hostname" : "aos.sa-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "aos.us-east-1.api.aws", + "tags" : [ "dualstack" ] + }, { + "hostname" : "es-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "es-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "aos.us-east-2.api.aws", + "tags" : [ "dualstack" ] + }, { + "hostname" : "es-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "es-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "aos.us-west-1.api.aws", + "tags" : [ "dualstack" ] + }, { + "hostname" : "es-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "es-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "aos.us-west-2.api.aws", + "tags" : [ "dualstack" ] + }, { + "hostname" : "es-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "es-fips.us-west-2.amazonaws.com" + } + } + }, + "events" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "events-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "events-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "events-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "events-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "events-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "events-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "events-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "events-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "evidently" : { + "endpoints" : { + "ap-northeast-1" : { + "hostname" : "evidently.ap-northeast-1.amazonaws.com" + }, + "ap-southeast-1" : { + "hostname" : "evidently.ap-southeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "hostname" : "evidently.ap-southeast-2.amazonaws.com" + }, + "eu-central-1" : { + "hostname" : "evidently.eu-central-1.amazonaws.com" + }, + "eu-north-1" : { + "hostname" : "evidently.eu-north-1.amazonaws.com" + }, + "eu-west-1" : { + "hostname" : "evidently.eu-west-1.amazonaws.com" + }, + "us-east-1" : { + "hostname" : "evidently.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "hostname" : "evidently.us-east-2.amazonaws.com" + }, + "us-west-2" : { + "hostname" : "evidently.us-west-2.amazonaws.com" + } + } + }, + "finspace" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "finspace-api" : { + "endpoints" : { + "ca-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "firehose" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "firehose-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "firehose-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "firehose-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "firehose-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "firehose-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "firehose-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "firehose-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "firehose-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "fms" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "af-south-1" : { + "variants" : [ { + "hostname" : "fms-fips.af-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-east-1" : { + "variants" : [ { + "hostname" : "fms-fips.ap-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-1" : { + "variants" : [ { + "hostname" : "fms-fips.ap-northeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "hostname" : "fms-fips.ap-northeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-3" : { }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "fms-fips.ap-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-south-2" : { }, + "ap-southeast-1" : { + "variants" : [ { + "hostname" : "fms-fips.ap-southeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-2" : { + "variants" : [ { + "hostname" : "fms-fips.ap-southeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "fms-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { + "variants" : [ { + "hostname" : "fms-fips.eu-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { + "variants" : [ { + "hostname" : "fms-fips.eu-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-south-2" : { }, + "eu-west-1" : { + "variants" : [ { + "hostname" : "fms-fips.eu-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "hostname" : "fms-fips.eu-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "hostname" : "fms-fips.eu-west-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.af-south-1.amazonaws.com" + }, + "fips-ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.ap-east-1.amazonaws.com" + }, + "fips-ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.ap-northeast-1.amazonaws.com" + }, + "fips-ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "deprecated" : true, + "hostname" : "fms-fips.ap-northeast-2.amazonaws.com" + }, + "fips-ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.ap-south-1.amazonaws.com" + }, + "fips-ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.ap-southeast-1.amazonaws.com" + }, + "fips-ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "deprecated" : true, + "hostname" : "fms-fips.ap-southeast-2.amazonaws.com" + }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.ca-central-1.amazonaws.com" + }, + "fips-eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.eu-central-1.amazonaws.com" + }, + "fips-eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.eu-south-1.amazonaws.com" + }, + "fips-eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.eu-west-1.amazonaws.com" + }, + "fips-eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "deprecated" : true, + "hostname" : "fms-fips.eu-west-2.amazonaws.com" + }, + "fips-eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "deprecated" : true, + "hostname" : "fms-fips.eu-west-3.amazonaws.com" + }, + "fips-me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.me-south-1.amazonaws.com" + }, + "fips-sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.sa-east-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "fms-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "fms-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { + "variants" : [ { + "hostname" : "fms-fips.me-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "sa-east-1" : { + "variants" : [ { + "hostname" : "fms-fips.sa-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "fms-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "fms-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "fms-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "fms-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "forecast" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "forecast-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "forecast-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "forecast-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "forecast-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "forecast-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "forecast-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "forecastquery" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "forecastquery-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "forecastquery-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "forecastquery-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "forecastquery-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "forecastquery-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "forecastquery-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "frauddetector" : { + "endpoints" : { + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "fsx" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "fsx-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "fsx-fips.ca-central-1.amazonaws.com" + }, + "fips-prod-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "fsx-fips.ca-central-1.amazonaws.com" + }, + "fips-prod-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-east-1.amazonaws.com" + }, + "fips-prod-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-east-2.amazonaws.com" + }, + "fips-prod-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-west-1.amazonaws.com" + }, + "fips-prod-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-west-2.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "prod-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "fsx-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "prod-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "fsx-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "prod-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "fsx-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "prod-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "fsx-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "prod-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "fsx-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "fsx-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "fsx-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "fsx-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "fsx-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "gamelift" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "geo" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "glacier" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "glacier-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "glacier-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "glacier-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "glacier-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "glacier-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "glacier-fips.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "glacier-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "glacier-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "glacier-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "glacier-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "glue" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "glue-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "glue-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "glue-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "glue-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "glue-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "glue-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "glue-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "glue-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "grafana" : { + "endpoints" : { + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "grafana.ap-northeast-1.amazonaws.com" + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "grafana.ap-northeast-2.amazonaws.com" + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "grafana.ap-southeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "grafana.ap-southeast-2.amazonaws.com" + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "grafana.eu-central-1.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "grafana.eu-west-1.amazonaws.com" + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "grafana.eu-west-2.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "grafana.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "grafana.us-east-2.amazonaws.com" + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "grafana.us-west-2.amazonaws.com" + } + } + }, + "greengrass" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "greengrass-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "greengrass-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "greengrass-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "greengrass-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "greengrass-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "greengrass-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "greengrass-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "greengrass-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + }, + "isRegionalized" : true + }, + "groundstation" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "groundstation-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "groundstation-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "groundstation-fips.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "groundstation-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "groundstation-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "groundstation-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "guardduty" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "guardduty-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "guardduty-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "guardduty-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "guardduty-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "guardduty-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "guardduty-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "guardduty-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "guardduty-fips.us-west-2.amazonaws.com" + } + }, + "isRegionalized" : true + }, + "health" : { + "defaults" : { + "protocols" : [ "https" ], + "sslCommonName" : "health.us-east-1.amazonaws.com" + }, + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "global.health.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "health-fips.us-east-2.amazonaws.com" + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "health-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "healthlake" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "ap-south-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "honeycode" : { + "endpoints" : { + "us-west-2" : { } + } + }, + "iam" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "iam.amazonaws.com", + "variants" : [ { + "hostname" : "iam-fips.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "aws-global-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "iam-fips.amazonaws.com" + }, + "iam" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "iam-fips.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "iam-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "iam-fips.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "identity-chime" : { + "endpoints" : { + "eu-central-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "identity-chime-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "identity-chime-fips.us-east-1.amazonaws.com" + } + } + }, + "identitystore" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "importexport" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1", + "service" : "IngestionService" + }, + "hostname" : "importexport.amazonaws.com", + "signatureVersions" : [ "v2", "v4" ] + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "ingest.timestream" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "ingest-fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ingest.timestream-fips.us-east-1.amazonaws.com" + }, + "ingest-fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ingest.timestream-fips.us-east-2.amazonaws.com" + }, + "ingest-fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ingest.timestream-fips.us-west-2.amazonaws.com" + }, + "ingest-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "ingest.timestream-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ingest-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "ingest.timestream-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ingest-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "ingest.timestream-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "inspector" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "inspector-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "inspector-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "inspector-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "inspector-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "inspector-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "inspector-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "inspector-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "inspector-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "inspector2" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "inspector2-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "inspector2-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "inspector2-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "inspector2-fips.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "inspector2-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "inspector2-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "inspector2-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "inspector2-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "internetmonitor" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { + "hostname" : "internetmonitor.af-south-1.api.aws" + }, + "ap-east-1" : { + "hostname" : "internetmonitor.ap-east-1.api.aws" + }, + "ap-northeast-1" : { + "hostname" : "internetmonitor.ap-northeast-1.api.aws" + }, + "ap-northeast-2" : { + "hostname" : "internetmonitor.ap-northeast-2.api.aws" + }, + "ap-northeast-3" : { + "hostname" : "internetmonitor.ap-northeast-3.api.aws" + }, + "ap-south-1" : { + "hostname" : "internetmonitor.ap-south-1.api.aws" + }, + "ap-south-2" : { + "hostname" : "internetmonitor.ap-south-2.api.aws" + }, + "ap-southeast-1" : { + "hostname" : "internetmonitor.ap-southeast-1.api.aws" + }, + "ap-southeast-2" : { + "hostname" : "internetmonitor.ap-southeast-2.api.aws" + }, + "ap-southeast-3" : { + "hostname" : "internetmonitor.ap-southeast-3.api.aws" + }, + "ap-southeast-4" : { + "hostname" : "internetmonitor.ap-southeast-4.api.aws" + }, + "ca-central-1" : { + "hostname" : "internetmonitor.ca-central-1.api.aws", + "variants" : [ { + "hostname" : "internetmonitor-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "hostname" : "internetmonitor.ca-west-1.api.aws" + }, + "eu-central-1" : { + "hostname" : "internetmonitor.eu-central-1.api.aws" + }, + "eu-central-2" : { + "hostname" : "internetmonitor.eu-central-2.api.aws" + }, + "eu-north-1" : { + "hostname" : "internetmonitor.eu-north-1.api.aws" + }, + "eu-south-1" : { + "hostname" : "internetmonitor.eu-south-1.api.aws" + }, + "eu-south-2" : { + "hostname" : "internetmonitor.eu-south-2.api.aws" + }, + "eu-west-1" : { + "hostname" : "internetmonitor.eu-west-1.api.aws" + }, + "eu-west-2" : { + "hostname" : "internetmonitor.eu-west-2.api.aws" + }, + "eu-west-3" : { + "hostname" : "internetmonitor.eu-west-3.api.aws" + }, + "il-central-1" : { + "hostname" : "internetmonitor.il-central-1.api.aws" + }, + "me-central-1" : { + "hostname" : "internetmonitor.me-central-1.api.aws" + }, + "me-south-1" : { + "hostname" : "internetmonitor.me-south-1.api.aws" + }, + "sa-east-1" : { + "hostname" : "internetmonitor.sa-east-1.api.aws" + }, + "us-east-1" : { + "hostname" : "internetmonitor.us-east-1.api.aws", + "variants" : [ { + "hostname" : "internetmonitor-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "hostname" : "internetmonitor.us-east-2.api.aws", + "variants" : [ { + "hostname" : "internetmonitor-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "hostname" : "internetmonitor.us-west-1.api.aws", + "variants" : [ { + "hostname" : "internetmonitor-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "hostname" : "internetmonitor.us-west-2.api.aws", + "variants" : [ { + "hostname" : "internetmonitor-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iot" : { + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "iot-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "deprecated" : true, + "hostname" : "iot-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "deprecated" : true, + "hostname" : "iot-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "deprecated" : true, + "hostname" : "iot-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "deprecated" : true, + "hostname" : "iot-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "deprecated" : true, + "hostname" : "iot-fips.us-west-2.amazonaws.com" + }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "iot-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "iot-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "iot-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "iot-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iotanalytics" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-south-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "iotevents" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "iotevents-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "iotevents-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "iotevents-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "iotevents-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "iotevents-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "iotevents-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "iotevents-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "iotevents-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "ioteventsdata" : { + "endpoints" : { + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "data.iotevents.ap-northeast-1.amazonaws.com" + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "data.iotevents.ap-northeast-2.amazonaws.com" + }, + "ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "data.iotevents.ap-south-1.amazonaws.com" + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "data.iotevents.ap-southeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "data.iotevents.ap-southeast-2.amazonaws.com" + }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "data.iotevents.ca-central-1.amazonaws.com", + "variants" : [ { + "hostname" : "data.iotevents-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "data.iotevents.eu-central-1.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "data.iotevents.eu-west-1.amazonaws.com" + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "data.iotevents.eu-west-2.amazonaws.com" + }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "data.iotevents-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "data.iotevents-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "data.iotevents-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "data.iotevents-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "data.iotevents.us-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "data.iotevents-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "data.iotevents.us-east-2.amazonaws.com", + "variants" : [ { + "hostname" : "data.iotevents-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "data.iotevents.us-west-2.amazonaws.com", + "variants" : [ { + "hostname" : "data.iotevents-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iotfleetwise" : { + "endpoints" : { + "eu-central-1" : { }, + "us-east-1" : { } + } + }, + "iotroborunner" : { + "endpoints" : { + "eu-central-1" : { }, + "us-east-1" : { } + } + }, + "iotsecuredtunneling" : { + "defaults" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iotsitewise" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "iotsitewise-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "iotsitewise-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "iotsitewise-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "iotsitewise-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "iotsitewise-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "iotsitewise-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "iotsitewise-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "iotsitewise-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iotthingsgraph" : { + "defaults" : { + "credentialScope" : { + "service" : "iotthingsgraph" + } + }, + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-2" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "iottwinmaker" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "api-ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "api.iottwinmaker.ap-northeast-1.amazonaws.com" + }, + "api-ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "api.iottwinmaker.ap-northeast-2.amazonaws.com" + }, + "api-ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "api.iottwinmaker.ap-south-1.amazonaws.com" + }, + "api-ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "api.iottwinmaker.ap-southeast-1.amazonaws.com" + }, + "api-ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "api.iottwinmaker.ap-southeast-2.amazonaws.com" + }, + "api-eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "api.iottwinmaker.eu-central-1.amazonaws.com" + }, + "api-eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "api.iottwinmaker.eu-west-1.amazonaws.com" + }, + "api-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "api.iottwinmaker.us-east-1.amazonaws.com" + }, + "api-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "api.iottwinmaker.us-west-2.amazonaws.com" + }, + "data-ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "data.iottwinmaker.ap-northeast-1.amazonaws.com" + }, + "data-ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "data.iottwinmaker.ap-northeast-2.amazonaws.com" + }, + "data-ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "data.iottwinmaker.ap-south-1.amazonaws.com" + }, + "data-ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "data.iottwinmaker.ap-southeast-1.amazonaws.com" + }, + "data-ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "data.iottwinmaker.ap-southeast-2.amazonaws.com" + }, + "data-eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "data.iottwinmaker.eu-central-1.amazonaws.com" + }, + "data-eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "data.iottwinmaker.eu-west-1.amazonaws.com" + }, + "data-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "data.iottwinmaker.us-east-1.amazonaws.com" + }, + "data-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "data.iottwinmaker.us-west-2.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "fips-api-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "api.iottwinmaker-fips.us-east-1.amazonaws.com" + }, + "fips-api-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "api.iottwinmaker-fips.us-west-2.amazonaws.com" + }, + "fips-data-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "data.iottwinmaker-fips.us-east-1.amazonaws.com" + }, + "fips-data-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "data.iottwinmaker-fips.us-west-2.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "iottwinmaker-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "iottwinmaker-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "iottwinmaker-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "iottwinmaker-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iotwireless" : { + "endpoints" : { + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "api.iotwireless.ap-northeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "api.iotwireless.ap-southeast-2.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "api.iotwireless.eu-west-1.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "api.iotwireless.us-east-1.amazonaws.com" + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "api.iotwireless.us-west-2.amazonaws.com" + } + } + }, + "ivs" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "ivschat" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "ivsrealtime" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "kafka" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "kafka-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "kafka-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "kafka-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "kafka-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "kafka-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "kafka-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "kafka-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "kafka-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "kafka-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "kafka-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "kafkaconnect" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "kendra" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "kendra-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "kendra-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "kendra-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "kendra-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "kendra-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "kendra-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "kendra-ranking" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { + "hostname" : "kendra-ranking.af-south-1.api.aws" + }, + "ap-east-1" : { + "hostname" : "kendra-ranking.ap-east-1.api.aws" + }, + "ap-northeast-1" : { + "hostname" : "kendra-ranking.ap-northeast-1.api.aws" + }, + "ap-northeast-2" : { + "hostname" : "kendra-ranking.ap-northeast-2.api.aws" + }, + "ap-northeast-3" : { + "hostname" : "kendra-ranking.ap-northeast-3.api.aws" + }, + "ap-south-1" : { + "hostname" : "kendra-ranking.ap-south-1.api.aws" + }, + "ap-south-2" : { + "hostname" : "kendra-ranking.ap-south-2.api.aws" + }, + "ap-southeast-1" : { + "hostname" : "kendra-ranking.ap-southeast-1.api.aws" + }, + "ap-southeast-2" : { + "hostname" : "kendra-ranking.ap-southeast-2.api.aws" + }, + "ap-southeast-3" : { + "hostname" : "kendra-ranking.ap-southeast-3.api.aws" + }, + "ap-southeast-4" : { + "hostname" : "kendra-ranking.ap-southeast-4.api.aws" + }, + "ca-central-1" : { + "hostname" : "kendra-ranking.ca-central-1.api.aws", + "variants" : [ { + "hostname" : "kendra-ranking-fips.ca-central-1.api.aws", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "hostname" : "kendra-ranking.ca-west-1.api.aws" + }, + "eu-central-2" : { + "hostname" : "kendra-ranking.eu-central-2.api.aws" + }, + "eu-north-1" : { + "hostname" : "kendra-ranking.eu-north-1.api.aws" + }, + "eu-south-1" : { + "hostname" : "kendra-ranking.eu-south-1.api.aws" + }, + "eu-south-2" : { + "hostname" : "kendra-ranking.eu-south-2.api.aws" + }, + "eu-west-1" : { + "hostname" : "kendra-ranking.eu-west-1.api.aws" + }, + "eu-west-3" : { + "hostname" : "kendra-ranking.eu-west-3.api.aws" + }, + "il-central-1" : { + "hostname" : "kendra-ranking.il-central-1.api.aws" + }, + "me-central-1" : { + "hostname" : "kendra-ranking.me-central-1.api.aws" + }, + "me-south-1" : { + "hostname" : "kendra-ranking.me-south-1.api.aws" + }, + "sa-east-1" : { + "hostname" : "kendra-ranking.sa-east-1.api.aws" + }, + "us-east-1" : { + "hostname" : "kendra-ranking.us-east-1.api.aws", + "variants" : [ { + "hostname" : "kendra-ranking-fips.us-east-1.api.aws", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "hostname" : "kendra-ranking.us-east-2.api.aws", + "variants" : [ { + "hostname" : "kendra-ranking-fips.us-east-2.api.aws", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "hostname" : "kendra-ranking.us-west-1.api.aws" + }, + "us-west-2" : { + "hostname" : "kendra-ranking.us-west-2.api.aws", + "variants" : [ { + "hostname" : "kendra-ranking-fips.us-west-2.api.aws", + "tags" : [ "fips" ] + } ] + } + } + }, + "kinesis" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "kinesis-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "kinesis-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "kinesis-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "kinesis-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "kinesis-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "kinesis-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "kinesis-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "kinesis-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "kinesisanalytics" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "kinesisvideo" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "kms" : { + "endpoints" : { + "ProdFips" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "deprecated" : true, + "hostname" : "kms-fips.eu-central-2.amazonaws.com" + }, + "af-south-1" : { + "variants" : [ { + "hostname" : "kms-fips.af-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "af-south-1-fips" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.af-south-1.amazonaws.com" + }, + "ap-east-1" : { + "variants" : [ { + "hostname" : "kms-fips.ap-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-east-1-fips" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.ap-east-1.amazonaws.com" + }, + "ap-northeast-1" : { + "variants" : [ { + "hostname" : "kms-fips.ap-northeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-1-fips" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.ap-northeast-1.amazonaws.com" + }, + "ap-northeast-2" : { + "variants" : [ { + "hostname" : "kms-fips.ap-northeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-2-fips" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "deprecated" : true, + "hostname" : "kms-fips.ap-northeast-2.amazonaws.com" + }, + "ap-northeast-3" : { + "variants" : [ { + "hostname" : "kms-fips.ap-northeast-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-3-fips" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "deprecated" : true, + "hostname" : "kms-fips.ap-northeast-3.amazonaws.com" + }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "kms-fips.ap-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-south-1-fips" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.ap-south-1.amazonaws.com" + }, + "ap-south-2" : { + "variants" : [ { + "hostname" : "kms-fips.ap-south-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-south-2-fips" : { + "credentialScope" : { + "region" : "ap-south-2" + }, + "deprecated" : true, + "hostname" : "kms-fips.ap-south-2.amazonaws.com" + }, + "ap-southeast-1" : { + "variants" : [ { + "hostname" : "kms-fips.ap-southeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-1-fips" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.ap-southeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "variants" : [ { + "hostname" : "kms-fips.ap-southeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-2-fips" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "deprecated" : true, + "hostname" : "kms-fips.ap-southeast-2.amazonaws.com" + }, + "ap-southeast-3" : { + "variants" : [ { + "hostname" : "kms-fips.ap-southeast-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-3-fips" : { + "credentialScope" : { + "region" : "ap-southeast-3" + }, + "deprecated" : true, + "hostname" : "kms-fips.ap-southeast-3.amazonaws.com" + }, + "ap-southeast-4" : { + "variants" : [ { + "hostname" : "kms-fips.ap-southeast-4.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-4-fips" : { + "credentialScope" : { + "region" : "ap-southeast-4" + }, + "deprecated" : true, + "hostname" : "kms-fips.ap-southeast-4.amazonaws.com" + }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "kms-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.ca-central-1.amazonaws.com" + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "kms-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1-fips" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.ca-west-1.amazonaws.com" + }, + "eu-central-1" : { + "variants" : [ { + "hostname" : "kms-fips.eu-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1-fips" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.eu-central-1.amazonaws.com" + }, + "eu-central-2" : { + "variants" : [ { + "hostname" : "kms-fips.eu-central-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-2-fips" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "deprecated" : true, + "hostname" : "kms-fips.eu-central-2.amazonaws.com" + }, + "eu-north-1" : { + "variants" : [ { + "hostname" : "kms-fips.eu-north-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-north-1-fips" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.eu-north-1.amazonaws.com" + }, + "eu-south-1" : { + "variants" : [ { + "hostname" : "kms-fips.eu-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-south-1-fips" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.eu-south-1.amazonaws.com" + }, + "eu-south-2" : { + "variants" : [ { + "hostname" : "kms-fips.eu-south-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-south-2-fips" : { + "credentialScope" : { + "region" : "eu-south-2" + }, + "deprecated" : true, + "hostname" : "kms-fips.eu-south-2.amazonaws.com" + }, + "eu-west-1" : { + "variants" : [ { + "hostname" : "kms-fips.eu-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-1-fips" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.eu-west-1.amazonaws.com" + }, + "eu-west-2" : { + "variants" : [ { + "hostname" : "kms-fips.eu-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-2-fips" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "deprecated" : true, + "hostname" : "kms-fips.eu-west-2.amazonaws.com" + }, + "eu-west-3" : { + "variants" : [ { + "hostname" : "kms-fips.eu-west-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-3-fips" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "deprecated" : true, + "hostname" : "kms-fips.eu-west-3.amazonaws.com" + }, + "il-central-1" : { + "variants" : [ { + "hostname" : "kms-fips.il-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "il-central-1-fips" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.il-central-1.amazonaws.com" + }, + "me-central-1" : { + "variants" : [ { + "hostname" : "kms-fips.me-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "me-central-1-fips" : { + "credentialScope" : { + "region" : "me-central-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.me-central-1.amazonaws.com" + }, + "me-south-1" : { + "variants" : [ { + "hostname" : "kms-fips.me-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "me-south-1-fips" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.me-south-1.amazonaws.com" + }, + "sa-east-1" : { + "variants" : [ { + "hostname" : "kms-fips.sa-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "sa-east-1-fips" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.sa-east-1.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "kms-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "kms-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "kms-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "kms-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-west-2.amazonaws.com" + } + } + }, + "lakeformation" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "lakeformation-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "lakeformation-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "lakeformation-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "lakeformation-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "lakeformation-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "lakeformation-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "lakeformation-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "lakeformation-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "lambda" : { + "endpoints" : { + "af-south-1" : { + "variants" : [ { + "hostname" : "lambda.af-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-east-1" : { + "variants" : [ { + "hostname" : "lambda.ap-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-1" : { + "variants" : [ { + "hostname" : "lambda.ap-northeast-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "hostname" : "lambda.ap-northeast-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-3" : { + "variants" : [ { + "hostname" : "lambda.ap-northeast-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "lambda.ap-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-2" : { + "variants" : [ { + "hostname" : "lambda.ap-south-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-1" : { + "variants" : [ { + "hostname" : "lambda.ap-southeast-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-2" : { + "variants" : [ { + "hostname" : "lambda.ap-southeast-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-3" : { + "variants" : [ { + "hostname" : "lambda.ap-southeast-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-4" : { + "variants" : [ { + "hostname" : "lambda.ap-southeast-4.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "lambda.ca-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "lambda.ca-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-central-1" : { + "variants" : [ { + "hostname" : "lambda.eu-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-central-2" : { + "variants" : [ { + "hostname" : "lambda.eu-central-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-north-1" : { + "variants" : [ { + "hostname" : "lambda.eu-north-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-1" : { + "variants" : [ { + "hostname" : "lambda.eu-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-2" : { + "variants" : [ { + "hostname" : "lambda.eu-south-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-1" : { + "variants" : [ { + "hostname" : "lambda.eu-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "hostname" : "lambda.eu-west-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "hostname" : "lambda.eu-west-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "lambda-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "lambda-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "lambda-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "lambda-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { + "variants" : [ { + "hostname" : "lambda.il-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "me-central-1" : { + "variants" : [ { + "hostname" : "lambda.me-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "me-south-1" : { + "variants" : [ { + "hostname" : "lambda.me-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "sa-east-1" : { + "variants" : [ { + "hostname" : "lambda.sa-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "lambda-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "lambda.us-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "lambda-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "lambda.us-east-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "lambda-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "lambda.us-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "lambda-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "lambda.us-west-2.api.aws", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "license-manager" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "license-manager-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "license-manager-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "license-manager-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "license-manager-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "license-manager-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "license-manager-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "license-manager-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "license-manager-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "license-manager-linux-subscriptions" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "license-manager-linux-subscriptions-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "license-manager-linux-subscriptions-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "license-manager-linux-subscriptions-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "license-manager-linux-subscriptions-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "license-manager-linux-subscriptions-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "license-manager-linux-subscriptions-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "license-manager-linux-subscriptions-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "license-manager-linux-subscriptions-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "license-manager-user-subscriptions" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "license-manager-user-subscriptions-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "license-manager-user-subscriptions-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "license-manager-user-subscriptions-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "license-manager-user-subscriptions-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "license-manager-user-subscriptions-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "license-manager-user-subscriptions-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "license-manager-user-subscriptions-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "license-manager-user-subscriptions-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "lightsail" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "logs" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "logs-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "logs-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "logs-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "logs-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "logs-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "logs-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "logs-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "logs-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "lookoutequipment" : { + "endpoints" : { + "ap-northeast-2" : { }, + "eu-west-1" : { }, + "us-east-1" : { } + } + }, + "lookoutmetrics" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "lookoutvision" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "m2" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "deprecated" : true + }, + "fips-us-east-1" : { + "deprecated" : true + }, + "fips-us-east-2" : { + "deprecated" : true + }, + "fips-us-west-1" : { + "deprecated" : true + }, + "fips-us-west-2" : { + "deprecated" : true + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + } + } + }, + "machinelearning" : { + "endpoints" : { + "eu-west-1" : { }, + "us-east-1" : { } + } + }, + "macie2" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "macie2-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "macie2-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "macie2-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "macie2-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "macie2-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "macie2-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "macie2-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "macie2-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "managedblockchain" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { } + } + }, + "managedblockchain-query" : { + "endpoints" : { + "us-east-1" : { } + } + }, + "marketplacecommerceanalytics" : { + "endpoints" : { + "us-east-1" : { } + } + }, + "media-pipelines-chime" : { + "endpoints" : { + "ap-southeast-1" : { }, + "eu-central-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "media-pipelines-chime-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "media-pipelines-chime-fips.us-east-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "media-pipelines-chime-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "media-pipelines-chime-fips.us-west-2.amazonaws.com" + } + } + }, + "mediaconnect" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-central-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "mediaconvert" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "mediaconvert-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "mediaconvert-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "mediaconvert-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "mediaconvert-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "mediaconvert-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "mediaconvert-fips.us-west-2.amazonaws.com" + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "mediaconvert-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "mediaconvert-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "mediaconvert-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "mediaconvert-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "medialive" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "medialive-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "medialive-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "medialive-fips.us-west-2.amazonaws.com" + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "medialive-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "medialive-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "medialive-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "mediapackage" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "mediapackage-vod" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "mediapackagev2" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "mediastore" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "meetings-chime" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-2" : { }, + "il-central-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "meetings-chime-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "meetings-chime-fips.us-east-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "meetings-chime-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "meetings-chime-fips.us-west-2.amazonaws.com" + } + } + }, + "memory-db" : { + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "memory-db-fips.us-west-1.amazonaws.com" + }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "messaging-chime" : { + "endpoints" : { + "eu-central-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "messaging-chime-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "messaging-chime-fips.us-east-1.amazonaws.com" + } + } + }, + "metering.marketplace" : { + "defaults" : { + "credentialScope" : { + "service" : "aws-marketplace" + } + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "metrics.sagemaker" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "mgh" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "mgn" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "mgn-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "mgn-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "mgn-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "mgn-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "mgn-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "mgn-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "mgn-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "mgn-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "migrationhub-orchestrator" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "migrationhub-strategy" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "mobileanalytics" : { + "endpoints" : { + "us-east-1" : { } + } + }, + "models-v2-lex" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "models.lex" : { + "defaults" : { + "credentialScope" : { + "service" : "lex" + }, + "variants" : [ { + "hostname" : "models-fips.lex.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "models-fips.lex.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "models-fips.lex.us-east-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "models-fips.lex.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "models-fips.lex.us-west-2.amazonaws.com" + } + } + }, + "monitoring" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "monitoring-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "monitoring-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "monitoring-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "monitoring-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "monitoring-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "monitoring-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "monitoring-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "monitoring-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "mq" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "mq-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "mq-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "mq-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "mq-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "mq-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "mq-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "mq-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "mq-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "mturk-requester" : { + "endpoints" : { + "sandbox" : { + "hostname" : "mturk-requester-sandbox.us-east-1.amazonaws.com" + }, + "us-east-1" : { } + }, + "isRegionalized" : false + }, + "neptune" : { + "endpoints" : { + "ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "hostname" : "rds.ap-east-1.amazonaws.com" + }, + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "rds.ap-northeast-1.amazonaws.com" + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "rds.ap-northeast-2.amazonaws.com" + }, + "ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "rds.ap-south-1.amazonaws.com" + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "rds.ap-southeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "rds.ap-southeast-2.amazonaws.com" + }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "rds.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "rds.eu-central-1.amazonaws.com" + }, + "eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "hostname" : "rds.eu-north-1.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "rds.eu-west-1.amazonaws.com" + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "rds.eu-west-2.amazonaws.com" + }, + "eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "hostname" : "rds.eu-west-3.amazonaws.com" + }, + "me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "hostname" : "rds.me-south-1.amazonaws.com" + }, + "sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "rds.sa-east-1.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "rds.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "rds.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "rds.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "rds.us-west-2.amazonaws.com" + } + } + }, + "network-firewall" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "network-firewall-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "network-firewall-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "network-firewall-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "network-firewall-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "network-firewall-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "network-firewall-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "network-firewall-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "network-firewall-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "network-firewall-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "network-firewall-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "networkmanager" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "networkmanager.us-west-2.amazonaws.com", + "variants" : [ { + "hostname" : "networkmanager-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-aws-global" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "networkmanager-fips.us-west-2.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "nimble" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "oam" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "oidc" : { + "endpoints" : { + "af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "hostname" : "oidc.af-south-1.amazonaws.com" + }, + "ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "hostname" : "oidc.ap-east-1.amazonaws.com" + }, + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "oidc.ap-northeast-1.amazonaws.com" + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "oidc.ap-northeast-2.amazonaws.com" + }, + "ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "hostname" : "oidc.ap-northeast-3.amazonaws.com" + }, + "ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "oidc.ap-south-1.amazonaws.com" + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "oidc.ap-southeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "oidc.ap-southeast-2.amazonaws.com" + }, + "ap-southeast-3" : { + "credentialScope" : { + "region" : "ap-southeast-3" + }, + "hostname" : "oidc.ap-southeast-3.amazonaws.com" + }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "oidc.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "oidc.eu-central-1.amazonaws.com" + }, + "eu-central-2" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "hostname" : "oidc.eu-central-2.amazonaws.com" + }, + "eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "hostname" : "oidc.eu-north-1.amazonaws.com" + }, + "eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "hostname" : "oidc.eu-south-1.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "oidc.eu-west-1.amazonaws.com" + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "oidc.eu-west-2.amazonaws.com" + }, + "eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "hostname" : "oidc.eu-west-3.amazonaws.com" + }, + "il-central-1" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "hostname" : "oidc.il-central-1.amazonaws.com" + }, + "me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "hostname" : "oidc.me-south-1.amazonaws.com" + }, + "sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "oidc.sa-east-1.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "oidc.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "oidc.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "oidc.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "oidc.us-west-2.amazonaws.com" + } + } + }, + "omics" : { + "endpoints" : { + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "omics.ap-southeast-1.amazonaws.com" + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "omics.eu-central-1.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "omics.eu-west-1.amazonaws.com" + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "omics.eu-west-2.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "omics-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "omics-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "hostname" : "omics.il-central-1.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "omics.us-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "omics-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "omics.us-west-2.amazonaws.com", + "variants" : [ { + "hostname" : "omics-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "opsworks" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "opsworks-cm" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "organizations" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "organizations.us-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "organizations-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "organizations-fips.us-east-1.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "osis" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "outposts" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "outposts-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "outposts-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "outposts-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "outposts-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "outposts-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "outposts-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "outposts-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "outposts-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "outposts-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "outposts-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "participant.connect" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "participant.connect-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "participant.connect-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "participant.connect-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "participant.connect-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "personalize" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "pi" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "pinpoint" : { + "defaults" : { + "credentialScope" : { + "service" : "mobiletargeting" + } + }, + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "pinpoint.ca-central-1.amazonaws.com", + "variants" : [ { + "hostname" : "pinpoint-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "pinpoint-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "pinpoint-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "pinpoint-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "pinpoint-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "pinpoint.us-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "pinpoint-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "pinpoint.us-east-2.amazonaws.com", + "variants" : [ { + "hostname" : "pinpoint-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "pinpoint.us-west-2.amazonaws.com", + "variants" : [ { + "hostname" : "pinpoint-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "pipes" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "polly" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "polly-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "polly-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "polly-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "polly-fips.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "polly-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "polly-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "polly-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "polly-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "portal.sso" : { + "endpoints" : { + "af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "hostname" : "portal.sso.af-south-1.amazonaws.com" + }, + "ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "hostname" : "portal.sso.ap-east-1.amazonaws.com" + }, + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "portal.sso.ap-northeast-1.amazonaws.com" + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "portal.sso.ap-northeast-2.amazonaws.com" + }, + "ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "hostname" : "portal.sso.ap-northeast-3.amazonaws.com" + }, + "ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "portal.sso.ap-south-1.amazonaws.com" + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "portal.sso.ap-southeast-1.amazonaws.com" + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "portal.sso.ap-southeast-2.amazonaws.com" + }, + "ap-southeast-3" : { + "credentialScope" : { + "region" : "ap-southeast-3" + }, + "hostname" : "portal.sso.ap-southeast-3.amazonaws.com" + }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "portal.sso.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "portal.sso.eu-central-1.amazonaws.com" + }, + "eu-central-2" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "hostname" : "portal.sso.eu-central-2.amazonaws.com" + }, + "eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "hostname" : "portal.sso.eu-north-1.amazonaws.com" + }, + "eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "hostname" : "portal.sso.eu-south-1.amazonaws.com" + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "portal.sso.eu-west-1.amazonaws.com" + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "portal.sso.eu-west-2.amazonaws.com" + }, + "eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "hostname" : "portal.sso.eu-west-3.amazonaws.com" + }, + "il-central-1" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "hostname" : "portal.sso.il-central-1.amazonaws.com" + }, + "me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "hostname" : "portal.sso.me-south-1.amazonaws.com" + }, + "sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "portal.sso.sa-east-1.amazonaws.com" + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "portal.sso.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "portal.sso.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "portal.sso.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "portal.sso.us-west-2.amazonaws.com" + } + } + }, + "profile" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "profile-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-west-2" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "profile-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "profile-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "profile-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "profile-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "profile-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "projects.iot1click" : { + "endpoints" : { + "ap-northeast-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "proton" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "qbusiness" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { + "hostname" : "qbusiness.af-south-1.api.aws" + }, + "ap-east-1" : { + "hostname" : "qbusiness.ap-east-1.api.aws" + }, + "ap-northeast-1" : { + "hostname" : "qbusiness.ap-northeast-1.api.aws" + }, + "ap-northeast-2" : { + "hostname" : "qbusiness.ap-northeast-2.api.aws" + }, + "ap-northeast-3" : { + "hostname" : "qbusiness.ap-northeast-3.api.aws" + }, + "ap-south-1" : { + "hostname" : "qbusiness.ap-south-1.api.aws" + }, + "ap-south-2" : { + "hostname" : "qbusiness.ap-south-2.api.aws" + }, + "ap-southeast-1" : { + "hostname" : "qbusiness.ap-southeast-1.api.aws" + }, + "ap-southeast-2" : { + "hostname" : "qbusiness.ap-southeast-2.api.aws" + }, + "ap-southeast-3" : { + "hostname" : "qbusiness.ap-southeast-3.api.aws" + }, + "ap-southeast-4" : { + "hostname" : "qbusiness.ap-southeast-4.api.aws" + }, + "ca-central-1" : { + "hostname" : "qbusiness.ca-central-1.api.aws" + }, + "ca-west-1" : { + "hostname" : "qbusiness.ca-west-1.api.aws" + }, + "eu-central-1" : { + "hostname" : "qbusiness.eu-central-1.api.aws" + }, + "eu-central-2" : { + "hostname" : "qbusiness.eu-central-2.api.aws" + }, + "eu-north-1" : { + "hostname" : "qbusiness.eu-north-1.api.aws" + }, + "eu-south-1" : { + "hostname" : "qbusiness.eu-south-1.api.aws" + }, + "eu-south-2" : { + "hostname" : "qbusiness.eu-south-2.api.aws" + }, + "eu-west-1" : { + "hostname" : "qbusiness.eu-west-1.api.aws" + }, + "eu-west-2" : { + "hostname" : "qbusiness.eu-west-2.api.aws" + }, + "eu-west-3" : { + "hostname" : "qbusiness.eu-west-3.api.aws" + }, + "il-central-1" : { + "hostname" : "qbusiness.il-central-1.api.aws" + }, + "me-central-1" : { + "hostname" : "qbusiness.me-central-1.api.aws" + }, + "me-south-1" : { + "hostname" : "qbusiness.me-south-1.api.aws" + }, + "sa-east-1" : { + "hostname" : "qbusiness.sa-east-1.api.aws" + }, + "us-east-1" : { + "hostname" : "qbusiness.us-east-1.api.aws" + }, + "us-east-2" : { + "hostname" : "qbusiness.us-east-2.api.aws" + }, + "us-west-1" : { + "hostname" : "qbusiness.us-west-1.api.aws" + }, + "us-west-2" : { + "hostname" : "qbusiness.us-west-2.api.aws" + } + } + }, + "qldb" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "qldb-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "qldb-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "qldb-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "qldb-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "qldb-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "qldb-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "qldb-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "qldb-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "quicksight" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "ram" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "ram-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "ram-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "ram-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "ram-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ram-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ram-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ram-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ram-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "ram-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "ram-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "ram-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "ram-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "rbin" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "rbin-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "rbin-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "rbin-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "rbin-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "rbin-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "rbin-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "rbin-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "rbin-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "rbin-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "rbin-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "rbin-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "rbin-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "rds" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "rds-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.ca-central-1.amazonaws.com" + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "rds-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1-fips" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.ca-west-1.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "rds-fips.ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.ca-central-1.amazonaws.com" + }, + "rds-fips.ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.ca-west-1.amazonaws.com" + }, + "rds-fips.us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-east-1.amazonaws.com" + }, + "rds-fips.us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-east-2.amazonaws.com" + }, + "rds-fips.us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-west-1.amazonaws.com" + }, + "rds-fips.us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-west-2.amazonaws.com" + }, + "rds.ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rds-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "rds.ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rds-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "rds.us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rds-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "rds.us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rds-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "rds.us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rds-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "rds.us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rds-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "sa-east-1" : { }, + "us-east-1" : { + "sslCommonName" : "{service}.{dnsSuffix}", + "variants" : [ { + "hostname" : "rds-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "rds-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "rds-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "rds-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-west-2.amazonaws.com" + } + } + }, + "rds-data" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "rds-data-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "rds-data-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "rds-data-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "rds-data-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "rds-data-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "rds-data-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "rds-data-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "rds-data-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "redshift" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "redshift-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "redshift-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "redshift-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "redshift-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "redshift-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "redshift-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "redshift-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "redshift-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "redshift-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "redshift-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "redshift-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "redshift-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "redshift-serverless" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "rekognition" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "rekognition-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "il-central-1" : { }, + "rekognition-fips.ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.ca-central-1.amazonaws.com" + }, + "rekognition-fips.us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.us-east-1.amazonaws.com" + }, + "rekognition-fips.us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.us-east-2.amazonaws.com" + }, + "rekognition-fips.us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.us-west-1.amazonaws.com" + }, + "rekognition-fips.us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.us-west-2.amazonaws.com" + }, + "rekognition.ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rekognition-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "rekognition.us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rekognition-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "rekognition.us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rekognition-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "rekognition.us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rekognition-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "rekognition.us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rekognition-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "rekognition-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "rekognition-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "rekognition-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "rekognition-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.us-west-2.amazonaws.com" + } + } + }, + "resiliencehub" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "resource-explorer-2" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { + "hostname" : "resource-explorer-2.af-south-1.api.aws" + }, + "ap-east-1" : { + "hostname" : "resource-explorer-2.ap-east-1.api.aws" + }, + "ap-northeast-1" : { + "hostname" : "resource-explorer-2.ap-northeast-1.api.aws" + }, + "ap-northeast-2" : { + "hostname" : "resource-explorer-2.ap-northeast-2.api.aws" + }, + "ap-northeast-3" : { + "hostname" : "resource-explorer-2.ap-northeast-3.api.aws" + }, + "ap-south-1" : { + "hostname" : "resource-explorer-2.ap-south-1.api.aws" + }, + "ap-south-2" : { + "hostname" : "resource-explorer-2.ap-south-2.api.aws" + }, + "ap-southeast-1" : { + "hostname" : "resource-explorer-2.ap-southeast-1.api.aws" + }, + "ap-southeast-2" : { + "hostname" : "resource-explorer-2.ap-southeast-2.api.aws" + }, + "ap-southeast-3" : { + "hostname" : "resource-explorer-2.ap-southeast-3.api.aws" + }, + "ap-southeast-4" : { + "hostname" : "resource-explorer-2.ap-southeast-4.api.aws" + }, + "ca-central-1" : { + "hostname" : "resource-explorer-2.ca-central-1.api.aws" + }, + "eu-central-1" : { + "hostname" : "resource-explorer-2.eu-central-1.api.aws" + }, + "eu-central-2" : { + "hostname" : "resource-explorer-2.eu-central-2.api.aws" + }, + "eu-north-1" : { + "hostname" : "resource-explorer-2.eu-north-1.api.aws" + }, + "eu-south-1" : { + "hostname" : "resource-explorer-2.eu-south-1.api.aws" + }, + "eu-west-1" : { + "hostname" : "resource-explorer-2.eu-west-1.api.aws" + }, + "eu-west-2" : { + "hostname" : "resource-explorer-2.eu-west-2.api.aws" + }, + "eu-west-3" : { + "hostname" : "resource-explorer-2.eu-west-3.api.aws" + }, + "il-central-1" : { + "hostname" : "resource-explorer-2.il-central-1.api.aws" + }, + "me-central-1" : { + "hostname" : "resource-explorer-2.me-central-1.api.aws" + }, + "me-south-1" : { + "hostname" : "resource-explorer-2.me-south-1.api.aws" + }, + "sa-east-1" : { + "hostname" : "resource-explorer-2.sa-east-1.api.aws" + }, + "us-east-1" : { + "hostname" : "resource-explorer-2.us-east-1.api.aws" + }, + "us-east-2" : { + "hostname" : "resource-explorer-2.us-east-2.api.aws" + }, + "us-west-1" : { + "hostname" : "resource-explorer-2.us-west-1.api.aws" + }, + "us-west-2" : { + "hostname" : "resource-explorer-2.us-west-2.api.aws" + } + } + }, + "resource-groups" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "resource-groups-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "resource-groups-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "resource-groups-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "resource-groups-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "resource-groups-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "resource-groups-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "resource-groups-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "resource-groups-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "robomaker" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "rolesanywhere" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "rolesanywhere-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "rolesanywhere-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "rolesanywhere-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "rolesanywhere-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "rolesanywhere-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "rolesanywhere-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "rolesanywhere-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "rolesanywhere-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "route53" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "route53.amazonaws.com", + "variants" : [ { + "hostname" : "route53-fips.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "route53-fips.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "route53-recovery-control-config" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "route53-recovery-control-config.us-west-2.amazonaws.com" + } + } + }, + "route53domains" : { + "endpoints" : { + "us-east-1" : { } + } + }, + "route53resolver" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "rum" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "runtime-v2-lex" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "runtime.lex" : { + "defaults" : { + "credentialScope" : { + "service" : "lex" + }, + "variants" : [ { + "hostname" : "runtime-fips.lex.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "runtime-fips.lex.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "runtime-fips.lex.us-east-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "runtime-fips.lex.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "runtime-fips.lex.us-west-2.amazonaws.com" + } + } + }, + "runtime.sagemaker" : { + "defaults" : { + "variants" : [ { + "hostname" : "runtime-fips.sagemaker.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "runtime-fips.sagemaker.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "runtime-fips.sagemaker.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "runtime-fips.sagemaker.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "runtime-fips.sagemaker.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "runtime-fips.sagemaker.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "runtime-fips.sagemaker.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "runtime-fips.sagemaker.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "runtime-fips.sagemaker.us-west-2.amazonaws.com" + } + } + }, + "s3" : { + "defaults" : { + "protocols" : [ "http", "https" ], + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "dnsSuffix" : "amazonaws.com", + "hostname" : "{service}-fips.dualstack.{region}.{dnsSuffix}", + "tags" : [ "dualstack", "fips" ] + }, { + "dnsSuffix" : "amazonaws.com", + "hostname" : "{service}.dualstack.{region}.{dnsSuffix}", + "tags" : [ "dualstack" ] + } ] + }, + "endpoints" : { + "af-south-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.af-south-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-east-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.ap-east-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-1" : { + "hostname" : "s3.ap-northeast-1.amazonaws.com", + "signatureVersions" : [ "s3", "s3v4" ], + "variants" : [ { + "hostname" : "s3.dualstack.ap-northeast-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "hostname" : "s3.dualstack.ap-northeast-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-3" : { + "variants" : [ { + "hostname" : "s3.dualstack.ap-northeast-3.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.ap-south-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-2" : { + "variants" : [ { + "hostname" : "s3.dualstack.ap-south-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-1" : { + "hostname" : "s3.ap-southeast-1.amazonaws.com", + "signatureVersions" : [ "s3", "s3v4" ], + "variants" : [ { + "hostname" : "s3.dualstack.ap-southeast-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-2" : { + "hostname" : "s3.ap-southeast-2.amazonaws.com", + "signatureVersions" : [ "s3", "s3v4" ], + "variants" : [ { + "hostname" : "s3.dualstack.ap-southeast-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-3" : { + "variants" : [ { + "hostname" : "s3.dualstack.ap-southeast-3.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-4" : { + "variants" : [ { + "hostname" : "s3.dualstack.ap-southeast-4.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "s3.amazonaws.com", + "signatureVersions" : [ "s3", "s3v4" ] + }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "s3-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3-fips.dualstack.ca-central-1.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3.dualstack.ca-central-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "s3-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3-fips.dualstack.ca-west-1.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3.dualstack.ca-west-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-central-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.eu-central-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-central-2" : { + "variants" : [ { + "hostname" : "s3.dualstack.eu-central-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-north-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.eu-north-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.eu-south-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-2" : { + "variants" : [ { + "hostname" : "s3.dualstack.eu-south-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-1" : { + "hostname" : "s3.eu-west-1.amazonaws.com", + "signatureVersions" : [ "s3", "s3v4" ], + "variants" : [ { + "hostname" : "s3.dualstack.eu-west-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "hostname" : "s3.dualstack.eu-west-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "hostname" : "s3.dualstack.eu-west-3.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "s3-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "s3-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "s3-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "s3-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "s3-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "s3-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.il-central-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "me-central-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.me-central-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "me-south-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.me-south-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "s3-external-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "s3-external-1.amazonaws.com", + "signatureVersions" : [ "s3", "s3v4" ] + }, + "sa-east-1" : { + "hostname" : "s3.sa-east-1.amazonaws.com", + "signatureVersions" : [ "s3", "s3v4" ], + "variants" : [ { + "hostname" : "s3.dualstack.sa-east-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1" : { + "hostname" : "s3.us-east-1.amazonaws.com", + "signatureVersions" : [ "s3", "s3v4" ], + "variants" : [ { + "hostname" : "s3-fips.dualstack.us-east-1.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3.dualstack.us-east-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "s3-fips.dualstack.us-east-2.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3.dualstack.us-east-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-1" : { + "hostname" : "s3.us-west-1.amazonaws.com", + "signatureVersions" : [ "s3", "s3v4" ], + "variants" : [ { + "hostname" : "s3-fips.dualstack.us-west-1.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3.dualstack.us-west-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-2" : { + "hostname" : "s3.us-west-2.amazonaws.com", + "signatureVersions" : [ "s3", "s3v4" ], + "variants" : [ { + "hostname" : "s3-fips.dualstack.us-west-2.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3.dualstack.us-west-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + } + }, + "isRegionalized" : true, + "partitionEndpoint" : "aws-global" + }, + "s3-control" : { + "defaults" : { + "protocols" : [ "https" ], + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "dnsSuffix" : "amazonaws.com", + "hostname" : "{service}-fips.dualstack.{region}.{dnsSuffix}", + "tags" : [ "dualstack", "fips" ] + }, { + "dnsSuffix" : "amazonaws.com", + "hostname" : "{service}.dualstack.{region}.{dnsSuffix}", + "tags" : [ "dualstack" ] + } ] + }, + "endpoints" : { + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "s3-control.ap-northeast-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.ap-northeast-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "s3-control.ap-northeast-2.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.ap-northeast-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "hostname" : "s3-control.ap-northeast-3.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.ap-northeast-3.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "s3-control.ap-south-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.ap-south-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "s3-control.ap-southeast-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.ap-southeast-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "s3-control.ap-southeast-2.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.ap-southeast-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "s3-control.ca-central-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3-control-fips.dualstack.ca-central-1.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-control.dualstack.ca-central-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "s3-control-fips.ca-central-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ] + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "s3-control.eu-central-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.eu-central-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "hostname" : "s3-control.eu-north-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.eu-north-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "s3-control.eu-west-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.eu-west-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "s3-control.eu-west-2.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.eu-west-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "hostname" : "s3-control.eu-west-3.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.eu-west-3.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "s3-control.sa-east-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.sa-east-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "s3-control.us-east-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control-fips.dualstack.us-east-1.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-control-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3-control.dualstack.us-east-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "s3-control-fips.us-east-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ] + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "s3-control.us-east-2.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control-fips.dualstack.us-east-2.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-control-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3-control.dualstack.us-east-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "s3-control-fips.us-east-2.amazonaws.com", + "signatureVersions" : [ "s3v4" ] + }, + "us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "s3-control.us-west-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control-fips.dualstack.us-west-1.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-control-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3-control.dualstack.us-west-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "s3-control-fips.us-west-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ] + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "s3-control.us-west-2.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control-fips.dualstack.us-west-2.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-control-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3-control.dualstack.us-west-2.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "s3-control-fips.us-west-2.amazonaws.com", + "signatureVersions" : [ "s3v4" ] + } + } + }, + "s3-outposts" : { + "endpoints" : { + "af-south-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-east-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-3" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-3" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-north-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "fips-ca-central-1" : { + "deprecated" : true + }, + "fips-us-east-1" : { + "deprecated" : true + }, + "fips-us-east-2" : { + "deprecated" : true + }, + "fips-us-west-1" : { + "deprecated" : true + }, + "fips-us-west-2" : { + "deprecated" : true + }, + "il-central-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "me-south-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "sa-east-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + } + } + }, + "sagemaker-geospatial" : { + "endpoints" : { + "us-west-2" : { } + } + }, + "savingsplans" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "savingsplans.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "scheduler" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "schemas" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "sdb" : { + "defaults" : { + "protocols" : [ "http", "https" ], + "signatureVersions" : [ "v2" ] + }, + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-west-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "hostname" : "sdb.amazonaws.com" + }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "secretsmanager" : { + "endpoints" : { + "af-south-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-east-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-3" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-3" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-4" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "deprecated" : true + }, + "ca-west-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "ca-west-1-fips" : { + "deprecated" : true + }, + "eu-central-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-central-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-north-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "il-central-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "me-central-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "me-south-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "sa-east-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "deprecated" : true + }, + "us-east-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "deprecated" : true + }, + "us-west-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "deprecated" : true + }, + "us-west-2" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "deprecated" : true + } + } + }, + "securityhub" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "securityhub-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "securityhub-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "securityhub-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "securityhub-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "securityhub-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "securityhub-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "securityhub-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "securityhub-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "securitylake" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "securitylake-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "securitylake-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "securitylake-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "securitylake-fips.us-west-2.amazonaws.com" + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "securitylake-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "securitylake-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "securitylake-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "securitylake-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "serverlessrepo" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "ap-east-1" : { + "protocols" : [ "https" ] + }, + "ap-northeast-1" : { + "protocols" : [ "https" ] + }, + "ap-northeast-2" : { + "protocols" : [ "https" ] + }, + "ap-south-1" : { + "protocols" : [ "https" ] + }, + "ap-southeast-1" : { + "protocols" : [ "https" ] + }, + "ap-southeast-2" : { + "protocols" : [ "https" ] + }, + "ca-central-1" : { + "protocols" : [ "https" ] + }, + "eu-central-1" : { + "protocols" : [ "https" ] + }, + "eu-north-1" : { + "protocols" : [ "https" ] + }, + "eu-west-1" : { + "protocols" : [ "https" ] + }, + "eu-west-2" : { + "protocols" : [ "https" ] + }, + "eu-west-3" : { + "protocols" : [ "https" ] + }, + "me-south-1" : { + "protocols" : [ "https" ] + }, + "sa-east-1" : { + "protocols" : [ "https" ] + }, + "us-east-1" : { + "protocols" : [ "https" ] + }, + "us-east-2" : { + "protocols" : [ "https" ] + }, + "us-west-1" : { + "protocols" : [ "https" ] + }, + "us-west-2" : { + "protocols" : [ "https" ] + } + } + }, + "servicecatalog" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "servicecatalog-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "servicecatalog-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "servicecatalog-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "servicecatalog-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "servicecatalog-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "servicecatalog-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "servicecatalog-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "servicecatalog-fips.us-west-2.amazonaws.com" + } + } + }, + "servicecatalog-appregistry" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "servicecatalog-appregistry-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "servicecatalog-appregistry-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "servicecatalog-appregistry-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "servicecatalog-appregistry-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "servicecatalog-appregistry-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "servicecatalog-appregistry-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "servicecatalog-appregistry-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "servicecatalog-appregistry-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "servicecatalog-appregistry-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "servicecatalog-appregistry-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "servicediscovery" : { + "endpoints" : { + "af-south-1" : { + "variants" : [ { + "hostname" : "servicediscovery.af-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-east-1" : { + "variants" : [ { + "hostname" : "servicediscovery.ap-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-1" : { + "variants" : [ { + "hostname" : "servicediscovery.ap-northeast-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "hostname" : "servicediscovery.ap-northeast-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-northeast-3" : { + "variants" : [ { + "hostname" : "servicediscovery.ap-northeast-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "servicediscovery.ap-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-south-2" : { + "variants" : [ { + "hostname" : "servicediscovery.ap-south-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-1" : { + "variants" : [ { + "hostname" : "servicediscovery.ap-southeast-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-2" : { + "variants" : [ { + "hostname" : "servicediscovery.ap-southeast-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-3" : { + "variants" : [ { + "hostname" : "servicediscovery.ap-southeast-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ap-southeast-4" : { + "variants" : [ { + "hostname" : "servicediscovery.ap-southeast-4.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "servicediscovery-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "servicediscovery-fips.ca-central-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "servicediscovery.ca-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "servicediscovery-fips.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { + "variants" : [ { + "hostname" : "servicediscovery.eu-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-central-2" : { + "variants" : [ { + "hostname" : "servicediscovery.eu-central-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-north-1" : { + "variants" : [ { + "hostname" : "servicediscovery.eu-north-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-1" : { + "variants" : [ { + "hostname" : "servicediscovery.eu-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-south-2" : { + "variants" : [ { + "hostname" : "servicediscovery.eu-south-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-1" : { + "variants" : [ { + "hostname" : "servicediscovery.eu-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "hostname" : "servicediscovery.eu-west-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "hostname" : "servicediscovery.eu-west-3.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "il-central-1" : { + "variants" : [ { + "hostname" : "servicediscovery.il-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "me-central-1" : { + "variants" : [ { + "hostname" : "servicediscovery.me-central-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "me-south-1" : { + "variants" : [ { + "hostname" : "servicediscovery.me-south-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "sa-east-1" : { + "variants" : [ { + "hostname" : "servicediscovery.sa-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "servicediscovery-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "servicediscovery-fips.us-east-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "servicediscovery.us-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "servicediscovery-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "servicediscovery-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "servicediscovery-fips.us-east-2.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "servicediscovery.us-east-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "servicediscovery-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "servicediscovery-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "servicediscovery-fips.us-west-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "servicediscovery.us-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "servicediscovery-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "servicediscovery-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "servicediscovery-fips.us-west-2.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "servicediscovery.us-west-2.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "servicediscovery-fips.us-west-2.amazonaws.com" + } + } + }, + "servicequotas" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "session.qldb" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "session.qldb-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "session.qldb-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "session.qldb-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "session.qldb-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "session.qldb-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "session.qldb-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "shield" : { + "defaults" : { + "protocols" : [ "https" ], + "sslCommonName" : "shield.us-east-1.amazonaws.com" + }, + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "shield.us-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "shield-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "shield-fips.us-east-1.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "signer" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "signer-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "signer-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "signer-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "signer-fips.us-west-2.amazonaws.com" + }, + "fips-verification-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "verification.signer-fips.us-east-1.amazonaws.com" + }, + "fips-verification-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "verification.signer-fips.us-east-2.amazonaws.com" + }, + "fips-verification-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "verification.signer-fips.us-west-1.amazonaws.com" + }, + "fips-verification-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "verification.signer-fips.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "signer-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "signer-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "signer-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "signer-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "verification-af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "hostname" : "verification.signer.af-south-1.amazonaws.com" + }, + "verification-ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "hostname" : "verification.signer.ap-east-1.amazonaws.com" + }, + "verification-ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "verification.signer.ap-northeast-1.amazonaws.com" + }, + "verification-ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "verification.signer.ap-northeast-2.amazonaws.com" + }, + "verification-ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "verification.signer.ap-south-1.amazonaws.com" + }, + "verification-ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "verification.signer.ap-southeast-1.amazonaws.com" + }, + "verification-ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "verification.signer.ap-southeast-2.amazonaws.com" + }, + "verification-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "verification.signer.ca-central-1.amazonaws.com" + }, + "verification-eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "verification.signer.eu-central-1.amazonaws.com" + }, + "verification-eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "hostname" : "verification.signer.eu-north-1.amazonaws.com" + }, + "verification-eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "hostname" : "verification.signer.eu-south-1.amazonaws.com" + }, + "verification-eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "verification.signer.eu-west-1.amazonaws.com" + }, + "verification-eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "verification.signer.eu-west-2.amazonaws.com" + }, + "verification-eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "hostname" : "verification.signer.eu-west-3.amazonaws.com" + }, + "verification-me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "hostname" : "verification.signer.me-south-1.amazonaws.com" + }, + "verification-sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "verification.signer.sa-east-1.amazonaws.com" + }, + "verification-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "verification.signer.us-east-1.amazonaws.com" + }, + "verification-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "verification.signer.us-east-2.amazonaws.com" + }, + "verification-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "verification.signer.us-west-1.amazonaws.com" + }, + "verification-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "verification.signer.us-west-2.amazonaws.com" + } + } + }, + "simspaceweaver" : { + "endpoints" : { + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "sms" : { + "endpoints" : { + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "sms-fips.us-west-2.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "sms-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "sms-voice" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "sms-voice-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "sms-voice-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "sms-voice-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "sms-voice-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "sms-voice-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "sms-voice-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "snowball" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { + "variants" : [ { + "hostname" : "snowball-fips.ap-northeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-2" : { + "variants" : [ { + "hostname" : "snowball-fips.ap-northeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-3" : { + "variants" : [ { + "hostname" : "snowball-fips.ap-northeast-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-south-1" : { + "variants" : [ { + "hostname" : "snowball-fips.ap-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-1" : { + "variants" : [ { + "hostname" : "snowball-fips.ap-southeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-2" : { + "variants" : [ { + "hostname" : "snowball-fips.ap-southeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-3" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "snowball-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { + "variants" : [ { + "hostname" : "snowball-fips.eu-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { + "variants" : [ { + "hostname" : "snowball-fips.eu-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-2" : { + "variants" : [ { + "hostname" : "snowball-fips.eu-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-3" : { + "variants" : [ { + "hostname" : "snowball-fips.eu-west-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.ap-northeast-1.amazonaws.com" + }, + "fips-ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "deprecated" : true, + "hostname" : "snowball-fips.ap-northeast-2.amazonaws.com" + }, + "fips-ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "deprecated" : true, + "hostname" : "snowball-fips.ap-northeast-3.amazonaws.com" + }, + "fips-ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.ap-south-1.amazonaws.com" + }, + "fips-ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.ap-southeast-1.amazonaws.com" + }, + "fips-ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "deprecated" : true, + "hostname" : "snowball-fips.ap-southeast-2.amazonaws.com" + }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.ca-central-1.amazonaws.com" + }, + "fips-eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.eu-central-1.amazonaws.com" + }, + "fips-eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.eu-west-1.amazonaws.com" + }, + "fips-eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "deprecated" : true, + "hostname" : "snowball-fips.eu-west-2.amazonaws.com" + }, + "fips-eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "deprecated" : true, + "hostname" : "snowball-fips.eu-west-3.amazonaws.com" + }, + "fips-sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.sa-east-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "snowball-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "snowball-fips.us-west-2.amazonaws.com" + }, + "me-central-1" : { }, + "sa-east-1" : { + "variants" : [ { + "hostname" : "snowball-fips.sa-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "snowball-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "snowball-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "snowball-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "snowball-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "sns" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "sns-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "sns-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "sns-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "sns-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "sns-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "sns-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "sns-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "sns-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "sns-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "sns-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "sqs" : { + "defaults" : { + "protocols" : [ "http", "https" ], + "sslCommonName" : "{region}.queue.{dnsSuffix}" + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "sqs-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "sqs-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "sqs-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "sqs-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "sslCommonName" : "queue.{dnsSuffix}", + "variants" : [ { + "hostname" : "sqs-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "sqs-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "sqs-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "sqs-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "ssm" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "ssm-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-west-1" : { + "variants" : [ { + "hostname" : "ssm-fips.ca-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "ssm-fips.ca-central-1.amazonaws.com" + }, + "fips-ca-west-1" : { + "credentialScope" : { + "region" : "ca-west-1" + }, + "deprecated" : true, + "hostname" : "ssm-fips.ca-west-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ssm-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ssm-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ssm-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ssm-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "ssm-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "ssm-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "ssm-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "ssm-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "ssm-contacts" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ssm-contacts-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ssm-contacts-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ssm-contacts-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ssm-contacts-fips.us-west-2.amazonaws.com" + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "ssm-contacts-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "ssm-contacts-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "ssm-contacts-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "ssm-contacts-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "ssm-incidents" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "ssm-incidents-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "ssm-incidents-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ssm-incidents-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ssm-incidents-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ssm-incidents-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ssm-incidents-fips.us-west-2.amazonaws.com" + }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "ssm-incidents-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "ssm-incidents-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "ssm-incidents-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "ssm-incidents-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "ssm-sap" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "ssm-sap-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "ssm-sap-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "ssm-sap-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "ssm-sap-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "ssm-sap-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "ssm-sap-fips.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "ssm-sap-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "ssm-sap-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "ssm-sap-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "ssm-sap-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "sso" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "states" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "states-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "states-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "states-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "states-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "states-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "states-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "states-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "states-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "storagegateway" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "storagegateway-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "storagegateway-fips.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "storagegateway-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "storagegateway-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "storagegateway-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "storagegateway-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "storagegateway-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "storagegateway-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "storagegateway-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "storagegateway-fips.us-west-2.amazonaws.com" + } + } + }, + "streams.dynamodb" : { + "defaults" : { + "credentialScope" : { + "service" : "dynamodb" + }, + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "local" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "localhost:8000", + "protocols" : [ "http" ] + }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "sts" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "sts.amazonaws.com" + }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "sts-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "sts-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "sts-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "sts-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "sts-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1-fips" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "sts-fips.us-west-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "sts-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "sts-fips.us-west-2.amazonaws.com" + } + }, + "partitionEndpoint" : "aws-global" + }, + "support" : { + "endpoints" : { + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "support.us-east-1.amazonaws.com" + } + }, + "partitionEndpoint" : "aws-global" + }, + "supportapp" : { + "endpoints" : { + "eu-west-1" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "swf" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "swf-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "swf-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "swf-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "swf-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "swf-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "swf-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "swf-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "swf-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "synthetics" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "synthetics-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "synthetics-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "synthetics-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "synthetics-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "synthetics-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "synthetics-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "synthetics-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "synthetics-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "tagging" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "textract" : { + "endpoints" : { + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "textract-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "textract-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "textract-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "textract-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "textract-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "textract-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "textract-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "textract-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "textract-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "textract-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "thinclient" : { + "endpoints" : { + "ap-south-1" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "tnb" : { + "endpoints" : { + "ap-northeast-2" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-south-2" : { }, + "eu-west-3" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "transcribe" : { + "defaults" : { + "protocols" : [ "https" ], + "variants" : [ { + "hostname" : "fips.transcribe.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "fips.transcribe.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "fips.transcribe.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "fips.transcribe.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "fips.transcribe.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "fips.transcribe.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "fips.transcribe.us-west-2.amazonaws.com" + }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "fips.transcribe.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "fips.transcribe.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "fips.transcribe.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "fips.transcribe.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "transcribestreaming" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "sa-east-1" : { }, + "transcribestreaming-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "transcribestreaming-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "transcribestreaming-fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "transcribestreaming-fips.ca-central-1.amazonaws.com" + }, + "transcribestreaming-fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "transcribestreaming-fips.us-east-1.amazonaws.com" + }, + "transcribestreaming-fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "transcribestreaming-fips.us-east-2.amazonaws.com" + }, + "transcribestreaming-fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "transcribestreaming-fips.us-west-2.amazonaws.com" + }, + "transcribestreaming-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "transcribestreaming-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "transcribestreaming-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "transcribestreaming-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "transcribestreaming-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "transcribestreaming-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "transfer" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "transfer-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "transfer-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "transfer-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "transfer-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "transfer-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "transfer-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "transfer-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "transfer-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "transfer-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "transfer-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "translate" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "translate-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "translate-fips.us-east-1.amazonaws.com" + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "translate-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2-fips" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "translate-fips.us-east-2.amazonaws.com" + }, + "us-west-1" : { }, + "us-west-2" : { + "variants" : [ { + "hostname" : "translate-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "translate-fips.us-west-2.amazonaws.com" + } + } + }, + "verifiedpermissions" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "voice-chime" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "voice-chime-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1-fips" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "voice-chime-fips.ca-central-1.amazonaws.com" + }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "voice-chime-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "voice-chime-fips.us-east-1.amazonaws.com" + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "voice-chime-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2-fips" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "voice-chime-fips.us-west-2.amazonaws.com" + } + } + }, + "voiceid" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { + "variants" : [ { + "hostname" : "voiceid-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { }, + "eu-west-2" : { }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "voiceid-fips.ca-central-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "voiceid-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "voiceid-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "voiceid-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "voiceid-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "vpc-lattice" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-2" : { } + } + }, + "waf" : { + "endpoints" : { + "aws" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "waf-fips.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "aws-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "waf-fips.amazonaws.com" + }, + "aws-global" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "waf.amazonaws.com", + "variants" : [ { + "hostname" : "waf-fips.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "aws-global-fips" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "waf-fips.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-global" + }, + "waf-regional" : { + "endpoints" : { + "af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "hostname" : "waf-regional.af-south-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.af-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "hostname" : "waf-regional.ap-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ap-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "waf-regional.ap-northeast-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ap-northeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "waf-regional.ap-northeast-2.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ap-northeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "hostname" : "waf-regional.ap-northeast-3.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ap-northeast-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "waf-regional.ap-south-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ap-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-south-2" : { + "credentialScope" : { + "region" : "ap-south-2" + }, + "hostname" : "waf-regional.ap-south-2.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ap-south-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "waf-regional.ap-southeast-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ap-southeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "waf-regional.ap-southeast-2.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ap-southeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-3" : { + "credentialScope" : { + "region" : "ap-southeast-3" + }, + "hostname" : "waf-regional.ap-southeast-3.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ap-southeast-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-4" : { + "credentialScope" : { + "region" : "ap-southeast-4" + }, + "hostname" : "waf-regional.ap-southeast-4.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ap-southeast-4.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "waf-regional.ca-central-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "waf-regional.eu-central-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.eu-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-2" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "hostname" : "waf-regional.eu-central-2.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.eu-central-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "hostname" : "waf-regional.eu-north-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.eu-north-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "hostname" : "waf-regional.eu-south-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.eu-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-south-2" : { + "credentialScope" : { + "region" : "eu-south-2" + }, + "hostname" : "waf-regional.eu-south-2.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.eu-south-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "waf-regional.eu-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.eu-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "waf-regional.eu-west-2.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.eu-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "hostname" : "waf-regional.eu-west-3.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.eu-west-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.af-south-1.amazonaws.com" + }, + "fips-ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ap-east-1.amazonaws.com" + }, + "fips-ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ap-northeast-1.amazonaws.com" + }, + "fips-ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ap-northeast-2.amazonaws.com" + }, + "fips-ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ap-northeast-3.amazonaws.com" + }, + "fips-ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ap-south-1.amazonaws.com" + }, + "fips-ap-south-2" : { + "credentialScope" : { + "region" : "ap-south-2" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ap-south-2.amazonaws.com" + }, + "fips-ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ap-southeast-1.amazonaws.com" + }, + "fips-ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ap-southeast-2.amazonaws.com" + }, + "fips-ap-southeast-3" : { + "credentialScope" : { + "region" : "ap-southeast-3" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ap-southeast-3.amazonaws.com" + }, + "fips-ap-southeast-4" : { + "credentialScope" : { + "region" : "ap-southeast-4" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ap-southeast-4.amazonaws.com" + }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.ca-central-1.amazonaws.com" + }, + "fips-eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.eu-central-1.amazonaws.com" + }, + "fips-eu-central-2" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.eu-central-2.amazonaws.com" + }, + "fips-eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.eu-north-1.amazonaws.com" + }, + "fips-eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.eu-south-1.amazonaws.com" + }, + "fips-eu-south-2" : { + "credentialScope" : { + "region" : "eu-south-2" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.eu-south-2.amazonaws.com" + }, + "fips-eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.eu-west-1.amazonaws.com" + }, + "fips-eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.eu-west-2.amazonaws.com" + }, + "fips-eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.eu-west-3.amazonaws.com" + }, + "fips-il-central-1" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.il-central-1.amazonaws.com" + }, + "fips-me-central-1" : { + "credentialScope" : { + "region" : "me-central-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.me-central-1.amazonaws.com" + }, + "fips-me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.me-south-1.amazonaws.com" + }, + "fips-sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.sa-east-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "hostname" : "waf-regional.il-central-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.il-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "me-central-1" : { + "credentialScope" : { + "region" : "me-central-1" + }, + "hostname" : "waf-regional.me-central-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.me-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "hostname" : "waf-regional.me-south-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.me-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "waf-regional.sa-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.sa-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "waf-regional.us-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "waf-regional.us-east-2.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "waf-regional.us-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "waf-regional.us-west-2.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "wafv2" : { + "endpoints" : { + "af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "hostname" : "wafv2.af-south-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.af-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "hostname" : "wafv2.ap-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ap-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "hostname" : "wafv2.ap-northeast-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ap-northeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "hostname" : "wafv2.ap-northeast-2.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ap-northeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "hostname" : "wafv2.ap-northeast-3.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ap-northeast-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "hostname" : "wafv2.ap-south-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ap-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-south-2" : { + "credentialScope" : { + "region" : "ap-south-2" + }, + "hostname" : "wafv2.ap-south-2.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ap-south-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "hostname" : "wafv2.ap-southeast-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ap-southeast-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "hostname" : "wafv2.ap-southeast-2.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ap-southeast-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-3" : { + "credentialScope" : { + "region" : "ap-southeast-3" + }, + "hostname" : "wafv2.ap-southeast-3.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ap-southeast-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ap-southeast-4" : { + "credentialScope" : { + "region" : "ap-southeast-4" + }, + "hostname" : "wafv2.ap-southeast-4.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ap-southeast-4.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "hostname" : "wafv2.ca-central-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.ca-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "hostname" : "wafv2.eu-central-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.eu-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-central-2" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "hostname" : "wafv2.eu-central-2.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.eu-central-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "hostname" : "wafv2.eu-north-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.eu-north-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "hostname" : "wafv2.eu-south-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.eu-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-south-2" : { + "credentialScope" : { + "region" : "eu-south-2" + }, + "hostname" : "wafv2.eu-south-2.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.eu-south-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "hostname" : "wafv2.eu-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.eu-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "hostname" : "wafv2.eu-west-2.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.eu-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "hostname" : "wafv2.eu-west-3.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.eu-west-3.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-af-south-1" : { + "credentialScope" : { + "region" : "af-south-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.af-south-1.amazonaws.com" + }, + "fips-ap-east-1" : { + "credentialScope" : { + "region" : "ap-east-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ap-east-1.amazonaws.com" + }, + "fips-ap-northeast-1" : { + "credentialScope" : { + "region" : "ap-northeast-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ap-northeast-1.amazonaws.com" + }, + "fips-ap-northeast-2" : { + "credentialScope" : { + "region" : "ap-northeast-2" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ap-northeast-2.amazonaws.com" + }, + "fips-ap-northeast-3" : { + "credentialScope" : { + "region" : "ap-northeast-3" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ap-northeast-3.amazonaws.com" + }, + "fips-ap-south-1" : { + "credentialScope" : { + "region" : "ap-south-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ap-south-1.amazonaws.com" + }, + "fips-ap-south-2" : { + "credentialScope" : { + "region" : "ap-south-2" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ap-south-2.amazonaws.com" + }, + "fips-ap-southeast-1" : { + "credentialScope" : { + "region" : "ap-southeast-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ap-southeast-1.amazonaws.com" + }, + "fips-ap-southeast-2" : { + "credentialScope" : { + "region" : "ap-southeast-2" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ap-southeast-2.amazonaws.com" + }, + "fips-ap-southeast-3" : { + "credentialScope" : { + "region" : "ap-southeast-3" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ap-southeast-3.amazonaws.com" + }, + "fips-ap-southeast-4" : { + "credentialScope" : { + "region" : "ap-southeast-4" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ap-southeast-4.amazonaws.com" + }, + "fips-ca-central-1" : { + "credentialScope" : { + "region" : "ca-central-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.ca-central-1.amazonaws.com" + }, + "fips-eu-central-1" : { + "credentialScope" : { + "region" : "eu-central-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.eu-central-1.amazonaws.com" + }, + "fips-eu-central-2" : { + "credentialScope" : { + "region" : "eu-central-2" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.eu-central-2.amazonaws.com" + }, + "fips-eu-north-1" : { + "credentialScope" : { + "region" : "eu-north-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.eu-north-1.amazonaws.com" + }, + "fips-eu-south-1" : { + "credentialScope" : { + "region" : "eu-south-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.eu-south-1.amazonaws.com" + }, + "fips-eu-south-2" : { + "credentialScope" : { + "region" : "eu-south-2" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.eu-south-2.amazonaws.com" + }, + "fips-eu-west-1" : { + "credentialScope" : { + "region" : "eu-west-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.eu-west-1.amazonaws.com" + }, + "fips-eu-west-2" : { + "credentialScope" : { + "region" : "eu-west-2" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.eu-west-2.amazonaws.com" + }, + "fips-eu-west-3" : { + "credentialScope" : { + "region" : "eu-west-3" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.eu-west-3.amazonaws.com" + }, + "fips-il-central-1" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.il-central-1.amazonaws.com" + }, + "fips-me-central-1" : { + "credentialScope" : { + "region" : "me-central-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.me-central-1.amazonaws.com" + }, + "fips-me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.me-south-1.amazonaws.com" + }, + "fips-sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.sa-east-1.amazonaws.com" + }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { + "credentialScope" : { + "region" : "il-central-1" + }, + "hostname" : "wafv2.il-central-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.il-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "me-central-1" : { + "credentialScope" : { + "region" : "me-central-1" + }, + "hostname" : "wafv2.me-central-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.me-central-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "me-south-1" : { + "credentialScope" : { + "region" : "me-south-1" + }, + "hostname" : "wafv2.me-south-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.me-south-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "sa-east-1" : { + "credentialScope" : { + "region" : "sa-east-1" + }, + "hostname" : "wafv2.sa-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.sa-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "hostname" : "wafv2.us-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "hostname" : "wafv2.us-east-2.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "hostname" : "wafv2.us-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "hostname" : "wafv2.us-west-2.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "wellarchitected" : { + "endpoints" : { + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-north-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { }, + "us-east-2" : { }, + "us-west-1" : { }, + "us-west-2" : { } + } + }, + "wisdom" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-2" : { }, + "eu-central-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "deprecated" : true + }, + "fips-us-west-2" : { + "deprecated" : true + }, + "ui-ap-northeast-1" : { }, + "ui-ap-southeast-2" : { }, + "ui-eu-central-1" : { }, + "ui-eu-west-2" : { }, + "ui-us-east-1" : { }, + "ui-us-west-2" : { }, + "us-east-1" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + } + } + }, + "workdocs" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "eu-west-1" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "workdocs-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "workdocs-fips.us-west-2.amazonaws.com" + }, + "us-east-1" : { + "variants" : [ { + "hostname" : "workdocs-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "workdocs-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "workmail" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "eu-west-1" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "workspaces" : { + "endpoints" : { + "af-south-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "workspaces-fips.us-east-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "workspaces-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "workspaces-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "workspaces-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "workspaces-web" : { + "endpoints" : { + "ap-northeast-1" : { }, + "ap-south-1" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ca-central-1" : { }, + "eu-central-1" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "us-east-1" : { }, + "us-west-2" : { } + } + }, + "xray" : { + "endpoints" : { + "af-south-1" : { }, + "ap-east-1" : { }, + "ap-northeast-1" : { }, + "ap-northeast-2" : { }, + "ap-northeast-3" : { }, + "ap-south-1" : { }, + "ap-south-2" : { }, + "ap-southeast-1" : { }, + "ap-southeast-2" : { }, + "ap-southeast-3" : { }, + "ap-southeast-4" : { }, + "ca-central-1" : { }, + "ca-west-1" : { }, + "eu-central-1" : { }, + "eu-central-2" : { }, + "eu-north-1" : { }, + "eu-south-1" : { }, + "eu-south-2" : { }, + "eu-west-1" : { }, + "eu-west-2" : { }, + "eu-west-3" : { }, + "fips-us-east-1" : { + "credentialScope" : { + "region" : "us-east-1" + }, + "deprecated" : true, + "hostname" : "xray-fips.us-east-1.amazonaws.com" + }, + "fips-us-east-2" : { + "credentialScope" : { + "region" : "us-east-2" + }, + "deprecated" : true, + "hostname" : "xray-fips.us-east-2.amazonaws.com" + }, + "fips-us-west-1" : { + "credentialScope" : { + "region" : "us-west-1" + }, + "deprecated" : true, + "hostname" : "xray-fips.us-west-1.amazonaws.com" + }, + "fips-us-west-2" : { + "credentialScope" : { + "region" : "us-west-2" + }, + "deprecated" : true, + "hostname" : "xray-fips.us-west-2.amazonaws.com" + }, + "il-central-1" : { }, + "me-central-1" : { }, + "me-south-1" : { }, + "sa-east-1" : { }, + "us-east-1" : { + "variants" : [ { + "hostname" : "xray-fips.us-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-east-2" : { + "variants" : [ { + "hostname" : "xray-fips.us-east-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-1" : { + "variants" : [ { + "hostname" : "xray-fips.us-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-west-2" : { + "variants" : [ { + "hostname" : "xray-fips.us-west-2.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + } + } + }, { + "defaults" : { + "hostname" : "{service}.{region}.{dnsSuffix}", + "protocols" : [ "https" ], + "signatureVersions" : [ "v4" ], + "variants" : [ { + "dnsSuffix" : "amazonaws.com.cn", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + }, { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "dualstack", "fips" ] + }, { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "hostname" : "{service}.{region}.{dnsSuffix}", + "tags" : [ "dualstack" ] + } ] + }, + "dnsSuffix" : "amazonaws.com.cn", + "partition" : "aws-cn", + "partitionName" : "AWS China", + "regionRegex" : "^cn\\-\\w+\\-\\d+$", + "regions" : { + "cn-north-1" : { + "description" : "China (Beijing)" + }, + "cn-northwest-1" : { + "description" : "China (Ningxia)" + } + }, + "services" : { + "access-analyzer" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "account" : { + "endpoints" : { + "aws-cn-global" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "account.cn-northwest-1.amazonaws.com.cn" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-cn-global" + }, + "acm" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "airflow" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "api.ecr" : { + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "api.ecr.cn-north-1.amazonaws.com.cn" + }, + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "api.ecr.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "api.pricing" : { + "defaults" : { + "credentialScope" : { + "service" : "pricing" + } + }, + "endpoints" : { + "cn-northwest-1" : { } + } + }, + "api.sagemaker" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "api.tunneling.iot" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "apigateway" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "appconfig" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "appconfigdata" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "application-autoscaling" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "applicationinsights" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "appmesh" : { + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "appmesh.cn-north-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "appmesh.cn-northwest-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "appsync" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "arc-zonal-shift" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "athena" : { + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "athena.cn-north-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "athena.cn-northwest-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "autoscaling" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "autoscaling-plans" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "backup" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "backupstorage" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "batch" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "budgets" : { + "endpoints" : { + "aws-cn-global" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "budgets.amazonaws.com.cn" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-cn-global" + }, + "cassandra" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "ce" : { + "endpoints" : { + "aws-cn-global" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "ce.cn-northwest-1.amazonaws.com.cn" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-cn-global" + }, + "cloudcontrolapi" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "cloudformation" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "cloudfront" : { + "endpoints" : { + "aws-cn-global" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "cloudfront.cn-northwest-1.amazonaws.com.cn", + "protocols" : [ "http", "https" ] + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-cn-global" + }, + "cloudtrail" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "codebuild" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "codecommit" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "codedeploy" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "codepipeline" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "cognito-identity" : { + "endpoints" : { + "cn-north-1" : { } + } + }, + "compute-optimizer" : { + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "compute-optimizer.cn-north-1.amazonaws.com.cn" + }, + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "compute-optimizer.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "config" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "cur" : { + "endpoints" : { + "cn-northwest-1" : { } + } + }, + "data-ats.iot" : { + "defaults" : { + "credentialScope" : { + "service" : "iotdata" + }, + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { + "hostname" : "data.ats.iot.cn-north-1.amazonaws.com.cn", + "protocols" : [ "https" ] + }, + "cn-northwest-1" : { } + } + }, + "data.iot" : { + "defaults" : { + "credentialScope" : { + "service" : "iotdata" + }, + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "data.jobs.iot" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "databrew" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "datasync" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "datazone" : { + "defaults" : { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "variants" : [ { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "cn-north-1" : { + "hostname" : "datazone.cn-north-1.api.amazonwebservices.com.cn" + }, + "cn-northwest-1" : { + "hostname" : "datazone.cn-northwest-1.api.amazonwebservices.com.cn" + } + } + }, + "dax" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "directconnect" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "dlm" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "dms" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "docdb" : { + "endpoints" : { + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "rds.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "ds" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "dynamodb" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "ebs" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "ec2" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "ecs" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "eks" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "eks-auth" : { + "defaults" : { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "variants" : [ { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "cn-north-1" : { + "hostname" : "eks-auth.cn-north-1.api.amazonwebservices.com.cn" + }, + "cn-northwest-1" : { + "hostname" : "eks-auth.cn-northwest-1.api.amazonwebservices.com.cn" + } + } + }, + "elasticache" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "elasticbeanstalk" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "elasticfilesystem" : { + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.cn-north-1.amazonaws.com.cn", + "tags" : [ "fips" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.cn-northwest-1.amazonaws.com.cn", + "tags" : [ "fips" ] + } ] + }, + "fips-cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.cn-north-1.amazonaws.com.cn" + }, + "fips-cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "elasticloadbalancing" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "elasticmapreduce" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "elasticmapreduce.cn-north-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "elasticmapreduce.cn-northwest-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "emr-containers" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "emr-serverless" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "es" : { + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "aos.cn-north-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "aos.cn-northwest-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "events" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "firehose" : { + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "firehose.cn-north-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "firehose.cn-northwest-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "fms" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "fsx" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "gamelift" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "glacier" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "glue" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "greengrass" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { } + }, + "isRegionalized" : true + }, + "guardduty" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + }, + "isRegionalized" : true + }, + "health" : { + "defaults" : { + "protocols" : [ "https" ], + "sslCommonName" : "health.cn-northwest-1.amazonaws.com.cn" + }, + "endpoints" : { + "aws-cn-global" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "global.health.amazonaws.com.cn" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-cn-global" + }, + "iam" : { + "endpoints" : { + "aws-cn-global" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "iam.cn-north-1.amazonaws.com.cn" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-cn-global" + }, + "identitystore" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "internetmonitor" : { + "defaults" : { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "variants" : [ { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "cn-north-1" : { + "hostname" : "internetmonitor.cn-north-1.api.amazonwebservices.com.cn" + }, + "cn-northwest-1" : { + "hostname" : "internetmonitor.cn-northwest-1.api.amazonwebservices.com.cn" + } + } + }, + "iot" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "iotanalytics" : { + "endpoints" : { + "cn-north-1" : { } + } + }, + "iotevents" : { + "endpoints" : { + "cn-north-1" : { } + } + }, + "ioteventsdata" : { + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "data.iotevents.cn-north-1.amazonaws.com.cn" + } + } + }, + "iotsecuredtunneling" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "iotsitewise" : { + "endpoints" : { + "cn-north-1" : { } + } + }, + "iottwinmaker" : { + "endpoints" : { + "api-cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "api.iottwinmaker.cn-north-1.amazonaws.com.cn" + }, + "cn-north-1" : { }, + "data-cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "data.iottwinmaker.cn-north-1.amazonaws.com.cn" + } + } + }, + "kafka" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "kendra-ranking" : { + "defaults" : { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "variants" : [ { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "cn-north-1" : { + "hostname" : "kendra-ranking.cn-north-1.api.amazonwebservices.com.cn" + }, + "cn-northwest-1" : { + "hostname" : "kendra-ranking.cn-northwest-1.api.amazonwebservices.com.cn" + } + } + }, + "kinesis" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "kinesisanalytics" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "kinesisvideo" : { + "endpoints" : { + "cn-north-1" : { } + } + }, + "kms" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "lakeformation" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "lambda" : { + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "lambda.cn-north-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "lambda.cn-northwest-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "license-manager" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "license-manager-linux-subscriptions" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "logs" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "mediaconvert" : { + "endpoints" : { + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "subscribe.mediaconvert.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "memory-db" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "metrics.sagemaker" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "monitoring" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "mq" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "neptune" : { + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "rds.cn-north-1.amazonaws.com.cn" + }, + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "rds.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "oam" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "oidc" : { + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "oidc.cn-north-1.amazonaws.com.cn" + }, + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "oidc.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "organizations" : { + "endpoints" : { + "aws-cn-global" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "organizations.cn-northwest-1.amazonaws.com.cn" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-cn-global" + }, + "personalize" : { + "endpoints" : { + "cn-north-1" : { } + } + }, + "pi" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "pipes" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "polly" : { + "endpoints" : { + "cn-northwest-1" : { } + } + }, + "portal.sso" : { + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "portal.sso.cn-north-1.amazonaws.com.cn" + }, + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "portal.sso.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "qbusiness" : { + "defaults" : { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "variants" : [ { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "cn-north-1" : { + "hostname" : "qbusiness.cn-north-1.api.amazonwebservices.com.cn" + }, + "cn-northwest-1" : { + "hostname" : "qbusiness.cn-northwest-1.api.amazonwebservices.com.cn" + } + } + }, + "ram" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "rbin" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "rds" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "redshift" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "redshift-serverless" : { + "endpoints" : { + "cn-north-1" : { } + } + }, + "resource-explorer-2" : { + "defaults" : { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "variants" : [ { + "dnsSuffix" : "api.amazonwebservices.com.cn", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "cn-north-1" : { + "hostname" : "resource-explorer-2.cn-north-1.api.amazonwebservices.com.cn" + }, + "cn-northwest-1" : { + "hostname" : "resource-explorer-2.cn-northwest-1.api.amazonwebservices.com.cn" + } + } + }, + "resource-groups" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "rolesanywhere" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "route53" : { + "endpoints" : { + "aws-cn-global" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "route53.amazonaws.com.cn" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-cn-global" + }, + "route53resolver" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "runtime.sagemaker" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "s3" : { + "defaults" : { + "protocols" : [ "http", "https" ], + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "dnsSuffix" : "amazonaws.com.cn", + "hostname" : "{service}.dualstack.{region}.{dnsSuffix}", + "tags" : [ "dualstack" ] + } ] + }, + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.cn-north-1.amazonaws.com.cn", + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "s3.dualstack.cn-northwest-1.amazonaws.com.cn", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "s3-control" : { + "defaults" : { + "protocols" : [ "https" ], + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "dnsSuffix" : "amazonaws.com.cn", + "hostname" : "{service}.dualstack.{region}.{dnsSuffix}", + "tags" : [ "dualstack" ] + } ] + }, + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "s3-control.cn-north-1.amazonaws.com.cn", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.cn-north-1.amazonaws.com.cn", + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "s3-control.cn-northwest-1.amazonaws.com.cn", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control.dualstack.cn-northwest-1.amazonaws.com.cn", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "savingsplans" : { + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "savingsplans.cn-north-1.amazonaws.com.cn" + }, + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "savingsplans.cn-northwest-1.amazonaws.com.cn" + } + }, + "isRegionalized" : true + }, + "schemas" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "secretsmanager" : { + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + } ] + } + } + }, + "securityhub" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "serverlessrepo" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { + "protocols" : [ "https" ] + }, + "cn-northwest-1" : { + "protocols" : [ "https" ] + } + } + }, + "servicecatalog" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "servicediscovery" : { + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "servicediscovery.cn-north-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "servicediscovery.cn-northwest-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "servicequotas" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "signer" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { }, + "verification-cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "verification.signer.cn-north-1.amazonaws.com.cn" + }, + "verification-cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "verification.signer.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "sms" : { + "endpoints" : { + "cn-north-1" : { } + } + }, + "snowball" : { + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "snowball-fips.cn-north-1.amazonaws.com.cn", + "tags" : [ "fips" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "snowball-fips.cn-northwest-1.amazonaws.com.cn", + "tags" : [ "fips" ] + } ] + }, + "fips-cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.cn-north-1.amazonaws.com.cn" + }, + "fips-cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "sns" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "sqs" : { + "defaults" : { + "protocols" : [ "http", "https" ], + "sslCommonName" : "{region}.queue.{dnsSuffix}" + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "ssm" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "sso" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "states" : { + "endpoints" : { + "cn-north-1" : { + "variants" : [ { + "hostname" : "states.cn-north-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + }, + "cn-northwest-1" : { + "variants" : [ { + "hostname" : "states.cn-northwest-1.api.amazonwebservices.com.cn", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "storagegateway" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "streams.dynamodb" : { + "defaults" : { + "credentialScope" : { + "service" : "dynamodb" + }, + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "sts" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "support" : { + "endpoints" : { + "aws-cn-global" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "support.cn-north-1.amazonaws.com.cn" + } + }, + "partitionEndpoint" : "aws-cn-global" + }, + "swf" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "synthetics" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "tagging" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "transcribe" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "cn.transcribe.cn-north-1.amazonaws.com.cn" + }, + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "cn.transcribe.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "transcribestreaming" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "transfer" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + }, + "waf-regional" : { + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "waf-regional.cn-north-1.amazonaws.com.cn", + "variants" : [ { + "hostname" : "waf-regional-fips.cn-north-1.amazonaws.com.cn", + "tags" : [ "fips" ] + } ] + }, + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "waf-regional.cn-northwest-1.amazonaws.com.cn", + "variants" : [ { + "hostname" : "waf-regional-fips.cn-northwest-1.amazonaws.com.cn", + "tags" : [ "fips" ] + } ] + }, + "fips-cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.cn-north-1.amazonaws.com.cn" + }, + "fips-cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "wafv2" : { + "endpoints" : { + "cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "hostname" : "wafv2.cn-north-1.amazonaws.com.cn", + "variants" : [ { + "hostname" : "wafv2-fips.cn-north-1.amazonaws.com.cn", + "tags" : [ "fips" ] + } ] + }, + "cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "hostname" : "wafv2.cn-northwest-1.amazonaws.com.cn", + "variants" : [ { + "hostname" : "wafv2-fips.cn-northwest-1.amazonaws.com.cn", + "tags" : [ "fips" ] + } ] + }, + "fips-cn-north-1" : { + "credentialScope" : { + "region" : "cn-north-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.cn-north-1.amazonaws.com.cn" + }, + "fips-cn-northwest-1" : { + "credentialScope" : { + "region" : "cn-northwest-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.cn-northwest-1.amazonaws.com.cn" + } + } + }, + "workspaces" : { + "endpoints" : { + "cn-northwest-1" : { } + } + }, + "xray" : { + "endpoints" : { + "cn-north-1" : { }, + "cn-northwest-1" : { } + } + } + } + }, { + "defaults" : { + "hostname" : "{service}.{region}.{dnsSuffix}", + "protocols" : [ "https" ], + "signatureVersions" : [ "v4" ], + "variants" : [ { + "dnsSuffix" : "amazonaws.com", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + }, { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "dualstack", "fips" ] + }, { + "dnsSuffix" : "api.aws", + "hostname" : "{service}.{region}.{dnsSuffix}", + "tags" : [ "dualstack" ] + } ] + }, + "dnsSuffix" : "amazonaws.com", + "partition" : "aws-us-gov", + "partitionName" : "AWS GovCloud (US)", + "regionRegex" : "^us\\-gov\\-\\w+\\-\\d+$", + "regions" : { + "us-gov-east-1" : { + "description" : "AWS GovCloud (US-East)" + }, + "us-gov-west-1" : { + "description" : "AWS GovCloud (US-West)" + } + }, + "services" : { + "access-analyzer" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "access-analyzer.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "access-analyzer.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "access-analyzer.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "access-analyzer.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "access-analyzer.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "access-analyzer.us-gov-west-1.amazonaws.com" + } + } + }, + "acm" : { + "defaults" : { + "variants" : [ { + "hostname" : "acm.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "acm.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "acm.us-gov-west-1.amazonaws.com" + } + } + }, + "acm-pca" : { + "defaults" : { + "protocols" : [ "https" ], + "variants" : [ { + "hostname" : "acm-pca.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "acm-pca.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "acm-pca.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "acm-pca.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "acm-pca.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "api.detective" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "api.detective-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "api.detective-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "api.detective-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "api.detective-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "api.ecr" : { + "defaults" : { + "variants" : [ { + "hostname" : "ecr-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "dkr-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "ecr-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "dkr-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "ecr-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-dkr-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-gov-east-1.amazonaws.com" + }, + "fips-dkr-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-gov-west-1.amazonaws.com" + }, + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "ecr-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "api.ecr.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "ecr-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "api.ecr.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "ecr-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "api.sagemaker" : { + "defaults" : { + "variants" : [ { + "hostname" : "api-fips.sagemaker.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "api-fips.sagemaker.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "api-fips.sagemaker.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1-fips-secondary" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "api.sagemaker.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1-secondary" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "api.sagemaker.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "api.tunneling.iot" : { + "defaults" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "apigateway" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "appconfig" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "appconfig.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "appconfig.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "appconfig.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "appconfig.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "appconfigdata" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "appconfigdata.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "appconfigdata.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "appconfigdata.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "appconfigdata.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "application-autoscaling" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-gov-east-1" : { + "hostname" : "application-autoscaling.us-gov-east-1.amazonaws.com", + "protocols" : [ "http", "https" ], + "variants" : [ { + "hostname" : "application-autoscaling.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "deprecated" : true, + "hostname" : "application-autoscaling.us-gov-east-1.amazonaws.com", + "protocols" : [ "http", "https" ] + }, + "us-gov-west-1" : { + "hostname" : "application-autoscaling.us-gov-west-1.amazonaws.com", + "protocols" : [ "http", "https" ], + "variants" : [ { + "hostname" : "application-autoscaling.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "deprecated" : true, + "hostname" : "application-autoscaling.us-gov-west-1.amazonaws.com", + "protocols" : [ "http", "https" ] + } + } + }, + "applicationinsights" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "applicationinsights.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "applicationinsights.us-gov-west-1.amazonaws.com" + } + } + }, + "appstream2" : { + "defaults" : { + "credentialScope" : { + "service" : "appstream" + }, + "protocols" : [ "https" ] + }, + "endpoints" : { + "fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "appstream2-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "appstream2-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "appstream2-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "appstream2-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "appstream2-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "arc-zonal-shift" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "athena" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "athena-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "athena-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "athena-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "athena-fips.us-gov-east-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "athena.us-gov-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "athena-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "athena-fips.us-gov-west-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "athena.us-gov-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "autoscaling" : { + "defaults" : { + "variants" : [ { + "hostname" : "autoscaling.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "protocols" : [ "http", "https" ] + }, + "us-gov-west-1" : { + "protocols" : [ "http", "https" ] + } + } + }, + "autoscaling-plans" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-gov-east-1" : { + "protocols" : [ "http", "https" ] + }, + "us-gov-west-1" : { + "protocols" : [ "http", "https" ] + } + } + }, + "backup" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "backup-gateway" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "backupstorage" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "batch" : { + "defaults" : { + "variants" : [ { + "hostname" : "batch.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "batch.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "batch.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "batch.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "batch.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "bedrock" : { + "endpoints" : { + "us-gov-west-1" : { } + } + }, + "cassandra" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "cassandra.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "cassandra.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "cassandra.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "cassandra.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "cassandra.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "cassandra.us-gov-west-1.amazonaws.com" + } + } + }, + "cloudcontrolapi" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "cloudcontrolapi-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "cloudcontrolapi-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "cloudcontrolapi-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "cloudcontrolapi-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "clouddirectory" : { + "endpoints" : { + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "clouddirectory.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "clouddirectory.us-gov-west-1.amazonaws.com" + } + } + }, + "cloudformation" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "cloudformation.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "cloudformation.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "cloudformation.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "cloudformation.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "cloudformation.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "cloudformation.us-gov-west-1.amazonaws.com" + } + } + }, + "cloudhsm" : { + "endpoints" : { + "us-gov-west-1" : { } + } + }, + "cloudhsmv2" : { + "defaults" : { + "credentialScope" : { + "service" : "cloudhsm" + } + }, + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "cloudtrail" : { + "defaults" : { + "variants" : [ { + "hostname" : "cloudtrail.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "cloudtrail.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "cloudtrail.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "cloudtrail.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "cloudtrail.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "codebuild" : { + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "codebuild-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "codebuild-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "codebuild-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "codebuild-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "codecommit" : { + "endpoints" : { + "fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "codecommit-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "codecommit-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "codecommit-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "codecommit-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "codecommit-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "codedeploy" : { + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "codedeploy-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "codedeploy-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "codedeploy-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "codedeploy-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "codepipeline" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "codepipeline-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "codepipeline-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "codepipeline-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "codepipeline-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "codestar-connections" : { + "endpoints" : { + "us-gov-east-1" : { } + } + }, + "cognito-identity" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "cognito-identity-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "cognito-identity-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "cognito-idp" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "cognito-idp-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "cognito-idp-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "comprehend" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "comprehend-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "comprehend-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "comprehendmedical" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "comprehendmedical-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "comprehendmedical-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "compute-optimizer" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "compute-optimizer-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "compute-optimizer-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "config" : { + "defaults" : { + "variants" : [ { + "hostname" : "config.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "config.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "config.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "config.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "config.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "connect" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "connect.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "connect.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "controltower" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "data-ats.iot" : { + "defaults" : { + "credentialScope" : { + "service" : "iotdata" + }, + "protocols" : [ "https" ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "data.iot" : { + "defaults" : { + "credentialScope" : { + "service" : "iotdata" + }, + "protocols" : [ "https" ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "service" : "iotdata" + }, + "deprecated" : true, + "hostname" : "data.iot-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "data.iot-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "data.jobs.iot" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "data.jobs.iot-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "data.jobs.iot-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "data.jobs.iot-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "data.jobs.iot-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "databrew" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "databrew.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "databrew.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "datasync" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "datasync-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "datasync-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "datasync-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "datasync-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "datazone" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "hostname" : "datazone.us-gov-east-1.api.aws" + }, + "us-gov-west-1" : { + "hostname" : "datazone.us-gov-west-1.api.aws" + } + } + }, + "directconnect" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "directconnect.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "directconnect.us-gov-west-1.amazonaws.com" + } + } + }, + "dlm" : { + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "dlm.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "dlm.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "dlm.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "dlm.us-gov-west-1.amazonaws.com" + } + } + }, + "dms" : { + "defaults" : { + "variants" : [ { + "hostname" : "dms.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "dms" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "dms.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "dms-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "dms.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "dms.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "dms.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "dms.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "dms.us-gov-west-1.amazonaws.com" + } + } + }, + "docdb" : { + "endpoints" : { + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "rds.us-gov-west-1.amazonaws.com" + } + } + }, + "drs" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "drs-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "drs-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "drs-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "drs-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "ds" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "ds-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "ds-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "ds-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "ds-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "dynamodb" : { + "defaults" : { + "variants" : [ { + "hostname" : "dynamodb.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "dynamodb.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "dynamodb.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "dynamodb.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "dynamodb.us-gov-west-1.amazonaws.com" + } + } + }, + "ebs" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "ec2" : { + "defaults" : { + "variants" : [ { + "hostname" : "ec2.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "ec2.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "ec2.us-gov-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "ec2.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "ec2.us-gov-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "ecs" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "ecs-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "ecs-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "ecs-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "ecs-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "eks" : { + "defaults" : { + "protocols" : [ "http", "https" ], + "variants" : [ { + "hostname" : "eks.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "eks.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "eks.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "eks.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "eks.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "eks-auth" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "hostname" : "eks-auth.us-gov-east-1.api.aws" + }, + "us-gov-west-1" : { + "hostname" : "eks-auth.us-gov-west-1.api.aws" + } + } + }, + "elasticache" : { + "defaults" : { + "variants" : [ { + "hostname" : "elasticache.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "elasticache.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "elasticache.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "elasticache.us-gov-west-1.amazonaws.com" + } + } + }, + "elasticbeanstalk" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "elasticbeanstalk.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "elasticbeanstalk.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "elasticbeanstalk.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "elasticbeanstalk.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "elasticbeanstalk.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "elasticbeanstalk.us-gov-west-1.amazonaws.com" + } + } + }, + "elasticfilesystem" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "elasticloadbalancing" : { + "defaults" : { + "variants" : [ { + "hostname" : "elasticloadbalancing.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "elasticloadbalancing.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "elasticloadbalancing.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "elasticloadbalancing.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "protocols" : [ "http", "https" ], + "variants" : [ { + "hostname" : "elasticloadbalancing.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "elasticmapreduce" : { + "defaults" : { + "variants" : [ { + "hostname" : "elasticmapreduce.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "elasticmapreduce.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "elasticmapreduce.us-gov-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-west-1" : { + "protocols" : [ "https" ], + "variants" : [ { + "hostname" : "elasticmapreduce.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "elasticmapreduce.us-gov-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "email" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "email-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "email-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "emr-containers" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "es" : { + "endpoints" : { + "fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "es-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "aos.us-gov-east-1.api.aws", + "tags" : [ "dualstack" ] + }, { + "hostname" : "es-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "es-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "aos.us-gov-west-1.api.aws", + "tags" : [ "dualstack" ] + }, { + "hostname" : "es-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "es-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "events" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "events.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "events.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "events.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "events.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "firehose" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "firehose-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "firehose-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "firehose-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "firehose-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "fms" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "fms-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "fms-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "fms-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "fsx" : { + "endpoints" : { + "fips-prod-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-gov-east-1.amazonaws.com" + }, + "fips-prod-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-gov-west-1.amazonaws.com" + }, + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "fsx-fips.us-gov-west-1.amazonaws.com" + }, + "prod-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "fsx-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "prod-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "fsx-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "fsx-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "fsx-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "geo" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "geo-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "geo-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "glacier" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "glacier.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "glacier.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "glacier.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "protocols" : [ "http", "https" ], + "variants" : [ { + "hostname" : "glacier.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "glue" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "glue-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "glue-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "glue-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "glue-fips.us-gov-east-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "glue.us-gov-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "glue-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "glue-fips.us-gov-west-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "glue.us-gov-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "greengrass" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "dataplane-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "greengrass-ats.iot.us-gov-east-1.amazonaws.com" + }, + "dataplane-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "greengrass-ats.iot.us-gov-west-1.amazonaws.com" + }, + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "greengrass.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "greengrass.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "greengrass.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "greengrass.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + }, + "isRegionalized" : true + }, + "guardduty" : { + "defaults" : { + "protocols" : [ "https" ], + "variants" : [ { + "hostname" : "guardduty.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "guardduty.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "guardduty.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "guardduty.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "guardduty.us-gov-west-1.amazonaws.com" + } + }, + "isRegionalized" : true + }, + "health" : { + "defaults" : { + "protocols" : [ "https" ], + "sslCommonName" : "health.us-gov-west-1.amazonaws.com" + }, + "endpoints" : { + "aws-us-gov-global" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "global.health.us-gov.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "health-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "health-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iam" : { + "endpoints" : { + "aws-us-gov-global" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "iam.us-gov.amazonaws.com", + "variants" : [ { + "hostname" : "iam.us-gov.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "aws-us-gov-global-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "iam.us-gov.amazonaws.com" + }, + "iam-govcloud" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "iam.us-gov.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "iam-govcloud-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "iam.us-gov.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-us-gov-global" + }, + "identitystore" : { + "defaults" : { + "variants" : [ { + "hostname" : "identitystore.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "identitystore.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "identitystore.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "identitystore.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "identitystore.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "ingest.timestream" : { + "endpoints" : { + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "ingest.timestream.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "ingest.timestream.us-gov-west-1.amazonaws.com" + } + } + }, + "inspector" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "inspector-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "inspector-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "inspector-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "inspector-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "inspector2" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "inspector2-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "inspector2-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "inspector2-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "inspector2-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "internetmonitor" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "hostname" : "internetmonitor.us-gov-east-1.api.aws" + }, + "us-gov-west-1" : { + "hostname" : "internetmonitor.us-gov-west-1.api.aws" + } + } + }, + "iot" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "deprecated" : true, + "hostname" : "iot-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "deprecated" : true, + "hostname" : "iot-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "iot-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "iot-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iotevents" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "iotevents-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "iotevents-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "ioteventsdata" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "data.iotevents-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "data.iotevents.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "data.iotevents-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iotsecuredtunneling" : { + "defaults" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "api.tunneling.iot-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "api.tunneling.iot-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iotsitewise" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "iotsitewise-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "iotsitewise-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "iottwinmaker" : { + "endpoints" : { + "api-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "api.iottwinmaker.us-gov-west-1.amazonaws.com" + }, + "data-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "data.iottwinmaker.us-gov-west-1.amazonaws.com" + }, + "fips-api-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "api.iottwinmaker-fips.us-gov-west-1.amazonaws.com" + }, + "fips-data-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "data.iottwinmaker-fips.us-gov-west-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "iottwinmaker-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "iottwinmaker-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "kafka" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "kafka.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "kafka.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "kafka.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "kafka.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "kafka.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "kafka.us-gov-west-1.amazonaws.com" + } + } + }, + "kendra" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "kendra-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "kendra-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "kendra-ranking" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "hostname" : "kendra-ranking.us-gov-east-1.api.aws" + }, + "us-gov-west-1" : { + "hostname" : "kendra-ranking.us-gov-west-1.api.aws" + } + } + }, + "kinesis" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "kinesis.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "kinesis.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "kinesis.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "kinesis.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "kinesis.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "kinesis.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "kinesisanalytics" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "kms" : { + "endpoints" : { + "ProdFips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "kms-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "kms-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "lakeformation" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "lakeformation-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "lakeformation-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "lakeformation-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "lakeformation-fips.us-gov-east-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "lakeformation.us-gov-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "lakeformation-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "lakeformation-fips.us-gov-west-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "lakeformation.us-gov-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "lambda" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "lambda-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "lambda-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "lambda-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "lambda.us-gov-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "lambda-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "lambda.us-gov-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "license-manager" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "license-manager-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "license-manager-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "license-manager-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "license-manager-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "license-manager-linux-subscriptions" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "logs" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "logs.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "logs.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "logs.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "logs.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "m2" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "deprecated" : true + }, + "fips-us-gov-west-1" : { + "deprecated" : true + }, + "us-gov-east-1" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "tags" : [ "fips" ] + } ] + } + } + }, + "managedblockchain" : { + "endpoints" : { + "us-gov-west-1" : { } + } + }, + "mediaconvert" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "mediaconvert.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "mediaconvert.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "meetings-chime" : { + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "meetings-chime-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "meetings-chime-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "meetings-chime-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "meetings-chime-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "metering.marketplace" : { + "defaults" : { + "credentialScope" : { + "service" : "aws-marketplace" + } + }, + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "metrics.sagemaker" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "mgn" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "mgn-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "mgn-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "mgn-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "mgn-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "models.lex" : { + "defaults" : { + "credentialScope" : { + "service" : "lex" + }, + "variants" : [ { + "hostname" : "models-fips.lex.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "models-fips.lex.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "models-fips.lex.us-gov-west-1.amazonaws.com" + } + } + }, + "monitoring" : { + "defaults" : { + "variants" : [ { + "hostname" : "monitoring.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "monitoring.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "monitoring.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "monitoring.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "monitoring.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "mq" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "mq-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "mq-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "mq-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "mq-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "neptune" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "rds.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "rds.us-gov-west-1.amazonaws.com" + } + } + }, + "network-firewall" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "network-firewall-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "network-firewall-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "network-firewall-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "network-firewall-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "networkmanager" : { + "endpoints" : { + "aws-us-gov-global" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "networkmanager.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "networkmanager.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-aws-us-gov-global" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "networkmanager.us-gov-west-1.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-us-gov-global" + }, + "oidc" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "oidc.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "oidc.us-gov-west-1.amazonaws.com" + } + } + }, + "organizations" : { + "endpoints" : { + "aws-us-gov-global" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "organizations.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "organizations.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-aws-us-gov-global" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "organizations.us-gov-west-1.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-us-gov-global" + }, + "outposts" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "outposts.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "outposts.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "outposts.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "outposts.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "participant.connect" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "participant.connect.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "participant.connect.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "pi" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "pinpoint" : { + "defaults" : { + "credentialScope" : { + "service" : "mobiletargeting" + } + }, + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "pinpoint-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "pinpoint.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "pinpoint-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "polly" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "polly-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "polly-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "portal.sso" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "portal.sso.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "portal.sso.us-gov-west-1.amazonaws.com" + } + } + }, + "qbusiness" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "hostname" : "qbusiness.us-gov-east-1.api.aws" + }, + "us-gov-west-1" : { + "hostname" : "qbusiness.us-gov-west-1.api.aws" + } + } + }, + "quicksight" : { + "endpoints" : { + "api" : { }, + "us-gov-west-1" : { } + } + }, + "ram" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "ram.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "ram.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "ram.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "ram.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "ram.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "ram.us-gov-west-1.amazonaws.com" + } + } + }, + "rbin" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "rbin-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "rbin-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "rbin-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "rbin-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "rds" : { + "defaults" : { + "variants" : [ { + "hostname" : "rds.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "rds.us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "rds.us-gov-east-1.amazonaws.com" + }, + "rds.us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "rds.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "rds.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "rds.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "rds.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "rds.us-gov-west-1.amazonaws.com" + } + } + }, + "redshift" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "redshift.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "redshift.us-gov-west-1.amazonaws.com" + } + } + }, + "rekognition" : { + "endpoints" : { + "rekognition-fips.us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.us-gov-west-1.amazonaws.com" + }, + "rekognition.us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rekognition-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "rekognition-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "rekognition-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "resiliencehub" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "resiliencehub-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "resiliencehub-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "resiliencehub-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "resiliencehub-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "resource-explorer-2" : { + "defaults" : { + "dnsSuffix" : "api.aws", + "variants" : [ { + "dnsSuffix" : "api.aws", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "hostname" : "resource-explorer-2.us-gov-east-1.api.aws" + }, + "us-gov-west-1" : { + "hostname" : "resource-explorer-2.us-gov-west-1.api.aws" + } + } + }, + "resource-groups" : { + "defaults" : { + "variants" : [ { + "hostname" : "resource-groups.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "resource-groups.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "resource-groups.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "resource-groups.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "resource-groups.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "robomaker" : { + "endpoints" : { + "us-gov-west-1" : { } + } + }, + "rolesanywhere" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "rolesanywhere-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "rolesanywhere-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "rolesanywhere-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "rolesanywhere-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "route53" : { + "endpoints" : { + "aws-us-gov-global" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "route53.us-gov.amazonaws.com", + "variants" : [ { + "hostname" : "route53.us-gov.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "fips-aws-us-gov-global" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "route53.us-gov.amazonaws.com" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-us-gov-global" + }, + "route53resolver" : { + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "route53resolver.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "deprecated" : true, + "hostname" : "route53resolver.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "route53resolver.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "deprecated" : true, + "hostname" : "route53resolver.us-gov-west-1.amazonaws.com" + } + } + }, + "runtime.lex" : { + "defaults" : { + "credentialScope" : { + "service" : "lex" + }, + "variants" : [ { + "hostname" : "runtime-fips.lex.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "runtime-fips.lex.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "runtime-fips.lex.us-gov-west-1.amazonaws.com" + } + } + }, + "runtime.sagemaker" : { + "defaults" : { + "variants" : [ { + "hostname" : "runtime.sagemaker.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "runtime.sagemaker.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "runtime.sagemaker.us-gov-west-1.amazonaws.com" + } + } + }, + "s3" : { + "defaults" : { + "signatureVersions" : [ "s3", "s3v4" ], + "variants" : [ { + "dnsSuffix" : "amazonaws.com", + "hostname" : "{service}-fips.dualstack.{region}.{dnsSuffix}", + "tags" : [ "dualstack", "fips" ] + }, { + "dnsSuffix" : "amazonaws.com", + "hostname" : "{service}.dualstack.{region}.{dnsSuffix}", + "tags" : [ "dualstack" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "s3-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "s3-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "hostname" : "s3.us-gov-east-1.amazonaws.com", + "protocols" : [ "http", "https" ], + "variants" : [ { + "hostname" : "s3-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3.dualstack.us-gov-east-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-west-1" : { + "hostname" : "s3.us-gov-west-1.amazonaws.com", + "protocols" : [ "http", "https" ], + "variants" : [ { + "hostname" : "s3-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3.dualstack.us-gov-west-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + } + } + }, + "s3-control" : { + "defaults" : { + "protocols" : [ "https" ], + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "dnsSuffix" : "amazonaws.com", + "hostname" : "{service}-fips.dualstack.{region}.{dnsSuffix}", + "tags" : [ "dualstack", "fips" ] + }, { + "dnsSuffix" : "amazonaws.com", + "hostname" : "{service}.dualstack.{region}.{dnsSuffix}", + "tags" : [ "dualstack" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "s3-control.us-gov-east-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control-fips.dualstack.us-gov-east-1.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-control-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3-control.dualstack.us-gov-east-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "s3-control-fips.us-gov-east-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ] + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "s3-control.us-gov-west-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-control-fips.dualstack.us-gov-west-1.amazonaws.com", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-control-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "s3-control.dualstack.us-gov-west-1.amazonaws.com", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "s3-control-fips.us-gov-west-1.amazonaws.com", + "signatureVersions" : [ "s3v4" ] + } + } + }, + "s3-outposts" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "deprecated" : true + }, + "fips-us-gov-west-1" : { + "deprecated" : true + }, + "us-gov-east-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + } + } + }, + "secretsmanager" : { + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "deprecated" : true + }, + "us-gov-west-1" : { + "variants" : [ { + "tags" : [ "dualstack" ] + }, { + "tags" : [ "dualstack", "fips" ] + }, { + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "deprecated" : true + } + } + }, + "securityhub" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "securityhub-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "securityhub-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "securityhub-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "securityhub-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "serverlessrepo" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "us-gov-east-1" : { + "protocols" : [ "https" ], + "variants" : [ { + "hostname" : "serverlessrepo.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "serverlessrepo.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "protocols" : [ "https" ], + "variants" : [ { + "hostname" : "serverlessrepo.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "serverlessrepo.us-gov-west-1.amazonaws.com" + } + } + }, + "servicecatalog" : { + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "servicecatalog-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "servicecatalog-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "servicecatalog-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "servicecatalog-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "servicecatalog-appregistry" : { + "defaults" : { + "variants" : [ { + "hostname" : "servicecatalog-appregistry.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "servicediscovery" : { + "endpoints" : { + "servicediscovery" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "servicediscovery-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "servicediscovery-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "servicediscovery-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "servicediscovery-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "servicediscovery-fips.us-gov-east-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "servicediscovery.us-gov-east-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "servicediscovery-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "servicediscovery-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + }, { + "hostname" : "servicediscovery-fips.us-gov-west-1.api.aws", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "servicediscovery.us-gov-west-1.api.aws", + "tags" : [ "dualstack" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "servicediscovery-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "servicequotas" : { + "defaults" : { + "protocols" : [ "https" ], + "variants" : [ { + "hostname" : "servicequotas.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "servicequotas.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "servicequotas.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "servicequotas.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "servicequotas.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "simspaceweaver" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "simspaceweaver.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "simspaceweaver.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "simspaceweaver.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "simspaceweaver.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "sms" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "sms-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "sms-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "sms-voice" : { + "endpoints" : { + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "sms-voice-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "sms-voice-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "snowball" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "snowball-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "snowball-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "snowball-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "sns" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "sns.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "sns.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "sns.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "protocols" : [ "https" ], + "variants" : [ { + "hostname" : "sns.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "sqs" : { + "defaults" : { + "variants" : [ { + "hostname" : "sqs.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "sqs.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "sqs.us-gov-west-1.amazonaws.com", + "protocols" : [ "http", "https" ], + "sslCommonName" : "{region}.queue.{dnsSuffix}" + } + } + }, + "ssm" : { + "defaults" : { + "variants" : [ { + "hostname" : "ssm.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "ssm.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "ssm.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "ssm.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "ssm.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "sso" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "sso.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "sso.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "sso.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "sso.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "sso.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "sso.us-gov-west-1.amazonaws.com" + } + } + }, + "states" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "states-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "states.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "states-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "states.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "storagegateway" : { + "endpoints" : { + "fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "storagegateway-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "storagegateway-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "storagegateway-fips.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "storagegateway-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "storagegateway-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "streams.dynamodb" : { + "defaults" : { + "credentialScope" : { + "service" : "dynamodb" + }, + "variants" : [ { + "hostname" : "streams.dynamodb.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "streams.dynamodb.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "streams.dynamodb.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "streams.dynamodb.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "streams.dynamodb.us-gov-west-1.amazonaws.com" + } + } + }, + "sts" : { + "defaults" : { + "variants" : [ { + "hostname" : "sts.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "sts.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "sts.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "sts.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "sts.us-gov-west-1.amazonaws.com" + } + } + }, + "support" : { + "endpoints" : { + "aws-us-gov-global" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "support.us-gov-west-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "support.us-gov-west-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "support.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + }, + "partitionEndpoint" : "aws-us-gov-global" + }, + "swf" : { + "endpoints" : { + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "swf.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "swf.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-east-1-fips" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "swf.us-gov-east-1.amazonaws.com" + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "swf.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "swf.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "swf.us-gov-west-1.amazonaws.com" + } + } + }, + "synthetics" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "synthetics-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "synthetics-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "synthetics-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "synthetics-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "tagging" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "textract" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "textract-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "textract-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "textract-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "textract-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "transcribe" : { + "defaults" : { + "protocols" : [ "https" ], + "variants" : [ { + "hostname" : "fips.transcribe.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "fips.transcribe.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "fips.transcribe.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "fips.transcribe.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "fips.transcribe.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "transcribestreaming" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "transfer" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "transfer-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "transfer-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "transfer-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "transfer-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "translate" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "translate-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1-fips" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "translate-fips.us-gov-west-1.amazonaws.com" + } + } + }, + "waf-regional" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "waf-regional-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "waf-regional.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "waf-regional.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "waf-regional-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "wafv2" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "wafv2-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "hostname" : "wafv2.us-gov-east-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "hostname" : "wafv2.us-gov-west-1.amazonaws.com", + "variants" : [ { + "hostname" : "wafv2-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "wellarchitected" : { + "endpoints" : { + "us-gov-east-1" : { }, + "us-gov-west-1" : { } + } + }, + "workspaces" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "workspaces-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "workspaces-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "workspaces-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "workspaces-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + }, + "xray" : { + "endpoints" : { + "fips-us-gov-east-1" : { + "credentialScope" : { + "region" : "us-gov-east-1" + }, + "deprecated" : true, + "hostname" : "xray-fips.us-gov-east-1.amazonaws.com" + }, + "fips-us-gov-west-1" : { + "credentialScope" : { + "region" : "us-gov-west-1" + }, + "deprecated" : true, + "hostname" : "xray-fips.us-gov-west-1.amazonaws.com" + }, + "us-gov-east-1" : { + "variants" : [ { + "hostname" : "xray-fips.us-gov-east-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + }, + "us-gov-west-1" : { + "variants" : [ { + "hostname" : "xray-fips.us-gov-west-1.amazonaws.com", + "tags" : [ "fips" ] + } ] + } + } + } + } + }, { + "defaults" : { + "hostname" : "{service}.{region}.{dnsSuffix}", + "protocols" : [ "https" ], + "signatureVersions" : [ "v4" ], + "variants" : [ { + "dnsSuffix" : "c2s.ic.gov", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "dnsSuffix" : "c2s.ic.gov", + "partition" : "aws-iso", + "partitionName" : "AWS ISO (US)", + "regionRegex" : "^us\\-iso\\-\\w+\\-\\d+$", + "regions" : { + "us-iso-east-1" : { + "description" : "US ISO East" + }, + "us-iso-west-1" : { + "description" : "US ISO WEST" + } + }, + "services" : { + "api.ecr" : { + "endpoints" : { + "us-iso-east-1" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "hostname" : "api.ecr.us-iso-east-1.c2s.ic.gov" + }, + "us-iso-west-1" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "hostname" : "api.ecr.us-iso-west-1.c2s.ic.gov" + } + } + }, + "api.sagemaker" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "apigateway" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "appconfig" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "appconfigdata" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "application-autoscaling" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "athena" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "autoscaling" : { + "endpoints" : { + "us-iso-east-1" : { + "protocols" : [ "http", "https" ] + }, + "us-iso-west-1" : { } + } + }, + "cloudcontrolapi" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "cloudformation" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "cloudtrail" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "codedeploy" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "comprehend" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "config" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "datapipeline" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "datasync" : { + "endpoints" : { + "fips-us-iso-west-1" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "datasync-fips.us-iso-west-1.c2s.ic.gov" + }, + "us-iso-west-1" : { + "variants" : [ { + "hostname" : "datasync-fips.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "directconnect" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "dlm" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "dms" : { + "defaults" : { + "variants" : [ { + "hostname" : "dms.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "dms" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "dms.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "dms-fips" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "dms.us-iso-east-1.c2s.ic.gov" + }, + "us-iso-east-1" : { + "variants" : [ { + "hostname" : "dms.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-east-1-fips" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "dms.us-iso-east-1.c2s.ic.gov" + }, + "us-iso-west-1" : { + "variants" : [ { + "hostname" : "dms.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-west-1-fips" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "dms.us-iso-west-1.c2s.ic.gov" + } + } + }, + "ds" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "dynamodb" : { + "endpoints" : { + "us-iso-east-1" : { + "protocols" : [ "http", "https" ] + }, + "us-iso-west-1" : { } + } + }, + "ebs" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "ec2" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "ecs" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "eks" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "elasticache" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "elasticfilesystem" : { + "endpoints" : { + "fips-us-iso-east-1" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.us-iso-east-1.c2s.ic.gov" + }, + "fips-us-iso-west-1" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.us-iso-west-1.c2s.ic.gov" + }, + "us-iso-east-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-west-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "elasticloadbalancing" : { + "endpoints" : { + "us-iso-east-1" : { + "protocols" : [ "http", "https" ] + }, + "us-iso-west-1" : { } + } + }, + "elasticmapreduce" : { + "endpoints" : { + "fips-us-iso-east-1" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce.us-iso-east-1.c2s.ic.gov" + }, + "fips-us-iso-west-1" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce.us-iso-west-1.c2s.ic.gov" + }, + "us-iso-east-1" : { + "protocols" : [ "https" ], + "variants" : [ { + "hostname" : "elasticmapreduce.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-west-1" : { + "variants" : [ { + "hostname" : "elasticmapreduce.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "es" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "events" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "firehose" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "glacier" : { + "endpoints" : { + "us-iso-east-1" : { + "protocols" : [ "http", "https" ] + }, + "us-iso-west-1" : { } + } + }, + "glue" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "guardduty" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "us-iso-east-1" : { } + }, + "isRegionalized" : true + }, + "health" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "iam" : { + "endpoints" : { + "aws-iso-global" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "hostname" : "iam.us-iso-east-1.c2s.ic.gov" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-iso-global" + }, + "kinesis" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "kms" : { + "endpoints" : { + "ProdFips" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-iso-east-1.c2s.ic.gov" + }, + "us-iso-east-1" : { + "variants" : [ { + "hostname" : "kms-fips.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-east-1-fips" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-iso-east-1.c2s.ic.gov" + }, + "us-iso-west-1" : { + "variants" : [ { + "hostname" : "kms-fips.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-west-1-fips" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-iso-west-1.c2s.ic.gov" + } + } + }, + "lambda" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "license-manager" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "logs" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "medialive" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "mediapackage" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "metrics.sagemaker" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "monitoring" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "outposts" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "ram" : { + "endpoints" : { + "fips-us-iso-east-1" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "ram-fips.us-iso-east-1.c2s.ic.gov" + }, + "fips-us-iso-west-1" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "ram-fips.us-iso-west-1.c2s.ic.gov" + }, + "us-iso-east-1" : { + "variants" : [ { + "hostname" : "ram-fips.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-west-1" : { + "variants" : [ { + "hostname" : "ram-fips.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "rbin" : { + "endpoints" : { + "fips-us-iso-east-1" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "rbin-fips.us-iso-east-1.c2s.ic.gov" + }, + "fips-us-iso-west-1" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "rbin-fips.us-iso-west-1.c2s.ic.gov" + }, + "us-iso-east-1" : { + "variants" : [ { + "hostname" : "rbin-fips.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-west-1" : { + "variants" : [ { + "hostname" : "rbin-fips.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "rds" : { + "endpoints" : { + "rds-fips.us-iso-east-1" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-iso-east-1.c2s.ic.gov" + }, + "rds-fips.us-iso-west-1" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-iso-west-1.c2s.ic.gov" + }, + "rds.us-iso-east-1" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rds-fips.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "rds.us-iso-west-1" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rds-fips.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-east-1" : { + "variants" : [ { + "hostname" : "rds-fips.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-east-1-fips" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-iso-east-1.c2s.ic.gov" + }, + "us-iso-west-1" : { + "variants" : [ { + "hostname" : "rds-fips.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-west-1-fips" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-iso-west-1.c2s.ic.gov" + } + } + }, + "redshift" : { + "endpoints" : { + "fips-us-iso-east-1" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "redshift-fips.us-iso-east-1.c2s.ic.gov" + }, + "fips-us-iso-west-1" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "redshift-fips.us-iso-west-1.c2s.ic.gov" + }, + "us-iso-east-1" : { + "variants" : [ { + "hostname" : "redshift-fips.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-west-1" : { + "variants" : [ { + "hostname" : "redshift-fips.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "resource-groups" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "route53" : { + "endpoints" : { + "aws-iso-global" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "hostname" : "route53.c2s.ic.gov" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-iso-global" + }, + "route53resolver" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "runtime.sagemaker" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "s3" : { + "defaults" : { + "signatureVersions" : [ "s3v4" ] + }, + "endpoints" : { + "fips-us-iso-east-1" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "deprecated" : true, + "hostname" : "s3-fips.us-iso-east-1.c2s.ic.gov" + }, + "fips-us-iso-west-1" : { + "credentialScope" : { + "region" : "us-iso-west-1" + }, + "deprecated" : true, + "hostname" : "s3-fips.us-iso-west-1.c2s.ic.gov" + }, + "us-iso-east-1" : { + "protocols" : [ "http", "https" ], + "signatureVersions" : [ "s3v4" ], + "variants" : [ { + "hostname" : "s3-fips.dualstack.us-iso-east-1.c2s.ic.gov", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-fips.us-iso-east-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + }, + "us-iso-west-1" : { + "variants" : [ { + "hostname" : "s3-fips.dualstack.us-iso-west-1.c2s.ic.gov", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-fips.us-iso-west-1.c2s.ic.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "secretsmanager" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "snowball" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "sns" : { + "endpoints" : { + "us-iso-east-1" : { + "protocols" : [ "http", "https" ] + }, + "us-iso-west-1" : { } + } + }, + "sqs" : { + "endpoints" : { + "us-iso-east-1" : { + "protocols" : [ "http", "https" ] + }, + "us-iso-west-1" : { } + } + }, + "ssm" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "states" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "streams.dynamodb" : { + "defaults" : { + "credentialScope" : { + "service" : "dynamodb" + } + }, + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "sts" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "support" : { + "endpoints" : { + "aws-iso-global" : { + "credentialScope" : { + "region" : "us-iso-east-1" + }, + "hostname" : "support.us-iso-east-1.c2s.ic.gov" + } + }, + "partitionEndpoint" : "aws-iso-global" + }, + "swf" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "synthetics" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "tagging" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + }, + "transcribe" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "transcribestreaming" : { + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "translate" : { + "defaults" : { + "protocols" : [ "https" ] + }, + "endpoints" : { + "us-iso-east-1" : { } + } + }, + "workspaces" : { + "endpoints" : { + "us-iso-east-1" : { }, + "us-iso-west-1" : { } + } + } + } + }, { + "defaults" : { + "hostname" : "{service}.{region}.{dnsSuffix}", + "protocols" : [ "https" ], + "signatureVersions" : [ "v4" ], + "variants" : [ { + "dnsSuffix" : "sc2s.sgov.gov", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "dnsSuffix" : "sc2s.sgov.gov", + "partition" : "aws-iso-b", + "partitionName" : "AWS ISOB (US)", + "regionRegex" : "^us\\-isob\\-\\w+\\-\\d+$", + "regions" : { + "us-isob-east-1" : { + "description" : "US ISOB East (Ohio)" + } + }, + "services" : { + "api.ecr" : { + "endpoints" : { + "us-isob-east-1" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "hostname" : "api.ecr.us-isob-east-1.sc2s.sgov.gov" + } + } + }, + "api.sagemaker" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "appconfig" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "appconfigdata" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "application-autoscaling" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "autoscaling" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "cloudcontrolapi" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "cloudformation" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "cloudtrail" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "codedeploy" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "config" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "directconnect" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "dlm" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "dms" : { + "defaults" : { + "variants" : [ { + "hostname" : "dms.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "endpoints" : { + "dms" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "dms.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + }, + "dms-fips" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "dms.us-isob-east-1.sc2s.sgov.gov" + }, + "us-isob-east-1" : { + "variants" : [ { + "hostname" : "dms.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + }, + "us-isob-east-1-fips" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "dms.us-isob-east-1.sc2s.sgov.gov" + } + } + }, + "ds" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "dynamodb" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "ebs" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "ec2" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "ecs" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "eks" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "elasticache" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "elasticfilesystem" : { + "endpoints" : { + "fips-us-isob-east-1" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "elasticfilesystem-fips.us-isob-east-1.sc2s.sgov.gov" + }, + "us-isob-east-1" : { + "variants" : [ { + "hostname" : "elasticfilesystem-fips.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "elasticloadbalancing" : { + "endpoints" : { + "us-isob-east-1" : { + "protocols" : [ "https" ] + } + } + }, + "elasticmapreduce" : { + "endpoints" : { + "fips-us-isob-east-1" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "elasticmapreduce.us-isob-east-1.sc2s.sgov.gov" + }, + "us-isob-east-1" : { + "variants" : [ { + "hostname" : "elasticmapreduce.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "es" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "events" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "glacier" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "health" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "iam" : { + "endpoints" : { + "aws-iso-b-global" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "hostname" : "iam.us-isob-east-1.sc2s.sgov.gov" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-iso-b-global" + }, + "kinesis" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "kms" : { + "endpoints" : { + "ProdFips" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-isob-east-1.sc2s.sgov.gov" + }, + "us-isob-east-1" : { + "variants" : [ { + "hostname" : "kms-fips.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + }, + "us-isob-east-1-fips" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "kms-fips.us-isob-east-1.sc2s.sgov.gov" + } + } + }, + "lambda" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "license-manager" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "logs" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "metering.marketplace" : { + "defaults" : { + "credentialScope" : { + "service" : "aws-marketplace" + } + }, + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "metrics.sagemaker" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "monitoring" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "outposts" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "ram" : { + "endpoints" : { + "fips-us-isob-east-1" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "ram-fips.us-isob-east-1.sc2s.sgov.gov" + }, + "us-isob-east-1" : { + "variants" : [ { + "hostname" : "ram-fips.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "rbin" : { + "endpoints" : { + "fips-us-isob-east-1" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "rbin-fips.us-isob-east-1.sc2s.sgov.gov" + }, + "us-isob-east-1" : { + "variants" : [ { + "hostname" : "rbin-fips.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "rds" : { + "endpoints" : { + "rds-fips.us-isob-east-1" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-isob-east-1.sc2s.sgov.gov" + }, + "rds.us-isob-east-1" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "variants" : [ { + "hostname" : "rds-fips.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + }, + "us-isob-east-1" : { + "variants" : [ { + "hostname" : "rds-fips.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + }, + "us-isob-east-1-fips" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "rds-fips.us-isob-east-1.sc2s.sgov.gov" + } + } + }, + "redshift" : { + "endpoints" : { + "fips-us-isob-east-1" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "redshift-fips.us-isob-east-1.sc2s.sgov.gov" + }, + "us-isob-east-1" : { + "variants" : [ { + "hostname" : "redshift-fips.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "resource-groups" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "route53" : { + "endpoints" : { + "aws-iso-b-global" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "hostname" : "route53.sc2s.sgov.gov" + } + }, + "isRegionalized" : false, + "partitionEndpoint" : "aws-iso-b-global" + }, + "route53resolver" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "runtime.sagemaker" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "s3" : { + "defaults" : { + "protocols" : [ "http", "https" ], + "signatureVersions" : [ "s3v4" ] + }, + "endpoints" : { + "fips-us-isob-east-1" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "deprecated" : true, + "hostname" : "s3-fips.us-isob-east-1.sc2s.sgov.gov" + }, + "us-isob-east-1" : { + "variants" : [ { + "hostname" : "s3-fips.dualstack.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "dualstack", "fips" ] + }, { + "hostname" : "s3-fips.us-isob-east-1.sc2s.sgov.gov", + "tags" : [ "fips" ] + } ] + } + } + }, + "secretsmanager" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "snowball" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "sns" : { + "defaults" : { + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "sqs" : { + "defaults" : { + "protocols" : [ "http", "https" ], + "sslCommonName" : "{region}.queue.{dnsSuffix}" + }, + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "ssm" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "states" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "streams.dynamodb" : { + "defaults" : { + "credentialScope" : { + "service" : "dynamodb" + }, + "protocols" : [ "http", "https" ] + }, + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "sts" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "support" : { + "endpoints" : { + "aws-iso-b-global" : { + "credentialScope" : { + "region" : "us-isob-east-1" + }, + "hostname" : "support.us-isob-east-1.sc2s.sgov.gov" + } + }, + "partitionEndpoint" : "aws-iso-b-global" + }, + "swf" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "synthetics" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "tagging" : { + "endpoints" : { + "us-isob-east-1" : { } + } + }, + "workspaces" : { + "endpoints" : { + "us-isob-east-1" : { } + } + } + } + }, { + "defaults" : { + "hostname" : "{service}.{region}.{dnsSuffix}", + "protocols" : [ "https" ], + "signatureVersions" : [ "v4" ], + "variants" : [ { + "dnsSuffix" : "cloud.adc-e.uk", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "dnsSuffix" : "cloud.adc-e.uk", + "partition" : "aws-iso-e", + "partitionName" : "AWS ISOE (Europe)", + "regionRegex" : "^eu\\-isoe\\-\\w+\\-\\d+$", + "regions" : { }, + "services" : { } + }, { + "defaults" : { + "hostname" : "{service}.{region}.{dnsSuffix}", + "protocols" : [ "https" ], + "signatureVersions" : [ "v4" ], + "variants" : [ { + "dnsSuffix" : "csp.hci.ic.gov", + "hostname" : "{service}-fips.{region}.{dnsSuffix}", + "tags" : [ "fips" ] + } ] + }, + "dnsSuffix" : "csp.hci.ic.gov", + "partition" : "aws-iso-f", + "partitionName" : "AWS ISOF", + "regionRegex" : "^us\\-isof\\-\\w+\\-\\d+$", + "regions" : { }, + "services" : { } + } ], + "version" : 3 +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/entityresolution/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/entityresolution/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8f3dca13 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/entityresolution/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/entityresolution/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/entityresolution/2018-05-10/paginators-1.json new file mode 100644 index 00000000..051085eb --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/entityresolution/2018-05-10/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "ListMatchingJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "jobs" + }, + "ListMatchingWorkflows": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workflowSummaries" + }, + "ListSchemaMappings": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "schemaList" + }, + "ListIdMappingJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "jobs" + }, + "ListIdMappingWorkflows": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workflowSummaries" + }, + "ListProviderServices": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "providerServiceSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/entityresolution/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/entityresolution/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..e66fd919 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/entityresolution/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..647e891d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/paginators-1.json new file mode 100644 index 00000000..4c0f24e4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListElasticsearchInstanceTypes": { + "result_key": "ElasticsearchInstanceTypes", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListElasticsearchVersions": { + "result_key": "ElasticsearchVersions", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "DescribeReservedElasticsearchInstanceOfferings": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ReservedElasticsearchInstanceOfferings" + }, + "DescribeReservedElasticsearchInstances": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ReservedElasticsearchInstances" + }, + "GetUpgradeHistory": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "UpgradeHistories" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/service-2.json.gz new file mode 100644 index 00000000..8bc828c1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/es/2015-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/events/2014-02-03/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2014-02-03/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..9222f8f6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2014-02-03/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/events/2014-02-03/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2014-02-03/service-2.json.gz new file mode 100644 index 00000000..1d3f2f03 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2014-02-03/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..9b2c005a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/paginators-1.json new file mode 100644 index 00000000..501a3229 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListRuleNamesByTarget": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "RuleNames" + }, + "ListRules": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "Rules" + }, + "ListTargetsByRule": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "Targets" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/service-2.json.gz new file mode 100644 index 00000000..6442711b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/events/2015-10-07/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..29a774e5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/paginators-1.json new file mode 100644 index 00000000..c72d3cba --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "ListExperiments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "experiments" + }, + "ListFeatures": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "features" + }, + "ListLaunches": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "launches" + }, + "ListProjects": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "projects" + }, + "ListSegmentReferences": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "referencedBy" + }, + "ListSegments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "segments" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/service-2.json.gz new file mode 100644 index 00000000..51ef863a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/evidently/2021-02-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e8c9892b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/paginators-1.json new file mode 100644 index 00000000..aa6632a2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListChangesets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "changesets" + }, + "ListDataViews": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "dataViews" + }, + "ListDatasets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "datasets" + }, + "ListPermissionGroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "permissionGroups" + }, + "ListUsers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "users" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/service-2.json.gz new file mode 100644 index 00000000..e2ac00e3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace-data/2020-07-13/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..aa7215a7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/paginators-1.json new file mode 100644 index 00000000..741ca798 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListKxEnvironments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "environments" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/service-2.json.gz new file mode 100644 index 00000000..7db6a6d3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/finspace/2021-03-12/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..204557ff Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/service-2.json.gz new file mode 100644 index 00000000..f8b4858c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/firehose/2015-08-04/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e3c66629 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/service-2.json.gz new file mode 100644 index 00000000..7c486a16 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/fis/2020-12-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c30800ba Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/paginators-1.json new file mode 100644 index 00000000..730571d1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/paginators-1.json @@ -0,0 +1,52 @@ +{ + "pagination": { + "ListComplianceStatus": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PolicyComplianceStatusList" + }, + "ListMemberAccounts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "MemberAccounts" + }, + "ListPolicies": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PolicyList" + }, + "ListAppsLists": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AppsLists" + }, + "ListProtocolsLists": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ProtocolsLists" + }, + "ListThirdPartyFirewallFirewallPolicies": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ThirdPartyFirewallFirewallPolicies" + }, + "ListAdminAccountsForOrganization": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AdminAccounts" + }, + "ListAdminsManagingAccount": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AdminAccounts" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/service-2.json.gz new file mode 100644 index 00000000..d6e29209 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/fms/2018-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a83a6602 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/paginators-1.json new file mode 100644 index 00000000..853dee41 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/paginators-1.json @@ -0,0 +1,88 @@ +{ + "pagination": { + "ListDatasetGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DatasetGroups" + }, + "ListDatasetImportJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DatasetImportJobs" + }, + "ListDatasets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Datasets" + }, + "ListForecastExportJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ForecastExportJobs" + }, + "ListForecasts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Forecasts" + }, + "ListPredictors": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Predictors" + }, + "ListPredictorBacktestExportJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PredictorBacktestExportJobs" + }, + "ListExplainabilities": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Explainabilities" + }, + "ListExplainabilityExports": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ExplainabilityExports" + }, + "ListMonitorEvaluations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PredictorMonitorEvaluations" + }, + "ListMonitors": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Monitors" + }, + "ListWhatIfAnalyses": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "WhatIfAnalyses" + }, + "ListWhatIfForecastExports": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "WhatIfForecastExports" + }, + "ListWhatIfForecasts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "WhatIfForecasts" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/service-2.json.gz new file mode 100644 index 00000000..fd832c29 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/forecast/2018-06-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8f2e9846 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/service-2.json.gz new file mode 100644 index 00000000..12a04b87 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/forecastquery/2018-06-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8a101795 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/service-2.json.gz new file mode 100644 index 00000000..8905e908 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/frauddetector/2019-11-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/freetier/2023-09-07/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/freetier/2023-09-07/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..12e1b8f8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/freetier/2023-09-07/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/freetier/2023-09-07/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/freetier/2023-09-07/paginators-1.json new file mode 100644 index 00000000..2ccdd2b7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/freetier/2023-09-07/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "GetFreeTierUsage": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "freeTierUsages" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/freetier/2023-09-07/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/freetier/2023-09-07/service-2.json.gz new file mode 100644 index 00000000..7074bb8b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/freetier/2023-09-07/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e0cb9d34 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/examples-1.json new file mode 100644 index 00000000..1993a235 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/examples-1.json @@ -0,0 +1,438 @@ +{ + "version": "1.0", + "examples": { + "CopyBackup": [ + { + "input": { + "SourceBackupId": "backup-03e3c82e0183b7b6b", + "SourceRegion": "us-east-2" + }, + "output": { + "Backup": { + "BackupId": "backup-0a3364eded1014b28", + "CreationTime": 1617954808.068, + "FileSystem": { + "FileSystemId": "fs-0498eed5fe91001ec", + "FileSystemType": "LUSTRE", + "LustreConfiguration": { + "AutomaticBackupRetentionDays": 0, + "DeploymentType": "PERSISTENT_1", + "PerUnitStorageThroughput": 50, + "WeeklyMaintenanceStartTime": "1:05:00" + }, + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:file-system/fs-0f5179e395f597e66", + "StorageCapacity": 2400, + "StorageType": "SSD" + }, + "KmsKeyId": "arn:aws:fsx:us-east-1:012345678912:key/d1234e22-543a-12b7-a98f-e12c2b54001a", + "Lifecycle": "COPYING", + "OwnerId": "123456789012", + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:backup/backup-0a3364eded1014b28", + "Tags": [ + { + "Key": "Name", + "Value": "MyBackup" + } + ], + "Type": "USER_INITIATED" + } + }, + "comments": { + }, + "description": "This operation copies an Amazon FSx backup.", + "id": "to-copy-a-backup-1481847318640", + "title": "To copy a backup" + } + ], + "CreateBackup": [ + { + "input": { + "FileSystemId": "fs-0498eed5fe91001ec", + "Tags": [ + { + "Key": "Name", + "Value": "MyBackup" + } + ] + }, + "output": { + "Backup": { + "BackupId": "backup-03e3c82e0183b7b6b", + "CreationTime": "1481841524.0", + "FileSystem": { + "FileSystemId": "fs-0498eed5fe91001ec", + "OwnerId": "012345678912", + "StorageCapacity": 300, + "WindowsConfiguration": { + "ActiveDirectoryId": "d-1234abcd12", + "AutomaticBackupRetentionDays": 30, + "DailyAutomaticBackupStartTime": "05:00", + "WeeklyMaintenanceStartTime": "1:05:00" + } + }, + "Lifecycle": "CREATING", + "ProgressPercent": 0, + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:backup/backup-03e3c82e0183b7b6b", + "Tags": [ + { + "Key": "Name", + "Value": "MyBackup" + } + ], + "Type": "USER_INITIATED" + } + }, + "comments": { + }, + "description": "This operation creates a new backup.", + "id": "to-create-a-new-backup-1481840798597", + "title": "To create a new backup" + } + ], + "CreateFileSystem": [ + { + "input": { + "ClientRequestToken": "a8ca07e4-61ec-4399-99f4-19853801bcd5", + "FileSystemType": "WINDOWS", + "KmsKeyId": "arn:aws:kms:us-east-1:012345678912:key/1111abcd-2222-3333-4444-55556666eeff", + "SecurityGroupIds": [ + "sg-edcd9784" + ], + "StorageCapacity": 3200, + "StorageType": "HDD", + "SubnetIds": [ + "subnet-1234abcd" + ], + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ], + "WindowsConfiguration": { + "ActiveDirectoryId": "d-1234abcd12", + "Aliases": [ + "accounting.corp.example.com" + ], + "AutomaticBackupRetentionDays": 30, + "DailyAutomaticBackupStartTime": "05:00", + "ThroughputCapacity": 32, + "WeeklyMaintenanceStartTime": "1:05:00" + } + }, + "output": { + "FileSystem": { + "CreationTime": "1481841524.0", + "DNSName": "fs-0123456789abcdef0.fsx.com", + "FileSystemId": "fs-0123456789abcdef0", + "KmsKeyId": "arn:aws:kms:us-east-1:012345678912:key/1111abcd-2222-3333-4444-55556666eeff", + "Lifecycle": "CREATING", + "OwnerId": "012345678912", + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:file-system/fs-0123456789abcdef0", + "StorageCapacity": 3200, + "StorageType": "HDD", + "SubnetIds": [ + "subnet-1234abcd" + ], + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ], + "VpcId": "vpc-ab1234cd", + "WindowsConfiguration": { + "ActiveDirectoryId": "d-1234abcd12", + "Aliases": [ + { + "Lifecycle": "CREATING", + "Name": "accounting.corp.example.com" + } + ], + "AutomaticBackupRetentionDays": 30, + "DailyAutomaticBackupStartTime": "05:00", + "ThroughputCapacity": 32, + "WeeklyMaintenanceStartTime": "1:05:00" + } + } + }, + "comments": { + }, + "description": "This operation creates a new Amazon FSx for Windows File Server file system.", + "id": "to-create-a-new-file-system-1481840798547", + "title": "To create a new file system" + } + ], + "CreateFileSystemFromBackup": [ + { + "input": { + "BackupId": "backup-03e3c82e0183b7b6b", + "ClientRequestToken": "f4c94ed7-238d-4c46-93db-48cd62ec33b7", + "SecurityGroupIds": [ + "sg-edcd9784" + ], + "SubnetIds": [ + "subnet-1234abcd" + ], + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ], + "WindowsConfiguration": { + "ThroughputCapacity": 8 + } + }, + "output": { + "FileSystem": { + "CreationTime": "1481841524.0", + "DNSName": "fs-0498eed5fe91001ec.fsx.com", + "FileSystemId": "fs-0498eed5fe91001ec", + "KmsKeyId": "arn:aws:kms:us-east-1:012345678912:key/0ff3ea8d-130e-4133-877f-93908b6fdbd6", + "Lifecycle": "CREATING", + "OwnerId": "012345678912", + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:file-system/fs-0498eed5fe91001ec", + "StorageCapacity": 300, + "SubnetIds": [ + "subnet-1234abcd" + ], + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ], + "VpcId": "vpc-ab1234cd", + "WindowsConfiguration": { + "ActiveDirectoryId": "d-1234abcd12", + "AutomaticBackupRetentionDays": 30, + "DailyAutomaticBackupStartTime": "05:00", + "ThroughputCapacity": 8, + "WeeklyMaintenanceStartTime": "1:05:00" + } + } + }, + "comments": { + }, + "description": "This operation creates a new file system from backup.", + "id": "to-create-a-new-file-system-from-backup-1481840798598", + "title": "To create a new file system from backup" + } + ], + "DeleteBackup": [ + { + "input": { + "BackupId": "backup-03e3c82e0183b7b6b" + }, + "output": { + "BackupId": "backup-03e3c82e0183b7b6b", + "Lifecycle": "DELETED" + }, + "comments": { + }, + "description": "This operation deletes an Amazon FSx file system backup.", + "id": "to-delete-a-file-system-1481847318399", + "title": "To delete a backup" + } + ], + "DeleteFileSystem": [ + { + "input": { + "FileSystemId": "fs-0498eed5fe91001ec" + }, + "output": { + "FileSystemId": "fs-0498eed5fe91001ec", + "Lifecycle": "DELETING" + }, + "comments": { + }, + "description": "This operation deletes an Amazon FSx file system.", + "id": "to-delete-a-file-system-1481847318348", + "title": "To delete a file system" + } + ], + "DescribeBackups": [ + { + "input": { + }, + "output": { + "Backups": [ + { + "BackupId": "backup-03e3c82e0183b7b6b", + "CreationTime": "1481841524.0", + "FileSystem": { + "FileSystemId": "fs-0498eed5fe91001ec", + "OwnerId": "012345678912", + "StorageCapacity": 300, + "WindowsConfiguration": { + "ActiveDirectoryId": "d-1234abcd12", + "AutomaticBackupRetentionDays": 30, + "DailyAutomaticBackupStartTime": "05:00", + "WeeklyMaintenanceStartTime": "1:05:00" + } + }, + "Lifecycle": "AVAILABLE", + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:backup/backup-03e3c82e0183b7b6b", + "Tags": [ + { + "Key": "Name", + "Value": "MyBackup" + } + ], + "Type": "USER_INITIATED" + } + ] + }, + "comments": { + }, + "description": "This operation describes all of the Amazon FSx backups in an account.", + "id": "to-describe-backups-1481848448499", + "title": "To describe Amazon FSx backups" + } + ], + "DescribeFileSystems": [ + { + "input": { + }, + "output": { + "FileSystems": [ + { + "CreationTime": "1481841524.0", + "DNSName": "fs-0498eed5fe91001ec.fsx.com", + "FileSystemId": "fs-0498eed5fe91001ec", + "KmsKeyId": "arn:aws:kms:us-east-1:012345678912:key/0ff3ea8d-130e-4133-877f-93908b6fdbd6", + "Lifecycle": "AVAILABLE", + "NetworkInterfaceIds": [ + "eni-abcd1234" + ], + "OwnerId": "012345678912", + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:file-system/fs-0498eed5fe91001ec", + "StorageCapacity": 300, + "SubnetIds": [ + "subnet-1234abcd" + ], + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ], + "VpcId": "vpc-ab1234cd", + "WindowsConfiguration": { + "ActiveDirectoryId": "d-1234abcd12", + "AutomaticBackupRetentionDays": 30, + "DailyAutomaticBackupStartTime": "05:00", + "ThroughputCapacity": 8, + "WeeklyMaintenanceStartTime": "1:05:00" + } + } + ] + }, + "comments": { + }, + "description": "This operation describes all of the Amazon FSx file systems in an account.", + "id": "to-describe-a-file-systems-1481848448460", + "title": "To describe an Amazon FSx file system" + } + ], + "ListTagsForResource": [ + { + "input": { + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:file-system/fs-0498eed5fe91001ec" + }, + "output": { + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ] + }, + "comments": { + }, + "description": "This operation lists tags for an Amazon FSx resource.", + "id": "to-list-tags-for-a-fsx-resource-1481847318372", + "title": "To list tags for a resource" + } + ], + "TagResource": [ + { + "input": { + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:file-system/fs-0498eed5fe91001ec", + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ] + }, + "comments": { + }, + "description": "This operation tags an Amazon FSx resource.", + "id": "to-tag-a-fsx-resource-1481847318371", + "title": "To tag a resource" + } + ], + "UntagResource": [ + { + "input": { + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:file-system/fs-0498eed5fe91001ec", + "TagKeys": [ + "Name" + ] + }, + "comments": { + }, + "description": "This operation untags an Amazon FSx resource.", + "id": "to-untag-a-fsx-resource-1481847318373", + "title": "To untag a resource" + } + ], + "UpdateFileSystem": [ + { + "input": { + "FileSystemId": "fs-0498eed5fe91001ec", + "WindowsConfiguration": { + "AutomaticBackupRetentionDays": 10, + "DailyAutomaticBackupStartTime": "06:00", + "WeeklyMaintenanceStartTime": "3:06:00" + } + }, + "output": { + "FileSystem": { + "CreationTime": "1481841524.0", + "DNSName": "fs-0498eed5fe91001ec.fsx.com", + "FileSystemId": "fs-0498eed5fe91001ec", + "KmsKeyId": "arn:aws:kms:us-east-1:012345678912:key/0ff3ea8d-130e-4133-877f-93908b6fdbd6", + "Lifecycle": "AVAILABLE", + "OwnerId": "012345678912", + "ResourceARN": "arn:aws:fsx:us-east-1:012345678912:file-system/fs-0498eed5fe91001ec", + "StorageCapacity": 300, + "SubnetIds": [ + "subnet-1234abcd" + ], + "Tags": [ + { + "Key": "Name", + "Value": "MyFileSystem" + } + ], + "VpcId": "vpc-ab1234cd", + "WindowsConfiguration": { + "AutomaticBackupRetentionDays": 10, + "DailyAutomaticBackupStartTime": "06:00", + "ThroughputCapacity": 8, + "WeeklyMaintenanceStartTime": "3:06:00" + } + } + }, + "comments": { + }, + "description": "This operation updates an existing file system.", + "id": "to-update-a-file-system-1481840798595", + "title": "To update an existing file system" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/paginators-1.json new file mode 100644 index 00000000..c9536b15 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "DescribeBackups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Backups" + }, + "DescribeFileSystems": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "FileSystems" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Tags" + }, + "DescribeStorageVirtualMachines": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "StorageVirtualMachines" + }, + "DescribeVolumes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Volumes" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/service-2.json.gz new file mode 100644 index 00000000..008d5864 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/fsx/2018-03-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..75f5183a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/paginators-1.json new file mode 100644 index 00000000..d7c0d595 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/paginators-1.json @@ -0,0 +1,136 @@ +{ + "pagination": { + "DescribeFleetAttributes": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "FleetAttributes" + }, + "DescribeFleetCapacity": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "FleetCapacity" + }, + "DescribeFleetEvents": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Events" + }, + "DescribeFleetUtilization": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "FleetUtilization" + }, + "DescribeGameSessionDetails": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "GameSessionDetails" + }, + "DescribeGameSessionQueues": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "GameSessionQueues" + }, + "DescribeGameSessions": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "GameSessions" + }, + "DescribeInstances": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Instances" + }, + "DescribeMatchmakingConfigurations": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Configurations" + }, + "DescribeMatchmakingRuleSets": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "RuleSets" + }, + "DescribePlayerSessions": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "PlayerSessions" + }, + "DescribeScalingPolicies": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "ScalingPolicies" + }, + "ListAliases": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Aliases" + }, + "ListBuilds": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "Builds" + }, + "ListFleets": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "FleetIds" + }, + "SearchGameSessions": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "GameSessions" + }, + "DescribeGameServerInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "GameServerInstances" + }, + "ListGameServerGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "GameServerGroups" + }, + "ListGameServers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "GameServers" + }, + "ListScripts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "Scripts" + }, + "ListCompute": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "ComputeList" + }, + "ListLocations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "Locations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/service-2.json.gz new file mode 100644 index 00000000..42da0cd4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/gamelift/2015-10-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3344fe69 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/examples-1.json new file mode 100644 index 00000000..7ecea259 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/examples-1.json @@ -0,0 +1,806 @@ +{ + "version": "1.0", + "examples": { + "AbortMultipartUpload": [ + { + "input": { + "accountId": "-", + "uploadId": "19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ", + "vaultName": "my-vault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example deletes an in-progress multipart upload to a vault named my-vault:", + "id": "f3d907f6-e71c-420c-8f71-502346a2c48a", + "title": "To abort a multipart upload identified by the upload ID" + } + ], + "AbortVaultLock": [ + { + "input": { + "accountId": "-", + "vaultName": "examplevault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example aborts the vault locking process if the vault lock is not in the Locked state for the vault named examplevault.", + "id": "to-abort-a-vault-lock-1481839357947", + "title": "To abort a vault lock" + } + ], + "AddTagsToVault": [ + { + "input": { + "Tags": { + "examplekey1": "examplevalue1", + "examplekey2": "examplevalue2" + }, + "accountId": "-", + "vaultName": "my-vault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example adds two tags to a my-vault.", + "id": "add-tags-to-vault-post-tags-add-1481663457694", + "title": "To add tags to a vault" + } + ], + "CompleteMultipartUpload": [ + { + "input": { + "accountId": "-", + "archiveSize": "3145728", + "checksum": "9628195fcdbcbbe76cdde456d4646fa7de5f219fb39823836d81f0cc0e18aa67", + "uploadId": "19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ", + "vaultName": "my-vault" + }, + "output": { + "archiveId": "NkbByEejwEggmBz2fTHgJrg0XBoDfjP4q6iu87-TjhqG6eGoOY9Z8i1_AUyUsuhPAdTqLHy8pTl5nfCFJmDl2yEZONi5L26Omw12vcs01MNGntHEQL8MBfGlqrEXAMPLEArchiveId", + "checksum": "9628195fcdbcbbe76cdde456d4646fa7de5f219fb39823836d81f0cc0e18aa67", + "location": "/111122223333/vaults/my-vault/archives/NkbByEejwEggmBz2fTHgJrg0XBoDfjP4q6iu87-TjhqG6eGoOY9Z8i1_AUyUsuhPAdTqLHy8pTl5nfCFJmDl2yEZONi5L26Omw12vcs01MNGntHEQL8MBfGlqrEXAMPLEArchiveId" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example completes a multipart upload for a 3 MiB archive.", + "id": "272aa0b8-e44c-4a64-add2-ad905a37984d", + "title": "To complete a multipart upload" + } + ], + "CompleteVaultLock": [ + { + "input": { + "accountId": "-", + "lockId": "AE863rKkWZU53SLW5be4DUcW", + "vaultName": "example-vault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example completes the vault locking process by transitioning the vault lock from the InProgress state to the Locked state.", + "id": "to-complete-a-vault-lock-1481839721312", + "title": "To complete a vault lock" + } + ], + "CreateVault": [ + { + "input": { + "accountId": "-", + "vaultName": "my-vault" + }, + "output": { + "location": "/111122223333/vaults/my-vault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a new vault named my-vault.", + "id": "1dc0313d-ace1-4e6c-9d13-1ec7813b14b7", + "title": "To create a new vault" + } + ], + "DeleteArchive": [ + { + "input": { + "accountId": "-", + "archiveId": "NkbByEejwEggmBz2fTHgJrg0XBoDfjP4q6iu87-TjhqG6eGoOY9Z8i1_AUyUsuhPAdTqLHy8pTl5nfCFJmDl2yEZONi5L26Omw12vcs01MNGntHEQL8MBfGlqrEXAMPLEArchiveId", + "vaultName": "examplevault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example deletes the archive specified by the archive ID.", + "id": "delete-archive-1481667809463", + "title": "To delete an archive" + } + ], + "DeleteVault": [ + { + "input": { + "accountId": "-", + "vaultName": "my-vault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example deletes a vault named my-vault:", + "id": "7f7f000b-4bdb-40d2-91e6-7c902f60f60f", + "title": "To delete a vault" + } + ], + "DeleteVaultAccessPolicy": [ + { + "input": { + "accountId": "-", + "vaultName": "examplevault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example deletes the access policy associated with the vault named examplevault.", + "id": "to-delete-the-vault-access-policy-1481840424677", + "title": "To delete the vault access policy" + } + ], + "DeleteVaultNotifications": [ + { + "input": { + "accountId": "-", + "vaultName": "examplevault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example deletes the notification configuration set for the vault named examplevault.", + "id": "to-delete-the-notification-configuration-set-for-a-vault-1481840646090", + "title": "To delete the notification configuration set for a vault" + } + ], + "DescribeJob": [ + { + "input": { + "accountId": "-", + "jobId": "zbxcm3Z_3z5UkoroF7SuZKrxgGoDc3RloGduS7Eg-RO47Yc6FxsdGBgf_Q2DK5Ejh18CnTS5XW4_XqlNHS61dsO4Cn", + "vaultName": "my-vault" + }, + "output": { + "Action": "InventoryRetrieval", + "Completed": false, + "CreationDate": "2015-07-17T20:23:41.616Z", + "InventoryRetrievalParameters": { + "Format": "JSON" + }, + "JobId": "zbxcm3Z_3z5UkoroF7SuZKrxgGoDc3RloGduS7Eg-RO47Yc6FxsdGBgf_Q2DK5Ejh18CnTS5XW4_XqlNHS61dsO4CnMW", + "StatusCode": "InProgress", + "VaultARN": "arn:aws:glacier:us-west-2:0123456789012:vaults/my-vault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example returns information about the previously initiated job specified by the job ID.", + "id": "to-get-information-about-a-job-you-previously-initiated-1481840928592", + "title": "To get information about a previously initiated job" + } + ], + "DescribeVault": [ + { + "input": { + "accountId": "-", + "vaultName": "my-vault" + }, + "output": { + "CreationDate": "2016-09-23T19:27:18.665Z", + "NumberOfArchives": 0, + "SizeInBytes": 0, + "VaultARN": "arn:aws:glacier:us-west-2:111122223333:vaults/my-vault", + "VaultName": "my-vault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example retrieves data about a vault named my-vault.", + "id": "3c1c6e9d-f5a2-427a-aa6a-f439eacfc05f", + "title": "To retrieve information about a vault" + } + ], + "GetDataRetrievalPolicy": [ + { + "input": { + "accountId": "-" + }, + "output": { + "Policy": { + "Rules": [ + { + "BytesPerHour": 10737418240, + "Strategy": "BytesPerHour" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example returns the current data retrieval policy for the account.", + "id": "to-get-the-current-data-retrieval-policy-for-the-account-1481851580439", + "title": "To get the current data retrieval policy for an account" + } + ], + "GetJobOutput": [ + { + "input": { + "accountId": "-", + "jobId": "zbxcm3Z_3z5UkoroF7SuZKrxgGoDc3RloGduS7Eg-RO47Yc6FxsdGBgf_Q2DK5Ejh18CnTS5XW4_XqlNHS61dsO4CnMW", + "range": "", + "vaultName": "my-vaul" + }, + "output": { + "acceptRanges": "bytes", + "body": "inventory-data", + "contentType": "application/json", + "status": 200 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example downloads the output of a previously initiated inventory retrieval job that is identified by the job ID.", + "id": "to-get-the-output-of-a-previously-initiated-job-1481848550859", + "title": "To get the output of a previously initiated job" + } + ], + "GetVaultAccessPolicy": [ + { + "input": { + "accountId": "-", + "vaultName": "example-vault" + }, + "output": { + "policy": { + "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Define-owner-access-rights\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::999999999999:root\"},\"Action\":\"glacier:DeleteArchive\",\"Resource\":\"arn:aws:glacier:us-west-2:999999999999:vaults/examplevault\"}]}" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example retrieves the access-policy set on the vault named example-vault.", + "id": "to--get-the-access-policy-set-on-the-vault-1481936004590", + "title": "To get the access-policy set on the vault" + } + ], + "GetVaultLock": [ + { + "input": { + "accountId": "-", + "vaultName": "examplevault" + }, + "output": { + "CreationDate": "exampledate", + "ExpirationDate": "exampledate", + "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Define-vault-lock\",\"Effect\":\"Deny\",\"Principal\":{\"AWS\":\"arn:aws:iam::999999999999:root\"},\"Action\":\"glacier:DeleteArchive\",\"Resource\":\"arn:aws:glacier:us-west-2:999999999999:vaults/examplevault\",\"Condition\":{\"NumericLessThanEquals\":{\"glacier:ArchiveAgeinDays\":\"365\"}}}]}", + "State": "InProgress" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example retrieves the attributes from the lock-policy subresource set on the vault named examplevault.", + "id": "to-retrieve-vault-lock-policy-related-attributes-that-are-set-on-a-vault-1481851363097", + "title": "To retrieve vault lock-policy related attributes that are set on a vault" + } + ], + "GetVaultNotifications": [ + { + "input": { + "accountId": "-", + "vaultName": "my-vault" + }, + "output": { + "vaultNotificationConfig": { + "Events": [ + "InventoryRetrievalCompleted", + "ArchiveRetrievalCompleted" + ], + "SNSTopic": "arn:aws:sns:us-west-2:0123456789012:my-vault" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example retrieves the notification-configuration for the vault named my-vault.", + "id": "to-get-the-notification-configuration-for-the-specified-vault-1481918746677", + "title": "To get the notification-configuration for the specified vault" + } + ], + "InitiateJob": [ + { + "input": { + "accountId": "-", + "jobParameters": { + "Description": "My inventory job", + "Format": "CSV", + "SNSTopic": "arn:aws:sns:us-west-2:111111111111:Glacier-InventoryRetrieval-topic-Example", + "Type": "inventory-retrieval" + }, + "vaultName": "examplevault" + }, + "output": { + "jobId": " HkF9p6o7yjhFx-K3CGl6fuSm6VzW9T7esGQfco8nUXVYwS0jlb5gq1JZ55yHgt5vP54ZShjoQzQVVh7vEXAMPLEjobID", + "location": "/111122223333/vaults/examplevault/jobs/HkF9p6o7yjhFx-K3CGl6fuSm6VzW9T7esGQfco8nUXVYwS0jlb5gq1JZ55yHgt5vP54ZShjoQzQVVh7vEXAMPLEjobID" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example initiates an inventory-retrieval job for the vault named examplevault.", + "id": "to-initiate-an-inventory-retrieval-job-1482186883826", + "title": "To initiate an inventory-retrieval job" + } + ], + "InitiateMultipartUpload": [ + { + "input": { + "accountId": "-", + "partSize": "1048576", + "vaultName": "my-vault" + }, + "output": { + "location": "/111122223333/vaults/my-vault/multipart-uploads/19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ", + "uploadId": "19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example initiates a multipart upload to a vault named my-vault with a part size of 1 MiB (1024 x 1024 bytes) per file.", + "id": "72f2db19-3d93-4c74-b2ed-38703baacf49", + "title": "To initiate a multipart upload" + } + ], + "InitiateVaultLock": [ + { + "input": { + "accountId": "-", + "policy": { + "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Define-vault-lock\",\"Effect\":\"Deny\",\"Principal\":{\"AWS\":\"arn:aws:iam::999999999999:root\"},\"Action\":\"glacier:DeleteArchive\",\"Resource\":\"arn:aws:glacier:us-west-2:999999999999:vaults/examplevault\",\"Condition\":{\"NumericLessThanEquals\":{\"glacier:ArchiveAgeinDays\":\"365\"}}}]}" + }, + "vaultName": "my-vault" + }, + "output": { + "lockId": "AE863rKkWZU53SLW5be4DUcW" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example initiates the vault locking process for the vault named my-vault.", + "id": "to-initiate-the-vault-locking-process-1481919693394", + "title": "To initiate the vault locking process" + } + ], + "ListJobs": [ + { + "input": { + "accountId": "-", + "vaultName": "my-vault" + }, + "output": { + "JobList": [ + { + "Action": "ArchiveRetrieval", + "ArchiveId": "kKB7ymWJVpPSwhGP6ycSOAekp9ZYe_--zM_mw6k76ZFGEIWQX-ybtRDvc2VkPSDtfKmQrj0IRQLSGsNuDp-AJVlu2ccmDSyDUmZwKbwbpAdGATGDiB3hHO0bjbGehXTcApVud_wyDw", + "ArchiveSHA256TreeHash": "9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67", + "ArchiveSizeInBytes": 3145728, + "Completed": false, + "CreationDate": "2015-07-17T21:16:13.840Z", + "JobDescription": "Retrieve archive on 2015-07-17", + "JobId": "l7IL5-EkXyEY9Ws95fClzIbk2O5uLYaFdAYOi-azsX_Z8V6NH4yERHzars8wTKYQMX6nBDI9cMNHzyZJO59-8N9aHWav", + "RetrievalByteRange": "0-3145727", + "SHA256TreeHash": "9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67", + "SNSTopic": "arn:aws:sns:us-west-2:0123456789012:my-vault", + "StatusCode": "InProgress", + "VaultARN": "arn:aws:glacier:us-west-2:0123456789012:vaults/my-vault" + }, + { + "Action": "InventoryRetrieval", + "Completed": false, + "CreationDate": "2015-07-17T20:23:41.616Z", + "InventoryRetrievalParameters": { + "Format": "JSON" + }, + "JobId": "zbxcm3Z_3z5UkoroF7SuZKrxgGoDc3RloGduS7Eg-RO47Yc6FxsdGBgf_Q2DK5Ejh18CnTS5XW4_XqlNHS61dsO4CnMW", + "StatusCode": "InProgress", + "VaultARN": "arn:aws:glacier:us-west-2:0123456789012:vaults/my-vault" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example lists jobs for the vault named my-vault.", + "id": "to-list-jobs-for-a-vault-1481920530537", + "title": "To list jobs for a vault" + } + ], + "ListMultipartUploads": [ + { + "input": { + "accountId": "-", + "vaultName": "examplevault" + }, + "output": { + "Marker": "null", + "UploadsList": [ + { + "ArchiveDescription": "archive 1", + "CreationDate": "2012-03-19T23:20:59.130Z", + "MultipartUploadId": "xsQdFIRsfJr20CW2AbZBKpRZAFTZSJIMtL2hYf8mvp8dM0m4RUzlaqoEye6g3h3ecqB_zqwB7zLDMeSWhwo65re4C4Ev", + "PartSizeInBytes": 4194304, + "VaultARN": "arn:aws:glacier:us-west-2:012345678901:vaults/examplevault" + }, + { + "ArchiveDescription": "archive 2", + "CreationDate": "2012-04-01T15:00:00.000Z", + "MultipartUploadId": "nPyGOnyFcx67qqX7E-0tSGiRi88hHMOwOxR-_jNyM6RjVMFfV29lFqZ3rNsSaWBugg6OP92pRtufeHdQH7ClIpSF6uJc", + "PartSizeInBytes": 4194304, + "VaultARN": "arn:aws:glacier:us-west-2:012345678901:vaults/examplevault" + }, + { + "ArchiveDescription": "archive 3", + "CreationDate": "2012-03-20T17:03:43.221Z", + "MultipartUploadId": "qt-RBst_7yO8gVIonIBsAxr2t-db0pE4s8MNeGjKjGdNpuU-cdSAcqG62guwV9r5jh5mLyFPzFEitTpNE7iQfHiu1XoV", + "PartSizeInBytes": 4194304, + "VaultARN": "arn:aws:glacier:us-west-2:012345678901:vaults/examplevault" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example lists all the in-progress multipart uploads for the vault named examplevault.", + "id": "to-list-all-the-in-progress-multipart-uploads-for-a-vault-1481935250590", + "title": "To list all the in-progress multipart uploads for a vault" + } + ], + "ListParts": [ + { + "input": { + "accountId": "-", + "uploadId": "OW2fM5iVylEpFEMM9_HpKowRapC3vn5sSL39_396UW9zLFUWVrnRHaPjUJddQ5OxSHVXjYtrN47NBZ-khxOjyEXAMPLE", + "vaultName": "examplevault" + }, + "output": { + "ArchiveDescription": "archive description", + "CreationDate": "2012-03-20T17:03:43.221Z", + "Marker": "null", + "MultipartUploadId": "OW2fM5iVylEpFEMM9_HpKowRapC3vn5sSL39_396UW9zLFUWVrnRHaPjUJddQ5OxSHVXjYtrN47NBZ-khxOjyEXAMPLE", + "PartSizeInBytes": 4194304, + "Parts": [ + { + "RangeInBytes": "0-4194303", + "SHA256TreeHash": "01d34dabf7be316472c93b1ef80721f5d4" + }, + { + "RangeInBytes": "4194304-8388607", + "SHA256TreeHash": "0195875365afda349fc21c84c099987164" + } + ], + "VaultARN": "arn:aws:glacier:us-west-2:012345678901:vaults/demo1-vault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example lists all the parts of a multipart upload.", + "id": "to-list-the-parts-of-an-archive-that-have-been-uploaded-in-a-multipart-upload-1481921767590", + "title": "To list the parts of an archive that have been uploaded in a multipart upload" + } + ], + "ListProvisionedCapacity": [ + { + "input": { + "accountId": "-" + }, + "output": { + "ProvisionedCapacityList": [ + { + "CapacityId": "zSaq7NzHFQDANTfQkDen4V7z", + "ExpirationDate": "2016-12-12T00:00:00.000Z", + "StartDate": "2016-11-11T20:11:51.095Z" + }, + { + "CapacityId": "yXaq7NzHFQNADTfQkDen4V7z", + "ExpirationDate": "2017-01-15T00:00:00.000Z", + "StartDate": "2016-12-13T20:11:51.095Z" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example lists the provisioned capacity units for an account.", + "id": "to-list-the-provisioned-capacity-units-for-an-account-1481923656130", + "title": "To list the provisioned capacity units for an account" + } + ], + "ListTagsForVault": [ + { + "input": { + "accountId": "-", + "vaultName": "examplevault" + }, + "output": { + "Tags": { + "date": "july2015", + "id": "1234" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example lists all the tags attached to the vault examplevault.", + "id": "list-tags-for-vault-1481755839720", + "title": "To list the tags for a vault" + } + ], + "ListVaults": [ + { + "input": { + "accountId": "-", + "limit": "", + "marker": "" + }, + "output": { + "VaultList": [ + { + "CreationDate": "2015-04-06T21:23:45.708Z", + "LastInventoryDate": "2015-04-07T00:26:19.028Z", + "NumberOfArchives": 1, + "SizeInBytes": 3178496, + "VaultARN": "arn:aws:glacier:us-west-2:0123456789012:vaults/my-vault", + "VaultName": "my-vault" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example lists all vaults owned by the specified AWS account.", + "id": "list-vaults-1481753006990", + "title": "To list all vaults owned by the calling user's account" + } + ], + "PurchaseProvisionedCapacity": [ + { + "input": { + "accountId": "-" + }, + "output": { + "capacityId": "zSaq7NzHFQDANTfQkDen4V7z" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example purchases provisioned capacity unit for an AWS account.", + "id": "to-purchases-a-provisioned-capacity-unit-for-an-aws-account-1481927446662", + "title": "To purchases a provisioned capacity unit for an AWS account" + } + ], + "RemoveTagsFromVault": [ + { + "input": { + "TagKeys": [ + "examplekey1", + "examplekey2" + ], + "accountId": "-", + "vaultName": "examplevault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example removes two tags from the vault named examplevault.", + "id": "remove-tags-from-vault-1481754998801", + "title": "To remove tags from a vault" + } + ], + "SetDataRetrievalPolicy": [ + { + "input": { + "Policy": { + "Rules": [ + { + "BytesPerHour": 10737418240, + "Strategy": "BytesPerHour" + } + ] + }, + "accountId": "-" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example sets and then enacts a data retrieval policy.", + "id": "to-set-and-then-enact-a-data-retrieval-policy--1481928352408", + "title": "To set and then enact a data retrieval policy " + } + ], + "SetVaultAccessPolicy": [ + { + "input": { + "accountId": "-", + "policy": { + "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Define-owner-access-rights\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::999999999999:root\"},\"Action\":\"glacier:DeleteArchive\",\"Resource\":\"arn:aws:glacier:us-west-2:999999999999:vaults/examplevault\"}]}" + }, + "vaultName": "examplevault" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example configures an access policy for the vault named examplevault.", + "id": "to--set-the-access-policy-on-a-vault-1482185872517", + "title": "To set the access-policy on a vault" + } + ], + "SetVaultNotifications": [ + { + "input": { + "accountId": "-", + "vaultName": "examplevault", + "vaultNotificationConfig": { + "Events": [ + "ArchiveRetrievalCompleted", + "InventoryRetrievalCompleted" + ], + "SNSTopic": "arn:aws:sns:us-west-2:012345678901:mytopic" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example sets the examplevault notification configuration.", + "id": "to-configure-a-vault-to-post-a-message-to-an-amazon-simple-notification-service-amazon-sns-topic-when-jobs-complete-1482186397475", + "title": "To configure a vault to post a message to an Amazon SNS topic when jobs complete" + } + ], + "UploadArchive": [ + { + "input": { + "accountId": "-", + "archiveDescription": "", + "body": "example-data-to-upload", + "checksum": "", + "vaultName": "my-vault" + }, + "output": { + "archiveId": "kKB7ymWJVpPSwhGP6ycSOAekp9ZYe_--zM_mw6k76ZFGEIWQX-ybtRDvc2VkPSDtfKmQrj0IRQLSGsNuDp-AJVlu2ccmDSyDUmZwKbwbpAdGATGDiB3hHO0bjbGehXTcApVud_wyDw", + "checksum": "969fb39823836d81f0cc028195fcdbcbbe76cdde932d4646fa7de5f21e18aa67", + "location": "/0123456789012/vaults/my-vault/archives/kKB7ymWJVpPSwhGP6ycSOAekp9ZYe_--zM_mw6k76ZFGEIWQX-ybtRDvc2VkPSDtfKmQrj0IRQLSGsNuDp-AJVlu2ccmDSyDUmZwKbwbpAdGATGDiB3hHO0bjbGehXTcApVud_wyDw" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example adds an archive to a vault.", + "id": "upload-archive-1481668510494", + "title": "To upload an archive" + } + ], + "UploadMultipartPart": [ + { + "input": { + "accountId": "-", + "body": "part1", + "checksum": "c06f7cd4baacb087002a99a5f48bf953", + "range": "bytes 0-1048575/*", + "uploadId": "19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ", + "vaultName": "examplevault" + }, + "output": { + "checksum": "c06f7cd4baacb087002a99a5f48bf953" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The example uploads the first 1 MiB (1024 x 1024 bytes) part of an archive.", + "id": "to-upload-the-first-part-of-an-archive-1481835899519", + "title": "To upload the first part of an archive" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/paginators-1.json new file mode 100644 index 00000000..69691437 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListJobs": { + "input_token": "marker", + "output_token": "Marker", + "limit_key": "limit", + "result_key": "JobList" + }, + "ListMultipartUploads": { + "input_token": "marker", + "output_token": "Marker", + "limit_key": "limit", + "result_key": "UploadsList" + }, + "ListParts": { + "input_token": "marker", + "output_token": "Marker", + "limit_key": "limit", + "result_key": "Parts" + }, + "ListVaults": { + "input_token": "marker", + "output_token": "Marker", + "limit_key": "limit", + "result_key": "VaultList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/service-2.json.gz new file mode 100644 index 00000000..1648591d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/waiters-2.json new file mode 100644 index 00000000..07a64a05 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/glacier/2012-06-01/waiters-2.json @@ -0,0 +1,39 @@ +{ + "version": 2, + "waiters": { + "VaultExists": { + "operation": "DescribeVault", + "delay": 3, + "maxAttempts": 15, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 200 + }, + { + "state": "retry", + "matcher": "error", + "expected": "ResourceNotFoundException" + } + ] + }, + "VaultNotExists": { + "operation": "DescribeVault", + "delay": 3, + "maxAttempts": 15, + "acceptors": [ + { + "state": "retry", + "matcher": "status", + "expected": 200 + }, + { + "state": "success", + "matcher": "error", + "expected": "ResourceNotFoundException" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..49d6a1a0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/paginators-1.json new file mode 100644 index 00000000..2a0f8251 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/paginators-1.json @@ -0,0 +1,70 @@ +{ + "pagination": { + "ListAccelerators": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Accelerators" + }, + "ListEndpointGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EndpointGroups" + }, + "ListListeners": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Listeners" + }, + "ListByoipCidrs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ByoipCidrs" + }, + "ListCustomRoutingAccelerators": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Accelerators" + }, + "ListCustomRoutingListeners": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Listeners" + }, + "ListCustomRoutingPortMappings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "PortMappings" + }, + "ListCustomRoutingPortMappingsByDestination": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DestinationPortMappings" + }, + "ListCustomRoutingEndpointGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "EndpointGroups" + }, + "ListCrossAccountAttachments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CrossAccountAttachments" + }, + "ListCrossAccountResources": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CrossAccountResources" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/service-2.json.gz new file mode 100644 index 00000000..88f4a75b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/globalaccelerator/2018-08-08/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d05e6751 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/paginators-1.json new file mode 100644 index 00000000..25970b7b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/paginators-1.json @@ -0,0 +1,117 @@ +{ + "pagination": { + "GetJobs": { + "result_key": "Jobs", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetPartitions": { + "result_key": "Partitions", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetDatabases": { + "result_key": "DatabaseList", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetClassifiers": { + "result_key": "Classifiers", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetTableVersions": { + "result_key": "TableVersions", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetCrawlers": { + "result_key": "Crawlers", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetDevEndpoints": { + "result_key": "DevEndpoints", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetJobRuns": { + "result_key": "JobRuns", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetTriggers": { + "result_key": "Triggers", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetTables": { + "result_key": "TableList", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetUserDefinedFunctions": { + "result_key": "UserDefinedFunctions", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetCrawlerMetrics": { + "result_key": "CrawlerMetricsList", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetConnections": { + "result_key": "ConnectionList", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetSecurityConfigurations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SecurityConfigurations" + }, + "GetPartitionIndexes": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "PartitionIndexDescriptorList" + }, + "GetResourcePolicies": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "GetResourcePoliciesResponseList" + }, + "ListRegistries": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Registries" + }, + "ListSchemaVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Schemas" + }, + "ListSchemas": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Schemas" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/service-2.json.gz new file mode 100644 index 00000000..ba6ce40d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/glue/2017-03-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6a120c7d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/paginators-1.json new file mode 100644 index 00000000..e9ad4795 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListPermissions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "permissions" + }, + "ListWorkspaces": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workspaces" + }, + "ListVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "grafanaVersions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/service-2.json.gz new file mode 100644 index 00000000..65251a68 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/grafana/2020-08-18/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/greengrass/2017-06-07/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrass/2017-06-07/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e475e9bb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrass/2017-06-07/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/greengrass/2017-06-07/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrass/2017-06-07/paginators-1.json new file mode 100644 index 00000000..303b4384 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrass/2017-06-07/paginators-1.json @@ -0,0 +1,118 @@ +{ + "pagination": { + "ListBulkDeploymentDetailedReports": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Deployments" + }, + "ListBulkDeployments": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "BulkDeployments" + }, + "ListConnectorDefinitionVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Versions" + }, + "ListConnectorDefinitions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Definitions" + }, + "ListCoreDefinitionVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Versions" + }, + "ListCoreDefinitions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Definitions" + }, + "ListDeployments": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Deployments" + }, + "ListDeviceDefinitionVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Versions" + }, + "ListDeviceDefinitions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Definitions" + }, + "ListFunctionDefinitionVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Versions" + }, + "ListFunctionDefinitions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Definitions" + }, + "ListGroupVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Versions" + }, + "ListGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Groups" + }, + "ListLoggerDefinitionVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Versions" + }, + "ListLoggerDefinitions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Definitions" + }, + "ListResourceDefinitionVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Versions" + }, + "ListResourceDefinitions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Definitions" + }, + "ListSubscriptionDefinitionVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Versions" + }, + "ListSubscriptionDefinitions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Definitions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/greengrass/2017-06-07/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrass/2017-06-07/service-2.json.gz new file mode 100644 index 00000000..3d1a1f8e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrass/2017-06-07/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e475e9bb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/paginators-1.json new file mode 100644 index 00000000..2e2af05d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/paginators-1.json @@ -0,0 +1,46 @@ +{ + "pagination": { + "ListComponentVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "componentVersions" + }, + "ListComponents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "components" + }, + "ListCoreDevices": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "coreDevices" + }, + "ListDeployments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "deployments" + }, + "ListEffectiveDeployments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "effectiveDeployments" + }, + "ListInstalledComponents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "installedComponents" + }, + "ListClientDevicesAssociatedWithCoreDevice": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "associatedClientDevices" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/service-2.json.gz new file mode 100644 index 00000000..f144460d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/greengrassv2/2020-11-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0f901e8c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/paginators-1.json new file mode 100644 index 00000000..0ead1107 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/paginators-1.json @@ -0,0 +1,46 @@ +{ + "pagination": { + "ListConfigs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "configList" + }, + "ListContacts": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "contactList" + }, + "ListDataflowEndpointGroups": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "dataflowEndpointGroupList" + }, + "ListMissionProfiles": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "missionProfileList" + }, + "ListGroundStations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "groundStationList" + }, + "ListSatellites": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "satellites" + }, + "ListEphemerides": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "ephemerides" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/service-2.json.gz new file mode 100644 index 00000000..36264b7b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/waiters-2.json new file mode 100644 index 00000000..c0080e29 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/groundstation/2019-05-23/waiters-2.json @@ -0,0 +1,22 @@ +{ + "version" : 2, + "waiters" : { + "ContactScheduled" : { + "description" : "Waits until a contact has been scheduled", + "delay" : 5, + "maxAttempts" : 180, + "operation" : "DescribeContact", + "acceptors" : [ { + "matcher" : "path", + "argument" : "contactStatus", + "state" : "failure", + "expected" : "FAILED_TO_SCHEDULE" + }, { + "matcher" : "path", + "argument" : "contactStatus", + "state" : "success", + "expected" : "SCHEDULED" + } ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..dec51b25 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/paginators-1.json new file mode 100644 index 00000000..a030d893 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "ListDetectors": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DetectorIds" + }, + "ListFindings": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "FindingIds" + }, + "ListIPSets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "IpSetIds" + }, + "ListThreatIntelSets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ThreatIntelSetIds" + }, + "ListInvitations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Invitations" + }, + "ListMembers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Members" + }, + "ListFilters": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "FilterNames" + }, + "ListOrganizationAdminAccounts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AdminAccounts" + }, + "DescribeMalwareScans": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Scans" + }, + "ListCoverage": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Resources" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/service-2.json.gz new file mode 100644 index 00000000..ca34e6a8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/guardduty/2017-11-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e837bded Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/paginators-1.json new file mode 100644 index 00000000..51094812 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/paginators-1.json @@ -0,0 +1,52 @@ +{ + "pagination": { + "DescribeAffectedEntities": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "entities" + }, + "DescribeEventAggregates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "eventAggregates" + }, + "DescribeEvents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "events" + }, + "DescribeEventTypes": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "eventTypes" + }, + "DescribeAffectedAccountsForOrganization": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "affectedAccounts", + "non_aggregate_keys": [ + "eventScopeCode" + ] + }, + "DescribeAffectedEntitiesForOrganization": { + "input_token": "nextToken", + "limit_key": "maxResults", + "non_aggregate_keys": [ + "failedSet" + ], + "output_token": "nextToken", + "result_key": "entities" + }, + "DescribeEventsForOrganization": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "events" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/service-2.json.gz new file mode 100644 index 00000000..82908712 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/health/2016-08-04/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b49e5b9b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/service-2.json.gz new file mode 100644 index 00000000..a4379a07 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/healthlake/2017-07-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b6a52aa2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/paginators-1.json new file mode 100644 index 00000000..19ba884c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/paginators-1.json @@ -0,0 +1,27 @@ +{ + "pagination": { + "ListTableColumns": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "tableColumns" + }, + "ListTableRows": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "rows" + }, + "ListTables": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "tables" + }, + "QueryTableRows": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "rows" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/paginators-1.sdk-extras.json new file mode 100644 index 00000000..bcdc1900 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/paginators-1.sdk-extras.json @@ -0,0 +1,30 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "ListTableColumns": { + "non_aggregate_keys": [ + "workbookCursor" + ] + }, + "ListTableRows": { + "non_aggregate_keys": [ + "workbookCursor", + "columnIds", + "rowIdsNotFound" + ] + }, + "ListTables": { + "non_aggregate_keys": [ + "workbookCursor" + ] + }, + "QueryTableRows": { + "non_aggregate_keys": [ + "workbookCursor", + "columnIds" + ] + } + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/service-2.json.gz new file mode 100644 index 00000000..814869b9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/honeycode/2020-03-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..621aac4b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/examples-1.json new file mode 100644 index 00000000..cd3a94aa --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/examples-1.json @@ -0,0 +1,1577 @@ +{ + "version": "1.0", + "examples": { + "AddClientIDToOpenIDConnectProvider": [ + { + "input": { + "ClientID": "my-application-ID", + "OpenIDConnectProviderArn": "arn:aws:iam::123456789012:oidc-provider/server.example.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following add-client-id-to-open-id-connect-provider command adds the client ID my-application-ID to the OIDC provider named server.example.com:", + "id": "028e91f4-e2a6-4d59-9e3b-4965a3fb19be", + "title": "To add a client ID (audience) to an Open-ID Connect (OIDC) provider" + } + ], + "AddRoleToInstanceProfile": [ + { + "input": { + "InstanceProfileName": "Webserver", + "RoleName": "S3Access" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command adds the role named S3Access to the instance profile named Webserver:", + "id": "c107fac3-edb6-4827-8a71-8863ec91c81f", + "title": "To add a role to an instance profile" + } + ], + "AddUserToGroup": [ + { + "input": { + "GroupName": "Admins", + "UserName": "Bob" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command adds an IAM user named Bob to the IAM group named Admins:", + "id": "619c7e6b-09f8-4036-857b-51a6ea5027ca", + "title": "To add a user to an IAM group" + } + ], + "AttachGroupPolicy": [ + { + "input": { + "GroupName": "Finance", + "PolicyArn": "arn:aws:iam::aws:policy/ReadOnlyAccess" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command attaches the AWS managed policy named ReadOnlyAccess to the IAM group named Finance.", + "id": "87551489-86f0-45db-9889-759936778f2b", + "title": "To attach a managed policy to an IAM group" + } + ], + "AttachRolePolicy": [ + { + "input": { + "PolicyArn": "arn:aws:iam::aws:policy/ReadOnlyAccess", + "RoleName": "ReadOnlyRole" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command attaches the AWS managed policy named ReadOnlyAccess to the IAM role named ReadOnlyRole.", + "id": "3e1b8c7c-99c8-4fc4-a20c-131fe3f22c7e", + "title": "To attach a managed policy to an IAM role" + } + ], + "AttachUserPolicy": [ + { + "input": { + "PolicyArn": "arn:aws:iam::aws:policy/AdministratorAccess", + "UserName": "Alice" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command attaches the AWS managed policy named AdministratorAccess to the IAM user named Alice.", + "id": "1372ebd8-9475-4b1a-a479-23b6fd4b8b3e", + "title": "To attach a managed policy to an IAM user" + } + ], + "ChangePassword": [ + { + "input": { + "NewPassword": "]35d/{pB9Fo9wJ", + "OldPassword": "3s0K_;xh4~8XXI" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command changes the password for the current IAM user.", + "id": "3a80c66f-bffb-46df-947c-1e8fa583b470", + "title": "To change the password for your IAM user" + } + ], + "CreateAccessKey": [ + { + "input": { + "UserName": "Bob" + }, + "output": { + "AccessKey": { + "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", + "CreateDate": "2015-03-09T18:39:23.411Z", + "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY", + "Status": "Active", + "UserName": "Bob" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command creates an access key (access key ID and secret access key) for the IAM user named Bob.", + "id": "1fbb3211-4cf2-41db-8c20-ba58d9f5802d", + "title": "To create an access key for an IAM user" + } + ], + "CreateAccountAlias": [ + { + "input": { + "AccountAlias": "examplecorp" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command associates the alias examplecorp to your AWS account.", + "id": "5adaf6fb-94fc-4ca2-b825-2fbc2062add1", + "title": "To create an account alias" + } + ], + "CreateGroup": [ + { + "input": { + "GroupName": "Admins" + }, + "output": { + "Group": { + "Arn": "arn:aws:iam::123456789012:group/Admins", + "CreateDate": "2015-03-09T20:30:24.940Z", + "GroupId": "AIDGPMS9RO4H3FEXAMPLE", + "GroupName": "Admins", + "Path": "/" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command creates an IAM group named Admins.", + "id": "d5da2a90-5e69-4ef7-8ae8-4c33dc21fd21", + "title": "To create an IAM group" + } + ], + "CreateInstanceProfile": [ + { + "input": { + "InstanceProfileName": "Webserver" + }, + "output": { + "InstanceProfile": { + "Arn": "arn:aws:iam::123456789012:instance-profile/Webserver", + "CreateDate": "2015-03-09T20:33:19.626Z", + "InstanceProfileId": "AIPAJMBYC7DLSPEXAMPLE", + "InstanceProfileName": "Webserver", + "Path": "/", + "Roles": [ + + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command creates an instance profile named Webserver that is ready to have a role attached and then be associated with an EC2 instance.", + "id": "5d84e6ae-5921-4e39-8454-10232cd9ff9a", + "title": "To create an instance profile" + } + ], + "CreateLoginProfile": [ + { + "input": { + "Password": "h]6EszR}vJ*m", + "PasswordResetRequired": true, + "UserName": "Bob" + }, + "output": { + "LoginProfile": { + "CreateDate": "2015-03-10T20:55:40.274Z", + "PasswordResetRequired": true, + "UserName": "Bob" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command changes IAM user Bob's password and sets the flag that required Bob to change the password the next time he signs in.", + "id": "c63795bc-3444-40b3-89df-83c474ef88be", + "title": "To create an instance profile" + } + ], + "CreateOpenIDConnectProvider": [ + { + "input": { + "ClientIDList": [ + "my-application-id" + ], + "ThumbprintList": [ + "3768084dfb3d2b68b7897bf5f565da8efEXAMPLE" + ], + "Url": "https://server.example.com" + }, + "output": { + "OpenIDConnectProviderArn": "arn:aws:iam::123456789012:oidc-provider/server.example.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example defines a new OIDC provider in IAM with a client ID of my-application-id and pointing at the server with a URL of https://server.example.com.", + "id": "4e4a6bff-cc97-4406-922e-0ab4a82cdb63", + "title": "To create an instance profile" + } + ], + "CreateRole": [ + { + "input": { + "AssumeRolePolicyDocument": "", + "Path": "/", + "RoleName": "Test-Role" + }, + "output": { + "Role": { + "Arn": "arn:aws:iam::123456789012:role/Test-Role", + "AssumeRolePolicyDocument": "", + "CreateDate": "2013-06-07T20:43:32.821Z", + "Path": "/", + "RoleId": "AKIAIOSFODNN7EXAMPLE", + "RoleName": "Test-Role" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command creates a role named Test-Role and attaches a trust policy that you must convert from JSON to a string. Upon success, the response includes the same policy as a URL-encoded JSON string.", + "id": "eaaa4b5f-51f1-4f73-b0d3-30127040eff8", + "title": "To create an IAM role" + } + ], + "CreateUser": [ + { + "input": { + "UserName": "Bob" + }, + "output": { + "User": { + "Arn": "arn:aws:iam::123456789012:user/Bob", + "CreateDate": "2013-06-08T03:20:41.270Z", + "Path": "/", + "UserId": "AKIAIOSFODNN7EXAMPLE", + "UserName": "Bob" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following create-user command creates an IAM user named Bob in the current account.", + "id": "eb15f90b-e5f5-4af8-a594-e4e82b181a62", + "title": "To create an IAM user" + } + ], + "DeleteAccessKey": [ + { + "input": { + "AccessKeyId": "AKIDPMS9RO4H3FEXAMPLE", + "UserName": "Bob" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command deletes one access key (access key ID and secret access key) assigned to the IAM user named Bob.", + "id": "61a785a7-d30a-415a-ae18-ab9236e56871", + "title": "To delete an access key for an IAM user" + } + ], + "DeleteAccountAlias": [ + { + "input": { + "AccountAlias": "mycompany" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command removes the alias mycompany from the current AWS account:", + "id": "7abeca65-04a8-4500-a890-47f1092bf766", + "title": "To delete an account alias" + } + ], + "DeleteAccountPasswordPolicy": [ + { + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command removes the password policy from the current AWS account:", + "id": "9ddf755e-495c-49bc-ae3b-ea6cc9b8ebcf", + "title": "To delete the current account password policy" + } + ], + "DeleteGroupPolicy": [ + { + "input": { + "GroupName": "Admins", + "PolicyName": "ExamplePolicy" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command deletes the policy named ExamplePolicy from the group named Admins:", + "id": "e683f2bd-98a4-4fe0-bb66-33169c692d4a", + "title": "To delete a policy from an IAM group" + } + ], + "DeleteInstanceProfile": [ + { + "input": { + "InstanceProfileName": "ExampleInstanceProfile" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command deletes the instance profile named ExampleInstanceProfile", + "id": "12d74fb8-3433-49db-8171-a1fc764e354d", + "title": "To delete an instance profile" + } + ], + "DeleteLoginProfile": [ + { + "input": { + "UserName": "Bob" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command deletes the password for the IAM user named Bob.", + "id": "1fe57059-fc73-42e2-b992-517b7d573b5c", + "title": "To delete a password for an IAM user" + } + ], + "DeleteRole": [ + { + "input": { + "RoleName": "Test-Role" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command removes the role named Test-Role.", + "id": "053cdf74-9bda-44b8-bdbb-140fd5a32603", + "title": "To delete an IAM role" + } + ], + "DeleteRolePolicy": [ + { + "input": { + "PolicyName": "ExamplePolicy", + "RoleName": "Test-Role" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command removes the policy named ExamplePolicy from the role named Test-Role.", + "id": "9c667336-fde3-462c-b8f3-950800821e27", + "title": "To remove a policy from an IAM role" + } + ], + "DeleteSigningCertificate": [ + { + "input": { + "CertificateId": "TA7SMP42TDN5Z26OBPJE7EXAMPLE", + "UserName": "Anika" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command deletes the specified signing certificate for the IAM user named Anika.", + "id": "e3357586-ba9c-4070-b35b-d1a899b71987", + "title": "To delete a signing certificate for an IAM user" + } + ], + "DeleteUser": [ + { + "input": { + "UserName": "Bob" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command removes the IAM user named Bob from the current account.", + "id": "a13dc3f9-59fe-42d9-abbb-fb98b204fdf0", + "title": "To delete an IAM user" + } + ], + "DeleteUserPolicy": [ + { + "input": { + "PolicyName": "ExamplePolicy", + "UserName": "Juan" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following delete-user-policy command removes the specified policy from the IAM user named Juan:", + "id": "34f07ddc-9bc1-4f52-bc59-cd0a3ccd06c8", + "title": "To remove a policy from an IAM user" + } + ], + "DeleteVirtualMFADevice": [ + { + "input": { + "SerialNumber": "arn:aws:iam::123456789012:mfa/ExampleName" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following delete-virtual-mfa-device command removes the specified MFA device from the current AWS account.", + "id": "2933b08b-dbe7-4b89-b8c1-fdf75feea1ee", + "title": "To remove a virtual MFA device" + } + ], + "GenerateOrganizationsAccessReport": [ + { + "input": { + "EntityPath": "o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-1a2b3c-k9l8m7n6o5example" + }, + "output": { + "JobId": "examplea-1234-b567-cde8-90fg123abcd4" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation generates a report for the organizational unit ou-rge0-awexample", + "id": "generateorganizationsaccessreport-ou", + "title": "To generate a service last accessed data report for an organizational unit" + } + ], + "GenerateServiceLastAccessedDetails": [ + { + "input": { + "Arn": "arn:aws:iam::123456789012:policy/ExamplePolicy1" + }, + "output": { + "JobId": "examplef-1305-c245-eba4-71fe298bcda7" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation generates a report for the policy: ExamplePolicy1", + "id": "generateaccessdata-policy-1541695178514", + "title": "To generate a service last accessed data report for a policy" + } + ], + "GetAccountPasswordPolicy": [ + { + "output": { + "PasswordPolicy": { + "AllowUsersToChangePassword": false, + "ExpirePasswords": false, + "HardExpiry": false, + "MaxPasswordAge": 90, + "MinimumPasswordLength": 8, + "PasswordReusePrevention": 12, + "RequireLowercaseCharacters": false, + "RequireNumbers": true, + "RequireSymbols": true, + "RequireUppercaseCharacters": false + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command displays details about the password policy for the current AWS account.", + "id": "5e4598c7-c425-431f-8af1-19073b3c4a5f", + "title": "To see the current account password policy" + } + ], + "GetAccountSummary": [ + { + "output": { + "SummaryMap": { + "AccessKeysPerUserQuota": 2, + "AccountAccessKeysPresent": 1, + "AccountMFAEnabled": 0, + "AccountSigningCertificatesPresent": 0, + "AttachedPoliciesPerGroupQuota": 10, + "AttachedPoliciesPerRoleQuota": 10, + "AttachedPoliciesPerUserQuota": 10, + "GlobalEndpointTokenVersion": 2, + "GroupPolicySizeQuota": 5120, + "Groups": 15, + "GroupsPerUserQuota": 10, + "GroupsQuota": 100, + "MFADevices": 6, + "MFADevicesInUse": 3, + "Policies": 8, + "PoliciesQuota": 1000, + "PolicySizeQuota": 5120, + "PolicyVersionsInUse": 22, + "PolicyVersionsInUseQuota": 10000, + "ServerCertificates": 1, + "ServerCertificatesQuota": 20, + "SigningCertificatesPerUserQuota": 2, + "UserPolicySizeQuota": 2048, + "Users": 27, + "UsersQuota": 5000, + "VersionsPerPolicyQuota": 5 + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command returns information about the IAM entity quotas and usage in the current AWS account.", + "id": "9d8447af-f344-45de-8219-2cebc3cce7f2", + "title": "To get information about IAM entity quotas and usage in the current account" + } + ], + "GetInstanceProfile": [ + { + "input": { + "InstanceProfileName": "ExampleInstanceProfile" + }, + "output": { + "InstanceProfile": { + "Arn": "arn:aws:iam::336924118301:instance-profile/ExampleInstanceProfile", + "CreateDate": "2013-06-12T23:52:02Z", + "InstanceProfileId": "AID2MAB8DPLSRHEXAMPLE", + "InstanceProfileName": "ExampleInstanceProfile", + "Path": "/", + "Roles": [ + { + "Arn": "arn:aws:iam::336924118301:role/Test-Role", + "AssumeRolePolicyDocument": "", + "CreateDate": "2013-01-09T06:33:26Z", + "Path": "/", + "RoleId": "AIDGPMS9RO4H3FEXAMPLE", + "RoleName": "Test-Role" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command gets information about the instance profile named ExampleInstanceProfile.", + "id": "463b9ba5-18cc-4608-9ccb-5a7c6b6e5fe7", + "title": "To get information about an instance profile" + } + ], + "GetLoginProfile": [ + { + "input": { + "UserName": "Anika" + }, + "output": { + "LoginProfile": { + "CreateDate": "2012-09-21T23:03:39Z", + "UserName": "Anika" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command gets information about the password for the IAM user named Anika.", + "id": "d6b580cc-909f-4925-9caa-d425cbc1ad47", + "title": "To get password information for an IAM user" + } + ], + "GetOrganizationsAccessReport": [ + { + "input": { + "JobId": "examplea-1234-b567-cde8-90fg123abcd4" + }, + "output": { + "AccessDetails": [ + { + "EntityPath": "o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-1a2b3c-k9l8m7n6o5example/111122223333", + "LastAuthenticatedTime": "2019-05-25T16:29:52Z", + "Region": "us-east-1", + "ServiceName": "Amazon DynamoDB", + "ServiceNamespace": "dynamodb", + "TotalAuthenticatedEntities": 2 + }, + { + "EntityPath": "o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-1a2b3c-k9l8m7n6o5example/123456789012", + "LastAuthenticatedTime": "2019-06-15T13:12:06Z", + "Region": "us-east-1", + "ServiceName": "AWS Identity and Access Management", + "ServiceNamespace": "iam", + "TotalAuthenticatedEntities": 4 + }, + { + "ServiceName": "Amazon Simple Storage Service", + "ServiceNamespace": "s3", + "TotalAuthenticatedEntities": 0 + } + ], + "IsTruncated": false, + "JobCompletionDate": "2019-06-18T19:47:35.241Z", + "JobCreationDate": "2019-06-18T19:47:31.466Z", + "JobStatus": "COMPLETED", + "NumberOfServicesAccessible": 3, + "NumberOfServicesNotAccessed": 1 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation gets details about the report with the job ID: examplea-1234-b567-cde8-90fg123abcd4", + "id": "getorganizationsaccessreport-ou", + "title": "To get details from a previously generated organizational unit report" + } + ], + "GetRole": [ + { + "input": { + "RoleName": "Test-Role" + }, + "output": { + "Role": { + "Arn": "arn:aws:iam::123456789012:role/Test-Role", + "AssumeRolePolicyDocument": "", + "CreateDate": "2013-04-18T05:01:58Z", + "MaxSessionDuration": 3600, + "Path": "/", + "RoleId": "AROADBQP57FF2AEXAMPLE", + "RoleLastUsed": { + "LastUsedDate": "2019-11-18T05:01:58Z", + "Region": "us-east-1" + }, + "RoleName": "Test-Role" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command gets information about the role named Test-Role.", + "id": "5b7d03a6-340c-472d-aa77-56425950d8b0", + "title": "To get information about an IAM role" + } + ], + "GetServiceLastAccessedDetails": [ + { + "input": { + "JobId": "examplef-1305-c245-eba4-71fe298bcda7" + }, + "output": { + "IsTruncated": false, + "JobCompletionDate": "2018-10-24T19:47:35.241Z", + "JobCreationDate": "2018-10-24T19:47:31.466Z", + "JobStatus": "COMPLETED", + "ServicesLastAccessed": [ + { + "LastAuthenticated": "2018-10-24T19:11:00Z", + "LastAuthenticatedEntity": "arn:aws:iam::123456789012:user/AWSExampleUser01", + "ServiceName": "AWS Identity and Access Management", + "ServiceNamespace": "iam", + "TotalAuthenticatedEntities": 2 + }, + { + "ServiceName": "Amazon Simple Storage Service", + "ServiceNamespace": "s3", + "TotalAuthenticatedEntities": 0 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation gets details about the report with the job ID: examplef-1305-c245-eba4-71fe298bcda7", + "id": "getserviceaccessdetails-policy-1541696298085", + "title": "To get details from a previously-generated report" + } + ], + "GetServiceLastAccessedDetailsWithEntities": [ + { + "input": { + "JobId": "examplef-1305-c245-eba4-71fe298bcda7", + "ServiceNamespace": "iam" + }, + "output": { + "EntityDetailsList": [ + { + "EntityInfo": { + "Arn": "arn:aws:iam::123456789012:user/AWSExampleUser01", + "Id": "AIDAEX2EXAMPLEB6IGCDC", + "Name": "AWSExampleUser01", + "Path": "/", + "Type": "USER" + }, + "LastAuthenticated": "2018-10-24T19:10:00Z" + }, + { + "EntityInfo": { + "Arn": "arn:aws:iam::123456789012:role/AWSExampleRole01", + "Id": "AROAEAEXAMPLEIANXSIU4", + "Name": "AWSExampleRole01", + "Path": "/", + "Type": "ROLE" + } + } + ], + "IsTruncated": false, + "JobCompletionDate": "2018-10-24T19:47:35.241Z", + "JobCreationDate": "2018-10-24T19:47:31.466Z", + "JobStatus": "COMPLETED" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation returns details about the entities that attempted to access the IAM service.", + "id": "getserviceaccessdetailsentity-policy-1541697621384", + "title": "To get sntity details from a previously-generated report" + } + ], + "GetUser": [ + { + "input": { + "UserName": "Bob" + }, + "output": { + "User": { + "Arn": "arn:aws:iam::123456789012:user/Bob", + "CreateDate": "2012-09-21T23:03:13Z", + "Path": "/", + "UserId": "AKIAIOSFODNN7EXAMPLE", + "UserName": "Bob" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command gets information about the IAM user named Bob.", + "id": "ede000a1-9e4c-40db-bd0a-d4f95e41a6ab", + "title": "To get information about an IAM user" + } + ], + "ListAccessKeys": [ + { + "input": { + "UserName": "Alice" + }, + "output": { + "AccessKeyMetadata": [ + { + "AccessKeyId": "AKIA111111111EXAMPLE", + "CreateDate": "2016-12-01T22:19:58Z", + "Status": "Active", + "UserName": "Alice" + }, + { + "AccessKeyId": "AKIA222222222EXAMPLE", + "CreateDate": "2016-12-01T22:20:01Z", + "Status": "Active", + "UserName": "Alice" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command lists the access keys IDs for the IAM user named Alice.", + "id": "15571463-ebea-411a-a021-1c76bd2a3625", + "title": "To list the access key IDs for an IAM user" + } + ], + "ListAccountAliases": [ + { + "input": { + }, + "output": { + "AccountAliases": [ + "exmaple-corporation" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command lists the aliases for the current account.", + "id": "e27b457a-16f9-4e05-a006-3df7b3472741", + "title": "To list account aliases" + } + ], + "ListGroupPolicies": [ + { + "input": { + "GroupName": "Admins" + }, + "output": { + "PolicyNames": [ + "AdminRoot", + "KeyPolicy" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command lists the names of in-line policies that are embedded in the IAM group named Admins.", + "id": "02de5095-2410-4d3a-ac1b-cc40234af68f", + "title": "To list the in-line policies for an IAM group" + } + ], + "ListGroups": [ + { + "input": { + }, + "output": { + "Groups": [ + { + "Arn": "arn:aws:iam::123456789012:group/Admins", + "CreateDate": "2016-12-15T21:40:08.121Z", + "GroupId": "AGPA1111111111EXAMPLE", + "GroupName": "Admins", + "Path": "/division_abc/subdivision_xyz/" + }, + { + "Arn": "arn:aws:iam::123456789012:group/division_abc/subdivision_xyz/product_1234/engineering/Test", + "CreateDate": "2016-11-30T14:10:01.156Z", + "GroupId": "AGP22222222222EXAMPLE", + "GroupName": "Test", + "Path": "/division_abc/subdivision_xyz/product_1234/engineering/" + }, + { + "Arn": "arn:aws:iam::123456789012:group/division_abc/subdivision_xyz/product_1234/Managers", + "CreateDate": "2016-06-12T20:14:52.032Z", + "GroupId": "AGPI3333333333EXAMPLE", + "GroupName": "Managers", + "Path": "/division_abc/subdivision_xyz/product_1234/" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command lists the IAM groups in the current account:", + "id": "b3ab1380-2a21-42fb-8e85-503f65512c66", + "title": "To list the IAM groups for the current account" + } + ], + "ListGroupsForUser": [ + { + "input": { + "UserName": "Bob" + }, + "output": { + "Groups": [ + { + "Arn": "arn:aws:iam::123456789012:group/division_abc/subdivision_xyz/product_1234/engineering/Test", + "CreateDate": "2016-11-30T14:10:01.156Z", + "GroupId": "AGP2111111111EXAMPLE", + "GroupName": "Test", + "Path": "/division_abc/subdivision_xyz/product_1234/engineering/" + }, + { + "Arn": "arn:aws:iam::123456789012:group/division_abc/subdivision_xyz/product_1234/Managers", + "CreateDate": "2016-06-12T20:14:52.032Z", + "GroupId": "AGPI222222222SEXAMPLE", + "GroupName": "Managers", + "Path": "/division_abc/subdivision_xyz/product_1234/" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command displays the groups that the IAM user named Bob belongs to.", + "id": "278ec2ee-fc28-4136-83fb-433af0ae46a2", + "title": "To list the groups that an IAM user belongs to" + } + ], + "ListPoliciesGrantingServiceAccess": [ + { + "input": { + "Arn": "arn:aws:iam::123456789012:user/ExampleUser01", + "ServiceNamespaces": [ + "iam", + "ec2" + ] + }, + "output": { + "IsTruncated": false, + "PoliciesGrantingServiceAccess": [ + { + "Policies": [ + { + "PolicyArn": "arn:aws:iam::123456789012:policy/ExampleIamPolicy", + "PolicyName": "ExampleIamPolicy", + "PolicyType": "MANAGED" + }, + { + "EntityName": "AWSExampleGroup1", + "EntityType": "GROUP", + "PolicyName": "ExampleGroup1Policy", + "PolicyType": "INLINE" + } + ], + "ServiceNamespace": "iam" + }, + { + "Policies": [ + { + "PolicyArn": "arn:aws:iam::123456789012:policy/ExampleEc2Policy", + "PolicyName": "ExampleEc2Policy", + "PolicyType": "MANAGED" + } + ], + "ServiceNamespace": "ec2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following operation lists policies that allow ExampleUser01 to access IAM or EC2.", + "id": "listpoliciesaccess-user-1541698749508", + "title": "To list policies that allow access to a service" + } + ], + "ListRoleTags": [ + { + "input": { + "RoleName": "taggedrole1" + }, + "output": { + "IsTruncated": false, + "Tags": [ + { + "Key": "Dept", + "Value": "12345" + }, + { + "Key": "Team", + "Value": "Accounting" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to list the tags attached to a role.", + "id": "to-list-the-tags-attached-to-an-iam-role-1506719238376", + "title": "To list the tags attached to an IAM role" + } + ], + "ListSigningCertificates": [ + { + "input": { + "UserName": "Bob" + }, + "output": { + "Certificates": [ + { + "CertificateBody": "-----BEGIN CERTIFICATE----------END CERTIFICATE-----", + "CertificateId": "TA7SMP42TDN5Z26OBPJE7EXAMPLE", + "Status": "Active", + "UploadDate": "2013-06-06T21:40:08Z", + "UserName": "Bob" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command lists the signing certificates for the IAM user named Bob.", + "id": "b4c10256-4fc9-457e-b3fd-4a110d4d73dc", + "title": "To list the signing certificates for an IAM user" + } + ], + "ListUserTags": [ + { + "input": { + "UserName": "anika" + }, + "output": { + "IsTruncated": false, + "Tags": [ + { + "Key": "Dept", + "Value": "12345" + }, + { + "Key": "Team", + "Value": "Accounting" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to list the tags attached to a user.", + "id": "to-list-the-tags-attached-to-an-iam-user-1506719473186", + "title": "To list the tags attached to an IAM user" + } + ], + "ListUsers": [ + { + "input": { + }, + "output": { + "Users": [ + { + "Arn": "arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/engineering/Juan", + "CreateDate": "2012-09-05T19:38:48Z", + "PasswordLastUsed": "2016-09-08T21:47:36Z", + "Path": "/division_abc/subdivision_xyz/engineering/", + "UserId": "AID2MAB8DPLSRHEXAMPLE", + "UserName": "Juan" + }, + { + "Arn": "arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/engineering/Anika", + "CreateDate": "2014-04-09T15:43:45Z", + "PasswordLastUsed": "2016-09-24T16:18:07Z", + "Path": "/division_abc/subdivision_xyz/engineering/", + "UserId": "AIDIODR4TAW7CSEXAMPLE", + "UserName": "Anika" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command lists the IAM users in the current account.", + "id": "9edfbd73-03d8-4d8a-9a79-76c85e8c8298", + "title": "To list IAM users" + } + ], + "ListVirtualMFADevices": [ + { + "input": { + }, + "output": { + "VirtualMFADevices": [ + { + "SerialNumber": "arn:aws:iam::123456789012:mfa/ExampleMFADevice" + }, + { + "SerialNumber": "arn:aws:iam::123456789012:mfa/Juan" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command lists the virtual MFA devices that have been configured for the current account.", + "id": "54f9ac18-5100-4070-bec4-fe5f612710d5", + "title": "To list virtual MFA devices" + } + ], + "PutGroupPolicy": [ + { + "input": { + "GroupName": "Admins", + "PolicyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Action\":\"*\",\"Resource\":\"*\"}}", + "PolicyName": "AllPerms" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command adds a policy named AllPerms to the IAM group named Admins.", + "id": "4bc17418-758f-4d0f-ab0c-4d00265fec2e", + "title": "To add a policy to a group" + } + ], + "PutRolePolicy": [ + { + "input": { + "PolicyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Action\":\"s3:*\",\"Resource\":\"*\"}}", + "PolicyName": "S3AccessPolicy", + "RoleName": "S3Access" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command adds a permissions policy to the role named Test-Role.", + "id": "de62fd00-46c7-4601-9e0d-71d5fbb11ecb", + "title": "To attach a permissions policy to an IAM role" + } + ], + "PutUserPolicy": [ + { + "input": { + "PolicyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Action\":\"*\",\"Resource\":\"*\"}}", + "PolicyName": "AllAccessPolicy", + "UserName": "Bob" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command attaches a policy to the IAM user named Bob.", + "id": "2551ffc6-3576-4d39-823f-30b60bffc2c7", + "title": "To attach a policy to an IAM user" + } + ], + "RemoveRoleFromInstanceProfile": [ + { + "input": { + "InstanceProfileName": "ExampleInstanceProfile", + "RoleName": "Test-Role" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command removes the role named Test-Role from the instance profile named ExampleInstanceProfile.", + "id": "6d9f46f1-9f4a-4873-b403-51a85c5c627c", + "title": "To remove a role from an instance profile" + } + ], + "RemoveUserFromGroup": [ + { + "input": { + "GroupName": "Admins", + "UserName": "Bob" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command removes the user named Bob from the IAM group named Admins.", + "id": "fb54d5b4-0caf-41d8-af0e-10a84413f174", + "title": "To remove a user from an IAM group" + } + ], + "SetSecurityTokenServicePreferences": [ + { + "input": { + "GlobalEndpointTokenVersion": "v2Token" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command sets the STS global endpoint token to version 2. Version 2 tokens are valid in all Regions.", + "id": "61a785a7-d30a-415a-ae18-ab9236e56871", + "title": "To delete an access key for an IAM user" + } + ], + "TagRole": [ + { + "input": { + "RoleName": "taggedrole", + "Tags": [ + { + "Key": "Dept", + "Value": "Accounting" + }, + { + "Key": "CostCenter", + "Value": "12345" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to add tags to an existing role.", + "id": "to-add-a-tag-key-and-value-to-an-iam-role-1506718791513", + "title": "To add a tag key and value to an IAM role" + } + ], + "TagUser": [ + { + "input": { + "Tags": [ + { + "Key": "Dept", + "Value": "Accounting" + }, + { + "Key": "CostCenter", + "Value": "12345" + } + ], + "UserName": "anika" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to add tags to an existing user.", + "id": "to-add-a-tag-key-and-value-to-an-iam-user-1506719044227", + "title": "To add a tag key and value to an IAM user" + } + ], + "UntagRole": [ + { + "input": { + "RoleName": "taggedrole", + "TagKeys": [ + "Dept" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to remove a tag with the key 'Dept' from a role named 'taggedrole'.", + "id": "to-remove-a-tag-from-an-iam-role-1506719589943", + "title": "To remove a tag from an IAM role" + } + ], + "UntagUser": [ + { + "input": { + "TagKeys": [ + "Dept" + ], + "UserName": "anika" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to remove tags that are attached to a user named 'anika'.", + "id": "to-remove-a-tag-from-an-iam-user-1506719725554", + "title": "To remove a tag from an IAM user" + } + ], + "UpdateAccessKey": [ + { + "input": { + "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", + "Status": "Inactive", + "UserName": "Bob" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command deactivates the specified access key (access key ID and secret access key) for the IAM user named Bob.", + "id": "02b556fd-e673-49b7-ab6b-f2f9035967d0", + "title": "To activate or deactivate an access key for an IAM user" + } + ], + "UpdateAccountPasswordPolicy": [ + { + "input": { + "MinimumPasswordLength": 8, + "RequireNumbers": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command sets the password policy to require a minimum length of eight characters and to require one or more numbers in the password:", + "id": "c263a1af-37dc-4423-8dba-9790284ef5e0", + "title": "To set or change the current account password policy" + } + ], + "UpdateAssumeRolePolicy": [ + { + "input": { + "PolicyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"ec2.amazonaws.com\"]},\"Action\":[\"sts:AssumeRole\"]}]}", + "RoleName": "S3AccessForEC2Instances" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command updates the role trust policy for the role named Test-Role:", + "id": "c9150063-d953-4e99-9576-9685872006c6", + "title": "To update the trust policy for an IAM role" + } + ], + "UpdateGroup": [ + { + "input": { + "GroupName": "Test", + "NewGroupName": "Test-1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command changes the name of the IAM group Test to Test-1.", + "id": "f0cf1662-91ae-4278-a80e-7db54256ccba", + "title": "To rename an IAM group" + } + ], + "UpdateLoginProfile": [ + { + "input": { + "Password": "SomeKindOfPassword123!@#", + "UserName": "Bob" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command creates or changes the password for the IAM user named Bob.", + "id": "036d9498-ecdb-4ed6-a8d8-366c383d1487", + "title": "To change the password for an IAM user" + } + ], + "UpdateSigningCertificate": [ + { + "input": { + "CertificateId": "TA7SMP42TDN5Z26OBPJE7EXAMPLE", + "Status": "Inactive", + "UserName": "Bob" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command changes the status of a signing certificate for a user named Bob to Inactive.", + "id": "829aee7b-efc5-4b3b-84a5-7f899b38018d", + "title": "To change the active status of a signing certificate for an IAM user" + } + ], + "UpdateUser": [ + { + "input": { + "NewUserName": "Robert", + "UserName": "Bob" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command changes the name of the IAM user Bob to Robert. It does not change the user's path.", + "id": "275d53ed-347a-44e6-b7d0-a96276154352", + "title": "To change an IAM user's name" + } + ], + "UploadServerCertificate": [ + { + "input": { + "CertificateBody": "-----BEGIN CERTIFICATE----------END CERTIFICATE-----", + "Path": "/company/servercerts/", + "PrivateKey": "-----BEGIN DSA PRIVATE KEY----------END DSA PRIVATE KEY-----", + "ServerCertificateName": "ProdServerCert" + }, + "output": { + "ServerCertificateMetadata": { + "Arn": "arn:aws:iam::123456789012:server-certificate/company/servercerts/ProdServerCert", + "Expiration": "2012-05-08T01:02:03.004Z", + "Path": "/company/servercerts/", + "ServerCertificateId": "ASCA1111111111EXAMPLE", + "ServerCertificateName": "ProdServerCert", + "UploadDate": "2010-05-08T01:02:03.004Z" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following upload-server-certificate command uploads a server certificate to your AWS account:", + "id": "06eab6d1-ebf2-4bd9-839d-f7508b9a38b6", + "title": "To upload a server certificate to your AWS account" + } + ], + "UploadSigningCertificate": [ + { + "input": { + "CertificateBody": "-----BEGIN CERTIFICATE----------END CERTIFICATE-----", + "UserName": "Bob" + }, + "output": { + "Certificate": { + "CertificateBody": "-----BEGIN CERTIFICATE----------END CERTIFICATE-----", + "CertificateId": "ID123456789012345EXAMPLE", + "Status": "Active", + "UploadDate": "2015-06-06T21:40:08.121Z", + "UserName": "Bob" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following command uploads a signing certificate for the IAM user named Bob.", + "id": "e67489b6-7b73-4e30-9ed3-9a9e0231e458", + "title": "To upload a signing certificate for an IAM user" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/paginators-1.json new file mode 100644 index 00000000..91c09a21 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/paginators-1.json @@ -0,0 +1,254 @@ +{ + "pagination": { + "GetAccountAuthorizationDetails": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": [ + "UserDetailList", + "GroupDetailList", + "RoleDetailList", + "Policies" + ] + }, + "GetGroup": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Users", + "non_aggregate_keys": [ + "Group" + ] + }, + "ListAccessKeys": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "AccessKeyMetadata" + }, + "ListAccountAliases": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "AccountAliases" + }, + "ListAttachedGroupPolicies": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "AttachedPolicies" + }, + "ListAttachedRolePolicies": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "AttachedPolicies" + }, + "ListAttachedUserPolicies": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "AttachedPolicies" + }, + "ListEntitiesForPolicy": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": [ + "PolicyGroups", + "PolicyUsers", + "PolicyRoles" + ] + }, + "ListGroupPolicies": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "PolicyNames" + }, + "ListGroups": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Groups" + }, + "ListGroupsForUser": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Groups" + }, + "ListInstanceProfiles": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "InstanceProfiles" + }, + "ListInstanceProfilesForRole": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "InstanceProfiles" + }, + "ListMFADevices": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "MFADevices" + }, + "ListPolicies": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Policies" + }, + "ListPolicyVersions": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Versions" + }, + "ListRolePolicies": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "PolicyNames" + }, + "ListRoles": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Roles" + }, + "ListServerCertificates": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "ServerCertificateMetadataList" + }, + "ListSigningCertificates": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Certificates" + }, + "ListSSHPublicKeys": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "SSHPublicKeys" + }, + "ListUserPolicies": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "PolicyNames" + }, + "ListUsers": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Users" + }, + "ListVirtualMFADevices": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "VirtualMFADevices" + }, + "SimulateCustomPolicy": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "EvaluationResults" + }, + "SimulatePrincipalPolicy": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "EvaluationResults" + }, + "ListUserTags": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Tags" + }, + "ListInstanceProfileTags": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Tags" + }, + "ListMFADeviceTags": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Tags" + }, + "ListOpenIDConnectProviderTags": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Tags" + }, + "ListPolicyTags": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Tags" + }, + "ListRoleTags": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Tags" + }, + "ListSAMLProviderTags": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Tags" + }, + "ListServerCertificateTags": { + "input_token": "Marker", + "limit_key": "MaxItems", + "more_results": "IsTruncated", + "output_token": "Marker", + "result_key": "Tags" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/service-2.json.gz new file mode 100644 index 00000000..4812ea79 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/waiters-2.json new file mode 100644 index 00000000..62480415 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iam/2010-05-08/waiters-2.json @@ -0,0 +1,73 @@ +{ + "version": 2, + "waiters": { + "InstanceProfileExists": { + "delay": 1, + "operation": "GetInstanceProfile", + "maxAttempts": 40, + "acceptors": [ + { + "expected": 200, + "matcher": "status", + "state": "success" + }, + { + "state": "retry", + "matcher": "status", + "expected": 404 + } + ] + }, + "UserExists": { + "delay": 1, + "operation": "GetUser", + "maxAttempts": 20, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 200 + }, + { + "state": "retry", + "matcher": "error", + "expected": "NoSuchEntity" + } + ] + }, + "RoleExists": { + "delay": 1, + "operation": "GetRole", + "maxAttempts": 20, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 200 + }, + { + "state": "retry", + "matcher": "error", + "expected": "NoSuchEntity" + } + ] + }, + "PolicyExists": { + "delay": 1, + "operation": "GetPolicy", + "maxAttempts": 20, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 200 + }, + { + "state": "retry", + "matcher": "error", + "expected": "NoSuchEntity" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..20977a50 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/paginators-1.json new file mode 100644 index 00000000..766e7c46 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListGroupMemberships": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "GroupMemberships" + }, + "ListGroupMembershipsForMember": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "GroupMemberships" + }, + "ListGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Groups" + }, + "ListUsers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Users" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/service-2.json.gz new file mode 100644 index 00000000..e87456ca Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/identitystore/2020-06-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..455d314d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/service-2.json.gz new file mode 100644 index 00000000..7925baf8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/imagebuilder/2019-12-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/importexport/2010-06-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/importexport/2010-06-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..df0a8215 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/importexport/2010-06-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/importexport/2010-06-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/importexport/2010-06-01/paginators-1.json new file mode 100644 index 00000000..702385ea --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/importexport/2010-06-01/paginators-1.json @@ -0,0 +1,11 @@ +{ + "pagination": { + "ListJobs": { + "input_token": "Marker", + "output_token": "Jobs[-1].JobId", + "more_results": "IsTruncated", + "limit_key": "MaxJobs", + "result_key": "Jobs" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/importexport/2010-06-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/importexport/2010-06-01/service-2.json.gz new file mode 100644 index 00000000..e6abb7eb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/importexport/2010-06-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector-scan/2023-08-08/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector-scan/2023-08-08/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..71362c8b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector-scan/2023-08-08/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector-scan/2023-08-08/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector-scan/2023-08-08/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector-scan/2023-08-08/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector-scan/2023-08-08/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector-scan/2023-08-08/service-2.json.gz new file mode 100644 index 00000000..40086d74 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector-scan/2023-08-08/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2015-08-18/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2015-08-18/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4e699b92 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2015-08-18/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2015-08-18/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2015-08-18/service-2.json.gz new file mode 100644 index 00000000..91fff096 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2015-08-18/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4e654b21 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/examples-1.json new file mode 100644 index 00000000..05b541f0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/examples-1.json @@ -0,0 +1,1148 @@ +{ + "version": "1.0", + "examples": { + "AddAttributesToFindings": [ + { + "input": { + "attributes": [ + { + "key": "Example", + "value": "example" + } + ], + "findingArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-8l1VIE0D/run/0-Z02cjjug/finding/0-T8yM9mEU" + ] + }, + "output": { + "failedItems": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Assigns attributes (key and value pairs) to the findings that are specified by the ARNs of the findings.", + "id": "add-attributes-to-findings-1481063856401", + "title": "Add attributes to findings" + } + ], + "CreateAssessmentTarget": [ + { + "input": { + "assessmentTargetName": "ExampleAssessmentTarget", + "resourceGroupArn": "arn:aws:inspector:us-west-2:123456789012:resourcegroup/0-AB6DMKnv" + }, + "output": { + "assessmentTargetArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a new assessment target using the ARN of the resource group that is generated by CreateResourceGroup. You can create up to 50 assessment targets per AWS account. You can run up to 500 concurrent agents per AWS account.", + "id": "create-assessment-target-1481063953657", + "title": "Create assessment target" + } + ], + "CreateAssessmentTemplate": [ + { + "input": { + "assessmentTargetArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX", + "assessmentTemplateName": "ExampleAssessmentTemplate", + "durationInSeconds": 180, + "rulesPackageArns": [ + "arn:aws:inspector:us-west-2:758058086616:rulespackage/0-11B9DBXp" + ], + "userAttributesForFindings": [ + { + "key": "Example", + "value": "example" + } + ] + }, + "output": { + "assessmentTemplateArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-it5r2S4T" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates an assessment template for the assessment target that is specified by the ARN of the assessment target.", + "id": "create-assessment-template-1481064046719", + "title": "Create assessment template" + } + ], + "CreateResourceGroup": [ + { + "input": { + "resourceGroupTags": [ + { + "key": "Name", + "value": "example" + } + ] + }, + "output": { + "resourceGroupArn": "arn:aws:inspector:us-west-2:123456789012:resourcegroup/0-AB6DMKnv" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a resource group using the specified set of tags (key and value pairs) that are used to select the EC2 instances to be included in an Amazon Inspector assessment target. The created resource group is then used to create an Amazon Inspector assessment target. ", + "id": "create-resource-group-1481064169037", + "title": "Create resource group" + } + ], + "DeleteAssessmentRun": [ + { + "input": { + "assessmentRunArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-it5r2S4T/run/0-11LMTAVe" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the assessment run that is specified by the ARN of the assessment run.", + "id": "delete-assessment-run-1481064251629", + "title": "Delete assessment run" + } + ], + "DeleteAssessmentTarget": [ + { + "input": { + "assessmentTargetArn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the assessment target that is specified by the ARN of the assessment target.", + "id": "delete-assessment-target-1481064309029", + "title": "Delete assessment target" + } + ], + "DeleteAssessmentTemplate": [ + { + "input": { + "assessmentTemplateArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-it5r2S4T" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the assessment template that is specified by the ARN of the assessment template.", + "id": "delete-assessment-template-1481064364074", + "title": "Delete assessment template" + } + ], + "DescribeAssessmentRuns": [ + { + "input": { + "assessmentRunArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE" + ] + }, + "output": { + "assessmentRuns": [ + { + "name": "Run 1 for ExampleAssessmentTemplate", + "arn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE", + "assessmentTemplateArn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw", + "completedAt": "1458680301.4", + "createdAt": "1458680170.035", + "dataCollected": true, + "durationInSeconds": 3600, + "findingCounts": { + "High": 14, + "Informational": 0, + "Low": 0, + "Medium": 2, + "Undefined": 0 + }, + "notifications": [ + + ], + "rulesPackageArns": [ + "arn:aws:inspector:us-west-2:758058086616:rulespackage/0-X1KXtawP" + ], + "startedAt": "1458680170.161", + "state": "COMPLETED", + "stateChangedAt": "1458680301.4", + "stateChanges": [ + { + "state": "CREATED", + "stateChangedAt": "1458680170.035" + }, + { + "state": "START_DATA_COLLECTION_PENDING", + "stateChangedAt": "1458680170.065" + }, + { + "state": "START_DATA_COLLECTION_IN_PROGRESS", + "stateChangedAt": "1458680170.096" + }, + { + "state": "COLLECTING_DATA", + "stateChangedAt": "1458680170.161" + }, + { + "state": "STOP_DATA_COLLECTION_PENDING", + "stateChangedAt": "1458680239.883" + }, + { + "state": "DATA_COLLECTED", + "stateChangedAt": "1458680299.847" + }, + { + "state": "EVALUATING_RULES", + "stateChangedAt": "1458680300.099" + }, + { + "state": "COMPLETED", + "stateChangedAt": "1458680301.4" + } + ], + "userAttributesForFindings": [ + + ] + } + ], + "failedItems": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes the assessment runs that are specified by the ARNs of the assessment runs.", + "id": "describte-assessment-runs-1481064424352", + "title": "Describte assessment runs" + } + ], + "DescribeAssessmentTargets": [ + { + "input": { + "assessmentTargetArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq" + ] + }, + "output": { + "assessmentTargets": [ + { + "name": "ExampleAssessmentTarget", + "arn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq", + "createdAt": "1458074191.459", + "resourceGroupArn": "arn:aws:inspector:us-west-2:123456789012:resourcegroup/0-PyGXopAI", + "updatedAt": "1458074191.459" + } + ], + "failedItems": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes the assessment targets that are specified by the ARNs of the assessment targets.", + "id": "describte-assessment-targets-1481064527735", + "title": "Describte assessment targets" + } + ], + "DescribeAssessmentTemplates": [ + { + "input": { + "assessmentTemplateArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw" + ] + }, + "output": { + "assessmentTemplates": [ + { + "name": "ExampleAssessmentTemplate", + "arn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw", + "assessmentRunCount": 0, + "assessmentTargetArn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq", + "createdAt": "1458074191.844", + "durationInSeconds": 3600, + "rulesPackageArns": [ + "arn:aws:inspector:us-west-2:758058086616:rulespackage/0-X1KXtawP" + ], + "userAttributesForFindings": [ + + ] + } + ], + "failedItems": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes the assessment templates that are specified by the ARNs of the assessment templates.", + "id": "describte-assessment-templates-1481064606829", + "title": "Describte assessment templates" + } + ], + "DescribeCrossAccountAccessRole": [ + { + "output": { + "registeredAt": "1458069182.826", + "roleArn": "arn:aws:iam::123456789012:role/inspector", + "valid": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes the IAM role that enables Amazon Inspector to access your AWS account.", + "id": "describte-cross-account-access-role-1481064682267", + "title": "Describte cross account access role" + } + ], + "DescribeFindings": [ + { + "input": { + "findingArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE/finding/0-HwPnsDm4" + ] + }, + "output": { + "failedItems": { + }, + "findings": [ + { + "arn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE/finding/0-HwPnsDm4", + "assetAttributes": { + "ipv4Addresses": [ + + ], + "schemaVersion": 1 + }, + "assetType": "ec2-instance", + "attributes": [ + + ], + "confidence": 10, + "createdAt": "1458680301.37", + "description": "Amazon Inspector did not find any potential security issues during this assessment.", + "indicatorOfCompromise": false, + "numericSeverity": 0, + "recommendation": "No remediation needed.", + "schemaVersion": 1, + "service": "Inspector", + "serviceAttributes": { + "assessmentRunArn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE", + "rulesPackageArn": "arn:aws:inspector:us-west-2:758058086616:rulespackage/0-X1KXtawP", + "schemaVersion": 1 + }, + "severity": "Informational", + "title": "No potential security issues found", + "updatedAt": "1458680301.37", + "userAttributes": [ + + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes the findings that are specified by the ARNs of the findings.", + "id": "describte-findings-1481064771803", + "title": "Describe findings" + } + ], + "DescribeResourceGroups": [ + { + "input": { + "resourceGroupArns": [ + "arn:aws:inspector:us-west-2:123456789012:resourcegroup/0-PyGXopAI" + ] + }, + "output": { + "failedItems": { + }, + "resourceGroups": [ + { + "arn": "arn:aws:inspector:us-west-2:123456789012:resourcegroup/0-PyGXopAI", + "createdAt": "1458074191.098", + "tags": [ + { + "key": "Name", + "value": "example" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes the resource groups that are specified by the ARNs of the resource groups.", + "id": "describe-resource-groups-1481065787743", + "title": "Describe resource groups" + } + ], + "DescribeRulesPackages": [ + { + "input": { + "rulesPackageArns": [ + "arn:aws:inspector:us-west-2:758058086616:rulespackage/0-JJOtZiqQ" + ] + }, + "output": { + "failedItems": { + }, + "rulesPackages": [ + { + "version": "1.1", + "name": "Security Best Practices", + "arn": "arn:aws:inspector:us-west-2:758058086616:rulespackage/0-JJOtZiqQ", + "description": "The rules in this package help determine whether your systems are configured securely.", + "provider": "Amazon Web Services, Inc." + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes the rules packages that are specified by the ARNs of the rules packages.", + "id": "describe-rules-packages-1481069641979", + "title": "Describe rules packages" + } + ], + "GetTelemetryMetadata": [ + { + "input": { + "assessmentRunArn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE" + }, + "output": { + "telemetryMetadata": [ + { + "count": 2, + "dataSize": 345, + "messageType": "InspectorDuplicateProcess" + }, + { + "count": 3, + "dataSize": 255, + "messageType": "InspectorTimeEventMsg" + }, + { + "count": 4, + "dataSize": 1082, + "messageType": "InspectorNetworkInterface" + }, + { + "count": 2, + "dataSize": 349, + "messageType": "InspectorDnsEntry" + }, + { + "count": 11, + "dataSize": 2514, + "messageType": "InspectorDirectoryInfoMsg" + }, + { + "count": 1, + "dataSize": 179, + "messageType": "InspectorTcpV6ListeningPort" + }, + { + "count": 101, + "dataSize": 10949, + "messageType": "InspectorTerminal" + }, + { + "count": 26, + "dataSize": 5916, + "messageType": "InspectorUser" + }, + { + "count": 282, + "dataSize": 32148, + "messageType": "InspectorDynamicallyLoadedCodeModule" + }, + { + "count": 18, + "dataSize": 10172, + "messageType": "InspectorCreateProcess" + }, + { + "count": 3, + "dataSize": 8001, + "messageType": "InspectorProcessPerformance" + }, + { + "count": 1, + "dataSize": 360, + "messageType": "InspectorOperatingSystem" + }, + { + "count": 6, + "dataSize": 546, + "messageType": "InspectorStopProcess" + }, + { + "count": 1, + "dataSize": 1553, + "messageType": "InspectorInstanceMetaData" + }, + { + "count": 2, + "dataSize": 434, + "messageType": "InspectorTcpV4Connection" + }, + { + "count": 474, + "dataSize": 2960322, + "messageType": "InspectorPackageInfo" + }, + { + "count": 3, + "dataSize": 2235, + "messageType": "InspectorSystemPerformance" + }, + { + "count": 105, + "dataSize": 46048, + "messageType": "InspectorCodeModule" + }, + { + "count": 1, + "dataSize": 182, + "messageType": "InspectorUdpV6ListeningPort" + }, + { + "count": 2, + "dataSize": 371, + "messageType": "InspectorUdpV4ListeningPort" + }, + { + "count": 18, + "dataSize": 8362, + "messageType": "InspectorKernelModule" + }, + { + "count": 29, + "dataSize": 48788, + "messageType": "InspectorConfigurationInfo" + }, + { + "count": 1, + "dataSize": 79, + "messageType": "InspectorMonitoringStart" + }, + { + "count": 5, + "dataSize": 0, + "messageType": "InspectorSplitMsgBegin" + }, + { + "count": 51, + "dataSize": 4593, + "messageType": "InspectorGroup" + }, + { + "count": 1, + "dataSize": 184, + "messageType": "InspectorTcpV4ListeningPort" + }, + { + "count": 1159, + "dataSize": 3146579, + "messageType": "Total" + }, + { + "count": 5, + "dataSize": 0, + "messageType": "InspectorSplitMsgEnd" + }, + { + "count": 1, + "dataSize": 612, + "messageType": "InspectorLoadImageInProcess" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Information about the data that is collected for the specified assessment run.", + "id": "get-telemetry-metadata-1481066021297", + "title": "Get telemetry metadata" + } + ], + "ListAssessmentRunAgents": [ + { + "input": { + "assessmentRunArn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE", + "maxResults": 123 + }, + "output": { + "assessmentRunAgents": [ + { + "agentHealth": "HEALTHY", + "agentHealthCode": "RUNNING", + "agentId": "i-49113b93", + "assessmentRunArn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE", + "telemetryMetadata": [ + { + "count": 2, + "dataSize": 345, + "messageType": "InspectorDuplicateProcess" + }, + { + "count": 3, + "dataSize": 255, + "messageType": "InspectorTimeEventMsg" + }, + { + "count": 4, + "dataSize": 1082, + "messageType": "InspectorNetworkInterface" + }, + { + "count": 2, + "dataSize": 349, + "messageType": "InspectorDnsEntry" + }, + { + "count": 11, + "dataSize": 2514, + "messageType": "InspectorDirectoryInfoMsg" + }, + { + "count": 1, + "dataSize": 179, + "messageType": "InspectorTcpV6ListeningPort" + }, + { + "count": 101, + "dataSize": 10949, + "messageType": "InspectorTerminal" + }, + { + "count": 26, + "dataSize": 5916, + "messageType": "InspectorUser" + }, + { + "count": 282, + "dataSize": 32148, + "messageType": "InspectorDynamicallyLoadedCodeModule" + }, + { + "count": 18, + "dataSize": 10172, + "messageType": "InspectorCreateProcess" + }, + { + "count": 3, + "dataSize": 8001, + "messageType": "InspectorProcessPerformance" + }, + { + "count": 1, + "dataSize": 360, + "messageType": "InspectorOperatingSystem" + }, + { + "count": 6, + "dataSize": 546, + "messageType": "InspectorStopProcess" + }, + { + "count": 1, + "dataSize": 1553, + "messageType": "InspectorInstanceMetaData" + }, + { + "count": 2, + "dataSize": 434, + "messageType": "InspectorTcpV4Connection" + }, + { + "count": 474, + "dataSize": 2960322, + "messageType": "InspectorPackageInfo" + }, + { + "count": 3, + "dataSize": 2235, + "messageType": "InspectorSystemPerformance" + }, + { + "count": 105, + "dataSize": 46048, + "messageType": "InspectorCodeModule" + }, + { + "count": 1, + "dataSize": 182, + "messageType": "InspectorUdpV6ListeningPort" + }, + { + "count": 2, + "dataSize": 371, + "messageType": "InspectorUdpV4ListeningPort" + }, + { + "count": 18, + "dataSize": 8362, + "messageType": "InspectorKernelModule" + }, + { + "count": 29, + "dataSize": 48788, + "messageType": "InspectorConfigurationInfo" + }, + { + "count": 1, + "dataSize": 79, + "messageType": "InspectorMonitoringStart" + }, + { + "count": 5, + "dataSize": 0, + "messageType": "InspectorSplitMsgBegin" + }, + { + "count": 51, + "dataSize": 4593, + "messageType": "InspectorGroup" + }, + { + "count": 1, + "dataSize": 184, + "messageType": "InspectorTcpV4ListeningPort" + }, + { + "count": 1159, + "dataSize": 3146579, + "messageType": "Total" + }, + { + "count": 5, + "dataSize": 0, + "messageType": "InspectorSplitMsgEnd" + }, + { + "count": 1, + "dataSize": 612, + "messageType": "InspectorLoadImageInProcess" + } + ] + } + ], + "nextToken": "1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the agents of the assessment runs that are specified by the ARNs of the assessment runs.", + "id": "list-assessment-run-agents-1481918140642", + "title": "List assessment run agents" + } + ], + "ListAssessmentRuns": [ + { + "input": { + "assessmentTemplateArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw" + ], + "maxResults": 123 + }, + "output": { + "assessmentRunArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE", + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-v5D6fI3v" + ], + "nextToken": "1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the assessment runs that correspond to the assessment templates that are specified by the ARNs of the assessment templates.", + "id": "list-assessment-runs-1481066340844", + "title": "List assessment runs" + } + ], + "ListAssessmentTargets": [ + { + "input": { + "maxResults": 123 + }, + "output": { + "assessmentTargetArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq" + ], + "nextToken": "1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the ARNs of the assessment targets within this AWS account. ", + "id": "list-assessment-targets-1481066540849", + "title": "List assessment targets" + } + ], + "ListAssessmentTemplates": [ + { + "input": { + "assessmentTargetArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq" + ], + "maxResults": 123 + }, + "output": { + "assessmentTemplateArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw", + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-Uza6ihLh" + ], + "nextToken": "1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the assessment templates that correspond to the assessment targets that are specified by the ARNs of the assessment targets.", + "id": "list-assessment-templates-1481066623520", + "title": "List assessment templates" + } + ], + "ListEventSubscriptions": [ + { + "input": { + "maxResults": 123, + "resourceArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-7sbz2Kz0" + }, + "output": { + "nextToken": "1", + "subscriptions": [ + { + "eventSubscriptions": [ + { + "event": "ASSESSMENT_RUN_COMPLETED", + "subscribedAt": "1459455440.867" + } + ], + "resourceArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-7sbz2Kz0", + "topicArn": "arn:aws:sns:us-west-2:123456789012:exampletopic" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists all the event subscriptions for the assessment template that is specified by the ARN of the assessment template. ", + "id": "list-event-subscriptions-1481068376945", + "title": "List event subscriptions" + } + ], + "ListFindings": [ + { + "input": { + "assessmentRunArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE" + ], + "maxResults": 123 + }, + "output": { + "findingArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-MKkpXXPE/finding/0-HwPnsDm4", + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-4r1V2mAw/run/0-v5D6fI3v/finding/0-tyvmqBLy" + ], + "nextToken": "1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists findings that are generated by the assessment runs that are specified by the ARNs of the assessment runs.", + "id": "list-findings-1481066840611", + "title": "List findings" + } + ], + "ListRulesPackages": [ + { + "input": { + "maxResults": 123 + }, + "output": { + "nextToken": "1", + "rulesPackageArns": [ + "arn:aws:inspector:us-west-2:758058086616:rulespackage/0-9hgA516p", + "arn:aws:inspector:us-west-2:758058086616:rulespackage/0-H5hpSawc", + "arn:aws:inspector:us-west-2:758058086616:rulespackage/0-JJOtZiqQ", + "arn:aws:inspector:us-west-2:758058086616:rulespackage/0-vg5GGHSD" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists all available Amazon Inspector rules packages.", + "id": "list-rules-packages-1481066954883", + "title": "List rules packages" + } + ], + "ListTagsForResource": [ + { + "input": { + "resourceArn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-gcwFliYu" + }, + "output": { + "tags": [ + { + "key": "Name", + "value": "Example" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists all tags associated with an assessment template.", + "id": "list-tags-for-resource-1481067025240", + "title": "List tags for resource" + } + ], + "PreviewAgents": [ + { + "input": { + "maxResults": 123, + "previewAgentsArn": "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq" + }, + "output": { + "agentPreviews": [ + { + "agentId": "i-49113b93" + } + ], + "nextToken": "1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Previews the agents installed on the EC2 instances that are part of the specified assessment target.", + "id": "preview-agents-1481067101888", + "title": "Preview agents" + } + ], + "RegisterCrossAccountAccessRole": [ + { + "input": { + "roleArn": "arn:aws:iam::123456789012:role/inspector" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Registers the IAM role that Amazon Inspector uses to list your EC2 instances at the start of the assessment run or when you call the PreviewAgents action.", + "id": "register-cross-account-access-role-1481067178301", + "title": "Register cross account access role" + } + ], + "RemoveAttributesFromFindings": [ + { + "input": { + "attributeKeys": [ + "key=Example,value=example" + ], + "findingArns": [ + "arn:aws:inspector:us-west-2:123456789012:target/0-0kFIPusq/template/0-8l1VIE0D/run/0-Z02cjjug/finding/0-T8yM9mEU" + ] + }, + "output": { + "failedItems": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Removes entire attributes (key and value pairs) from the findings that are specified by the ARNs of the findings where an attribute with the specified key exists.", + "id": "remove-attributes-from-findings-1481067246548", + "title": "Remove attributes from findings" + } + ], + "SetTagsForResource": [ + { + "input": { + "resourceArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-7sbz2Kz0", + "tags": [ + { + "key": "Example", + "value": "example" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Sets tags (key and value pairs) to the assessment template that is specified by the ARN of the assessment template.", + "id": "set-tags-for-resource-1481067329646", + "title": "Set tags for resource" + } + ], + "StartAssessmentRun": [ + { + "input": { + "assessmentRunName": "examplerun", + "assessmentTemplateArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-it5r2S4T" + }, + "output": { + "assessmentRunArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-it5r2S4T/run/0-jOoroxyY" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Starts the assessment run specified by the ARN of the assessment template. For this API to function properly, you must not exceed the limit of running up to 500 concurrent agents per AWS account.", + "id": "start-assessment-run-1481067407484", + "title": "Start assessment run" + } + ], + "StopAssessmentRun": [ + { + "input": { + "assessmentRunArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-it5r2S4T/run/0-11LMTAVe" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Stops the assessment run that is specified by the ARN of the assessment run.", + "id": "stop-assessment-run-1481067502857", + "title": "Stop assessment run" + } + ], + "SubscribeToEvent": [ + { + "input": { + "event": "ASSESSMENT_RUN_COMPLETED", + "resourceArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-7sbz2Kz0", + "topicArn": "arn:aws:sns:us-west-2:123456789012:exampletopic" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Enables the process of sending Amazon Simple Notification Service (SNS) notifications about a specified event to a specified SNS topic.", + "id": "subscribe-to-event-1481067686031", + "title": "Subscribe to event" + } + ], + "UnsubscribeFromEvent": [ + { + "input": { + "event": "ASSESSMENT_RUN_COMPLETED", + "resourceArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX/template/0-7sbz2Kz0", + "topicArn": "arn:aws:sns:us-west-2:123456789012:exampletopic" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Disables the process of sending Amazon Simple Notification Service (SNS) notifications about a specified event to a specified SNS topic.", + "id": "unsubscribe-from-event-1481067781705", + "title": "Unsubscribe from event" + } + ], + "UpdateAssessmentTarget": [ + { + "input": { + "assessmentTargetArn": "arn:aws:inspector:us-west-2:123456789012:target/0-nvgVhaxX", + "assessmentTargetName": "Example", + "resourceGroupArn": "arn:aws:inspector:us-west-2:123456789012:resourcegroup/0-yNbgL5Pt" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Updates the assessment target that is specified by the ARN of the assessment target.", + "id": "update-assessment-target-1481067866692", + "title": "Update assessment target" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/paginators-1.json new file mode 100644 index 00000000..8dec0410 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/paginators-1.json @@ -0,0 +1,58 @@ +{ + "pagination": { + "ListFindings": { + "result_key": "findingArns", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "ListAssessmentTemplates": { + "result_key": "assessmentTemplateArns", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "PreviewAgents": { + "result_key": "agentPreviews", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "ListEventSubscriptions": { + "result_key": "subscriptions", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "ListRulesPackages": { + "result_key": "rulesPackageArns", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "ListAssessmentRunAgents": { + "result_key": "assessmentRunAgents", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "ListAssessmentRuns": { + "result_key": "assessmentRunArns", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "ListAssessmentTargets": { + "result_key": "assessmentTargetArns", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "ListExclusions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "exclusionArns" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/service-2.json.gz new file mode 100644 index 00000000..e7eac949 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector/2016-02-16/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..41174d7b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/paginators-1.json new file mode 100644 index 00000000..f6aaa6d4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/paginators-1.json @@ -0,0 +1,62 @@ +{ + "pagination": { + "ListAccountPermissions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "permissions" + }, + "ListCoverage": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "coveredResources" + }, + "ListCoverageStatistics": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "countsByGroup" + }, + "ListDelegatedAdminAccounts": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "delegatedAdminAccounts" + }, + "ListFilters": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "filters" + }, + "ListFindingAggregations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "responses" + }, + "ListFindings": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findings" + }, + "ListMembers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "members" + }, + "ListUsageTotals": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "totals" + }, + "SearchVulnerabilities": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "vulnerabilities" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/paginators-1.sdk-extras.json new file mode 100644 index 00000000..b01a0bfc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/paginators-1.sdk-extras.json @@ -0,0 +1,17 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "ListFindingAggregations": { + "non_aggregate_keys": [ + "aggregationType" + ] + }, + "ListCoverageStatistics": { + "non_aggregate_keys": [ + "totalCounts" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/service-2.json.gz new file mode 100644 index 00000000..8c13b9da Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/inspector2/2020-06-08/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..7f6c45f1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/paginators-1.json new file mode 100644 index 00000000..467ebeee --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListHealthEvents": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "HealthEvents" + }, + "ListMonitors": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Monitors" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/service-2.json.gz new file mode 100644 index 00000000..6addbffd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/internetmonitor/2021-06-03/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0f6c4140 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/paginators-1.json new file mode 100644 index 00000000..26d4a561 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListRetainedMessages": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "retainedTopics" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/service-2.json.gz new file mode 100644 index 00000000..469131d4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-data/2015-05-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..44e2315a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/service-2.json.gz new file mode 100644 index 00000000..61b4817e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-jobs-data/2017-09-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-roborunner/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-roborunner/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..2128a584 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-roborunner/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-roborunner/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-roborunner/2018-05-10/paginators-1.json new file mode 100644 index 00000000..6d1956a6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-roborunner/2018-05-10/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListDestinations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "destinations" + }, + "ListSites": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "sites" + }, + "ListWorkerFleets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workerFleets" + }, + "ListWorkers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot-roborunner/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-roborunner/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..11e76dd7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot-roborunner/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..26dfedf1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/paginators-1.json new file mode 100644 index 00000000..b6549493 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/paginators-1.json @@ -0,0 +1,360 @@ +{ + "pagination": { + "ListCACertificates": { + "input_token": "marker", + "output_token": "nextMarker", + "limit_key": "pageSize", + "result_key": "certificates" + }, + "ListCertificates": { + "input_token": "marker", + "output_token": "nextMarker", + "limit_key": "pageSize", + "result_key": "certificates" + }, + "ListCertificatesByCA": { + "input_token": "marker", + "output_token": "nextMarker", + "limit_key": "pageSize", + "result_key": "certificates" + }, + "ListOutgoingCertificates": { + "input_token": "marker", + "output_token": "nextMarker", + "limit_key": "pageSize", + "result_key": "outgoingCertificates" + }, + "ListPolicies": { + "input_token": "marker", + "output_token": "nextMarker", + "limit_key": "pageSize", + "result_key": "policies" + }, + "ListPolicyPrincipals": { + "input_token": "marker", + "output_token": "nextMarker", + "limit_key": "pageSize", + "result_key": "principals" + }, + "ListPrincipalPolicies": { + "input_token": "marker", + "output_token": "nextMarker", + "limit_key": "pageSize", + "result_key": "policies" + }, + "ListPrincipalThings": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "things" + }, + "ListThingTypes": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "thingTypes" + }, + "ListThings": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "things" + }, + "ListTopicRules": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "rules" + }, + "ListActiveViolations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "activeViolations" + }, + "ListAttachedPolicies": { + "input_token": "marker", + "limit_key": "pageSize", + "output_token": "nextMarker", + "result_key": "policies" + }, + "ListAuditFindings": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "findings" + }, + "ListAuditTasks": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "tasks" + }, + "ListAuthorizers": { + "input_token": "marker", + "limit_key": "pageSize", + "output_token": "nextMarker", + "result_key": "authorizers" + }, + "ListBillingGroups": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "billingGroups" + }, + "ListIndices": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "indexNames" + }, + "ListJobExecutionsForJob": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "executionSummaries" + }, + "ListJobExecutionsForThing": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "executionSummaries" + }, + "ListJobs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "jobs" + }, + "ListOTAUpdates": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "otaUpdates" + }, + "ListRoleAliases": { + "input_token": "marker", + "limit_key": "pageSize", + "output_token": "nextMarker", + "result_key": "roleAliases" + }, + "ListScheduledAudits": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "scheduledAudits" + }, + "ListSecurityProfiles": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "securityProfileIdentifiers" + }, + "ListSecurityProfilesForTarget": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "securityProfileTargetMappings" + }, + "ListStreams": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "streams" + }, + "ListTagsForResource": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "tags" + }, + "ListTargetsForPolicy": { + "input_token": "marker", + "limit_key": "pageSize", + "output_token": "nextMarker", + "result_key": "targets" + }, + "ListTargetsForSecurityProfile": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "securityProfileTargets" + }, + "ListThingGroups": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "thingGroups" + }, + "ListThingGroupsForThing": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "thingGroups" + }, + "ListThingRegistrationTasks": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "taskIds" + }, + "ListThingsInBillingGroup": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "things" + }, + "ListThingsInThingGroup": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "things" + }, + "ListV2LoggingLevels": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "logTargetConfigurations" + }, + "ListViolationEvents": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "violationEvents" + }, + "ListAuditMitigationActionsExecutions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "actionsExecutions" + }, + "ListAuditMitigationActionsTasks": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "tasks" + }, + "ListAuditSuppressions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "suppressions" + }, + "ListDimensions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "dimensionNames" + }, + "ListDomainConfigurations": { + "input_token": "marker", + "limit_key": "pageSize", + "output_token": "nextMarker", + "result_key": "domainConfigurations" + }, + "ListMitigationActions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "actionIdentifiers" + }, + "ListProvisioningTemplateVersions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "versions" + }, + "ListProvisioningTemplates": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "templates" + }, + "ListThingRegistrationTaskReports": { + "input_token": "nextToken", + "limit_key": "maxResults", + "non_aggregate_keys": [ + "reportType" + ], + "output_token": "nextToken", + "result_key": "resourceLinks" + }, + "ListTopicRuleDestinations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "destinationSummaries" + }, + "ListThingPrincipals": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "principals" + }, + "GetBehaviorModelTrainingSummaries": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "summaries" + }, + "ListCustomMetrics": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "metricNames" + }, + "ListDetectMitigationActionsExecutions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "actionsExecutions" + }, + "ListDetectMitigationActionsTasks": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "tasks" + }, + "ListFleetMetrics": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "fleetMetrics" + }, + "ListJobTemplates": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "jobTemplates" + }, + "ListMetricValues": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "metricDatumList" + }, + "ListManagedJobTemplates": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "managedJobTemplates" + }, + "ListRelatedResourcesForAuditFinding": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "relatedResources" + }, + "ListPackageVersions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "packageVersionSummaries" + }, + "ListPackages": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "packageSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/service-2.json.gz new file mode 100644 index 00000000..ce5382a0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot/2015-05-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-devices/2018-05-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-devices/2018-05-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c301e885 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-devices/2018-05-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-devices/2018-05-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-devices/2018-05-14/paginators-1.json new file mode 100644 index 00000000..237e5581 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-devices/2018-05-14/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListDeviceEvents": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Events" + }, + "ListDevices": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Devices" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-devices/2018-05-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-devices/2018-05-14/service-2.json.gz new file mode 100644 index 00000000..09d4bf79 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-devices/2018-05-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..442cdcf9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/paginators-1.json new file mode 100644 index 00000000..d17d5df6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListPlacements": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "placements" + }, + "ListProjects": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "projects" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/service-2.json.gz new file mode 100644 index 00000000..b10e5047 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iot1click-projects/2018-05-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f59dde83 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/paginators-1.json new file mode 100644 index 00000000..d1bfaaaa --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListChannels": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "channelSummaries" + }, + "ListDatasetContents": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "datasetContentSummaries" + }, + "ListDatasets": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "datasetSummaries" + }, + "ListDatastores": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "datastoreSummaries" + }, + "ListPipelines": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "pipelineSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/service-2.json.gz new file mode 100644 index 00000000..a1807ee9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotanalytics/2017-11-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..391ab13f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/service-2.json.gz new file mode 100644 index 00000000..939406fb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotdeviceadvisor/2020-09-18/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..874fba03 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/service-2.json.gz new file mode 100644 index 00000000..18533aab Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents-data/2018-10-23/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..183b9cf6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/service-2.json.gz new file mode 100644 index 00000000..4a3ad080 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotevents/2018-07-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..43ca69f4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/paginators-1.json new file mode 100644 index 00000000..74c96f51 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/paginators-1.json @@ -0,0 +1,9 @@ +{ + "pagination": { + "ListApplications": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "applicationSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/service-2.json.gz new file mode 100644 index 00000000..9256c37c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleethub/2020-11-03/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5fd1e632 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/paginators-1.json new file mode 100644 index 00000000..ff157ff1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/paginators-1.json @@ -0,0 +1,82 @@ +{ + "pagination": { + "GetVehicleStatus": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "campaigns" + }, + "ListCampaigns": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "campaignSummaries" + }, + "ListDecoderManifestNetworkInterfaces": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "networkInterfaces" + }, + "ListDecoderManifestSignals": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "signalDecoders" + }, + "ListDecoderManifests": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "summaries" + }, + "ListFleets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "fleetSummaries" + }, + "ListFleetsForVehicle": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "fleets" + }, + "ListModelManifestNodes": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "nodes" + }, + "ListModelManifests": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "summaries" + }, + "ListSignalCatalogNodes": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "nodes" + }, + "ListSignalCatalogs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "summaries" + }, + "ListVehicles": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "vehicleSummaries" + }, + "ListVehiclesInFleet": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "vehicles" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/service-2.json.gz new file mode 100644 index 00000000..66e1fc4d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotfleetwise/2021-06-17/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..87e0d2d5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/service-2.json.gz new file mode 100644 index 00000000..c0cade31 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsecuretunneling/2018-10-05/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1814f622 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/paginators-1.json new file mode 100644 index 00000000..e8984759 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/paginators-1.json @@ -0,0 +1,130 @@ +{ + "pagination": { + "GetAssetPropertyAggregates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "aggregatedValues" + }, + "GetAssetPropertyValueHistory": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assetPropertyValueHistory" + }, + "ListAccessPolicies": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "accessPolicySummaries" + }, + "ListAssetModels": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assetModelSummaries" + }, + "ListAssets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assetSummaries" + }, + "ListAssociatedAssets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assetSummaries" + }, + "ListDashboards": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "dashboardSummaries" + }, + "ListGateways": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "gatewaySummaries" + }, + "ListPortals": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "portalSummaries" + }, + "ListProjectAssets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assetIds" + }, + "ListProjects": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "projectSummaries" + }, + "ListAssetRelationships": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assetRelationshipSummaries" + }, + "GetInterpolatedAssetPropertyValues": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "interpolatedAssetPropertyValues" + }, + "ListTimeSeries": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "TimeSeriesSummaries" + }, + "ListBulkImportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "jobSummaries" + }, + "ListAssetModelProperties": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assetModelPropertySummaries" + }, + "ListAssetProperties": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assetPropertySummaries" + }, + "ExecuteQuery": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "rows" + }, + "ListActions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "actionSummaries" + }, + "ListAssetModelCompositeModels": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assetModelCompositeModelSummaries" + }, + "ListCompositionRelationships": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "compositionRelationshipSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/paginators-1.sdk-extras.json new file mode 100644 index 00000000..77dcd655 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/paginators-1.sdk-extras.json @@ -0,0 +1,12 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "ExecuteQuery": { + "non_aggregate_keys": [ + "columns" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/service-2.json.gz new file mode 100644 index 00000000..54827b5e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/waiters-2.json new file mode 100644 index 00000000..e51df5fe --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotsitewise/2019-12-02/waiters-2.json @@ -0,0 +1,92 @@ +{ + "version": 2, + "waiters": { + "AssetModelNotExists": { + "delay": 3, + "maxAttempts": 20, + "operation": "DescribeAssetModel", + "acceptors": [ + { + "state": "success", + "matcher": "error", + "expected": "ResourceNotFoundException" + } + ] + }, + "AssetModelActive": { + "delay": 3, + "maxAttempts": 20, + "operation": "DescribeAssetModel", + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "assetModelStatus.state", + "expected": "ACTIVE" + }, + { + "state": "failure", + "matcher": "path", + "argument": "assetModelStatus.state", + "expected": "FAILED" + } + ] + }, + "AssetNotExists": { + "delay": 3, + "maxAttempts": 20, + "operation": "DescribeAsset", + "acceptors": [ + { + "state": "success", + "matcher": "error", + "expected": "ResourceNotFoundException" + } + ] + }, + "AssetActive": { + "delay": 3, + "maxAttempts": 20, + "operation": "DescribeAsset", + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "assetStatus.state", + "expected": "ACTIVE" + }, + { + "state": "failure", + "matcher": "path", + "argument": "assetStatus.state", + "expected": "FAILED" + } + ] + }, + "PortalNotExists": { + "delay": 3, + "maxAttempts": 20, + "operation": "DescribePortal", + "acceptors": [ + { + "state": "success", + "matcher": "error", + "expected": "ResourceNotFoundException" + } + ] + }, + "PortalActive": { + "delay": 3, + "maxAttempts": 20, + "operation": "DescribePortal", + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "portalStatus.state", + "expected": "ACTIVE" + } + ] + } + } + } diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..73c6f166 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/paginators-1.json new file mode 100644 index 00000000..bc92f846 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "GetFlowTemplateRevisions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "summaries" + }, + "GetSystemTemplateRevisions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "summaries" + }, + "ListFlowExecutionMessages": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "messages" + }, + "ListTagsForResource": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "tags" + }, + "SearchEntities": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "descriptions" + }, + "SearchFlowExecutions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "summaries" + }, + "SearchFlowTemplates": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "summaries" + }, + "SearchSystemInstances": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "summaries" + }, + "SearchSystemTemplates": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "summaries" + }, + "SearchThings": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "things" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/service-2.json.gz new file mode 100644 index 00000000..012c8eb9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotthingsgraph/2018-09-06/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b1a358ff Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/service-2.json.gz new file mode 100644 index 00000000..c1db5ff1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iottwinmaker/2021-11-29/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6e8d844e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/service-2.json.gz new file mode 100644 index 00000000..ecc4fe7f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/iotwireless/2020-11-22/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivs-realtime/2020-07-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs-realtime/2020-07-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6264d29c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs-realtime/2020-07-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivs-realtime/2020-07-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs-realtime/2020-07-14/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs-realtime/2020-07-14/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivs-realtime/2020-07-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs-realtime/2020-07-14/service-2.json.gz new file mode 100644 index 00000000..334ff266 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs-realtime/2020-07-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0bd31307 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/paginators-1.json new file mode 100644 index 00000000..572d1c73 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListChannels": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "channels" + }, + "ListStreamKeys": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "streamKeys" + }, + "ListStreams": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "streams" + }, + "ListPlaybackKeyPairs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "keyPairs" + }, + "ListRecordingConfigurations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "recordingConfigurations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/service-2.json.gz new file mode 100644 index 00000000..6decd167 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ivs/2020-07-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c1395819 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/service-2.json.gz new file mode 100644 index 00000000..8b74cc23 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ivschat/2020-07-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kafka/2018-11-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kafka/2018-11-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b065c213 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kafka/2018-11-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kafka/2018-11-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kafka/2018-11-14/paginators-1.json new file mode 100644 index 00000000..92e6d9fd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kafka/2018-11-14/paginators-1.json @@ -0,0 +1,76 @@ +{ + "pagination": { + "ListClusters": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ClusterInfoList" + }, + "ListNodes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NodeInfoList" + }, + "ListConfigurations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Configurations" + }, + "ListClusterOperations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ClusterOperationInfoList" + }, + "ListConfigurationRevisions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Revisions" + }, + "ListKafkaVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "KafkaVersions" + }, + "ListScramSecrets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SecretArnList" + }, + "ListClustersV2": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ClusterInfoList" + }, + "ListVpcConnections": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VpcConnections" + }, + "ListClientVpcConnections": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ClientVpcConnections" + }, + "ListClusterOperationsV2": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ClusterOperationInfoList" + }, + "ListReplicators": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Replicators" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kafka/2018-11-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kafka/2018-11-14/service-2.json.gz new file mode 100644 index 00000000..55764aff Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kafka/2018-11-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..db138cff Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/paginators-1.json new file mode 100644 index 00000000..489a00d6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListConnectors": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "connectors" + }, + "ListCustomPlugins": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "customPlugins" + }, + "ListWorkerConfigurations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workerConfigurations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/service-2.json.gz new file mode 100644 index 00000000..84386a72 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kafkaconnect/2021-09-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kendra-ranking/2022-10-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra-ranking/2022-10-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..50cbca2c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra-ranking/2022-10-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kendra-ranking/2022-10-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra-ranking/2022-10-19/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra-ranking/2022-10-19/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kendra-ranking/2022-10-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra-ranking/2022-10-19/service-2.json.gz new file mode 100644 index 00000000..43af11c6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra-ranking/2022-10-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..24edffa3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/service-2.json.gz new file mode 100644 index 00000000..7b524d73 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kendra/2019-02-03/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ade13663 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/paginators-1.json new file mode 100644 index 00000000..885bf4e2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListKeyspaces": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "keyspaces" + }, + "ListTables": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "tables" + }, + "ListTagsForResource": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "tags" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/service-2.json.gz new file mode 100644 index 00000000..b79c55cf Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/waiters-2.json new file mode 100644 index 00000000..4b20636a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/keyspaces/2022-02-10/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..91a2a848 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/paginators-1.json new file mode 100644 index 00000000..a9a70417 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListFragments": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Fragments" + }, + "GetImages": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Images" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/service-2.json.gz new file mode 100644 index 00000000..5e7fd1f6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-archived-media/2017-09-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..95d0c595 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/service-2.json.gz new file mode 100644 index 00000000..93b07cba Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-media/2017-09-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..95d0c595 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/service-2.json.gz new file mode 100644 index 00000000..70030dd5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-signaling/2019-12-04/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-webrtc-storage/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-webrtc-storage/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6a649824 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-webrtc-storage/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-webrtc-storage/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-webrtc-storage/2018-05-10/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-webrtc-storage/2018-05-10/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-webrtc-storage/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-webrtc-storage/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..af88e9d8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis-video-webrtc-storage/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..259da46a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/paginators-1.json new file mode 100644 index 00000000..3d680e67 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/paginators-1.json @@ -0,0 +1,43 @@ +{ + "pagination": { + "DescribeStream": { + "input_token": "ExclusiveStartShardId", + "limit_key": "Limit", + "more_results": "StreamDescription.HasMoreShards", + "output_token": "StreamDescription.Shards[-1].ShardId", + "result_key": "StreamDescription.Shards", + "non_aggregate_keys": [ + "StreamDescription.StreamARN", + "StreamDescription.StreamName", + "StreamDescription.StreamStatus", + "StreamDescription.RetentionPeriodHours", + "StreamDescription.EnhancedMonitoring", + "StreamDescription.EncryptionType", + "StreamDescription.KeyId", + "StreamDescription.StreamCreationTimestamp" + ] + }, + "ListStreams": { + "input_token": "NextToken", + "limit_key": "Limit", + "more_results": "HasMoreStreams", + "output_token": "NextToken", + "result_key": [ + "StreamNames", + "StreamSummaries" + ] + }, + "ListShards": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Shards" + }, + "ListStreamConsumers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Consumers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/service-2.json.gz new file mode 100644 index 00000000..518f6e16 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/waiters-2.json new file mode 100644 index 00000000..d61efe43 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesis/2013-12-02/waiters-2.json @@ -0,0 +1,30 @@ +{ + "version": 2, + "waiters": { + "StreamExists": { + "delay": 10, + "operation": "DescribeStream", + "maxAttempts": 18, + "acceptors": [ + { + "expected": "ACTIVE", + "matcher": "path", + "state": "success", + "argument": "StreamDescription.StreamStatus" + } + ] + }, + "StreamNotExists": { + "delay": 10, + "operation": "DescribeStream", + "maxAttempts": 18, + "acceptors": [ + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "success" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..9c1d256e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/service-2.json.gz new file mode 100644 index 00000000..10b27a7b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalytics/2015-08-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..9c1d256e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/paginators-1.json new file mode 100644 index 00000000..70052cd3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListApplicationSnapshots": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "SnapshotSummaries" + }, + "ListApplications": { + "input_token": "NextToken", + "limit_key": "Limit", + "output_token": "NextToken", + "result_key": "ApplicationSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/service-2.json.gz new file mode 100644 index 00000000..a2ed7a7f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisanalyticsv2/2018-05-23/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..329b9c52 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/paginators-1.json new file mode 100644 index 00000000..9d837318 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListStreams": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "StreamInfoList" + }, + "ListSignalingChannels": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ChannelInfoList" + }, + "DescribeMappedResourceConfiguration": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "MappedResourceConfigurationList" + }, + "ListEdgeAgentConfigurations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EdgeConfigs" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/service-2.json.gz new file mode 100644 index 00000000..f21447c5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kinesisvideo/2017-09-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8882174a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/examples-1.json new file mode 100644 index 00000000..c770d0ed --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/examples-1.json @@ -0,0 +1,1750 @@ +{ + "version": "1.0", + "examples": { + "CancelKeyDeletion": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "output": { + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key whose deletion you are canceling. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + }, + "output": { + "KeyId": "The ARN of the KMS key whose deletion you canceled." + } + }, + "description": "The following example cancels deletion of the specified KMS key.", + "id": "to-cancel-deletion-of-a-cmk-1477428535102", + "title": "To cancel deletion of a KMS key" + } + ], + "ConnectCustomKeyStore": [ + { + "input": { + "CustomKeyStoreId": "cks-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + "CustomKeyStoreId": "The ID of the AWS KMS custom key store." + }, + "output": { + } + }, + "description": "This example connects an AWS KMS custom key store to its AWS CloudHSM cluster. This operation does not return any data. To verify that the custom key store is connected, use the DescribeCustomKeyStores operation.", + "id": "to-connect-a-custom-key-store-to-its-cloudhsm-cluster-1628626947750", + "title": "To connect a custom key store to its CloudHSM cluster" + } + ], + "CreateAlias": [ + { + "input": { + "AliasName": "alias/ExampleAlias", + "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "AliasName": "The alias to create. Aliases must begin with 'alias/'. Do not use aliases that begin with 'alias/aws' because they are reserved for use by AWS.", + "TargetKeyId": "The identifier of the KMS key whose alias you are creating. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + } + }, + "description": "The following example creates an alias for the specified KMS key.", + "id": "to-create-an-alias-1477505685119", + "title": "To create an alias" + } + ], + "CreateCustomKeyStore": [ + { + "input": { + "CloudHsmClusterId": "cluster-1a23b4cdefg", + "CustomKeyStoreName": "ExampleKeyStore", + "KeyStorePassword": "kmsPswd", + "TrustAnchorCertificate": "" + }, + "output": { + "CustomKeyStoreId": "cks-1234567890abcdef0" + }, + "comments": { + "input": { + "CloudHsmClusterId": "The ID of the CloudHSM cluster.", + "CustomKeyStoreName": "A friendly name for the custom key store.", + "KeyStorePassword": "The password for the kmsuser CU account in the specified cluster.", + "TrustAnchorCertificate": "The content of the customerCA.crt file that you created when you initialized the cluster." + }, + "output": { + "CustomKeyStoreId": "The ID of the new custom key store." + } + }, + "description": "This example creates a custom key store that is associated with an AWS CloudHSM cluster.", + "id": "to-create-an-aws-cloudhsm-custom-key-store-1628627769469", + "title": "To create an AWS CloudHSM custom key store" + } + ], + "CreateGrant": [ + { + "input": { + "GranteePrincipal": "arn:aws:iam::111122223333:role/ExampleRole", + "KeyId": "arn:aws:kms:us-east-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "Operations": [ + "Encrypt", + "Decrypt" + ] + }, + "output": { + "GrantId": "0c237476b39f8bc44e45212e08498fbe3151305030726c0590dd8d3e9f3d6a60", + "GrantToken": "AQpAM2RhZTk1MGMyNTk2ZmZmMzEyYWVhOWViN2I1MWM4Mzc0MWFiYjc0ZDE1ODkyNGFlNTIzODZhMzgyZjBlNGY3NiKIAgEBAgB4Pa6VDCWW__MSrqnre1HIN0Grt00ViSSuUjhqOC8OT3YAAADfMIHcBgkqhkiG9w0BBwaggc4wgcsCAQAwgcUGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMmqLyBTAegIn9XlK5AgEQgIGXZQjkBcl1dykDdqZBUQ6L1OfUivQy7JVYO2-ZJP7m6f1g8GzV47HX5phdtONAP7K_HQIflcgpkoCqd_fUnE114mSmiagWkbQ5sqAVV3ov-VeqgrvMe5ZFEWLMSluvBAqdjHEdMIkHMlhlj4ENZbzBfo9Wxk8b8SnwP4kc4gGivedzFXo-dwN8fxjjq_ZZ9JFOj2ijIbj5FyogDCN0drOfi8RORSEuCEmPvjFRMFAwcmwFkN2NPp89amA" + }, + "comments": { + "input": { + "GranteePrincipal": "The identity that is given permission to perform the operations specified in the grant.", + "KeyId": "The identifier of the KMS key to which the grant applies. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key.", + "Operations": "A list of operations that the grant allows." + }, + "output": { + "GrantId": "The unique identifier of the grant.", + "GrantToken": "The grant token." + } + }, + "description": "The following example creates a grant that allows the specified IAM role to encrypt data with the specified KMS key.", + "id": "to-create-a-grant-1477972226782", + "title": "To create a grant" + } + ], + "CreateKey": [ + { + "input": { + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "CreationDate": "2017-07-05T14:04:55-07:00", + "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", + "Description": "", + "Enabled": true, + "EncryptionAlgorithms": [ + "SYMMETRIC_DEFAULT" + ], + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyManager": "CUSTOMER", + "KeySpec": "SYMMETRIC_DEFAULT", + "KeyState": "Enabled", + "KeyUsage": "ENCRYPT_DECRYPT", + "MultiRegion": false, + "Origin": "AWS_KMS" + } + }, + "comments": { + "input": { + "Tags": "One or more tags. Each tag consists of a tag key and a tag value." + }, + "output": { + "KeyMetadata": "Detailed information about the KMS key that this operation creates." + } + }, + "description": "The following example creates a symmetric KMS key for encryption and decryption. No parameters are required for this operation.", + "id": "to-create-a-cmk-1478028992966", + "title": "To create a KMS key" + }, + { + "input": { + "KeySpec": "RSA_4096", + "KeyUsage": "ENCRYPT_DECRYPT" + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "CreationDate": "2021-04-05T14:04:55-07:00", + "CustomerMasterKeySpec": "RSA_4096", + "Description": "", + "Enabled": true, + "EncryptionAlgorithms": [ + "RSAES_OAEP_SHA_1", + "RSAES_OAEP_SHA_256" + ], + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyManager": "CUSTOMER", + "KeySpec": "RSA_4096", + "KeyState": "Enabled", + "KeyUsage": "ENCRYPT_DECRYPT", + "MultiRegion": false, + "Origin": "AWS_KMS" + } + }, + "comments": { + "input": { + "KeySpec": "Describes the type of key material in the KMS key.", + "KeyUsage": "The cryptographic operations for which you can use the KMS key." + }, + "output": { + "KeyMetadata": "Detailed information about the KMS key that this operation creates." + } + }, + "description": "This example creates a KMS key that contains an asymmetric RSA key pair for encryption and decryption. The key spec and key usage can't be changed after the key is created.", + "id": "to-create-an-asymmetric-rsa-kms-key-for-encryption-and-decryption-1630533897833", + "title": "To create an asymmetric RSA KMS key for encryption and decryption" + }, + { + "input": { + "KeySpec": "ECC_NIST_P521", + "KeyUsage": "SIGN_VERIFY" + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "CreationDate": "2019-12-02T07:48:55-07:00", + "CustomerMasterKeySpec": "ECC_NIST_P521", + "Description": "", + "Enabled": true, + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyManager": "CUSTOMER", + "KeySpec": "ECC_NIST_P521", + "KeyState": "Enabled", + "KeyUsage": "SIGN_VERIFY", + "MultiRegion": false, + "Origin": "AWS_KMS", + "SigningAlgorithms": [ + "ECDSA_SHA_512" + ] + } + }, + "comments": { + "input": { + "KeySpec": "Describes the type of key material in the KMS key.", + "KeyUsage": "The cryptographic operations for which you can use the KMS key." + }, + "output": { + "KeyMetadata": "Detailed information about the KMS key that this operation creates." + } + }, + "description": "This example creates a KMS key that contains an asymmetric elliptic curve (ECC) key pair for signing and verification. The key usage is required even though \"SIGN_VERIFY\" is the only valid value for ECC KMS keys. The key spec and key usage can't be changed after the key is created.", + "id": "to-create-an-asymmetric-elliptic-curve-kms-key-for-signing-and-verification-1630541089401", + "title": "To create an asymmetric elliptic curve KMS key for signing and verification" + }, + { + "input": { + "MultiRegion": true + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef12345678990ab", + "CreationDate": "2021-09-02T016:15:21-09:00", + "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", + "Description": "", + "Enabled": true, + "EncryptionAlgorithms": [ + "SYMMETRIC_DEFAULT" + ], + "KeyId": "mrk-1234abcd12ab34cd56ef12345678990ab", + "KeyManager": "CUSTOMER", + "KeySpec": "SYMMETRIC_DEFAULT", + "KeyState": "Enabled", + "KeyUsage": "ENCRYPT_DECRYPT", + "MultiRegion": true, + "MultiRegionConfiguration": { + "MultiRegionKeyType": "PRIMARY", + "PrimaryKey": { + "Arn": "arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef12345678990ab", + "Region": "us-west-2" + }, + "ReplicaKeys": [ + + ] + }, + "Origin": "AWS_KMS" + } + }, + "comments": { + "input": { + "MultiRegion": "Indicates whether the KMS key is a multi-Region (True) or regional (False) key." + }, + "output": { + "KeyMetadata": "Detailed information about the KMS key that this operation creates." + } + }, + "description": "This example creates a multi-Region primary symmetric encryption key. Because the default values for all parameters create a symmetric encryption key, only the MultiRegion parameter is required for this KMS key.", + "id": "to-create-a-multi-region-primary-kms-key-1630599158567", + "title": "To create a multi-Region primary KMS key" + }, + { + "input": { + "Origin": "EXTERNAL" + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "CreationDate": "2019-12-02T07:48:55-07:00", + "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", + "Description": "", + "Enabled": false, + "EncryptionAlgorithms": [ + "SYMMETRIC_DEFAULT" + ], + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyManager": "CUSTOMER", + "KeySpec": "SYMMETRIC_DEFAULT", + "KeyState": "PendingImport", + "KeyUsage": "ENCRYPT_DECRYPT", + "MultiRegion": false, + "Origin": "EXTERNAL" + } + }, + "comments": { + "input": { + "Origin": "The source of the key material for the KMS key." + }, + "output": { + "KeyMetadata": "Detailed information about the KMS key that this operation creates." + } + }, + "description": "This example creates a KMS key with no key material. When the operation is complete, you can import your own key material into the KMS key. To create this KMS key, set the Origin parameter to EXTERNAL. ", + "id": "to-create-a-kms-key-for-imported-key-material-1630603607560", + "title": "To create a KMS key for imported key material" + }, + { + "input": { + "CustomKeyStoreId": "cks-1234567890abcdef0", + "Origin": "AWS_CLOUDHSM" + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "CloudHsmClusterId": "cluster-1a23b4cdefg", + "CreationDate": "2019-12-02T07:48:55-07:00", + "CustomKeyStoreId": "cks-1234567890abcdef0", + "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", + "Description": "", + "Enabled": true, + "EncryptionAlgorithms": [ + "SYMMETRIC_DEFAULT" + ], + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyManager": "CUSTOMER", + "KeySpec": "SYMMETRIC_DEFAULT", + "KeyState": "Enabled", + "KeyUsage": "ENCRYPT_DECRYPT", + "MultiRegion": false, + "Origin": "AWS_CLOUDHSM" + } + }, + "comments": { + "input": { + "CustomKeyStoreId": "Identifies the custom key store that hosts the KMS key.", + "Origin": "Indicates the source of the key material for the KMS key." + }, + "output": { + "KeyMetadata": "Detailed information about the KMS key that this operation creates." + } + }, + "description": "This example creates a KMS key in the specified custom key store. The operation creates the KMS key and its metadata in AWS KMS and the key material in the AWS CloudHSM cluster associated with the custom key store. This example requires the Origin and CustomKeyStoreId parameters.", + "id": "to-create-a-kms-key-in-a-custom-key-store-1630604382908", + "title": "To create a KMS key in a custom key store" + }, + { + "input": { + "KeySpec": "HMAC_384", + "KeyUsage": "GENERATE_VERIFY_MAC" + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "CreationDate": "2022-04-05T14:04:55-07:00", + "CustomerMasterKeySpec": "HMAC_384", + "Description": "", + "Enabled": true, + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyManager": "CUSTOMER", + "KeySpec": "HMAC_384", + "KeyState": "Enabled", + "KeyUsage": "GENERATE_VERIFY_MAC", + "MacAlgorithms": [ + "HMAC_SHA_384" + ], + "MultiRegion": false, + "Origin": "AWS_KMS" + } + }, + "comments": { + "input": { + "KeySpec": "Describes the type of key material in the KMS key.", + "KeyUsage": "The cryptographic operations for which you can use the KMS key." + }, + "output": { + "KeyMetadata": "Detailed information about the KMS key that this operation creates." + } + }, + "description": "This example creates a 384-bit symmetric HMAC KMS key. The GENERATE_VERIFY_MAC key usage value is required even though it's the only valid value for HMAC KMS keys. The key spec and key usage can't be changed after the key is created. ", + "id": "to-create-an-hmac-kms-key-1630628752841", + "title": "To create an HMAC KMS key" + } + ], + "Decrypt": [ + { + "input": { + "CiphertextBlob": "", + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "output": { + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "Plaintext": "" + }, + "comments": { + "input": { + "CiphertextBlob": "The encrypted data (ciphertext).", + "KeyId": "A key identifier for the KMS key to use to decrypt the data." + }, + "output": { + "KeyId": "The Amazon Resource Name (ARN) of the KMS key that was used to decrypt the data.", + "Plaintext": "The decrypted (plaintext) data." + } + }, + "description": "The following example decrypts data that was encrypted with a KMS key.", + "id": "to-decrypt-data-1478281622886", + "title": "To decrypt data" + } + ], + "DeleteAlias": [ + { + "input": { + "AliasName": "alias/ExampleAlias" + }, + "comments": { + "input": { + "AliasName": "The alias to delete." + } + }, + "description": "The following example deletes the specified alias.", + "id": "to-delete-an-alias-1478285209338", + "title": "To delete an alias" + } + ], + "DeleteCustomKeyStore": [ + { + "input": { + "CustomKeyStoreId": "cks-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + "CustomKeyStoreId": "The ID of the custom key store to be deleted." + }, + "output": { + } + }, + "description": "This example deletes a custom key store from AWS KMS. This operation does not delete the AWS CloudHSM cluster that was associated with the CloudHSM cluster. This operation doesn't return any data. To verify that the operation was successful, use the DescribeCustomKeyStores operation. ", + "id": "to-delete-a-custom-key-store-from-aws-kms-1628630837145", + "title": "To delete a custom key store from AWS KMS" + } + ], + "DeleteImportedKeyMaterial": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key whose imported key material you are deleting. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + } + }, + "description": "The following example deletes the imported key material from the specified KMS key.", + "id": "to-delete-imported-key-material-1478561674507", + "title": "To delete imported key material" + } + ], + "DescribeCustomKeyStores": [ + { + "input": { + }, + "output": { + "CustomKeyStores": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + "CustomKeyStores": "Details about each custom key store in the account and Region." + } + }, + "description": "This example gets detailed information about all AWS KMS custom key stores in an AWS account and Region. To get all key stores, do not enter a custom key store name or ID.", + "id": "to-get-detailed-information-about-custom-key-stores-in-the-account-and-region-1628628556811", + "title": "To get detailed information about custom key stores in the account and Region" + }, + { + "input": { + "CustomKeyStoreName": "ExampleKeyStore" + }, + "output": { + "CustomKeyStores": [ + { + "CloudHsmClusterId": "cluster-1a23b4cdefg", + "ConnectionState": "CONNECTED", + "CreationDate": "1.499288695918E9", + "CustomKeyStoreId": "cks-1234567890abcdef0", + "CustomKeyStoreName": "ExampleKeyStore", + "TrustAnchorCertificate": "" + } + ] + }, + "comments": { + "input": { + "CustomKeyStoreName": "The friendly name of the custom key store." + }, + "output": { + "CustomKeyStores": "Detailed information about the specified custom key store." + } + }, + "description": "This example gets detailed information about a particular AWS KMS custom key store that is associate with an AWS CloudHSM cluster. To limit the output to a particular custom key store, provide the custom key store name or ID. ", + "id": "to-get-detailed-information-about-a-custom-key-store-associated-with-a-cloudhsm-cluster-1628628885843", + "title": "To get detailed information about a custom key store associated with a CloudHSM cluster." + } + ], + "DescribeKey": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "CreationDate": "2017-07-05T14:04:55-07:00", + "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", + "Description": "", + "Enabled": true, + "EncryptionAlgorithms": [ + "SYMMETRIC_DEFAULT" + ], + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyManager": "CUSTOMER", + "KeySpec": "SYMMETRIC_DEFAULT", + "KeyState": "Enabled", + "KeyUsage": "ENCRYPT_DECRYPT", + "MultiRegion": false, + "Origin": "AWS_KMS" + } + }, + "comments": { + "input": { + "KeyId": "An identifier for the KMS key. You can use the key ID, key ARN, alias name, alias ARN of the KMS key." + }, + "output": { + "KeyMetadata": "An object that contains information about the specified KMS key." + } + }, + "description": "The following example gets metadata for a symmetric encryption KMS key.", + "id": "get-key-details-1478565820907", + "title": "To get details about a KMS key" + }, + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "CreationDate": 1571767572.317, + "CustomerMasterKeySpec": "RSA_2048", + "Description": "", + "Enabled": false, + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyManager": "CUSTOMER", + "KeySpec": "RSA_2048", + "KeyState": "Disabled", + "KeyUsage": "SIGN_VERIFY", + "MultiRegion": false, + "Origin": "AWS_KMS", + "SigningAlgorithms": [ + "RSASSA_PKCS1_V1_5_SHA_256", + "RSASSA_PKCS1_V1_5_SHA_384", + "RSASSA_PKCS1_V1_5_SHA_512", + "RSASSA_PSS_SHA_256", + "RSASSA_PSS_SHA_384", + "RSASSA_PSS_SHA_512" + ] + } + }, + "comments": { + "input": { + "KeyId": "An identifier for the KMS key. You can use the key ID, key ARN, alias name, alias ARN of the KMS key." + }, + "output": { + "KeyMetadata": "An object that contains information about the specified KMS key." + } + }, + "description": "The following example gets metadata for an asymmetric RSA KMS key used for signing and verification.", + "id": "to-get-details-about-an-rsa-asymmetric-kms-key-1637971611761", + "title": "To get details about an RSA asymmetric KMS key" + }, + { + "input": { + "KeyId": "arn:aws:kms:ap-northeast-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab" + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:ap-northeast-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab", + "CreationDate": 1586329200.918, + "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", + "Description": "", + "Enabled": true, + "EncryptionAlgorithms": [ + "SYMMETRIC_DEFAULT" + ], + "KeyId": "mrk-1234abcd12ab34cd56ef1234567890ab", + "KeyManager": "CUSTOMER", + "KeyState": "Enabled", + "KeyUsage": "ENCRYPT_DECRYPT", + "MultiRegion": true, + "MultiRegionConfiguration": { + "MultiRegionKeyType": "PRIMARY", + "PrimaryKey": { + "Arn": "arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab", + "Region": "us-west-2" + }, + "ReplicaKeys": [ + { + "Arn": "arn:aws:kms:eu-west-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab", + "Region": "eu-west-1" + }, + { + "Arn": "arn:aws:kms:ap-northeast-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab", + "Region": "ap-northeast-1" + }, + { + "Arn": "arn:aws:kms:sa-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab", + "Region": "sa-east-1" + } + ] + }, + "Origin": "AWS_KMS" + } + }, + "comments": { + "input": { + "KeyId": "An identifier for the KMS key. You can use the key ID, key ARN, alias name, alias ARN of the KMS key." + }, + "output": { + "KeyMetadata": "An object that contains information about the specified KMS key." + } + }, + "description": "The following example gets metadata for a multi-Region replica key. This multi-Region key is a symmetric encryption key. DescribeKey returns information about the primary key and all of its replicas.", + "id": "to-get-details-about-a-multi-region-key-1637969624239", + "title": "To get details about a multi-Region key" + }, + { + "input": { + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "output": { + "KeyMetadata": { + "AWSAccountId": "123456789012", + "Arn": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "CreationDate": 1566160362.664, + "CustomerMasterKeySpec": "HMAC_256", + "Description": "Development test key", + "Enabled": true, + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyManager": "CUSTOMER", + "KeyState": "Enabled", + "KeyUsage": "GENERATE_VERIFY_MAC", + "MacAlgorithms": [ + "HMAC_SHA_256" + ], + "MultiRegion": false, + "Origin": "AWS_KMS" + } + }, + "comments": { + "input": { + "KeyId": "An identifier for the KMS key. You can use the key ID, key ARN, alias name, alias ARN of the KMS key." + }, + "output": { + "KeyMetadata": "An object that contains information about the specified KMS key." + } + }, + "description": "The following example gets the metadata of an HMAC KMS key. ", + "id": "to-get-details-about-an-hmac-kms-key-1637970472619", + "title": "To get details about an HMAC KMS key" + } + ], + "DisableKey": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key to disable. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + } + }, + "description": "The following example disables the specified KMS key.", + "id": "to-disable-a-cmk-1478566583659", + "title": "To disable a KMS key" + } + ], + "DisableKeyRotation": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key whose key material will no longer be rotated. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + } + }, + "description": "The following example disables automatic annual rotation of the key material for the specified KMS key.", + "id": "to-disable-automatic-rotation-of-key-material-1478624396092", + "title": "To disable automatic rotation of key material" + } + ], + "DisconnectCustomKeyStore": [ + { + "input": { + "CustomKeyStoreId": "cks-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + "CustomKeyStoreId": "The ID of the custom key store." + }, + "output": { + } + }, + "description": "This example disconnects an AWS KMS custom key store from its AWS CloudHSM cluster. This operation doesn't return any data. To verify that the custom key store is disconnected, use the DescribeCustomKeyStores operation.", + "id": "to-disconnect-a-custom-key-store-from-its-cloudhsm-cluster-1628627955156", + "title": "To disconnect a custom key store from its CloudHSM cluster" + } + ], + "EnableKey": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key to enable. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + } + }, + "description": "The following example enables the specified KMS key.", + "id": "to-enable-a-cmk-1478627501129", + "title": "To enable a KMS key" + } + ], + "EnableKeyRotation": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key whose key material will be rotated annually. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + } + }, + "description": "The following example enables automatic annual rotation of the key material for the specified KMS key.", + "id": "to-enable-automatic-rotation-of-key-material-1478629109677", + "title": "To enable automatic rotation of key material" + } + ], + "Encrypt": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "Plaintext": "" + }, + "output": { + "CiphertextBlob": "", + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key to use for encryption. You can use the key ID or Amazon Resource Name (ARN) of the KMS key, or the name or ARN of an alias that refers to the KMS key.", + "Plaintext": "The data to encrypt." + }, + "output": { + "CiphertextBlob": "The encrypted data (ciphertext).", + "KeyId": "The ARN of the KMS key that was used to encrypt the data." + } + }, + "description": "The following example encrypts data with the specified KMS key.", + "id": "to-encrypt-data-1478906026012", + "title": "To encrypt data" + } + ], + "GenerateDataKey": [ + { + "input": { + "KeyId": "alias/ExampleAlias", + "KeySpec": "AES_256" + }, + "output": { + "CiphertextBlob": "", + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "Plaintext": "" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key to use to encrypt the data key. You can use the key ID or Amazon Resource Name (ARN) of the KMS key, or the name or ARN of an alias that refers to the KMS key.", + "KeySpec": "Specifies the type of data key to return." + }, + "output": { + "CiphertextBlob": "The encrypted data key.", + "KeyId": "The ARN of the KMS key that was used to encrypt the data key.", + "Plaintext": "The unencrypted (plaintext) data key." + } + }, + "description": "The following example generates a 256-bit symmetric data encryption key (data key) in two formats. One is the unencrypted (plainext) data key, and the other is the data key encrypted with the specified KMS key.", + "id": "to-generate-a-data-key-1478912956062", + "title": "To generate a data key" + } + ], + "GenerateDataKeyPair": [ + { + "input": { + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyPairSpec": "RSA_3072" + }, + "output": { + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyPairSpec": "RSA_3072", + "PrivateKeyCiphertextBlob": "", + "PrivateKeyPlaintext": "", + "PublicKey": "" + }, + "comments": { + "input": { + "KeyId": "The key ID of the symmetric encryption KMS key that encrypts the private RSA key in the data key pair.", + "KeyPairSpec": "The requested key spec of the RSA data key pair." + }, + "output": { + "KeyId": "The key ARN of the symmetric encryption KMS key that was used to encrypt the private key.", + "KeyPairSpec": "The actual key spec of the RSA data key pair.", + "PrivateKeyCiphertextBlob": "The encrypted private key of the RSA data key pair.", + "PrivateKeyPlaintext": "The plaintext private key of the RSA data key pair.", + "PublicKey": "The public key (plaintext) of the RSA data key pair." + } + }, + "description": "This example generates an RSA data key pair for encryption and decryption. The operation returns a plaintext public key and private key, and a copy of the private key that is encrypted under a symmetric encryption KMS key that you specify.", + "id": "to-generate-an-rsa-key-pair-for-encryption-and-decryption-1628619376878", + "title": "To generate an RSA key pair for encryption and decryption" + } + ], + "GenerateDataKeyPairWithoutPlaintext": [ + { + "input": { + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyPairSpec": "ECC_NIST_P521" + }, + "output": { + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "KeyPairSpec": "ECC_NIST_P521", + "PrivateKeyCiphertextBlob": "", + "PublicKey": "" + }, + "comments": { + "input": { + "KeyId": "The symmetric encryption KMS key that encrypts the private key of the ECC data key pair.", + "KeyPairSpec": "The requested key spec of the ECC asymmetric data key pair." + }, + "output": { + "KeyId": "The key ARN of the symmetric encryption KMS key that encrypted the private key in the ECC asymmetric data key pair.", + "KeyPairSpec": "The actual key spec of the ECC asymmetric data key pair.", + "PrivateKeyCiphertextBlob": "The encrypted private key of the asymmetric ECC data key pair.", + "PublicKey": "The public key (plaintext)." + } + }, + "description": "This example returns an asymmetric elliptic curve (ECC) data key pair. The private key is encrypted under the symmetric encryption KMS key that you specify. This operation doesn't return a plaintext (unencrypted) private key.", + "id": "to-generate-an-asymmetric-data-key-pair-without-a-plaintext-key-1628620971564", + "title": "To generate an asymmetric data key pair without a plaintext key" + } + ], + "GenerateDataKeyWithoutPlaintext": [ + { + "input": { + "KeyId": "alias/ExampleAlias", + "KeySpec": "AES_256" + }, + "output": { + "CiphertextBlob": "", + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key to use to encrypt the data key. You can use the key ID or Amazon Resource Name (ARN) of the KMS key, or the name or ARN of an alias that refers to the KMS key.", + "KeySpec": "Specifies the type of data key to return." + }, + "output": { + "CiphertextBlob": "The encrypted data key.", + "KeyId": "The ARN of the KMS key that was used to encrypt the data key." + } + }, + "description": "The following example generates an encrypted copy of a 256-bit symmetric data encryption key (data key). The data key is encrypted with the specified KMS key.", + "id": "to-generate-an-encrypted-data-key-1478914121134", + "title": "To generate an encrypted data key" + } + ], + "GenerateMac": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "MacAlgorithm": "HMAC_SHA_384", + "Message": "Hello World" + }, + "output": { + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "Mac": "", + "MacAlgorithm": "HMAC_SHA_384" + }, + "comments": { + "input": { + "KeyId": "The HMAC KMS key input to the HMAC algorithm.", + "MacAlgorithm": "The HMAC algorithm requested for the operation.", + "Message": "The message input to the HMAC algorithm." + }, + "output": { + "KeyId": "The key ARN of the HMAC KMS key used in the operation.", + "Mac": "The HMAC tag that results from this operation.", + "MacAlgorithm": "The HMAC algorithm used in the operation." + } + }, + "description": "This example generates an HMAC for a message, an HMAC KMS key, and a MAC algorithm. The algorithm must be supported by the specified HMAC KMS key.", + "id": "to-generate-an-hmac-for-a-message-1631570135665", + "title": "To generate an HMAC for a message" + } + ], + "GenerateRandom": [ + { + "input": { + "NumberOfBytes": 32 + }, + "output": { + "Plaintext": "" + }, + "comments": { + "input": { + "NumberOfBytes": "The length of the random data, specified in number of bytes." + }, + "output": { + "Plaintext": "The random data." + } + }, + "description": "The following example generates 32 bytes of random data.", + "id": "to-generate-random-data-1479163645600", + "title": "To generate random data" + } + ], + "GetKeyPolicy": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "PolicyName": "default" + }, + "output": { + "Policy": "{\n \"Version\" : \"2012-10-17\",\n \"Id\" : \"key-default-1\",\n \"Statement\" : [ {\n \"Sid\" : \"Enable IAM User Permissions\",\n \"Effect\" : \"Allow\",\n \"Principal\" : {\n \"AWS\" : \"arn:aws:iam::111122223333:root\"\n },\n \"Action\" : \"kms:*\",\n \"Resource\" : \"*\"\n } ]\n}" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key whose key policy you want to retrieve. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key.", + "PolicyName": "The name of the key policy to retrieve." + }, + "output": { + "Policy": "The key policy document." + } + }, + "description": "The following example retrieves the key policy for the specified KMS key.", + "id": "to-retrieve-a-key-policy-1479170128325", + "title": "To retrieve a key policy" + } + ], + "GetKeyRotationStatus": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "output": { + "KeyRotationEnabled": true + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key whose key material rotation status you want to retrieve. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + }, + "output": { + "KeyRotationEnabled": "A boolean that indicates the key material rotation status. Returns true when automatic annual rotation of the key material is enabled, or false when it is not." + } + }, + "description": "The following example retrieves the status of automatic annual rotation of the key material for the specified KMS key.", + "id": "to-retrieve-the-rotation-status-for-a-cmk-1479172287408", + "title": "To retrieve the rotation status for a KMS key" + } + ], + "GetParametersForImport": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "WrappingAlgorithm": "RSAES_OAEP_SHA_1", + "WrappingKeySpec": "RSA_2048" + }, + "output": { + "ImportToken": "", + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "ParametersValidTo": "2016-12-01T14:52:17-08:00", + "PublicKey": "" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key for which to retrieve the public key and import token. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key.", + "WrappingAlgorithm": "The algorithm that you will use to encrypt the key material before importing it.", + "WrappingKeySpec": "The type of wrapping key (public key) to return in the response." + }, + "output": { + "ImportToken": "The import token to send with a subsequent ImportKeyMaterial request.", + "KeyId": "The ARN of the KMS key for which you are retrieving the public key and import token. This is the same KMS key specified in the request.", + "ParametersValidTo": "The time at which the import token and public key are no longer valid.", + "PublicKey": "The public key to use to encrypt the key material before importing it." + } + }, + "description": "The following example retrieves the public key and import token for the specified KMS key.", + "id": "to-retrieve-the-public-key-and-import-token-for-a-cmk-1480626483211", + "title": "To retrieve the public key and import token for a KMS key" + } + ], + "GetPublicKey": [ + { + "input": { + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" + }, + "output": { + "CustomerMasterKeySpec": "RSA_4096", + "EncryptionAlgorithms": [ + "RSAES_OAEP_SHA_1", + "RSAES_OAEP_SHA_256" + ], + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", + "KeyUsage": "ENCRYPT_DECRYPT", + "PublicKey": "" + }, + "comments": { + "input": { + "KeyId": "The key ARN of the asymmetric KMS key." + }, + "output": { + "CustomerMasterKeySpec": "The key spec of the asymmetric KMS key from which the public key was downloaded.", + "EncryptionAlgorithms": "The encryption algorithms supported by the asymmetric KMS key that was downloaded.", + "KeyId": "The key ARN of the asymmetric KMS key from which the public key was downloaded.", + "KeyUsage": "The key usage of the asymmetric KMS key from which the public key was downloaded.", + "PublicKey": "The public key (plaintext) of the asymmetric KMS key." + } + }, + "description": "This example gets the public key of an asymmetric RSA KMS key used for encryption and decryption. The operation returns the key spec, key usage, and encryption or signing algorithms to help you use the public key correctly outside of AWS KMS.", + "id": "to-download-the-public-key-of-an-asymmetric-kms-key-1628621691873", + "title": "To download the public key of an asymmetric KMS key" + } + ], + "ImportKeyMaterial": [ + { + "input": { + "EncryptedKeyMaterial": "", + "ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE", + "ImportToken": "", + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "EncryptedKeyMaterial": "The encrypted key material to import.", + "ExpirationModel": "A value that specifies whether the key material expires.", + "ImportToken": "The import token that you received in the response to a previous GetParametersForImport request.", + "KeyId": "The identifier of the KMS key to import the key material into. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + } + }, + "description": "The following example imports key material into the specified KMS key.", + "id": "to-import-key-material-into-a-cmk-1480630551969", + "title": "To import key material into a KMS key" + } + ], + "ListAliases": [ + { + "output": { + "Aliases": [ + { + "AliasArn": "arn:aws:kms:us-east-2:111122223333:alias/aws/acm", + "AliasName": "alias/aws/acm", + "TargetKeyId": "da03f6f7-d279-427a-9cae-de48d07e5b66" + }, + { + "AliasArn": "arn:aws:kms:us-east-2:111122223333:alias/aws/ebs", + "AliasName": "alias/aws/ebs", + "TargetKeyId": "25a217e7-7170-4b8c-8bf6-045ea5f70e5b" + }, + { + "AliasArn": "arn:aws:kms:us-east-2:111122223333:alias/aws/rds", + "AliasName": "alias/aws/rds", + "TargetKeyId": "7ec3104e-c3f2-4b5c-bf42-bfc4772c6685" + }, + { + "AliasArn": "arn:aws:kms:us-east-2:111122223333:alias/aws/redshift", + "AliasName": "alias/aws/redshift", + "TargetKeyId": "08f7a25a-69e2-4fb5-8f10-393db27326fa" + }, + { + "AliasArn": "arn:aws:kms:us-east-2:111122223333:alias/aws/s3", + "AliasName": "alias/aws/s3", + "TargetKeyId": "d2b0f1a3-580d-4f79-b836-bc983be8cfa5" + }, + { + "AliasArn": "arn:aws:kms:us-east-2:111122223333:alias/example1", + "AliasName": "alias/example1", + "TargetKeyId": "4da1e216-62d0-46c5-a7c0-5f3a3d2f8046" + }, + { + "AliasArn": "arn:aws:kms:us-east-2:111122223333:alias/example2", + "AliasName": "alias/example2", + "TargetKeyId": "f32fef59-2cc2-445b-8573-2d73328acbee" + }, + { + "AliasArn": "arn:aws:kms:us-east-2:111122223333:alias/example3", + "AliasName": "alias/example3", + "TargetKeyId": "1374ef38-d34e-4d5f-b2c9-4e0daee38855" + } + ], + "Truncated": false + }, + "comments": { + "output": { + "Aliases": "A list of aliases, including the key ID of the KMS key that each alias refers to.", + "Truncated": "A boolean that indicates whether there are more items in the list. Returns true when there are more items, or false when there are not." + } + }, + "description": "The following example lists aliases.", + "id": "to-list-aliases-1480729693349", + "title": "To list aliases" + } + ], + "ListGrants": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "output": { + "Grants": [ + { + "CreationDate": "2016-10-25T14:37:41-07:00", + "GrantId": "91ad875e49b04a9d1f3bdeb84d821f9db6ea95e1098813f6d47f0c65fbe2a172", + "GranteePrincipal": "acm.us-east-2.amazonaws.com", + "IssuingAccount": "arn:aws:iam::111122223333:root", + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "Operations": [ + "Encrypt", + "ReEncryptFrom", + "ReEncryptTo" + ], + "RetiringPrincipal": "acm.us-east-2.amazonaws.com" + }, + { + "CreationDate": "2016-10-25T14:37:41-07:00", + "GrantId": "a5d67d3e207a8fc1f4928749ee3e52eb0440493a8b9cf05bbfad91655b056200", + "GranteePrincipal": "acm.us-east-2.amazonaws.com", + "IssuingAccount": "arn:aws:iam::111122223333:root", + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "Operations": [ + "ReEncryptFrom", + "ReEncryptTo" + ], + "RetiringPrincipal": "acm.us-east-2.amazonaws.com" + }, + { + "CreationDate": "2016-10-25T14:37:41-07:00", + "GrantId": "c541aaf05d90cb78846a73b346fc43e65be28b7163129488c738e0c9e0628f4f", + "GranteePrincipal": "acm.us-east-2.amazonaws.com", + "IssuingAccount": "arn:aws:iam::111122223333:root", + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "Operations": [ + "Encrypt", + "ReEncryptFrom", + "ReEncryptTo" + ], + "RetiringPrincipal": "acm.us-east-2.amazonaws.com" + }, + { + "CreationDate": "2016-10-25T14:37:41-07:00", + "GrantId": "dd2052c67b4c76ee45caf1dc6a1e2d24e8dc744a51b36ae2f067dc540ce0105c", + "GranteePrincipal": "acm.us-east-2.amazonaws.com", + "IssuingAccount": "arn:aws:iam::111122223333:root", + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "Operations": [ + "Encrypt", + "ReEncryptFrom", + "ReEncryptTo" + ], + "RetiringPrincipal": "acm.us-east-2.amazonaws.com" + } + ], + "Truncated": true + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key whose grants you want to list. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + }, + "output": { + "Grants": "A list of grants.", + "Truncated": "A boolean that indicates whether there are more items in the list. Returns true when there are more items, or false when there are not." + } + }, + "description": "The following example lists grants for the specified KMS key.", + "id": "to-list-grants-for-a-cmk-1481067365389", + "title": "To list grants for a KMS key" + } + ], + "ListKeyPolicies": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "output": { + "PolicyNames": [ + "default" + ], + "Truncated": false + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key whose key policies you want to list. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + }, + "output": { + "PolicyNames": "A list of key policy names.", + "Truncated": "A boolean that indicates whether there are more items in the list. Returns true when there are more items, or false when there are not." + } + }, + "description": "The following example lists key policies for the specified KMS key.", + "id": "to-list-key-policies-for-a-cmk-1481069780998", + "title": "To list key policies for a KMS key" + } + ], + "ListKeys": [ + { + "output": { + "Keys": [ + { + "KeyArn": "arn:aws:kms:us-east-2:111122223333:key/0d990263-018e-4e65-a703-eff731de951e", + "KeyId": "0d990263-018e-4e65-a703-eff731de951e" + }, + { + "KeyArn": "arn:aws:kms:us-east-2:111122223333:key/144be297-0ae1-44ac-9c8f-93cd8c82f841", + "KeyId": "144be297-0ae1-44ac-9c8f-93cd8c82f841" + }, + { + "KeyArn": "arn:aws:kms:us-east-2:111122223333:key/21184251-b765-428e-b852-2c7353e72571", + "KeyId": "21184251-b765-428e-b852-2c7353e72571" + }, + { + "KeyArn": "arn:aws:kms:us-east-2:111122223333:key/214fe92f-5b03-4ae1-b350-db2a45dbe10c", + "KeyId": "214fe92f-5b03-4ae1-b350-db2a45dbe10c" + }, + { + "KeyArn": "arn:aws:kms:us-east-2:111122223333:key/339963f2-e523-49d3-af24-a0fe752aa458", + "KeyId": "339963f2-e523-49d3-af24-a0fe752aa458" + }, + { + "KeyArn": "arn:aws:kms:us-east-2:111122223333:key/b776a44b-df37-4438-9be4-a27494e4271a", + "KeyId": "b776a44b-df37-4438-9be4-a27494e4271a" + }, + { + "KeyArn": "arn:aws:kms:us-east-2:111122223333:key/deaf6c9e-cf2c-46a6-bf6d-0b6d487cffbb", + "KeyId": "deaf6c9e-cf2c-46a6-bf6d-0b6d487cffbb" + } + ], + "Truncated": false + }, + "comments": { + "output": { + "Keys": "A list of KMS keys, including the key ID and Amazon Resource Name (ARN) of each one.", + "Truncated": "A boolean that indicates whether there are more items in the list. Returns true when there are more items, or false when there are not." + } + }, + "description": "The following example lists KMS keys.", + "id": "to-list-cmks-1481071643069", + "title": "To list KMS keys" + } + ], + "ListResourceTags": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "output": { + "Tags": [ + { + "TagKey": "CostCenter", + "TagValue": "87654" + }, + { + "TagKey": "CreatedBy", + "TagValue": "ExampleUser" + }, + { + "TagKey": "Purpose", + "TagValue": "Test" + } + ], + "Truncated": false + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key whose tags you are listing. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + }, + "output": { + "Tags": "A list of tags.", + "Truncated": "A boolean that indicates whether there are more items in the list. Returns true when there are more items, or false when there are not." + } + }, + "description": "The following example lists tags for a KMS key.", + "id": "to-list-tags-for-a-cmk-1483996855796", + "title": "To list tags for a KMS key" + } + ], + "ListRetirableGrants": [ + { + "input": { + "RetiringPrincipal": "arn:aws:iam::111122223333:role/ExampleRole" + }, + "output": { + "Grants": [ + { + "CreationDate": "2016-12-07T11:09:35-08:00", + "GrantId": "0c237476b39f8bc44e45212e08498fbe3151305030726c0590dd8d3e9f3d6a60", + "GranteePrincipal": "arn:aws:iam::111122223333:role/ExampleRole", + "IssuingAccount": "arn:aws:iam::444455556666:root", + "KeyId": "arn:aws:kms:us-east-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "Operations": [ + "Decrypt", + "Encrypt" + ], + "RetiringPrincipal": "arn:aws:iam::111122223333:role/ExampleRole" + } + ], + "Truncated": false + }, + "comments": { + "input": { + "RetiringPrincipal": "The retiring principal whose grants you want to list. Use the Amazon Resource Name (ARN) of a principal such as an AWS account (root), IAM user, federated user, or assumed role user." + }, + "output": { + "Grants": "A list of grants that the specified principal can retire.", + "Truncated": "A boolean that indicates whether there are more items in the list. Returns true when there are more items, or false when there are not." + } + }, + "description": "The following example lists the grants that the specified principal (identity) can retire.", + "id": "to-list-grants-that-the-specified-principal-can-retire-1481140499620", + "title": "To list grants that the specified principal can retire" + } + ], + "PutKeyPolicy": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "Policy": "{\n \"Version\": \"2012-10-17\",\n \"Id\": \"custom-policy-2016-12-07\",\n \"Statement\": [\n {\n \"Sid\": \"Enable IAM User Permissions\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::111122223333:root\"\n },\n \"Action\": \"kms:*\",\n \"Resource\": \"*\"\n },\n {\n \"Sid\": \"Allow access for Key Administrators\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"AWS\": [\n \"arn:aws:iam::111122223333:user/ExampleAdminUser\",\n \"arn:aws:iam::111122223333:role/ExampleAdminRole\"\n ]\n },\n \"Action\": [\n \"kms:Create*\",\n \"kms:Describe*\",\n \"kms:Enable*\",\n \"kms:List*\",\n \"kms:Put*\",\n \"kms:Update*\",\n \"kms:Revoke*\",\n \"kms:Disable*\",\n \"kms:Get*\",\n \"kms:Delete*\",\n \"kms:ScheduleKeyDeletion\",\n \"kms:CancelKeyDeletion\"\n ],\n \"Resource\": \"*\"\n },\n {\n \"Sid\": \"Allow use of the key\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::111122223333:role/ExamplePowerUserRole\"\n },\n \"Action\": [\n \"kms:Encrypt\",\n \"kms:Decrypt\",\n \"kms:ReEncrypt*\",\n \"kms:GenerateDataKey*\",\n \"kms:DescribeKey\"\n ],\n \"Resource\": \"*\"\n },\n {\n \"Sid\": \"Allow attachment of persistent resources\",\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::111122223333:role/ExamplePowerUserRole\"\n },\n \"Action\": [\n \"kms:CreateGrant\",\n \"kms:ListGrants\",\n \"kms:RevokeGrant\"\n ],\n \"Resource\": \"*\",\n \"Condition\": {\n \"Bool\": {\n \"kms:GrantIsForAWSResource\": \"true\"\n }\n }\n }\n ]\n}\n", + "PolicyName": "default" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key to attach the key policy to. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key.", + "Policy": "The key policy document.", + "PolicyName": "The name of the key policy." + } + }, + "description": "The following example attaches a key policy to the specified KMS key.", + "id": "to-attach-a-key-policy-to-a-cmk-1481147345018", + "title": "To attach a key policy to a KMS key" + } + ], + "ReEncrypt": [ + { + "input": { + "CiphertextBlob": "", + "DestinationKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321" + }, + "output": { + "CiphertextBlob": "", + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", + "SourceKeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "CiphertextBlob": "The data to reencrypt.", + "DestinationKeyId": "The identifier of the KMS key to use to reencrypt the data. You can use any valid key identifier.", + "SourceKeyId": "The identifier of the KMS key to use to decrypt the data. You can use any valid key identifier." + }, + "output": { + "CiphertextBlob": "The reencrypted data.", + "KeyId": "The ARN of the KMS key that was used to reencrypt the data.", + "SourceKeyId": "The ARN of the KMS key that was originally used to encrypt the data." + } + }, + "description": "The following example reencrypts data with the specified KMS key.", + "id": "to-reencrypt-data-1481230358001", + "title": "To reencrypt data" + } + ], + "ReplicateKey": [ + { + "input": { + "KeyId": "arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab", + "ReplicaRegion": "us-west-2" + }, + "output": { + "ReplicaKeyMetadata": { + "AWSAccountId": "111122223333", + "Arn": "arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab", + "CreationDate": 1607472987.918, + "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", + "Description": "", + "Enabled": true, + "EncryptionAlgorithms": [ + "SYMMETRIC_DEFAULT" + ], + "KeyId": "mrk-1234abcd12ab34cd56ef1234567890ab", + "KeyManager": "CUSTOMER", + "KeyState": "Enabled", + "KeyUsage": "ENCRYPT_DECRYPT", + "MultiRegion": true, + "MultiRegionConfiguration": { + "MultiRegionKeyType": "REPLICA", + "PrimaryKey": { + "Arn": "arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab", + "Region": "us-east-1" + }, + "ReplicaKeys": [ + { + "Arn": "arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab", + "Region": "us-west-2" + } + ] + }, + "Origin": "AWS_KMS" + }, + "ReplicaPolicy": "{\n \"Version\" : \"2012-10-17\",\n \"Id\" : \"key-default-1\",...}", + "ReplicaTags": [ + + ] + }, + "comments": { + "input": { + "KeyId": "The key ID or key ARN of the multi-Region primary key", + "ReplicaRegion": "The Region of the new replica." + }, + "output": { + "ReplicaKeyMetadata": "An object that displays detailed information about the replica key.", + "ReplicaPolicy": "The key policy of the replica key. If you don't specify a key policy, the replica key gets the default key policy for a KMS key.", + "ReplicaTags": "The tags on the replica key, if any." + } + }, + "description": "This example creates a multi-Region replica key in us-west-2 of a multi-Region primary key in us-east-1. ", + "id": "to-replicate-a-multi-region-key-in-a-different-aws-region-1628622402887", + "title": "To replicate a multi-Region key in a different AWS Region" + } + ], + "RetireGrant": [ + { + "input": { + "GrantId": "0c237476b39f8bc44e45212e08498fbe3151305030726c0590dd8d3e9f3d6a60", + "KeyId": "arn:aws:kms:us-east-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "GrantId": "The identifier of the grant to retire.", + "KeyId": "The Amazon Resource Name (ARN) of the KMS key associated with the grant." + } + }, + "description": "The following example retires a grant.", + "id": "to-retire-a-grant-1481327028297", + "title": "To retire a grant" + } + ], + "RevokeGrant": [ + { + "input": { + "GrantId": "0c237476b39f8bc44e45212e08498fbe3151305030726c0590dd8d3e9f3d6a60", + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "GrantId": "The identifier of the grant to revoke.", + "KeyId": "The identifier of the KMS key associated with the grant. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + } + }, + "description": "The following example revokes a grant.", + "id": "to-revoke-a-grant-1481329549302", + "title": "To revoke a grant" + } + ], + "ScheduleKeyDeletion": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "PendingWindowInDays": 7 + }, + "output": { + "DeletionDate": "2016-12-17T16:00:00-08:00", + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key to schedule for deletion. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key.", + "PendingWindowInDays": "The waiting period, specified in number of days. After the waiting period ends, KMS deletes the KMS key." + }, + "output": { + "DeletionDate": "The date and time after which KMS deletes the KMS key.", + "KeyId": "The ARN of the KMS key that is scheduled for deletion." + } + }, + "description": "The following example schedules the specified KMS key for deletion.", + "id": "to-schedule-a-cmk-for-deletion-1481331111094", + "title": "To schedule a KMS key for deletion" + } + ], + "Sign": [ + { + "input": { + "KeyId": "alias/ECC_signing_key", + "Message": "", + "MessageType": "RAW", + "SigningAlgorithm": "ECDSA_SHA_384" + }, + "output": { + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "Signature": "", + "SigningAlgorithm": "ECDSA_SHA_384" + }, + "comments": { + "input": { + "KeyId": "The asymmetric KMS key to be used to generate the digital signature. This example uses an alias of the KMS key.", + "Message": "Message to be signed. Use Base-64 for the CLI.", + "MessageType": "Indicates whether the message is RAW or a DIGEST.", + "SigningAlgorithm": "The requested signing algorithm. This must be an algorithm that the KMS key supports." + }, + "output": { + "KeyId": "The key ARN of the asymmetric KMS key that was used to sign the message.", + "Signature": "The digital signature of the message.", + "SigningAlgorithm": "The actual signing algorithm that was used to generate the signature." + } + }, + "description": "This operation uses the private key in an asymmetric elliptic curve (ECC) KMS key to generate a digital signature for a given message.", + "id": "to-digitally-sign-a-message-with-an-asymmetric-kms-key-1628631433832", + "title": "To digitally sign a message with an asymmetric KMS key." + } + ], + "TagResource": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "Tags": [ + { + "TagKey": "Purpose", + "TagValue": "Test" + } + ] + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key you are tagging. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key.", + "Tags": "A list of tags." + } + }, + "description": "The following example tags a KMS key.", + "id": "to-tag-a-cmk-1483997246518", + "title": "To tag a KMS key" + } + ], + "UntagResource": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "TagKeys": [ + "Purpose", + "CostCenter" + ] + }, + "comments": { + "input": { + "KeyId": "The identifier of the KMS key whose tags you are removing.", + "TagKeys": "A list of tag keys. Provide only the tag keys, not the tag values." + } + }, + "description": "The following example removes tags from a KMS key.", + "id": "to-remove-tags-from-a-cmk-1483997590962", + "title": "To remove tags from a KMS key" + } + ], + "UpdateAlias": [ + { + "input": { + "AliasName": "alias/ExampleAlias", + "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "AliasName": "The alias to update.", + "TargetKeyId": "The identifier of the KMS key that the alias will refer to after this operation succeeds. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + } + }, + "description": "The following example updates the specified alias to refer to the specified KMS key.", + "id": "to-update-an-alias-1481572726920", + "title": "To update an alias" + } + ], + "UpdateCustomKeyStore": [ + { + "input": { + "CustomKeyStoreId": "cks-1234567890abcdef0", + "KeyStorePassword": "ExamplePassword" + }, + "output": { + }, + "comments": { + "input": { + "CustomKeyStoreId": "The ID of the custom key store that you are updating.", + "KeyStorePassword": "The password for the kmsuser crypto user in the CloudHSM cluster." + }, + "output": { + } + }, + "description": "This example tells KMS the password for the kmsuser crypto user in the AWS CloudHSM cluster that is associated with the AWS KMS custom key store. (It does not change the password in the CloudHSM cluster.) This operation does not return any data.", + "id": "to-edit-the-properties-of-a-custom-key-store-1628629851834", + "title": "To edit the password of a custom key store" + }, + { + "input": { + "CustomKeyStoreId": "cks-1234567890abcdef0", + "NewCustomKeyStoreName": "DevelopmentKeys" + }, + "output": { + }, + "comments": { + "input": { + "CustomKeyStoreId": "The ID of the custom key store that you are updating.", + "NewCustomKeyStoreName": "A new friendly name for the custom key store." + }, + "output": { + } + }, + "description": "This example changes the friendly name of the AWS KMS custom key store to the name that you specify. This operation does not return any data. To verify that the operation worked, use the DescribeCustomKeyStores operation.", + "id": "to-edit-the-friendly-name-of-a-custom-key-store-1630451340904", + "title": "To edit the friendly name of a custom key store" + }, + { + "input": { + "CloudHsmClusterId": "cluster-1a23b4cdefg", + "CustomKeyStoreId": "cks-1234567890abcdef0" + }, + "output": { + }, + "comments": { + "input": { + "CloudHsmClusterId": "The ID of the AWS CloudHSM cluster that you want to associate with the custom key store. This cluster must be related to the original CloudHSM cluster for this key store.", + "CustomKeyStoreId": "The ID of the custom key store that you are updating." + }, + "output": { + } + }, + "description": "This example changes the cluster that is associated with a custom key store to a related cluster, such as a different backup of the same cluster. This operation does not return any data. To verify that the operation worked, use the DescribeCustomKeyStores operation.", + "id": "to-associate-the-custom-key-store-with-a-different-but-related-aws-cloudhsm-cluster-1630451842438", + "title": "To associate the custom key store with a different, but related, AWS CloudHSM cluster." + } + ], + "UpdateKeyDescription": [ + { + "input": { + "Description": "Example description that indicates the intended use of this KMS key.", + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" + }, + "comments": { + "input": { + "Description": "The updated description.", + "KeyId": "The identifier of the KMS key whose description you are updating. You can use the key ID or the Amazon Resource Name (ARN) of the KMS key." + } + }, + "description": "The following example updates the description of the specified KMS key.", + "id": "to-update-the-description-of-a-cmk-1481574808619", + "title": "To update the description of a KMS key" + } + ], + "Verify": [ + { + "input": { + "KeyId": "alias/ECC_signing_key", + "Message": "", + "MessageType": "RAW", + "Signature": "", + "SigningAlgorithm": "ECDSA_SHA_384" + }, + "output": { + "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "SignatureValid": true, + "SigningAlgorithm": "ECDSA_SHA_384" + }, + "comments": { + "input": { + "KeyId": "The asymmetric KMS key to be used to verify the digital signature. This example uses an alias to identify the KMS key.", + "Message": "The message that was signed.", + "MessageType": "Indicates whether the message is RAW or a DIGEST.", + "Signature": "The signature to be verified.", + "SigningAlgorithm": "The signing algorithm to be used to verify the signature." + }, + "output": { + "KeyId": "The key ARN of the asymmetric KMS key that was used to verify the digital signature.", + "SignatureValid": "A value of 'true' Indicates that the signature was verified. If verification fails, the call to Verify fails.", + "SigningAlgorithm": "The signing algorithm that was used to verify the signature." + } + }, + "description": "This operation uses the public key in an elliptic curve (ECC) asymmetric key to verify a digital signature within AWS KMS. ", + "id": "to-use-an-asymmetric-kms-key-to-verify-a-digital-signature-1628633365663", + "title": "To use an asymmetric KMS key to verify a digital signature" + } + ], + "VerifyMac": [ + { + "input": { + "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", + "Mac": "", + "MacAlgorithm": "HMAC_SHA_384", + "Message": "Hello World" + }, + "output": { + "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", + "MacAlgorithm": "HMAC_SHA_384", + "MacValid": true + }, + "comments": { + "input": { + "KeyId": "The HMAC KMS key input to the HMAC algorithm.", + "Mac": "The HMAC to be verified.", + "MacAlgorithm": "The HMAC algorithm requested for the operation.", + "Message": "The message input to the HMAC algorithm." + }, + "output": { + "KeyId": "The key ARN of the HMAC key used in the operation.", + "MacAlgorithm": "The HMAC algorithm used in the operation.", + "MacValid": "A value of 'true' indicates that verification succeeded. If verification fails, the call to VerifyMac fails." + } + }, + "description": "This example verifies an HMAC for a particular message, HMAC KMS keys, and MAC algorithm. A value of 'true' in the MacValid value in the response indicates that the HMAC is valid.", + "id": "to-verify-an-hmac-1631570863401", + "title": "To verify an HMAC" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/paginators-1.json new file mode 100644 index 00000000..dc6690f5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/paginators-1.json @@ -0,0 +1,53 @@ +{ + "pagination": { + "ListAliases": { + "limit_key": "Limit", + "input_token": "Marker", + "output_token": "NextMarker", + "more_results": "Truncated", + "result_key": "Aliases" + }, + "ListGrants": { + "limit_key": "Limit", + "input_token": "Marker", + "output_token": "NextMarker", + "more_results": "Truncated", + "result_key": "Grants" + }, + "ListKeyPolicies": { + "limit_key": "Limit", + "input_token": "Marker", + "output_token": "NextMarker", + "more_results": "Truncated", + "result_key": "PolicyNames" + }, + "ListKeys": { + "limit_key": "Limit", + "input_token": "Marker", + "output_token": "NextMarker", + "more_results": "Truncated", + "result_key": "Keys" + }, + "DescribeCustomKeyStores": { + "input_token": "Marker", + "limit_key": "Limit", + "more_results": "Truncated", + "output_token": "NextMarker", + "result_key": "CustomKeyStores" + }, + "ListResourceTags": { + "input_token": "Marker", + "limit_key": "Limit", + "more_results": "Truncated", + "output_token": "NextMarker", + "result_key": "Tags" + }, + "ListRetirableGrants": { + "input_token": "Marker", + "limit_key": "Limit", + "more_results": "Truncated", + "output_token": "NextMarker", + "result_key": "Grants" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/service-2.json.gz new file mode 100644 index 00000000..0dde1724 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/kms/2014-11-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f6dd6436 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/paginators-1.json new file mode 100644 index 00000000..006a98c8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "GetWorkUnits": { + "input_token": "NextToken", + "limit_key": "PageSize", + "output_token": "NextToken", + "result_key": "WorkUnitRanges" + }, + "ListDataCellsFilter": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DataCellsFilters" + }, + "ListLFTags": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LFTags" + }, + "SearchDatabasesByLFTags": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DatabaseList" + }, + "SearchTablesByLFTags": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TableList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/paginators-1.sdk-extras.json new file mode 100644 index 00000000..aea980d6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/paginators-1.sdk-extras.json @@ -0,0 +1,12 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "GetWorkUnits": { + "non_aggregate_keys": [ + "QueryId" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/service-2.json.gz new file mode 100644 index 00000000..e8156872 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lakeformation/2017-03-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2014-11-11/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2014-11-11/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..2b282585 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2014-11-11/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2014-11-11/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2014-11-11/service-2.json.gz new file mode 100644 index 00000000..a142fa8a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2014-11-11/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..9a90ea66 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/examples-1.json new file mode 100644 index 00000000..c33c1bbe --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/examples-1.json @@ -0,0 +1,1513 @@ +{ + "version": "1.0", + "examples": { + "AddLayerVersionPermission": [ + { + "input": { + "Action": "lambda:GetLayerVersion", + "LayerName": "my-layer", + "Principal": "223456789012", + "StatementId": "xaccount", + "VersionNumber": 1 + }, + "output": { + "RevisionId": "35d87451-f796-4a3f-a618-95a3671b0a0c", + "Statement": "{\"Sid\":\"xaccount\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::223456789012:root\"},\"Action\":\"lambda:GetLayerVersion\",\"Resource\":\"arn:aws:lambda:us-east-2:123456789012:layer:my-layer:1\"}" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example grants permission for the account 223456789012 to use version 1 of a layer named my-layer.", + "id": "to-add-permissions-to-a-layer-version-1586479797163", + "title": "To add permissions to a layer version" + } + ], + "AddPermission": [ + { + "input": { + "Action": "lambda:InvokeFunction", + "FunctionName": "my-function", + "Principal": "s3.amazonaws.com", + "SourceAccount": "123456789012", + "SourceArn": "arn:aws:s3:::my-bucket-1xpuxmplzrlbh/*", + "StatementId": "s3" + }, + "output": { + "Statement": "{\"Sid\":\"s3\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"s3.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-2:123456789012:function:my-function\",\"Condition\":{\"StringEquals\":{\"AWS:SourceAccount\":\"123456789012\"},\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:s3:::my-bucket-1xpuxmplzrlbh\"}}}" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example adds permission for Amazon S3 to invoke a Lambda function named my-function for notifications from a bucket named my-bucket-1xpuxmplzrlbh in account 123456789012.", + "id": "add-permission-1474651469455", + "title": "To grant Amazon S3 permission to invoke a function" + }, + { + "input": { + "Action": "lambda:InvokeFunction", + "FunctionName": "my-function", + "Principal": "223456789012", + "StatementId": "xaccount" + }, + "output": { + "Statement": "{\"Sid\":\"xaccount\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::223456789012:root\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-2:123456789012:function:my-function\"}" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example adds permission for account 223456789012 invoke a Lambda function named my-function.", + "id": "add-permission-1474651469456", + "title": "To grant another account permission to invoke a function" + } + ], + "CreateAlias": [ + { + "input": { + "Description": "alias for live version of function", + "FunctionName": "my-function", + "FunctionVersion": "1", + "Name": "LIVE" + }, + "output": { + "AliasArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:LIVE", + "Description": "alias for live version of function", + "FunctionVersion": "1", + "Name": "LIVE", + "RevisionId": "873282ed-xmpl-4dc8-a069-d0c647e470c6" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates an alias named LIVE that points to version 1 of the my-function Lambda function.", + "id": "to-create-an-alias-for-a-lambda-function-1586480324259", + "title": "To create an alias for a Lambda function" + } + ], + "CreateEventSourceMapping": [ + { + "input": { + "BatchSize": 5, + "EventSourceArn": "arn:aws:sqs:us-west-2:123456789012:my-queue", + "FunctionName": "my-function" + }, + "output": { + "BatchSize": 5, + "EventSourceArn": "arn:aws:sqs:us-west-2:123456789012:my-queue", + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "LastModified": 1569284520.333, + "State": "Creating", + "StateTransitionReason": "USER_INITIATED", + "UUID": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a mapping between an SQS queue and the my-function Lambda function.", + "id": "to-create-a-mapping-between-an-event-source-and-an-aws-lambda-function-1586480555467", + "title": "To create a mapping between an event source and an AWS Lambda function" + } + ], + "CreateFunction": [ + { + "input": { + "Code": { + "S3Bucket": "my-bucket-1xpuxmplzrlbh", + "S3Key": "function.zip" + }, + "Description": "Process image objects from Amazon S3.", + "Environment": { + "Variables": { + "BUCKET": "my-bucket-1xpuxmplzrlbh", + "PREFIX": "inbound" + } + }, + "FunctionName": "my-function", + "Handler": "index.handler", + "KMSKeyArn": "arn:aws:kms:us-west-2:123456789012:key/b0844d6c-xmpl-4463-97a4-d49f50839966", + "MemorySize": 256, + "Publish": true, + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "nodejs12.x", + "Tags": { + "DEPARTMENT": "Assets" + }, + "Timeout": 15, + "TracingConfig": { + "Mode": "Active" + } + }, + "output": { + "CodeSha256": "YFgDgEKG3ugvF1+pX64gV6tu9qNuIYNUdgJm8nCxsm4=", + "CodeSize": 5797206, + "Description": "Process image objects from Amazon S3.", + "Environment": { + "Variables": { + "BUCKET": "my-bucket-1xpuxmplzrlbh", + "PREFIX": "inbound" + } + }, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "FunctionName": "my-function", + "Handler": "index.handler", + "KMSKeyArn": "arn:aws:kms:us-west-2:123456789012:key/b0844d6c-xmpl-4463-97a4-d49f50839966", + "LastModified": "2020-04-10T19:06:32.563+0000", + "LastUpdateStatus": "Successful", + "MemorySize": 256, + "RevisionId": "b75dcd81-xmpl-48a8-a75a-93ba8b5b9727", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "nodejs12.x", + "State": "Active", + "Timeout": 15, + "TracingConfig": { + "Mode": "Active" + }, + "Version": "1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a function with a deployment package in Amazon S3 and enables X-Ray tracing and environment variable encryption.", + "id": "to-create-a-function-1586492061186", + "title": "To create a function" + } + ], + "DeleteAlias": [ + { + "input": { + "FunctionName": "my-function", + "Name": "BLUE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an alias named BLUE from a function named my-function", + "id": "to-delete-a-lambda-function-alias-1481660370804", + "title": "To delete a Lambda function alias" + } + ], + "DeleteEventSourceMapping": [ + { + "input": { + "UUID": "14e0db71-xmpl-4eb5-b481-8945cf9d10c2" + }, + "output": { + "BatchSize": 5, + "EventSourceArn": "arn:aws:sqs:us-west-2:123456789012:my-queue", + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", + "LastModified": "2016-11-21T19:49:20.006+0000", + "State": "Enabled", + "StateTransitionReason": "USER_INITIATED", + "UUID": "14e0db71-xmpl-4eb5-b481-8945cf9d10c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an event source mapping. To get a mapping's UUID, use ListEventSourceMappings.", + "id": "to-delete-a-lambda-function-event-source-mapping-1481658973862", + "title": "To delete a Lambda function event source mapping" + } + ], + "DeleteFunction": [ + { + "input": { + "FunctionName": "my-function", + "Qualifier": "1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes version 1 of a Lambda function named my-function.", + "id": "to-delete-a-lambda-function-1481648553696", + "title": "To delete a version of a Lambda function" + } + ], + "DeleteFunctionConcurrency": [ + { + "input": { + "FunctionName": "my-function" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes the reserved concurrent execution limit from a function named my-function.", + "id": "to-remove-the-reserved-concurrent-execution-limit-from-a-function-1586480714680", + "title": "To remove the reserved concurrent execution limit from a function" + } + ], + "DeleteFunctionEventInvokeConfig": [ + { + "input": { + "FunctionName": "my-function", + "Qualifier": "GREEN" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes the asynchronous invocation configuration for the GREEN alias of a function named my-function.", + "id": "to-delete-an-asynchronous-invocation-configuration-1586481102187", + "title": "To delete an asynchronous invocation configuration" + } + ], + "DeleteLayerVersion": [ + { + "input": { + "LayerName": "my-layer", + "VersionNumber": 2 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes version 2 of a layer named my-layer.", + "id": "to-delete-a-version-of-a-lambda-layer-1586481157547", + "title": "To delete a version of a Lambda layer" + } + ], + "DeleteProvisionedConcurrencyConfig": [ + { + "input": { + "FunctionName": "my-function", + "Qualifier": "GREEN" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes the provisioned concurrency configuration for the GREEN alias of a function named my-function.", + "id": "to-delete-a-provisioned-concurrency-configuration-1586481032551", + "title": "To delete a provisioned concurrency configuration" + } + ], + "GetAccountSettings": [ + { + "input": { + }, + "output": { + "AccountLimit": { + "CodeSizeUnzipped": 262144000, + "CodeSizeZipped": 52428800, + "ConcurrentExecutions": 1000, + "TotalCodeSize": 80530636800, + "UnreservedConcurrentExecutions": 1000 + }, + "AccountUsage": { + "FunctionCount": 4, + "TotalCodeSize": 9426 + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation takes no parameters and returns details about storage and concurrency quotas in the current Region.", + "id": "to-get-account-settings-1481657495274", + "title": "To get account settings" + } + ], + "GetAlias": [ + { + "input": { + "FunctionName": "my-function", + "Name": "BLUE" + }, + "output": { + "AliasArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function:BLUE", + "Description": "Production environment BLUE.", + "FunctionVersion": "3", + "Name": "BLUE", + "RevisionId": "594f41fb-xmpl-4c20-95c7-6ca5f2a92c93" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns details about an alias named BLUE for a function named my-function", + "id": "to-retrieve-a-lambda-function-alias-1481648742254", + "title": "To get a Lambda function alias" + } + ], + "GetEventSourceMapping": [ + { + "input": { + "UUID": "14e0db71-xmpl-4eb5-b481-8945cf9d10c2" + }, + "output": { + "BatchSize": 500, + "BisectBatchOnFunctionError": false, + "DestinationConfig": { + }, + "EventSourceArn": "arn:aws:sqs:us-east-2:123456789012:mySQSqueue", + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:myFunction", + "LastModified": "2016-11-21T19:49:20.006+0000", + "LastProcessingResult": "No records processed", + "MaximumRecordAgeInSeconds": 604800, + "MaximumRetryAttempts": 10000, + "State": "Creating", + "StateTransitionReason": "User action", + "UUID": "14e0db71-xmpl-4eb5-b481-8945cf9d10c2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns details about an event source mapping. To get a mapping's UUID, use ListEventSourceMappings.", + "id": "to-get-a-lambda-functions-event-source-mapping-1481661622799", + "title": "To get a Lambda function's event source mapping" + } + ], + "GetFunction": [ + { + "input": { + "FunctionName": "my-function", + "Qualifier": "1" + }, + "output": { + "Code": { + "Location": "https://awslambda-us-west-2-tasks.s3.us-west-2.amazonaws.com/snapshots/123456789012/my-function-e7d9d1ed-xmpl-4f79-904a-4b87f2681f30?versionId=sH3TQwBOaUy...", + "RepositoryType": "S3" + }, + "Configuration": { + "CodeSha256": "YFgDgEKG3ugvF1+pX64gV6tu9qNuIYNUdgJm8nCxsm4=", + "CodeSize": 5797206, + "Description": "Process image objects from Amazon S3.", + "Environment": { + "Variables": { + "BUCKET": "my-bucket-1xpuxmplzrlbh", + "PREFIX": "inbound" + } + }, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "FunctionName": "my-function", + "Handler": "index.handler", + "KMSKeyArn": "arn:aws:kms:us-west-2:123456789012:key/b0844d6c-xmpl-4463-97a4-d49f50839966", + "LastModified": "2020-04-10T19:06:32.563+0000", + "LastUpdateStatus": "Successful", + "MemorySize": 256, + "RevisionId": "b75dcd81-xmpl-48a8-a75a-93ba8b5b9727", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "nodejs12.x", + "State": "Active", + "Timeout": 15, + "TracingConfig": { + "Mode": "Active" + }, + "Version": "$LATEST" + }, + "Tags": { + "DEPARTMENT": "Assets" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns code and configuration details for version 1 of a function named my-function.", + "id": "to-get-a-lambda-function-1481661622799", + "title": "To get a Lambda function" + } + ], + "GetFunctionConcurrency": [ + { + "input": { + "FunctionName": "my-function" + }, + "output": { + "ReservedConcurrentExecutions": 250 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the reserved concurrency setting for a function named my-function.", + "id": "to-get-the-reserved-concurrency-setting-for-a-function-1586481279992", + "title": "To get the reserved concurrency setting for a function" + } + ], + "GetFunctionConfiguration": [ + { + "input": { + "FunctionName": "my-function", + "Qualifier": "1" + }, + "output": { + "CodeSha256": "YFgDgEKG3ugvF1+pX64gV6tu9qNuIYNUdgJm8nCxsm4=", + "CodeSize": 5797206, + "Description": "Process image objects from Amazon S3.", + "Environment": { + "Variables": { + "BUCKET": "my-bucket-1xpuxmplzrlbh", + "PREFIX": "inbound" + } + }, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "FunctionName": "my-function", + "Handler": "index.handler", + "KMSKeyArn": "arn:aws:kms:us-west-2:123456789012:key/b0844d6c-xmpl-4463-97a4-d49f50839966", + "LastModified": "2020-04-10T19:06:32.563+0000", + "LastUpdateStatus": "Successful", + "MemorySize": 256, + "RevisionId": "b75dcd81-xmpl-48a8-a75a-93ba8b5b9727", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "nodejs12.x", + "State": "Active", + "Timeout": 15, + "TracingConfig": { + "Mode": "Active" + }, + "Version": "$LATEST" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns and configuration details for version 1 of a function named my-function.", + "id": "to-get-a-lambda-functions-event-source-mapping-1481661622799", + "title": "To get a Lambda function's event source mapping" + } + ], + "GetFunctionEventInvokeConfig": [ + { + "input": { + "FunctionName": "my-function", + "Qualifier": "BLUE" + }, + "output": { + "DestinationConfig": { + "OnFailure": { + "Destination": "arn:aws:sqs:us-east-2:123456789012:failed-invocations" + }, + "OnSuccess": { + } + }, + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:BLUE", + "LastModified": "2016-11-21T19:49:20.006+0000", + "MaximumEventAgeInSeconds": 3600, + "MaximumRetryAttempts": 0 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the asynchronous invocation configuration for the BLUE alias of a function named my-function.", + "id": "to-get-an-asynchronous-invocation-configuration-1586481338463", + "title": "To get an asynchronous invocation configuration" + } + ], + "GetLayerVersion": [ + { + "input": { + "LayerName": "my-layer", + "VersionNumber": 1 + }, + "output": { + "CompatibleRuntimes": [ + "python3.6", + "python3.7" + ], + "Content": { + "CodeSha256": "tv9jJO+rPbXUUXuRKi7CwHzKtLDkDRJLB3cC3Z/ouXo=", + "CodeSize": 169, + "Location": "https://awslambda-us-east-2-layers.s3.us-east-2.amazonaws.com/snapshots/123456789012/my-layer-4aaa2fbb-ff77-4b0a-ad92-5b78a716a96a?versionId=27iWyA73cCAYqyH..." + }, + "CreatedDate": "2018-11-14T23:03:52.894+0000", + "Description": "My Python layer", + "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer", + "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:1", + "LicenseInfo": "MIT", + "Version": 1 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns information for version 1 of a layer named my-layer.", + "id": "to-get-information-about-a-lambda-layer-version-1586481457839", + "title": "To get information about a Lambda layer version" + } + ], + "GetLayerVersionByArn": [ + { + "input": { + "Arn": "arn:aws:lambda:ca-central-1:123456789012:layer:blank-python-lib:3" + }, + "output": { + "CompatibleRuntimes": [ + "python3.8" + ], + "Content": { + "CodeSha256": "6x+xmpl/M3BnQUk7gS9sGmfeFsR/npojXoA3fZUv4eU=", + "CodeSize": 9529009, + "Location": "https://awslambda-us-east-2-layers.s3.us-east-2.amazonaws.com/snapshots/123456789012/blank-python-lib-e5212378-xmpl-44ee-8398-9d8ec5113949?versionId=WbZnvf..." + }, + "CreatedDate": "2020-03-31T00:35:18.949+0000", + "Description": "Dependencies for the blank-python sample app.", + "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:blank-python-lib", + "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:blank-python-lib:3", + "Version": 3 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns information about the layer version with the specified Amazon Resource Name (ARN).", + "id": "to-get-information-about-a-lambda-layer-version-1586481457839", + "title": "To get information about a Lambda layer version" + } + ], + "GetPolicy": [ + { + "input": { + "FunctionName": "my-function", + "Qualifier": "1" + }, + "output": { + "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"default\",\"Statement\":[{\"Sid\":\"xaccount\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::123456789012:root\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-2:123456789012:function:my-function:1\"}]}", + "RevisionId": "4843f2f6-7c59-4fda-b484-afd0bc0e22b8" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the resource-based policy for version 1 of a Lambda function named my-function.", + "id": "to-retrieve-a-lambda-function-policy-1481649319053", + "title": "To retrieve a Lambda function policy" + } + ], + "GetProvisionedConcurrencyConfig": [ + { + "input": { + "FunctionName": "my-function", + "Qualifier": "BLUE" + }, + "output": { + "AllocatedProvisionedConcurrentExecutions": 100, + "AvailableProvisionedConcurrentExecutions": 100, + "LastModified": "2019-12-31T20:28:49+0000", + "RequestedProvisionedConcurrentExecutions": 100, + "Status": "READY" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns details for the provisioned concurrency configuration for the BLUE alias of the specified function.", + "id": "to-get-a-provisioned-concurrency-configuration-1586490192690", + "title": "To get a provisioned concurrency configuration" + }, + { + "input": { + "FunctionName": "my-function", + "Qualifier": "BLUE" + }, + "output": { + "AllocatedProvisionedConcurrentExecutions": 100, + "AvailableProvisionedConcurrentExecutions": 100, + "LastModified": "2019-12-31T20:28:49+0000", + "RequestedProvisionedConcurrentExecutions": 100, + "Status": "READY" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example displays details for the provisioned concurrency configuration for the BLUE alias of the specified function.", + "id": "to-view-a-provisioned-concurrency-configuration-1586490192690", + "title": "To view a provisioned concurrency configuration" + } + ], + "Invoke": [ + { + "input": { + "FunctionName": "my-function", + "Payload": "{}", + "Qualifier": "1" + }, + "output": { + "Payload": "200 SUCCESS", + "StatusCode": 200 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example invokes version 1 of a function named my-function with an empty event payload.", + "id": "to-invoke-a-lambda-function-1481659683915", + "title": "To invoke a Lambda function" + }, + { + "input": { + "FunctionName": "my-function", + "InvocationType": "Event", + "Payload": "{}", + "Qualifier": "1" + }, + "output": { + "Payload": "", + "StatusCode": 202 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example invokes version 1 of a function named my-function asynchronously.", + "id": "to-invoke-a-lambda-function-async-1481659683915", + "title": "To invoke a Lambda function asynchronously" + } + ], + "InvokeAsync": [ + { + "input": { + "FunctionName": "my-function", + "InvokeArgs": "{}" + }, + "output": { + "Status": 202 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example invokes a Lambda function asynchronously", + "id": "to-invoke-a-lambda-function-asynchronously-1481649694923", + "title": "To invoke a Lambda function asynchronously" + } + ], + "ListAliases": [ + { + "input": { + "FunctionName": "my-function" + }, + "output": { + "Aliases": [ + { + "AliasArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function:BETA", + "Description": "Production environment BLUE.", + "FunctionVersion": "2", + "Name": "BLUE", + "RevisionId": "a410117f-xmpl-494e-8035-7e204bb7933b", + "RoutingConfig": { + "AdditionalVersionWeights": { + "1": 0.7 + } + } + }, + { + "AliasArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function:LIVE", + "Description": "Production environment GREEN.", + "FunctionVersion": "1", + "Name": "GREEN", + "RevisionId": "21d40116-xmpl-40ba-9360-3ea284da1bb5" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns a list of aliases for a function named my-function.", + "id": "to-list-a-functions-aliases-1481650199732", + "title": "To list a function's aliases" + } + ], + "ListEventSourceMappings": [ + { + "input": { + "FunctionName": "my-function" + }, + "output": { + "EventSourceMappings": [ + { + "BatchSize": 5, + "EventSourceArn": "arn:aws:sqs:us-west-2:123456789012:mySQSqueue", + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "LastModified": 1569284520.333, + "State": "Enabled", + "StateTransitionReason": "USER_INITIATED", + "UUID": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns a list of the event source mappings for a function named my-function.", + "id": "to-list-the-event-source-mappings-for-a-function-1586490285906", + "title": "To list the event source mappings for a function" + } + ], + "ListFunctionEventInvokeConfigs": [ + { + "input": { + "FunctionName": "my-function" + }, + "output": { + "FunctionEventInvokeConfigs": [ + { + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:GREEN", + "LastModified": 1577824406.719, + "MaximumEventAgeInSeconds": 1800, + "MaximumRetryAttempts": 2 + }, + { + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:BLUE", + "LastModified": 1577824396.653, + "MaximumEventAgeInSeconds": 3600, + "MaximumRetryAttempts": 0 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns a list of asynchronous invocation configurations for a function named my-function.", + "id": "to-view-a-list-of-asynchronous-invocation-configurations-1586490355611", + "title": "To view a list of asynchronous invocation configurations" + } + ], + "ListFunctions": [ + { + "input": { + }, + "output": { + "Functions": [ + { + "CodeSha256": "dBG9m8SGdmlEjw/JYXlhhvCrAv5TxvXsbL/RMr0fT/I=", + "CodeSize": 294, + "Description": "", + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:helloworld", + "FunctionName": "helloworld", + "Handler": "helloworld.handler", + "LastModified": "2019-09-23T18:32:33.857+0000", + "MemorySize": 128, + "RevisionId": "1718e831-badf-4253-9518-d0644210af7b", + "Role": "arn:aws:iam::123456789012:role/service-role/MyTestFunction-role-zgur6bf4", + "Runtime": "nodejs10.x", + "Timeout": 3, + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST" + }, + { + "CodeSha256": "sU0cJ2/hOZevwV/lTxCuQqK3gDZP3i8gUoqUUVRmY6E=", + "CodeSize": 266, + "Description": "", + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "FunctionName": "my-function", + "Handler": "index.handler", + "LastModified": "2019-10-01T16:47:28.490+0000", + "MemorySize": 256, + "RevisionId": "93017fc9-59cb-41dc-901b-4845ce4bf668", + "Role": "arn:aws:iam::123456789012:role/service-role/helloWorldPython-role-uy3l9qyq", + "Runtime": "nodejs10.x", + "Timeout": 3, + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "VpcConfig": { + "SecurityGroupIds": [ + + ], + "SubnetIds": [ + + ], + "VpcId": "" + } + } + ], + "NextMarker": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation returns a list of Lambda functions.", + "id": "to-get-a-list-of-lambda-functions-1481650507425", + "title": "To get a list of Lambda functions" + } + ], + "ListLayerVersions": [ + { + "input": { + "LayerName": "blank-java-lib" + }, + "output": { + "LayerVersions": [ + { + "CompatibleRuntimes": [ + "java8" + ], + "CreatedDate": "2020-03-18T23:38:42.284+0000", + "Description": "Dependencies for the blank-java sample app.", + "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:blank-java-lib:7", + "Version": 7 + }, + { + "CompatibleRuntimes": [ + "java8" + ], + "CreatedDate": "2020-03-17T07:24:21.960+0000", + "Description": "Dependencies for the blank-java sample app.", + "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:blank-java-lib:6", + "Version": 6 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example displays information about the versions for the layer named blank-java-lib", + "id": "to-list-versions-of-a-layer-1586490857297", + "title": "To list versions of a layer" + } + ], + "ListLayers": [ + { + "input": { + "CompatibleRuntime": "python3.7" + }, + "output": { + "Layers": [ + { + "LatestMatchingVersion": { + "CompatibleRuntimes": [ + "python3.6", + "python3.7" + ], + "CreatedDate": "2018-11-15T00:37:46.592+0000", + "Description": "My layer", + "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2", + "Version": 2 + }, + "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer", + "LayerName": "my-layer" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns information about layers that are compatible with the Python 3.7 runtime.", + "id": "to-list-the-layers-that-are-compatible-with-your-functions-runtime-1586490857297", + "title": "To list the layers that are compatible with your function's runtime" + } + ], + "ListProvisionedConcurrencyConfigs": [ + { + "input": { + "FunctionName": "my-function" + }, + "output": { + "ProvisionedConcurrencyConfigs": [ + { + "AllocatedProvisionedConcurrentExecutions": 100, + "AvailableProvisionedConcurrentExecutions": 100, + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:GREEN", + "LastModified": "2019-12-31T20:29:00+0000", + "RequestedProvisionedConcurrentExecutions": 100, + "Status": "READY" + }, + { + "AllocatedProvisionedConcurrentExecutions": 100, + "AvailableProvisionedConcurrentExecutions": 100, + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:BLUE", + "LastModified": "2019-12-31T20:28:49+0000", + "RequestedProvisionedConcurrentExecutions": 100, + "Status": "READY" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns a list of provisioned concurrency configurations for a function named my-function.", + "id": "to-get-a-list-of-provisioned-concurrency-configurations-1586491032592", + "title": "To get a list of provisioned concurrency configurations" + } + ], + "ListTags": [ + { + "input": { + "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function" + }, + "output": { + "Tags": { + "Category": "Web Tools", + "Department": "Sales" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example displays the tags attached to the my-function Lambda function.", + "id": "to-retrieve-the-list-of-tags-for-a-lambda-function-1586491111498", + "title": "To retrieve the list of tags for a Lambda function" + } + ], + "ListVersionsByFunction": [ + { + "input": { + "FunctionName": "my-function" + }, + "output": { + "Versions": [ + { + "CodeSha256": "YFgDgEKG3ugvF1+pX64gV6tu9qNuIYNUdgJm8nCxsm4=", + "CodeSize": 5797206, + "Description": "Process image objects from Amazon S3.", + "Environment": { + "Variables": { + "BUCKET": "my-bucket-1xpuxmplzrlbh", + "PREFIX": "inbound" + } + }, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "FunctionName": "my-function", + "Handler": "index.handler", + "KMSKeyArn": "arn:aws:kms:us-west-2:123456789012:key/b0844d6c-xmpl-4463-97a4-d49f50839966", + "LastModified": "2020-04-10T19:06:32.563+0000", + "MemorySize": 256, + "RevisionId": "850ca006-2d98-4ff4-86db-8766e9d32fe9", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "nodejs12.x", + "Timeout": 15, + "TracingConfig": { + "Mode": "Active" + }, + "Version": "$LATEST" + }, + { + "CodeSha256": "YFgDgEKG3ugvF1+pX64gV6tu9qNuIYNUdgJm8nCxsm4=", + "CodeSize": 5797206, + "Description": "Process image objects from Amazon S3.", + "Environment": { + "Variables": { + "BUCKET": "my-bucket-1xpuxmplzrlbh", + "PREFIX": "inbound" + } + }, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "FunctionName": "my-function", + "Handler": "index.handler", + "KMSKeyArn": "arn:aws:kms:us-west-2:123456789012:key/b0844d6c-xmpl-4463-97a4-d49f50839966", + "LastModified": "2020-04-10T19:06:32.563+0000", + "MemorySize": 256, + "RevisionId": "b75dcd81-xmpl-48a8-a75a-93ba8b5b9727", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "nodejs12.x", + "Timeout": 5, + "TracingConfig": { + "Mode": "Active" + }, + "Version": "1" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns a list of versions of a function named my-function", + "id": "to-list-versions-1481650603750", + "title": "To list versions of a function" + } + ], + "PublishLayerVersion": [ + { + "input": { + "CompatibleRuntimes": [ + "python3.6", + "python3.7" + ], + "Content": { + "S3Bucket": "lambda-layers-us-west-2-123456789012", + "S3Key": "layer.zip" + }, + "Description": "My Python layer", + "LayerName": "my-layer", + "LicenseInfo": "MIT" + }, + "output": { + "CompatibleRuntimes": [ + "python3.6", + "python3.7" + ], + "Content": { + "CodeSha256": "tv9jJO+rPbXUUXuRKi7CwHzKtLDkDRJLB3cC3Z/ouXo=", + "CodeSize": 169, + "Location": "https://awslambda-us-west-2-layers.s3.us-west-2.amazonaws.com/snapshots/123456789012/my-layer-4aaa2fbb-ff77-4b0a-ad92-5b78a716a96a?versionId=27iWyA73cCAYqyH..." + }, + "CreatedDate": "2018-11-14T23:03:52.894+0000", + "Description": "My Python layer", + "LayerArn": "arn:aws:lambda:us-west-2:123456789012:layer:my-layer", + "LayerVersionArn": "arn:aws:lambda:us-west-2:123456789012:layer:my-layer:1", + "LicenseInfo": "MIT", + "Version": 1 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a new Python library layer version. The command retrieves the layer content a file named layer.zip in the specified S3 bucket.", + "id": "to-create-a-lambda-layer-version-1586491213595", + "title": "To create a Lambda layer version" + } + ], + "PublishVersion": [ + { + "input": { + "CodeSha256": "", + "Description": "", + "FunctionName": "myFunction" + }, + "output": { + "CodeSha256": "YFgDgEKG3ugvF1+pX64gV6tu9qNuIYNUdgJm8nCxsm4=", + "CodeSize": 5797206, + "Description": "Process image objects from Amazon S3.", + "Environment": { + "Variables": { + "BUCKET": "my-bucket-1xpuxmplzrlbh", + "PREFIX": "inbound" + } + }, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "FunctionName": "my-function", + "Handler": "index.handler", + "KMSKeyArn": "arn:aws:kms:us-west-2:123456789012:key/b0844d6c-xmpl-4463-97a4-d49f50839966", + "LastModified": "2020-04-10T19:06:32.563+0000", + "LastUpdateStatus": "Successful", + "MemorySize": 256, + "RevisionId": "b75dcd81-xmpl-48a8-a75a-93ba8b5b9727", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "nodejs12.x", + "State": "Active", + "Timeout": 5, + "TracingConfig": { + "Mode": "Active" + }, + "Version": "1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation publishes a version of a Lambda function", + "id": "to-publish-a-version-of-a-lambda-function-1481650704986", + "title": "To publish a version of a Lambda function" + } + ], + "PutFunctionConcurrency": [ + { + "input": { + "FunctionName": "my-function", + "ReservedConcurrentExecutions": 100 + }, + "output": { + "ReservedConcurrentExecutions": 100 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example configures 100 reserved concurrent executions for the my-function function.", + "id": "to-configure-a-reserved-concurrency-limit-for-a-function-1586491405956", + "title": "To configure a reserved concurrency limit for a function" + } + ], + "PutFunctionEventInvokeConfig": [ + { + "input": { + "FunctionName": "my-function", + "MaximumEventAgeInSeconds": 3600, + "MaximumRetryAttempts": 0 + }, + "output": { + "DestinationConfig": { + "OnFailure": { + }, + "OnSuccess": { + } + }, + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:$LATEST", + "LastModified": "2016-11-21T19:49:20.006+0000", + "MaximumEventAgeInSeconds": 3600, + "MaximumRetryAttempts": 0 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets a maximum event age of one hour and disables retries for the specified function.", + "id": "to-configure-error-handling-for-asynchronous-invocation-1586491524021", + "title": "To configure error handling for asynchronous invocation" + } + ], + "PutProvisionedConcurrencyConfig": [ + { + "input": { + "FunctionName": "my-function", + "ProvisionedConcurrentExecutions": 100, + "Qualifier": "BLUE" + }, + "output": { + "AllocatedProvisionedConcurrentExecutions": 0, + "LastModified": "2019-11-21T19:32:12+0000", + "RequestedProvisionedConcurrentExecutions": 100, + "Status": "IN_PROGRESS" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example allocates 100 provisioned concurrency for the BLUE alias of the specified function.", + "id": "to-allocate-provisioned-concurrency-1586491651377", + "title": "To allocate provisioned concurrency" + } + ], + "RemoveLayerVersionPermission": [ + { + "input": { + "LayerName": "my-layer", + "StatementId": "xaccount", + "VersionNumber": 1 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes permission for an account to configure a layer version.", + "id": "to-delete-layer-version-permissions-1586491829416", + "title": "To delete layer-version permissions" + } + ], + "RemovePermission": [ + { + "input": { + "FunctionName": "my-function", + "Qualifier": "PROD", + "StatementId": "xaccount" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example removes a permissions statement named xaccount from the PROD alias of a function named my-function.", + "id": "to-remove-a-lambda-functions-permissions-1481661337021", + "title": "To remove a Lambda function's permissions" + } + ], + "TagResource": [ + { + "input": { + "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "Tags": { + "DEPARTMENT": "Department A" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example adds a tag with the key name DEPARTMENT and a value of 'Department A' to the specified Lambda function.", + "id": "to-add-tags-to-an-existing-lambda-function-1586491890446", + "title": "To add tags to an existing Lambda function" + } + ], + "UntagResource": [ + { + "input": { + "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "TagKeys": [ + "DEPARTMENT" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example removes the tag with the key name DEPARTMENT tag from the my-function Lambda function.", + "id": "to-remove-tags-from-an-existing-lambda-function-1586491956425", + "title": "To remove tags from an existing Lambda function" + } + ], + "UpdateAlias": [ + { + "input": { + "FunctionName": "my-function", + "FunctionVersion": "2", + "Name": "BLUE", + "RoutingConfig": { + "AdditionalVersionWeights": { + "1": 0.7 + } + } + }, + "output": { + "AliasArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function:BLUE", + "Description": "Production environment BLUE.", + "FunctionVersion": "2", + "Name": "BLUE", + "RevisionId": "594f41fb-xmpl-4c20-95c7-6ca5f2a92c93", + "RoutingConfig": { + "AdditionalVersionWeights": { + "1": 0.7 + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example updates the alias named BLUE to send 30% of traffic to version 2 and 70% to version 1.", + "id": "to-update-a-function-alias-1481650817950", + "title": "To update a function alias" + } + ], + "UpdateEventSourceMapping": [ + { + "input": { + "BatchSize": 123, + "Enabled": true, + "FunctionName": "myFunction", + "UUID": "1234xCy789012" + }, + "output": { + "BatchSize": 123, + "EventSourceArn": "arn:aws:s3:::examplebucket/*", + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:myFunction", + "LastModified": "2016-11-21T19:49:20.006+0000", + "LastProcessingResult": "", + "State": "", + "StateTransitionReason": "", + "UUID": "1234xCy789012" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation updates a Lambda function event source mapping", + "id": "to-update-a-lambda-function-event-source-mapping-1481650907413", + "title": "To update a Lambda function event source mapping" + } + ], + "UpdateFunctionCode": [ + { + "input": { + "FunctionName": "my-function", + "S3Bucket": "my-bucket-1xpuxmplzrlbh", + "S3Key": "function.zip" + }, + "output": { + "CodeSha256": "PFn4S+er27qk+UuZSTKEQfNKG/XNn7QJs90mJgq6oH8=", + "CodeSize": 308, + "Description": "", + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", + "FunctionName": "my-function", + "Handler": "index.handler", + "LastModified": "2019-08-14T22:26:11.234+0000", + "MemorySize": 128, + "RevisionId": "873282ed-xmpl-4dc8-a069-d0c647e470c6", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "nodejs12.x", + "Timeout": 3, + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example replaces the code of the unpublished ($LATEST) version of a function named my-function with the contents of the specified zip file in Amazon S3.", + "id": "to-update-a-lambda-functions-code-1481650992672", + "title": "To update a Lambda function's code" + } + ], + "UpdateFunctionConfiguration": [ + { + "input": { + "FunctionName": "my-function", + "MemorySize": 256 + }, + "output": { + "CodeSha256": "PFn4S+er27qk+UuZSTKEQfNKG/XNn7QJs90mJgq6oH8=", + "CodeSize": 308, + "Description": "", + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", + "FunctionName": "my-function", + "Handler": "index.handler", + "LastModified": "2019-08-14T22:26:11.234+0000", + "MemorySize": 256, + "RevisionId": "873282ed-xmpl-4dc8-a069-d0c647e470c6", + "Role": "arn:aws:iam::123456789012:role/lambda-role", + "Runtime": "nodejs12.x", + "Timeout": 3, + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example modifies the memory size to be 256 MB for the unpublished ($LATEST) version of a function named my-function.", + "id": "to-update-a-lambda-functions-configuration-1481651096447", + "title": "To update a Lambda function's configuration" + } + ], + "UpdateFunctionEventInvokeConfig": [ + { + "input": { + "DestinationConfig": { + "OnFailure": { + "Destination": "arn:aws:sqs:us-east-2:123456789012:destination" + } + }, + "FunctionName": "my-function" + }, + "output": { + "DestinationConfig": { + "OnFailure": { + "Destination": "arn:aws:sqs:us-east-2:123456789012:destination" + }, + "OnSuccess": { + } + }, + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:$LATEST", + "LastModified": 1573687896.493, + "MaximumEventAgeInSeconds": 3600, + "MaximumRetryAttempts": 0 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example adds an on-failure destination to the existing asynchronous invocation configuration for a function named my-function.", + "id": "to-update-an-asynchronous-invocation-configuration-1586492061186", + "title": "To update an asynchronous invocation configuration" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/paginators-1.json new file mode 100644 index 00000000..7ae81bfd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/paginators-1.json @@ -0,0 +1,70 @@ +{ + "pagination": { + "ListEventSourceMappings": { + "input_token": "Marker", + "output_token": "NextMarker", + "limit_key": "MaxItems", + "result_key": "EventSourceMappings" + }, + "ListFunctions": { + "input_token": "Marker", + "output_token": "NextMarker", + "limit_key": "MaxItems", + "result_key": "Functions" + }, + "ListAliases": { + "input_token": "Marker", + "output_token": "NextMarker", + "limit_key": "MaxItems", + "result_key": "Aliases" + }, + "ListLayerVersions": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "NextMarker", + "result_key": "LayerVersions" + }, + "ListLayers": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "NextMarker", + "result_key": "Layers" + }, + "ListVersionsByFunction": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "NextMarker", + "result_key": "Versions" + }, + "ListFunctionEventInvokeConfigs": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "NextMarker", + "result_key": "FunctionEventInvokeConfigs" + }, + "ListProvisionedConcurrencyConfigs": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "NextMarker", + "result_key": "ProvisionedConcurrencyConfigs" + }, + "ListCodeSigningConfigs": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "NextMarker", + "result_key": "CodeSigningConfigs" + }, + "ListFunctionsByCodeSigningConfig": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "NextMarker", + "result_key": "FunctionArns" + }, + "ListFunctionUrlConfigs": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "NextMarker", + "result_key": "FunctionUrlConfigs" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/service-2.json.gz new file mode 100644 index 00000000..def39bf4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/waiters-2.json new file mode 100644 index 00000000..86e24b0c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lambda/2015-03-31/waiters-2.json @@ -0,0 +1,152 @@ +{ + "version": 2, + "waiters": { + "FunctionExists": { + "delay": 1, + "operation": "GetFunction", + "maxAttempts": 20, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 200 + }, + { + "state": "retry", + "matcher": "error", + "expected": "ResourceNotFoundException" + } + ] + }, + "FunctionActive": { + "delay": 5, + "maxAttempts": 60, + "operation": "GetFunctionConfiguration", + "description": "Waits for the function's State to be Active. This waiter uses GetFunctionConfiguration API. This should be used after new function creation.", + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "Active" + }, + { + "state": "failure", + "matcher": "path", + "argument": "State", + "expected": "Failed" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "Pending" + } + ] + }, + "FunctionUpdated": { + "delay": 5, + "maxAttempts": 60, + "operation": "GetFunctionConfiguration", + "description": "Waits for the function's LastUpdateStatus to be Successful. This waiter uses GetFunctionConfiguration API. This should be used after function updates.", + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "LastUpdateStatus", + "expected": "Successful" + }, + { + "state": "failure", + "matcher": "path", + "argument": "LastUpdateStatus", + "expected": "Failed" + }, + { + "state": "retry", + "matcher": "path", + "argument": "LastUpdateStatus", + "expected": "InProgress" + } + ] + }, + "FunctionActiveV2": { + "delay": 1, + "maxAttempts": 300, + "operation": "GetFunction", + "description": "Waits for the function's State to be Active. This waiter uses GetFunction API. This should be used after new function creation.", + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "Configuration.State", + "expected": "Active" + }, + { + "state": "failure", + "matcher": "path", + "argument": "Configuration.State", + "expected": "Failed" + }, + { + "state": "retry", + "matcher": "path", + "argument": "Configuration.State", + "expected": "Pending" + } + ] + }, + "FunctionUpdatedV2": { + "delay": 1, + "maxAttempts": 300, + "operation": "GetFunction", + "description": "Waits for the function's LastUpdateStatus to be Successful. This waiter uses GetFunction API. This should be used after function updates.", + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "Configuration.LastUpdateStatus", + "expected": "Successful" + }, + { + "state": "failure", + "matcher": "path", + "argument": "Configuration.LastUpdateStatus", + "expected": "Failed" + }, + { + "state": "retry", + "matcher": "path", + "argument": "Configuration.LastUpdateStatus", + "expected": "InProgress" + } + ] + }, + "PublishedVersionActive": { + "delay": 5, + "maxAttempts": 312, + "operation": "GetFunctionConfiguration", + "description": "Waits for the published version's State to be Active. This waiter uses GetFunctionConfiguration API. This should be used after new version is published.", + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "Active" + }, + { + "state": "failure", + "matcher": "path", + "argument": "State", + "expected": "Failed" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "Pending" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/launch-wizard/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/launch-wizard/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ca3a382f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/launch-wizard/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/launch-wizard/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/launch-wizard/2018-05-10/paginators-1.json new file mode 100644 index 00000000..7f610953 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/launch-wizard/2018-05-10/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListDeploymentEvents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "deploymentEvents" + }, + "ListDeployments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "deployments" + }, + "ListWorkloadDeploymentPatterns": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workloadDeploymentPatterns" + }, + "ListWorkloads": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workloads" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/launch-wizard/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/launch-wizard/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..13e73585 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/launch-wizard/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..aa744690 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/examples-1.json new file mode 100644 index 00000000..0982d973 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/examples-1.json @@ -0,0 +1,758 @@ +{ + "version": "1.0", + "examples": { + "GetBot": [ + { + "input": { + "name": "DocOrderPizza", + "versionOrAlias": "$LATEST" + }, + "output": { + "version": "$LATEST", + "name": "DocOrderPizzaBot", + "abortStatement": { + "messages": [ + { + "content": "I don't understand. Can you try again?", + "contentType": "PlainText" + }, + { + "content": "I'm sorry, I don't understand.", + "contentType": "PlainText" + } + ] + }, + "checksum": "20172ee3-fa06-49b2-bbc5-667c090303e9", + "childDirected": true, + "clarificationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "I'm sorry, I didn't hear that. Can you repeate what you just said?", + "contentType": "PlainText" + }, + { + "content": "Can you say that again?", + "contentType": "PlainText" + } + ] + }, + "createdDate": 1494360160.133, + "description": "Orders a pizza from a local pizzeria.", + "idleSessionTTLInSeconds": 300, + "intents": [ + { + "intentName": "DocOrderPizza", + "intentVersion": "$LATEST" + } + ], + "lastUpdatedDate": 1494360160.133, + "locale": "en-US", + "status": "NOT_BUILT" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows how to get configuration information for a bot.", + "id": "to-get-information-about-a-bot-1494431724188", + "title": "To get information about a bot" + } + ], + "GetBots": [ + { + "input": { + "maxResults": 5, + "nextToken": "" + }, + "output": { + "bots": [ + { + "version": "$LATEST", + "name": "DocOrderPizzaBot", + "createdDate": 1494360160.133, + "description": "Orders a pizza from a local pizzeria.", + "lastUpdatedDate": 1494360160.133, + "status": "NOT_BUILT" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows how to get a list of all of the bots in your account.", + "id": "to-get-a-list-of-bots-1494432220036", + "title": "To get a list of bots" + } + ], + "GetIntent": [ + { + "input": { + "version": "$LATEST", + "name": "DocOrderPizza" + }, + "output": { + "version": "$LATEST", + "name": "DocOrderPizza", + "checksum": "ca9bc13d-afc8-4706-bbaf-091f7a5935d6", + "conclusionStatement": { + "messages": [ + { + "content": "All right, I ordered you a {Crust} crust {Type} pizza with {Sauce} sauce.", + "contentType": "PlainText" + }, + { + "content": "OK, your {Crust} crust {Type} pizza with {Sauce} sauce is on the way.", + "contentType": "PlainText" + } + ], + "responseCard": "foo" + }, + "confirmationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "Should I order your {Crust} crust {Type} pizza with {Sauce} sauce?", + "contentType": "PlainText" + } + ] + }, + "createdDate": 1494359783.453, + "description": "Order a pizza from a local pizzeria.", + "fulfillmentActivity": { + "type": "ReturnIntent" + }, + "lastUpdatedDate": 1494359783.453, + "rejectionStatement": { + "messages": [ + { + "content": "Ok, I'll cancel your order.", + "contentType": "PlainText" + }, + { + "content": "I cancelled your order.", + "contentType": "PlainText" + } + ] + }, + "sampleUtterances": [ + "Order me a pizza.", + "Order me a {Type} pizza.", + "I want a {Crust} crust {Type} pizza", + "I want a {Crust} crust {Type} pizza with {Sauce} sauce." + ], + "slots": [ + { + "name": "Type", + "description": "The type of pizza to order.", + "priority": 1, + "sampleUtterances": [ + "Get me a {Type} pizza.", + "A {Type} pizza please.", + "I'd like a {Type} pizza." + ], + "slotConstraint": "Required", + "slotType": "DocPizzaType", + "slotTypeVersion": "$LATEST", + "valueElicitationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "What type of pizza would you like?", + "contentType": "PlainText" + }, + { + "content": "Vegie or cheese pizza?", + "contentType": "PlainText" + }, + { + "content": "I can get you a vegie or a cheese pizza.", + "contentType": "PlainText" + } + ] + } + }, + { + "name": "Crust", + "description": "The type of pizza crust to order.", + "priority": 2, + "sampleUtterances": [ + "Make it a {Crust} crust.", + "I'd like a {Crust} crust." + ], + "slotConstraint": "Required", + "slotType": "DocPizzaCrustType", + "slotTypeVersion": "$LATEST", + "valueElicitationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "What type of crust would you like?", + "contentType": "PlainText" + }, + { + "content": "Thick or thin crust?", + "contentType": "PlainText" + } + ] + } + }, + { + "name": "Sauce", + "description": "The type of sauce to use on the pizza.", + "priority": 3, + "sampleUtterances": [ + "Make it {Sauce} sauce.", + "I'd like {Sauce} sauce." + ], + "slotConstraint": "Required", + "slotType": "DocPizzaSauceType", + "slotTypeVersion": "$LATEST", + "valueElicitationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "White or red sauce?", + "contentType": "PlainText" + }, + { + "content": "Garlic or tomato sauce?", + "contentType": "PlainText" + } + ] + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows how to get information about an intent.", + "id": "to-get-a-information-about-an-intent-1494432574147", + "title": "To get a information about an intent" + } + ], + "GetIntents": [ + { + "input": { + "maxResults": 10, + "nextToken": "" + }, + "output": { + "intents": [ + { + "version": "$LATEST", + "name": "DocOrderPizza", + "createdDate": 1494359783.453, + "description": "Order a pizza from a local pizzeria.", + "lastUpdatedDate": 1494359783.453 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows how to get a list of all of the intents in your account.", + "id": "to-get-a-list-of-intents-1494432416363", + "title": "To get a list of intents" + } + ], + "GetSlotType": [ + { + "input": { + "version": "$LATEST", + "name": "DocPizzaCrustType" + }, + "output": { + "version": "$LATEST", + "name": "DocPizzaCrustType", + "checksum": "210b3d5a-90a3-4b22-ac7e-f50c2c71095f", + "createdDate": 1494359274.403, + "description": "Available crust types", + "enumerationValues": [ + { + "value": "thick" + }, + { + "value": "thin" + } + ], + "lastUpdatedDate": 1494359274.403 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows how to get information about a slot type.", + "id": "to-get-information-about-a-slot-type-1494432961004", + "title": "To get information about a slot type" + } + ], + "GetSlotTypes": [ + { + "input": { + "maxResults": 10, + "nextToken": "" + }, + "output": { + "slotTypes": [ + { + "version": "$LATEST", + "name": "DocPizzaCrustType", + "createdDate": 1494359274.403, + "description": "Available crust types", + "lastUpdatedDate": 1494359274.403 + }, + { + "version": "$LATEST", + "name": "DocPizzaSauceType", + "createdDate": 1494356442.23, + "description": "Available pizza sauces", + "lastUpdatedDate": 1494356442.23 + }, + { + "version": "$LATEST", + "name": "DocPizzaType", + "createdDate": 1494359198.656, + "description": "Available pizzas", + "lastUpdatedDate": 1494359198.656 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows how to get a list of all of the slot types in your account.", + "id": "to-get-a-list-of-slot-types-1494432757458", + "title": "To get a list of slot types" + } + ], + "PutBot": [ + { + "input": { + "name": "DocOrderPizzaBot", + "abortStatement": { + "messages": [ + { + "content": "I don't understand. Can you try again?", + "contentType": "PlainText" + }, + { + "content": "I'm sorry, I don't understand.", + "contentType": "PlainText" + } + ] + }, + "childDirected": true, + "clarificationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "I'm sorry, I didn't hear that. Can you repeat what you just said?", + "contentType": "PlainText" + }, + { + "content": "Can you say that again?", + "contentType": "PlainText" + } + ] + }, + "description": "Orders a pizza from a local pizzeria.", + "idleSessionTTLInSeconds": 300, + "intents": [ + { + "intentName": "DocOrderPizza", + "intentVersion": "$LATEST" + } + ], + "locale": "en-US", + "processBehavior": "SAVE" + }, + "output": { + "version": "$LATEST", + "name": "DocOrderPizzaBot", + "abortStatement": { + "messages": [ + { + "content": "I don't understand. Can you try again?", + "contentType": "PlainText" + }, + { + "content": "I'm sorry, I don't understand.", + "contentType": "PlainText" + } + ] + }, + "checksum": "20172ee3-fa06-49b2-bbc5-667c090303e9", + "childDirected": true, + "clarificationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "I'm sorry, I didn't hear that. Can you repeate what you just said?", + "contentType": "PlainText" + }, + { + "content": "Can you say that again?", + "contentType": "PlainText" + } + ] + }, + "createdDate": 1494360160.133, + "description": "Orders a pizza from a local pizzeria.", + "idleSessionTTLInSeconds": 300, + "intents": [ + { + "intentName": "DocOrderPizza", + "intentVersion": "$LATEST" + } + ], + "lastUpdatedDate": 1494360160.133, + "locale": "en-US", + "status": "NOT_BUILT" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows how to create a bot for ordering pizzas.", + "id": "to-create-a-bot-1494360003886", + "title": "To create a bot" + } + ], + "PutIntent": [ + { + "input": { + "name": "DocOrderPizza", + "conclusionStatement": { + "messages": [ + { + "content": "All right, I ordered you a {Crust} crust {Type} pizza with {Sauce} sauce.", + "contentType": "PlainText" + }, + { + "content": "OK, your {Crust} crust {Type} pizza with {Sauce} sauce is on the way.", + "contentType": "PlainText" + } + ], + "responseCard": "foo" + }, + "confirmationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "Should I order your {Crust} crust {Type} pizza with {Sauce} sauce?", + "contentType": "PlainText" + } + ] + }, + "description": "Order a pizza from a local pizzeria.", + "fulfillmentActivity": { + "type": "ReturnIntent" + }, + "rejectionStatement": { + "messages": [ + { + "content": "Ok, I'll cancel your order.", + "contentType": "PlainText" + }, + { + "content": "I cancelled your order.", + "contentType": "PlainText" + } + ] + }, + "sampleUtterances": [ + "Order me a pizza.", + "Order me a {Type} pizza.", + "I want a {Crust} crust {Type} pizza", + "I want a {Crust} crust {Type} pizza with {Sauce} sauce." + ], + "slots": [ + { + "name": "Type", + "description": "The type of pizza to order.", + "priority": 1, + "sampleUtterances": [ + "Get me a {Type} pizza.", + "A {Type} pizza please.", + "I'd like a {Type} pizza." + ], + "slotConstraint": "Required", + "slotType": "DocPizzaType", + "slotTypeVersion": "$LATEST", + "valueElicitationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "What type of pizza would you like?", + "contentType": "PlainText" + }, + { + "content": "Vegie or cheese pizza?", + "contentType": "PlainText" + }, + { + "content": "I can get you a vegie or a cheese pizza.", + "contentType": "PlainText" + } + ] + } + }, + { + "name": "Crust", + "description": "The type of pizza crust to order.", + "priority": 2, + "sampleUtterances": [ + "Make it a {Crust} crust.", + "I'd like a {Crust} crust." + ], + "slotConstraint": "Required", + "slotType": "DocPizzaCrustType", + "slotTypeVersion": "$LATEST", + "valueElicitationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "What type of crust would you like?", + "contentType": "PlainText" + }, + { + "content": "Thick or thin crust?", + "contentType": "PlainText" + } + ] + } + }, + { + "name": "Sauce", + "description": "The type of sauce to use on the pizza.", + "priority": 3, + "sampleUtterances": [ + "Make it {Sauce} sauce.", + "I'd like {Sauce} sauce." + ], + "slotConstraint": "Required", + "slotType": "DocPizzaSauceType", + "slotTypeVersion": "$LATEST", + "valueElicitationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "White or red sauce?", + "contentType": "PlainText" + }, + { + "content": "Garlic or tomato sauce?", + "contentType": "PlainText" + } + ] + } + } + ] + }, + "output": { + "version": "$LATEST", + "name": "DocOrderPizza", + "checksum": "ca9bc13d-afc8-4706-bbaf-091f7a5935d6", + "conclusionStatement": { + "messages": [ + { + "content": "All right, I ordered you a {Crust} crust {Type} pizza with {Sauce} sauce.", + "contentType": "PlainText" + }, + { + "content": "OK, your {Crust} crust {Type} pizza with {Sauce} sauce is on the way.", + "contentType": "PlainText" + } + ], + "responseCard": "foo" + }, + "confirmationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "Should I order your {Crust} crust {Type} pizza with {Sauce} sauce?", + "contentType": "PlainText" + } + ] + }, + "createdDate": 1494359783.453, + "description": "Order a pizza from a local pizzeria.", + "fulfillmentActivity": { + "type": "ReturnIntent" + }, + "lastUpdatedDate": 1494359783.453, + "rejectionStatement": { + "messages": [ + { + "content": "Ok, I'll cancel your order.", + "contentType": "PlainText" + }, + { + "content": "I cancelled your order.", + "contentType": "PlainText" + } + ] + }, + "sampleUtterances": [ + "Order me a pizza.", + "Order me a {Type} pizza.", + "I want a {Crust} crust {Type} pizza", + "I want a {Crust} crust {Type} pizza with {Sauce} sauce." + ], + "slots": [ + { + "name": "Sauce", + "description": "The type of sauce to use on the pizza.", + "priority": 3, + "sampleUtterances": [ + "Make it {Sauce} sauce.", + "I'd like {Sauce} sauce." + ], + "slotConstraint": "Required", + "slotType": "DocPizzaSauceType", + "slotTypeVersion": "$LATEST", + "valueElicitationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "White or red sauce?", + "contentType": "PlainText" + }, + { + "content": "Garlic or tomato sauce?", + "contentType": "PlainText" + } + ] + } + }, + { + "name": "Type", + "description": "The type of pizza to order.", + "priority": 1, + "sampleUtterances": [ + "Get me a {Type} pizza.", + "A {Type} pizza please.", + "I'd like a {Type} pizza." + ], + "slotConstraint": "Required", + "slotType": "DocPizzaType", + "slotTypeVersion": "$LATEST", + "valueElicitationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "What type of pizza would you like?", + "contentType": "PlainText" + }, + { + "content": "Vegie or cheese pizza?", + "contentType": "PlainText" + }, + { + "content": "I can get you a vegie or a cheese pizza.", + "contentType": "PlainText" + } + ] + } + }, + { + "name": "Crust", + "description": "The type of pizza crust to order.", + "priority": 2, + "sampleUtterances": [ + "Make it a {Crust} crust.", + "I'd like a {Crust} crust." + ], + "slotConstraint": "Required", + "slotType": "DocPizzaCrustType", + "slotTypeVersion": "$LATEST", + "valueElicitationPrompt": { + "maxAttempts": 1, + "messages": [ + { + "content": "What type of crust would you like?", + "contentType": "PlainText" + }, + { + "content": "Thick or thin crust?", + "contentType": "PlainText" + } + ] + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows how to create an intent for ordering pizzas.", + "id": "to-create-an-intent-1494358144659", + "title": "To create an intent" + } + ], + "PutSlotType": [ + { + "input": { + "name": "PizzaSauceType", + "description": "Available pizza sauces", + "enumerationValues": [ + { + "value": "red" + }, + { + "value": "white" + } + ] + }, + "output": { + "version": "$LATEST", + "name": "DocPizzaSauceType", + "checksum": "cfd00ed1-775d-4357-947c-aca7e73b44ba", + "createdDate": 1494356442.23, + "description": "Available pizza sauces", + "enumerationValues": [ + { + "value": "red" + }, + { + "value": "white" + } + ], + "lastUpdatedDate": 1494356442.23 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows how to create a slot type that describes pizza sauces.", + "id": "to-create-a-slot-type-1494357262258", + "title": "To Create a Slot Type" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/paginators-1.json new file mode 100644 index 00000000..02d23082 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "GetSlotTypeVersions": { + "result_key": "slotTypes", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetSlotTypes": { + "result_key": "slotTypes", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetIntents": { + "result_key": "intents", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetBotChannelAssociations": { + "result_key": "botChannelAssociations", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetBots": { + "result_key": "bots", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetBuiltinSlotTypes": { + "result_key": "slotTypes", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetIntentVersions": { + "result_key": "intents", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetBotAliases": { + "result_key": "BotAliases", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetBuiltinIntents": { + "result_key": "intents", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "GetBotVersions": { + "result_key": "bots", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/service-2.json.gz new file mode 100644 index 00000000..4b188175 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-models/2017-04-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..14c218ba Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/service-2.json.gz new file mode 100644 index 00000000..360884b4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lex-runtime/2016-11-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..fb88fdd2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/service-2.json.gz new file mode 100644 index 00000000..099e14cf Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/waiters-2.json new file mode 100644 index 00000000..1ec96048 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-models/2020-08-07/waiters-2.json @@ -0,0 +1,255 @@ +{ + "version":2, + "waiters":{ + "BotAvailable":{ + "delay":10, + "operation":"DescribeBot", + "maxAttempts":35, + "description":"Wait until a bot is available", + "acceptors":[ + { + "expected":"Available", + "matcher":"path", + "state":"success", + "argument":"botStatus" + }, + { + "expected":"Deleting", + "matcher":"path", + "state":"failure", + "argument":"botStatus" + }, + { + "expected":"Failed", + "matcher":"path", + "state":"failure", + "argument":"botStatus" + }, + { + "expected":"Inactive", + "matcher":"path", + "state":"failure", + "argument":"botStatus" + } + ] + }, + "BotAliasAvailable":{ + "delay":10, + "operation":"DescribeBotAlias", + "maxAttempts":35, + "description":"Wait until a bot alias is available", + "acceptors":[ + { + "expected":"Available", + "matcher":"path", + "state":"success", + "argument":"botAliasStatus" + }, + { + "expected":"Failed", + "matcher":"path", + "state":"failure", + "argument":"botAliasStatus" + }, + { + "expected":"Deleting", + "matcher":"path", + "state":"failure", + "argument":"botAliasStatus" + } + ] + }, + "BotExportCompleted":{ + "delay":10, + "operation":"DescribeExport", + "maxAttempts":35, + "description":"Wait until a bot has been exported", + "acceptors":[ + { + "expected":"Completed", + "matcher":"path", + "state":"success", + "argument":"exportStatus" + }, + { + "expected":"Deleting", + "matcher":"path", + "state":"failure", + "argument":"exportStatus" + }, + { + "expected":"Failed", + "matcher":"path", + "state":"failure", + "argument":"exportStatus" + } + ] + }, + "BotImportCompleted":{ + "delay":10, + "operation":"DescribeImport", + "maxAttempts":35, + "description":"Wait until a bot has been imported", + "acceptors":[ + { + "expected":"Completed", + "matcher":"path", + "state":"success", + "argument":"importStatus" + }, + { + "expected":"Deleting", + "matcher":"path", + "state":"failure", + "argument":"importStatus" + }, + { + "expected":"Failed", + "matcher":"path", + "state":"failure", + "argument":"importStatus" + } + ] + }, + "BotLocaleBuilt":{ + "delay":10, + "operation":"DescribeBotLocale", + "maxAttempts":35, + "description":"Wait until a bot locale is built", + "acceptors":[ + { + "expected":"Built", + "matcher":"path", + "state":"success", + "argument":"botLocaleStatus" + }, + { + "expected":"Deleting", + "matcher":"path", + "state":"failure", + "argument":"botLocaleStatus" + }, + { + "expected":"Failed", + "matcher":"path", + "state":"failure", + "argument":"botLocaleStatus" + }, + { + "expected":"NotBuilt", + "matcher":"path", + "state":"failure", + "argument":"botLocaleStatus" + } + ] + }, + "BotLocaleExpressTestingAvailable":{ + "delay":10, + "operation":"DescribeBotLocale", + "maxAttempts":35, + "description":"Wait until a bot locale build is ready for express testing", + "acceptors":[ + { + "expected":"Built", + "matcher":"path", + "state":"success", + "argument":"botLocaleStatus" + }, + { + "expected":"ReadyExpressTesting", + "matcher":"path", + "state":"success", + "argument":"botLocaleStatus" + }, + { + "expected":"Deleting", + "matcher":"path", + "state":"failure", + "argument":"botLocaleStatus" + }, + { + "expected":"Failed", + "matcher":"path", + "state":"failure", + "argument":"botLocaleStatus" + }, + { + "expected":"NotBuilt", + "matcher":"path", + "state":"failure", + "argument":"botLocaleStatus" + } + ] + }, + "BotVersionAvailable":{ + "delay":10, + "operation":"DescribeBotVersion", + "maxAttempts":35, + "description":"Wait until a bot version is available", + "acceptors":[ + { + "expected":"Available", + "matcher":"path", + "state":"success", + "argument":"botStatus" + }, + { + "expected":"Deleting", + "matcher":"path", + "state":"failure", + "argument":"botStatus" + }, + { + "expected":"Failed", + "matcher":"path", + "state":"failure", + "argument":"botStatus" + }, + { + "state":"retry", + "matcher":"status", + "expected":404 + } + ] + }, + "BotLocaleCreated":{ + "delay":10, + "operation":"DescribeBotLocale", + "maxAttempts":35, + "description":"Wait unit a bot locale is created", + "acceptors":[ + { + "expected":"Built", + "matcher":"path", + "state":"success", + "argument":"botLocaleStatus" + }, + { + "expected":"ReadyExpressTesting", + "matcher":"path", + "state":"success", + "argument":"botLocaleStatus" + }, + { + "expected":"NotBuilt", + "matcher":"path", + "state":"success", + "argument":"botLocaleStatus" + }, + { + "expected":"Deleting", + "matcher":"path", + "state":"failure", + "argument":"botLocaleStatus" + }, + { + "expected":"Failed", + "matcher":"path", + "state":"failure", + "argument":"botLocaleStatus" + } + ] + } + } +} + diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0972ff28 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/service-2.json.gz new file mode 100644 index 00000000..42134d2d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lexv2-runtime/2020-08-07/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-linux-subscriptions/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-linux-subscriptions/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..20898676 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-linux-subscriptions/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-linux-subscriptions/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-linux-subscriptions/2018-05-10/paginators-1.json new file mode 100644 index 00000000..1dc8f4d8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-linux-subscriptions/2018-05-10/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListLinuxSubscriptionInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Instances" + }, + "ListLinuxSubscriptions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Subscriptions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-linux-subscriptions/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-linux-subscriptions/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..fe4270f6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-linux-subscriptions/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-user-subscriptions/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-user-subscriptions/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..17b8894d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-user-subscriptions/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-user-subscriptions/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-user-subscriptions/2018-05-10/paginators-1.json new file mode 100644 index 00000000..a212681a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-user-subscriptions/2018-05-10/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListIdentityProviders": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "IdentityProviderSummaries" + }, + "ListInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceSummaries" + }, + "ListProductSubscriptions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ProductUserSummaries" + }, + "ListUserAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceUserSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-user-subscriptions/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-user-subscriptions/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..74907176 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager-user-subscriptions/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..578bdb6a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/paginators-1.json new file mode 100644 index 00000000..03a3ca4d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListAssociationsForLicenseConfiguration": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LicenseConfigurationAssociations" + }, + "ListLicenseConfigurations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LicenseConfigurations" + }, + "ListLicenseSpecificationsForResource": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LicenseSpecifications" + }, + "ListResourceInventory": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ResourceInventoryList" + }, + "ListUsageForLicenseConfiguration": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LicenseConfigurationUsageList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/service-2.json.gz new file mode 100644 index 00000000..ae61845c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/license-manager/2018-08-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..7328a740 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/paginators-1.json new file mode 100644 index 00000000..fbea9383 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/paginators-1.json @@ -0,0 +1,104 @@ +{ + "pagination": { + "GetActiveNames": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "activeNames" + }, + "GetBlueprints": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "blueprints" + }, + "GetBundles": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "bundles" + }, + "GetDomains": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "domains" + }, + "GetInstanceSnapshots": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "instanceSnapshots" + }, + "GetInstances": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "instances" + }, + "GetKeyPairs": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "keyPairs" + }, + "GetOperations": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "operations" + }, + "GetStaticIps": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "staticIps" + }, + "GetCloudFormationStackRecords": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "cloudFormationStackRecords" + }, + "GetDiskSnapshots": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "diskSnapshots" + }, + "GetDisks": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "disks" + }, + "GetExportSnapshotRecords": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "exportSnapshotRecords" + }, + "GetLoadBalancers": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "loadBalancers" + }, + "GetRelationalDatabaseBlueprints": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "blueprints" + }, + "GetRelationalDatabaseBundles": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "bundles" + }, + "GetRelationalDatabaseEvents": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "relationalDatabaseEvents" + }, + "GetRelationalDatabaseParameters": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "parameters" + }, + "GetRelationalDatabaseSnapshots": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "relationalDatabaseSnapshots" + }, + "GetRelationalDatabases": { + "input_token": "pageToken", + "output_token": "nextPageToken", + "result_key": "relationalDatabases" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/service-2.json.gz new file mode 100644 index 00000000..3053ee11 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lightsail/2016-11-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6d42449a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/paginators-1.json new file mode 100644 index 00000000..eaa27975 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "GetDevicePositionHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "DevicePositions", + "limit_key": "MaxResults" + }, + "ListGeofenceCollections": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Entries" + }, + "ListGeofences": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Entries", + "limit_key": "MaxResults" + }, + "ListMaps": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Entries" + }, + "ListPlaceIndexes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Entries" + }, + "ListTrackerConsumers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ConsumerArns" + }, + "ListTrackers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Entries" + }, + "ListDevicePositions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Entries" + }, + "ListRouteCalculators": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Entries" + }, + "ListKeys": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Entries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/service-2.json.gz new file mode 100644 index 00000000..c1daf71b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/location/2020-11-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4e8e7734 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/paginators-1.json new file mode 100644 index 00000000..cdbd4cf4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/paginators-1.json @@ -0,0 +1,91 @@ +{ + "pagination": { + "DescribeDestinations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "limit", + "result_key": "destinations" + }, + "DescribeLogGroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "limit", + "result_key": "logGroups" + }, + "DescribeLogStreams": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "limit", + "result_key": "logStreams" + }, + "DescribeMetricFilters": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "limit", + "result_key": "metricFilters" + }, + "DescribeSubscriptionFilters": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "limit", + "result_key": "subscriptionFilters" + }, + "FilterLogEvents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "limit", + "result_key": [ + "events", + "searchedLogStreams" + ] + }, + "DescribeExportTasks": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "exportTasks" + }, + "DescribeQueries": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "queries" + }, + "DescribeResourcePolicies": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "resourcePolicies" + }, + "DescribeDeliveries": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "deliveries" + }, + "DescribeDeliveryDestinations": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "deliveryDestinations" + }, + "DescribeDeliverySources": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "deliverySources" + }, + "ListAnomalies": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "anomalies" + }, + "ListLogAnomalyDetectors": { + "input_token": "nextToken", + "limit_key": "limit", + "output_token": "nextToken", + "result_key": "anomalyDetectors" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/service-2.json.gz new file mode 100644 index 00000000..3a53dc5a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/logs/2014-03-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c7466f0a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/service-2.json.gz new file mode 100644 index 00000000..1250de05 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutequipment/2020-12-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ed4aaaed Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/service-2.json.gz new file mode 100644 index 00000000..c0866123 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutmetrics/2017-07-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6adb7a57 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/paginators-1.json new file mode 100644 index 00000000..14c4ce73 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListDatasetEntries": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DatasetEntries" + }, + "ListModels": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Models" + }, + "ListProjects": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Projects" + }, + "ListModelPackagingJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ModelPackagingJobs" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/service-2.json.gz new file mode 100644 index 00000000..d85f5328 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/lookoutvision/2020-11-20/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/m2/2021-04-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/m2/2021-04-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e88c5324 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/m2/2021-04-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/m2/2021-04-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/m2/2021-04-28/paginators-1.json new file mode 100644 index 00000000..e7cd269f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/m2/2021-04-28/paginators-1.json @@ -0,0 +1,58 @@ +{ + "pagination": { + "ListApplicationVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "applicationVersions" + }, + "ListApplications": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "applications" + }, + "ListBatchJobDefinitions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "batchJobDefinitions" + }, + "ListBatchJobExecutions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "batchJobExecutions" + }, + "ListDataSetImportHistory": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "dataSetImportTasks" + }, + "ListDataSets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "dataSets" + }, + "ListDeployments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "deployments" + }, + "ListEngineVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "engineVersions" + }, + "ListEnvironments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "environments" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/m2/2021-04-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/m2/2021-04-28/service-2.json.gz new file mode 100644 index 00000000..785ac9c7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/m2/2021-04-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..24fba4b2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/paginators-1.json new file mode 100644 index 00000000..c13ce65a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "DescribeBatchPredictions": { + "limit_key": "Limit", + "output_token": "NextToken", + "input_token": "NextToken", + "result_key": "Results" + }, + "DescribeDataSources": { + "limit_key": "Limit", + "output_token": "NextToken", + "input_token": "NextToken", + "result_key": "Results" + }, + "DescribeEvaluations": { + "limit_key": "Limit", + "output_token": "NextToken", + "input_token": "NextToken", + "result_key": "Results" + }, + "DescribeMLModels": { + "limit_key": "Limit", + "output_token": "NextToken", + "input_token": "NextToken", + "result_key": "Results" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/service-2.json.gz new file mode 100644 index 00000000..8245cebf Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/waiters-2.json new file mode 100644 index 00000000..da6b1c95 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/machinelearning/2014-12-12/waiters-2.json @@ -0,0 +1,81 @@ +{ + "version": 2, + "waiters": { + "DataSourceAvailable": { + "delay": 30, + "operation": "DescribeDataSources", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "COMPLETED", + "matcher": "pathAll", + "state": "success", + "argument": "Results[].Status" + }, + { + "expected": "FAILED", + "matcher": "pathAny", + "state": "failure", + "argument": "Results[].Status" + } + ] + }, + "MLModelAvailable": { + "delay": 30, + "operation": "DescribeMLModels", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "COMPLETED", + "matcher": "pathAll", + "state": "success", + "argument": "Results[].Status" + }, + { + "expected": "FAILED", + "matcher": "pathAny", + "state": "failure", + "argument": "Results[].Status" + } + ] + }, + "EvaluationAvailable": { + "delay": 30, + "operation": "DescribeEvaluations", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "COMPLETED", + "matcher": "pathAll", + "state": "success", + "argument": "Results[].Status" + }, + { + "expected": "FAILED", + "matcher": "pathAny", + "state": "failure", + "argument": "Results[].Status" + } + ] + }, + "BatchPredictionAvailable": { + "delay": 30, + "operation": "DescribeBatchPredictions", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "COMPLETED", + "matcher": "pathAll", + "state": "success", + "argument": "Results[].Status" + }, + { + "expected": "FAILED", + "matcher": "pathAny", + "state": "failure", + "argument": "Results[].Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d4155b9c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/paginators-1.json new file mode 100644 index 00000000..56d8f702 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/paginators-1.json @@ -0,0 +1,100 @@ +{ + "pagination": { + "DescribeBuckets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "buckets" + }, + "GetUsageStatistics": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "records", + "non_aggregate_keys": [ + "timeRange" + ] + }, + "ListClassificationJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListCustomDataIdentifiers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListFindings": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findingIds" + }, + "ListFindingsFilters": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findingsFilterListItems" + }, + "ListInvitations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "invitations" + }, + "ListMembers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "members" + }, + "ListOrganizationAdminAccounts": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "adminAccounts" + }, + "SearchResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "matchingResources" + }, + "ListClassificationScopes": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "classificationScopes" + }, + "ListAllowLists": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "allowLists" + }, + "ListManagedDataIdentifiers": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "items" + }, + "ListResourceProfileDetections": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "detections" + }, + "ListSensitivityInspectionTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "sensitivityInspectionTemplates" + }, + "ListResourceProfileArtifacts": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "artifacts" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/service-2.json.gz new file mode 100644 index 00000000..5a788aa5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/waiters-2.json new file mode 100644 index 00000000..12c4a4a8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/macie2/2020-01-01/waiters-2.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "waiters": { + "FindingRevealed": { + "description": "Wait until the sensitive data occurrences are ready.", + "delay": 2, + "maxAttempts": 60, + "operation": "GetSensitiveDataOccurrences", + "acceptors": [ + { + "matcher": "path", + "argument": "status", + "state": "success", + "expected": "SUCCESS" + }, + { + "matcher": "path", + "argument": "status", + "state": "success", + "expected": "ERROR" + } + ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..455a94bb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/paginators-1.json new file mode 100644 index 00000000..e1cd5ba8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListTokenBalances": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "tokenBalances" + }, + "ListTransactionEvents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "events" + }, + "ListTransactions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "transactions" + }, + "ListAssetContracts": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "contracts" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/service-2.json.gz new file mode 100644 index 00000000..4f484a8b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain-query/2023-05-04/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..99d7ebf5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/paginators-1.json new file mode 100644 index 00000000..8d30a03f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListAccessors": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Accessors" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/service-2.json.gz new file mode 100644 index 00000000..13e756dd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/managedblockchain/2018-09-24/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-agreement/2020-03-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-agreement/2020-03-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ad985b45 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-agreement/2020-03-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-agreement/2020-03-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-agreement/2020-03-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-agreement/2020-03-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-agreement/2020-03-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-agreement/2020-03-01/service-2.json.gz new file mode 100644 index 00000000..5bf293c3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-agreement/2020-03-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1f62beac Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/paginators-1.json new file mode 100644 index 00000000..8bbef968 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListChangeSets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ChangeSetSummaryList" + }, + "ListEntities": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "EntitySummaryList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/service-2.json.gz new file mode 100644 index 00000000..15286edb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-catalog/2018-09-17/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-deployment/2023-01-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-deployment/2023-01-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e57457d6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-deployment/2023-01-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-deployment/2023-01-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-deployment/2023-01-25/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-deployment/2023-01-25/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-deployment/2023-01-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-deployment/2023-01-25/service-2.json.gz new file mode 100644 index 00000000..1b5f22d6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-deployment/2023-01-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..2482d1f7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/paginators-1.json new file mode 100644 index 00000000..8dbf525e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "GetEntitlements": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Entitlements" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/service-2.json.gz new file mode 100644 index 00000000..62dbf2c8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplace-entitlement/2017-01-11/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..721287dd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/service-2.json.gz new file mode 100644 index 00000000..28a96782 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/marketplacecommerceanalytics/2015-07-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..00b97d05 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/paginators-1.json new file mode 100644 index 00000000..65df623e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/paginators-1.json @@ -0,0 +1,46 @@ +{ + "pagination": { + "ListFlows": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Flows" + }, + "ListEntitlements": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Entitlements" + }, + "ListOfferings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Offerings" + }, + "ListReservations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Reservations" + }, + "ListBridges": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Bridges" + }, + "ListGatewayInstances": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Instances" + }, + "ListGateways": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Gateways" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/service-2.json.gz new file mode 100644 index 00000000..a51fa1f4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/waiters-2.json new file mode 100644 index 00000000..75581d6a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconnect/2018-11-14/waiters-2.json @@ -0,0 +1,118 @@ +{ + "version": 2, + "waiters": { + "FlowActive": { + "description": "Wait until a flow is active", + "operation": "DescribeFlow", + "delay": 3, + "maxAttempts": 40, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "Flow.Status", + "expected": "ACTIVE" + }, + { + "state": "retry", + "matcher": "path", + "argument": "Flow.Status", + "expected": "STARTING" + }, + { + "state": "retry", + "matcher": "path", + "argument": "Flow.Status", + "expected": "UPDATING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + }, + { + "state": "retry", + "matcher": "status", + "expected": 503 + }, + { + "state": "failure", + "matcher": "path", + "argument": "Flow.Status", + "expected": "ERROR" + } + ] + }, + "FlowStandby": { + "description": "Wait until a flow is in standby mode", + "operation": "DescribeFlow", + "delay": 3, + "maxAttempts": 40, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "Flow.Status", + "expected": "STANDBY" + }, + { + "state": "retry", + "matcher": "path", + "argument": "Flow.Status", + "expected": "STOPPING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + }, + { + "state": "retry", + "matcher": "status", + "expected": 503 + }, + { + "state": "failure", + "matcher": "path", + "argument": "Flow.Status", + "expected": "ERROR" + } + ] + }, + "FlowDeleted": { + "description": "Wait until a flow is deleted", + "operation": "DescribeFlow", + "delay": 3, + "maxAttempts": 40, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 404 + }, + { + "state": "retry", + "matcher": "path", + "argument": "Flow.Status", + "expected": "DELETING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + }, + { + "state": "retry", + "matcher": "status", + "expected": 503 + }, + { + "state": "failure", + "matcher": "path", + "argument": "Flow.Status", + "expected": "ERROR" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconvert/2017-08-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconvert/2017-08-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ad9a1f1a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconvert/2017-08-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconvert/2017-08-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconvert/2017-08-29/paginators-1.json new file mode 100644 index 00000000..5588b9e6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconvert/2017-08-29/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "DescribeEndpoints": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Endpoints" + }, + "ListJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Jobs" + }, + "ListPresets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Presets" + }, + "ListJobTemplates": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "JobTemplates" + }, + "ListQueues": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Queues" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconvert/2017-08-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconvert/2017-08-29/service-2.json.gz new file mode 100644 index 00000000..d2586a28 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediaconvert/2017-08-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..2247d47f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/paginators-1.json new file mode 100644 index 00000000..eb679fff --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "ListInputs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Inputs" + }, + "ListChannels": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Channels" + }, + "ListInputSecurityGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InputSecurityGroups" + }, + "ListOfferings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Offerings" + }, + "ListReservations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Reservations" + }, + "DescribeSchedule": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ScheduleActions" + }, + "ListMultiplexPrograms": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "MultiplexPrograms" + }, + "ListMultiplexes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Multiplexes" + }, + "ListInputDevices": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InputDevices" + }, + "ListInputDeviceTransfers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InputDeviceTransfers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/service-2.json.gz new file mode 100644 index 00000000..b150fb93 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/waiters-2.json new file mode 100644 index 00000000..c0e618d7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/medialive/2017-10-14/waiters-2.json @@ -0,0 +1,298 @@ +{ + "version": 2, + "waiters": { + "ChannelCreated": { + "description": "Wait until a channel has been created", + "operation": "DescribeChannel", + "delay": 3, + "maxAttempts": 5, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "IDLE" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "CREATING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + }, + { + "state": "failure", + "matcher": "path", + "argument": "State", + "expected": "CREATE_FAILED" + } + ] + }, + "ChannelRunning": { + "description": "Wait until a channel is running", + "operation": "DescribeChannel", + "delay": 5, + "maxAttempts": 120, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "RUNNING" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "STARTING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "ChannelStopped": { + "description": "Wait until a channel has is stopped", + "operation": "DescribeChannel", + "delay": 5, + "maxAttempts": 60, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "IDLE" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "STOPPING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "ChannelDeleted": { + "description": "Wait until a channel has been deleted", + "operation": "DescribeChannel", + "delay": 5, + "maxAttempts": 84, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "DELETED" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "DELETING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "InputAttached": { + "description": "Wait until an input has been attached", + "operation": "DescribeInput", + "delay": 5, + "maxAttempts": 20, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "ATTACHED" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "DETACHED" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "InputDetached": { + "description": "Wait until an input has been detached", + "operation": "DescribeInput", + "delay": 5, + "maxAttempts": 84, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "DETACHED" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "CREATING" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "ATTACHED" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "InputDeleted": { + "description": "Wait until an input has been deleted", + "operation": "DescribeInput", + "delay": 5, + "maxAttempts": 20, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "DELETED" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "DELETING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "MultiplexCreated": { + "description": "Wait until a multiplex has been created", + "operation": "DescribeMultiplex", + "delay": 3, + "maxAttempts": 5, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "IDLE" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "CREATING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + }, + { + "state": "failure", + "matcher": "path", + "argument": "State", + "expected": "CREATE_FAILED" + } + ] + }, + "MultiplexRunning": { + "description": "Wait until a multiplex is running", + "operation": "DescribeMultiplex", + "delay": 5, + "maxAttempts": 120, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "RUNNING" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "STARTING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "MultiplexStopped": { + "description": "Wait until a multiplex has is stopped", + "operation": "DescribeMultiplex", + "delay": 5, + "maxAttempts": 28, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "IDLE" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "STOPPING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "MultiplexDeleted": { + "description": "Wait until a multiplex has been deleted", + "operation": "DescribeMultiplex", + "delay": 5, + "maxAttempts": 20, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "State", + "expected": "DELETED" + }, + { + "state": "retry", + "matcher": "path", + "argument": "State", + "expected": "DELETING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage-vod/2018-11-07/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage-vod/2018-11-07/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4a4506cb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage-vod/2018-11-07/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage-vod/2018-11-07/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage-vod/2018-11-07/paginators-1.json new file mode 100644 index 00000000..df498b9f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage-vod/2018-11-07/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListAssets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Assets" + }, + "ListPackagingConfigurations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PackagingConfigurations" + }, + "ListPackagingGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PackagingGroups" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage-vod/2018-11-07/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage-vod/2018-11-07/service-2.json.gz new file mode 100644 index 00000000..fed64842 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage-vod/2018-11-07/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage/2017-10-12/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage/2017-10-12/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..89d53157 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage/2017-10-12/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage/2017-10-12/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage/2017-10-12/paginators-1.json new file mode 100644 index 00000000..24e44104 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage/2017-10-12/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListChannels": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Channels" + }, + "ListOriginEndpoints": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "OriginEndpoints" + }, + "ListHarvestJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "HarvestJobs" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage/2017-10-12/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage/2017-10-12/service-2.json.gz new file mode 100644 index 00000000..99b8317e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackage/2017-10-12/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0aab1cf2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/paginators-1.json new file mode 100644 index 00000000..92079806 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListChannelGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListChannels": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListOriginEndpoints": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/service-2.json.gz new file mode 100644 index 00000000..eb14a6f0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediapackagev2/2022-12-25/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1c092d28 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/paginators-1.json new file mode 100644 index 00000000..7b1c0f7e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListItems": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/service-2.json.gz new file mode 100644 index 00000000..24b94101 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore-data/2017-09-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1007ab28 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/paginators-1.json new file mode 100644 index 00000000..ed3ece02 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListContainers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Containers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/service-2.json.gz new file mode 100644 index 00000000..0db0f8ee Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediastore/2017-09-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediatailor/2018-04-23/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediatailor/2018-04-23/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d4b654be Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediatailor/2018-04-23/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediatailor/2018-04-23/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mediatailor/2018-04-23/paginators-1.json new file mode 100644 index 00000000..fe39ff81 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mediatailor/2018-04-23/paginators-1.json @@ -0,0 +1,52 @@ +{ + "pagination": { + "ListPlaybackConfigurations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "GetChannelSchedule": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "ListChannels": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "ListSourceLocations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "ListVodSources": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "ListAlerts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "ListPrefetchSchedules": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + }, + "ListLiveSources": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mediatailor/2018-04-23/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mediatailor/2018-04-23/service-2.json.gz new file mode 100644 index 00000000..e0565732 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mediatailor/2018-04-23/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..7590a8c1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/paginators-1.json new file mode 100644 index 00000000..807d0527 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListDICOMImportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "jobSummaries" + }, + "ListDatastores": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "datastoreSummaries" + }, + "ListImageSetVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "imageSetPropertiesList" + }, + "SearchImageSets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "imageSetsMetadataSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/service-2.json.gz new file mode 100644 index 00000000..e0fd4396 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/medical-imaging/2023-07-19/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..7d087745 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/paginators-1.json new file mode 100644 index 00000000..672949b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/paginators-1.json @@ -0,0 +1,76 @@ +{ + "pagination": { + "DescribeACLs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ACLs" + }, + "DescribeClusters": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Clusters" + }, + "DescribeEngineVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EngineVersions" + }, + "DescribeEvents": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Events" + }, + "DescribeParameterGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ParameterGroups" + }, + "DescribeParameters": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Parameters" + }, + "DescribeReservedNodes": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ReservedNodes" + }, + "DescribeReservedNodesOfferings": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ReservedNodesOfferings" + }, + "DescribeServiceUpdates": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ServiceUpdates" + }, + "DescribeSnapshots": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Snapshots" + }, + "DescribeSubnetGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SubnetGroups" + }, + "DescribeUsers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Users" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/service-2.json.gz new file mode 100644 index 00000000..aff99064 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/memorydb/2021-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..99cc81f5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/service-2.json.gz new file mode 100644 index 00000000..3193c79c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/meteringmarketplace/2016-01-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5e770483 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/paginators-1.json new file mode 100644 index 00000000..97efd0a5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListCreatedArtifacts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CreatedArtifactList" + }, + "ListDiscoveredResources": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DiscoveredResourceList" + }, + "ListMigrationTasks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "MigrationTaskSummaryList" + }, + "ListProgressUpdateStreams": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ProgressUpdateStreamSummaryList" + }, + "ListApplicationStates": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ApplicationStateList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/service-2.json.gz new file mode 100644 index 00000000..0df954e8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mgh/2017-05-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..adc2ad1e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/paginators-1.json new file mode 100644 index 00000000..6cdc06a7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/paginators-1.json @@ -0,0 +1,100 @@ +{ + "pagination": { + "DescribeJobLogItems": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeReplicationConfigurationTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeSourceServers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeVcenterClients": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "DescribeLaunchConfigurationTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListApplications": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListSourceServerActions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListTemplateActions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListWaves": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListExportErrors": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListExports": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListImportErrors": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListImports": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListManagedAccounts": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListConnectors": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/service-2.json.gz new file mode 100644 index 00000000..d19a7614 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mgn/2020-02-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..14bea1ca Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/paginators-1.json new file mode 100644 index 00000000..79ae0ffa --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListApplications": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ApplicationSummaryList" + }, + "ListEnvironmentVpcs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "EnvironmentVpcList" + }, + "ListEnvironments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "EnvironmentSummaryList" + }, + "ListRoutes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RouteSummaryList" + }, + "ListServices": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ServiceSummaryList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/service-2.json.gz new file mode 100644 index 00000000..b0fb5a91 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/migration-hub-refactor-spaces/2021-10-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..64f46db9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/service-2.json.gz new file mode 100644 index 00000000..1df13357 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhub-config/2019-06-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e0c950ed Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/paginators-1.json new file mode 100644 index 00000000..4c452221 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/paginators-1.json @@ -0,0 +1,46 @@ +{ + "pagination": { + "ListPlugins": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "plugins" + }, + "ListTemplateStepGroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "templateStepGroupSummary" + }, + "ListTemplateSteps": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "templateStepSummaryList" + }, + "ListTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "templateSummary" + }, + "ListWorkflowStepGroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workflowStepGroupsSummary" + }, + "ListWorkflowSteps": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workflowStepsSummary" + }, + "ListWorkflows": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "migrationWorkflowSummary" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/service-2.json.gz new file mode 100644 index 00000000..9c061f6c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhuborchestrator/2021-08-28/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f5eb2c67 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/paginators-1.json new file mode 100644 index 00000000..889a45ef --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "GetServerDetails": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "associatedApplications" + }, + "ListApplicationComponents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "applicationComponentInfos" + }, + "ListCollectors": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "Collectors" + }, + "ListImportFileTask": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "taskInfos" + }, + "ListServers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "serverInfos" + }, + "ListAnalyzableServers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "analyzableServers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/paginators-1.sdk-extras.json new file mode 100644 index 00000000..2524463a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/paginators-1.sdk-extras.json @@ -0,0 +1,12 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "GetServerDetails": { + "non_aggregate_keys": [ + "serverDetail" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/service-2.json.gz new file mode 100644 index 00000000..c5d22cfb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/migrationhubstrategy/2020-02-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..79326fe9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/paginators-1.json new file mode 100644 index 00000000..e86bb7d0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListBundles": { + "result_key": "bundleList", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + }, + "ListProjects": { + "result_key": "projects", + "output_token": "nextToken", + "input_token": "nextToken", + "limit_key": "maxResults" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/service-2.json.gz new file mode 100644 index 00000000..7d578567 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mobile/2017-07-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mq/2017-11-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mq/2017-11-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ff0ea921 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mq/2017-11-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mq/2017-11-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mq/2017-11-27/paginators-1.json new file mode 100644 index 00000000..55160732 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mq/2017-11-27/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListBrokers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "BrokerSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mq/2017-11-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mq/2017-11-27/service-2.json.gz new file mode 100644 index 00000000..9cf294ed Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mq/2017-11-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5885d9a0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/paginators-1.json new file mode 100644 index 00000000..ea50cacc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/paginators-1.json @@ -0,0 +1,58 @@ +{ + "pagination": { + "ListAssignmentsForHIT": { + "result_key": "Assignments", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListQualificationTypes": { + "result_key": "QualificationTypes", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListHITs": { + "result_key": "HITs", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListWorkerBlocks": { + "result_key": "WorkerBlocks", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListReviewableHITs": { + "result_key": "HITs", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListHITsForQualificationType": { + "result_key": "HITs", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListQualificationRequests": { + "result_key": "QualificationRequests", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListWorkersWithQualificationType": { + "result_key": "Qualifications", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListBonusPayments": { + "result_key": "BonusPayments", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/service-2.json.gz new file mode 100644 index 00000000..afb86b2d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mturk/2017-01-17/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ce93ab6f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/paginators-1.json new file mode 100644 index 00000000..5e218e46 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListEnvironments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Environments" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/service-2.json.gz new file mode 100644 index 00000000..6c6f0934 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/mwaa/2020-07-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..51a8defc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/paginators-1.json new file mode 100644 index 00000000..cb2bd93c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListGraphSnapshots": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "graphSnapshots" + }, + "ListGraphs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "graphs" + }, + "ListImportTasks": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "tasks" + }, + "ListPrivateGraphEndpoints": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "privateGraphEndpoints" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/service-2.json.gz new file mode 100644 index 00000000..b9ef2a72 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/waiters-2.json new file mode 100644 index 00000000..52017fe1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune-graph/2023-11-29/waiters-2.json @@ -0,0 +1,168 @@ +{ + "version" : 2, + "waiters" : { + "GraphAvailable" : { + "description" : "Wait until Graph is Available", + "delay" : 60, + "maxAttempts" : 480, + "operation" : "GetGraph", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "DELETING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "AVAILABLE" + } ] + }, + "GraphDeleted" : { + "description" : "Wait until Graph is Deleted", + "delay" : 60, + "maxAttempts" : 60, + "operation" : "GetGraph", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status != 'DELETING'", + "state" : "failure", + "expected" : true + }, { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + } ] + }, + "GraphSnapshotAvailable" : { + "description" : "Wait until GraphSnapshot is Available", + "delay" : 60, + "maxAttempts" : 120, + "operation" : "GetGraphSnapshot", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "DELETING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "AVAILABLE" + } ] + }, + "GraphSnapshotDeleted" : { + "description" : "Wait until GraphSnapshot is Deleted", + "delay" : 60, + "maxAttempts" : 60, + "operation" : "GetGraphSnapshot", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status != 'DELETING'", + "state" : "failure", + "expected" : true + }, { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + } ] + }, + "ImportTaskCancelled" : { + "description" : "Wait until Import Task is Cancelled", + "delay" : 60, + "maxAttempts" : 60, + "operation" : "GetImportTask", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status != 'CANCELLING'", + "state" : "failure", + "expected" : true + }, { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "CANCELLED" + } ] + }, + "ImportTaskSuccessful" : { + "description" : "Wait until Import Task is Successful", + "delay" : 60, + "maxAttempts" : 480, + "operation" : "GetImportTask", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "CANCELLING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "CANCELLED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "ROLLING_BACK" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "SUCCEEDED" + } ] + }, + "PrivateGraphEndpointAvailable" : { + "description" : "Wait until PrivateGraphEndpoint is Available", + "delay" : 10, + "maxAttempts" : 180, + "operation" : "GetPrivateGraphEndpoint", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "DELETING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "AVAILABLE" + } ] + }, + "PrivateGraphEndpointDeleted" : { + "description" : "Wait until PrivateGraphEndpoint is Deleted", + "delay" : 10, + "maxAttempts" : 180, + "operation" : "GetPrivateGraphEndpoint", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status != 'DELETING'", + "state" : "failure", + "expected" : true + }, { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + } ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e7f49c5d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/paginators-1.json new file mode 100644 index 00000000..1de13039 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/paginators-1.json @@ -0,0 +1,100 @@ +{ + "pagination": { + "DescribeDBEngineVersions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBEngineVersions" + }, + "DescribeDBInstances": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBInstances" + }, + "DescribeDBParameterGroups": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBParameterGroups" + }, + "DescribeDBParameters": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "Parameters" + }, + "DescribeDBSubnetGroups": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBSubnetGroups" + }, + "DescribeEngineDefaultParameters": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "EngineDefaults.Marker", + "result_key": "EngineDefaults.Parameters" + }, + "DescribeEventSubscriptions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "EventSubscriptionsList" + }, + "DescribeEvents": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "Events" + }, + "DescribeOrderableDBInstanceOptions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "OrderableDBInstanceOptions" + }, + "DescribeDBClusterParameterGroups": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBClusterParameterGroups" + }, + "DescribeDBClusterParameters": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "Parameters" + }, + "DescribeDBClusterSnapshots": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBClusterSnapshots" + }, + "DescribeDBClusters": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBClusters" + }, + "DescribePendingMaintenanceActions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "PendingMaintenanceActions" + }, + "DescribeDBClusterEndpoints": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBClusterEndpoints" + }, + "DescribeGlobalClusters": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "GlobalClusters" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/service-2.json.gz new file mode 100644 index 00000000..354b014a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/service-2.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/service-2.sdk-extras.json new file mode 100644 index 00000000..85e8a104 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/service-2.sdk-extras.json @@ -0,0 +1,23 @@ + { + "version": 1.0, + "merge": { + "shapes": { + "CopyDBClusterSnapshotMessage": { + "members": { + "SourceRegion": { + "shape": "String", + "documentation": "

The ID of the region that contains the snapshot to be copied.

" + } + } + }, + "CreateDBClusterMessage": { + "members": { + "SourceRegion": { + "shape": "String", + "documentation": "

The ID of the region that contains the source for the db cluster.

" + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/waiters-2.json new file mode 100644 index 00000000..e75f03b2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/neptune/2014-10-31/waiters-2.json @@ -0,0 +1,90 @@ +{ + "version": 2, + "waiters": { + "DBInstanceAvailable": { + "delay": 30, + "operation": "DescribeDBInstances", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "incompatible-restore", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "incompatible-parameters", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + } + ] + }, + "DBInstanceDeleted": { + "delay": 30, + "operation": "DescribeDBInstances", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "DBInstanceNotFound", + "matcher": "error", + "state": "success" + }, + { + "expected": "creating", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "modifying", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "resetting-master-credentials", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptunedata/2023-08-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/neptunedata/2023-08-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f4fa4377 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/neptunedata/2023-08-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptunedata/2023-08-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/neptunedata/2023-08-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/neptunedata/2023-08-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/neptunedata/2023-08-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/neptunedata/2023-08-01/service-2.json.gz new file mode 100644 index 00000000..3dad6a8d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/neptunedata/2023-08-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3a5f19a8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/paginators-1.json new file mode 100644 index 00000000..868d0661 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListFirewallPolicies": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FirewallPolicies" + }, + "ListFirewalls": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Firewalls" + }, + "ListRuleGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RuleGroups" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tags" + }, + "ListTLSInspectionConfigurations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "TLSInspectionConfigurations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/service-2.json.gz new file mode 100644 index 00000000..f8eeea96 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/network-firewall/2020-11-12/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..972ada27 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/paginators-1.json new file mode 100644 index 00000000..7196ace6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/paginators-1.json @@ -0,0 +1,130 @@ +{ + "pagination": { + "DescribeGlobalNetworks": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "GlobalNetworks" + }, + "GetCustomerGatewayAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CustomerGatewayAssociations" + }, + "GetDevices": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Devices" + }, + "GetLinkAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "LinkAssociations" + }, + "GetLinks": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Links" + }, + "GetSites": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Sites" + }, + "GetTransitGatewayRegistrations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "TransitGatewayRegistrations" + }, + "GetConnections": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Connections" + }, + "GetTransitGatewayConnectPeerAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "TransitGatewayConnectPeerAssociations" + }, + "GetNetworkResourceCounts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "NetworkResourceCounts" + }, + "GetNetworkResourceRelationships": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Relationships" + }, + "GetNetworkResources": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "NetworkResources" + }, + "GetNetworkTelemetry": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "NetworkTelemetry" + }, + "GetConnectPeerAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ConnectPeerAssociations" + }, + "GetCoreNetworkChangeSet": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CoreNetworkChanges" + }, + "ListAttachments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Attachments" + }, + "ListConnectPeers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ConnectPeers" + }, + "ListCoreNetworkPolicyVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CoreNetworkPolicyVersions" + }, + "ListCoreNetworks": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CoreNetworks" + }, + "GetCoreNetworkChangeEvents": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CoreNetworkChangeEvents" + }, + "ListPeerings": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Peerings" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/service-2.json.gz new file mode 100644 index 00000000..573f44fc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmanager/2019-07-05/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..786be74e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/paginators-1.json new file mode 100644 index 00000000..d885a0fb --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListMonitors": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "monitors" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/service-2.json.gz new file mode 100644 index 00000000..6615e3b0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/networkmonitor/2023-08-01/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b42748bc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/paginators-1.json new file mode 100644 index 00000000..e11f664c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/paginators-1.json @@ -0,0 +1,58 @@ +{ + "pagination": { + "ListEulaAcceptances": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "eulaAcceptances" + }, + "ListEulas": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "eulas" + }, + "ListLaunchProfileMembers": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "members" + }, + "ListLaunchProfiles": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "launchProfiles" + }, + "ListStreamingImages": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "streamingImages" + }, + "ListStreamingSessions": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "sessions" + }, + "ListStudioComponents": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "studioComponents" + }, + "ListStudioMembers": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "members" + }, + "ListStudios": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "studios" + }, + "ListStreamingSessionBackups": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "streamingSessionBackups" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/service-2.json.gz new file mode 100644 index 00000000..17c0ad6a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/waiters-2.json new file mode 100644 index 00000000..2c37a115 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/nimble/2020-08-01/waiters-2.json @@ -0,0 +1,234 @@ +{ + "version" : 2, + "waiters" : { + "LaunchProfileDeleted" : { + "description" : "Wait until a LaunchProfile is Deleted. Use this after invoking DeleteLaunchProfile", + "delay" : 5, + "maxAttempts" : 150, + "operation" : "GetLaunchProfile", + "acceptors" : [ { + "matcher" : "path", + "argument" : "launchProfile.state", + "state" : "success", + "expected" : "DELETED" + }, { + "matcher" : "path", + "argument" : "launchProfile.state", + "state" : "failure", + "expected" : "DELETE_FAILED" + } ] + }, + "LaunchProfileReady" : { + "description" : "Wait until a LaunchProfile is Ready. Use this after invoking CreateLaunchProfile or UpdateLaunchProfile", + "delay" : 5, + "maxAttempts" : 150, + "operation" : "GetLaunchProfile", + "acceptors" : [ { + "matcher" : "path", + "argument" : "launchProfile.state", + "state" : "success", + "expected" : "READY" + }, { + "matcher" : "path", + "argument" : "launchProfile.state", + "state" : "failure", + "expected" : "CREATE_FAILED" + }, { + "matcher" : "path", + "argument" : "launchProfile.state", + "state" : "failure", + "expected" : "UPDATE_FAILED" + } ] + }, + "StreamingImageDeleted" : { + "description" : "Wait until a StreamingImage Deleted. Use this after invoking DeleteStreamingImage", + "delay" : 2, + "maxAttempts" : 60, + "operation" : "GetStreamingImage", + "acceptors" : [ { + "matcher" : "path", + "argument" : "streamingImage.state", + "state" : "success", + "expected" : "DELETED" + }, { + "matcher" : "path", + "argument" : "streamingImage.state", + "state" : "failure", + "expected" : "DELETE_FAILED" + } ] + }, + "StreamingImageReady" : { + "description" : "Wait until a StreamingImage is Ready. Use this after invoking CreateStreamingImage or UpdateStreamingImage", + "delay" : 2, + "maxAttempts" : 60, + "operation" : "GetStreamingImage", + "acceptors" : [ { + "matcher" : "path", + "argument" : "streamingImage.state", + "state" : "success", + "expected" : "READY" + }, { + "matcher" : "path", + "argument" : "streamingImage.state", + "state" : "failure", + "expected" : "CREATE_FAILED" + }, { + "matcher" : "path", + "argument" : "streamingImage.state", + "state" : "failure", + "expected" : "UPDATE_FAILED" + } ] + }, + "StreamingSessionDeleted" : { + "description" : "Wait until a StreamingSessionDeleted. Use this after invoking DeleteStreamingSession", + "delay" : 5, + "maxAttempts" : 180, + "operation" : "GetStreamingSession", + "acceptors" : [ { + "matcher" : "path", + "argument" : "session.state", + "state" : "success", + "expected" : "DELETED" + }, { + "matcher" : "path", + "argument" : "session.state", + "state" : "failure", + "expected" : "DELETE_FAILED" + } ] + }, + "StreamingSessionReady" : { + "description" : "Wait until a StreamingSession is ready. Use this after invoking CreateStreamingSession, StartStreamingSession", + "delay" : 10, + "maxAttempts" : 180, + "operation" : "GetStreamingSession", + "acceptors" : [ { + "matcher" : "path", + "argument" : "session.state", + "state" : "success", + "expected" : "READY" + }, { + "matcher" : "path", + "argument" : "session.state", + "state" : "failure", + "expected" : "CREATE_FAILED" + }, { + "matcher" : "path", + "argument" : "session.state", + "state" : "failure", + "expected" : "START_FAILED" + } ] + }, + "StreamingSessionStopped" : { + "description" : "Wait until a StreamingSessionStopped. Use this after invoking StopStreamingSession", + "delay" : 5, + "maxAttempts" : 180, + "operation" : "GetStreamingSession", + "acceptors" : [ { + "matcher" : "path", + "argument" : "session.state", + "state" : "success", + "expected" : "STOPPED" + }, { + "matcher" : "path", + "argument" : "session.state", + "state" : "failure", + "expected" : "STOP_FAILED" + } ] + }, + "StreamingSessionStreamReady" : { + "description" : "Wait until a StreamingSessionStream is ready. Use this after invoking CreateStreamingSessionStream", + "delay" : 5, + "maxAttempts" : 30, + "operation" : "GetStreamingSessionStream", + "acceptors" : [ { + "matcher" : "path", + "argument" : "stream.state", + "state" : "success", + "expected" : "READY" + }, { + "matcher" : "path", + "argument" : "stream.state", + "state" : "failure", + "expected" : "CREATE_FAILED" + } ] + }, + "StudioComponentDeleted" : { + "description" : "Wait until a StudioComponent Deleted. Use this after invoking DeleteStudioComponent", + "delay" : 1, + "maxAttempts" : 120, + "operation" : "GetStudioComponent", + "acceptors" : [ { + "matcher" : "path", + "argument" : "studioComponent.state", + "state" : "success", + "expected" : "DELETED" + }, { + "matcher" : "path", + "argument" : "studioComponent.state", + "state" : "failure", + "expected" : "DELETE_FAILED" + } ] + }, + "StudioComponentReady" : { + "description" : "Wait until a StudioComponent is Ready. Use this after invoking CreateStudioComponent or UpdateStudioComponent", + "delay" : 2, + "maxAttempts" : 60, + "operation" : "GetStudioComponent", + "acceptors" : [ { + "matcher" : "path", + "argument" : "studioComponent.state", + "state" : "success", + "expected" : "READY" + }, { + "matcher" : "path", + "argument" : "studioComponent.state", + "state" : "failure", + "expected" : "CREATE_FAILED" + }, { + "matcher" : "path", + "argument" : "studioComponent.state", + "state" : "failure", + "expected" : "UPDATE_FAILED" + } ] + }, + "StudioDeleted" : { + "description" : "Wait until a Studio is Deleted. Use this after invoking DeleteStudio.", + "delay" : 2, + "maxAttempts" : 60, + "operation" : "GetStudio", + "acceptors" : [ { + "matcher" : "path", + "argument" : "studio.state", + "state" : "success", + "expected" : "DELETED" + }, { + "matcher" : "path", + "argument" : "studio.state", + "state" : "failure", + "expected" : "DELETE_FAILED" + } ] + }, + "StudioReady" : { + "description" : "Wait until a Studio is Ready. Use this after invoking CreateStudio, UpdateStudio, or StartStudioSSOConfigurationRepair", + "delay" : 2, + "maxAttempts" : 60, + "operation" : "GetStudio", + "acceptors" : [ { + "matcher" : "path", + "argument" : "studio.state", + "state" : "success", + "expected" : "READY" + }, { + "matcher" : "path", + "argument" : "studio.state", + "state" : "failure", + "expected" : "CREATE_FAILED" + }, { + "matcher" : "path", + "argument" : "studio.state", + "state" : "failure", + "expected" : "UPDATE_FAILED" + } ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/oam/2022-06-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/oam/2022-06-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ffe9c55b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/oam/2022-06-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/oam/2022-06-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/oam/2022-06-10/paginators-1.json new file mode 100644 index 00000000..3595f009 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/oam/2022-06-10/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListAttachedLinks": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListLinks": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + }, + "ListSinks": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/oam/2022-06-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/oam/2022-06-10/service-2.json.gz new file mode 100644 index 00000000..6e2d143c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/oam/2022-06-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..066904b1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/paginators-1.json new file mode 100644 index 00000000..bbb13cb1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/paginators-1.json @@ -0,0 +1,124 @@ +{ + "pagination": { + "ListAnnotationImportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "annotationImportJobs" + }, + "ListAnnotationStores": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "annotationStores" + }, + "ListReadSetActivationJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "activationJobs" + }, + "ListReadSetExportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "exportJobs" + }, + "ListReadSetImportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "importJobs" + }, + "ListReadSets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "readSets" + }, + "ListReferenceImportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "importJobs" + }, + "ListReferenceStores": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "referenceStores" + }, + "ListReferences": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "references" + }, + "ListRunGroups": { + "input_token": "startingToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListRunTasks": { + "input_token": "startingToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListRuns": { + "input_token": "startingToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListSequenceStores": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "sequenceStores" + }, + "ListVariantImportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "variantImportJobs" + }, + "ListVariantStores": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "variantStores" + }, + "ListWorkflows": { + "input_token": "startingToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListMultipartReadSetUploads": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "uploads" + }, + "ListReadSetUploadParts": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "parts" + }, + "ListAnnotationStoreVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "annotationStoreVersions" + }, + "ListShares": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "shares" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/service-2.json.gz new file mode 100644 index 00000000..6ae67f1c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/waiters-2.json new file mode 100644 index 00000000..9e82e101 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/omics/2022-11-28/waiters-2.json @@ -0,0 +1,546 @@ +{ + "version" : 2, + "waiters" : { + "AnnotationImportJobCreated" : { + "description" : "Wait until an annotation import is completed", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetAnnotationImportJob", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "SUBMITTED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "IN_PROGRESS" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "CANCELLED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "COMPLETED" + } ] + }, + "AnnotationStoreCreated" : { + "description" : "Wait until an annotation store is created", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetAnnotationStore", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "ACTIVE" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "CREATING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "UPDATING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + } ] + }, + "AnnotationStoreDeleted" : { + "description" : "Wait until an annotation store is deleted.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetAnnotationStore", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "DELETED" + }, { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "DELETING" + } ] + }, + "AnnotationStoreVersionCreated" : { + "description" : "Wait until an annotation store version is created", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetAnnotationStoreVersion", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "ACTIVE" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "CREATING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "UPDATING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + } ] + }, + "AnnotationStoreVersionDeleted" : { + "description" : "Wait until an annotation store version is deleted.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetAnnotationStoreVersion", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "DELETED" + }, { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "DELETING" + } ] + }, + "ReadSetActivationJobCompleted" : { + "description" : "Wait until a job is completed.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetReadSetActivationJob", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "COMPLETED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "SUBMITTED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "IN_PROGRESS" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "CANCELLING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "CANCELLED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "COMPLETED_WITH_FAILURES" + } ] + }, + "ReadSetExportJobCompleted" : { + "description" : "Wait until a job is completed.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetReadSetExportJob", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "COMPLETED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "SUBMITTED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "IN_PROGRESS" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "CANCELLING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "CANCELLED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "COMPLETED_WITH_FAILURES" + } ] + }, + "ReadSetImportJobCompleted" : { + "description" : "Wait until a job is completed.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetReadSetImportJob", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "COMPLETED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "SUBMITTED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "IN_PROGRESS" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "CANCELLING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "CANCELLED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "COMPLETED_WITH_FAILURES" + } ] + }, + "ReferenceImportJobCompleted" : { + "description" : "Wait until a job is completed.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetReferenceImportJob", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "COMPLETED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "SUBMITTED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "IN_PROGRESS" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "CANCELLING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "CANCELLED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "COMPLETED_WITH_FAILURES" + } ] + }, + "RunCompleted" : { + "description" : "Wait until a run is completed.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetRun", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "COMPLETED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "PENDING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "STARTING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "RUNNING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "STOPPING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + } ] + }, + "RunRunning" : { + "description" : "Wait until a run is running.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetRun", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "RUNNING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "PENDING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "STARTING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "CANCELLED" + } ] + }, + "TaskCompleted" : { + "description" : "Wait until a task is completed.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetRunTask", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "COMPLETED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "PENDING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "STARTING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "RUNNING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "STOPPING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + } ] + }, + "TaskRunning" : { + "description" : "Wait until a task is running.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetRunTask", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "RUNNING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "PENDING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "STARTING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "CANCELLED" + } ] + }, + "VariantImportJobCreated" : { + "description" : "Wait until variant import is completed", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetVariantImportJob", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "SUBMITTED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "IN_PROGRESS" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "CANCELLED" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "COMPLETED" + } ] + }, + "VariantStoreCreated" : { + "description" : "Wait until a variant store is created", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetVariantStore", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "ACTIVE" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "CREATING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "UPDATING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + } ] + }, + "VariantStoreDeleted" : { + "description" : "Wait until a variant store is deleted.", + "delay" : 30, + "maxAttempts" : 20, + "operation" : "GetVariantStore", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "DELETED" + }, { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "DELETING" + } ] + }, + "WorkflowActive" : { + "description" : "Wait until a workflow is active.", + "delay" : 3, + "maxAttempts" : 10, + "operation" : "GetWorkflow", + "acceptors" : [ { + "matcher" : "path", + "argument" : "status", + "state" : "success", + "expected" : "ACTIVE" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "CREATING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "retry", + "expected" : "UPDATING" + }, { + "matcher" : "path", + "argument" : "status", + "state" : "failure", + "expected" : "FAILED" + } ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..15ab8cef Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/service-2.json.gz new file mode 100644 index 00000000..d8825eb1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearch/2021-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opensearchserverless/2021-11-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearchserverless/2021-11-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..9c4d0849 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearchserverless/2021-11-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opensearchserverless/2021-11-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearchserverless/2021-11-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearchserverless/2021-11-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opensearchserverless/2021-11-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearchserverless/2021-11-01/service-2.json.gz new file mode 100644 index 00000000..10529ae7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/opensearchserverless/2021-11-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3facd774 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/paginators-1.json new file mode 100644 index 00000000..77936158 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "DescribeEcsClusters": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "EcsClusters" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/service-2.json.gz new file mode 100644 index 00000000..0aa17fae Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/waiters-2.json new file mode 100644 index 00000000..1b9dfaad --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworks/2013-02-18/waiters-2.json @@ -0,0 +1,289 @@ +{ + "version": 2, + "waiters": { + "AppExists": { + "delay": 1, + "operation": "DescribeApps", + "maxAttempts": 40, + "acceptors": [ + { + "expected": 200, + "matcher": "status", + "state": "success" + }, + { + "matcher": "status", + "expected": 400, + "state": "failure" + } + ] + }, + "DeploymentSuccessful": { + "delay": 15, + "operation": "DescribeDeployments", + "maxAttempts": 40, + "description": "Wait until a deployment has completed successfully.", + "acceptors": [ + { + "expected": "successful", + "matcher": "pathAll", + "state": "success", + "argument": "Deployments[].Status" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Deployments[].Status" + } + ] + }, + "InstanceOnline": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "description": "Wait until OpsWorks instance is online.", + "acceptors": [ + { + "expected": "online", + "matcher": "pathAll", + "state": "success", + "argument": "Instances[].Status" + }, + { + "expected": "setup_failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "shutting_down", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "start_failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "stopped", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "terminating", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "stop_failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + } + ] + }, + "InstanceRegistered": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "description": "Wait until OpsWorks instance is registered.", + "acceptors": [ + { + "expected": "registered", + "matcher": "pathAll", + "state": "success", + "argument": "Instances[].Status" + }, + { + "expected": "setup_failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "shutting_down", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "stopped", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "stopping", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "terminating", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "terminated", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "stop_failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + } + ] + }, + "InstanceStopped": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "description": "Wait until OpsWorks instance is stopped.", + "acceptors": [ + { + "expected": "stopped", + "matcher": "pathAll", + "state": "success", + "argument": "Instances[].Status" + }, + { + "expected": "booting", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "requested", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "running_setup", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "setup_failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "start_failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "stop_failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + } + ] + }, + "InstanceTerminated": { + "delay": 15, + "operation": "DescribeInstances", + "maxAttempts": 40, + "description": "Wait until OpsWorks instance is terminated.", + "acceptors": [ + { + "expected": "terminated", + "matcher": "pathAll", + "state": "success", + "argument": "Instances[].Status" + }, + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "success" + }, + { + "expected": "booting", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "online", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "pending", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "requested", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "running_setup", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "setup_failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + }, + { + "expected": "start_failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Instances[].Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c69da96a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/paginators-1.json new file mode 100644 index 00000000..e714aab1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "DescribeBackups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Backups" + }, + "DescribeEvents": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ServerEvents" + }, + "DescribeServers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Servers" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Tags" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/service-2.json.gz new file mode 100644 index 00000000..5c226ada Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/waiters-2.json new file mode 100644 index 00000000..f37dd040 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/opsworkscm/2016-11-01/waiters-2.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "waiters": { + "NodeAssociated": { + "delay": 15, + "maxAttempts": 15, + "operation": "DescribeNodeAssociationStatus", + "description": "Wait until node is associated or disassociated.", + "acceptors": [ + { + "expected": "SUCCESS", + "state": "success", + "matcher": "path", + "argument": "NodeAssociationStatus" + }, + { + "expected": "FAILED", + "state": "failure", + "matcher": "path", + "argument": "NodeAssociationStatus" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5f2a57bb Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/examples-1.json new file mode 100644 index 00000000..8e39290e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/examples-1.json @@ -0,0 +1,1409 @@ +{ + "version": "1.0", + "examples": { + "AcceptHandshake": [ + { + "input": { + "HandshakeId": "h-examplehandshakeid111" + }, + "output": { + "Handshake": { + "Action": "INVITE", + "Arn": "arn:aws:organizations::111111111111:handshake/o-exampleorgid/invite/h-examplehandshakeid111", + "ExpirationTimestamp": "20170228T1215Z", + "Id": "h-examplehandshakeid111", + "Parties": [ + { + "Id": "o-exampleorgid", + "Type": "ORGANIZATION" + }, + { + "Id": "juan@example.com", + "Type": "EMAIL" + } + ], + "RequestedTimestamp": "20170214T1215Z", + "Resources": [ + { + "Resources": [ + { + "Type": "MASTER_EMAIL", + "Value": "bill@amazon.com" + }, + { + "Type": "MASTER_NAME", + "Value": "Org Master Account" + }, + { + "Type": "ORGANIZATION_FEATURE_SET", + "Value": "ALL" + } + ], + "Type": "ORGANIZATION", + "Value": "o-exampleorgid" + }, + { + "Type": "ACCOUNT", + "Value": "222222222222" + } + ], + "State": "ACCEPTED" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Bill is the owner of an organization, and he invites Juan's account (222222222222) to join his organization. The following example shows Juan's account accepting the handshake and thus agreeing to the invitation.", + "id": "to-accept-a-handshake-from-another-account-1472500561150", + "title": "To accept a handshake from another account" + } + ], + "AttachPolicy": [ + { + "input": { + "PolicyId": "p-examplepolicyid111", + "TargetId": "ou-examplerootid111-exampleouid111" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to attach a service control policy (SCP) to an OU:\n", + "id": "to-attach-a-policy-to-an-ou", + "title": "To attach a policy to an OU" + }, + { + "input": { + "PolicyId": "p-examplepolicyid111", + "TargetId": "333333333333" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to attach a service control policy (SCP) to an account:\n", + "id": "to-attach-a-policy-to-an-account", + "title": "To attach a policy to an account" + } + ], + "CancelHandshake": [ + { + "input": { + "HandshakeId": "h-examplehandshakeid111" + }, + "output": { + "Handshake": { + "Action": "INVITE", + "Arn": "arn:aws:organizations::111111111111:handshake/o-exampleorgid/invite/h-examplehandshakeid111", + "ExpirationTimestamp": "20170228T1215Z", + "Id": "h-examplehandshakeid111", + "Parties": [ + { + "Id": "o-exampleorgid", + "Type": "ORGANIZATION" + }, + { + "Id": "susan@example.com", + "Type": "EMAIL" + } + ], + "RequestedTimestamp": "20170214T1215Z", + "Resources": [ + { + "Resources": [ + { + "Type": "MASTER_EMAIL", + "Value": "bill@example.com" + }, + { + "Type": "MASTER_NAME", + "Value": "Master Account" + }, + { + "Type": "ORGANIZATION_FEATURE_SET", + "Value": "CONSOLIDATED_BILLING" + } + ], + "Type": "ORGANIZATION", + "Value": "o-exampleorgid" + }, + { + "Type": "ACCOUNT", + "Value": "222222222222" + }, + { + "Type": "NOTES", + "Value": "This is a request for Susan's account to join Bob's organization." + } + ], + "State": "CANCELED" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Bill previously sent an invitation to Susan's account to join his organization. He changes his mind and decides to cancel the invitation before Susan accepts it. The following example shows Bill's cancellation:\n", + "id": "to-cancel-a-handshake-sent-to-a-member-account-1472501320506", + "title": "To cancel a handshake sent to a member account" + } + ], + "CreateAccount": [ + { + "input": { + "AccountName": "Production Account", + "Email": "susan@example.com" + }, + "output": { + "CreateAccountStatus": { + "Id": "car-examplecreateaccountrequestid111", + "State": "IN_PROGRESS" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The owner of an organization creates a member account in the organization. The following example shows that when the organization owner creates the member account, the account is preconfigured with the name \"Production Account\" and an owner email address of susan@example.com. An IAM role is automatically created using the default name because the roleName parameter is not used. AWS Organizations sends Susan a \"Welcome to AWS\" email:\n\n", + "id": "to-create-a-new-account-that-is-automatically-part-of-the-organization-1472501463507", + "title": "To create a new account that is automatically part of the organization" + } + ], + "CreateOrganization": [ + { + "input": { + }, + "output": { + "Organization": { + "Arn": "arn:aws:organizations::111111111111:organization/o-exampleorgid", + "AvailablePolicyTypes": [ + { + "Status": "ENABLED", + "Type": "SERVICE_CONTROL_POLICY" + } + ], + "FeatureSet": "ALL", + "Id": "o-exampleorgid", + "MasterAccountArn": "arn:aws:organizations::111111111111:account/o-exampleorgid/111111111111", + "MasterAccountEmail": "bill@example.com", + "MasterAccountId": "111111111111" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Bill wants to create an organization using credentials from account 111111111111. The following example shows that the account becomes the master account in the new organization. Because he does not specify a feature set, the new organization defaults to all features enabled and service control policies enabled on the root:\n\n", + "id": "to-create-a-new-organization-with-all-features enabled", + "title": "To create a new organization with all features enabled" + }, + { + "input": { + "FeatureSet": "CONSOLIDATED_BILLING" + }, + "output": { + "Organization": { + "Arn": "arn:aws:organizations::111111111111:organization/o-exampleorgid", + "AvailablePolicyTypes": [ + + ], + "FeatureSet": "CONSOLIDATED_BILLING", + "Id": "o-exampleorgid", + "MasterAccountArn": "arn:aws:organizations::111111111111:account/o-exampleorgid/111111111111", + "MasterAccountEmail": "bill@example.com", + "MasterAccountId": "111111111111" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "In the following example, Bill creates an organization using credentials from account 111111111111, and configures the organization to support only the consolidated billing feature set:\n\n", + "id": "to-create-a-new-organization-with-consolidated-billing-features-only", + "title": "To create a new organization with consolidated billing features only" + } + ], + "CreateOrganizationalUnit": [ + { + "input": { + "Name": "AccountingOU", + "ParentId": "r-examplerootid111" + }, + "output": { + "OrganizationalUnit": { + "Arn": "arn:aws:organizations::111111111111:ou/o-exampleorgid/ou-examplerootid111-exampleouid111", + "Id": "ou-examplerootid111-exampleouid111", + "Name": "AccountingOU" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to create an OU that is named AccountingOU. The new OU is directly under the root.:\n\n", + "id": "to-create-a-new-organizational-unit", + "title": "To create a new organization unit" + } + ], + "CreatePolicy": [ + { + "input": { + "Content": "{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":{\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":\\\"s3:*\\\"}}", + "Description": "Enables admins of attached accounts to delegate all S3 permissions", + "Name": "AllowAllS3Actions", + "Type": "SERVICE_CONTROL_POLICY" + }, + "output": { + "Policy": { + "Content": "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Action\":\"s3:*\"}}", + "PolicySummary": { + "Arn": "arn:aws:organizations::111111111111:policy/o-exampleorgid/service_control_policy/p-examplepolicyid111", + "Description": "Allows delegation of all S3 actions", + "Name": "AllowAllS3Actions", + "Type": "SERVICE_CONTROL_POLICY" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to create a service control policy (SCP) that is named AllowAllS3Actions. The JSON string in the content parameter specifies the content in the policy. The parameter string is escaped with backslashes to ensure that the embedded double quotes in the JSON policy are treated as literals in the parameter, which itself is surrounded by double quotes:\n\n", + "id": "to-create-a-service-control-policy", + "title": "To create a service control policy" + } + ], + "DeclineHandshake": [ + { + "input": { + "HandshakeId": "h-examplehandshakeid111" + }, + "output": { + "Handshake": { + "Action": "INVITE", + "Arn": "arn:aws:organizations::111111111111:handshake/o-exampleorgid/invite/h-examplehandshakeid111", + "ExpirationTimestamp": "2016-12-15T19:27:58Z", + "Id": "h-examplehandshakeid111", + "Parties": [ + { + "Id": "222222222222", + "Type": "ACCOUNT" + }, + { + "Id": "o-exampleorgid", + "Type": "ORGANIZATION" + } + ], + "RequestedTimestamp": "2016-11-30T19:27:58Z", + "Resources": [ + { + "Resources": [ + { + "Type": "MASTER_EMAIL", + "Value": "bill@example.com" + }, + { + "Type": "MASTER_NAME", + "Value": "Master Account" + } + ], + "Type": "ORGANIZATION", + "Value": "o-exampleorgid" + }, + { + "Type": "ACCOUNT", + "Value": "222222222222" + }, + { + "Type": "NOTES", + "Value": "This is an invitation to Susan's account to join the Bill's organization." + } + ], + "State": "DECLINED" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows Susan declining an invitation to join Bill's organization. The DeclineHandshake operation returns a handshake object, showing that the state is now DECLINED:", + "id": "to-decline-a-handshake-sent-from-the-master-account-1472502666967", + "title": "To decline a handshake sent from the master account" + } + ], + "DeleteOrganizationalUnit": [ + { + "input": { + "OrganizationalUnitId": "ou-examplerootid111-exampleouid111" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to delete an OU. The example assumes that you previously removed all accounts and other OUs from the OU:\n\n", + "id": "to-delete-an-organizational-unit", + "title": "To delete an organization unit" + } + ], + "DeletePolicy": [ + { + "input": { + "PolicyId": "p-examplepolicyid111" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to delete a policy from an organization. The example assumes that you previously detached the policy from all entities:\n\n", + "id": "to-delete-a-policy", + "title": "To delete a policy" + } + ], + "DescribeAccount": [ + { + "input": { + "AccountId": "555555555555" + }, + "output": { + "Account": { + "Arn": "arn:aws:organizations::111111111111:account/o-exampleorgid/555555555555", + "Email": "anika@example.com", + "Id": "555555555555", + "Name": "Beta Account" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows a user in the master account (111111111111) asking for details about account 555555555555:", + "id": "to-get-the-details-about-an-account-1472503166868", + "title": "To get the details about an account" + } + ], + "DescribeCreateAccountStatus": [ + { + "input": { + "CreateAccountRequestId": "car-exampleaccountcreationrequestid" + }, + "output": { + "CreateAccountStatus": { + "AccountId": "333333333333", + "Id": "car-exampleaccountcreationrequestid", + "State": "SUCCEEDED" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to request the status about a previous request to create an account in an organization. This operation can be called only by a principal from the organization's master account. In the example, the specified \"createAccountRequestId\" comes from the response of the original call to \"CreateAccount\":", + "id": "to-get-information-about-a-request-to-create-an-account-1472503727223", + "title": "To get information about a request to create an account" + } + ], + "DescribeHandshake": [ + { + "input": { + "HandshakeId": "h-examplehandshakeid111" + }, + "output": { + "Handshake": { + "Action": "INVITE", + "Arn": "arn:aws:organizations::111111111111:handshake/o-exampleorgid/invite/h-examplehandshakeid111", + "ExpirationTimestamp": "2016-11-30T17:24:58.046Z", + "Id": "h-examplehandshakeid111", + "Parties": [ + { + "Id": "o-exampleorgid", + "Type": "ORGANIZATION" + }, + { + "Id": "333333333333", + "Type": "ACCOUNT" + } + ], + "RequestedTimestamp": "2016-11-30T17:24:58.046Z", + "Resources": [ + { + "Resources": [ + { + "Type": "MASTER_EMAIL", + "Value": "bill@example.com" + }, + { + "Type": "MASTER_NAME", + "Value": "Master Account" + } + ], + "Type": "ORGANIZATION", + "Value": "o-exampleorgid" + }, + { + "Type": "ACCOUNT", + "Value": "333333333333" + } + ], + "State": "OPEN" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows you how to request details about a handshake. The handshake ID comes either from the original call to \"InviteAccountToOrganization\", or from a call to \"ListHandshakesForAccount\" or \"ListHandshakesForOrganization\":", + "id": "to-get-information-about-a-handshake-1472503400505", + "title": "To get information about a handshake" + } + ], + "DescribeOrganization": [ + { + "output": { + "Organization": { + "Arn": "arn:aws:organizations::111111111111:organization/o-exampleorgid", + "AvailablePolicyTypes": [ + { + "Status": "ENABLED", + "Type": "SERVICE_CONTROL_POLICY" + } + ], + "FeatureSet": "ALL", + "Id": "o-exampleorgid", + "MasterAccountArn": "arn:aws:organizations::111111111111:account/o-exampleorgid/111111111111", + "MasterAccountEmail": "bill@example.com" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to request information about the current user's organization:/n/n", + "id": "to-get-information-about-an-organization-1472503400505", + "title": "To get information about an organization" + } + ], + "DescribeOrganizationalUnit": [ + { + "input": { + "OrganizationalUnitId": "ou-examplerootid111-exampleouid111" + }, + "output": { + "OrganizationalUnit": { + "Arn": "arn:aws:organizations::111111111111:ou/o-exampleorgid/ou-examplerootid111-exampleouid111", + "Id": "ou-examplerootid111-exampleouid111", + "Name": "Accounting Group" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to request details about an OU:/n/n", + "id": "to-get-information-about-an-organizational-unit", + "title": "To get information about an organizational unit" + } + ], + "DescribePolicy": [ + { + "input": { + "PolicyId": "p-examplepolicyid111" + }, + "output": { + "Policy": { + "Content": "{\\n \\\"Version\\\": \\\"2012-10-17\\\",\\n \\\"Statement\\\": [\\n {\\n \\\"Effect\\\": \\\"Allow\\\",\\n \\\"Action\\\": \\\"*\\\",\\n \\\"Resource\\\": \\\"*\\\"\\n }\\n ]\\n}", + "PolicySummary": { + "Arn": "arn:aws:organizations::111111111111:policy/o-exampleorgid/service_control_policy/p-examplepolicyid111", + "AwsManaged": false, + "Description": "Enables admins to delegate S3 permissions", + "Id": "p-examplepolicyid111", + "Name": "AllowAllS3Actions", + "Type": "SERVICE_CONTROL_POLICY" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to request information about a policy:/n/n", + "id": "to-get-information-about-a-policy", + "title": "To get information about a policy" + } + ], + "DetachPolicy": [ + { + "input": { + "PolicyId": "p-examplepolicyid111", + "TargetId": "ou-examplerootid111-exampleouid111" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to detach a policy from an OU:/n/n", + "id": "to-detach-a-policy-from-a-root-ou-or-account", + "title": "To detach a policy from a root, OU, or account" + } + ], + "DisablePolicyType": [ + { + "input": { + "PolicyType": "SERVICE_CONTROL_POLICY", + "RootId": "r-examplerootid111" + }, + "output": { + "Root": { + "Arn": "arn:aws:organizations::111111111111:root/o-exampleorgid/r-examplerootid111", + "Id": "r-examplerootid111", + "Name": "Root", + "PolicyTypes": [ + + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to disable the service control policy (SCP) policy type in a root. The response shows that the PolicyTypes response element no longer includes SERVICE_CONTROL_POLICY:/n/n", + "id": "to-disable-a-policy-type-in-a-root", + "title": "To disable a policy type in a root" + } + ], + "EnableAllFeatures": [ + { + "input": { + }, + "output": { + "Handshake": { + "Action": "ENABLE_ALL_FEATURES", + "Arn": "arn:aws:organizations::111111111111:handshake/o-exampleorgid/enable_all_features/h-examplehandshakeid111", + "ExpirationTimestamp": "2017-02-28T09:35:40.05Z", + "Id": "h-examplehandshakeid111", + "Parties": [ + { + "Id": "o-exampleorgid", + "Type": "ORGANIZATION" + } + ], + "RequestedTimestamp": "2017-02-13T09:35:40.05Z", + "Resources": [ + { + "Type": "ORGANIZATION", + "Value": "o-exampleorgid" + } + ], + "State": "REQUESTED" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows the administrator asking all the invited accounts in the organization to approve enabling all features in the organization. AWS Organizations sends an email to the address that is registered with every invited member account asking the owner to approve the change by accepting the handshake that is sent. After all invited member accounts accept the handshake, the organization administrator can finalize the change to enable all features, and those with appropriate permissions can create policies and apply them to roots, OUs, and accounts:/n/n", + "id": "to-enable-all-features-in-an-organization", + "title": "To enable all features in an organization" + } + ], + "EnablePolicyType": [ + { + "input": { + "PolicyType": "SERVICE_CONTROL_POLICY", + "RootId": "r-examplerootid111" + }, + "output": { + "Root": { + "Arn": "arn:aws:organizations::111111111111:root/o-exampleorgid/r-examplerootid111", + "Id": "r-examplerootid111", + "Name": "Root", + "PolicyTypes": [ + { + "Status": "ENABLED", + "Type": "SERVICE_CONTROL_POLICY" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to enable the service control policy (SCP) policy type in a root. The output shows a root object with a PolicyTypes response element showing that SCPs are now enabled:/n/n", + "id": "to-enable-a-policy-type-in-a-root", + "title": "To enable a policy type in a root" + } + ], + "InviteAccountToOrganization": [ + { + "input": { + "Notes": "This is a request for Juan's account to join Bill's organization", + "Target": { + "Id": "juan@example.com", + "Type": "EMAIL" + } + }, + "output": { + "Handshake": { + "Action": "INVITE", + "Arn": "arn:aws:organizations::111111111111:handshake/o-exampleorgid/invite/h-examplehandshakeid111", + "ExpirationTimestamp": "2017-02-16T09:36:05.02Z", + "Id": "h-examplehandshakeid111", + "Parties": [ + { + "Id": "o-exampleorgid", + "Type": "ORGANIZATION" + }, + { + "Id": "juan@example.com", + "Type": "EMAIL" + } + ], + "RequestedTimestamp": "2017-02-01T09:36:05.02Z", + "Resources": [ + { + "Resources": [ + { + "Type": "MASTER_EMAIL", + "Value": "bill@amazon.com" + }, + { + "Type": "MASTER_NAME", + "Value": "Org Master Account" + }, + { + "Type": "ORGANIZATION_FEATURE_SET", + "Value": "FULL" + } + ], + "Type": "ORGANIZATION", + "Value": "o-exampleorgid" + }, + { + "Type": "EMAIL", + "Value": "juan@example.com" + } + ], + "State": "OPEN" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows the admin of the master account owned by bill@example.com inviting the account owned by juan@example.com to join an organization.", + "id": "to-invite-an-account-to-join-an-organization-1472508594110", + "title": "To invite an account to join an organization" + } + ], + "LeaveOrganization": [ + { + "comments": { + "input": { + }, + "output": { + } + }, + "description": "TThe following example shows how to remove your member account from an organization:", + "id": "to-leave-an-organization-as-a-member-account-1472508784736", + "title": "To leave an organization as a member account" + } + ], + "ListAccounts": [ + { + "input": { + }, + "output": { + "Accounts": [ + { + "Arn": "arn:aws:organizations::111111111111:account/o-exampleorgid/111111111111", + "Email": "bill@example.com", + "Id": "111111111111", + "JoinedMethod": "INVITED", + "JoinedTimestamp": "20161215T193015Z", + "Name": "Master Account", + "Status": "ACTIVE" + }, + { + "Arn": "arn:aws:organizations::111111111111:account/o-exampleorgid/222222222222", + "Email": "alice@example.com", + "Id": "222222222222", + "JoinedMethod": "INVITED", + "JoinedTimestamp": "20161215T210221Z", + "Name": "Developer Account", + "Status": "ACTIVE" + }, + { + "Arn": "arn:aws:organizations::111111111111:account/o-exampleorgid/333333333333", + "Email": "juan@example.com", + "Id": "333333333333", + "JoinedMethod": "INVITED", + "JoinedTimestamp": "20161215T210347Z", + "Name": "Test Account", + "Status": "ACTIVE" + }, + { + "Arn": "arn:aws:organizations::111111111111:account/o-exampleorgid/444444444444", + "Email": "anika@example.com", + "Id": "444444444444", + "JoinedMethod": "INVITED", + "JoinedTimestamp": "20161215T210332Z", + "Name": "Production Account", + "Status": "ACTIVE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows you how to request a list of the accounts in an organization:", + "id": "to-retrieve-a-list-of-all-of-the-accounts-in-an-organization-1472509590974", + "title": "To retrieve a list of all of the accounts in an organization" + } + ], + "ListAccountsForParent": [ + { + "input": { + "ParentId": "ou-examplerootid111-exampleouid111" + }, + "output": { + "Accounts": [ + { + "Arn": "arn:aws:organizations::111111111111:account/o-exampleorgid/333333333333", + "Email": "juan@example.com", + "Id": "333333333333", + "JoinedMethod": "INVITED", + "JoinedTimestamp": 1481835795.536, + "Name": "Development Account", + "Status": "ACTIVE" + }, + { + "Arn": "arn:aws:organizations::111111111111:account/o-exampleorgid/444444444444", + "Email": "anika@example.com", + "Id": "444444444444", + "JoinedMethod": "INVITED", + "JoinedTimestamp": 1481835812.143, + "Name": "Test Account", + "Status": "ACTIVE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to request a list of the accounts in an OU:/n/n", + "id": "to-retrieve-a-list-of-all-of-the-accounts-in-a-root-or-ou-1472509590974", + "title": "To retrieve a list of all of the accounts in a root or OU" + } + ], + "ListChildren": [ + { + "input": { + "ChildType": "ORGANIZATIONAL_UNIT", + "ParentId": "ou-examplerootid111-exampleouid111" + }, + "output": { + "Children": [ + { + "Id": "ou-examplerootid111-exampleouid111", + "Type": "ORGANIZATIONAL_UNIT" + }, + { + "Id": "ou-examplerootid111-exampleouid222", + "Type": "ORGANIZATIONAL_UNIT" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to request a list of the child OUs in a parent root or OU:/n/n", + "id": "to-retrieve-a-list-of-all-of-the-child-accounts-and-OUs-in-a-parent-container", + "title": "To retrieve a list of all of the child accounts and OUs in a parent root or OU" + } + ], + "ListCreateAccountStatus": [ + { + "input": { + "States": [ + "SUCCEEDED" + ] + }, + "output": { + "CreateAccountStatuses": [ + { + "AccountId": "444444444444", + "AccountName": "Developer Test Account", + "CompletedTimestamp": "2017-01-15T13:45:23.6Z", + "Id": "car-exampleaccountcreationrequestid1", + "RequestedTimestamp": "2017-01-15T13:45:23.01Z", + "State": "SUCCEEDED" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows a user requesting a list of only the completed account creation requests made for the current organization:", + "id": "to-get-a-list-of-completed-account-creation-requests-made-in-the-organization", + "title": "To get a list of completed account creation requests made in the organization" + }, + { + "input": { + "States": [ + "IN_PROGRESS" + ] + }, + "output": { + "CreateAccountStatuses": [ + { + "AccountName": "Production Account", + "Id": "car-exampleaccountcreationrequestid2", + "RequestedTimestamp": "2017-01-15T13:45:23.01Z", + "State": "IN_PROGRESS" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows a user requesting a list of only the in-progress account creation requests made for the current organization:", + "id": "to-get-a-list-of-all-account-creation-requests-made-in-the-organization-1472509174532", + "title": "To get a list of all account creation requests made in the organization" + } + ], + "ListHandshakesForAccount": [ + { + "output": { + "Handshakes": [ + { + "Action": "INVITE", + "Arn": "arn:aws:organizations::111111111111:handshake/o-exampleorgid/invite/h-examplehandshakeid111", + "ExpirationTimestamp": "2017-01-28T14:35:23.3Z", + "Id": "h-examplehandshakeid111", + "Parties": [ + { + "Id": "o-exampleorgid", + "Type": "ORGANIZATION" + }, + { + "Id": "juan@example.com", + "Type": "EMAIL" + } + ], + "RequestedTimestamp": "2017-01-13T14:35:23.3Z", + "Resources": [ + { + "Resources": [ + { + "Type": "MASTER_EMAIL", + "Value": "bill@amazon.com" + }, + { + "Type": "MASTER_NAME", + "Value": "Org Master Account" + }, + { + "Type": "ORGANIZATION_FEATURE_SET", + "Value": "FULL" + } + ], + "Type": "ORGANIZATION", + "Value": "o-exampleorgid" + }, + { + "Type": "EMAIL", + "Value": "juan@example.com" + } + ], + "State": "OPEN" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows you how to get a list of handshakes that are associated with the account of the credentials used to call the operation:", + "id": "to-retrieve-a-list-of-the-handshakes-sent-to-an-account-1472510214747", + "title": "To retrieve a list of the handshakes sent to an account" + } + ], + "ListHandshakesForOrganization": [ + { + "output": { + "Handshakes": [ + { + "Action": "INVITE", + "Arn": "arn:aws:organizations::111111111111:handshake/o-exampleorgid/invite/h-examplehandshakeid111", + "ExpirationTimestamp": "2017-01-28T14:35:23.3Z", + "Id": "h-examplehandshakeid111", + "Parties": [ + { + "Id": "o-exampleorgid", + "Type": "ORGANIZATION" + }, + { + "Id": "juan@example.com", + "Type": "EMAIL" + } + ], + "RequestedTimestamp": "2017-01-13T14:35:23.3Z", + "Resources": [ + { + "Resources": [ + { + "Type": "MASTER_EMAIL", + "Value": "bill@amazon.com" + }, + { + "Type": "MASTER_NAME", + "Value": "Org Master Account" + }, + { + "Type": "ORGANIZATION_FEATURE_SET", + "Value": "FULL" + } + ], + "Type": "ORGANIZATION", + "Value": "o-exampleorgid" + }, + { + "Type": "EMAIL", + "Value": "juan@example.com" + } + ], + "State": "OPEN" + }, + { + "Action": "INVITE", + "Arn": "arn:aws:organizations::111111111111:handshake/o-exampleorgid/invite/h-examplehandshakeid111", + "ExpirationTimestamp": "2017-01-28T14:35:23.3Z", + "Id": "h-examplehandshakeid222", + "Parties": [ + { + "Id": "o-exampleorgid", + "Type": "ORGANIZATION" + }, + { + "Id": "anika@example.com", + "Type": "EMAIL" + } + ], + "RequestedTimestamp": "2017-01-13T14:35:23.3Z", + "Resources": [ + { + "Resources": [ + { + "Type": "MASTER_EMAIL", + "Value": "bill@example.com" + }, + { + "Type": "MASTER_NAME", + "Value": "Master Account" + } + ], + "Type": "ORGANIZATION", + "Value": "o-exampleorgid" + }, + { + "Type": "EMAIL", + "Value": "anika@example.com" + }, + { + "Type": "NOTES", + "Value": "This is an invitation to Anika's account to join Bill's organization." + } + ], + "State": "ACCEPTED" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows you how to get a list of handshakes associated with the current organization:", + "id": "to-retrieve-a-list-of-the-handshakes-associated-with-an-organization-1472511206653", + "title": "To retrieve a list of the handshakes associated with an organization" + } + ], + "ListOrganizationalUnitsForParent": [ + { + "input": { + "ParentId": "r-examplerootid111" + }, + "output": { + "OrganizationalUnits": [ + { + "Arn": "arn:aws:organizations::111111111111:ou/o-exampleorgid/ou-examlerootid111-exampleouid111", + "Id": "ou-examplerootid111-exampleouid111", + "Name": "Development" + }, + { + "Arn": "arn:aws:organizations::111111111111:ou/o-exampleorgid/ou-examlerootid111-exampleouid222", + "Id": "ou-examplerootid111-exampleouid222", + "Name": "Production" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to get a list of OUs in a specified root:/n/n", + "id": "to-retrieve-a-list-of-all-of-the-OUs-in-a-parent-container", + "title": "To retrieve a list of all of the child OUs in a parent root or OU" + } + ], + "ListParents": [ + { + "input": { + "ChildId": "444444444444" + }, + "output": { + "Parents": [ + { + "Id": "ou-examplerootid111-exampleouid111", + "Type": "ORGANIZATIONAL_UNIT" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to list the root or OUs that contain account 444444444444:/n/n", + "id": "to-retrieve-a-list-of-all-of-the-parents-of-a-child-ou-or-account", + "title": "To retrieve a list of all of the parents of a child OU or account" + } + ], + "ListPolicies": [ + { + "input": { + "Filter": "SERVICE_CONTROL_POLICY" + }, + "output": { + "Policies": [ + { + "Arn": "arn:aws:organizations::111111111111:policy/o-exampleorgid/service_control_policy/p-examplepolicyid111", + "AwsManaged": false, + "Description": "Enables account admins to delegate permissions for any S3 actions to users and roles in their accounts.", + "Id": "p-examplepolicyid111", + "Name": "AllowAllS3Actions", + "Type": "SERVICE_CONTROL_POLICY" + }, + { + "Arn": "arn:aws:organizations::111111111111:policy/o-exampleorgid/service_control_policy/p-examplepolicyid222", + "AwsManaged": false, + "Description": "Enables account admins to delegate permissions for any EC2 actions to users and roles in their accounts.", + "Id": "p-examplepolicyid222", + "Name": "AllowAllEC2Actions", + "Type": "SERVICE_CONTROL_POLICY" + }, + { + "Arn": "arn:aws:organizations::aws:policy/service_control_policy/p-FullAWSAccess", + "AwsManaged": true, + "Description": "Allows access to every operation", + "Id": "p-FullAWSAccess", + "Name": "FullAWSAccess", + "Type": "SERVICE_CONTROL_POLICY" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to get a list of service control policies (SCPs):/n/n", + "id": "to-retrieve-a-list-of--policies-in-the-organization", + "title": "To retrieve a list policies in the organization" + } + ], + "ListPoliciesForTarget": [ + { + "input": { + "Filter": "SERVICE_CONTROL_POLICY", + "TargetId": "444444444444" + }, + "output": { + "Policies": [ + { + "Arn": "arn:aws:organizations::111111111111:policy/o-exampleorgid/service_control_policy/p-examplepolicyid222", + "AwsManaged": false, + "Description": "Enables account admins to delegate permissions for any EC2 actions to users and roles in their accounts.", + "Id": "p-examplepolicyid222", + "Name": "AllowAllEC2Actions", + "Type": "SERVICE_CONTROL_POLICY" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to get a list of all service control policies (SCPs) of the type specified by the Filter parameter, that are directly attached to an account. The returned list does not include policies that apply to the account because of inheritance from its location in an OU hierarchy:/n/n", + "id": "to-retrieve-a-list-of-policies-attached-to-a-root-ou-or-account", + "title": "To retrieve a list policies attached to a root, OU, or account" + } + ], + "ListRoots": [ + { + "input": { + }, + "output": { + "Roots": [ + { + "Arn": "arn:aws:organizations::111111111111:root/o-exampleorgid/r-examplerootid111", + "Id": "r-examplerootid111", + "Name": "Root", + "PolicyTypes": [ + { + "Status": "ENABLED", + "Type": "SERVICE_CONTROL_POLICY" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to get the list of the roots in the current organization:/n/n", + "id": "to-retrieve-a-list-of-roots-in-the-organization", + "title": "To retrieve a list of roots in the organization" + } + ], + "ListTargetsForPolicy": [ + { + "input": { + "PolicyId": "p-FullAWSAccess" + }, + "output": { + "Targets": [ + { + "Arn": "arn:aws:organizations::111111111111:root/o-exampleorgid/r-examplerootid111", + "Name": "Root", + "TargetId": "r-examplerootid111", + "Type": "ROOT" + }, + { + "Arn": "arn:aws:organizations::111111111111:account/o-exampleorgid/333333333333;", + "Name": "Developer Test Account", + "TargetId": "333333333333", + "Type": "ACCOUNT" + }, + { + "Arn": "arn:aws:organizations::111111111111:ou/o-exampleorgid/ou-examplerootid111-exampleouid111", + "Name": "Accounting", + "TargetId": "ou-examplerootid111-exampleouid111", + "Type": "ORGANIZATIONAL_UNIT" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to get the list of roots, OUs, and accounts to which the specified policy is attached:/n/n", + "id": "to-retrieve-a-list-of-roots-ous-and-accounts-to-which-a-policy-is-attached", + "title": "To retrieve a list of roots, OUs, and accounts to which a policy is attached" + } + ], + "MoveAccount": [ + { + "input": { + "AccountId": "333333333333", + "DestinationParentId": "ou-examplerootid111-exampleouid111", + "SourceParentId": "r-examplerootid111" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to move a member account from the root to an OU:/n/n", + "id": "to-move-an-ou-or-account-to-another-ou-or-the-root", + "title": "To move an OU or account to another OU or the root" + } + ], + "RemoveAccountFromOrganization": [ + { + "input": { + "AccountId": "333333333333" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows you how to remove an account from an organization:", + "id": "to-remove-an-account-from-an-organization-as-the-master-account", + "title": "To remove an account from an organization as the master account" + } + ], + "UpdateOrganizationalUnit": [ + { + "input": { + "Name": "AccountingOU", + "OrganizationalUnitId": "ou-examplerootid111-exampleouid111" + }, + "output": { + "OrganizationalUnit": { + "Arn": "arn:aws:organizations::111111111111:ou/o-exampleorgid/ou-examplerootid111-exampleouid111", + "Id": "ou-examplerootid111-exampleouid111", + "Name": "AccountingOU" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to rename an OU. The output confirms the new name:/n/n", + "id": "to-rename-an-organizational-unit", + "title": "To rename an organizational unit" + } + ], + "UpdatePolicy": [ + { + "input": { + "Description": "This description replaces the original.", + "Name": "Renamed-Policy", + "PolicyId": "p-examplepolicyid111" + }, + "output": { + "Policy": { + "Content": "{ \"Version\": \"2012-10-17\", \"Statement\": { \"Effect\": \"Allow\", \"Action\": \"ec2:*\", \"Resource\": \"*\" } }", + "PolicySummary": { + "Arn": "arn:aws:organizations::111111111111:policy/o-exampleorgid/service_control_policy/p-examplepolicyid111", + "AwsManaged": false, + "Description": "This description replaces the original.", + "Id": "p-examplepolicyid111", + "Name": "Renamed-Policy", + "Type": "SERVICE_CONTROL_POLICY" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to rename a policy and give it a new description and new content. The output confirms the new name and description text:/n/n", + "id": "to-update-the-details-of-a-policy", + "title": "To update the details of a policy" + }, + { + "input": { + "Content": "{ \\\"Version\\\": \\\"2012-10-17\\\", \\\"Statement\\\": {\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": \\\"s3:*\\\", \\\"Resource\\\": \\\"*\\\" } }", + "PolicyId": "p-examplepolicyid111" + }, + "output": { + "Policy": { + "Content": "{ \\\"Version\\\": \\\"2012-10-17\\\", \\\"Statement\\\": { \\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": \\\"s3:*\\\", \\\"Resource\\\": \\\"*\\\" } }", + "PolicySummary": { + "Arn": "arn:aws:organizations::111111111111:policy/o-exampleorgid/service_control_policy/p-examplepolicyid111", + "AwsManaged": false, + "Description": "This description replaces the original.", + "Id": "p-examplepolicyid111", + "Name": "Renamed-Policy", + "Type": "SERVICE_CONTROL_POLICY" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to replace the JSON text of the SCP from the preceding example with a new JSON policy text string that allows S3 actions instead of EC2 actions:/n/n", + "id": "to-update-the-content-of-a-policy", + "title": "To update the content of a policy" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/paginators-1.json new file mode 100644 index 00000000..0f05c577 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/paginators-1.json @@ -0,0 +1,99 @@ +{ + "pagination": { + "ListAccounts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Accounts" + }, + "ListAccountsForParent": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Accounts" + }, + "ListChildren": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Children" + }, + "ListCreateAccountStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CreateAccountStatuses" + }, + "ListHandshakesForAccount": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Handshakes" + }, + "ListHandshakesForOrganization": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Handshakes" + }, + "ListOrganizationalUnitsForParent": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "OrganizationalUnits" + }, + "ListParents": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Parents" + }, + "ListPolicies": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Policies" + }, + "ListPoliciesForTarget": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Policies" + }, + "ListRoots": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Roots" + }, + "ListTargetsForPolicy": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Targets" + }, + "ListAWSServiceAccessForOrganization": { + "result_key": "EnabledServicePrincipals", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Tags" + }, + "ListDelegatedAdministrators": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DelegatedAdministrators" + }, + "ListDelegatedServicesForAccount": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DelegatedServices" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/service-2.json.gz new file mode 100644 index 00000000..cd8febd1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/organizations/2016-11-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/osis/2022-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/osis/2022-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..df7a6d98 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/osis/2022-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/osis/2022-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/osis/2022-01-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/osis/2022-01-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/osis/2022-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/osis/2022-01-01/service-2.json.gz new file mode 100644 index 00000000..5a4a0d12 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/osis/2022-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..65c18815 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/paginators-1.json new file mode 100644 index 00000000..36411550 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "GetOutpostInstanceTypes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceTypes" + }, + "ListAssets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Assets" + }, + "ListCatalogItems": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CatalogItems" + }, + "ListOrders": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Orders" + }, + "ListOutposts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Outposts" + }, + "ListSites": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Sites" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/paginators-1.sdk-extras.json new file mode 100644 index 00000000..f13d39be --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/paginators-1.sdk-extras.json @@ -0,0 +1,13 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "GetOutpostInstanceTypes": { + "non_aggregate_keys": [ + "OutpostArn", + "OutpostId" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/service-2.json.gz new file mode 100644 index 00000000..5709271b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/outposts/2019-12-03/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b562dd03 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/service-2.json.gz new file mode 100644 index 00000000..6023f72f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/panorama/2019-07-24/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/partitions.json b/dbtzin/lib/python3.8/site-packages/botocore/data/partitions.json new file mode 100644 index 00000000..f376f690 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/partitions.json @@ -0,0 +1,216 @@ +{ + "partitions" : [ { + "id" : "aws", + "outputs" : { + "dnsSuffix" : "amazonaws.com", + "dualStackDnsSuffix" : "api.aws", + "implicitGlobalRegion" : "us-east-1", + "name" : "aws", + "supportsDualStack" : true, + "supportsFIPS" : true + }, + "regionRegex" : "^(us|eu|ap|sa|ca|me|af|il)\\-\\w+\\-\\d+$", + "regions" : { + "af-south-1" : { + "description" : "Africa (Cape Town)" + }, + "ap-east-1" : { + "description" : "Asia Pacific (Hong Kong)" + }, + "ap-northeast-1" : { + "description" : "Asia Pacific (Tokyo)" + }, + "ap-northeast-2" : { + "description" : "Asia Pacific (Seoul)" + }, + "ap-northeast-3" : { + "description" : "Asia Pacific (Osaka)" + }, + "ap-south-1" : { + "description" : "Asia Pacific (Mumbai)" + }, + "ap-south-2" : { + "description" : "Asia Pacific (Hyderabad)" + }, + "ap-southeast-1" : { + "description" : "Asia Pacific (Singapore)" + }, + "ap-southeast-2" : { + "description" : "Asia Pacific (Sydney)" + }, + "ap-southeast-3" : { + "description" : "Asia Pacific (Jakarta)" + }, + "ap-southeast-4" : { + "description" : "Asia Pacific (Melbourne)" + }, + "aws-global" : { + "description" : "AWS Standard global region" + }, + "ca-central-1" : { + "description" : "Canada (Central)" + }, + "ca-west-1" : { + "description" : "Canada West (Calgary)" + }, + "eu-central-1" : { + "description" : "Europe (Frankfurt)" + }, + "eu-central-2" : { + "description" : "Europe (Zurich)" + }, + "eu-north-1" : { + "description" : "Europe (Stockholm)" + }, + "eu-south-1" : { + "description" : "Europe (Milan)" + }, + "eu-south-2" : { + "description" : "Europe (Spain)" + }, + "eu-west-1" : { + "description" : "Europe (Ireland)" + }, + "eu-west-2" : { + "description" : "Europe (London)" + }, + "eu-west-3" : { + "description" : "Europe (Paris)" + }, + "il-central-1" : { + "description" : "Israel (Tel Aviv)" + }, + "me-central-1" : { + "description" : "Middle East (UAE)" + }, + "me-south-1" : { + "description" : "Middle East (Bahrain)" + }, + "sa-east-1" : { + "description" : "South America (Sao Paulo)" + }, + "us-east-1" : { + "description" : "US East (N. Virginia)" + }, + "us-east-2" : { + "description" : "US East (Ohio)" + }, + "us-west-1" : { + "description" : "US West (N. California)" + }, + "us-west-2" : { + "description" : "US West (Oregon)" + } + } + }, { + "id" : "aws-cn", + "outputs" : { + "dnsSuffix" : "amazonaws.com.cn", + "dualStackDnsSuffix" : "api.amazonwebservices.com.cn", + "implicitGlobalRegion" : "cn-northwest-1", + "name" : "aws-cn", + "supportsDualStack" : true, + "supportsFIPS" : true + }, + "regionRegex" : "^cn\\-\\w+\\-\\d+$", + "regions" : { + "aws-cn-global" : { + "description" : "AWS China global region" + }, + "cn-north-1" : { + "description" : "China (Beijing)" + }, + "cn-northwest-1" : { + "description" : "China (Ningxia)" + } + } + }, { + "id" : "aws-us-gov", + "outputs" : { + "dnsSuffix" : "amazonaws.com", + "dualStackDnsSuffix" : "api.aws", + "implicitGlobalRegion" : "us-gov-west-1", + "name" : "aws-us-gov", + "supportsDualStack" : true, + "supportsFIPS" : true + }, + "regionRegex" : "^us\\-gov\\-\\w+\\-\\d+$", + "regions" : { + "aws-us-gov-global" : { + "description" : "AWS GovCloud (US) global region" + }, + "us-gov-east-1" : { + "description" : "AWS GovCloud (US-East)" + }, + "us-gov-west-1" : { + "description" : "AWS GovCloud (US-West)" + } + } + }, { + "id" : "aws-iso", + "outputs" : { + "dnsSuffix" : "c2s.ic.gov", + "dualStackDnsSuffix" : "c2s.ic.gov", + "implicitGlobalRegion" : "us-iso-east-1", + "name" : "aws-iso", + "supportsDualStack" : false, + "supportsFIPS" : true + }, + "regionRegex" : "^us\\-iso\\-\\w+\\-\\d+$", + "regions" : { + "aws-iso-global" : { + "description" : "AWS ISO (US) global region" + }, + "us-iso-east-1" : { + "description" : "US ISO East" + }, + "us-iso-west-1" : { + "description" : "US ISO WEST" + } + } + }, { + "id" : "aws-iso-b", + "outputs" : { + "dnsSuffix" : "sc2s.sgov.gov", + "dualStackDnsSuffix" : "sc2s.sgov.gov", + "implicitGlobalRegion" : "us-isob-east-1", + "name" : "aws-iso-b", + "supportsDualStack" : false, + "supportsFIPS" : true + }, + "regionRegex" : "^us\\-isob\\-\\w+\\-\\d+$", + "regions" : { + "aws-iso-b-global" : { + "description" : "AWS ISOB (US) global region" + }, + "us-isob-east-1" : { + "description" : "US ISOB East (Ohio)" + } + } + }, { + "id" : "aws-iso-e", + "outputs" : { + "dnsSuffix" : "cloud.adc-e.uk", + "dualStackDnsSuffix" : "cloud.adc-e.uk", + "implicitGlobalRegion" : "eu-isoe-west-1", + "name" : "aws-iso-e", + "supportsDualStack" : false, + "supportsFIPS" : true + }, + "regionRegex" : "^eu\\-isoe\\-\\w+\\-\\d+$", + "regions" : { } + }, { + "id" : "aws-iso-f", + "outputs" : { + "dnsSuffix" : "csp.hci.ic.gov", + "dualStackDnsSuffix" : "csp.hci.ic.gov", + "implicitGlobalRegion" : "us-isof-south-1", + "name" : "aws-iso-f", + "supportsDualStack" : false, + "supportsFIPS" : true + }, + "regionRegex" : "^us\\-isof\\-\\w+\\-\\d+$", + "regions" : { } + } ], + "version" : "1.1" +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography-data/2022-02-03/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography-data/2022-02-03/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3917b18d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography-data/2022-02-03/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography-data/2022-02-03/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography-data/2022-02-03/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography-data/2022-02-03/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography-data/2022-02-03/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography-data/2022-02-03/service-2.json.gz new file mode 100644 index 00000000..62c8586f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography-data/2022-02-03/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography/2021-09-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography/2021-09-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..15c0bc92 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography/2021-09-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography/2021-09-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography/2021-09-14/paginators-1.json new file mode 100644 index 00000000..02af499b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography/2021-09-14/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListAliases": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Aliases" + }, + "ListKeys": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Keys" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tags" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography/2021-09-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography/2021-09-14/service-2.json.gz new file mode 100644 index 00000000..99a04990 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/payment-cryptography/2021-09-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pca-connector-ad/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pca-connector-ad/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..fb696c57 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pca-connector-ad/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pca-connector-ad/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pca-connector-ad/2018-05-10/paginators-1.json new file mode 100644 index 00000000..89234776 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pca-connector-ad/2018-05-10/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListConnectors": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Connectors" + }, + "ListDirectoryRegistrations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DirectoryRegistrations" + }, + "ListServicePrincipalNames": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ServicePrincipalNames" + }, + "ListTemplateGroupAccessControlEntries": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AccessControlEntries" + }, + "ListTemplates": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Templates" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pca-connector-ad/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pca-connector-ad/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..bbbd9036 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pca-connector-ad/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..cad97110 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/service-2.json.gz new file mode 100644 index 00000000..906a2d9f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-events/2018-03-22/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3c78e512 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/service-2.json.gz new file mode 100644 index 00000000..715185b4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize-runtime/2018-05-22/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c1dabf35 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/paginators-1.json new file mode 100644 index 00000000..ea43852f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/paginators-1.json @@ -0,0 +1,100 @@ +{ + "pagination": { + "ListCampaigns": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "campaigns" + }, + "ListDatasetGroups": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "datasetGroups" + }, + "ListDatasetImportJobs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "datasetImportJobs" + }, + "ListDatasets": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "datasets" + }, + "ListEventTrackers": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "eventTrackers" + }, + "ListRecipes": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "recipes" + }, + "ListSchemas": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "schemas" + }, + "ListSolutionVersions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "solutionVersions" + }, + "ListSolutions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "solutions" + }, + "ListBatchInferenceJobs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "batchInferenceJobs" + }, + "ListDatasetExportJobs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "datasetExportJobs" + }, + "ListFilters": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "Filters" + }, + "ListBatchSegmentJobs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "batchSegmentJobs" + }, + "ListRecommenders": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "recommenders" + }, + "ListMetricAttributionMetrics": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "metrics" + }, + "ListMetricAttributions": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "metricAttributions" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/service-2.json.gz new file mode 100644 index 00000000..0af3bc1e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/personalize/2018-05-22/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..73bd3aa2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/service-2.json.gz new file mode 100644 index 00000000..65b6d67b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pi/2018-02-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c5f47c47 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/paginators-1.json new file mode 100644 index 00000000..f2693b19 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "GetDedicatedIps": { + "input_token": "NextToken", + "limit_key": "PageSize", + "output_token": "NextToken", + "result_key": "DedicatedIps" + }, + "ListConfigurationSets": { + "input_token": "NextToken", + "limit_key": "PageSize", + "output_token": "NextToken", + "result_key": "ConfigurationSets" + }, + "ListDedicatedIpPools": { + "input_token": "NextToken", + "limit_key": "PageSize", + "output_token": "NextToken", + "result_key": "DedicatedIpPools" + }, + "ListDeliverabilityTestReports": { + "input_token": "NextToken", + "limit_key": "PageSize", + "output_token": "NextToken", + "result_key": "DeliverabilityTestReports" + }, + "ListEmailIdentities": { + "input_token": "NextToken", + "limit_key": "PageSize", + "output_token": "NextToken", + "result_key": "EmailIdentities" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/service-2.json.gz new file mode 100644 index 00000000..768b4003 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-email/2018-07-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..2e9e77dc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/paginators-1.json new file mode 100644 index 00000000..a9ee30e4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/paginators-1.json @@ -0,0 +1,124 @@ +{ + "pagination": { + "DescribeAccountAttributes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AccountAttributes" + }, + "DescribeAccountLimits": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AccountLimits" + }, + "DescribeConfigurationSets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ConfigurationSets" + }, + "DescribeKeywords": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Keywords" + }, + "DescribeOptOutLists": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "OptOutLists" + }, + "DescribeOptedOutNumbers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "OptedOutNumbers" + }, + "DescribePhoneNumbers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "PhoneNumbers" + }, + "DescribePools": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Pools" + }, + "DescribeSenderIds": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SenderIds" + }, + "DescribeSpendLimits": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpendLimits" + }, + "ListPoolOriginationIdentities": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "OriginationIdentities" + }, + "DescribeRegistrationAttachments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RegistrationAttachments" + }, + "DescribeRegistrationFieldDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RegistrationFieldDefinitions" + }, + "DescribeRegistrationFieldValues": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RegistrationFieldValues" + }, + "DescribeRegistrationSectionDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RegistrationSectionDefinitions" + }, + "DescribeRegistrationTypeDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RegistrationTypeDefinitions" + }, + "DescribeRegistrationVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RegistrationVersions" + }, + "DescribeRegistrations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Registrations" + }, + "DescribeVerifiedDestinationNumbers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VerifiedDestinationNumbers" + }, + "ListRegistrationAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RegistrationAssociations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/paginators-1.sdk-extras.json new file mode 100644 index 00000000..7db1e530 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/paginators-1.sdk-extras.json @@ -0,0 +1,55 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "DescribeKeywords": { + "non_aggregate_keys": [ + "OriginationIdentity", + "OriginationIdentityArn" + ] + }, + "DescribeRegistrationFieldDefinitions": { + "non_aggregate_keys": [ + "RegistrationType" + ] + }, + "DescribeRegistrationFieldValues": { + "non_aggregate_keys": [ + "RegistrationId", + "RegistrationArn", + "VersionNumber" + ] + }, + "DescribeRegistrationSectionDefinitions": { + "non_aggregate_keys": [ + "RegistrationType" + ] + }, + "DescribeRegistrationVersions": { + "non_aggregate_keys": [ + "RegistrationId", + "RegistrationArn" + ] + }, + "DescribeOptedOutNumbers": { + "non_aggregate_keys": [ + "OptOutListArn", + "OptOutListName" + ] + }, + "ListPoolOriginationIdentities": { + "non_aggregate_keys": [ + "PoolArn", + "PoolId" + ] + }, + "ListRegistrationAssociations": { + "non_aggregate_keys": [ + "RegistrationId", + "RegistrationArn", + "RegistrationType" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/service-2.json.gz new file mode 100644 index 00000000..236563fc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice-v2/2022-03-31/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice/2018-09-05/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice/2018-09-05/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..16667b7c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice/2018-09-05/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice/2018-09-05/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice/2018-09-05/service-2.json.gz new file mode 100644 index 00000000..c7bdb566 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint-sms-voice/2018-09-05/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint/2016-12-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint/2016-12-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..170c3172 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint/2016-12-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint/2016-12-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint/2016-12-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint/2016-12-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint/2016-12-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint/2016-12-01/service-2.json.gz new file mode 100644 index 00000000..1a299fa6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pinpoint/2016-12-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pipes/2015-10-07/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pipes/2015-10-07/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a2576b65 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pipes/2015-10-07/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pipes/2015-10-07/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pipes/2015-10-07/paginators-1.json new file mode 100644 index 00000000..4663077c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pipes/2015-10-07/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListPipes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "Pipes" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pipes/2015-10-07/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pipes/2015-10-07/service-2.json.gz new file mode 100644 index 00000000..42efa0b5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pipes/2015-10-07/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a66e0892 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/examples-1.json new file mode 100644 index 00000000..38205dbe --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/examples-1.json @@ -0,0 +1,171 @@ +{ + "version": "1.0", + "examples": { + "DeleteLexicon": [ + { + "input": { + "Name": "example" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes a specified pronunciation lexicon stored in an AWS Region.", + "id": "to-delete-a-lexicon-1481922498332", + "title": "To delete a lexicon" + } + ], + "DescribeVoices": [ + { + "input": { + "LanguageCode": "en-GB" + }, + "output": { + "Voices": [ + { + "Gender": "Female", + "Id": "Emma", + "LanguageCode": "en-GB", + "LanguageName": "British English", + "Name": "Emma" + }, + { + "Gender": "Male", + "Id": "Brian", + "LanguageCode": "en-GB", + "LanguageName": "British English", + "Name": "Brian" + }, + { + "Gender": "Female", + "Id": "Amy", + "LanguageCode": "en-GB", + "LanguageName": "British English", + "Name": "Amy" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns the list of voices that are available for use when requesting speech synthesis. Displayed languages are those within the specified language code. If no language code is specified, voices for all available languages are displayed.", + "id": "to-describe-available-voices-1482180557753", + "title": "To describe available voices" + } + ], + "GetLexicon": [ + { + "input": { + "Name": "" + }, + "output": { + "Lexicon": { + "Content": "\r\n\r\n \r\n W3C\r\n World Wide Web Consortium\r\n \r\n", + "Name": "example" + }, + "LexiconAttributes": { + "Alphabet": "ipa", + "LanguageCode": "en-US", + "LastModified": 1478542980.117, + "LexemesCount": 1, + "LexiconArn": "arn:aws:polly:us-east-1:123456789012:lexicon/example", + "Size": 503 + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns the content of the specified pronunciation lexicon stored in an AWS Region.", + "id": "to-retrieve-a-lexicon-1481912870836", + "title": "To retrieve a lexicon" + } + ], + "ListLexicons": [ + { + "input": { + }, + "output": { + "Lexicons": [ + { + "Attributes": { + "Alphabet": "ipa", + "LanguageCode": "en-US", + "LastModified": 1478542980.117, + "LexemesCount": 1, + "LexiconArn": "arn:aws:polly:us-east-1:123456789012:lexicon/example", + "Size": 503 + }, + "Name": "example" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns a list of pronunciation lexicons stored in an AWS Region.", + "id": "to-list-all-lexicons-in-a-region-1481842106487", + "title": "To list all lexicons in a region" + } + ], + "PutLexicon": [ + { + "input": { + "Content": "file://example.pls", + "Name": "W3C" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Stores a pronunciation lexicon in an AWS Region.", + "id": "to-save-a-lexicon-1482272584088", + "title": "To save a lexicon" + } + ], + "SynthesizeSpeech": [ + { + "input": { + "LexiconNames": [ + "example" + ], + "OutputFormat": "mp3", + "SampleRate": "8000", + "Text": "All Gaul is divided into three parts", + "TextType": "text", + "VoiceId": "Joanna" + }, + "output": { + "AudioStream": "TEXT", + "ContentType": "audio/mpeg", + "RequestCharacters": 37 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Synthesizes plain text or SSML into a file of human-like speech.", + "id": "to-synthesize-speech-1482186064046", + "title": "To synthesize speech" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/paginators-1.json new file mode 100644 index 00000000..dc76e7c1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/paginators-1.json @@ -0,0 +1,20 @@ +{ + "pagination": { + "DescribeVoices": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Voices" + }, + "ListLexicons": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Lexicons" + }, + "ListSpeechSynthesisTasks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SynthesisTasks" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/service-2.json.gz new file mode 100644 index 00000000..b7713091 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/polly/2016-06-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5697c0af Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/examples-1.json new file mode 100644 index 00000000..abc1c59f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/examples-1.json @@ -0,0 +1,104 @@ +{ + "version": "1.0", + "examples": { + "DescribeServices": [ + { + "input": { + "FormatVersion": "aws_v1", + "MaxResults": 1, + "ServiceCode": "AmazonEC2" + }, + "output": { + "FormatVersion": "aws_v1", + "NextToken": "abcdefg123", + "Services": [ + { + "AttributeNames": [ + "volumeType", + "maxIopsvolume", + "instanceCapacity10xlarge", + "locationType", + "operation" + ], + "ServiceCode": "AmazonEC2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Retrieves the service for the given Service Code.", + "id": "to-retrieve-service-metadata", + "title": "To retrieve a list of services and service codes" + } + ], + "GetAttributeValues": [ + { + "input": { + "AttributeName": "volumeType", + "MaxResults": 2, + "ServiceCode": "AmazonEC2" + }, + "output": { + "AttributeValues": [ + { + "Value": "Throughput Optimized HDD" + }, + { + "Value": "Provisioned IOPS" + } + ], + "NextToken": "GpgauEXAMPLEezucl5LV0w==:7GzYJ0nw0DBTJ2J66EoTIIynE6O1uXwQtTRqioJzQadBnDVgHPzI1en4BUQnPCLpzeBk9RQQAWaFieA4+DapFAGLgk+Z/9/cTw9GldnPOHN98+FdmJP7wKU3QQpQ8MQr5KOeBkIsAqvAQYdL0DkL7tHwPtE5iCEByAmg9gcC/yBU1vAOsf7R3VaNN4M5jMDv3woSWqASSIlBVB6tgW78YL22KhssoItM/jWW+aP6Jqtq4mldxp/ct6DWAl+xLFwHU/CbketimPPXyqHF3/UXDw==" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation returns a list of values available for the given attribute.", + "id": "to-retreive-attribute-values", + "title": "To retrieve a list of attribute values" + } + ], + "GetProducts": [ + { + "input": { + "Filters": [ + { + "Field": "ServiceCode", + "Type": "TERM_MATCH", + "Value": "AmazonEC2" + }, + { + "Field": "volumeType", + "Type": "TERM_MATCH", + "Value": "Provisioned IOPS" + } + ], + "FormatVersion": "aws_v1", + "MaxResults": 1 + }, + "output": { + "FormatVersion": "aws_v1", + "NextToken": "57r3EXAMPLEujbzWfHF7Ciw==:ywSmZsD3mtpQmQLQ5XfOsIMkYybSj+vAT+kGmwMFq+K9DGmIoJkz7lunVeamiOPgthdWSO2a7YKojCO+zY4dJmuNl2QvbNhXs+AJ2Ufn7xGmJncNI2TsEuAsVCUfTAvAQNcwwamtk6XuZ4YdNnooV62FjkV3ZAn40d9+wAxV7+FImvhUHi/+f8afgZdGh2zPUlH8jlV9uUtj0oHp8+DhPUuHXh+WBII1E/aoKpPSm3c=", + "PriceList": [ + "{\"product\":{\"productFamily\":\"Storage\",\"attributes\":{\"storageMedia\":\"SSD-backed\",\"maxThroughputvolume\":\"320 MB/sec\",\"volumeType\":\"Provisioned IOPS\",\"maxIopsvolume\":\"20000\",\"servicecode\":\"AmazonEC2\",\"usagetype\":\"CAN1-EBS:VolumeUsage.piops\",\"locationType\":\"AWS Region\",\"location\":\"Canada (Central)\",\"servicename\":\"Amazon Elastic Compute Cloud\",\"maxVolumeSize\":\"16 TiB\",\"operation\":\"\"},\"sku\":\"WQGC34PB2AWS8R4U\"},\"serviceCode\":\"AmazonEC2\",\"terms\":{\"OnDemand\":{\"WQGC34PB2AWS8R4U.JRTCKXETXF\":{\"priceDimensions\":{\"WQGC34PB2AWS8R4U.JRTCKXETXF.6YS6EN2CT7\":{\"unit\":\"GB-Mo\",\"endRange\":\"Inf\",\"description\":\"$0.138 per GB-month of Provisioned IOPS SSD (io1) provisioned storage - Canada (Central)\",\"appliesTo\":[],\"rateCode\":\"WQGC34PB2AWS8R4U.JRTCKXETXF.6YS6EN2CT7\",\"beginRange\":\"0\",\"pricePerUnit\":{\"USD\":\"0.1380000000\"}}},\"sku\":\"WQGC34PB2AWS8R4U\",\"effectiveDate\":\"2017-08-01T00:00:00Z\",\"offerTermCode\":\"JRTCKXETXF\",\"termAttributes\":{}}}},\"version\":\"20170901182201\",\"publicationDate\":\"2017-09-01T18:22:01Z\"}" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation returns a list of products that match the given criteria.", + "id": "to-retrieve-available products", + "title": "To retrieve a list of products" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/paginators-1.json new file mode 100644 index 00000000..0f2ce4e8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "DescribeServices": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Services", + "non_aggregate_keys": [ + "FormatVersion" + ] + }, + "GetAttributeValues": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AttributeValues" + }, + "GetProducts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "PriceList", + "non_aggregate_keys": [ + "FormatVersion" + ] + }, + "ListPriceLists": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "PriceLists" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/service-2.json.gz new file mode 100644 index 00000000..3f1c80f5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/pricing/2017-10-15/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/privatenetworks/2021-12-03/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/privatenetworks/2021-12-03/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4bf85c04 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/privatenetworks/2021-12-03/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/privatenetworks/2021-12-03/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/privatenetworks/2021-12-03/paginators-1.json new file mode 100644 index 00000000..8b7d279c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/privatenetworks/2021-12-03/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListDeviceIdentifiers": { + "input_token": "startToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "deviceIdentifiers" + }, + "ListNetworkResources": { + "input_token": "startToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "networkResources" + }, + "ListNetworkSites": { + "input_token": "startToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "networkSites" + }, + "ListNetworks": { + "input_token": "startToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "networks" + }, + "ListOrders": { + "input_token": "startToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "orders" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/privatenetworks/2021-12-03/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/privatenetworks/2021-12-03/service-2.json.gz new file mode 100644 index 00000000..0bf130cc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/privatenetworks/2021-12-03/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..374e31b0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/paginators-1.json new file mode 100644 index 00000000..a52075c4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/paginators-1.json @@ -0,0 +1,121 @@ +{ + "pagination": { + "ListEnvironmentAccountConnections": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "environmentAccountConnections" + }, + "ListEnvironmentTemplateVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "templateVersions" + }, + "ListEnvironmentTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "templates" + }, + "ListEnvironments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "environments" + }, + "ListServiceInstances": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "serviceInstances" + }, + "ListServiceTemplateVersions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "templateVersions" + }, + "ListServiceTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "templates" + }, + "ListServices": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "services" + }, + "ListTagsForResource": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "tags" + }, + "ListEnvironmentOutputs": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "outputs" + }, + "ListEnvironmentProvisionedResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "provisionedResources" + }, + "ListRepositories": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "repositories" + }, + "ListRepositorySyncDefinitions": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "syncDefinitions" + }, + "ListServiceInstanceOutputs": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "outputs" + }, + "ListServiceInstanceProvisionedResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "provisionedResources" + }, + "ListServicePipelineOutputs": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "outputs" + }, + "ListServicePipelineProvisionedResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "provisionedResources" + }, + "ListComponentOutputs": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "outputs" + }, + "ListComponentProvisionedResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "provisionedResources" + }, + "ListComponents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "components" + }, + "ListDeployments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "deployments" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/service-2.json.gz new file mode 100644 index 00000000..28927a6c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/waiters-2.json new file mode 100644 index 00000000..f99a6fe3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/proton/2020-07-20/waiters-2.json @@ -0,0 +1,208 @@ +{ + "version" : 2, + "waiters" : { + "ComponentDeleted" : { + "description" : "Wait until a Component is deleted. Use this after invoking DeleteComponent", + "delay" : 5, + "maxAttempts" : 999, + "operation" : "GetComponent", + "acceptors" : [ { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + }, { + "matcher" : "path", + "argument" : "component.deploymentStatus", + "state" : "failure", + "expected" : "DELETE_FAILED" + } ] + }, + "ComponentDeployed" : { + "description" : "Wait until a Component is deployed. Use this after invoking CreateComponent or UpdateComponent", + "delay" : 5, + "maxAttempts" : 999, + "operation" : "GetComponent", + "acceptors" : [ { + "matcher" : "path", + "argument" : "component.deploymentStatus", + "state" : "success", + "expected" : "SUCCEEDED" + }, { + "matcher" : "path", + "argument" : "component.deploymentStatus", + "state" : "failure", + "expected" : "FAILED" + } ] + }, + "EnvironmentDeployed" : { + "description" : "Wait until an Environment is deployed. Use this after invoking CreateEnvironment or UpdateEnvironment", + "delay" : 5, + "maxAttempts" : 999, + "operation" : "GetEnvironment", + "acceptors" : [ { + "matcher" : "path", + "argument" : "environment.deploymentStatus", + "state" : "success", + "expected" : "SUCCEEDED" + }, { + "matcher" : "path", + "argument" : "environment.deploymentStatus", + "state" : "failure", + "expected" : "FAILED" + } ] + }, + "EnvironmentTemplateVersionRegistered" : { + "description" : "Wait until an EnvironmentTemplateVersion is registered. Use this after invoking CreateEnvironmentTemplateVersion", + "delay" : 2, + "maxAttempts" : 150, + "operation" : "GetEnvironmentTemplateVersion", + "acceptors" : [ { + "matcher" : "path", + "argument" : "environmentTemplateVersion.status", + "state" : "success", + "expected" : "DRAFT" + }, { + "matcher" : "path", + "argument" : "environmentTemplateVersion.status", + "state" : "success", + "expected" : "PUBLISHED" + }, { + "matcher" : "path", + "argument" : "environmentTemplateVersion.status", + "state" : "failure", + "expected" : "REGISTRATION_FAILED" + } ] + }, + "ServiceCreated" : { + "description" : "Wait until an Service has deployed its instances and possibly pipeline. Use this after invoking CreateService", + "delay" : 5, + "maxAttempts" : 999, + "operation" : "GetService", + "acceptors" : [ { + "matcher" : "path", + "argument" : "service.status", + "state" : "success", + "expected" : "ACTIVE" + }, { + "matcher" : "path", + "argument" : "service.status", + "state" : "failure", + "expected" : "CREATE_FAILED_CLEANUP_COMPLETE" + }, { + "matcher" : "path", + "argument" : "service.status", + "state" : "failure", + "expected" : "CREATE_FAILED_CLEANUP_FAILED" + }, { + "matcher" : "path", + "argument" : "service.status", + "state" : "failure", + "expected" : "CREATE_FAILED" + } ] + }, + "ServiceDeleted" : { + "description" : "Wait until a Service, its instances, and possibly pipeline have been deleted after DeleteService is invoked", + "delay" : 5, + "maxAttempts" : 999, + "operation" : "GetService", + "acceptors" : [ { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + }, { + "matcher" : "path", + "argument" : "service.status", + "state" : "failure", + "expected" : "DELETE_FAILED" + } ] + }, + "ServiceInstanceDeployed" : { + "description" : "Wait until a ServiceInstance is deployed. Use this after invoking CreateService or UpdateServiceInstance", + "delay" : 5, + "maxAttempts" : 999, + "operation" : "GetServiceInstance", + "acceptors" : [ { + "matcher" : "path", + "argument" : "serviceInstance.deploymentStatus", + "state" : "success", + "expected" : "SUCCEEDED" + }, { + "matcher" : "path", + "argument" : "serviceInstance.deploymentStatus", + "state" : "failure", + "expected" : "FAILED" + } ] + }, + "ServicePipelineDeployed" : { + "description" : "Wait until an ServicePipeline is deployed. Use this after invoking CreateService or UpdateServicePipeline", + "delay" : 10, + "maxAttempts" : 360, + "operation" : "GetService", + "acceptors" : [ { + "matcher" : "path", + "argument" : "service.pipeline.deploymentStatus", + "state" : "success", + "expected" : "SUCCEEDED" + }, { + "matcher" : "path", + "argument" : "service.pipeline.deploymentStatus", + "state" : "failure", + "expected" : "FAILED" + } ] + }, + "ServiceTemplateVersionRegistered" : { + "description" : "Wait until a ServiceTemplateVersion is registered. Use this after invoking CreateServiceTemplateVersion", + "delay" : 2, + "maxAttempts" : 150, + "operation" : "GetServiceTemplateVersion", + "acceptors" : [ { + "matcher" : "path", + "argument" : "serviceTemplateVersion.status", + "state" : "success", + "expected" : "DRAFT" + }, { + "matcher" : "path", + "argument" : "serviceTemplateVersion.status", + "state" : "success", + "expected" : "PUBLISHED" + }, { + "matcher" : "path", + "argument" : "serviceTemplateVersion.status", + "state" : "failure", + "expected" : "REGISTRATION_FAILED" + } ] + }, + "ServiceUpdated" : { + "description" : "Wait until a Service, its instances, and possibly pipeline have been deployed after UpdateService is invoked", + "delay" : 5, + "maxAttempts" : 999, + "operation" : "GetService", + "acceptors" : [ { + "matcher" : "path", + "argument" : "service.status", + "state" : "success", + "expected" : "ACTIVE" + }, { + "matcher" : "path", + "argument" : "service.status", + "state" : "failure", + "expected" : "UPDATE_FAILED_CLEANUP_COMPLETE" + }, { + "matcher" : "path", + "argument" : "service.status", + "state" : "failure", + "expected" : "UPDATE_FAILED_CLEANUP_FAILED" + }, { + "matcher" : "path", + "argument" : "service.status", + "state" : "failure", + "expected" : "UPDATE_FAILED" + }, { + "matcher" : "path", + "argument" : "service.status", + "state" : "failure", + "expected" : "UPDATE_COMPLETE_CLEANUP_FAILED" + } ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a5f25bd8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/paginators-1.json new file mode 100644 index 00000000..d9de477c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/paginators-1.json @@ -0,0 +1,76 @@ +{ + "pagination": { + "GetChatControlsConfiguration": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "topicConfigurations" + }, + "ListApplications": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "applications" + }, + "ListConversations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "conversations" + }, + "ListDataSourceSyncJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "history" + }, + "ListDataSources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "dataSources" + }, + "ListDocuments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "documentDetailList" + }, + "ListGroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListIndices": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "indices" + }, + "ListMessages": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "messages" + }, + "ListPlugins": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "plugins" + }, + "ListRetrievers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "retrievers" + }, + "ListWebExperiences": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "webExperiences" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/paginators-1.sdk-extras.json new file mode 100644 index 00000000..11d3ddf3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/paginators-1.sdk-extras.json @@ -0,0 +1,13 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "GetChatControlsConfiguration": { + "non_aggregate_keys": [ + "responseScope", + "blockedPhrases" + ] + } + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/service-2.json.gz new file mode 100644 index 00000000..e44c574e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/qbusiness/2023-11-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qconnect/2020-10-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/qconnect/2020-10-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..990f1a55 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/qconnect/2020-10-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qconnect/2020-10-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/qconnect/2020-10-19/paginators-1.json new file mode 100644 index 00000000..2d69a269 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/qconnect/2020-10-19/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "ListAssistantAssociations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assistantAssociationSummaries" + }, + "ListAssistants": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assistantSummaries" + }, + "ListContents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "contentSummaries" + }, + "ListImportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "importJobSummaries" + }, + "ListKnowledgeBases": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "knowledgeBaseSummaries" + }, + "ListQuickResponses": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "quickResponseSummaries" + }, + "QueryAssistant": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "results" + }, + "SearchContent": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "contentSummaries" + }, + "SearchQuickResponses": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "results" + }, + "SearchSessions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "sessionSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qconnect/2020-10-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/qconnect/2020-10-19/service-2.json.gz new file mode 100644 index 00000000..d3c07956 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/qconnect/2020-10-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..51dee234 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/service-2.json.gz new file mode 100644 index 00000000..01b6a203 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb-session/2019-07-11/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..28c59629 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/service-2.json.gz new file mode 100644 index 00000000..d1b44b67 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/qldb/2019-01-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..222c7d39 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/paginators-1.json new file mode 100644 index 00000000..83b6264f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/paginators-1.json @@ -0,0 +1,190 @@ +{ + "pagination": { + "ListAnalyses": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AnalysisSummaryList" + }, + "ListDashboardVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DashboardVersionSummaryList" + }, + "ListDashboards": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DashboardSummaryList" + }, + "ListDataSets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DataSetSummaries" + }, + "ListDataSources": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DataSources" + }, + "ListIngestions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Ingestions" + }, + "ListNamespaces": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Namespaces" + }, + "ListTemplateAliases": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "TemplateAliasList" + }, + "ListTemplateVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "TemplateVersionSummaryList" + }, + "ListTemplates": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "TemplateSummaryList" + }, + "ListThemeVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ThemeVersionSummaryList" + }, + "ListThemes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ThemeSummaryList" + }, + "SearchAnalyses": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AnalysisSummaryList" + }, + "SearchDashboards": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DashboardSummaryList" + }, + "SearchDataSets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DataSetSummaries" + }, + "SearchDataSources": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DataSourceSummaries" + }, + "ListAssetBundleExportJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AssetBundleExportJobSummaryList" + }, + "ListAssetBundleImportJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AssetBundleImportJobSummaryList" + }, + "ListGroupMemberships": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "GroupMemberList" + }, + "ListGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "GroupList" + }, + "ListIAMPolicyAssignments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "IAMPolicyAssignments" + }, + "ListIAMPolicyAssignmentsForUser": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ActiveAssignments" + }, + "ListUserGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "GroupList" + }, + "ListUsers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "UserList" + }, + "SearchGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "GroupList" + }, + "DescribeFolderPermissions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Permissions" + }, + "DescribeFolderResolvedPermissions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Permissions" + }, + "ListFolderMembers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FolderMemberList" + }, + "ListFolders": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FolderSummaryList" + }, + "SearchFolders": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FolderSummaryList" + }, + "ListRoleMemberships": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "MembersList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json new file mode 100644 index 00000000..a97c2f8f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json @@ -0,0 +1,197 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "ListAnalyses": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListDashboardVersions": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListTemplateAliases": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListTemplateVersions": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListTemplates": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListThemeVersions": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListThemes": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "SearchAnalyses": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "SearchDashboards": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "SearchDataSets": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "SearchDataSources": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListNamespaces": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListIngestions": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListDataSources": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListDataSets": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListDashboards": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListAssetBundleExportJobs": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListAssetBundleImportJobs": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListGroupMemberships": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListGroups": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListIAMPolicyAssignments": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListIAMPolicyAssignmentsForUser": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListUserGroups": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListUsers": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "SearchGroups": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListFolders": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "ListFolderMembers": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "SearchFolders": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + }, + "DescribeFolderPermissions": { + "non_aggregate_keys": [ + "Status", + "RequestId", + "Arn", + "FolderId" + ] + }, + "DescribeFolderResolvedPermissions": { + "non_aggregate_keys": [ + "Status", + "RequestId", + "Arn", + "FolderId" + ] + }, + "ListRoleMemberships": { + "non_aggregate_keys": [ + "Status", + "RequestId" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/service-2.json.gz new file mode 100644 index 00000000..ea5c1f01 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/quicksight/2018-04-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ad191664 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/paginators-1.json new file mode 100644 index 00000000..ec438a09 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "GetResourcePolicies": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "policies" + }, + "GetResourceShareAssociations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "resourceShareAssociations" + }, + "GetResourceShareInvitations": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "resourceShareInvitations" + }, + "GetResourceShares": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "resourceShares" + }, + "ListPrincipals": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "principals" + }, + "ListResources": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "resources" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/service-2.json.gz new file mode 100644 index 00000000..d5913f93 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ram/2018-01-04/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..32f039c2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/paginators-1.json new file mode 100644 index 00000000..bdbfafb4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListRules": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Rules" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/service-2.json.gz new file mode 100644 index 00000000..28f1c2fa Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rbin/2021-06-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1bc5bb61 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/service-2.json.gz new file mode 100644 index 00000000..ccd7b8f8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rds-data/2018-08-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8e586d61 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/paginators-1.json new file mode 100644 index 00000000..76c4f3a1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/paginators-1.json @@ -0,0 +1,107 @@ +{ + "pagination": { + "DescribeDBEngineVersions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBEngineVersions" + }, + "DescribeDBInstances": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBInstances" + }, + "DescribeDBLogFiles": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DescribeDBLogFiles" + }, + "DescribeDBParameterGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBParameterGroups" + }, + "DescribeDBParameters": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Parameters" + }, + "DescribeDBSecurityGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBSecurityGroups" + }, + "DescribeDBSnapshots": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBSnapshots" + }, + "DescribeDBSubnetGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBSubnetGroups" + }, + "DescribeEngineDefaultParameters": { + "input_token": "Marker", + "output_token": "EngineDefaults.Marker", + "limit_key": "MaxRecords", + "result_key": "EngineDefaults.Parameters" + }, + "DescribeEventSubscriptions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "EventSubscriptionsList" + }, + "DescribeEvents": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Events" + }, + "DescribeOptionGroupOptions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "OptionGroupOptions" + }, + "DescribeOptionGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "OptionGroupsList" + }, + "DescribeOrderableDBInstanceOptions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "OrderableDBInstanceOptions" + }, + "DescribeReservedDBInstances": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReservedDBInstances" + }, + "DescribeReservedDBInstancesOfferings": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReservedDBInstancesOfferings" + }, + "DownloadDBLogFilePortion": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "NumberOfLines", + "more_results": "AdditionalDataPending", + "result_key": "LogFileData" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/service-2.json.gz new file mode 100644 index 00000000..0108373b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/waiters-2.json new file mode 100644 index 00000000..b0150079 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-09-01/waiters-2.json @@ -0,0 +1,97 @@ +{ + "version": 2, + "waiters": { + "DBInstanceAvailable": { + "delay": 30, + "operation": "DescribeDBInstances", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "incompatible-restore", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "incompatible-parameters", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "incompatible-parameters", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "incompatible-restore", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + } + ] + }, + "DBInstanceDeleted": { + "delay": 30, + "operation": "DescribeDBInstances", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "deleted", + "matcher": "pathAll", + "state": "success", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "creating", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "modifying", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "resetting-master-credentials", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e7f49c5d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/examples-1.json new file mode 100644 index 00000000..e72a328e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/examples-1.json @@ -0,0 +1,1951 @@ +{ + "version": "1.0", + "examples": { + "AddSourceIdentifierToSubscription": [ + { + "input": { + "SourceIdentifier": "mymysqlinstance", + "SubscriptionName": "mymysqleventsubscription" + }, + "output": { + "EventSubscription": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example add a source identifier to an event notification subscription.", + "id": "add-source-identifier-to-subscription-93fb6a15-0a59-4577-a7b5-e12db9752c14", + "title": "To add a source identifier to an event notification subscription" + } + ], + "AddTagsToResource": [ + { + "input": { + "ResourceName": "arn:aws:rds:us-east-1:992648334831:og:mymysqloptiongroup", + "Tags": [ + { + "Key": "Staging", + "Value": "LocationDB" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds a tag to an option group.", + "id": "add-tags-to-resource-fa99ef50-228b-449d-b893-ca4d4e9768ab", + "title": "To add tags to a resource" + } + ], + "ApplyPendingMaintenanceAction": [ + { + "input": { + "ApplyAction": "system-update", + "OptInType": "immediate", + "ResourceIdentifier": "arn:aws:rds:us-east-1:992648334831:db:mymysqlinstance" + }, + "output": { + "ResourcePendingMaintenanceActions": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example immediately applies a pending system update to a DB instance.", + "id": "apply-pending-maintenance-action-2a026047-8bbb-47fc-b695-abad9f308c24", + "title": "To apply a pending maintenance action" + } + ], + "AuthorizeDBSecurityGroupIngress": [ + { + "input": { + "CIDRIP": "203.0.113.5/32", + "DBSecurityGroupName": "mydbsecuritygroup" + }, + "output": { + "DBSecurityGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example authorizes access to the specified security group by the specified CIDR block.", + "id": "authorize-db-security-group-ingress-ebf9ab91-8912-4b07-a32e-ca150668164f", + "title": "To authorize DB security group integress" + } + ], + "CopyDBClusterParameterGroup": [ + { + "input": { + "SourceDBClusterParameterGroupIdentifier": "mydbclusterparametergroup", + "TargetDBClusterParameterGroupDescription": "My DB cluster parameter group copy", + "TargetDBClusterParameterGroupIdentifier": "mydbclusterparametergroup-copy" + }, + "output": { + "DBClusterParameterGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example copies a DB cluster parameter group.", + "id": "copy-db-cluster-parameter-group-6fefaffe-cde9-4dba-9f0b-d3f593572fe4", + "title": "To copy a DB cluster parameter group" + } + ], + "CopyDBClusterSnapshot": [ + { + "input": { + "SourceDBClusterSnapshotIdentifier": "rds:sample-cluster-2016-09-14-10-38", + "TargetDBClusterSnapshotIdentifier": "cluster-snapshot-copy-1" + }, + "output": { + "DBClusterSnapshot": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example copies an automated snapshot of a DB cluster to a new DB cluster snapshot.", + "id": "to-copy-a-db-cluster-snapshot-1473879770564", + "title": "To copy a DB cluster snapshot" + } + ], + "CopyDBParameterGroup": [ + { + "input": { + "SourceDBParameterGroupIdentifier": "mymysqlparametergroup", + "TargetDBParameterGroupDescription": "My MySQL parameter group copy", + "TargetDBParameterGroupIdentifier": "mymysqlparametergroup-copy" + }, + "output": { + "DBParameterGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example copies a DB parameter group.", + "id": "copy-db-parameter-group-610d4dba-2c87-467f-ae5d-edd7f8e47349", + "title": "To copy a DB parameter group" + } + ], + "CopyDBSnapshot": [ + { + "input": { + "SourceDBSnapshotIdentifier": "mydbsnapshot", + "TargetDBSnapshotIdentifier": "mydbsnapshot-copy" + }, + "output": { + "DBSnapshot": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example copies a DB snapshot.", + "id": "copy-db-snapshot-1b2f0210-bc67-415d-9822-6eecf447dc86", + "title": "To copy a DB snapshot" + } + ], + "CopyOptionGroup": [ + { + "input": { + "SourceOptionGroupIdentifier": "mymysqloptiongroup", + "TargetOptionGroupDescription": "My MySQL option group copy", + "TargetOptionGroupIdentifier": "mymysqloptiongroup-copy" + }, + "output": { + "OptionGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example copies an option group.", + "id": "copy-option-group-8d5c01c3-8846-4e9c-a4b0-1b7237f7d0ec", + "title": "To copy an option group" + } + ], + "CreateDBCluster": [ + { + "input": { + "AvailabilityZones": [ + "us-east-1a" + ], + "BackupRetentionPeriod": 1, + "DBClusterIdentifier": "mydbcluster", + "DBClusterParameterGroupName": "mydbclusterparametergroup", + "DatabaseName": "myauroradb", + "Engine": "aurora", + "EngineVersion": "5.6.10a", + "MasterUserPassword": "mypassword", + "MasterUsername": "myuser", + "Port": 3306, + "StorageEncrypted": true + }, + "output": { + "DBCluster": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DB cluster.", + "id": "create-db-cluster-423b998d-eba9-40dd-8e19-96c5b6e5f31d", + "title": "To create a DB cluster" + } + ], + "CreateDBClusterParameterGroup": [ + { + "input": { + "DBClusterParameterGroupName": "mydbclusterparametergroup", + "DBParameterGroupFamily": "aurora5.6", + "Description": "My DB cluster parameter group" + }, + "output": { + "DBClusterParameterGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DB cluster parameter group.", + "id": "create-db-cluster-parameter-group-8eb1c3ae-1965-4262-afe3-ee134c4430b1", + "title": "To create a DB cluster parameter group" + } + ], + "CreateDBClusterSnapshot": [ + { + "input": { + "DBClusterIdentifier": "mydbcluster", + "DBClusterSnapshotIdentifier": "mydbclustersnapshot" + }, + "output": { + "DBClusterSnapshot": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DB cluster snapshot.", + "id": "create-db-cluster-snapshot-", + "title": "To create a DB cluster snapshot" + } + ], + "CreateDBInstance": [ + { + "input": { + "AllocatedStorage": 5, + "DBInstanceClass": "db.t2.micro", + "DBInstanceIdentifier": "mymysqlinstance", + "Engine": "MySQL", + "MasterUserPassword": "MyPassword", + "MasterUsername": "MyUser" + }, + "output": { + "DBInstance": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DB instance.", + "id": "create-db-instance-57eb5d16-8bf8-4c84-9709-1700322b37b9", + "title": "To create a DB instance." + } + ], + "CreateDBInstanceReadReplica": [ + { + "input": { + "AvailabilityZone": "us-east-1a", + "CopyTagsToSnapshot": true, + "DBInstanceClass": "db.t2.micro", + "DBInstanceIdentifier": "mydbreadreplica", + "PubliclyAccessible": true, + "SourceDBInstanceIdentifier": "mymysqlinstance", + "StorageType": "gp2", + "Tags": [ + { + "Key": "mydbreadreplicakey", + "Value": "mydbreadreplicavalue" + } + ] + }, + "output": { + "DBInstance": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DB instance read replica.", + "id": "create-db-instance-read-replica-81b41cd5-2871-4dae-bc59-3e264449d5fe", + "title": "To create a DB instance read replica." + } + ], + "CreateDBParameterGroup": [ + { + "input": { + "DBParameterGroupFamily": "mysql5.6", + "DBParameterGroupName": "mymysqlparametergroup", + "Description": "My MySQL parameter group" + }, + "output": { + "DBParameterGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DB parameter group.", + "id": "create-db-parameter-group-42afcc37-12e9-4b6a-a55c-b8a141246e87", + "title": "To create a DB parameter group." + } + ], + "CreateDBSecurityGroup": [ + { + "input": { + "DBSecurityGroupDescription": "My DB security group", + "DBSecurityGroupName": "mydbsecuritygroup" + }, + "output": { + "DBSecurityGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DB security group.", + "id": "create-db-security-group-41b6786a-539e-42a5-a645-a8bc3cf99353", + "title": "To create a DB security group." + } + ], + "CreateDBSnapshot": [ + { + "input": { + "DBInstanceIdentifier": "mymysqlinstance", + "DBSnapshotIdentifier": "mydbsnapshot" + }, + "output": { + "DBSnapshot": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DB snapshot.", + "id": "create-db-snapshot-e10e0e2c-9ac4-426d-9b17-6b6a3e382ce2", + "title": "To create a DB snapshot." + } + ], + "CreateDBSubnetGroup": [ + { + "input": { + "DBSubnetGroupDescription": "My DB subnet group", + "DBSubnetGroupName": "mydbsubnetgroup", + "SubnetIds": [ + "subnet-1fab8a69", + "subnet-d43a468c" + ] + }, + "output": { + "DBSubnetGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a DB subnet group.", + "id": "create-db-subnet-group-c3d162c2-0ec4-4955-ba89-18967615fdb8", + "title": "To create a DB subnet group." + } + ], + "CreateEventSubscription": [ + { + "input": { + "Enabled": true, + "EventCategories": [ + "availability" + ], + "SnsTopicArn": "arn:aws:sns:us-east-1:992648334831:MyDemoSNSTopic", + "SourceIds": [ + "mymysqlinstance" + ], + "SourceType": "db-instance", + "SubscriptionName": "mymysqleventsubscription" + }, + "output": { + "EventSubscription": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an event notification subscription.", + "id": "create-event-subscription-00dd0ee6-0e0f-4a38-ae83-e5f2ded5f69a", + "title": "To create an event notification subscription" + } + ], + "CreateOptionGroup": [ + { + "input": { + "EngineName": "MySQL", + "MajorEngineVersion": "5.6", + "OptionGroupDescription": "My MySQL 5.6 option group", + "OptionGroupName": "mymysqloptiongroup" + }, + "output": { + "OptionGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an option group.", + "id": "create-option-group-a7708c87-1b79-4a5e-a762-21cf8fc62b78", + "title": "To create an option group" + } + ], + "DeleteDBCluster": [ + { + "input": { + "DBClusterIdentifier": "mydbcluster", + "SkipFinalSnapshot": true + }, + "output": { + "DBCluster": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified DB cluster.", + "id": "delete-db-cluster-927fc2c8-6c67-4075-b1ba-75490be0f7d6", + "title": "To delete a DB cluster." + } + ], + "DeleteDBClusterParameterGroup": [ + { + "input": { + "DBClusterParameterGroupName": "mydbclusterparametergroup" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified DB cluster parameter group.", + "id": "delete-db-cluster-parameter-group-364f5555-ba0a-4cc8-979c-e769098924fc", + "title": "To delete a DB cluster parameter group." + } + ], + "DeleteDBClusterSnapshot": [ + { + "input": { + "DBClusterSnapshotIdentifier": "mydbclustersnapshot" + }, + "output": { + "DBClusterSnapshot": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified DB cluster snapshot.", + "id": "delete-db-cluster-snapshot-c67e0d95-670e-4fb5-af90-6d9a70a91b07", + "title": "To delete a DB cluster snapshot." + } + ], + "DeleteDBInstance": [ + { + "input": { + "DBInstanceIdentifier": "mymysqlinstance", + "SkipFinalSnapshot": true + }, + "output": { + "DBInstance": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified DB instance.", + "id": "delete-db-instance-4412e650-949c-488a-b32a-7d3038ebccc4", + "title": "To delete a DB instance." + } + ], + "DeleteDBParameterGroup": [ + { + "input": { + "DBParameterGroupName": "mydbparamgroup3" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a DB parameter group.", + "id": "to-delete-a-db-parameter-group-1473888796509", + "title": "To delete a DB parameter group" + } + ], + "DeleteDBSecurityGroup": [ + { + "input": { + "DBSecurityGroupName": "mysecgroup" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a DB security group.", + "id": "to-delete-a-db-security-group-1473960141889", + "title": "To delete a DB security group" + } + ], + "DeleteDBSnapshot": [ + { + "input": { + "DBSnapshotIdentifier": "mydbsnapshot" + }, + "output": { + "DBSnapshot": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified DB snapshot.", + "id": "delete-db-snapshot-505d6b4e-8ced-479c-856a-c460a33fe07b", + "title": "To delete a DB cluster snapshot." + } + ], + "DeleteDBSubnetGroup": [ + { + "input": { + "DBSubnetGroupName": "mydbsubnetgroup" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified DB subnetgroup.", + "id": "delete-db-subnet-group-4ae00375-511e-443d-a01d-4b9f552244aa", + "title": "To delete a DB subnet group." + } + ], + "DeleteEventSubscription": [ + { + "input": { + "SubscriptionName": "myeventsubscription" + }, + "output": { + "EventSubscription": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified DB event subscription.", + "id": "delete-db-event-subscription-d33567e3-1d5d-48ff-873f-0270453f4a75", + "title": "To delete a DB event subscription." + } + ], + "DeleteOptionGroup": [ + { + "input": { + "OptionGroupName": "mydboptiongroup" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified option group.", + "id": "delete-db-option-group-578be2be-3095-431a-9ea4-9a3c3b0daef4", + "title": "To delete an option group." + } + ], + "DescribeAccountAttributes": [ + { + "input": { + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists account attributes.", + "id": "describe-account-attributes-683d3ff7-5524-421a-8da5-e88f1ea2222b", + "title": "To list account attributes" + } + ], + "DescribeCertificates": [ + { + "input": { + "CertificateIdentifier": "rds-ca-2015", + "MaxRecords": 20 + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists up to 20 certificates for the specified certificate identifier.", + "id": "describe-certificates-9d71a70d-7908-4444-b43f-321d842c62dc", + "title": "To list certificates" + } + ], + "DescribeDBClusterParameterGroups": [ + { + "input": { + "DBClusterParameterGroupName": "mydbclusterparametergroup" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists settings for the specified DB cluster parameter group.", + "id": "describe-db-cluster-parameter-groups-cf9c6e66-664e-4f57-8e29-a9080abfc013", + "title": "To list DB cluster parameter group settings" + } + ], + "DescribeDBClusterParameters": [ + { + "input": { + "DBClusterParameterGroupName": "mydbclusterparametergroup", + "Source": "system" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists system parameters for the specified DB cluster parameter group.", + "id": "describe-db-cluster-parameters-98043c28-e489-41a7-b118-bfd96dc779a1", + "title": "To list DB cluster parameters" + } + ], + "DescribeDBClusterSnapshotAttributes": [ + { + "input": { + "DBClusterSnapshotIdentifier": "mydbclustersnapshot" + }, + "output": { + "DBClusterSnapshotAttributesResult": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists attributes for the specified DB cluster snapshot.", + "id": "describe-db-cluster-snapshot-attributes-6752ade3-0c7b-4b06-a8e4-b76bf4e2d3571", + "title": "To list DB cluster snapshot attributes" + } + ], + "DescribeDBClusterSnapshots": [ + { + "input": { + "DBClusterSnapshotIdentifier": "mydbclustersnapshot", + "SnapshotType": "manual" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists settings for the specified, manually-created cluster snapshot.", + "id": "describe-db-cluster-snapshots-52f38af1-3431-4a51-9a6a-e6bb8c961b32", + "title": "To list DB cluster snapshots" + } + ], + "DescribeDBClusters": [ + { + "input": { + "DBClusterIdentifier": "mynewdbcluster" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists settings for the specified DB cluster.", + "id": "describe-db-clusters-7aae8861-cb95-4b3b-9042-f62df7698635", + "title": "To list DB clusters" + } + ], + "DescribeDBEngineVersions": [ + { + "input": { + "DBParameterGroupFamily": "mysql5.6", + "DefaultOnly": true, + "Engine": "mysql", + "EngineVersion": "5.6", + "ListSupportedCharacterSets": true + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists settings for the specified DB engine version.", + "id": "describe-db-engine-versions-8e698cf2-2162-425a-a854-111cdaceb52b", + "title": "To list DB engine version settings" + } + ], + "DescribeDBInstances": [ + { + "input": { + "DBInstanceIdentifier": "mymysqlinstance" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists settings for the specified DB instance.", + "id": "describe-db-instances-0e11a8c5-4ec3-4463-8cbf-f7254d04c4fc", + "title": "To list DB instance settings" + } + ], + "DescribeDBLogFiles": [ + { + "input": { + "DBInstanceIdentifier": "mymysqlinstance", + "FileLastWritten": 1470873600000, + "FileSize": 0, + "FilenameContains": "error" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists matching log file names for the specified DB instance, file name pattern, last write date in POSIX time with milleseconds, and minimum file size.", + "id": "describe-db-log-files-5f002d8d-5c1d-44c2-b5f4-bd284c0f1285", + "title": "To list DB log file names" + } + ], + "DescribeDBParameterGroups": [ + { + "input": { + "DBParameterGroupName": "mymysqlparametergroup" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information about the specified DB parameter group.", + "id": "describe-db-parameter-groups-", + "title": "To list information about DB parameter groups" + } + ], + "DescribeDBParameters": [ + { + "input": { + "DBParameterGroupName": "mymysqlparametergroup", + "MaxRecords": 20, + "Source": "system" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information for up to the first 20 system parameters for the specified DB parameter group.", + "id": "describe-db-parameters-09db4201-ef4f-4d97-a4b5-d71c0715b901", + "title": "To list information about DB parameters" + } + ], + "DescribeDBSecurityGroups": [ + { + "input": { + "DBSecurityGroupName": "mydbsecuritygroup" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists settings for the specified security group.", + "id": "describe-db-security-groups-66fe9ea1-17dd-4275-b82e-f771cee0c849", + "title": "To list DB security group settings" + } + ], + "DescribeDBSnapshotAttributes": [ + { + "input": { + "DBSnapshotIdentifier": "mydbsnapshot" + }, + "output": { + "DBSnapshotAttributesResult": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists attributes for the specified DB snapshot.", + "id": "describe-db-snapshot-attributes-1d4fb750-34f6-4e43-8b3d-b2751d796a95", + "title": "To list DB snapshot attributes" + } + ], + "DescribeDBSnapshots": [ + { + "input": { + "DBInstanceIdentifier": "mymysqlinstance", + "IncludePublic": false, + "IncludeShared": true, + "SnapshotType": "manual" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists all manually-created, shared snapshots for the specified DB instance.", + "id": "describe-db-snapshots-2c935989-a1ef-4c85-aea4-1d0f45f17f26", + "title": "To list DB snapshot attributes" + } + ], + "DescribeDBSubnetGroups": [ + { + "input": { + "DBSubnetGroupName": "mydbsubnetgroup" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information about the specified DB subnet group.", + "id": "describe-db-subnet-groups-1d97b340-682f-4dd6-9653-8ed72a8d1221", + "title": "To list information about DB subnet groups" + } + ], + "DescribeEngineDefaultClusterParameters": [ + { + "input": { + "DBParameterGroupFamily": "aurora5.6" + }, + "output": { + "EngineDefaults": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists default parameters for the specified DB cluster engine.", + "id": "describe-engine-default-cluster-parameters-f130374a-7bee-434b-b51d-da20b6e000e0", + "title": "To list default parameters for a DB cluster engine" + } + ], + "DescribeEngineDefaultParameters": [ + { + "input": { + "DBParameterGroupFamily": "mysql5.6" + }, + "output": { + "EngineDefaults": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists default parameters for the specified DB engine.", + "id": "describe-engine-default-parameters-35d5108e-1d44-4fac-8aeb-04b8fdfface1", + "title": "To list default parameters for a DB engine" + } + ], + "DescribeEventCategories": [ + { + "input": { + "SourceType": "db-instance" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists all DB instance event categories.", + "id": "describe-event-categories-97bd4c77-12da-4be6-b42f-edf77771428b", + "title": "To list event categories." + } + ], + "DescribeEventSubscriptions": [ + { + "input": { + "SubscriptionName": "mymysqleventsubscription" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information for the specified DB event notification subscription.", + "id": "describe-event-subscriptions-11184a82-e58a-4d0c-b558-f3a7489e0850", + "title": "To list information about DB event notification subscriptions" + } + ], + "DescribeEvents": [ + { + "input": { + "Duration": 10080, + "EventCategories": [ + "backup" + ], + "SourceIdentifier": "mymysqlinstance", + "SourceType": "db-instance" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information for all backup-related events for the specified DB instance for the past 7 days (7 days * 24 hours * 60 minutes = 10,080 minutes).", + "id": "describe-events-3836e5ed-3913-4f76-8452-c77fcad5016b", + "title": "To list information about events" + } + ], + "DescribeOptionGroupOptions": [ + { + "input": { + "EngineName": "mysql", + "MajorEngineVersion": "5.6" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information for all option group options for the specified DB engine.", + "id": "describe-option-group-options-30d735a4-81f1-49e4-b3f2-5dc45d50c8ed", + "title": "To list information about DB option group options" + } + ], + "DescribeOptionGroups": [ + { + "input": { + "EngineName": "mysql", + "MajorEngineVersion": "5.6" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information for all option groups for the specified DB engine.", + "id": "describe-option-groups-4ef478a1-66d5-45f2-bec3-e608720418a4", + "title": "To list information about DB option groups" + } + ], + "DescribeOrderableDBInstanceOptions": [ + { + "input": { + "DBInstanceClass": "db.t2.micro", + "Engine": "mysql", + "EngineVersion": "5.6.27", + "LicenseModel": "general-public-license", + "Vpc": true + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information for all orderable DB instance options for the specified DB engine, engine version, DB instance class, license model, and VPC settings.", + "id": "describe-orderable-db-instance-options-7444d3ed-82eb-42b9-9ed9-896b8c27a782", + "title": "To list information about orderable DB instance options" + } + ], + "DescribePendingMaintenanceActions": [ + { + "input": { + "ResourceIdentifier": "arn:aws:rds:us-east-1:992648334831:db:mymysqlinstance" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information for all pending maintenance actions for the specified DB instance.", + "id": "describe-pending-maintenance-actions-e6021f7e-58ae-49cc-b874-11996176835c", + "title": "To list information about pending maintenance actions" + } + ], + "DescribeReservedDBInstances": [ + { + "input": { + "DBInstanceClass": "db.t2.micro", + "Duration": "1y", + "MultiAZ": false, + "OfferingType": "No Upfront", + "ProductDescription": "mysql" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information for all reserved DB instances for the specified DB instance class, duration, product, offering type, and availability zone settings.", + "id": "describe-reserved-db-instances-d45adaca-2e30-407c-a0f3-aa7b98bea17f", + "title": "To list information about reserved DB instances" + } + ], + "DescribeReservedDBInstancesOfferings": [ + { + "input": { + "DBInstanceClass": "db.t2.micro", + "Duration": "1y", + "MultiAZ": false, + "OfferingType": "No Upfront", + "ProductDescription": "mysql" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information for all reserved DB instance offerings for the specified DB instance class, duration, product, offering type, and availability zone settings.", + "id": "describe-reserved-db-instances-offerings-9de7d1fd-d6a6-4a72-84ae-b2ef58d47d8d", + "title": "To list information about reserved DB instance offerings" + } + ], + "DescribeSourceRegions": [ + { + "input": { + }, + "output": { + "SourceRegions": [ + { + "Endpoint": "https://rds.ap-northeast-1.amazonaws.com", + "RegionName": "ap-northeast-1", + "Status": "available" + }, + { + "Endpoint": "https://rds.ap-northeast-2.amazonaws.com", + "RegionName": "ap-northeast-2", + "Status": "available" + }, + { + "Endpoint": "https://rds.ap-south-1.amazonaws.com", + "RegionName": "ap-south-1", + "Status": "available" + }, + { + "Endpoint": "https://rds.ap-southeast-1.amazonaws.com", + "RegionName": "ap-southeast-1", + "Status": "available" + }, + { + "Endpoint": "https://rds.ap-southeast-2.amazonaws.com", + "RegionName": "ap-southeast-2", + "Status": "available" + }, + { + "Endpoint": "https://rds.eu-central-1.amazonaws.com", + "RegionName": "eu-central-1", + "Status": "available" + }, + { + "Endpoint": "https://rds.eu-west-1.amazonaws.com", + "RegionName": "eu-west-1", + "Status": "available" + }, + { + "Endpoint": "https://rds.sa-east-1.amazonaws.com", + "RegionName": "sa-east-1", + "Status": "available" + }, + { + "Endpoint": "https://rds.us-west-1.amazonaws.com", + "RegionName": "us-west-1", + "Status": "available" + }, + { + "Endpoint": "https://rds.us-west-2.amazonaws.com", + "RegionName": "us-west-2", + "Status": "available" + } + ] + }, + "comments": { + }, + "description": "To list the AWS regions where a Read Replica can be created.", + "id": "to-describe-source-regions-1473457722410", + "title": "To describe source regions" + } + ], + "DownloadDBLogFilePortion": [ + { + "input": { + "DBInstanceIdentifier": "mymysqlinstance", + "LogFileName": "mysqlUpgrade" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information for the specified log file for the specified DB instance.", + "id": "download-db-log-file-portion-54a82731-a441-4fc7-a010-8eccae6fa202", + "title": "To list information about DB log files" + } + ], + "FailoverDBCluster": [ + { + "input": { + "DBClusterIdentifier": "myaurorainstance-cluster", + "TargetDBInstanceIdentifier": "myaurorareplica" + }, + "output": { + "DBCluster": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example performs a failover for the specified DB cluster to the specified DB instance.", + "id": "failover-db-cluster-9e7f2f93-d98c-42c7-bb0e-d6c485c096d6", + "title": "To perform a failover for a DB cluster" + } + ], + "ListTagsForResource": [ + { + "input": { + "ResourceName": "arn:aws:rds:us-east-1:992648334831:og:mymysqloptiongroup" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists information about all tags associated with the specified DB option group.", + "id": "list-tags-for-resource-8401f3c2-77cd-4f90-bfd5-b523f0adcc2f", + "title": "To list information about tags associated with a resource" + } + ], + "ModifyDBCluster": [ + { + "input": { + "ApplyImmediately": true, + "DBClusterIdentifier": "mydbcluster", + "MasterUserPassword": "mynewpassword", + "NewDBClusterIdentifier": "mynewdbcluster", + "PreferredBackupWindow": "04:00-04:30", + "PreferredMaintenanceWindow": "Tue:05:00-Tue:05:30" + }, + "output": { + "DBCluster": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example changes the specified settings for the specified DB cluster.", + "id": "modify-db-cluster-a370ee1b-768d-450a-853b-707cb1ab663d", + "title": "To change DB cluster settings" + } + ], + "ModifyDBClusterParameterGroup": [ + { + "input": { + "DBClusterParameterGroupName": "mydbclusterparametergroup", + "Parameters": [ + { + "ApplyMethod": "immediate", + "ParameterName": "time_zone", + "ParameterValue": "America/Phoenix" + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example immediately changes the specified setting for the specified DB cluster parameter group.", + "id": "modify-db-cluster-parameter-group-f9156bc9-082a-442e-8d12-239542c1a113", + "title": "To change DB cluster parameter group settings" + } + ], + "ModifyDBClusterSnapshotAttribute": [ + { + "input": { + "AttributeName": "restore", + "DBClusterSnapshotIdentifier": "manual-cluster-snapshot1", + "ValuesToAdd": [ + "123451234512", + "123456789012" + ], + "ValuesToRemove": [ + "all" + ] + }, + "output": { + "DBClusterSnapshotAttributesResult": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example gives two AWS accounts access to a manual DB cluster snapshot and ensures that the DB cluster snapshot is private by removing the value \"all\".", + "id": "to-add-or-remove-access-to-a-manual-db-cluster-snapshot-1473889426431", + "title": "To add or remove access to a manual DB cluster snapshot" + } + ], + "ModifyDBInstance": [ + { + "input": { + "AllocatedStorage": 10, + "ApplyImmediately": true, + "BackupRetentionPeriod": 1, + "DBInstanceClass": "db.t2.small", + "DBInstanceIdentifier": "mymysqlinstance", + "MasterUserPassword": "mynewpassword", + "PreferredBackupWindow": "04:00-04:30", + "PreferredMaintenanceWindow": "Tue:05:00-Tue:05:30" + }, + "output": { + "DBInstance": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example immediately changes the specified settings for the specified DB instance.", + "id": "modify-db-instance-6979a368-6254-467b-8a8d-61103f4fcde9", + "title": "To change DB instance settings" + } + ], + "ModifyDBParameterGroup": [ + { + "input": { + "DBParameterGroupName": "mymysqlparametergroup", + "Parameters": [ + { + "ApplyMethod": "immediate", + "ParameterName": "time_zone", + "ParameterValue": "America/Phoenix" + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example immediately changes the specified setting for the specified DB parameter group.", + "id": "modify-db-parameter-group-f3a4e52a-68e4-4b88-b559-f912d34c457a", + "title": "To change DB parameter group settings" + } + ], + "ModifyDBSnapshotAttribute": [ + { + "input": { + "AttributeName": "restore", + "DBSnapshotIdentifier": "mydbsnapshot", + "ValuesToAdd": [ + "all" + ] + }, + "output": { + "DBSnapshotAttributesResult": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds the specified attribute for the specified DB snapshot.", + "id": "modify-db-snapshot-attribute-2e66f120-2b21-4a7c-890b-4474da88bde6", + "title": "To change DB snapshot attributes" + } + ], + "ModifyDBSubnetGroup": [ + { + "input": { + "DBSubnetGroupName": "mydbsubnetgroup", + "SubnetIds": [ + "subnet-70e1975a", + "subnet-747a5c49" + ] + }, + "output": { + "DBSubnetGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example changes the specified setting for the specified DB subnet group.", + "id": "modify-db-subnet-group-e34a97d9-8fe6-4239-a4ed-ad6e73a956b0", + "title": "To change DB subnet group settings" + } + ], + "ModifyEventSubscription": [ + { + "input": { + "Enabled": true, + "EventCategories": [ + "deletion", + "low storage" + ], + "SourceType": "db-instance", + "SubscriptionName": "mymysqleventsubscription" + }, + "output": { + "EventSubscription": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example changes the specified setting for the specified event notification subscription.", + "id": "modify-event-subscription-405ac869-1f02-42cd-b8f4-6950a435f30e", + "title": "To change event notification subscription settings" + } + ], + "ModifyOptionGroup": [ + { + "input": { + "ApplyImmediately": true, + "OptionGroupName": "myawsuser-og02", + "OptionsToInclude": [ + { + "DBSecurityGroupMemberships": [ + "default" + ], + "OptionName": "MEMCACHED" + } + ] + }, + "output": { + "OptionGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example adds an option to an option group.", + "id": "to-modify-an-option-group-1473890247875", + "title": "To modify an option group" + } + ], + "PromoteReadReplica": [ + { + "input": { + "BackupRetentionPeriod": 1, + "DBInstanceIdentifier": "mydbreadreplica", + "PreferredBackupWindow": "03:30-04:00" + }, + "output": { + "DBInstance": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example promotes the specified read replica and sets its backup retention period and preferred backup window.", + "id": "promote-read-replica-cc580039-c55d-4035-838a-def4a1ae4181", + "title": "To promote a read replica" + } + ], + "PurchaseReservedDBInstancesOffering": [ + { + "input": { + "ReservedDBInstanceId": "myreservationid", + "ReservedDBInstancesOfferingId": "fb29428a-646d-4390-850e-5fe89926e727" + }, + "output": { + "ReservedDBInstance": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example purchases a reserved DB instance offering that matches the specified settings.", + "id": "purchase-reserved-db-instances-offfering-f423c736-8413-429b-ba13-850fd4fa4dcd", + "title": "To purchase a reserved DB instance offering" + } + ], + "RebootDBInstance": [ + { + "input": { + "DBInstanceIdentifier": "mymysqlinstance", + "ForceFailover": false + }, + "output": { + "DBInstance": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example reboots the specified DB instance without forcing a failover.", + "id": "reboot-db-instance-b9ce8a0a-2920-451d-a1f3-01d288aa7366", + "title": "To reboot a DB instance" + } + ], + "RemoveSourceIdentifierFromSubscription": [ + { + "input": { + "SourceIdentifier": "mymysqlinstance", + "SubscriptionName": "myeventsubscription" + }, + "output": { + "EventSubscription": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example removes the specified source identifier from the specified DB event subscription.", + "id": "remove-source-identifier-from-subscription-30d25493-c19d-4cf7-b4e5-68371d0d8770", + "title": "To remove a source identifier from a DB event subscription" + } + ], + "RemoveTagsFromResource": [ + { + "input": { + "ResourceName": "arn:aws:rds:us-east-1:992648334831:og:mydboptiongroup", + "TagKeys": [ + "MyKey" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example removes the specified tag associated with the specified DB option group.", + "id": "remove-tags-from-resource-49f00574-38f6-4d01-ac89-d3c668449ce3", + "title": "To remove tags from a resource" + } + ], + "ResetDBClusterParameterGroup": [ + { + "input": { + "DBClusterParameterGroupName": "mydbclusterparametergroup", + "ResetAllParameters": true + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example resets all parameters for the specified DB cluster parameter group to their default values.", + "id": "reset-db-cluster-parameter-group-b04aeaf7-7f73-49e1-9bb4-857573ea3ee4", + "title": "To reset the values of a DB cluster parameter group" + } + ], + "ResetDBParameterGroup": [ + { + "input": { + "DBParameterGroupName": "mydbparametergroup", + "ResetAllParameters": true + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example resets all parameters for the specified DB parameter group to their default values.", + "id": "reset-db-parameter-group-ed2ed723-de0d-4824-8af5-3c65fa130abf", + "title": "To reset the values of a DB parameter group" + } + ], + "RestoreDBClusterFromSnapshot": [ + { + "input": { + "DBClusterIdentifier": "restored-cluster1", + "Engine": "aurora", + "SnapshotIdentifier": "sample-cluster-snapshot1" + }, + "output": { + "DBCluster": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example restores an Amazon Aurora DB cluster from a DB cluster snapshot.", + "id": "to-restore-an-amazon-aurora-db-cluster-from-a-db-cluster-snapshot-1473958144325", + "title": "To restore an Amazon Aurora DB cluster from a DB cluster snapshot" + } + ], + "RestoreDBClusterToPointInTime": [ + { + "input": { + "DBClusterIdentifier": "sample-restored-cluster1", + "RestoreToTime": "2016-09-13T18:45:00Z", + "SourceDBClusterIdentifier": "sample-cluster1" + }, + "output": { + "DBCluster": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example restores a DB cluster to a new DB cluster at a point in time from the source DB cluster.", + "id": "to-restore-a-db-cluster-to-a-point-in-time-1473962082214", + "title": "To restore a DB cluster to a point in time." + } + ], + "RestoreDBInstanceFromDBSnapshot": [ + { + "input": { + "DBInstanceIdentifier": "mysqldb-restored", + "DBSnapshotIdentifier": "rds:mysqldb-2014-04-22-08-15" + }, + "output": { + "DBInstance": { + "AllocatedStorage": 200, + "AutoMinorVersionUpgrade": true, + "AvailabilityZone": "us-west-2b", + "BackupRetentionPeriod": 7, + "CACertificateIdentifier": "rds-ca-2015", + "CopyTagsToSnapshot": false, + "DBInstanceArn": "arn:aws:rds:us-west-2:123456789012:db:mysqldb-restored", + "DBInstanceClass": "db.t2.small", + "DBInstanceIdentifier": "mysqldb-restored", + "DBInstanceStatus": "available", + "DBName": "sample", + "DBParameterGroups": [ + { + "DBParameterGroupName": "default.mysql5.6", + "ParameterApplyStatus": "in-sync" + } + ], + "DBSecurityGroups": [ + + ], + "DBSubnetGroup": { + "DBSubnetGroupDescription": "default", + "DBSubnetGroupName": "default", + "SubnetGroupStatus": "Complete", + "Subnets": [ + { + "SubnetAvailabilityZone": { + "Name": "us-west-2a" + }, + "SubnetIdentifier": "subnet-77e8db03", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-west-2b" + }, + "SubnetIdentifier": "subnet-c39989a1", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-west-2c" + }, + "SubnetIdentifier": "subnet-4b267b0d", + "SubnetStatus": "Active" + } + ], + "VpcId": "vpc-c1c5b3a3" + }, + "DbInstancePort": 0, + "DbiResourceId": "db-VNZUCCBTEDC4WR7THXNJO72HVQ", + "DomainMemberships": [ + + ], + "Engine": "mysql", + "EngineVersion": "5.6.27", + "LicenseModel": "general-public-license", + "MasterUsername": "mymasteruser", + "MonitoringInterval": 0, + "MultiAZ": false, + "OptionGroupMemberships": [ + { + "OptionGroupName": "default:mysql-5-6", + "Status": "in-sync" + } + ], + "PendingModifiedValues": { + }, + "PreferredBackupWindow": "12:58-13:28", + "PreferredMaintenanceWindow": "tue:10:16-tue:10:46", + "PubliclyAccessible": true, + "ReadReplicaDBInstanceIdentifiers": [ + + ], + "StorageEncrypted": false, + "StorageType": "gp2", + "VpcSecurityGroups": [ + { + "Status": "active", + "VpcSecurityGroupId": "sg-e5e5b0d2" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example restores a DB instance from a DB snapshot.", + "id": "to-restore-a-db-instance-from-a-db-snapshot-1473961657311", + "title": "To restore a DB instance from a DB snapshot." + } + ], + "RestoreDBInstanceToPointInTime": [ + { + "input": { + "RestoreTime": "2016-09-13T18:45:00Z", + "SourceDBInstanceIdentifier": "mysql-sample", + "TargetDBInstanceIdentifier": "mysql-sample-restored" + }, + "output": { + "DBInstance": { + "AllocatedStorage": 200, + "AutoMinorVersionUpgrade": true, + "AvailabilityZone": "us-west-2b", + "BackupRetentionPeriod": 7, + "CACertificateIdentifier": "rds-ca-2015", + "CopyTagsToSnapshot": false, + "DBInstanceArn": "arn:aws:rds:us-west-2:123456789012:db:mysql-sample-restored", + "DBInstanceClass": "db.t2.small", + "DBInstanceIdentifier": "mysql-sample-restored", + "DBInstanceStatus": "available", + "DBName": "sample", + "DBParameterGroups": [ + { + "DBParameterGroupName": "default.mysql5.6", + "ParameterApplyStatus": "in-sync" + } + ], + "DBSecurityGroups": [ + + ], + "DBSubnetGroup": { + "DBSubnetGroupDescription": "default", + "DBSubnetGroupName": "default", + "SubnetGroupStatus": "Complete", + "Subnets": [ + { + "SubnetAvailabilityZone": { + "Name": "us-west-2a" + }, + "SubnetIdentifier": "subnet-77e8db03", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-west-2b" + }, + "SubnetIdentifier": "subnet-c39989a1", + "SubnetStatus": "Active" + }, + { + "SubnetAvailabilityZone": { + "Name": "us-west-2c" + }, + "SubnetIdentifier": "subnet-4b267b0d", + "SubnetStatus": "Active" + } + ], + "VpcId": "vpc-c1c5b3a3" + }, + "DbInstancePort": 0, + "DbiResourceId": "db-VNZUCCBTEDC4WR7THXNJO72HVQ", + "DomainMemberships": [ + + ], + "Engine": "mysql", + "EngineVersion": "5.6.27", + "LicenseModel": "general-public-license", + "MasterUsername": "mymasteruser", + "MonitoringInterval": 0, + "MultiAZ": false, + "OptionGroupMemberships": [ + { + "OptionGroupName": "default:mysql-5-6", + "Status": "in-sync" + } + ], + "PendingModifiedValues": { + }, + "PreferredBackupWindow": "12:58-13:28", + "PreferredMaintenanceWindow": "tue:10:16-tue:10:46", + "PubliclyAccessible": true, + "ReadReplicaDBInstanceIdentifiers": [ + + ], + "StorageEncrypted": false, + "StorageType": "gp2", + "VpcSecurityGroups": [ + { + "Status": "active", + "VpcSecurityGroupId": "sg-e5e5b0d2" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example restores a DB instance to a new DB instance at a point in time from the source DB instance.", + "id": "to-restore-a-db-instance-to-a-point-in-time-1473962652154", + "title": "To restore a DB instance to a point in time." + } + ], + "RevokeDBSecurityGroupIngress": [ + { + "input": { + "CIDRIP": "203.0.113.5/32", + "DBSecurityGroupName": "mydbsecuritygroup" + }, + "output": { + "DBSecurityGroup": { + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example revokes ingress for the specified CIDR block associated with the specified DB security group.", + "id": "revoke-db-security-group-ingress-ce5b2c1c-bd4e-4809-b04a-6d78ec448813", + "title": "To revoke ingress for a DB security group" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/paginators-1.json new file mode 100644 index 00000000..ea213b11 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/paginators-1.json @@ -0,0 +1,245 @@ +{ + "pagination": { + "DescribeCertificates": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Certificates" + }, + "DescribeDBClusterBacktracks": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBClusterBacktracks" + }, + "DescribeDBClusterParameterGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBClusterParameterGroups" + }, + "DescribeDBClusterParameters": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Parameters" + }, + "DescribeDBClusterSnapshots": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBClusterSnapshots" + }, + "DescribeDBClusters": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBClusters" + }, + "DescribeDBEngineVersions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBEngineVersions" + }, + "DescribeDBInstanceAutomatedBackups": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBInstanceAutomatedBackups" + }, + "DescribeDBInstances": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBInstances" + }, + "DescribeDBLogFiles": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DescribeDBLogFiles" + }, + "DescribeDBParameterGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBParameterGroups" + }, + "DescribeDBParameters": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Parameters" + }, + "DescribeDBSecurityGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBSecurityGroups" + }, + "DescribeDBSnapshots": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBSnapshots" + }, + "DescribeDBSubnetGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "DBSubnetGroups" + }, + "DescribeEngineDefaultClusterParameters": { + "input_token": "Marker", + "output_token": "EngineDefaults.Marker", + "limit_key": "MaxRecords", + "result_key": "EngineDefaults.Parameters" + }, + "DescribeEngineDefaultParameters": { + "input_token": "Marker", + "output_token": "EngineDefaults.Marker", + "limit_key": "MaxRecords", + "result_key": "EngineDefaults.Parameters" + }, + "DescribeEventSubscriptions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "EventSubscriptionsList" + }, + "DescribeEvents": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Events" + }, + "DescribeGlobalClusters": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "GlobalClusters" + }, + "DescribeOptionGroupOptions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "OptionGroupOptions" + }, + "DescribeOptionGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "OptionGroupsList" + }, + "DescribeOrderableDBInstanceOptions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "OrderableDBInstanceOptions" + }, + "DescribePendingMaintenanceActions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "PendingMaintenanceActions" + }, + "DescribeReservedDBInstances": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReservedDBInstances" + }, + "DescribeReservedDBInstancesOfferings": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReservedDBInstancesOfferings" + }, + "DescribeSourceRegions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "SourceRegions" + }, + "DownloadDBLogFilePortion": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "NumberOfLines", + "more_results": "AdditionalDataPending", + "result_key": "LogFileData" + }, + "DescribeDBClusterEndpoints": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBClusterEndpoints" + }, + "DescribeDBProxies": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBProxies" + }, + "DescribeDBProxyTargetGroups": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "TargetGroups" + }, + "DescribeDBProxyTargets": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "Targets" + }, + "DescribeExportTasks": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "ExportTasks" + }, + "DescribeDBProxyEndpoints": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBProxyEndpoints" + }, + "DescribeBlueGreenDeployments": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "BlueGreenDeployments" + }, + "DescribeDBClusterAutomatedBackups": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBClusterAutomatedBackups" + }, + "DescribeIntegrations": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "Integrations" + }, + "DescribeDBSnapshotTenantDatabases": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBSnapshotTenantDatabases" + }, + "DescribeTenantDatabases": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "TenantDatabases" + }, + "DescribeDBRecommendations": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DBRecommendations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/paginators-1.sdk-extras.json new file mode 100644 index 00000000..5016e028 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/paginators-1.sdk-extras.json @@ -0,0 +1,12 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "DescribeCertificates": { + "non_aggregate_keys": [ + "DefaultCertificateForNewLaunches" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/service-2.json.gz new file mode 100644 index 00000000..bce4c2d6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/service-2.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/service-2.sdk-extras.json new file mode 100644 index 00000000..36aea1fc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/service-2.sdk-extras.json @@ -0,0 +1,47 @@ + { + "version": 1.0, + "merge": { + "shapes": { + "CopyDBClusterSnapshotMessage": { + "members": { + "SourceRegion": { + "shape": "String", + "documentation": "

The ID of the region that contains the snapshot to be copied.

" + } + } + }, + "CreateDBClusterMessage": { + "members": { + "SourceRegion": { + "shape": "String", + "documentation": "

The ID of the region that contains the source for the db cluster.

" + } + } + }, + "CopyDBSnapshotMessage": { + "members": { + "SourceRegion": { + "shape": "String", + "documentation": "

The ID of the region that contains the snapshot to be copied.

" + } + } + }, + "CreateDBInstanceReadReplicaMessage": { + "members": { + "SourceRegion": { + "shape": "String", + "documentation": "

The ID of the region that contains the source for the read replica.

" + } + } + }, + "StartDBInstanceAutomatedBackupsReplicationMessage": { + "members": { + "SourceRegion": { + "shape": "String", + "documentation": "

The ID of the region that contains the source for the db instance.

" + } + } + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/waiters-2.json new file mode 100644 index 00000000..d91adea3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rds/2014-10-31/waiters-2.json @@ -0,0 +1,412 @@ +{ + "version": 2, + "waiters": { + "DBInstanceAvailable": { + "delay": 30, + "operation": "DescribeDBInstances", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "incompatible-restore", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "incompatible-parameters", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + } + ] + }, + "DBInstanceDeleted": { + "delay": 30, + "operation": "DescribeDBInstances", + "maxAttempts": 60, + "acceptors": [ + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(DBInstances) == `0`" + }, + { + "expected": "DBInstanceNotFound", + "matcher": "error", + "state": "success" + }, + { + "expected": "creating", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "modifying", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + }, + { + "expected": "resetting-master-credentials", + "matcher": "pathAny", + "state": "failure", + "argument": "DBInstances[].DBInstanceStatus" + } + ] + }, + "DBSnapshotAvailable": { + "delay": 30, + "operation": "DescribeDBSnapshots", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "DBSnapshots[].Status" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "DBSnapshots[].Status" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBSnapshots[].Status" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "DBSnapshots[].Status" + }, + { + "expected": "incompatible-restore", + "matcher": "pathAny", + "state": "failure", + "argument": "DBSnapshots[].Status" + }, + { + "expected": "incompatible-parameters", + "matcher": "pathAny", + "state": "failure", + "argument": "DBSnapshots[].Status" + } + ] + }, + "DBSnapshotDeleted": { + "delay": 30, + "operation": "DescribeDBSnapshots", + "maxAttempts": 60, + "acceptors": [ + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(DBSnapshots) == `0`" + }, + { + "expected": "DBSnapshotNotFound", + "matcher": "error", + "state": "success" + }, + { + "expected": "creating", + "matcher": "pathAny", + "state": "failure", + "argument": "DBSnapshots[].Status" + }, + { + "expected": "modifying", + "matcher": "pathAny", + "state": "failure", + "argument": "DBSnapshots[].Status" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBSnapshots[].Status" + }, + { + "expected": "resetting-master-credentials", + "matcher": "pathAny", + "state": "failure", + "argument": "DBSnapshots[].Status" + } + ] + }, + "DBClusterSnapshotAvailable": { + "delay": 30, + "operation": "DescribeDBClusterSnapshots", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "DBClusterSnapshots[].Status" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusterSnapshots[].Status" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusterSnapshots[].Status" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusterSnapshots[].Status" + }, + { + "expected": "incompatible-restore", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusterSnapshots[].Status" + }, + { + "expected": "incompatible-parameters", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusterSnapshots[].Status" + } + ] + }, + "DBClusterSnapshotDeleted": { + "delay": 30, + "operation": "DescribeDBClusterSnapshots", + "maxAttempts": 60, + "acceptors": [ + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(DBClusterSnapshots) == `0`" + }, + { + "expected": "DBClusterSnapshotNotFoundFault", + "matcher": "error", + "state": "success" + }, + { + "expected": "creating", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusterSnapshots[].Status" + }, + { + "expected": "modifying", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusterSnapshots[].Status" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusterSnapshots[].Status" + }, + { + "expected": "resetting-master-credentials", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusterSnapshots[].Status" + } + ] + }, + "DBClusterAvailable": { + "delay": 30, + "operation": "DescribeDBClusters", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "DBClusters[].Status" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusters[].Status" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusters[].Status" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusters[].Status" + }, + { + "expected": "incompatible-restore", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusters[].Status" + }, + { + "expected": "incompatible-parameters", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusters[].Status" + } + ] + }, + "DBClusterDeleted": { + "delay": 30, + "operation": "DescribeDBClusters", + "maxAttempts": 60, + "acceptors": [ + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(DBClusters) == `0`" + }, + { + "expected": "DBClusterNotFoundFault", + "matcher": "error", + "state": "success" + }, + { + "expected": "creating", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusters[].Status" + }, + { + "expected": "modifying", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusters[].Status" + }, + { + "expected": "rebooting", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusters[].Status" + }, + { + "expected": "resetting-master-credentials", + "matcher": "pathAny", + "state": "failure", + "argument": "DBClusters[].Status" + } + ] + }, + "TenantDatabaseAvailable": { + "delay": 30, + "operation": "DescribeTenantDatabases", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "TenantDatabases[].Status" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "TenantDatabases[].Status" + }, + { + "expected": "incompatible-parameters", + "matcher": "pathAny", + "state": "failure", + "argument": "TenantDatabases[].Status" + }, + { + "expected": "incompatible-restore", + "matcher": "pathAny", + "state": "failure", + "argument": "TenantDatabases[].Status" + } + ] + }, + "TenantDatabaseDeleted": { + "delay": 30, + "operation": "DescribeTenantDatabases", + "maxAttempts": 60, + "acceptors": [ + { + "expected": true, + "matcher": "path", + "state": "success", + "argument": "length(TenantDatabases) == `0`" + }, + { + "expected": "DBInstanceNotFoundFault", + "matcher": "error", + "state": "success" + } + ] + }, + "DBSnapshotCompleted": { + "delay": 15, + "operation": "DescribeDBSnapshots", + "maxAttempts": 40, + "acceptors": [ + { + "expected": "DBSnapshotNotFound", + "matcher": "error", + "state": "success" + }, + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "DBSnapshots[].Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..05df3665 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/paginators-1.json new file mode 100644 index 00000000..b33a4ab7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/paginators-1.json @@ -0,0 +1,39 @@ +{ + "pagination": { + "DescribeTable": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ColumnList" + }, + "GetStatementResult": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Records" + }, + "ListDatabases": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Databases" + }, + "ListSchemas": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Schemas" + }, + "ListStatements": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Statements" + }, + "ListTables": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Tables" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/paginators-1.sdk-extras.json new file mode 100644 index 00000000..d9b46b92 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/paginators-1.sdk-extras.json @@ -0,0 +1,18 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "GetStatementResult": { + "non_aggregate_keys": [ + "ColumnMetadata", + "TotalNumRows" + ] + }, + "DescribeTable": { + "non_aggregate_keys": [ + "TableName" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/service-2.json.gz new file mode 100644 index 00000000..c5668420 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-data/2019-12-20/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-serverless/2021-04-21/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-serverless/2021-04-21/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6a6c1d43 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-serverless/2021-04-21/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-serverless/2021-04-21/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-serverless/2021-04-21/paginators-1.json new file mode 100644 index 00000000..3c07bc62 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-serverless/2021-04-21/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "ListEndpointAccess": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "endpoints" + }, + "ListNamespaces": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "namespaces" + }, + "ListRecoveryPoints": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "recoveryPoints" + }, + "ListSnapshots": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "snapshots" + }, + "ListUsageLimits": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "usageLimits" + }, + "ListWorkgroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "workgroups" + }, + "ListTableRestoreStatus": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "tableRestoreStatuses" + }, + "ListCustomDomainAssociations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "associations" + }, + "ListScheduledActions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "scheduledActions" + }, + "ListSnapshotCopyConfigurations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "snapshotCopyConfigurations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-serverless/2021-04-21/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-serverless/2021-04-21/service-2.json.gz new file mode 100644 index 00000000..684485ce Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift-serverless/2021-04-21/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a584d24c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/paginators-1.json new file mode 100644 index 00000000..a103fac9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/paginators-1.json @@ -0,0 +1,214 @@ +{ + "pagination": { + "DescribeClusterParameterGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ParameterGroups" + }, + "DescribeClusterParameters": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Parameters" + }, + "DescribeClusterSecurityGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ClusterSecurityGroups" + }, + "DescribeClusterSnapshots": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Snapshots" + }, + "DescribeClusterSubnetGroups": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ClusterSubnetGroups" + }, + "DescribeClusterVersions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ClusterVersions" + }, + "DescribeClusters": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Clusters" + }, + "DescribeDefaultClusterParameters": { + "input_token": "Marker", + "output_token": "DefaultClusterParameters.Marker", + "limit_key": "MaxRecords", + "result_key": "DefaultClusterParameters.Parameters" + }, + "DescribeEventSubscriptions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "EventSubscriptionsList" + }, + "DescribeEvents": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "Events" + }, + "DescribeHsmClientCertificates": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "HsmClientCertificates" + }, + "DescribeHsmConfigurations": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "HsmConfigurations" + }, + "DescribeOrderableClusterOptions": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "OrderableClusterOptions" + }, + "DescribeReservedNodeOfferings": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReservedNodeOfferings" + }, + "DescribeReservedNodes": { + "input_token": "Marker", + "output_token": "Marker", + "limit_key": "MaxRecords", + "result_key": "ReservedNodes" + }, + "DescribeClusterDbRevisions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "ClusterDbRevisions" + }, + "DescribeClusterTracks": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "MaintenanceTracks" + }, + "DescribeSnapshotCopyGrants": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "SnapshotCopyGrants" + }, + "DescribeSnapshotSchedules": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "SnapshotSchedules" + }, + "DescribeTableRestoreStatus": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "TableRestoreStatusDetails" + }, + "DescribeTags": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "TaggedResources" + }, + "GetReservedNodeExchangeOfferings": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "ReservedNodeOfferings" + }, + "DescribeNodeConfigurationOptions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "NodeConfigurationOptionList" + }, + "DescribeScheduledActions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "ScheduledActions" + }, + "DescribeUsageLimits": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "UsageLimits" + }, + "DescribeEndpointAccess": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "EndpointAccessList" + }, + "DescribeEndpointAuthorization": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "EndpointAuthorizationList" + }, + "DescribeDataShares": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DataShares" + }, + "DescribeDataSharesForConsumer": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DataShares" + }, + "DescribeDataSharesForProducer": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "DataShares" + }, + "DescribeReservedNodeExchangeStatus": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "ReservedNodeExchangeStatusDetails" + }, + "GetReservedNodeExchangeConfigurationOptions": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "ReservedNodeConfigurationOptionList" + }, + "DescribeCustomDomainAssociations": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "Associations" + }, + "DescribeInboundIntegrations": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "InboundIntegrations" + }, + "DescribeRedshiftIdcApplications": { + "input_token": "Marker", + "limit_key": "MaxRecords", + "output_token": "Marker", + "result_key": "RedshiftIdcApplications" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/service-2.json.gz new file mode 100644 index 00000000..f71eb09c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/waiters-2.json new file mode 100644 index 00000000..164e9b0d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/redshift/2012-12-01/waiters-2.json @@ -0,0 +1,97 @@ +{ + "version": 2, + "waiters": { + "ClusterAvailable": { + "delay": 60, + "operation": "DescribeClusters", + "maxAttempts": 30, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Clusters[].ClusterStatus" + }, + { + "expected": "deleting", + "matcher": "pathAny", + "state": "failure", + "argument": "Clusters[].ClusterStatus" + }, + { + "expected": "ClusterNotFound", + "matcher": "error", + "state": "retry" + } + ] + }, + "ClusterDeleted": { + "delay": 60, + "operation": "DescribeClusters", + "maxAttempts": 30, + "acceptors": [ + { + "expected": "ClusterNotFound", + "matcher": "error", + "state": "success" + }, + { + "expected": "creating", + "matcher": "pathAny", + "state": "failure", + "argument": "Clusters[].ClusterStatus" + }, + { + "expected": "modifying", + "matcher": "pathAny", + "state": "failure", + "argument": "Clusters[].ClusterStatus" + } + ] + }, + "ClusterRestored": { + "operation": "DescribeClusters", + "maxAttempts": 30, + "delay": 60, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "Clusters[].RestoreStatus.Status", + "expected": "completed" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "Clusters[].ClusterStatus", + "expected": "deleting" + } + ] + }, + "SnapshotAvailable": { + "delay": 15, + "operation": "DescribeClusterSnapshots", + "maxAttempts": 20, + "acceptors": [ + { + "expected": "available", + "matcher": "pathAll", + "state": "success", + "argument": "Snapshots[].Status" + }, + { + "expected": "failed", + "matcher": "pathAny", + "state": "failure", + "argument": "Snapshots[].Status" + }, + { + "expected": "deleted", + "matcher": "pathAny", + "state": "failure", + "argument": "Snapshots[].Status" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..dfe53528 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/examples-1.json new file mode 100644 index 00000000..039e04d6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/examples-1.json @@ -0,0 +1,651 @@ +{ + "version": "1.0", + "examples": { + "CompareFaces": [ + { + "input": { + "SimilarityThreshold": 90, + "SourceImage": { + "S3Object": { + "Bucket": "mybucket", + "Name": "mysourceimage" + } + }, + "TargetImage": { + "S3Object": { + "Bucket": "mybucket", + "Name": "mytargetimage" + } + } + }, + "output": { + "FaceMatches": [ + { + "Face": { + "BoundingBox": { + "Height": 0.33481481671333313, + "Left": 0.31888890266418457, + "Top": 0.4933333396911621, + "Width": 0.25 + }, + "Confidence": 99.9991226196289 + }, + "Similarity": 100 + } + ], + "SourceImageFace": { + "BoundingBox": { + "Height": 0.33481481671333313, + "Left": 0.31888890266418457, + "Top": 0.4933333396911621, + "Width": 0.25 + }, + "Confidence": 99.9991226196289 + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation compares the largest face detected in the source image with each face detected in the target image.", + "id": "to-compare-two-images-1482181985581", + "title": "To compare two images" + } + ], + "CreateCollection": [ + { + "input": { + "CollectionId": "myphotos" + }, + "output": { + "CollectionArn": "aws:rekognition:us-west-2:123456789012:collection/myphotos", + "StatusCode": 200 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation creates a Rekognition collection for storing image data.", + "id": "to-create-a-collection-1481833313674", + "title": "To create a collection" + } + ], + "DeleteCollection": [ + { + "input": { + "CollectionId": "myphotos" + }, + "output": { + "StatusCode": 200 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation deletes a Rekognition collection.", + "id": "to-delete-a-collection-1481838179973", + "title": "To delete a collection" + } + ], + "DeleteFaces": [ + { + "input": { + "CollectionId": "myphotos", + "FaceIds": [ + "ff43d742-0c13-5d16-a3e8-03d3f58e980b" + ] + }, + "output": { + "DeletedFaces": [ + "ff43d742-0c13-5d16-a3e8-03d3f58e980b" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation deletes one or more faces from a Rekognition collection.", + "id": "to-delete-a-face-1482182799377", + "title": "To delete a face" + } + ], + "DetectFaces": [ + { + "input": { + "Image": { + "S3Object": { + "Bucket": "mybucket", + "Name": "myphoto" + } + } + }, + "output": { + "FaceDetails": [ + { + "BoundingBox": { + "Height": 0.18000000715255737, + "Left": 0.5555555820465088, + "Top": 0.33666667342185974, + "Width": 0.23999999463558197 + }, + "Confidence": 100, + "Landmarks": [ + { + "Type": "eyeLeft", + "X": 0.6394737362861633, + "Y": 0.40819624066352844 + }, + { + "Type": "eyeRight", + "X": 0.7266660928726196, + "Y": 0.41039225459098816 + }, + { + "Type": "eyeRight", + "X": 0.6912462115287781, + "Y": 0.44240960478782654 + }, + { + "Type": "mouthDown", + "X": 0.6306198239326477, + "Y": 0.46700039505958557 + }, + { + "Type": "mouthUp", + "X": 0.7215608954429626, + "Y": 0.47114261984825134 + } + ], + "Pose": { + "Pitch": 4.050806522369385, + "Roll": 0.9950747489929199, + "Yaw": 13.693790435791016 + }, + "Quality": { + "Brightness": 37.60169982910156, + "Sharpness": 80 + } + } + ], + "OrientationCorrection": "ROTATE_0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation detects faces in an image stored in an AWS S3 bucket.", + "id": "to-detect-faces-in-an-image-1481841782793", + "title": "To detect faces in an image" + } + ], + "DetectLabels": [ + { + "input": { + "Image": { + "S3Object": { + "Bucket": "mybucket", + "Name": "myphoto" + } + }, + "MaxLabels": 123, + "MinConfidence": 70 + }, + "output": { + "Labels": [ + { + "Confidence": 99.25072479248047, + "Name": "People" + }, + { + "Confidence": 99.25074005126953, + "Name": "Person" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation detects labels in the supplied image", + "id": "to-detect-labels-1481834255770", + "title": "To detect labels" + } + ], + "IndexFaces": [ + { + "input": { + "CollectionId": "myphotos", + "DetectionAttributes": [ + + ], + "ExternalImageId": "myphotoid", + "Image": { + "S3Object": { + "Bucket": "mybucket", + "Name": "myphoto" + } + } + }, + "output": { + "FaceRecords": [ + { + "Face": { + "BoundingBox": { + "Height": 0.33481481671333313, + "Left": 0.31888890266418457, + "Top": 0.4933333396911621, + "Width": 0.25 + }, + "Confidence": 99.9991226196289, + "FaceId": "ff43d742-0c13-5d16-a3e8-03d3f58e980b", + "ImageId": "465f4e93-763e-51d0-b030-b9667a2d94b1" + }, + "FaceDetail": { + "BoundingBox": { + "Height": 0.33481481671333313, + "Left": 0.31888890266418457, + "Top": 0.4933333396911621, + "Width": 0.25 + }, + "Confidence": 99.9991226196289, + "Landmarks": [ + { + "Type": "eyeLeft", + "X": 0.3976764678955078, + "Y": 0.6248345971107483 + }, + { + "Type": "eyeRight", + "X": 0.4810936450958252, + "Y": 0.6317117214202881 + }, + { + "Type": "noseLeft", + "X": 0.41986238956451416, + "Y": 0.7111940383911133 + }, + { + "Type": "mouthDown", + "X": 0.40525302290916443, + "Y": 0.7497701048851013 + }, + { + "Type": "mouthUp", + "X": 0.4753248989582062, + "Y": 0.7558549642562866 + } + ], + "Pose": { + "Pitch": -9.713645935058594, + "Roll": 4.707281112670898, + "Yaw": -24.438663482666016 + }, + "Quality": { + "Brightness": 29.23358917236328, + "Sharpness": 80 + } + } + }, + { + "Face": { + "BoundingBox": { + "Height": 0.32592591643333435, + "Left": 0.5144444704055786, + "Top": 0.15111111104488373, + "Width": 0.24444444477558136 + }, + "Confidence": 99.99950408935547, + "FaceId": "8be04dba-4e58-520d-850e-9eae4af70eb2", + "ImageId": "465f4e93-763e-51d0-b030-b9667a2d94b1" + }, + "FaceDetail": { + "BoundingBox": { + "Height": 0.32592591643333435, + "Left": 0.5144444704055786, + "Top": 0.15111111104488373, + "Width": 0.24444444477558136 + }, + "Confidence": 99.99950408935547, + "Landmarks": [ + { + "Type": "eyeLeft", + "X": 0.6006892323493958, + "Y": 0.290842205286026 + }, + { + "Type": "eyeRight", + "X": 0.6808141469955444, + "Y": 0.29609042406082153 + }, + { + "Type": "noseLeft", + "X": 0.6395332217216492, + "Y": 0.3522595763206482 + }, + { + "Type": "mouthDown", + "X": 0.5892083048820496, + "Y": 0.38689887523651123 + }, + { + "Type": "mouthUp", + "X": 0.674560010433197, + "Y": 0.394125759601593 + } + ], + "Pose": { + "Pitch": -4.683138370513916, + "Roll": 2.1029529571533203, + "Yaw": 6.716655254364014 + }, + "Quality": { + "Brightness": 34.951698303222656, + "Sharpness": 160 + } + } + } + ], + "OrientationCorrection": "ROTATE_0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation detects faces in an image and adds them to the specified Rekognition collection.", + "id": "to-add-a-face-to-a-collection-1482179542923", + "title": "To add a face to a collection" + } + ], + "ListCollections": [ + { + "input": { + }, + "output": { + "CollectionIds": [ + "myphotos" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation returns a list of Rekognition collections.", + "id": "to-list-the-collections-1482179199088", + "title": "To list the collections" + } + ], + "ListFaces": [ + { + "input": { + "CollectionId": "myphotos", + "MaxResults": 20 + }, + "output": { + "Faces": [ + { + "BoundingBox": { + "Height": 0.18000000715255737, + "Left": 0.5555559992790222, + "Top": 0.336667001247406, + "Width": 0.23999999463558197 + }, + "Confidence": 100, + "FaceId": "1c62e8b5-69a7-5b7d-b3cd-db4338a8a7e7", + "ImageId": "147fdf82-7a71-52cf-819b-e786c7b9746e" + }, + { + "BoundingBox": { + "Height": 0.16555599868297577, + "Left": 0.30963000655174255, + "Top": 0.7066670060157776, + "Width": 0.22074100375175476 + }, + "Confidence": 100, + "FaceId": "29a75abe-397b-5101-ba4f-706783b2246c", + "ImageId": "147fdf82-7a71-52cf-819b-e786c7b9746e" + }, + { + "BoundingBox": { + "Height": 0.3234420120716095, + "Left": 0.3233329951763153, + "Top": 0.5, + "Width": 0.24222199618816376 + }, + "Confidence": 99.99829864501953, + "FaceId": "38271d79-7bc2-5efb-b752-398a8d575b85", + "ImageId": "d5631190-d039-54e4-b267-abd22c8647c5" + }, + { + "BoundingBox": { + "Height": 0.03555560111999512, + "Left": 0.37388700246810913, + "Top": 0.2477779984474182, + "Width": 0.04747769981622696 + }, + "Confidence": 99.99210357666016, + "FaceId": "3b01bef0-c883-5654-ba42-d5ad28b720b3", + "ImageId": "812d9f04-86f9-54fc-9275-8d0dcbcb6784" + }, + { + "BoundingBox": { + "Height": 0.05333330109715462, + "Left": 0.2937690019607544, + "Top": 0.35666701197624207, + "Width": 0.07121659815311432 + }, + "Confidence": 99.99919891357422, + "FaceId": "4839a608-49d0-566c-8301-509d71b534d1", + "ImageId": "812d9f04-86f9-54fc-9275-8d0dcbcb6784" + }, + { + "BoundingBox": { + "Height": 0.3249259889125824, + "Left": 0.5155559778213501, + "Top": 0.1513350009918213, + "Width": 0.24333299696445465 + }, + "Confidence": 99.99949645996094, + "FaceId": "70008e50-75e4-55d0-8e80-363fb73b3a14", + "ImageId": "d5631190-d039-54e4-b267-abd22c8647c5" + }, + { + "BoundingBox": { + "Height": 0.03777780011296272, + "Left": 0.7002969980239868, + "Top": 0.18777799606323242, + "Width": 0.05044509842991829 + }, + "Confidence": 99.92639923095703, + "FaceId": "7f5f88ed-d684-5a88-b0df-01e4a521552b", + "ImageId": "812d9f04-86f9-54fc-9275-8d0dcbcb6784" + }, + { + "BoundingBox": { + "Height": 0.05555560067296028, + "Left": 0.13946600258350372, + "Top": 0.46333301067352295, + "Width": 0.07270029932260513 + }, + "Confidence": 99.99469757080078, + "FaceId": "895b4e2c-81de-5902-a4bd-d1792bda00b2", + "ImageId": "812d9f04-86f9-54fc-9275-8d0dcbcb6784" + }, + { + "BoundingBox": { + "Height": 0.3259260058403015, + "Left": 0.5144439935684204, + "Top": 0.15111100673675537, + "Width": 0.24444399774074554 + }, + "Confidence": 99.99949645996094, + "FaceId": "8be04dba-4e58-520d-850e-9eae4af70eb2", + "ImageId": "465f4e93-763e-51d0-b030-b9667a2d94b1" + }, + { + "BoundingBox": { + "Height": 0.18888899683952332, + "Left": 0.3783380091190338, + "Top": 0.2355560064315796, + "Width": 0.25222599506378174 + }, + "Confidence": 99.9999008178711, + "FaceId": "908544ad-edc3-59df-8faf-6a87cc256cf5", + "ImageId": "3c731605-d772-541a-a5e7-0375dbc68a07" + }, + { + "BoundingBox": { + "Height": 0.33481499552726746, + "Left": 0.31888899207115173, + "Top": 0.49333301186561584, + "Width": 0.25 + }, + "Confidence": 99.99909973144531, + "FaceId": "ff43d742-0c13-5d16-a3e8-03d3f58e980b", + "ImageId": "465f4e93-763e-51d0-b030-b9667a2d94b1" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation lists the faces in a Rekognition collection.", + "id": "to-list-the-faces-in-a-collection-1482181416530", + "title": "To list the faces in a collection" + } + ], + "SearchFaces": [ + { + "input": { + "CollectionId": "myphotos", + "FaceId": "70008e50-75e4-55d0-8e80-363fb73b3a14", + "FaceMatchThreshold": 90, + "MaxFaces": 10 + }, + "output": { + "FaceMatches": [ + { + "Face": { + "BoundingBox": { + "Height": 0.3259260058403015, + "Left": 0.5144439935684204, + "Top": 0.15111100673675537, + "Width": 0.24444399774074554 + }, + "Confidence": 99.99949645996094, + "FaceId": "8be04dba-4e58-520d-850e-9eae4af70eb2", + "ImageId": "465f4e93-763e-51d0-b030-b9667a2d94b1" + }, + "Similarity": 99.97222137451172 + }, + { + "Face": { + "BoundingBox": { + "Height": 0.16555599868297577, + "Left": 0.30963000655174255, + "Top": 0.7066670060157776, + "Width": 0.22074100375175476 + }, + "Confidence": 100, + "FaceId": "29a75abe-397b-5101-ba4f-706783b2246c", + "ImageId": "147fdf82-7a71-52cf-819b-e786c7b9746e" + }, + "Similarity": 97.04154968261719 + }, + { + "Face": { + "BoundingBox": { + "Height": 0.18888899683952332, + "Left": 0.3783380091190338, + "Top": 0.2355560064315796, + "Width": 0.25222599506378174 + }, + "Confidence": 99.9999008178711, + "FaceId": "908544ad-edc3-59df-8faf-6a87cc256cf5", + "ImageId": "3c731605-d772-541a-a5e7-0375dbc68a07" + }, + "Similarity": 95.94520568847656 + } + ], + "SearchedFaceId": "70008e50-75e4-55d0-8e80-363fb73b3a14" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation searches for matching faces in the collection the supplied face belongs to.", + "id": "to-delete-a-face-1482182799377", + "title": "To delete a face" + } + ], + "SearchFacesByImage": [ + { + "input": { + "CollectionId": "myphotos", + "FaceMatchThreshold": 95, + "Image": { + "S3Object": { + "Bucket": "mybucket", + "Name": "myphoto" + } + }, + "MaxFaces": 5 + }, + "output": { + "FaceMatches": [ + { + "Face": { + "BoundingBox": { + "Height": 0.3234420120716095, + "Left": 0.3233329951763153, + "Top": 0.5, + "Width": 0.24222199618816376 + }, + "Confidence": 99.99829864501953, + "FaceId": "38271d79-7bc2-5efb-b752-398a8d575b85", + "ImageId": "d5631190-d039-54e4-b267-abd22c8647c5" + }, + "Similarity": 99.97036743164062 + } + ], + "SearchedFaceBoundingBox": { + "Height": 0.33481481671333313, + "Left": 0.31888890266418457, + "Top": 0.4933333396911621, + "Width": 0.25 + }, + "SearchedFaceConfidence": 99.9991226196289 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation searches for faces in a Rekognition collection that match the largest face in an S3 bucket stored image.", + "id": "to-search-for-faces-matching-a-supplied-image-1482175994491", + "title": "To search for faces matching a supplied image" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/paginators-1.json new file mode 100644 index 00000000..436503d6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "ListCollections": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": [ + "CollectionIds", + "FaceModelVersions" + ] + }, + "ListFaces": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Faces", + "non_aggregate_keys": [ + "FaceModelVersion" + ] + }, + "ListStreamProcessors": { + "result_key": "StreamProcessors", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "DescribeProjectVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ProjectVersionDescriptions" + }, + "DescribeProjects": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ProjectDescriptions" + }, + "ListDatasetEntries": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DatasetEntries" + }, + "ListDatasetLabels": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DatasetLabelDescriptions" + }, + "ListProjectPolicies": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ProjectPolicies" + }, + "ListUsers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Users" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/service-2.json.gz new file mode 100644 index 00000000..561c218f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/waiters-2.json new file mode 100644 index 00000000..c67dc623 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rekognition/2016-06-27/waiters-2.json @@ -0,0 +1,45 @@ +{ + "version": 2, + "waiters": { + "ProjectVersionTrainingCompleted": { + "description": "Wait until the ProjectVersion training completes.", + "operation": "DescribeProjectVersions", + "delay": 120, + "maxAttempts": 360, + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "ProjectVersionDescriptions[].Status", + "expected": "TRAINING_COMPLETED" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "ProjectVersionDescriptions[].Status", + "expected": "TRAINING_FAILED" + } + ] + }, + "ProjectVersionRunning": { + "description": "Wait until the ProjectVersion is running.", + "delay": 30, + "maxAttempts": 40, + "operation": "DescribeProjectVersions", + "acceptors": [ + { + "state": "success", + "matcher": "pathAll", + "argument": "ProjectVersionDescriptions[].Status", + "expected": "RUNNING" + }, + { + "state": "failure", + "matcher": "pathAny", + "argument": "ProjectVersionDescriptions[].Status", + "expected": "FAILED" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/repostspace/2022-05-13/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/repostspace/2022-05-13/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d6df600f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/repostspace/2022-05-13/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/repostspace/2022-05-13/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/repostspace/2022-05-13/paginators-1.json new file mode 100644 index 00000000..75eb51bd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/repostspace/2022-05-13/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListSpaces": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "spaces" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/repostspace/2022-05-13/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/repostspace/2022-05-13/service-2.json.gz new file mode 100644 index 00000000..92173ec6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/repostspace/2022-05-13/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e6381534 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/service-2.json.gz new file mode 100644 index 00000000..027e8991 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/resiliencehub/2020-04-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8d6d2a55 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/paginators-1.json new file mode 100644 index 00000000..c5a49dc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListIndexes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Indexes" + }, + "ListSupportedResourceTypes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResourceTypes" + }, + "ListViews": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Views" + }, + "Search": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Resources" + }, + "ListIndexesForMembers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Indexes" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/paginators-1.sdk-extras.json new file mode 100644 index 00000000..a5959a58 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/paginators-1.sdk-extras.json @@ -0,0 +1,13 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "Search": { + "non_aggregate_keys": [ + "ViewArn", + "Count" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/service-2.json.gz new file mode 100644 index 00000000..d520a88d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-explorer-2/2022-07-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..aa175b98 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/paginators-1.json new file mode 100644 index 00000000..04de8d30 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListGroups": { + "result_key": [ + "GroupIdentifiers", + "Groups" + ], + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "SearchResources": { + "result_key": "ResourceIdentifiers", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListGroupResources": { + "result_key": [ + "ResourceIdentifiers", + "Resources" + ], + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/service-2.json.gz new file mode 100644 index 00000000..dde63ca5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/resource-groups/2017-11-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a80347d3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/paginators-1.json new file mode 100644 index 00000000..7312afc5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/paginators-1.json @@ -0,0 +1,26 @@ +{ + "pagination": { + "GetResources": { + "input_token": "PaginationToken", + "limit_key": "ResourcesPerPage", + "output_token": "PaginationToken", + "result_key": "ResourceTagMappingList" + }, + "GetTagKeys": { + "input_token": "PaginationToken", + "output_token": "PaginationToken", + "result_key": "TagKeys" + }, + "GetTagValues": { + "input_token": "PaginationToken", + "output_token": "PaginationToken", + "result_key": "TagValues" + }, + "GetComplianceSummary": { + "input_token": "PaginationToken", + "limit_key": "MaxResults", + "output_token": "PaginationToken", + "result_key": "SummaryList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/service-2.json.gz new file mode 100644 index 00000000..fb9570b8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/resourcegroupstaggingapi/2017-01-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5ccdbc17 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/paginators-1.json new file mode 100644 index 00000000..380e723c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/paginators-1.json @@ -0,0 +1,70 @@ +{ + "pagination": { + "ListDeploymentJobs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "deploymentJobs" + }, + "ListFleets": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "fleetDetails" + }, + "ListRobotApplications": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "robotApplicationSummaries" + }, + "ListRobots": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "robots" + }, + "ListSimulationApplications": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "simulationApplicationSummaries" + }, + "ListSimulationJobs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "simulationJobSummaries" + }, + "ListSimulationJobBatches": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "simulationJobBatchSummaries" + }, + "ListWorldExportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "worldExportJobSummaries" + }, + "ListWorldGenerationJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "worldGenerationJobSummaries" + }, + "ListWorldTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "templateSummaries" + }, + "ListWorlds": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "worldSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/service-2.json.gz new file mode 100644 index 00000000..3fd614d4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/robomaker/2018-06-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rolesanywhere/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rolesanywhere/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..24cda630 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rolesanywhere/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rolesanywhere/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rolesanywhere/2018-05-10/paginators-1.json new file mode 100644 index 00000000..97298614 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rolesanywhere/2018-05-10/paginators-1.json @@ -0,0 +1,24 @@ +{ + "pagination": { + "ListCrls": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "crls" + }, + "ListProfiles": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "profiles" + }, + "ListSubjects": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "subjects" + }, + "ListTrustAnchors": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "trustAnchors" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rolesanywhere/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rolesanywhere/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..3154ae44 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rolesanywhere/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..369d4da8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/paginators-1.json new file mode 100644 index 00000000..a2ef01b9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListRoutingControls": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RoutingControls" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/service-2.json.gz new file mode 100644 index 00000000..3337739c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-cluster/2019-12-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..87f66b30 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/paginators-1.json new file mode 100644 index 00000000..024682ba --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListAssociatedRoute53HealthChecks": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "HealthCheckIds" + }, + "ListClusters": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Clusters" + }, + "ListControlPanels": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ControlPanels" + }, + "ListRoutingControls": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RoutingControls" + }, + "ListSafetyRules": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SafetyRules" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/service-2.json.gz new file mode 100644 index 00000000..2f257946 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/waiters-2.json new file mode 100644 index 00000000..1794757e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-control-config/2020-11-02/waiters-2.json @@ -0,0 +1,152 @@ +{ + "version": 2, + "waiters": { + "ClusterCreated": { + "description": "Wait until a cluster is created", + "operation": "DescribeCluster", + "delay": 5, + "maxAttempts": 26, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "Cluster.Status", + "expected": "DEPLOYED" + }, + { + "state": "retry", + "matcher": "path", + "argument": "Cluster.Status", + "expected": "PENDING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "ClusterDeleted": { + "description": "Wait for a cluster to be deleted", + "operation": "DescribeCluster", + "delay": 5, + "maxAttempts": 26, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 404 + }, + { + "state": "retry", + "matcher": "path", + "argument": "Cluster.Status", + "expected": "PENDING_DELETION" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "ControlPanelCreated": { + "description": "Wait until a control panel is created", + "operation": "DescribeControlPanel", + "delay": 5, + "maxAttempts": 26, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "ControlPanel.Status", + "expected": "DEPLOYED" + }, + { + "state": "retry", + "matcher": "path", + "argument": "ControlPanel.Status", + "expected": "PENDING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "ControlPanelDeleted": { + "description": "Wait until a control panel is deleted", + "operation": "DescribeControlPanel", + "delay": 5, + "maxAttempts": 26, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 404 + }, + { + "state": "retry", + "matcher": "path", + "argument": "ControlPanel.Status", + "expected": "PENDING_DELETION" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "RoutingControlCreated": { + "description": "Wait until a routing control is created", + "operation": "DescribeRoutingControl", + "delay": 5, + "maxAttempts": 26, + "acceptors": [ + { + "state": "success", + "matcher": "path", + "argument": "RoutingControl.Status", + "expected": "DEPLOYED" + }, + { + "state": "retry", + "matcher": "path", + "argument": "RoutingControl.Status", + "expected": "PENDING" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + }, + "RoutingControlDeleted": { + "description": "Wait for a routing control to be deleted", + "operation": "DescribeRoutingControl", + "delay": 5, + "maxAttempts": 26, + "acceptors": [ + { + "state": "success", + "matcher": "status", + "expected": 404 + }, + { + "state": "retry", + "matcher": "path", + "argument": "RoutingControl.Status", + "expected": "PENDING_DELETION" + }, + { + "state": "retry", + "matcher": "status", + "expected": 500 + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-readiness/2019-12-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-readiness/2019-12-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..421354e3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-readiness/2019-12-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-readiness/2019-12-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-readiness/2019-12-02/paginators-1.json new file mode 100644 index 00000000..a71f0880 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-readiness/2019-12-02/paginators-1.json @@ -0,0 +1,77 @@ +{ + "pagination": { + "ListReadinessChecks": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReadinessChecks" + }, + "ListResourceSets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResourceSets" + }, + "ListCells": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Cells" + }, + "ListRecoveryGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RecoveryGroups" + }, + "ListRules": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Rules" + }, + "ListCrossAccountAuthorizations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CrossAccountAuthorizations" + }, + "GetCellReadinessSummary": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReadinessChecks", + "non_aggregate_keys": [ + "Readiness" + ] + }, + "GetRecoveryGroupReadinessSummary": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ReadinessChecks", + "non_aggregate_keys": [ + "Readiness" + ] + }, + "GetReadinessCheckStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Resources", + "non_aggregate_keys": [ + "Readiness", + "Messages" + ] + }, + "GetReadinessCheckResourceStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Rules", + "non_aggregate_keys": [ + "Readiness" + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-readiness/2019-12-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-readiness/2019-12-02/service-2.json.gz new file mode 100644 index 00000000..92e4d7b6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53-recovery-readiness/2019-12-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..36cae40f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/examples-1.json new file mode 100644 index 00000000..d757c2b9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/examples-1.json @@ -0,0 +1,762 @@ +{ + "version": "1.0", + "examples": { + "AssociateVPCWithHostedZone": [ + { + "input": { + "Comment": "", + "HostedZoneId": "Z3M3LMPEXAMPLE", + "VPC": { + "VPCId": "vpc-1a2b3c4d", + "VPCRegion": "us-east-2" + } + }, + "output": { + "ChangeInfo": { + "Comment": "", + "Id": "/change/C3HC6WDB2UANE2", + "Status": "INSYNC", + "SubmittedAt": "2017-01-31T01:36:41.958Z" + } + }, + "comments": { + "input": { + }, + "output": { + "Status": "Valid values are PENDING and INSYNC.", + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example associates the VPC with ID vpc-1a2b3c4d with the hosted zone with ID Z3M3LMPEXAMPLE.", + "id": "to-associate-a-vpc-with-a-hosted-zone-1484069228699", + "title": "To associate a VPC with a hosted zone" + } + ], + "ChangeResourceRecordSets": [ + { + "input": { + "ChangeBatch": { + "Changes": [ + { + "Action": "CREATE", + "ResourceRecordSet": { + "Name": "example.com", + "ResourceRecords": [ + { + "Value": "192.0.2.44" + } + ], + "TTL": 60, + "Type": "A" + } + } + ], + "Comment": "Web server for example.com" + }, + "HostedZoneId": "Z3M3LMPEXAMPLE" + }, + "output": { + "ChangeInfo": { + "Comment": "Web server for example.com", + "Id": "/change/C2682N5HXP0BZ4", + "Status": "PENDING", + "SubmittedAt": "2017-02-10T01:36:41.958Z" + } + }, + "comments": { + "input": { + "Action": "Valid values: CREATE, DELETE, UPSERT", + "TTL": "The amount of time in seconds that you want DNS resolvers to cache the values in this resource record set before submitting another request to Route 53", + "Value": "The value that is applicable to the value of Type. For example, if Type is A, Value is an IPv4 address" + }, + "output": { + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example creates a resource record set that routes Internet traffic to a resource with an IP address of 192.0.2.44.", + "id": "to-create-update-or-delete-resource-record-sets-1484344703668", + "title": "To create a basic resource record set" + }, + { + "input": { + "ChangeBatch": { + "Changes": [ + { + "Action": "CREATE", + "ResourceRecordSet": { + "HealthCheckId": "abcdef11-2222-3333-4444-555555fedcba", + "Name": "example.com", + "ResourceRecords": [ + { + "Value": "192.0.2.44" + } + ], + "SetIdentifier": "Seattle data center", + "TTL": 60, + "Type": "A", + "Weight": 100 + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "HealthCheckId": "abcdef66-7777-8888-9999-000000fedcba", + "Name": "example.com", + "ResourceRecords": [ + { + "Value": "192.0.2.45" + } + ], + "SetIdentifier": "Portland data center", + "TTL": 60, + "Type": "A", + "Weight": 200 + } + } + ], + "Comment": "Web servers for example.com" + }, + "HostedZoneId": "Z3M3LMPEXAMPLE" + }, + "output": { + "ChangeInfo": { + "Comment": "Web servers for example.com", + "Id": "/change/C2682N5HXP0BZ4", + "Status": "PENDING", + "SubmittedAt": "2017-02-10T01:36:41.958Z" + } + }, + "comments": { + "input": { + "Action": "Valid values: CREATE, DELETE, UPSERT", + "TTL": "The amount of time in seconds that you want DNS resolvers to cache the values in this resource record set before submitting another request to Route 53. TTLs must be the same for all weighted resource record sets that have the same name and type.", + "Value": "The value that is applicable to the value of Type. For example, if Type is A, Value is an IPv4 address" + }, + "output": { + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example creates two weighted resource record sets. The resource with a Weight of 100 will get 1/3rd of traffic (100/100+200), and the other resource will get the rest of the traffic for example.com.", + "id": "to-create-weighted-resource-record-sets-1484348208522", + "title": "To create weighted resource record sets" + }, + { + "input": { + "ChangeBatch": { + "Changes": [ + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "d123rk29d0stfj.cloudfront.net", + "EvaluateTargetHealth": false, + "HostedZoneId": "Z2FDTNDATAQYW2" + }, + "Name": "example.com", + "Type": "A" + } + } + ], + "Comment": "CloudFront distribution for example.com" + }, + "HostedZoneId": "Z3M3LMPEXAMPLE" + }, + "output": { + "ChangeInfo": { + "Comment": "CloudFront distribution for example.com", + "Id": "/change/C2682N5HXP0BZ4", + "Status": "PENDING", + "SubmittedAt": "2017-02-10T01:36:41.958Z" + } + }, + "comments": { + "input": { + "Action": "Valid values: CREATE, DELETE, UPSERT", + "DNSName": "The DNS name assigned to the resource", + "HostedZoneId": "Depends on the type of resource that you want to route traffic to", + "Type": "A or AAAA, depending on the type of resource that you want to route traffic to" + }, + "output": { + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example creates an alias resource record set that routes traffic to a CloudFront distribution.", + "id": "to-create-an-alias-resource-record-set-1484348404062", + "title": "To create an alias resource record set" + }, + { + "input": { + "ChangeBatch": { + "Changes": [ + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "example-com-123456789.us-east-2.elb.amazonaws.com ", + "EvaluateTargetHealth": true, + "HostedZoneId": "Z3AADJGX6KTTL2" + }, + "Name": "example.com", + "SetIdentifier": "Ohio region", + "Type": "A", + "Weight": 100 + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "example-com-987654321.us-west-2.elb.amazonaws.com ", + "EvaluateTargetHealth": true, + "HostedZoneId": "Z1H1FL5HABSF5" + }, + "Name": "example.com", + "SetIdentifier": "Oregon region", + "Type": "A", + "Weight": 200 + } + } + ], + "Comment": "ELB load balancers for example.com" + }, + "HostedZoneId": "Z3M3LMPEXAMPLE" + }, + "output": { + "ChangeInfo": { + "Comment": "ELB load balancers for example.com", + "Id": "/change/C2682N5HXP0BZ4", + "Status": "PENDING", + "SubmittedAt": "2017-02-10T01:36:41.958Z" + } + }, + "comments": { + "input": { + "Action": "Valid values: CREATE, DELETE, UPSERT", + "DNSName": "The DNS name assigned to the resource", + "HostedZoneId": "Depends on the type of resource that you want to route traffic to", + "Type": "A or AAAA, depending on the type of resource that you want to route traffic to" + }, + "output": { + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example creates two weighted alias resource record sets that route traffic to ELB load balancers. The resource with a Weight of 100 will get 1/3rd of traffic (100/100+200), and the other resource will get the rest of the traffic for example.com.", + "id": "to-create-weighted-alias-resource-record-sets-1484349467416", + "title": "To create weighted alias resource record sets" + }, + { + "input": { + "ChangeBatch": { + "Changes": [ + { + "Action": "CREATE", + "ResourceRecordSet": { + "HealthCheckId": "abcdef11-2222-3333-4444-555555fedcba", + "Name": "example.com", + "Region": "us-east-2", + "ResourceRecords": [ + { + "Value": "192.0.2.44" + } + ], + "SetIdentifier": "Ohio region", + "TTL": 60, + "Type": "A" + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "HealthCheckId": "abcdef66-7777-8888-9999-000000fedcba", + "Name": "example.com", + "Region": "us-west-2", + "ResourceRecords": [ + { + "Value": "192.0.2.45" + } + ], + "SetIdentifier": "Oregon region", + "TTL": 60, + "Type": "A" + } + } + ], + "Comment": "EC2 instances for example.com" + }, + "HostedZoneId": "Z3M3LMPEXAMPLE" + }, + "output": { + "ChangeInfo": { + "Comment": "EC2 instances for example.com", + "Id": "/change/C2682N5HXP0BZ4", + "Status": "PENDING", + "SubmittedAt": "2017-02-10T01:36:41.958Z" + } + }, + "comments": { + "input": { + "Action": "Valid values: CREATE, DELETE, UPSERT", + "TTL": "The amount of time in seconds that you want DNS resolvers to cache the values in this resource record set before submitting another request to Route 53", + "Value": "The value that is applicable to the value of Type. For example, if Type is A, Value is an IPv4 address" + }, + "output": { + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example creates two latency resource record sets that route traffic to EC2 instances. Traffic for example.com is routed either to the Ohio region or the Oregon region, depending on the latency between the user and those regions.", + "id": "to-create-latency-resource-record-sets-1484350219917", + "title": "To create latency resource record sets" + }, + { + "input": { + "ChangeBatch": { + "Changes": [ + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "example-com-123456789.us-east-2.elb.amazonaws.com ", + "EvaluateTargetHealth": true, + "HostedZoneId": "Z3AADJGX6KTTL2" + }, + "Name": "example.com", + "Region": "us-east-2", + "SetIdentifier": "Ohio region", + "Type": "A" + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "example-com-987654321.us-west-2.elb.amazonaws.com ", + "EvaluateTargetHealth": true, + "HostedZoneId": "Z1H1FL5HABSF5" + }, + "Name": "example.com", + "Region": "us-west-2", + "SetIdentifier": "Oregon region", + "Type": "A" + } + } + ], + "Comment": "ELB load balancers for example.com" + }, + "HostedZoneId": "Z3M3LMPEXAMPLE" + }, + "output": { + "ChangeInfo": { + "Comment": "ELB load balancers for example.com", + "Id": "/change/C2682N5HXP0BZ4", + "Status": "PENDING", + "SubmittedAt": "2017-02-10T01:36:41.958Z" + } + }, + "comments": { + "input": { + "Action": "Valid values: CREATE, DELETE, UPSERT", + "DNSName": "The DNS name assigned to the resource", + "HostedZoneId": "Depends on the type of resource that you want to route traffic to", + "Type": "A or AAAA, depending on the type of resource that you want to route traffic to" + }, + "output": { + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example creates two latency alias resource record sets that route traffic for example.com to ELB load balancers. Requests are routed either to the Ohio region or the Oregon region, depending on the latency between the user and those regions.", + "id": "to-create-latency-alias-resource-record-sets-1484601774179", + "title": "To create latency alias resource record sets" + }, + { + "input": { + "ChangeBatch": { + "Changes": [ + { + "Action": "CREATE", + "ResourceRecordSet": { + "Failover": "PRIMARY", + "HealthCheckId": "abcdef11-2222-3333-4444-555555fedcba", + "Name": "example.com", + "ResourceRecords": [ + { + "Value": "192.0.2.44" + } + ], + "SetIdentifier": "Ohio region", + "TTL": 60, + "Type": "A" + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "Failover": "SECONDARY", + "HealthCheckId": "abcdef66-7777-8888-9999-000000fedcba", + "Name": "example.com", + "ResourceRecords": [ + { + "Value": "192.0.2.45" + } + ], + "SetIdentifier": "Oregon region", + "TTL": 60, + "Type": "A" + } + } + ], + "Comment": "Failover configuration for example.com" + }, + "HostedZoneId": "Z3M3LMPEXAMPLE" + }, + "output": { + "ChangeInfo": { + "Comment": "Failover configuration for example.com", + "Id": "/change/C2682N5HXP0BZ4", + "Status": "PENDING", + "SubmittedAt": "2017-02-10T01:36:41.958Z" + } + }, + "comments": { + "input": { + "Action": "Valid values: CREATE, DELETE, UPSERT", + "TTL": "The amount of time in seconds that you want DNS resolvers to cache the values in this resource record set before submitting another request to Route 53", + "Value": "The value that is applicable to the value of Type. For example, if Type is A, Value is an IPv4 address" + }, + "output": { + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example creates primary and secondary failover resource record sets that route traffic to EC2 instances. Traffic is generally routed to the primary resource, in the Ohio region. If that resource is unavailable, traffic is routed to the secondary resource, in the Oregon region.", + "id": "to-create-failover-resource-record-sets-1484604541740", + "title": "To create failover resource record sets" + }, + { + "input": { + "ChangeBatch": { + "Changes": [ + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "example-com-123456789.us-east-2.elb.amazonaws.com ", + "EvaluateTargetHealth": true, + "HostedZoneId": "Z3AADJGX6KTTL2" + }, + "Failover": "PRIMARY", + "Name": "example.com", + "SetIdentifier": "Ohio region", + "Type": "A" + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "example-com-987654321.us-west-2.elb.amazonaws.com ", + "EvaluateTargetHealth": true, + "HostedZoneId": "Z1H1FL5HABSF5" + }, + "Failover": "SECONDARY", + "Name": "example.com", + "SetIdentifier": "Oregon region", + "Type": "A" + } + } + ], + "Comment": "Failover alias configuration for example.com" + }, + "HostedZoneId": "Z3M3LMPEXAMPLE" + }, + "output": { + "ChangeInfo": { + "Comment": "Failover alias configuration for example.com", + "Id": "/change/C2682N5HXP0BZ4", + "Status": "PENDING", + "SubmittedAt": "2017-02-10T01:36:41.958Z" + } + }, + "comments": { + "input": { + "Action": "Valid values: CREATE, DELETE, UPSERT", + "DNSName": "The DNS name assigned to the resource", + "HostedZoneId": "Depends on the type of resource that you want to route traffic to", + "Type": "A or AAAA, depending on the type of resource that you want to route traffic to" + }, + "output": { + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example creates primary and secondary failover alias resource record sets that route traffic to ELB load balancers. Traffic is generally routed to the primary resource, in the Ohio region. If that resource is unavailable, traffic is routed to the secondary resource, in the Oregon region.", + "id": "to-create-failover-alias-resource-record-sets-1484607497724", + "title": "To create failover alias resource record sets" + }, + { + "input": { + "ChangeBatch": { + "Changes": [ + { + "Action": "CREATE", + "ResourceRecordSet": { + "GeoLocation": { + "ContinentCode": "NA" + }, + "Name": "example.com", + "ResourceRecords": [ + { + "Value": "192.0.2.44" + } + ], + "SetIdentifier": "North America", + "TTL": 60, + "Type": "A" + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "GeoLocation": { + "ContinentCode": "SA" + }, + "Name": "example.com", + "ResourceRecords": [ + { + "Value": "192.0.2.45" + } + ], + "SetIdentifier": "South America", + "TTL": 60, + "Type": "A" + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "GeoLocation": { + "ContinentCode": "EU" + }, + "Name": "example.com", + "ResourceRecords": [ + { + "Value": "192.0.2.46" + } + ], + "SetIdentifier": "Europe", + "TTL": 60, + "Type": "A" + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "GeoLocation": { + "CountryCode": "*" + }, + "Name": "example.com", + "ResourceRecords": [ + { + "Value": "192.0.2.47" + } + ], + "SetIdentifier": "Other locations", + "TTL": 60, + "Type": "A" + } + } + ], + "Comment": "Geolocation configuration for example.com" + }, + "HostedZoneId": "Z3M3LMPEXAMPLE" + }, + "output": { + "ChangeInfo": { + "Comment": "Geolocation configuration for example.com", + "Id": "/change/C2682N5HXP0BZ4", + "Status": "PENDING", + "SubmittedAt": "2017-02-10T01:36:41.958Z" + } + }, + "comments": { + "input": { + "Action": "Valid values: CREATE, DELETE, UPSERT", + "TTL": "The amount of time in seconds that you want DNS resolvers to cache the values in this resource record set before submitting another request to Route 53", + "Value": "The value that is applicable to the value of Type. For example, if Type is A, Value is an IPv4 address" + }, + "output": { + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example creates four geolocation resource record sets that use IPv4 addresses to route traffic to resources such as web servers running on EC2 instances. Traffic is routed to one of four IP addresses, for North America (NA), for South America (SA), for Europe (EU), and for all other locations (*).", + "id": "to-create-geolocation-resource-record-sets-1484612462466", + "title": "To create geolocation resource record sets" + }, + { + "input": { + "ChangeBatch": { + "Changes": [ + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "example-com-123456789.us-east-2.elb.amazonaws.com ", + "EvaluateTargetHealth": true, + "HostedZoneId": "Z3AADJGX6KTTL2" + }, + "GeoLocation": { + "ContinentCode": "NA" + }, + "Name": "example.com", + "SetIdentifier": "North America", + "Type": "A" + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "example-com-234567890.sa-east-1.elb.amazonaws.com ", + "EvaluateTargetHealth": true, + "HostedZoneId": "Z2P70J7HTTTPLU" + }, + "GeoLocation": { + "ContinentCode": "SA" + }, + "Name": "example.com", + "SetIdentifier": "South America", + "Type": "A" + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "example-com-234567890.eu-central-1.elb.amazonaws.com ", + "EvaluateTargetHealth": true, + "HostedZoneId": "Z215JYRZR1TBD5" + }, + "GeoLocation": { + "ContinentCode": "EU" + }, + "Name": "example.com", + "SetIdentifier": "Europe", + "Type": "A" + } + }, + { + "Action": "CREATE", + "ResourceRecordSet": { + "AliasTarget": { + "DNSName": "example-com-234567890.ap-southeast-1.elb.amazonaws.com ", + "EvaluateTargetHealth": true, + "HostedZoneId": "Z1LMS91P8CMLE5" + }, + "GeoLocation": { + "CountryCode": "*" + }, + "Name": "example.com", + "SetIdentifier": "Other locations", + "Type": "A" + } + } + ], + "Comment": "Geolocation alias configuration for example.com" + }, + "HostedZoneId": "Z3M3LMPEXAMPLE" + }, + "output": { + "ChangeInfo": { + "Comment": "Geolocation alias configuration for example.com", + "Id": "/change/C2682N5HXP0BZ4", + "Status": "PENDING", + "SubmittedAt": "2017-02-10T01:36:41.958Z" + } + }, + "comments": { + "input": { + "Action": "Valid values: CREATE, DELETE, UPSERT", + "DNSName": "The DNS name assigned to the resource", + "HostedZoneId": "Depends on the type of resource that you want to route traffic to", + "Type": "A or AAAA, depending on the type of resource that you want to route traffic to" + }, + "output": { + "SubmittedAt": "The date and time are in Coordinated Universal Time (UTC) and ISO 8601 format." + } + }, + "description": "The following example creates four geolocation alias resource record sets that route traffic to ELB load balancers. Traffic is routed to one of four IP addresses, for North America (NA), for South America (SA), for Europe (EU), and for all other locations (*).", + "id": "to-create-geolocation-alias-resource-record-sets-1484612871203", + "title": "To create geolocation alias resource record sets" + } + ], + "ChangeTagsForResource": [ + { + "input": { + "AddTags": [ + { + "Key": "apex", + "Value": "3874" + }, + { + "Key": "acme", + "Value": "4938" + } + ], + "RemoveTagKeys": [ + "Nadir" + ], + "ResourceId": "Z3M3LMPEXAMPLE", + "ResourceType": "hostedzone" + }, + "output": { + }, + "comments": { + "input": { + "ResourceType": "Valid values are healthcheck and hostedzone." + }, + "output": { + } + }, + "description": "The following example adds two tags and removes one tag from the hosted zone with ID Z3M3LMPEXAMPLE.", + "id": "to-add-or-remove-tags-from-a-hosted-zone-or-health-check-1484084752409", + "title": "To add or remove tags from a hosted zone or health check" + } + ], + "GetHostedZone": [ + { + "input": { + "Id": "Z3M3LMPEXAMPLE" + }, + "output": { + "DelegationSet": { + "NameServers": [ + "ns-2048.awsdns-64.com", + "ns-2049.awsdns-65.net", + "ns-2050.awsdns-66.org", + "ns-2051.awsdns-67.co.uk" + ] + }, + "HostedZone": { + "CallerReference": "C741617D-04E4-F8DE-B9D7-0D150FC61C2E", + "Config": { + "PrivateZone": false + }, + "Id": "/hostedzone/Z3M3LMPEXAMPLE", + "Name": "myawsbucket.com.", + "ResourceRecordSetCount": 8 + } + }, + "comments": { + "input": { + }, + "output": { + "Id": "The ID of the hosted zone that you specified in the GetHostedZone request.", + "Name": "The name of the hosted zone.", + "NameServers": "The servers that you specify in your domain configuration.", + "PrivateZone": "True if this is a private hosted zone, false if it's a public hosted zone." + } + }, + "description": "The following example gets information about the Z3M3LMPEXAMPLE hosted zone.", + "id": "to-get-information-about-a-hosted-zone-1481752361124", + "title": "To get information about a hosted zone" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/paginators-1.json new file mode 100644 index 00000000..2c370965 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/paginators-1.json @@ -0,0 +1,67 @@ +{ + "pagination": { + "ListHealthChecks": { + "input_token": "Marker", + "output_token": "NextMarker", + "more_results": "IsTruncated", + "limit_key": "MaxItems", + "result_key": "HealthChecks" + }, + "ListHostedZones": { + "input_token": "Marker", + "output_token": "NextMarker", + "more_results": "IsTruncated", + "limit_key": "MaxItems", + "result_key": "HostedZones" + }, + "ListResourceRecordSets": { + "more_results": "IsTruncated", + "limit_key": "MaxItems", + "result_key": "ResourceRecordSets", + "input_token": [ + "StartRecordName", + "StartRecordType", + "StartRecordIdentifier" + ], + "output_token": [ + "NextRecordName", + "NextRecordType", + "NextRecordIdentifier" + ] + }, + "ListVPCAssociationAuthorizations": { + "input_token": "NextToken", + "output_token": "NextToken", + "non_aggregate_keys": [ + "HostedZoneId" + ], + "result_key": [ + "VPCs" + ] + }, + "ListQueryLoggingConfigs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "QueryLoggingConfigs" + }, + "ListCidrBlocks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CidrBlocks" + }, + "ListCidrCollections": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CidrCollections" + }, + "ListCidrLocations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CidrLocations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/service-2.json.gz new file mode 100644 index 00000000..103b93a9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/waiters-2.json new file mode 100644 index 00000000..94aad399 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53/2013-04-01/waiters-2.json @@ -0,0 +1,18 @@ +{ + "version": 2, + "waiters": { + "ResourceRecordSetsChanged": { + "delay": 30, + "maxAttempts": 60, + "operation": "GetChange", + "acceptors": [ + { + "matcher": "path", + "expected": "INSYNC", + "argument": "ChangeInfo.Status", + "state": "success" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3a2869d1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/paginators-1.json new file mode 100644 index 00000000..c2f5cbcb --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/paginators-1.json @@ -0,0 +1,29 @@ +{ + "version": "1.0", + "pagination": { + "ListDomains": { + "limit_key": "MaxItems", + "input_token": "Marker", + "output_token": "NextPageMarker", + "result_key": "Domains" + }, + "ListOperations": { + "limit_key": "MaxItems", + "input_token": "Marker", + "output_token": "NextPageMarker", + "result_key": "Operations" + }, + "ViewBilling": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "NextPageMarker", + "result_key": "BillingRecords" + }, + "ListPrices": { + "input_token": "Marker", + "limit_key": "MaxItems", + "output_token": "NextPageMarker", + "result_key": "Prices" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/service-2.json.gz new file mode 100644 index 00000000..bef623a6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53domains/2014-05-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d3fe3d95 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/paginators-1.json new file mode 100644 index 00000000..d6529438 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/paginators-1.json @@ -0,0 +1,100 @@ +{ + "pagination": { + "ListTagsForResource": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Tags" + }, + "ListResolverEndpointIpAddresses": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "IpAddresses" + }, + "ListResolverEndpoints": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResolverEndpoints" + }, + "ListResolverQueryLogConfigAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResolverQueryLogConfigAssociations" + }, + "ListResolverQueryLogConfigs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResolverQueryLogConfigs" + }, + "ListResolverRuleAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResolverRuleAssociations" + }, + "ListResolverRules": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResolverRules" + }, + "ListResolverDnssecConfigs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResolverDnssecConfigs" + }, + "ListFirewallConfigs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FirewallConfigs" + }, + "ListFirewallDomainLists": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FirewallDomainLists" + }, + "ListFirewallDomains": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Domains" + }, + "ListFirewallRuleGroupAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FirewallRuleGroupAssociations" + }, + "ListFirewallRuleGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FirewallRuleGroups" + }, + "ListFirewallRules": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FirewallRules" + }, + "ListResolverConfigs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResolverConfigs" + }, + "ListOutpostResolvers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "OutpostResolvers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/paginators-1.sdk-extras.json new file mode 100644 index 00000000..68087936 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/paginators-1.sdk-extras.json @@ -0,0 +1,39 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "ListResolverEndpointIpAddresses": { + "non_aggregate_keys": [ + "MaxResults" + ] + }, + "ListResolverEndpoints": { + "non_aggregate_keys": [ + "MaxResults" + ] + }, + "ListResolverQueryLogConfigAssociations": { + "non_aggregate_keys": [ + "TotalCount", + "TotalFilteredCount" + ] + }, + "ListResolverQueryLogConfigs": { + "non_aggregate_keys": [ + "TotalCount", + "TotalFilteredCount" + ] + }, + "ListResolverRuleAssociations": { + "non_aggregate_keys": [ + "MaxResults" + ] + }, + "ListResolverRules": { + "non_aggregate_keys": [ + "MaxResults" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/service-2.json.gz new file mode 100644 index 00000000..704e1d70 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/route53resolver/2018-04-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..13f59439 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/paginators-1.json new file mode 100644 index 00000000..1a044920 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "GetAppMonitorData": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Events" + }, + "ListAppMonitors": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AppMonitorSummaries" + }, + "BatchGetRumMetricDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "MetricDefinitions" + }, + "ListRumMetricsDestinations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Destinations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..d4b70b77 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/rum/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..dc3daed9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/examples-1.json new file mode 100644 index 00000000..38a47bb3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/examples-1.json @@ -0,0 +1,1843 @@ +{ + "version": "1.0", + "examples": { + "AbortMultipartUpload": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "bigobject", + "UploadId": "xadcOB_7YPBOJuoFiQ9cz4P3Pe6FIZwO4f7wN93uHsNBEw97pl5eNwzExg0LAT2dUN91cOmrEQHDsP3WA60CEg--" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example aborts a multipart upload.", + "id": "to-abort-a-multipart-upload-1481853354987", + "title": "To abort a multipart upload" + } + ], + "CompleteMultipartUpload": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "bigobject", + "MultipartUpload": { + "Parts": [ + { + "ETag": "\"d8c2eafd90c266e19ab9dcacc479f8af\"", + "PartNumber": "1" + }, + { + "ETag": "\"d8c2eafd90c266e19ab9dcacc479f8af\"", + "PartNumber": "2" + } + ] + }, + "UploadId": "7YPBOJuoFiQ9cz4P3Pe6FIZwO4f7wN93uHsNBEw97pl5eNwzExg0LAT2dUN91cOmrEQHDsP3WA60CEg--" + }, + "output": { + "Bucket": "acexamplebucket", + "ETag": "\"4d9031c7644d8081c2829f4ea23c55f7-2\"", + "Key": "bigobject", + "Location": "https://examplebucket.s3.amazonaws.com/bigobject" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example completes a multipart upload.", + "id": "to-complete-multipart-upload-1481851590483", + "title": "To complete multipart upload" + } + ], + "CopyObject": [ + { + "input": { + "Bucket": "destinationbucket", + "CopySource": "/sourcebucket/HappyFacejpg", + "Key": "HappyFaceCopyjpg" + }, + "output": { + "CopyObjectResult": { + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "LastModified": "2016-12-15T17:38:53.000Z" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example copies an object from one bucket to another.", + "id": "to-copy-an-object-1481823186878", + "title": "To copy an object" + } + ], + "CreateBucket": [ + { + "input": { + "Bucket": "examplebucket", + "CreateBucketConfiguration": { + "LocationConstraint": "eu-west-1" + } + }, + "output": { + "Location": "http://examplebucket.s3.amazonaws.com/" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a bucket. The request specifies an AWS region where to create the bucket.", + "id": "to-create-a-bucket-in-a-specific-region-1483399072992", + "title": "To create a bucket in a specific region" + }, + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "Location": "/examplebucket" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a bucket.", + "id": "to-create-a-bucket--1472851826060", + "title": "To create a bucket " + } + ], + "CreateMultipartUpload": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "largeobject" + }, + "output": { + "Bucket": "examplebucket", + "Key": "largeobject", + "UploadId": "ibZBv_75gd9r8lH_gqXatLdxMVpAlj6ZQjEs.OwyF3953YdwbcQnMA2BLGn8Lx12fQNICtMw5KyteFeHw.Sjng--" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example initiates a multipart upload.", + "id": "to-initiate-a-multipart-upload-1481836794513", + "title": "To initiate a multipart upload" + } + ], + "DeleteBucket": [ + { + "input": { + "Bucket": "forrandall2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes the specified bucket.", + "id": "to-delete-a-bucket-1473108514262", + "title": "To delete a bucket" + } + ], + "DeleteBucketCors": [ + { + "input": { + "Bucket": "examplebucket" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes CORS configuration on a bucket.", + "id": "to-delete-cors-configuration-on-a-bucket-1483042856112", + "title": "To delete cors configuration on a bucket." + } + ], + "DeleteBucketLifecycle": [ + { + "input": { + "Bucket": "examplebucket" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes lifecycle configuration on a bucket.", + "id": "to-delete-lifecycle-configuration-on-a-bucket-1483043310583", + "title": "To delete lifecycle configuration on a bucket." + } + ], + "DeleteBucketPolicy": [ + { + "input": { + "Bucket": "examplebucket" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes bucket policy on the specified bucket.", + "id": "to-delete-bucket-policy-1483043406577", + "title": "To delete bucket policy" + } + ], + "DeleteBucketReplication": [ + { + "input": { + "Bucket": "example" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes replication configuration set on bucket.", + "id": "to-delete-bucket-replication-configuration-1483043684668", + "title": "To delete bucket replication configuration" + } + ], + "DeleteBucketTagging": [ + { + "input": { + "Bucket": "examplebucket" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes bucket tags.", + "id": "to-delete-bucket-tags-1483043846509", + "title": "To delete bucket tags" + } + ], + "DeleteBucketWebsite": [ + { + "input": { + "Bucket": "examplebucket" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes bucket website configuration.", + "id": "to-delete-bucket-website-configuration-1483043937825", + "title": "To delete bucket website configuration" + } + ], + "DeleteObject": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "objectkey.jpg" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an object from an S3 bucket.", + "id": "to-delete-an-object-1472850136595", + "title": "To delete an object" + }, + { + "input": { + "Bucket": "ExampleBucket", + "Key": "HappyFace.jpg" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an object from a non-versioned bucket.", + "id": "to-delete-an-object-from-a-non-versioned-bucket-1481588533089", + "title": "To delete an object (from a non-versioned bucket)" + } + ], + "DeleteObjectTagging": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "HappyFace.jpg", + "VersionId": "ydlaNkwWm0SfKJR.T1b1fIdPRbldTYRI" + }, + "output": { + "VersionId": "ydlaNkwWm0SfKJR.T1b1fIdPRbldTYRI" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example removes tag set associated with the specified object version. The request specifies both the object key and object version.", + "id": "to-remove-tag-set-from-an-object-version-1483145285913", + "title": "To remove tag set from an object version" + }, + { + "input": { + "Bucket": "examplebucket", + "Key": "HappyFace.jpg" + }, + "output": { + "VersionId": "null" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example removes tag set associated with the specified object. If the bucket is versioning enabled, the operation removes tag set from the latest object version.", + "id": "to-remove-tag-set-from-an-object-1483145342862", + "title": "To remove tag set from an object" + } + ], + "DeleteObjects": [ + { + "input": { + "Bucket": "examplebucket", + "Delete": { + "Objects": [ + { + "Key": "HappyFace.jpg", + "VersionId": "2LWg7lQLnY41.maGB5Z6SWW.dcq0vx7b" + }, + { + "Key": "HappyFace.jpg", + "VersionId": "yoz3HB.ZhCS_tKVEmIOr7qYyyAaZSKVd" + } + ], + "Quiet": false + } + }, + "output": { + "Deleted": [ + { + "Key": "HappyFace.jpg", + "VersionId": "yoz3HB.ZhCS_tKVEmIOr7qYyyAaZSKVd" + }, + { + "Key": "HappyFace.jpg", + "VersionId": "2LWg7lQLnY41.maGB5Z6SWW.dcq0vx7b" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes objects from a bucket. The request specifies object versions. S3 deletes specific object versions and returns the key and versions of deleted objects in the response.", + "id": "to-delete-multiple-object-versions-from-a-versioned-bucket-1483147087737", + "title": "To delete multiple object versions from a versioned bucket" + }, + { + "input": { + "Bucket": "examplebucket", + "Delete": { + "Objects": [ + { + "Key": "objectkey1" + }, + { + "Key": "objectkey2" + } + ], + "Quiet": false + } + }, + "output": { + "Deleted": [ + { + "DeleteMarker": "true", + "DeleteMarkerVersionId": "A._w1z6EFiCF5uhtQMDal9JDkID9tQ7F", + "Key": "objectkey1" + }, + { + "DeleteMarker": "true", + "DeleteMarkerVersionId": "iOd_ORxhkKe_e8G8_oSGxt2PjsCZKlkt", + "Key": "objectkey2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes objects from a bucket. The bucket is versioned, and the request does not specify the object version to delete. In this case, all versions remain in the bucket and S3 adds a delete marker.", + "id": "to-delete-multiple-objects-from-a-versioned-bucket-1483146248805", + "title": "To delete multiple objects from a versioned bucket" + } + ], + "GetBucketCors": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "CORSRules": [ + { + "AllowedHeaders": [ + "Authorization" + ], + "AllowedMethods": [ + "GET" + ], + "AllowedOrigins": [ + "*" + ], + "MaxAgeSeconds": 3000 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns cross-origin resource sharing (CORS) configuration set on a bucket.", + "id": "to-get-cors-configuration-set-on-a-bucket-1481596855475", + "title": "To get cors configuration set on a bucket" + } + ], + "GetBucketLifecycle": [ + { + "input": { + "Bucket": "acl1" + }, + "output": { + "Rules": [ + { + "Expiration": { + "Days": 1 + }, + "ID": "delete logs", + "Prefix": "123/", + "Status": "Enabled" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example gets ACL on the specified bucket.", + "id": "to-get-a-bucket-acl-1474413606503", + "title": "To get a bucket acl" + } + ], + "GetBucketLifecycleConfiguration": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "Rules": [ + { + "ID": "Rule for TaxDocs/", + "Prefix": "TaxDocs", + "Status": "Enabled", + "Transitions": [ + { + "Days": 365, + "StorageClass": "STANDARD_IA" + } + ] + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves lifecycle configuration on set on a bucket. ", + "id": "to-get-lifecycle-configuration-on-a-bucket-1481666063200", + "title": "To get lifecycle configuration on a bucket" + } + ], + "GetBucketLocation": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "LocationConstraint": "us-west-2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns bucket location.", + "id": "to-get-bucket-location-1481594573609", + "title": "To get bucket location" + } + ], + "GetBucketNotification": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "QueueConfiguration": { + "Event": "s3:ObjectCreated:Put", + "Events": [ + "s3:ObjectCreated:Put" + ], + "Id": "MDQ2OGQ4NDEtOTBmNi00YTM4LTk0NzYtZDIwN2I3NWQ1NjIx", + "Queue": "arn:aws:sqs:us-east-1:acct-id:S3ObjectCreatedEventQueue" + }, + "TopicConfiguration": { + "Event": "s3:ObjectCreated:Copy", + "Events": [ + "s3:ObjectCreated:Copy" + ], + "Id": "YTVkMWEzZGUtNTY1NS00ZmE2LWJjYjktMmRlY2QwODFkNTJi", + "Topic": "arn:aws:sns:us-east-1:acct-id:S3ObjectCreatedEventTopic" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns notification configuration set on a bucket.", + "id": "to-get-notification-configuration-set-on-a-bucket-1481594028667", + "title": "To get notification configuration set on a bucket" + }, + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "QueueConfiguration": { + "Event": "s3:ObjectCreated:Put", + "Events": [ + "s3:ObjectCreated:Put" + ], + "Id": "MDQ2OGQ4NDEtOTBmNi00YTM4LTk0NzYtZDIwN2I3NWQ1NjIx", + "Queue": "arn:aws:sqs:us-east-1:acct-id:S3ObjectCreatedEventQueue" + }, + "TopicConfiguration": { + "Event": "s3:ObjectCreated:Copy", + "Events": [ + "s3:ObjectCreated:Copy" + ], + "Id": "YTVkMWEzZGUtNTY1NS00ZmE2LWJjYjktMmRlY2QwODFkNTJi", + "Topic": "arn:aws:sns:us-east-1:acct-id:S3ObjectCreatedEventTopic" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns notification configuration set on a bucket.", + "id": "to-get-notification-configuration-set-on-a-bucket-1481594028667", + "title": "To get notification configuration set on a bucket" + } + ], + "GetBucketPolicy": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "Policy": "{\"Version\":\"2008-10-17\",\"Id\":\"LogPolicy\",\"Statement\":[{\"Sid\":\"Enables the log delivery group to publish logs to your bucket \",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"111122223333\"},\"Action\":[\"s3:GetBucketAcl\",\"s3:GetObjectAcl\",\"s3:PutObject\"],\"Resource\":[\"arn:aws:s3:::policytest1/*\",\"arn:aws:s3:::policytest1\"]}]}" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns bucket policy associated with a bucket.", + "id": "to-get-bucket-policy-1481595098424", + "title": "To get bucket policy" + } + ], + "GetBucketReplication": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "ReplicationConfiguration": { + "Role": "arn:aws:iam::acct-id:role/example-role", + "Rules": [ + { + "Destination": { + "Bucket": "arn:aws:s3:::destination-bucket" + }, + "ID": "MWIwNTkwZmItMTE3MS00ZTc3LWJkZDEtNzRmODQwYzc1OTQy", + "Prefix": "Tax", + "Status": "Enabled" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns replication configuration set on a bucket.", + "id": "to-get-replication-configuration-set-on-a-bucket-1481593597175", + "title": "To get replication configuration set on a bucket" + } + ], + "GetBucketRequestPayment": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "Payer": "BucketOwner" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves bucket versioning configuration.", + "id": "to-get-bucket-versioning-configuration-1483037183929", + "title": "To get bucket versioning configuration" + } + ], + "GetBucketTagging": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "TagSet": [ + { + "Key": "key1", + "Value": "value1" + }, + { + "Key": "key2", + "Value": "value2" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns tag set associated with a bucket", + "id": "to-get-tag-set-associated-with-a-bucket-1481593232107", + "title": "To get tag set associated with a bucket" + } + ], + "GetBucketVersioning": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "MFADelete": "Disabled", + "Status": "Enabled" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves bucket versioning configuration.", + "id": "to-get-bucket-versioning-configuration-1483037183929", + "title": "To get bucket versioning configuration" + } + ], + "GetBucketWebsite": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "ErrorDocument": { + "Key": "error.html" + }, + "IndexDocument": { + "Suffix": "index.html" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves website configuration of a bucket.", + "id": "to-get-bucket-website-configuration-1483037016926", + "title": "To get bucket website configuration" + } + ], + "GetObject": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "HappyFace.jpg" + }, + "output": { + "AcceptRanges": "bytes", + "ContentLength": "3191", + "ContentType": "image/jpeg", + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "LastModified": "Thu, 15 Dec 2016 01:19:41 GMT", + "Metadata": { + }, + "TagCount": 2, + "VersionId": "null" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves an object for an S3 bucket.", + "id": "to-retrieve-an-object-1481827837012", + "title": "To retrieve an object" + }, + { + "input": { + "Bucket": "examplebucket", + "Key": "SampleFile.txt", + "Range": "bytes=0-9" + }, + "output": { + "AcceptRanges": "bytes", + "ContentLength": "10", + "ContentRange": "bytes 0-9/43", + "ContentType": "text/plain", + "ETag": "\"0d94420ffd0bc68cd3d152506b97a9cc\"", + "LastModified": "Thu, 09 Oct 2014 22:57:28 GMT", + "Metadata": { + }, + "VersionId": "null" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves an object for an S3 bucket. The request specifies the range header to retrieve a specific byte range.", + "id": "to-retrieve-a-byte-range-of-an-object--1481832674603", + "title": "To retrieve a byte range of an object " + } + ], + "GetObjectAcl": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "HappyFace.jpg" + }, + "output": { + "Grants": [ + { + "Grantee": { + "DisplayName": "owner-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc", + "Type": "CanonicalUser" + }, + "Permission": "WRITE" + }, + { + "Grantee": { + "DisplayName": "owner-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc", + "Type": "CanonicalUser" + }, + "Permission": "WRITE_ACP" + }, + { + "Grantee": { + "DisplayName": "owner-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc", + "Type": "CanonicalUser" + }, + "Permission": "READ" + }, + { + "Grantee": { + "DisplayName": "owner-display-name", + "ID": "852b113eexamplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc", + "Type": "CanonicalUser" + }, + "Permission": "READ_ACP" + } + ], + "Owner": { + "DisplayName": "owner-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves access control list (ACL) of an object.", + "id": "to-retrieve-object-acl-1481833557740", + "title": "To retrieve object ACL" + } + ], + "GetObjectTagging": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "HappyFace.jpg" + }, + "output": { + "TagSet": [ + { + "Key": "Key4", + "Value": "Value4" + }, + { + "Key": "Key3", + "Value": "Value3" + } + ], + "VersionId": "null" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves tag set of an object.", + "id": "to-retrieve-tag-set-of-an-object-1481833847896", + "title": "To retrieve tag set of an object" + }, + { + "input": { + "Bucket": "examplebucket", + "Key": "exampleobject", + "VersionId": "ydlaNkwWm0SfKJR.T1b1fIdPRbldTYRI" + }, + "output": { + "TagSet": [ + { + "Key": "Key1", + "Value": "Value1" + } + ], + "VersionId": "ydlaNkwWm0SfKJR.T1b1fIdPRbldTYRI" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves tag set of an object. The request specifies object version.", + "id": "to-retrieve-tag-set-of-a-specific-object-version-1483400283663", + "title": "To retrieve tag set of a specific object version" + } + ], + "GetObjectTorrent": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "HappyFace.jpg" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves torrent files of an object.", + "id": "to-retrieve-torrent-files-for-an-object-1481834115959", + "title": "To retrieve torrent files for an object" + } + ], + "HeadBucket": [ + { + "input": { + "Bucket": "acl1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation checks to see if a bucket exists.", + "id": "to-determine-if-bucket-exists-1473110292262", + "title": "To determine if bucket exists" + } + ], + "HeadObject": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "HappyFace.jpg" + }, + "output": { + "AcceptRanges": "bytes", + "ContentLength": "3191", + "ContentType": "image/jpeg", + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "LastModified": "Thu, 15 Dec 2016 01:19:41 GMT", + "Metadata": { + }, + "VersionId": "null" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves an object metadata.", + "id": "to-retrieve-metadata-of-an-object-without-returning-the-object-itself-1481834820480", + "title": "To retrieve metadata of an object without returning the object itself" + } + ], + "ListMultipartUploads": [ + { + "input": { + "Bucket": "examplebucket" + }, + "output": { + "Uploads": [ + { + "Initiated": "2014-05-01T05:40:58.000Z", + "Initiator": { + "DisplayName": "display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "Key": "JavaFile", + "Owner": { + "DisplayName": "display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "StorageClass": "STANDARD", + "UploadId": "examplelUa.CInXklLQtSMJITdUnoZ1Y5GACB5UckOtspm5zbDMCkPF_qkfZzMiFZ6dksmcnqxJyIBvQMG9X9Q--" + }, + { + "Initiated": "2014-05-01T05:41:27.000Z", + "Initiator": { + "DisplayName": "display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "Key": "JavaFile", + "Owner": { + "DisplayName": "display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "StorageClass": "STANDARD", + "UploadId": "examplelo91lv1iwvWpvCiJWugw2xXLPAD7Z8cJyX9.WiIRgNrdG6Ldsn.9FtS63TCl1Uf5faTB.1U5Ckcbmdw--" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example lists in-progress multipart uploads on a specific bucket.", + "id": "to-list-in-progress-multipart-uploads-on-a-bucket-1481852775260", + "title": "To list in-progress multipart uploads on a bucket" + }, + { + "input": { + "Bucket": "examplebucket", + "KeyMarker": "nextkeyfrompreviousresponse", + "MaxUploads": "2", + "UploadIdMarker": "valuefrompreviousresponse" + }, + "output": { + "Bucket": "acl1", + "IsTruncated": true, + "KeyMarker": "", + "MaxUploads": "2", + "NextKeyMarker": "someobjectkey", + "NextUploadIdMarker": "examplelo91lv1iwvWpvCiJWugw2xXLPAD7Z8cJyX9.WiIRgNrdG6Ldsn.9FtS63TCl1Uf5faTB.1U5Ckcbmdw--", + "UploadIdMarker": "", + "Uploads": [ + { + "Initiated": "2014-05-01T05:40:58.000Z", + "Initiator": { + "DisplayName": "ownder-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "Key": "JavaFile", + "Owner": { + "DisplayName": "mohanataws", + "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "StorageClass": "STANDARD", + "UploadId": "gZ30jIqlUa.CInXklLQtSMJITdUnoZ1Y5GACB5UckOtspm5zbDMCkPF_qkfZzMiFZ6dksmcnqxJyIBvQMG9X9Q--" + }, + { + "Initiated": "2014-05-01T05:41:27.000Z", + "Initiator": { + "DisplayName": "ownder-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "Key": "JavaFile", + "Owner": { + "DisplayName": "ownder-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "StorageClass": "STANDARD", + "UploadId": "b7tZSqIlo91lv1iwvWpvCiJWugw2xXLPAD7Z8cJyX9.WiIRgNrdG6Ldsn.9FtS63TCl1Uf5faTB.1U5Ckcbmdw--" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example specifies the upload-id-marker and key-marker from previous truncated response to retrieve next setup of multipart uploads.", + "id": "list-next-set-of-multipart-uploads-when-previous-result-is-truncated-1482428106748", + "title": "List next set of multipart uploads when previous result is truncated" + } + ], + "ListObjectVersions": [ + { + "input": { + "Bucket": "examplebucket", + "Prefix": "HappyFace.jpg" + }, + "output": { + "Versions": [ + { + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "IsLatest": true, + "Key": "HappyFace.jpg", + "LastModified": "2016-12-15T01:19:41.000Z", + "Owner": { + "DisplayName": "owner-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "Size": 3191, + "StorageClass": "STANDARD", + "VersionId": "null" + }, + { + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "IsLatest": false, + "Key": "HappyFace.jpg", + "LastModified": "2016-12-13T00:58:26.000Z", + "Owner": { + "DisplayName": "owner-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "Size": 3191, + "StorageClass": "STANDARD", + "VersionId": "PHtexPGjH2y.zBgT8LmB7wwLI2mpbz.k" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example return versions of an object with specific key name prefix. The request limits the number of items returned to two. If there are are more than two object version, S3 returns NextToken in the response. You can specify this token value in your next request to fetch next set of object versions.", + "id": "to-list-object-versions-1481910996058", + "title": "To list object versions" + } + ], + "ListObjects": [ + { + "input": { + "Bucket": "examplebucket", + "MaxKeys": "2" + }, + "output": { + "Contents": [ + { + "ETag": "\"70ee1738b6b21e2c8a43f3a5ab0eee71\"", + "Key": "example1.jpg", + "LastModified": "2014-11-21T19:40:05.000Z", + "Owner": { + "DisplayName": "myname", + "ID": "12345example25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "Size": 11, + "StorageClass": "STANDARD" + }, + { + "ETag": "\"9c8af9a76df052144598c115ef33e511\"", + "Key": "example2.jpg", + "LastModified": "2013-11-15T01:10:49.000Z", + "Owner": { + "DisplayName": "myname", + "ID": "12345example25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "Size": 713193, + "StorageClass": "STANDARD" + } + ], + "NextMarker": "eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAyfQ==" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example list two objects in a bucket.", + "id": "to-list-objects-in-a-bucket-1473447646507", + "title": "To list objects in a bucket" + } + ], + "ListObjectsV2": [ + { + "input": { + "Bucket": "examplebucket", + "MaxKeys": "2" + }, + "output": { + "Contents": [ + { + "ETag": "\"70ee1738b6b21e2c8a43f3a5ab0eee71\"", + "Key": "happyface.jpg", + "LastModified": "2014-11-21T19:40:05.000Z", + "Size": 11, + "StorageClass": "STANDARD" + }, + { + "ETag": "\"becf17f89c30367a9a44495d62ed521a-1\"", + "Key": "test.jpg", + "LastModified": "2014-05-02T04:51:50.000Z", + "Size": 4192256, + "StorageClass": "STANDARD" + } + ], + "IsTruncated": true, + "KeyCount": "2", + "MaxKeys": "2", + "Name": "examplebucket", + "NextContinuationToken": "1w41l63U0xa8q7smH50vCxyTQqdxo69O3EmK28Bi5PcROI4wI/EyIJg==", + "Prefix": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves object list. The request specifies max keys to limit response to include only 2 object keys. ", + "id": "to-get-object-list", + "title": "To get object list" + } + ], + "ListParts": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "bigobject", + "UploadId": "example7YPBOJuoFiQ9cz4P3Pe6FIZwO4f7wN93uHsNBEw97pl5eNwzExg0LAT2dUN91cOmrEQHDsP3WA60CEg--" + }, + "output": { + "Initiator": { + "DisplayName": "owner-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "Owner": { + "DisplayName": "owner-display-name", + "ID": "examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484be31bebcc" + }, + "Parts": [ + { + "ETag": "\"d8c2eafd90c266e19ab9dcacc479f8af\"", + "LastModified": "2016-12-16T00:11:42.000Z", + "PartNumber": "1", + "Size": 26246026 + }, + { + "ETag": "\"d8c2eafd90c266e19ab9dcacc479f8af\"", + "LastModified": "2016-12-16T00:15:01.000Z", + "PartNumber": "2", + "Size": 26246026 + } + ], + "StorageClass": "STANDARD" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example lists parts uploaded for a specific multipart upload.", + "id": "to-list-parts-of-a-multipart-upload-1481852006923", + "title": "To list parts of a multipart upload." + } + ], + "PutBucketAcl": [ + { + "input": { + "Bucket": "examplebucket", + "GrantFullControl": "id=examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484", + "GrantWrite": "uri=http://acs.amazonaws.com/groups/s3/LogDelivery" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example replaces existing ACL on a bucket. The ACL grants the bucket owner (specified using the owner ID) and write permission to the LogDelivery group. Because this is a replace operation, you must specify all the grants in your request. To incrementally add or remove ACL grants, you might use the console.", + "id": "put-bucket-acl-1482260397033", + "title": "Put bucket acl" + } + ], + "PutBucketCors": [ + { + "input": { + "Bucket": "", + "CORSConfiguration": { + "CORSRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "http://www.example.com" + ], + "ExposeHeaders": [ + "x-amz-server-side-encryption" + ], + "MaxAgeSeconds": 3000 + }, + { + "AllowedHeaders": [ + "Authorization" + ], + "AllowedMethods": [ + "GET" + ], + "AllowedOrigins": [ + "*" + ], + "MaxAgeSeconds": 3000 + } + ] + }, + "ContentMD5": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example enables PUT, POST, and DELETE requests from www.example.com, and enables GET requests from any domain.", + "id": "to-set-cors-configuration-on-a-bucket-1483037818805", + "title": "To set cors configuration on a bucket." + } + ], + "PutBucketLifecycleConfiguration": [ + { + "input": { + "Bucket": "examplebucket", + "LifecycleConfiguration": { + "Rules": [ + { + "Expiration": { + "Days": 3650 + }, + "Filter": { + "Prefix": "documents/" + }, + "ID": "TestOnly", + "Status": "Enabled", + "Transitions": [ + { + "Days": 365, + "StorageClass": "GLACIER" + } + ] + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example replaces existing lifecycle configuration, if any, on the specified bucket. ", + "id": "put-bucket-lifecycle-1482264533092", + "title": "Put bucket lifecycle" + } + ], + "PutBucketLogging": [ + { + "input": { + "Bucket": "sourcebucket", + "BucketLoggingStatus": { + "LoggingEnabled": { + "TargetBucket": "targetbucket", + "TargetGrants": [ + { + "Grantee": { + "Type": "Group", + "URI": "http://acs.amazonaws.com/groups/global/AllUsers" + }, + "Permission": "READ" + } + ], + "TargetPrefix": "MyBucketLogs/" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets logging policy on a bucket. For the Log Delivery group to deliver logs to the destination bucket, it needs permission for the READ_ACP action which the policy grants.", + "id": "set-logging-configuration-for-a-bucket-1482269119909", + "title": "Set logging configuration for a bucket" + } + ], + "PutBucketNotificationConfiguration": [ + { + "input": { + "Bucket": "examplebucket", + "NotificationConfiguration": { + "TopicConfigurations": [ + { + "Events": [ + "s3:ObjectCreated:*" + ], + "TopicArn": "arn:aws:sns:us-west-2:123456789012:s3-notification-topic" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets notification configuration on a bucket to publish the object created events to an SNS topic.", + "id": "set-notification-configuration-for-a-bucket-1482270296426", + "title": "Set notification configuration for a bucket" + } + ], + "PutBucketPolicy": [ + { + "input": { + "Bucket": "examplebucket", + "Policy": "{\"Version\": \"2012-10-17\", \"Statement\": [{ \"Sid\": \"id-1\",\"Effect\": \"Allow\",\"Principal\": {\"AWS\": \"arn:aws:iam::123456789012:root\"}, \"Action\": [ \"s3:PutObject\",\"s3:PutObjectAcl\"], \"Resource\": [\"arn:aws:s3:::acl3/*\" ] } ]}" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets a permission policy on a bucket.", + "id": "set-bucket-policy-1482448903302", + "title": "Set bucket policy" + } + ], + "PutBucketReplication": [ + { + "input": { + "Bucket": "examplebucket", + "ReplicationConfiguration": { + "Role": "arn:aws:iam::123456789012:role/examplerole", + "Rules": [ + { + "Destination": { + "Bucket": "arn:aws:s3:::destinationbucket", + "StorageClass": "STANDARD" + }, + "Prefix": "", + "Status": "Enabled" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets replication configuration on a bucket.", + "id": "id-1", + "title": "Set replication configuration on a bucket" + } + ], + "PutBucketRequestPayment": [ + { + "input": { + "Bucket": "examplebucket", + "RequestPaymentConfiguration": { + "Payer": "Requester" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets request payment configuration on a bucket so that person requesting the download is charged.", + "id": "set-request-payment-configuration-on-a-bucket-1482343596680", + "title": "Set request payment configuration on a bucket." + } + ], + "PutBucketTagging": [ + { + "input": { + "Bucket": "examplebucket", + "Tagging": { + "TagSet": [ + { + "Key": "Key1", + "Value": "Value1" + }, + { + "Key": "Key2", + "Value": "Value2" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets tags on a bucket. Any existing tags are replaced.", + "id": "set-tags-on-a-bucket-1482346269066", + "title": "Set tags on a bucket" + } + ], + "PutBucketVersioning": [ + { + "input": { + "Bucket": "examplebucket", + "VersioningConfiguration": { + "MFADelete": "Disabled", + "Status": "Enabled" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets versioning configuration on bucket. The configuration enables versioning on the bucket.", + "id": "set-versioning-configuration-on-a-bucket-1482344186279", + "title": "Set versioning configuration on a bucket" + } + ], + "PutBucketWebsite": [ + { + "input": { + "Bucket": "examplebucket", + "ContentMD5": "", + "WebsiteConfiguration": { + "ErrorDocument": { + "Key": "error.html" + }, + "IndexDocument": { + "Suffix": "index.html" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example adds website configuration to a bucket.", + "id": "set-website-configuration-on-a-bucket-1482346836261", + "title": "Set website configuration on a bucket" + } + ], + "PutObject": [ + { + "input": { + "Body": "filetoupload", + "Bucket": "examplebucket", + "Key": "objectkey" + }, + "output": { + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "VersionId": "Bvq0EDKxOcXLJXNo_Lkz37eM3R4pfzyQ" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates an object. If the bucket is versioning enabled, S3 returns version ID in response.", + "id": "to-create-an-object-1483147613675", + "title": "To create an object." + }, + { + "input": { + "Body": "HappyFace.jpg", + "Bucket": "examplebucket", + "Key": "HappyFace.jpg", + "ServerSideEncryption": "AES256", + "StorageClass": "STANDARD_IA" + }, + "output": { + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "ServerSideEncryption": "AES256", + "VersionId": "CG612hodqujkf8FaaNfp8U..FIhLROcp" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example uploads an object. The request specifies optional request headers to directs S3 to use specific storage class and use server-side encryption.", + "id": "to-upload-an-object-(specify-optional-headers)", + "title": "To upload an object (specify optional headers)" + }, + { + "input": { + "ACL": "authenticated-read", + "Body": "filetoupload", + "Bucket": "examplebucket", + "Key": "exampleobject" + }, + "output": { + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "VersionId": "Kirh.unyZwjQ69YxcQLA8z4F5j3kJJKr" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example uploads and object. The request specifies optional canned ACL (access control list) to all READ access to authenticated users. If the bucket is versioning enabled, S3 returns version ID in response.", + "id": "to-upload-an-object-and-specify-canned-acl-1483397779571", + "title": "To upload an object and specify canned ACL." + }, + { + "input": { + "Body": "HappyFace.jpg", + "Bucket": "examplebucket", + "Key": "HappyFace.jpg" + }, + "output": { + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "VersionId": "tpf3zF08nBplQK1XLOefGskR7mGDwcDk" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example uploads an object to a versioning-enabled bucket. The source file is specified using Windows file syntax. S3 returns VersionId of the newly created object.", + "id": "to-upload-an-object-1481760101010", + "title": "To upload an object" + }, + { + "input": { + "Body": "filetoupload", + "Bucket": "examplebucket", + "Key": "exampleobject", + "Metadata": { + "metadata1": "value1", + "metadata2": "value2" + } + }, + "output": { + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "VersionId": "pSKidl4pHBiNwukdbcPXAIs.sshFFOc0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates an object. The request also specifies optional metadata. If the bucket is versioning enabled, S3 returns version ID in response.", + "id": "to-upload-object-and-specify-user-defined-metadata-1483396974757", + "title": "To upload object and specify user-defined metadata" + }, + { + "input": { + "Body": "c:\\HappyFace.jpg", + "Bucket": "examplebucket", + "Key": "HappyFace.jpg", + "Tagging": "key1=value1&key2=value2" + }, + "output": { + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "VersionId": "psM2sYY4.o1501dSx8wMvnkOzSBB.V4a" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example uploads an object. The request specifies optional object tags. The bucket is versioned, therefore S3 returns version ID of the newly created object.", + "id": "to-upload-an-object-and-specify-optional-tags-1481762310955", + "title": "To upload an object and specify optional tags" + }, + { + "input": { + "Body": "filetoupload", + "Bucket": "examplebucket", + "Key": "exampleobject", + "ServerSideEncryption": "AES256", + "Tagging": "key1=value1&key2=value2" + }, + "output": { + "ETag": "\"6805f2cfc46c0f04559748bb039d69ae\"", + "ServerSideEncryption": "AES256", + "VersionId": "Ri.vC6qVlA4dEnjgRV4ZHsHoFIjqEMNt" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example uploads and object. The request specifies the optional server-side encryption option. The request also specifies optional object tags. If the bucket is versioning enabled, S3 returns version ID in response.", + "id": "to-upload-an-object-and-specify-server-side-encryption-and-object-tags-1483398331831", + "title": "To upload an object and specify server-side encryption and object tags" + } + ], + "PutObjectAcl": [ + { + "input": { + "AccessControlPolicy": { + }, + "Bucket": "examplebucket", + "GrantFullControl": "emailaddress=user1@example.com,emailaddress=user2@example.com", + "GrantRead": "uri=http://acs.amazonaws.com/groups/global/AllUsers", + "Key": "HappyFace.jpg" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example adds grants to an object ACL. The first permission grants user1 and user2 FULL_CONTROL and the AllUsers group READ permission.", + "id": "to-grant-permissions-using-object-acl-1481835549285", + "title": "To grant permissions using object ACL" + } + ], + "PutObjectTagging": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "HappyFace.jpg", + "Tagging": { + "TagSet": [ + { + "Key": "Key3", + "Value": "Value3" + }, + { + "Key": "Key4", + "Value": "Value4" + } + ] + } + }, + "output": { + "VersionId": "null" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example adds tags to an existing object.", + "id": "to-add-tags-to-an-existing-object-1481764668793", + "title": "To add tags to an existing object" + } + ], + "RestoreObject": [ + { + "input": { + "Bucket": "examplebucket", + "Key": "archivedobjectkey", + "RestoreRequest": { + "Days": 1, + "GlacierJobParameters": { + "Tier": "Expedited" + } + } + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example restores for one day an archived copy of an object back into Amazon S3 bucket.", + "id": "to-restore-an-archived-object-1483049329953", + "title": "To restore an archived object" + } + ], + "UploadPart": [ + { + "input": { + "Body": "fileToUpload", + "Bucket": "examplebucket", + "Key": "examplelargeobject", + "PartNumber": "1", + "UploadId": "xadcOB_7YPBOJuoFiQ9cz4P3Pe6FIZwO4f7wN93uHsNBEw97pl5eNwzExg0LAT2dUN91cOmrEQHDsP3WA60CEg--" + }, + "output": { + "ETag": "\"d8c2eafd90c266e19ab9dcacc479f8af\"" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example uploads part 1 of a multipart upload. The example specifies a file name for the part data. The Upload ID is same that is returned by the initiate multipart upload.", + "id": "to-upload-a-part-1481847914943", + "title": "To upload a part" + } + ], + "UploadPartCopy": [ + { + "input": { + "Bucket": "examplebucket", + "CopySource": "/bucketname/sourceobjectkey", + "Key": "examplelargeobject", + "PartNumber": "1", + "UploadId": "exampleuoh_10OhKhT7YukE9bjzTPRiuaCotmZM_pFngJFir9OZNrSr5cWa3cq3LZSUsfjI4FI7PkP91We7Nrw--" + }, + "output": { + "CopyPartResult": { + "ETag": "\"b0c6f0e7e054ab8fa2536a2677f8734d\"", + "LastModified": "2016-12-29T21:24:43.000Z" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example uploads a part of a multipart upload by copying data from an existing object as data source.", + "id": "to-upload-a-part-by-copying-data-from-an-existing-object-as-data-source-1483046746348", + "title": "To upload a part by copying data from an existing object as data source" + }, + { + "input": { + "Bucket": "examplebucket", + "CopySource": "/bucketname/sourceobjectkey", + "CopySourceRange": "bytes=1-100000", + "Key": "examplelargeobject", + "PartNumber": "2", + "UploadId": "exampleuoh_10OhKhT7YukE9bjzTPRiuaCotmZM_pFngJFir9OZNrSr5cWa3cq3LZSUsfjI4FI7PkP91We7Nrw--" + }, + "output": { + "CopyPartResult": { + "ETag": "\"65d16d19e65a7508a51f043180edcc36\"", + "LastModified": "2016-12-29T21:44:28.000Z" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example uploads a part of a multipart upload by copying a specified byte range from an existing object as data source.", + "id": "to-upload-a-part-by-copying-byte-range-from-an-existing-object-as-data-source-1483048068594", + "title": "To upload a part by copying byte range from an existing object as data source" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/paginators-1.json new file mode 100644 index 00000000..15bc1131 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/paginators-1.json @@ -0,0 +1,70 @@ +{ + "pagination": { + "ListMultipartUploads": { + "limit_key": "MaxUploads", + "more_results": "IsTruncated", + "output_token": [ + "NextKeyMarker", + "NextUploadIdMarker" + ], + "input_token": [ + "KeyMarker", + "UploadIdMarker" + ], + "result_key": [ + "Uploads", + "CommonPrefixes" + ] + }, + "ListObjectVersions": { + "more_results": "IsTruncated", + "limit_key": "MaxKeys", + "output_token": [ + "NextKeyMarker", + "NextVersionIdMarker" + ], + "input_token": [ + "KeyMarker", + "VersionIdMarker" + ], + "result_key": [ + "Versions", + "DeleteMarkers", + "CommonPrefixes" + ] + }, + "ListObjects": { + "more_results": "IsTruncated", + "limit_key": "MaxKeys", + "output_token": "NextMarker || Contents[-1].Key", + "input_token": "Marker", + "result_key": [ + "Contents", + "CommonPrefixes" + ] + }, + "ListObjectsV2": { + "more_results": "IsTruncated", + "limit_key": "MaxKeys", + "output_token": "NextContinuationToken", + "input_token": "ContinuationToken", + "result_key": [ + "Contents", + "CommonPrefixes" + ] + }, + "ListParts": { + "more_results": "IsTruncated", + "limit_key": "MaxParts", + "output_token": "NextPartNumberMarker", + "input_token": "PartNumberMarker", + "result_key": "Parts" + }, + "ListDirectoryBuckets": { + "input_token": "ContinuationToken", + "limit_key": "MaxDirectoryBuckets", + "output_token": "ContinuationToken", + "result_key": "Buckets" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/paginators-1.sdk-extras.json new file mode 100644 index 00000000..67a92132 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/paginators-1.sdk-extras.json @@ -0,0 +1,35 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "ListMultipartUploads": { + "non_aggregate_keys": [ + "RequestCharged" + ] + }, + "ListObjectVersions": { + "non_aggregate_keys": [ + "RequestCharged" + ] + }, + "ListObjects": { + "non_aggregate_keys": [ + "RequestCharged" + ] + }, + "ListObjectsV2": { + "non_aggregate_keys": [ + "RequestCharged" + ] + }, + "ListParts": { + "non_aggregate_keys": [ + "ChecksumAlgorithm", + "Initiator", + "Owner", + "StorageClass" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/service-2.json.gz new file mode 100644 index 00000000..e0968a82 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/waiters-2.json new file mode 100644 index 00000000..b508a8f5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/s3/2006-03-01/waiters-2.json @@ -0,0 +1,73 @@ +{ + "version": 2, + "waiters": { + "BucketExists": { + "delay": 5, + "operation": "HeadBucket", + "maxAttempts": 20, + "acceptors": [ + { + "expected": 200, + "matcher": "status", + "state": "success" + }, + { + "expected": 301, + "matcher": "status", + "state": "success" + }, + { + "expected": 403, + "matcher": "status", + "state": "success" + }, + { + "expected": 404, + "matcher": "status", + "state": "retry" + } + ] + }, + "BucketNotExists": { + "delay": 5, + "operation": "HeadBucket", + "maxAttempts": 20, + "acceptors": [ + { + "expected": 404, + "matcher": "status", + "state": "success" + } + ] + }, + "ObjectExists": { + "delay": 5, + "operation": "HeadObject", + "maxAttempts": 20, + "acceptors": [ + { + "expected": 200, + "matcher": "status", + "state": "success" + }, + { + "expected": 404, + "matcher": "status", + "state": "retry" + } + ] + }, + "ObjectNotExists": { + "delay": 5, + "operation": "HeadObject", + "maxAttempts": 20, + "acceptors": [ + { + "expected": 404, + "matcher": "status", + "state": "success" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c6a19265 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/paginators-1.json new file mode 100644 index 00000000..873eb23b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListAccessPointsForObjectLambda": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ObjectLambdaAccessPointList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/service-2.json.gz new file mode 100644 index 00000000..092c3b9e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/s3control/2018-08-20/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..22da8c49 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/paginators-1.json new file mode 100644 index 00000000..5a8fa86c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListEndpoints": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Endpoints" + }, + "ListSharedEndpoints": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Endpoints" + }, + "ListOutpostsWithS3": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Outposts" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/service-2.json.gz new file mode 100644 index 00000000..d36fb143 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/s3outposts/2017-07-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4fc03051 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/paginators-1.json new file mode 100644 index 00000000..b19128c2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListHumanLoops": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "HumanLoopSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/service-2.json.gz new file mode 100644 index 00000000..1ab10c5f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-a2i-runtime/2019-11-07/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a54cf6d6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/service-2.json.gz new file mode 100644 index 00000000..64123b9d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-edge/2020-09-23/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..fdba69bf Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/service-2.json.gz new file mode 100644 index 00000000..7bed3b1a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-featurestore-runtime/2020-07-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-geospatial/2020-05-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-geospatial/2020-05-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a101e05a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-geospatial/2020-05-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-geospatial/2020-05-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-geospatial/2020-05-27/paginators-1.json new file mode 100644 index 00000000..8802d943 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-geospatial/2020-05-27/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListEarthObservationJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "EarthObservationJobSummaries" + }, + "ListRasterDataCollections": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "RasterDataCollectionSummaries" + }, + "ListVectorEnrichmentJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "VectorEnrichmentJobSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-geospatial/2020-05-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-geospatial/2020-05-27/service-2.json.gz new file mode 100644 index 00000000..73ad56db Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-geospatial/2020-05-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-metrics/2022-09-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-metrics/2022-09-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..44376d55 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-metrics/2022-09-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-metrics/2022-09-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-metrics/2022-09-30/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-metrics/2022-09-30/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-metrics/2022-09-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-metrics/2022-09-30/service-2.json.gz new file mode 100644 index 00000000..474c928e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-metrics/2022-09-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..41c3bce7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/service-2.json.gz new file mode 100644 index 00000000..7da5b6d3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker-runtime/2017-05-13/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8d16947a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/paginators-1.json new file mode 100644 index 00000000..95b87ccd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/paginators-1.json @@ -0,0 +1,436 @@ +{ + "pagination": { + "ListTrainingJobs": { + "result_key": "TrainingJobSummaries", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListEndpoints": { + "result_key": "Endpoints", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListEndpointConfigs": { + "result_key": "EndpointConfigs", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListNotebookInstances": { + "result_key": "NotebookInstances", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListTags": { + "result_key": "Tags", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListModels": { + "result_key": "Models", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListAlgorithms": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AlgorithmSummaryList" + }, + "ListCodeRepositories": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CodeRepositorySummaryList" + }, + "ListCompilationJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CompilationJobSummaries" + }, + "ListHyperParameterTuningJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "HyperParameterTuningJobSummaries" + }, + "ListLabelingJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LabelingJobSummaryList" + }, + "ListLabelingJobsForWorkteam": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LabelingJobSummaryList" + }, + "ListModelPackages": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ModelPackageSummaryList" + }, + "ListNotebookInstanceLifecycleConfigs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "NotebookInstanceLifecycleConfigs" + }, + "ListSubscribedWorkteams": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SubscribedWorkteams" + }, + "ListTrainingJobsForHyperParameterTuningJob": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TrainingJobSummaries" + }, + "ListTransformJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TransformJobSummaries" + }, + "ListWorkteams": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Workteams" + }, + "Search": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Results" + }, + "ListApps": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Apps" + }, + "ListAutoMLJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AutoMLJobSummaries" + }, + "ListCandidatesForAutoMLJob": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Candidates" + }, + "ListDomains": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Domains" + }, + "ListExperiments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ExperimentSummaries" + }, + "ListFlowDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FlowDefinitionSummaries" + }, + "ListHumanTaskUis": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "HumanTaskUiSummaries" + }, + "ListMonitoringExecutions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "MonitoringExecutionSummaries" + }, + "ListMonitoringSchedules": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "MonitoringScheduleSummaries" + }, + "ListProcessingJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ProcessingJobSummaries" + }, + "ListTrialComponents": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "TrialComponentSummaries" + }, + "ListTrials": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "TrialSummaries" + }, + "ListUserProfiles": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "UserProfiles" + }, + "ListWorkforces": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Workforces" + }, + "ListImageVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ImageVersions" + }, + "ListImages": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Images" + }, + "ListActions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ActionSummaries" + }, + "ListAppImageConfigs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AppImageConfigs" + }, + "ListArtifacts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ArtifactSummaries" + }, + "ListAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AssociationSummaries" + }, + "ListContexts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ContextSummaries" + }, + "ListFeatureGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FeatureGroupSummaries" + }, + "ListModelPackageGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ModelPackageGroupSummaryList" + }, + "ListPipelineExecutionSteps": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "PipelineExecutionSteps" + }, + "ListPipelineExecutions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "PipelineExecutionSummaries" + }, + "ListPipelineParametersForExecution": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "PipelineParameters" + }, + "ListPipelines": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "PipelineSummaries" + }, + "ListDataQualityJobDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "JobDefinitionSummaries" + }, + "ListDeviceFleets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DeviceFleetSummaries" + }, + "ListDevices": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DeviceSummaries" + }, + "ListEdgePackagingJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "EdgePackagingJobSummaries" + }, + "ListModelBiasJobDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "JobDefinitionSummaries" + }, + "ListModelExplainabilityJobDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "JobDefinitionSummaries" + }, + "ListModelQualityJobDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "JobDefinitionSummaries" + }, + "ListStudioLifecycleConfigs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "StudioLifecycleConfigs" + }, + "ListInferenceRecommendationsJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InferenceRecommendationsJobs" + }, + "ListLineageGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "LineageGroupSummaries" + }, + "ListModelMetadata": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ModelMetadataSummaries" + }, + "ListEdgeDeploymentPlans": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "EdgeDeploymentPlanSummaries" + }, + "ListStageDevices": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DeviceDeploymentSummaries" + }, + "ListInferenceRecommendationsJobSteps": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Steps" + }, + "ListInferenceExperiments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InferenceExperiments" + }, + "ListModelCardExportJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ModelCardExportJobSummaries" + }, + "ListModelCardVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ModelCardVersionSummaryList" + }, + "ListModelCards": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ModelCardSummaries" + }, + "ListMonitoringAlertHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "MonitoringAlertHistory" + }, + "ListMonitoringAlerts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "MonitoringAlertSummaries" + }, + "ListSpaces": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Spaces" + }, + "ListAliases": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SageMakerImageVersionAliases" + }, + "ListResourceCatalogs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ResourceCatalogs" + }, + "ListClusterNodes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ClusterNodeSummaries" + }, + "ListClusters": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ClusterSummaries" + }, + "ListInferenceComponents": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InferenceComponents" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/service-2.json.gz new file mode 100644 index 00000000..497bebb4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/waiters-2.json new file mode 100644 index 00000000..8677924d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sagemaker/2017-07-24/waiters-2.json @@ -0,0 +1,311 @@ +{ + "version": 2, + "waiters": { + "NotebookInstanceInService": { + "delay": 30, + "maxAttempts": 60, + "operation": "DescribeNotebookInstance", + "acceptors": [ + { + "expected": "InService", + "matcher": "path", + "state": "success", + "argument": "NotebookInstanceStatus" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "NotebookInstanceStatus" + } + ] + }, + "NotebookInstanceStopped": { + "delay": 30, + "operation": "DescribeNotebookInstance", + "maxAttempts": 60, + "acceptors": [ + { + "expected": "Stopped", + "matcher": "path", + "state": "success", + "argument": "NotebookInstanceStatus" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "NotebookInstanceStatus" + } + ] + }, + "NotebookInstanceDeleted": { + "delay": 30, + "maxAttempts": 60, + "operation": "DescribeNotebookInstance", + "acceptors": [ + { + "expected": "ValidationException", + "matcher": "error", + "state": "success" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "NotebookInstanceStatus" + } + ] + }, + "TrainingJobCompletedOrStopped": { + "delay": 120, + "maxAttempts": 180, + "operation": "DescribeTrainingJob", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "TrainingJobStatus" + }, + { + "expected": "Stopped", + "matcher": "path", + "state": "success", + "argument": "TrainingJobStatus" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "TrainingJobStatus" + }, + { + "expected": "ValidationException", + "matcher": "error", + "state": "failure" + } + ] + }, + "EndpointInService": { + "delay": 30, + "maxAttempts": 120, + "operation": "DescribeEndpoint", + "acceptors": [ + { + "expected": "InService", + "matcher": "path", + "state": "success", + "argument": "EndpointStatus" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "EndpointStatus" + }, + { + "expected": "ValidationException", + "matcher": "error", + "state": "failure" + } + ] + }, + "EndpointDeleted": { + "delay": 30, + "maxAttempts": 60, + "operation": "DescribeEndpoint", + "acceptors": [ + { + "expected": "ValidationException", + "matcher": "error", + "state": "success" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "EndpointStatus" + } + ] + }, + "TransformJobCompletedOrStopped": { + "delay": 60, + "maxAttempts": 60, + "operation": "DescribeTransformJob", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "TransformJobStatus" + }, + { + "expected": "Stopped", + "matcher": "path", + "state": "success", + "argument": "TransformJobStatus" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "TransformJobStatus" + }, + { + "expected": "ValidationException", + "matcher": "error", + "state": "failure" + } + ] + }, + "ProcessingJobCompletedOrStopped": { + "delay": 60, + "maxAttempts": 60, + "operation": "DescribeProcessingJob", + "acceptors": [ + { + "expected": "Completed", + "matcher": "path", + "state": "success", + "argument": "ProcessingJobStatus" + }, + { + "expected": "Stopped", + "matcher": "path", + "state": "success", + "argument": "ProcessingJobStatus" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "ProcessingJobStatus" + }, + { + "expected": "ValidationException", + "matcher": "error", + "state": "failure" + } + ] + }, + "ImageCreated": { + "delay": 60, + "maxAttempts": 60, + "operation": "DescribeImage", + "acceptors": [ + { + "expected": "CREATED", + "matcher": "path", + "state": "success", + "argument": "ImageStatus" + }, + { + "expected": "CREATE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "ImageStatus" + }, + { + "expected": "ValidationException", + "matcher": "error", + "state": "failure" + } + ] + }, + "ImageUpdated": { + "delay": 60, + "maxAttempts": 60, + "operation": "DescribeImage", + "acceptors": [ + { + "expected": "CREATED", + "matcher": "path", + "state": "success", + "argument": "ImageStatus" + }, + { + "expected": "UPDATE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "ImageStatus" + }, + { + "expected": "ValidationException", + "matcher": "error", + "state": "failure" + } + ] + }, + "ImageDeleted": { + "delay": 60, + "maxAttempts": 60, + "operation": "DescribeImage", + "acceptors": [ + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "success" + }, + { + "expected": "DELETE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "ImageStatus" + }, + { + "expected": "ValidationException", + "matcher": "error", + "state": "failure" + } + ] + }, + "ImageVersionCreated": { + "delay": 60, + "maxAttempts": 60, + "operation": "DescribeImageVersion", + "acceptors": [ + { + "expected": "CREATED", + "matcher": "path", + "state": "success", + "argument": "ImageVersionStatus" + }, + { + "expected": "CREATE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "ImageVersionStatus" + }, + { + "expected": "ValidationException", + "matcher": "error", + "state": "failure" + } + ] + }, + "ImageVersionDeleted": { + "delay": 60, + "maxAttempts": 60, + "operation": "DescribeImageVersion", + "acceptors": [ + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "success" + }, + { + "expected": "DELETE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "ImageVersionStatus" + }, + { + "expected": "ValidationException", + "matcher": "error", + "state": "failure" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c6fd48c4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/service-2.json.gz new file mode 100644 index 00000000..b90f4ab4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/savingsplans/2019-06-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/scheduler/2021-06-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/scheduler/2021-06-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d315d597 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/scheduler/2021-06-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/scheduler/2021-06-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/scheduler/2021-06-30/paginators-1.json new file mode 100644 index 00000000..93b98ee2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/scheduler/2021-06-30/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListScheduleGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ScheduleGroups" + }, + "ListSchedules": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Schedules" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/scheduler/2021-06-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/scheduler/2021-06-30/service-2.json.gz new file mode 100644 index 00000000..32ef6252 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/scheduler/2021-06-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..501dae6f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/paginators-1.json new file mode 100644 index 00000000..ef2fe19d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListDiscoverers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "Discoverers" + }, + "ListRegistries": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "Registries" + }, + "ListSchemaVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "SchemaVersions" + }, + "ListSchemas": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "Schemas" + }, + "SearchSchemas": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "Limit", + "result_key": "Schemas" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/service-2.json.gz new file mode 100644 index 00000000..9c2b116e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/waiters-2.json new file mode 100644 index 00000000..4f642f61 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/schemas/2019-12-02/waiters-2.json @@ -0,0 +1,36 @@ +{ + "version": 2, + "waiters": { + "CodeBindingExists": { + "description": "Wait until code binding is generated", + "delay": 2, + "operation": "DescribeCodeBinding", + "maxAttempts": 30, + "acceptors": [ + { + "expected": "CREATE_COMPLETE", + "matcher": "path", + "state": "success", + "argument": "Status" + }, + { + "expected": "CREATE_IN_PROGRESS", + "matcher": "path", + "state": "retry", + "argument": "Status" + }, + { + "expected": "CREATE_FAILED", + "matcher": "path", + "state": "failure", + "argument": "Status" + }, + { + "matcher": "error", + "expected": "NotFoundException", + "state": "failure" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sdb/2009-04-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sdb/2009-04-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c6cf9764 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sdb/2009-04-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sdb/2009-04-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sdb/2009-04-15/paginators-1.json new file mode 100644 index 00000000..23620988 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sdb/2009-04-15/paginators-1.json @@ -0,0 +1,15 @@ +{ + "pagination": { + "ListDomains": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxNumberOfDomains", + "result_key": "DomainNames" + }, + "Select": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sdb/2009-04-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sdb/2009-04-15/service-2.json.gz new file mode 100644 index 00000000..5c4f03cf Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sdb/2009-04-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sdk-default-configuration.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sdk-default-configuration.json new file mode 100644 index 00000000..3db13b26 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sdk-default-configuration.json @@ -0,0 +1,55 @@ +{ + "version": 1, + "base": { + "retryMode": "standard", + "stsRegionalEndpoints": "regional", + "s3UsEast1RegionalEndpoints": "regional", + "connectTimeoutInMillis": 1100, + "tlsNegotiationTimeoutInMillis": 1100 + }, + "modes": { + "standard": { + "connectTimeoutInMillis": { + "override": 3100 + }, + "tlsNegotiationTimeoutInMillis": { + "override": 3100 + } + }, + "in-region": { + }, + "cross-region": { + "connectTimeoutInMillis": { + "override": 3100 + }, + "tlsNegotiationTimeoutInMillis": { + "override": 3100 + } + }, + "mobile": { + "connectTimeoutInMillis": { + "override": 30000 + }, + "tlsNegotiationTimeoutInMillis": { + "override": 30000 + } + } + }, + "documentation": { + "modes": { + "standard": "

The STANDARD mode provides the latest recommended default values that should be safe to run in most scenarios

Note that the default values vended from this mode might change as best practices may evolve. As a result, it is encouraged to perform tests when upgrading the SDK

", + "in-region": "

The IN_REGION mode builds on the standard mode and includes optimization tailored for applications which call AWS services from within the same AWS region

Note that the default values vended from this mode might change as best practices may evolve. As a result, it is encouraged to perform tests when upgrading the SDK

", + "cross-region": "

The CROSS_REGION mode builds on the standard mode and includes optimization tailored for applications which call AWS services in a different region

Note that the default values vended from this mode might change as best practices may evolve. As a result, it is encouraged to perform tests when upgrading the SDK

", + "mobile": "

The MOBILE mode builds on the standard mode and includes optimization tailored for mobile applications

Note that the default values vended from this mode might change as best practices may evolve. As a result, it is encouraged to perform tests when upgrading the SDK

", + "auto": "

The AUTO mode is an experimental mode that builds on the standard mode. The SDK will attempt to discover the execution environment to determine the appropriate settings automatically.

Note that the auto detection is heuristics-based and does not guarantee 100% accuracy. STANDARD mode will be used if the execution environment cannot be determined. The auto detection might query EC2 Instance Metadata service, which might introduce latency. Therefore we recommend choosing an explicit defaults_mode instead if startup latency is critical to your application

", + "legacy": "

The LEGACY mode provides default settings that vary per SDK and were used prior to establishment of defaults_mode

" + }, + "configuration": { + "retryMode": "

A retry mode specifies how the SDK attempts retries. See Retry Mode

", + "stsRegionalEndpoints": "

Specifies how the SDK determines the AWS service endpoint that it uses to talk to the AWS Security Token Service (AWS STS). See Setting STS Regional endpoints

", + "s3UsEast1RegionalEndpoints": "

Specifies how the SDK determines the AWS service endpoint that it uses to talk to the Amazon S3 for the us-east-1 region

", + "connectTimeoutInMillis": "

The amount of time after making an initial connection attempt on a socket, where if the client does not receive a completion of the connect handshake, the client gives up and fails the operation

", + "tlsNegotiationTimeoutInMillis": "

The maximum amount of time that a TLS handshake is allowed to take from the time the CLIENT HELLO message is sent to ethe time the client and server have fully negotiated ciphers and exchanged keys

" + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0f8d664a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/examples-1.json new file mode 100644 index 00000000..43a3ec4f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/examples-1.json @@ -0,0 +1,596 @@ +{ + "version": "1.0", + "examples": { + "CancelRotateSecret": [ + { + "input": { + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "Name" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to cancel rotation for a secret. The operation sets the RotationEnabled field to false and cancels all scheduled rotations. To resume scheduled rotations, you must re-enable rotation by calling the rotate-secret operation.", + "id": "to-cancel-scheduled-rotation-for-a-secret-1523996016032", + "title": "To cancel scheduled rotation for a secret" + } + ], + "CreateSecret": [ + { + "input": { + "ClientRequestToken": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1", + "Description": "My test database secret created with the CLI", + "Name": "MyTestDatabaseSecret", + "SecretString": "{\"username\":\"david\",\"password\":\"EXAMPLE-PASSWORD\"}" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret", + "VersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to create a secret. The credentials stored in the encrypted secret value are retrieved from a file on disk named mycreds.json.", + "id": "to-create-a-basic-secret-1523996473658", + "title": "To create a basic secret" + } + ], + "DeleteResourcePolicy": [ + { + "input": { + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseMasterSecret-a1b2c3", + "Name": "MyTestDatabaseSecret" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to delete the resource-based policy that is attached to a secret.", + "id": "to-delete-the-resource-based-policy-attached-to-a-secret-1530209419204", + "title": "To delete the resource-based policy attached to a secret" + } + ], + "DeleteSecret": [ + { + "input": { + "RecoveryWindowInDays": 7, + "SecretId": "MyTestDatabaseSecret1" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "DeletionDate": "1524085349.095", + "Name": "MyTestDatabaseSecret" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to delete a secret. The secret stays in your account in a deprecated and inaccessible state until the recovery window ends. After the date and time in the DeletionDate response field has passed, you can no longer recover this secret with restore-secret.", + "id": "to-delete-a-secret-1523996905092", + "title": "To delete a secret" + } + ], + "DescribeSecret": [ + { + "input": { + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Description": "My test database secret", + "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987KMSKEY1", + "LastAccessedDate": "1523923200", + "LastChangedDate": 1523477145.729, + "LastRotatedDate": 1525747253.72, + "Name": "MyTestDatabaseSecret", + "RotationEnabled": true, + "RotationLambdaARN": "arn:aws:lambda:us-west-2:123456789012:function:MyTestRotationLambda", + "RotationRules": { + "AutomaticallyAfterDays": 14, + "Duration": "2h", + "ScheduleExpression": "cron(0 16 1,15 * ? *)" + }, + "Tags": [ + { + "Key": "SecondTag", + "Value": "AnotherValue" + }, + { + "Key": "FirstTag", + "Value": "SomeValue" + } + ], + "VersionIdsToStages": { + "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE": [ + "AWSPREVIOUS" + ], + "EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE": [ + "AWSCURRENT" + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to get the details about a secret.", + "id": "to-retrieve-the-details-of-a-secret-1524000138629", + "title": "To retrieve the details of a secret" + } + ], + "GetRandomPassword": [ + { + "input": { + "IncludeSpace": true, + "PasswordLength": 20, + "RequireEachIncludedType": true + }, + "output": { + "RandomPassword": "EXAMPLE-PASSWORD" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to request a randomly generated password. This example includes the optional flags to require spaces and at least one character of each included type. It specifies a length of 20 characters.", + "id": "to-generate-a-random-password-1524000546092", + "title": "To generate a random password" + } + ], + "GetResourcePolicy": [ + { + "input": { + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret", + "ResourcePolicy": "{\n\"Version\":\"2012-10-17\",\n\"Statement\":[{\n\"Effect\":\"Allow\",\n\"Principal\":{\n\"AWS\":\"arn:aws:iam::123456789012:root\"\n},\n\"Action\":\"secretsmanager:GetSecretValue\",\n\"Resource\":\"*\"\n}]\n}" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to retrieve the resource-based policy that is attached to a secret.", + "id": "to-retrieve-the-resource-based-policy-attached-to-a-secret-1530209677536", + "title": "To retrieve the resource-based policy attached to a secret" + } + ], + "GetSecretValue": [ + { + "input": { + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "CreatedDate": 1523477145.713, + "Name": "MyTestDatabaseSecret", + "SecretString": "{\n \"username\":\"david\",\n \"password\":\"EXAMPLE-PASSWORD\"\n}\n", + "VersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1", + "VersionStages": [ + "AWSPREVIOUS" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to retrieve a secret string value.", + "id": "to-retrieve-the-encrypted-secret-value-of-a-secret-1524000702484", + "title": "To retrieve the encrypted secret value of a secret" + } + ], + "ListSecretVersionIds": [ + { + "input": { + "IncludeDeprecated": true, + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret", + "Versions": [ + { + "CreatedDate": 1523477145.713, + "VersionId": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE", + "VersionStages": [ + "AWSPREVIOUS" + ] + }, + { + "CreatedDate": 1523486221.391, + "VersionId": "EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", + "VersionStages": [ + "AWSCURRENT" + ] + }, + { + "CreatedDate": 1511974462.36, + "VersionId": "EXAMPLE3-90ab-cdef-fedc-ba987EXAMPLE;" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to retrieve a list of all of the versions of a secret, including those without any staging labels.", + "id": "to-list-all-of-the-secret-versions-associated-with-a-secret-1524000999164", + "title": "To list all of the secret versions associated with a secret" + } + ], + "ListSecrets": [ + { + "input": { + }, + "output": { + "SecretList": [ + { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Description": "My test database secret", + "LastChangedDate": 1523477145.729, + "Name": "MyTestDatabaseSecret", + "SecretVersionsToStages": { + "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE": [ + "AWSCURRENT" + ] + } + }, + { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret1-d4e5f6", + "Description": "Another secret created for a different database", + "LastChangedDate": 1523482025.685, + "Name": "MyTestDatabaseSecret1", + "SecretVersionsToStages": { + "EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE": [ + "AWSCURRENT" + ] + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to list all of the secrets in your account.", + "id": "to-list-the-secrets-in-your-account-1524001246087", + "title": "To list the secrets in your account" + } + ], + "PutResourcePolicy": [ + { + "input": { + "ResourcePolicy": "{\n\"Version\":\"2012-10-17\",\n\"Statement\":[{\n\"Effect\":\"Allow\",\n\"Principal\":{\n\"AWS\":\"arn:aws:iam::123456789012:root\"\n},\n\"Action\":\"secretsmanager:GetSecretValue\",\n\"Resource\":\"*\"\n}]\n}", + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to add a resource-based policy to a secret.", + "id": "to-add-a-resource-based-policy-to-a-secret-1530209881839", + "title": "To add a resource-based policy to a secret" + } + ], + "PutSecretValue": [ + { + "input": { + "ClientRequestToken": "EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", + "SecretId": "MyTestDatabaseSecret", + "SecretString": "{\"username\":\"david\",\"password\":\"EXAMPLE-PASSWORD\"}" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret", + "VersionId": "EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", + "VersionStages": [ + "AWSCURRENT" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to create a new version of the secret. Alternatively, you can use the update-secret command.", + "id": "to-store-a-secret-value-in-a-new-version-of-a-secret-1524001393971", + "title": "To store a secret value in a new version of a secret" + } + ], + "RestoreSecret": [ + { + "input": { + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to restore a secret that you previously scheduled for deletion.", + "id": "to-restore-a-previously-deleted-secret-1524001513930", + "title": "To restore a previously deleted secret" + } + ], + "RotateSecret": [ + { + "input": { + "RotationLambdaARN": "arn:aws:lambda:us-west-2:123456789012:function:MyTestDatabaseRotationLambda", + "RotationRules": { + "Duration": "2h", + "ScheduleExpression": "cron(0 16 1,15 * ? *)" + }, + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret", + "VersionId": "EXAMPLE2-90ab-cdef-fedc-ba987SECRET2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example configures rotation for a secret using a cron expression. The first rotation happens immediately after the changes are stored in the secret. The rotation schedule is the first and 15th day of every month. The rotation window begins at 4:00 PM UTC and ends at 6:00 PM.", + "id": "to-configure-rotation-for-a-secret-1524001629475", + "title": "To configure rotation for a secret" + }, + { + "input": { + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret", + "VersionId": "EXAMPLE2-90ab-cdef-fedc-ba987SECRET2" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example requests an immediate invocation of the secret's Lambda rotation function. It assumes that the specified secret already has rotation configured. The rotation function runs asynchronously in the background.", + "id": "to-request-an-immediate-rotation-for-a-secret-1524001949004", + "title": "To request an immediate rotation for a secret" + } + ], + "TagResource": [ + { + "input": { + "SecretId": "MyExampleSecret", + "Tags": [ + { + "Key": "FirstTag", + "Value": "SomeValue" + }, + { + "Key": "SecondTag", + "Value": "AnotherValue" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to attach two tags each with a Key and Value to a secret. There is no output from this API. To see the result, use the DescribeSecret operation.", + "id": "to-add-tags-to-a-secret-1524002106718", + "title": "To add tags to a secret" + } + ], + "UntagResource": [ + { + "input": { + "SecretId": "MyTestDatabaseSecret", + "TagKeys": [ + "FirstTag", + "SecondTag" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to remove two tags from a secret's metadata. For each, both the tag and the associated value are removed. There is no output from this API. To see the result, use the DescribeSecret operation.", + "id": "to-remove-tags-from-a-secret-1524002239065", + "title": "To remove tags from a secret" + } + ], + "UpdateSecret": [ + { + "input": { + "ClientRequestToken": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE", + "Description": "This is a new description for the secret.", + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to modify the description of a secret.", + "id": "to-update-the-description-of-a-secret-1524002349094", + "title": "To update the description of a secret" + }, + { + "input": { + "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows how to update the KMS customer managed key (CMK) used to encrypt the secret value. The KMS CMK must be in the same region as the secret.", + "id": "to-update-the-kms-key-associated-with-a-secret-1524002421563", + "title": "To update the KMS key associated with a secret" + }, + { + "input": { + "SecretId": "MyTestDatabaseSecret", + "SecretString": "{JSON STRING WITH CREDENTIALS}" + }, + "output": { + "ARN": "aws:arn:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret", + "VersionId": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to create a new version of the secret by updating the SecretString field. Alternatively, you can use the put-secret-value operation.", + "id": "to-create-a-new-version-of-the-encrypted-secret-value-1524004651836", + "title": "To create a new version of the encrypted secret value" + } + ], + "UpdateSecretVersionStage": [ + { + "input": { + "MoveToVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1", + "SecretId": "MyTestDatabaseSecret", + "VersionStage": "STAGINGLABEL1" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows you how to add a staging label to a version of a secret. You can review the results by running the operation ListSecretVersionIds and viewing the VersionStages response field for the affected version.", + "id": "to-add-a-staging-label-attached-to-a-version-of-a-secret-1524004783841", + "title": "To add a staging label attached to a version of a secret" + }, + { + "input": { + "RemoveFromVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1", + "SecretId": "MyTestDatabaseSecret", + "VersionStage": "STAGINGLABEL1" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows you how to delete a staging label that is attached to a version of a secret. You can review the results by running the operation ListSecretVersionIds and viewing the VersionStages response field for the affected version.", + "id": "to-delete-a-staging-label-attached-to-a-version-of-a-secret-1524004862181", + "title": "To delete a staging label attached to a version of a secret" + }, + { + "input": { + "MoveToVersionId": "EXAMPLE2-90ab-cdef-fedc-ba987SECRET2", + "RemoveFromVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1", + "SecretId": "MyTestDatabaseSecret", + "VersionStage": "AWSCURRENT" + }, + "output": { + "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3", + "Name": "MyTestDatabaseSecret" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows you how to move a staging label that is attached to one version of a secret to a different version. You can review the results by running the operation ListSecretVersionIds and viewing the VersionStages response field for the affected version.", + "id": "to-move-a-staging-label-from-one-version-of-a-secret-to-another-1524004963841", + "title": "To move a staging label from one version of a secret to another" + } + ], + "ValidateResourcePolicy": [ + { + "input": { + "ResourcePolicy": "{\n\"Version\":\"2012-10-17\",\n\"Statement\":[{\n\"Effect\":\"Allow\",\n\"Principal\":{\n\"AWS\":\"arn:aws:iam::123456789012:root\"\n},\n\"Action\":\"secretsmanager:GetSecretValue\",\n\"Resource\":\"*\"\n}]\n}", + "SecretId": "MyTestDatabaseSecret" + }, + "output": { + "PolicyValidationPassed": true, + "ValidationErrors": [ + + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows how to validate a resource-based policy to a secret.", + "id": "to-validate-the-resource-policy-of-a-secret-1524000138629", + "title": "To validate a resource-based policy to a secret" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/paginators-1.json new file mode 100644 index 00000000..0f62e8e1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListSecrets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SecretList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/service-2.json.gz new file mode 100644 index 00000000..1eb2d16e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/service-2.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/service-2.sdk-extras.json new file mode 100644 index 00000000..dc78f892 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/secretsmanager/2017-10-17/service-2.sdk-extras.json @@ -0,0 +1,8 @@ +{ + "version": 1.0, + "merge": { + "metadata": { + "serviceId": "Secrets Manager" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d3c0ef52 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/paginators-1.json new file mode 100644 index 00000000..7fae041f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/paginators-1.json @@ -0,0 +1,106 @@ +{ + "pagination": { + "GetEnabledStandards": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "StandardsSubscriptions" + }, + "GetFindings": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Findings" + }, + "GetInsights": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Insights" + }, + "ListEnabledProductsForImport": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ProductSubscriptions" + }, + "ListInvitations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Invitations" + }, + "ListMembers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Members" + }, + "DescribeActionTargets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ActionTargets" + }, + "DescribeProducts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Products" + }, + "DescribeStandards": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Standards" + }, + "DescribeStandardsControls": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Controls" + }, + "ListOrganizationAdminAccounts": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AdminAccounts" + }, + "ListFindingAggregators": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FindingAggregators" + }, + "ListSecurityControlDefinitions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SecurityControlDefinitions" + }, + "ListStandardsControlAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "StandardsControlAssociationSummaries" + }, + "GetFindingHistory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Records" + }, + "ListConfigurationPolicies": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ConfigurationPolicySummaries" + }, + "ListConfigurationPolicyAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ConfigurationPolicyAssociationSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/service-2.json.gz new file mode 100644 index 00000000..01684634 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/securityhub/2018-10-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4ce4bc7f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/paginators-1.json new file mode 100644 index 00000000..19e482b2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "GetDataLakeSources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "dataLakeSources" + }, + "ListDataLakeExceptions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "exceptions" + }, + "ListLogSources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "sources" + }, + "ListSubscribers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "subscribers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/paginators-1.sdk-extras.json b/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/paginators-1.sdk-extras.json new file mode 100644 index 00000000..41ae7fe6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/paginators-1.sdk-extras.json @@ -0,0 +1,12 @@ +{ + "version": 1.0, + "merge": { + "pagination": { + "GetDataLakeSources": { + "non_aggregate_keys": [ + "dataLakeArn" + ] + } + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..5a1c957e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/securitylake/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/serverlessrepo/2017-09-08/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/serverlessrepo/2017-09-08/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c9f7aee0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/serverlessrepo/2017-09-08/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/serverlessrepo/2017-09-08/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/serverlessrepo/2017-09-08/paginators-1.json new file mode 100644 index 00000000..a39e5477 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/serverlessrepo/2017-09-08/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListApplicationDependencies": { + "input_token": "NextToken", + "limit_key": "MaxItems", + "output_token": "NextToken", + "result_key": "Dependencies" + }, + "ListApplicationVersions": { + "input_token": "NextToken", + "limit_key": "MaxItems", + "output_token": "NextToken", + "result_key": "Versions" + }, + "ListApplications": { + "input_token": "NextToken", + "limit_key": "MaxItems", + "output_token": "NextToken", + "result_key": "Applications" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/serverlessrepo/2017-09-08/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/serverlessrepo/2017-09-08/service-2.json.gz new file mode 100644 index 00000000..dd0ed817 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/serverlessrepo/2017-09-08/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5a7e94f3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/paginators-1.json new file mode 100644 index 00000000..e0d45476 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "ListAWSDefaultServiceQuotas": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Quotas" + }, + "ListRequestedServiceQuotaChangeHistory": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "RequestedQuotas" + }, + "ListRequestedServiceQuotaChangeHistoryByQuota": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "RequestedQuotas" + }, + "ListServiceQuotaIncreaseRequestsInTemplate": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ServiceQuotaIncreaseRequestInTemplateList" + }, + "ListServiceQuotas": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Quotas" + }, + "ListServices": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Services" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/service-2.json.gz new file mode 100644 index 00000000..019f71af Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/service-quotas/2019-06-24/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..065bfe3e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/paginators-1.json new file mode 100644 index 00000000..55281fb7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListApplications": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "applications" + }, + "ListAssociatedAttributeGroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "attributeGroups" + }, + "ListAssociatedResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "resources" + }, + "ListAttributeGroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "attributeGroups" + }, + "ListAttributeGroupsForApplication": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "attributeGroupsDetails" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/service-2.json.gz new file mode 100644 index 00000000..45c8c17f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog-appregistry/2020-06-24/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..7e68da38 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/paginators-1.json new file mode 100644 index 00000000..5770fefa --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/paginators-1.json @@ -0,0 +1,100 @@ +{ + "pagination": { + "SearchProductsAsAdmin": { + "result_key": "ProductViewDetails", + "output_token": "NextPageToken", + "input_token": "PageToken", + "limit_key": "PageSize" + }, + "ListAcceptedPortfolioShares": { + "result_key": "PortfolioDetails", + "output_token": "NextPageToken", + "input_token": "PageToken", + "limit_key": "PageSize" + }, + "ListPortfolios": { + "result_key": "PortfolioDetails", + "output_token": "NextPageToken", + "input_token": "PageToken", + "limit_key": "PageSize" + }, + "ListConstraintsForPortfolio": { + "result_key": "ConstraintDetails", + "output_token": "NextPageToken", + "input_token": "PageToken", + "limit_key": "PageSize" + }, + "ListLaunchPaths": { + "result_key": "LaunchPathSummaries", + "output_token": "NextPageToken", + "input_token": "PageToken", + "limit_key": "PageSize" + }, + "ListTagOptions": { + "result_key": "TagOptionDetails", + "output_token": "PageToken", + "input_token": "PageToken", + "limit_key": "PageSize" + }, + "ListPortfoliosForProduct": { + "result_key": "PortfolioDetails", + "output_token": "NextPageToken", + "input_token": "PageToken", + "limit_key": "PageSize" + }, + "ListPrincipalsForPortfolio": { + "result_key": "Principals", + "output_token": "NextPageToken", + "input_token": "PageToken", + "limit_key": "PageSize" + }, + "ListResourcesForTagOption": { + "result_key": "ResourceDetails", + "output_token": "PageToken", + "input_token": "PageToken", + "limit_key": "PageSize" + }, + "ListOrganizationPortfolioAccess": { + "input_token": "PageToken", + "limit_key": "PageSize", + "output_token": "NextPageToken", + "result_key": "OrganizationNodes" + }, + "ListProvisionedProductPlans": { + "input_token": "PageToken", + "limit_key": "PageSize", + "output_token": "NextPageToken", + "result_key": "ProvisionedProductPlans" + }, + "ListProvisioningArtifactsForServiceAction": { + "input_token": "PageToken", + "limit_key": "PageSize", + "output_token": "NextPageToken", + "result_key": "ProvisioningArtifactViews" + }, + "ListRecordHistory": { + "input_token": "PageToken", + "limit_key": "PageSize", + "output_token": "NextPageToken", + "result_key": "RecordDetails" + }, + "ListServiceActions": { + "input_token": "PageToken", + "limit_key": "PageSize", + "output_token": "NextPageToken", + "result_key": "ServiceActionSummaries" + }, + "ListServiceActionsForProvisioningArtifact": { + "input_token": "PageToken", + "limit_key": "PageSize", + "output_token": "NextPageToken", + "result_key": "ServiceActionSummaries" + }, + "ScanProvisionedProducts": { + "input_token": "PageToken", + "limit_key": "PageSize", + "output_token": "NextPageToken", + "result_key": "ProvisionedProducts" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/service-2.json.gz new file mode 100644 index 00000000..7f9bc624 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/servicecatalog/2015-12-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..dc2b9f02 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/examples-1.json new file mode 100644 index 00000000..cc99fe4c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/examples-1.json @@ -0,0 +1,672 @@ +{ + "version": "1.0", + "examples": { + "CreateHttpNamespace": [ + { + "input": { + "CreatorRequestId": "example-creator-request-id-0001", + "Description": "Example.com AWS Cloud Map HTTP Namespace", + "Name": "example-http.com" + }, + "output": { + "OperationId": "httpvoqozuhfet5kzxoxg-a-response-example" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates an HTTP namespace.", + "id": "createhttpnamespace-example-1590114811304", + "title": "CreateHttpNamespace example" + } + ], + "CreatePrivateDnsNamespace": [ + { + "input": { + "CreatorRequestId": "eedd6892-50f3-41b2-8af9-611d6e1d1a8c", + "Name": "example.com", + "Vpc": "vpc-1c56417b" + }, + "output": { + "OperationId": "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9302yzd" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: Create private DNS namespace", + "id": "example-create-private-dns-namespace-1587058592930", + "title": "Example: Create private DNS namespace" + } + ], + "CreatePublicDnsNamespace": [ + { + "input": { + "CreatorRequestId": "example-creator-request-id-0003", + "Description": "Example.com AWS Cloud Map Public DNS Namespace", + "Name": "example-public-dns.com" + }, + "output": { + "OperationId": "dns2voqozuhfet5kzxoxg-a-response-example" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example creates a public namespace based on DNS.", + "id": "createpublicdnsnamespace-example-1590114940910", + "title": "CreatePublicDnsNamespace example" + } + ], + "CreateService": [ + { + "input": { + "CreatorRequestId": "567c1193-6b00-4308-bd57-ad38a8822d25", + "DnsConfig": { + "DnsRecords": [ + { + "TTL": 60, + "Type": "A" + } + ], + "NamespaceId": "ns-ylexjili4cdxy3xm", + "RoutingPolicy": "MULTIVALUE" + }, + "Name": "myservice", + "NamespaceId": "ns-ylexjili4cdxy3xm" + }, + "output": { + "Service": { + "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-p5zdwlg5uvvzjita", + "CreateDate": 1587081768.334, + "CreatorRequestId": "567c1193-6b00-4308-bd57-ad38a8822d25", + "DnsConfig": { + "DnsRecords": [ + { + "TTL": 60, + "Type": "A" + } + ], + "NamespaceId": "ns-ylexjili4cdxy3xm", + "RoutingPolicy": "MULTIVALUE" + }, + "Id": "srv-p5zdwlg5uvvzjita", + "Name": "myservice", + "NamespaceId": "ns-ylexjili4cdxy3xm" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: Create service", + "id": "example-create-service-1587235913584", + "title": "Example: Create service" + } + ], + "DeleteNamespace": [ + { + "input": { + "Id": "ns-ylexjili4cdxy3xm" + }, + "output": { + "OperationId": "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k98y6drk" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: Delete namespace", + "id": "example-delete-namespace-1587416093508", + "title": "Example: Delete namespace" + } + ], + "DeleteService": [ + { + "input": { + "Id": "srv-p5zdwlg5uvvzjita" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: Delete service", + "id": "example-delete-service-1587416462902", + "title": "Example: Delete service" + } + ], + "DeregisterInstance": [ + { + "input": { + "InstanceId": "myservice-53", + "ServiceId": "srv-p5zdwlg5uvvzjita" + }, + "output": { + "OperationId": "4yejorelbukcjzpnr6tlmrghsjwpngf4-k98rnaiq" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: Deregister a service instance", + "id": "example-deregister-a-service-instance-1587416305738", + "title": "Example: Deregister a service instance" + } + ], + "DiscoverInstances": [ + { + "input": { + "HealthStatus": "ALL", + "MaxResults": 10, + "NamespaceName": "example.com", + "ServiceName": "myservice" + }, + "output": { + "Instances": [ + { + "Attributes": { + "AWS_INSTANCE_IPV4": "172.2.1.3", + "AWS_INSTANCE_PORT": "808" + }, + "HealthStatus": "UNKNOWN", + "InstanceId": "myservice-53", + "NamespaceName": "example.com", + "ServiceName": "myservice" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: Discover registered instances", + "id": "example-discover-registered-instances-1587236343568", + "title": "Example: Discover registered instances" + } + ], + "GetInstance": [ + { + "input": { + "InstanceId": "i-abcd1234", + "ServiceId": "srv-e4anhexample0004" + }, + "output": { + "Instance": { + "Attributes": { + "AWS_INSTANCE_IPV4": "192.0.2.44", + "AWS_INSTANCE_PORT": "80", + "color": "green", + "region": "us-west-2", + "stage": "beta" + }, + "Id": "i-abcd1234" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example gets information about a specified instance.", + "id": "getinstance-example-1590115065598", + "title": "GetInstance example" + } + ], + "GetInstancesHealthStatus": [ + { + "input": { + "ServiceId": "srv-e4anhexample0004" + }, + "output": { + "Status": { + "i-abcd1234": "HEALTHY", + "i-abcd1235": "UNHEALTHY" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example gets the current health status of one or more instances that are associate with a specified service.", + "id": "getinstanceshealthstatus-example-1590115176146", + "title": "GetInstancesHealthStatus example" + } + ], + "GetNamespace": [ + { + "input": { + "Id": "ns-e4anhexample0004" + }, + "output": { + "Namespace": { + "Arn": "arn:aws:servicediscovery:us-west-2: 123456789120:namespace/ns-e1tpmexample0001", + "CreateDate": "20181118T211712Z", + "CreatorRequestId": "example-creator-request-id-0001", + "Description": "Example.com AWS Cloud Map HTTP Namespace", + "Id": "ns-e1tpmexample0001", + "Name": "example-http.com", + "Properties": { + "DnsProperties": { + }, + "HttpProperties": { + "HttpName": "example-http.com" + } + }, + "Type": "HTTP" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example gets information about a specified namespace.", + "id": "getnamespace-example-1590115383708", + "title": "GetNamespace example" + } + ], + "GetOperation": [ + { + "input": { + "OperationId": "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9302yzd" + }, + "output": { + "Operation": { + "CreateDate": 1587055860.121, + "Id": "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9302yzd", + "Status": "SUCCESS", + "Targets": { + "NAMESPACE": "ns-ylexjili4cdxy3xm" + }, + "Type": "CREATE_NAMESPACE", + "UpdateDate": 1587055900.469 + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: Get operation result", + "id": "example-get-operation-result-1587073807124", + "title": "Example: Get operation result" + } + ], + "GetService": [ + { + "input": { + "Id": "srv-e4anhexample0004" + }, + "output": { + "Service": { + "Arn": "arn:aws:servicediscovery:us-west-2:123456789120:service/srv-e4anhexample0004", + "CreateDate": "20181118T211707Z", + "CreatorRequestId": "example-creator-request-id-0004", + "Description": "Example.com AWS Cloud Map HTTP Service", + "HealthCheckConfig": { + "FailureThreshold": 3, + "ResourcePath": "/", + "Type": "HTTPS" + }, + "Id": "srv-e4anhexample0004", + "Name": "example-http-service", + "NamespaceId": "ns-e4anhexample0004" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example gets the settings for a specified service.", + "id": "getservice-example-1590117234294", + "title": "GetService Example" + } + ], + "ListInstances": [ + { + "input": { + "ServiceId": "srv-qzpwvt2tfqcegapy" + }, + "output": { + "Instances": [ + { + "Attributes": { + "AWS_INSTANCE_IPV4": "172.2.1.3", + "AWS_INSTANCE_PORT": "808" + }, + "Id": "i-06bdabbae60f65a4e" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: List service instances", + "id": "example-list-service-instances-1587236237008", + "title": "Example: List service instances" + } + ], + "ListNamespaces": [ + { + "input": { + }, + "output": { + "Namespaces": [ + { + "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-a3ccy2e7e3a7rile", + "CreateDate": 1585354387.357, + "Id": "ns-a3ccy2e7e3a7rile", + "Name": "local", + "Properties": { + "DnsProperties": { + "HostedZoneId": "Z06752353VBUDTC32S84S" + }, + "HttpProperties": { + "HttpName": "local" + } + }, + "Type": "DNS_PRIVATE" + }, + { + "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-pocfyjtrsmwtvcxx", + "CreateDate": 1586468974.698, + "Description": "My second namespace", + "Id": "ns-pocfyjtrsmwtvcxx", + "Name": "My-second-namespace", + "Properties": { + "DnsProperties": { + }, + "HttpProperties": { + "HttpName": "My-second-namespace" + } + }, + "Type": "HTTP" + }, + { + "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-ylexjili4cdxy3xm", + "CreateDate": 1587055896.798, + "Id": "ns-ylexjili4cdxy3xm", + "Name": "example.com", + "Properties": { + "DnsProperties": { + "HostedZoneId": "Z09983722P0QME1B3KC8I" + }, + "HttpProperties": { + "HttpName": "example.com" + } + }, + "Type": "DNS_PRIVATE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: List namespaces", + "id": "example-list-namespaces-1587401553154", + "title": "Example: List namespaces" + } + ], + "ListOperations": [ + { + "input": { + "Filters": [ + { + "Condition": "IN", + "Name": "STATUS", + "Values": [ + "PENDING", + "SUCCESS" + ] + } + ] + }, + "output": { + "Operations": [ + { + "Id": "76yy8ovhpdz0plmjzbsnqgnrqvpv2qdt-kexample", + "Status": "SUCCESS" + }, + { + "Id": "prysnyzpji3u2ciy45nke83x2zanl7yk-dexample", + "Status": "SUCCESS" + }, + { + "Id": "ko4ekftir7kzlbechsh7xvcdgcpk66gh-7example", + "Status": "PENDING" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example gets the operations that have a STATUS of either PENDING or SUCCESS.", + "id": "listoperations-example-1590117354396", + "title": "ListOperations Example" + } + ], + "ListServices": [ + { + "input": { + }, + "output": { + "Services": [ + { + "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-p5zdwlg5uvvzjita", + "CreateDate": 1587081768.334, + "DnsConfig": { + "DnsRecords": [ + { + "TTL": 60, + "Type": "A" + } + ], + "RoutingPolicy": "MULTIVALUE" + }, + "Id": "srv-p5zdwlg5uvvzjita", + "Name": "myservice" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: List services", + "id": "example-list-services-1587236889840", + "title": "Example: List services" + } + ], + "ListTagsForResource": [ + { + "input": { + "ResourceARN": "arn:aws:servicediscovery:us-east-1:123456789012:namespace/ns-ylexjili4cdxy3xm" + }, + "output": { + "Tags": [ + { + "Key": "Project", + "Value": "Zeta" + }, + { + "Key": "Department", + "Value": "Engineering" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example lists the tags of a resource.", + "id": "listtagsforresource-example-1590093928416", + "title": "ListTagsForResource example" + } + ], + "RegisterInstance": [ + { + "input": { + "Attributes": { + "AWS_INSTANCE_IPV4": "172.2.1.3", + "AWS_INSTANCE_PORT": "808" + }, + "CreatorRequestId": "7a48a98a-72e6-4849-bfa7-1a458e030d7b", + "InstanceId": "myservice-53", + "ServiceId": "srv-p5zdwlg5uvvzjita" + }, + "output": { + "OperationId": "4yejorelbukcjzpnr6tlmrghsjwpngf4-k95yg2u7" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Example: Register Instance", + "id": "example-register-instance-1587236116314", + "title": "Example: Register Instance" + } + ], + "TagResource": [ + { + "input": { + "ResourceARN": "arn:aws:servicediscovery:us-east-1:123456789012:namespace/ns-ylexjili4cdxy3xm", + "Tags": [ + { + "Key": "Department", + "Value": "Engineering" + }, + { + "Key": "Project", + "Value": "Zeta" + } + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example adds \"Department\" and \"Project\" tags to a resource.", + "id": "tagresource-example-1590093532240", + "title": "TagResource example" + } + ], + "UntagResource": [ + { + "input": { + "ResourceARN": "arn:aws:servicediscovery:us-east-1:123456789012:namespace/ns-ylexjili4cdxy3xm", + "TagKeys": [ + "Project", + "Department" + ] + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example removes the \"Department\" and \"Project\" tags from a resource.", + "id": "untagresource-example-1590094024672", + "title": "UntagResource example" + } + ], + "UpdateInstanceCustomHealthStatus": [ + { + "input": { + "InstanceId": "i-abcd1234", + "ServiceId": "srv-e4anhexample0004", + "Status": "HEALTHY" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example submits a request to change the health status of an instance associated with a service with a custom health check to HEALTHY.", + "id": "updateinstancecustomhealthstatus-example-1590118408574", + "title": "UpdateInstanceCustomHealthStatus Example" + } + ], + "UpdateService": [ + { + "input": { + "Id": "srv-e4anhexample0004", + "Service": { + "DnsConfig": { + "DnsRecords": [ + { + "TTL": 60, + "Type": "A" + } + ] + }, + "HealthCheckConfig": { + "FailureThreshold": 2, + "ResourcePath": "/", + "Type": "HTTP" + } + } + }, + "output": { + "OperationId": "m35hsdrkxwjffm3xef4bxyy6vc3ewakx-jdn3y5g5" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example submits a request to replace the DnsConfig and HealthCheckConfig settings of a specified service.", + "id": "updateservice-example-1590117830880", + "title": "UpdateService Example" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/paginators-1.json new file mode 100644 index 00000000..f58df70e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListServices": { + "result_key": "Services", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListInstances": { + "result_key": "Instances", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListNamespaces": { + "result_key": "Namespaces", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListOperations": { + "result_key": "Operations", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/service-2.json.gz new file mode 100644 index 00000000..faa0c6ed Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/servicediscovery/2017-03-14/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..7a46be63 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/examples-1.json new file mode 100644 index 00000000..e5690330 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/examples-1.json @@ -0,0 +1,1021 @@ +{ + "version": "1.0", + "examples": { + "CloneReceiptRuleSet": [ + { + "input": { + "OriginalRuleSetName": "RuleSetToClone", + "RuleSetName": "RuleSetToCreate" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a receipt rule set by cloning an existing one:", + "id": "clonereceiptruleset-1469055039770", + "title": "CloneReceiptRuleSet" + } + ], + "CreateReceiptFilter": [ + { + "input": { + "Filter": { + "IpFilter": { + "Cidr": "1.2.3.4/24", + "Policy": "Allow" + }, + "Name": "MyFilter" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a new IP address filter:", + "id": "createreceiptfilter-1469122681253", + "title": "CreateReceiptFilter" + } + ], + "CreateReceiptRule": [ + { + "input": { + "After": "", + "Rule": { + "Actions": [ + { + "S3Action": { + "BucketName": "MyBucket", + "ObjectKeyPrefix": "email" + } + } + ], + "Enabled": true, + "Name": "MyRule", + "ScanEnabled": true, + "TlsPolicy": "Optional" + }, + "RuleSetName": "MyRuleSet" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a new receipt rule:", + "id": "createreceiptrule-1469122946515", + "title": "CreateReceiptRule" + } + ], + "CreateReceiptRuleSet": [ + { + "input": { + "RuleSetName": "MyRuleSet" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates an empty receipt rule set:", + "id": "createreceiptruleset-1469058761646", + "title": "CreateReceiptRuleSet" + } + ], + "DeleteIdentity": [ + { + "input": { + "Identity": "user@example.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an identity from the list of identities that have been submitted for verification with Amazon SES:", + "id": "deleteidentity-1469047858906", + "title": "DeleteIdentity" + } + ], + "DeleteIdentityPolicy": [ + { + "input": { + "Identity": "user@example.com", + "PolicyName": "MyPolicy" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a sending authorization policy for an identity:", + "id": "deleteidentitypolicy-1469055282499", + "title": "DeleteIdentityPolicy" + } + ], + "DeleteReceiptFilter": [ + { + "input": { + "FilterName": "MyFilter" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an IP address filter:", + "id": "deletereceiptfilter-1469055456835", + "title": "DeleteReceiptFilter" + } + ], + "DeleteReceiptRule": [ + { + "input": { + "RuleName": "MyRule", + "RuleSetName": "MyRuleSet" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a receipt rule:", + "id": "deletereceiptrule-1469055563599", + "title": "DeleteReceiptRule" + } + ], + "DeleteReceiptRuleSet": [ + { + "input": { + "RuleSetName": "MyRuleSet" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a receipt rule set:", + "id": "deletereceiptruleset-1469055713690", + "title": "DeleteReceiptRuleSet" + } + ], + "DeleteVerifiedEmailAddress": [ + { + "input": { + "EmailAddress": "user@example.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an email address from the list of identities that have been submitted for verification with Amazon SES:", + "id": "deleteverifiedemailaddress-1469051086444", + "title": "DeleteVerifiedEmailAddress" + } + ], + "DescribeActiveReceiptRuleSet": [ + { + "input": { + }, + "output": { + "Metadata": { + "CreatedTimestamp": "2016-07-15T16:25:59.607Z", + "Name": "default-rule-set" + }, + "Rules": [ + { + "Actions": [ + { + "S3Action": { + "BucketName": "MyBucket", + "ObjectKeyPrefix": "email" + } + } + ], + "Enabled": true, + "Name": "MyRule", + "ScanEnabled": true, + "TlsPolicy": "Optional" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the metadata and receipt rules for the receipt rule set that is currently active:", + "id": "describeactivereceiptruleset-1469121611502", + "title": "DescribeActiveReceiptRuleSet" + } + ], + "DescribeReceiptRule": [ + { + "input": { + "RuleName": "MyRule", + "RuleSetName": "MyRuleSet" + }, + "output": { + "Rule": { + "Actions": [ + { + "S3Action": { + "BucketName": "MyBucket", + "ObjectKeyPrefix": "email" + } + } + ], + "Enabled": true, + "Name": "MyRule", + "ScanEnabled": true, + "TlsPolicy": "Optional" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a receipt rule:", + "id": "describereceiptrule-1469055813118", + "title": "DescribeReceiptRule" + } + ], + "DescribeReceiptRuleSet": [ + { + "input": { + "RuleSetName": "MyRuleSet" + }, + "output": { + "Metadata": { + "CreatedTimestamp": "2016-07-15T16:25:59.607Z", + "Name": "MyRuleSet" + }, + "Rules": [ + { + "Actions": [ + { + "S3Action": { + "BucketName": "MyBucket", + "ObjectKeyPrefix": "email" + } + } + ], + "Enabled": true, + "Name": "MyRule", + "ScanEnabled": true, + "TlsPolicy": "Optional" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the metadata and receipt rules of a receipt rule set:", + "id": "describereceiptruleset-1469121240385", + "title": "DescribeReceiptRuleSet" + } + ], + "GetAccountSendingEnabled": [ + { + "output": { + "Enabled": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns if sending status for an account is enabled. (true / false):", + "id": "getaccountsendingenabled-1469047741333", + "title": "GetAccountSendingEnabled" + } + ], + "GetIdentityDkimAttributes": [ + { + "input": { + "Identities": [ + "example.com", + "user@example.com" + ] + }, + "output": { + "DkimAttributes": { + "example.com": { + "DkimEnabled": true, + "DkimTokens": [ + "EXAMPLEjcs5xoyqytjsotsijas7236gr", + "EXAMPLEjr76cvoc6mysspnioorxsn6ep", + "EXAMPLEkbmkqkhlm2lyz77ppkulerm4k" + ], + "DkimVerificationStatus": "Success" + }, + "user@example.com": { + "DkimEnabled": false, + "DkimVerificationStatus": "NotStarted" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example retrieves the Amazon SES Easy DKIM attributes for a list of identities:", + "id": "getidentitydkimattributes-1469050695628", + "title": "GetIdentityDkimAttributes" + } + ], + "GetIdentityMailFromDomainAttributes": [ + { + "input": { + "Identities": [ + "example.com" + ] + }, + "output": { + "MailFromDomainAttributes": { + "example.com": { + "BehaviorOnMXFailure": "UseDefaultValue", + "MailFromDomain": "bounces.example.com", + "MailFromDomainStatus": "Success" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the custom MAIL FROM attributes for an identity:", + "id": "getidentitymailfromdomainattributes-1469123114860", + "title": "GetIdentityMailFromDomainAttributes" + } + ], + "GetIdentityNotificationAttributes": [ + { + "input": { + "Identities": [ + "example.com" + ] + }, + "output": { + "NotificationAttributes": { + "example.com": { + "BounceTopic": "arn:aws:sns:us-east-1:EXAMPLE65304:ExampleTopic", + "ComplaintTopic": "arn:aws:sns:us-east-1:EXAMPLE65304:ExampleTopic", + "DeliveryTopic": "arn:aws:sns:us-east-1:EXAMPLE65304:ExampleTopic", + "ForwardingEnabled": true, + "HeadersInBounceNotificationsEnabled": false, + "HeadersInComplaintNotificationsEnabled": false, + "HeadersInDeliveryNotificationsEnabled": false + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the notification attributes for an identity:", + "id": "getidentitynotificationattributes-1469123466947", + "title": "GetIdentityNotificationAttributes" + } + ], + "GetIdentityPolicies": [ + { + "input": { + "Identity": "example.com", + "PolicyNames": [ + "MyPolicy" + ] + }, + "output": { + "Policies": { + "MyPolicy": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Sid\":\"stmt1469123904194\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::123456789012:root\"},\"Action\":[\"ses:SendEmail\",\"ses:SendRawEmail\"],\"Resource\":\"arn:aws:ses:us-east-1:EXAMPLE65304:identity/example.com\"}]}" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns a sending authorization policy for an identity:", + "id": "getidentitypolicies-1469123949351", + "title": "GetIdentityPolicies" + } + ], + "GetIdentityVerificationAttributes": [ + { + "input": { + "Identities": [ + "example.com" + ] + }, + "output": { + "VerificationAttributes": { + "example.com": { + "VerificationStatus": "Success", + "VerificationToken": "EXAMPLE3VYb9EDI2nTOQRi/Tf6MI/6bD6THIGiP1MVY=" + } + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the verification status and the verification token for a domain identity:", + "id": "getidentityverificationattributes-1469124205897", + "title": "GetIdentityVerificationAttributes" + } + ], + "GetSendQuota": [ + { + "output": { + "Max24HourSend": 200, + "MaxSendRate": 1, + "SentLast24Hours": 1 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the Amazon SES sending limits for an AWS account:", + "id": "getsendquota-1469047324508", + "title": "GetSendQuota" + } + ], + "GetSendStatistics": [ + { + "output": { + "SendDataPoints": [ + { + "Bounces": 0, + "Complaints": 0, + "DeliveryAttempts": 5, + "Rejects": 0, + "Timestamp": "2016-07-13T22:43:00Z" + }, + { + "Bounces": 0, + "Complaints": 0, + "DeliveryAttempts": 3, + "Rejects": 0, + "Timestamp": "2016-07-13T23:13:00Z" + }, + { + "Bounces": 0, + "Complaints": 0, + "DeliveryAttempts": 1, + "Rejects": 0, + "Timestamp": "2016-07-13T21:13:00Z" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns Amazon SES sending statistics:", + "id": "getsendstatistics-1469047741329", + "title": "GetSendStatistics" + } + ], + "ListIdentities": [ + { + "input": { + "IdentityType": "EmailAddress", + "MaxItems": 123, + "NextToken": "" + }, + "output": { + "Identities": [ + "user@example.com" + ], + "NextToken": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example lists the email address identities that have been submitted for verification with Amazon SES:", + "id": "listidentities-1469048638493", + "title": "ListIdentities" + } + ], + "ListIdentityPolicies": [ + { + "input": { + "Identity": "example.com" + }, + "output": { + "PolicyNames": [ + "MyPolicy" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns a list of sending authorization policies that are attached to an identity:", + "id": "listidentitypolicies-1469124417674", + "title": "ListIdentityPolicies" + } + ], + "ListReceiptFilters": [ + { + "output": { + "Filters": [ + { + "IpFilter": { + "Cidr": "1.2.3.4/24", + "Policy": "Block" + }, + "Name": "MyFilter" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example lists the IP address filters that are associated with an AWS account:", + "id": "listreceiptfilters-1469120786789", + "title": "ListReceiptFilters" + } + ], + "ListReceiptRuleSets": [ + { + "input": { + "NextToken": "" + }, + "output": { + "NextToken": "", + "RuleSets": [ + { + "CreatedTimestamp": "2016-07-15T16:25:59.607Z", + "Name": "MyRuleSet" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example lists the receipt rule sets that exist under an AWS account:", + "id": "listreceiptrulesets-1469121037235", + "title": "ListReceiptRuleSets" + } + ], + "ListVerifiedEmailAddresses": [ + { + "output": { + "VerifiedEmailAddresses": [ + "user1@example.com", + "user2@example.com" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example lists all email addresses that have been submitted for verification with Amazon SES:", + "id": "listverifiedemailaddresses-1469051402570", + "title": "ListVerifiedEmailAddresses" + } + ], + "PutIdentityPolicy": [ + { + "input": { + "Identity": "example.com", + "Policy": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Sid\":\"stmt1469123904194\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::123456789012:root\"},\"Action\":[\"ses:SendEmail\",\"ses:SendRawEmail\"],\"Resource\":\"arn:aws:ses:us-east-1:EXAMPLE65304:identity/example.com\"}]}", + "PolicyName": "MyPolicy" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example adds a sending authorization policy to an identity:", + "id": "putidentitypolicy-1469124560016", + "title": "PutIdentityPolicy" + } + ], + "ReorderReceiptRuleSet": [ + { + "input": { + "RuleNames": [ + "MyRule", + "MyOtherRule" + ], + "RuleSetName": "MyRuleSet" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example reorders the receipt rules within a receipt rule set:", + "id": "reorderreceiptruleset-1469058156806", + "title": "ReorderReceiptRuleSet" + } + ], + "SendEmail": [ + { + "input": { + "Destination": { + "BccAddresses": [ + + ], + "CcAddresses": [ + "recipient3@example.com" + ], + "ToAddresses": [ + "recipient1@example.com", + "recipient2@example.com" + ] + }, + "Message": { + "Body": { + "Html": { + "Charset": "UTF-8", + "Data": "This message body contains HTML formatting. It can, for example, contain links like this one: Amazon SES Developer Guide." + }, + "Text": { + "Charset": "UTF-8", + "Data": "This is the message body in text format." + } + }, + "Subject": { + "Charset": "UTF-8", + "Data": "Test email" + } + }, + "ReplyToAddresses": [ + + ], + "ReturnPath": "", + "ReturnPathArn": "", + "Source": "sender@example.com", + "SourceArn": "" + }, + "output": { + "MessageId": "EXAMPLE78603177f-7a5433e7-8edb-42ae-af10-f0181f34d6ee-000000" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sends a formatted email:", + "id": "sendemail-1469049656296", + "title": "SendEmail" + } + ], + "SendRawEmail": [ + { + "input": { + "Destinations": [ + + ], + "FromArn": "", + "RawMessage": { + "Data": "From: sender@example.com\\nTo: recipient@example.com\\nSubject: Test email (contains an attachment)\\nMIME-Version: 1.0\\nContent-type: Multipart/Mixed; boundary=\"NextPart\"\\n\\n--NextPart\\nContent-Type: text/plain\\n\\nThis is the message body.\\n\\n--NextPart\\nContent-Type: text/plain;\\nContent-Disposition: attachment; filename=\"attachment.txt\"\\n\\nThis is the text in the attachment.\\n\\n--NextPart--" + }, + "ReturnPathArn": "", + "Source": "", + "SourceArn": "" + }, + "output": { + "MessageId": "EXAMPLEf3f73d99b-c63fb06f-d263-41f8-a0fb-d0dc67d56c07-000000" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sends an email with an attachment:", + "id": "sendrawemail-1469118548649", + "title": "SendRawEmail" + } + ], + "SetActiveReceiptRuleSet": [ + { + "input": { + "RuleSetName": "RuleSetToActivate" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets the active receipt rule set:", + "id": "setactivereceiptruleset-1469058391329", + "title": "SetActiveReceiptRuleSet" + } + ], + "SetIdentityDkimEnabled": [ + { + "input": { + "DkimEnabled": true, + "Identity": "user@example.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example configures Amazon SES to Easy DKIM-sign the email sent from an identity:", + "id": "setidentitydkimenabled-1469057485202", + "title": "SetIdentityDkimEnabled" + } + ], + "SetIdentityFeedbackForwardingEnabled": [ + { + "input": { + "ForwardingEnabled": true, + "Identity": "user@example.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example configures Amazon SES to forward an identity's bounces and complaints via email:", + "id": "setidentityfeedbackforwardingenabled-1469056811329", + "title": "SetIdentityFeedbackForwardingEnabled" + } + ], + "SetIdentityHeadersInNotificationsEnabled": [ + { + "input": { + "Enabled": true, + "Identity": "user@example.com", + "NotificationType": "Bounce" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example configures Amazon SES to include the original email headers in the Amazon SNS bounce notifications for an identity:", + "id": "setidentityheadersinnotificationsenabled-1469057295001", + "title": "SetIdentityHeadersInNotificationsEnabled" + } + ], + "SetIdentityMailFromDomain": [ + { + "input": { + "BehaviorOnMXFailure": "UseDefaultValue", + "Identity": "user@example.com", + "MailFromDomain": "bounces.example.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example configures Amazon SES to use a custom MAIL FROM domain for an identity:", + "id": "setidentitymailfromdomain-1469057693908", + "title": "SetIdentityMailFromDomain" + } + ], + "SetIdentityNotificationTopic": [ + { + "input": { + "Identity": "user@example.com", + "NotificationType": "Bounce", + "SnsTopic": "arn:aws:sns:us-west-2:111122223333:MyTopic" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets the Amazon SNS topic to which Amazon SES will publish bounce, complaint, and/or delivery notifications for emails sent with the specified identity as the Source:", + "id": "setidentitynotificationtopic-1469057854966", + "title": "SetIdentityNotificationTopic" + } + ], + "SetReceiptRulePosition": [ + { + "input": { + "After": "PutRuleAfterThisRule", + "RuleName": "RuleToReposition", + "RuleSetName": "MyRuleSet" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example sets the position of a receipt rule in a receipt rule set:", + "id": "setreceiptruleposition-1469058530550", + "title": "SetReceiptRulePosition" + } + ], + "UpdateAccountSendingEnabled": [ + { + "input": { + "Enabled": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example updated the sending status for this account.", + "id": "updateaccountsendingenabled-1469047741333", + "title": "UpdateAccountSendingEnabled" + } + ], + "UpdateConfigurationSetReputationMetricsEnabled": [ + { + "input": { + "ConfigurationSetName": "foo", + "Enabled": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Set the reputationMetricsEnabled flag for a specific configuration set.", + "id": "updateconfigurationsetreputationmetricsenabled-2362747741333", + "title": "UpdateConfigurationSetReputationMetricsEnabled" + } + ], + "UpdateConfigurationSetSendingEnabled": [ + { + "input": { + "ConfigurationSetName": "foo", + "Enabled": true + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Set the sending enabled flag for a specific configuration set.", + "id": "updateconfigurationsetsendingenabled-2362747741333", + "title": "UpdateConfigurationSetReputationMetricsEnabled" + } + ], + "UpdateReceiptRule": [ + { + "input": { + "Rule": { + "Actions": [ + { + "S3Action": { + "BucketName": "MyBucket", + "ObjectKeyPrefix": "email" + } + } + ], + "Enabled": true, + "Name": "MyRule", + "ScanEnabled": true, + "TlsPolicy": "Optional" + }, + "RuleSetName": "MyRuleSet" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example updates a receipt rule to use an Amazon S3 action:", + "id": "updatereceiptrule-1469051756940", + "title": "UpdateReceiptRule" + } + ], + "VerifyDomainDkim": [ + { + "input": { + "Domain": "example.com" + }, + "output": { + "DkimTokens": [ + "EXAMPLEq76owjnks3lnluwg65scbemvw", + "EXAMPLEi3dnsj67hstzaj673klariwx2", + "EXAMPLEwfbtcukvimehexktmdtaz6naj" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example generates DKIM tokens for a domain that has been verified with Amazon SES:", + "id": "verifydomaindkim-1469049503083", + "title": "VerifyDomainDkim" + } + ], + "VerifyDomainIdentity": [ + { + "input": { + "Domain": "example.com" + }, + "output": { + "VerificationToken": "eoEmxw+YaYhb3h3iVJHuXMJXqeu1q1/wwmvjuEXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example starts the domain verification process with Amazon SES:", + "id": "verifydomainidentity-1469049165936", + "title": "VerifyDomainIdentity" + } + ], + "VerifyEmailAddress": [ + { + "input": { + "EmailAddress": "user@example.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example starts the email address verification process with Amazon SES:", + "id": "verifyemailaddress-1469048849187", + "title": "VerifyEmailAddress" + } + ], + "VerifyEmailIdentity": [ + { + "input": { + "EmailAddress": "user@example.com" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example starts the email address verification process with Amazon SES:", + "id": "verifyemailidentity-1469049068623", + "title": "VerifyEmailIdentity" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/paginators-1.json new file mode 100644 index 00000000..1eb0054f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/paginators-1.json @@ -0,0 +1,33 @@ +{ + "pagination": { + "ListIdentities": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxItems", + "result_key": "Identities" + }, + "ListCustomVerificationEmailTemplates": { + "result_key": "CustomVerificationEmailTemplates", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListConfigurationSets": { + "input_token": "NextToken", + "limit_key": "MaxItems", + "output_token": "NextToken", + "result_key": "ConfigurationSets" + }, + "ListReceiptRuleSets": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "RuleSets" + }, + "ListTemplates": { + "input_token": "NextToken", + "limit_key": "MaxItems", + "output_token": "NextToken", + "result_key": "TemplatesMetadata" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/service-2.json.gz new file mode 100644 index 00000000..5d54a3c4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/waiters-2.json new file mode 100644 index 00000000..b585d309 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ses/2010-12-01/waiters-2.json @@ -0,0 +1,18 @@ +{ + "version": 2, + "waiters": { + "IdentityExists": { + "delay": 3, + "operation": "GetIdentityVerificationAttributes", + "maxAttempts": 20, + "acceptors": [ + { + "expected": "Success", + "matcher": "pathAll", + "state": "success", + "argument": "VerificationAttributes.*.VerificationStatus" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..13e35e1e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/service-2.json.gz new file mode 100644 index 00000000..09eea456 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sesv2/2019-09-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..345efbe6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/paginators-1.json new file mode 100644 index 00000000..c5ded642 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListProtections": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Protections" + }, + "ListAttacks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AttackSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/service-2.json.gz new file mode 100644 index 00000000..179d3e0f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/shield/2016-06-02/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d123f720 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/paginators-1.json new file mode 100644 index 00000000..1e049e7d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListSigningJobs": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "jobs" + }, + "ListSigningPlatforms": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "platforms" + }, + "ListSigningProfiles": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "profiles" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/service-2.json.gz new file mode 100644 index 00000000..bf03be36 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/waiters-2.json new file mode 100644 index 00000000..a0890ade --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/signer/2017-08-25/waiters-2.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "waiters": { + "SuccessfulSigningJob": { + "delay": 20, + "operation": "DescribeSigningJob", + "maxAttempts": 25, + "acceptors": [ + { + "expected": "Succeeded", + "matcher": "path", + "state": "success", + "argument": "status" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "status" + }, + { + "expected": "ResourceNotFoundException", + "matcher": "error", + "state": "failure" + } + ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/simspaceweaver/2022-10-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/simspaceweaver/2022-10-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3fde38d7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/simspaceweaver/2022-10-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/simspaceweaver/2022-10-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/simspaceweaver/2022-10-28/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/simspaceweaver/2022-10-28/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/simspaceweaver/2022-10-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/simspaceweaver/2022-10-28/service-2.json.gz new file mode 100644 index 00000000..16ba8405 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/simspaceweaver/2022-10-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sms-voice/2018-09-05/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sms-voice/2018-09-05/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..16667b7c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sms-voice/2018-09-05/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sms-voice/2018-09-05/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sms-voice/2018-09-05/service-2.json.gz new file mode 100644 index 00000000..17ff6832 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sms-voice/2018-09-05/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8e587079 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/paginators-1.json new file mode 100644 index 00000000..52a8d570 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "GetReplicationJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "replicationJobList" + }, + "GetReplicationRuns": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "replicationRunList" + }, + "GetConnectors": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "connectorList" + }, + "GetServers": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "serverList" + }, + "ListApps": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "apps" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/service-2.json.gz new file mode 100644 index 00000000..2e5ae26b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sms/2016-10-24/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6392f06b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/paginators-1.json new file mode 100644 index 00000000..8b112099 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListDeviceResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "resources" + }, + "ListDevices": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "devices" + }, + "ListExecutions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "executions" + }, + "ListTasks": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "tasks" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/service-2.json.gz new file mode 100644 index 00000000..d18ecd51 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/snow-device-management/2021-08-04/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..24282eec Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/examples-1.json new file mode 100644 index 00000000..2b13f7b4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/examples-1.json @@ -0,0 +1,442 @@ +{ + "version": "1.0", + "examples": { + "CancelCluster": [ + { + "input": { + "ClusterId": "CID123e4567-e89b-12d3-a456-426655440000" + }, + "comments": { + }, + "description": "This operation cancels a cluster job. You can only cancel a cluster job while it's in the AwaitingQuorum status.", + "id": "to-cancel-a-cluster-job-1482533760554", + "title": "To cancel a cluster job" + } + ], + "CancelJob": [ + { + "input": { + "JobId": "JID123e4567-e89b-12d3-a456-426655440000" + }, + "comments": { + }, + "description": "This operation cancels a job. You can only cancel a job before its JobState value changes to PreparingAppliance.", + "id": "to-cancel-a-job-for-a-snowball-device-1482534699477", + "title": "To cancel a job for a Snowball device" + } + ], + "CreateAddress": [ + { + "input": { + "Address": { + "City": "Seattle", + "Company": "My Company's Name", + "Country": "USA", + "Name": "My Name", + "PhoneNumber": "425-555-5555", + "PostalCode": "98101", + "StateOrProvince": "WA", + "Street1": "123 Main Street" + } + }, + "output": { + "AddressId": "ADID1234ab12-3eec-4eb3-9be6-9374c10eb51b" + }, + "comments": { + }, + "description": "This operation creates an address for a job. Addresses are validated at the time of creation. The address you provide must be located within the serviceable area of your region. If the address is invalid or unsupported, then an exception is thrown.", + "id": "to-create-an-address-for-a-job-1482535416294", + "title": "To create an address for a job" + } + ], + "CreateCluster": [ + { + "input": { + "AddressId": "ADID1234ab12-3eec-4eb3-9be6-9374c10eb51b", + "Description": "MyCluster", + "JobType": "LOCAL_USE", + "KmsKeyARN": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-12ab-34cd-56ef-123456123456", + "Notification": { + "JobStatesToNotify": [ + + ], + "NotifyAll": false + }, + "Resources": { + "S3Resources": [ + { + "BucketArn": "arn:aws:s3:::MyBucket", + "KeyRange": { + } + } + ] + }, + "RoleARN": "arn:aws:iam::123456789012:role/snowball-import-S3-role", + "ShippingOption": "SECOND_DAY", + "SnowballType": "EDGE" + }, + "output": { + "ClusterId": "CID123e4567-e89b-12d3-a456-426655440000" + }, + "comments": { + }, + "description": "Creates an empty cluster. Each cluster supports five nodes. You use the CreateJob action separately to create the jobs for each of these nodes. The cluster does not ship until these five node jobs have been created.", + "id": "to-create-a-cluster-1482864724077", + "title": "To create a cluster" + } + ], + "CreateJob": [ + { + "input": { + "AddressId": "ADID1234ab12-3eec-4eb3-9be6-9374c10eb51b", + "Description": "My Job", + "JobType": "IMPORT", + "KmsKeyARN": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-12ab-34cd-56ef-123456123456", + "Notification": { + "JobStatesToNotify": [ + + ], + "NotifyAll": false + }, + "Resources": { + "S3Resources": [ + { + "BucketArn": "arn:aws:s3:::MyBucket", + "KeyRange": { + } + } + ] + }, + "RoleARN": "arn:aws:iam::123456789012:role/snowball-import-S3-role", + "ShippingOption": "SECOND_DAY", + "SnowballCapacityPreference": "T80", + "SnowballType": "STANDARD" + }, + "output": { + "JobId": "JID123e4567-e89b-12d3-a456-426655440000" + }, + "comments": { + }, + "description": "Creates a job to import or export data between Amazon S3 and your on-premises data center. Your AWS account must have the right trust policies and permissions in place to create a job for Snowball. If you're creating a job for a node in a cluster, you only need to provide the clusterId value; the other job attributes are inherited from the cluster.", + "id": "to-create-a-job-1482864834886", + "title": "To create a job" + } + ], + "DescribeAddress": [ + { + "input": { + "AddressId": "ADID1234ab12-3eec-4eb3-9be6-9374c10eb51b" + }, + "output": { + "Address": { + "AddressId": "ADID5643ec50-3eec-4eb3-9be6-9374c10eb51b", + "City": "Seattle", + "Company": "My Company", + "Country": "US", + "Name": "My Name", + "PhoneNumber": "425-555-5555", + "PostalCode": "98101", + "StateOrProvince": "WA", + "Street1": "123 Main Street" + } + }, + "comments": { + }, + "description": "This operation describes an address for a job.", + "id": "to-describe-an-address-for-a-job-1482538608745", + "title": "To describe an address for a job" + } + ], + "DescribeAddresses": [ + { + "input": { + }, + "output": { + "Addresses": [ + { + "AddressId": "ADID1234ab12-3eec-4eb3-9be6-9374c10eb51b", + "City": "Seattle", + "Company": "My Company", + "Country": "US", + "Name": "My Name", + "PhoneNumber": "425-555-5555", + "PostalCode": "98101", + "StateOrProvince": "WA", + "Street1": "123 Main Street" + } + ] + }, + "comments": { + }, + "description": "This operation describes all the addresses that you've created for AWS Snowball. Calling this API in one of the US regions will return addresses from the list of all addresses associated with this account in all US regions.", + "id": "to-describe-all-the-addresses-youve-created-for-aws-snowball-1482538936603", + "title": "To describe all the addresses you've created for AWS Snowball" + } + ], + "DescribeCluster": [ + { + "input": { + "ClusterId": "CID123e4567-e89b-12d3-a456-426655440000" + }, + "output": { + "ClusterMetadata": { + "AddressId": "ADID1234ab12-3eec-4eb3-9be6-9374c10eb51b", + "ClusterId": "CID123e4567-e89b-12d3-a456-426655440000", + "ClusterState": "Pending", + "CreationDate": "1480475517.0", + "Description": "MyCluster", + "JobType": "LOCAL_USE", + "KmsKeyARN": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-12ab-34cd-56ef-123456123456", + "Notification": { + "JobStatesToNotify": [ + + ], + "NotifyAll": false + }, + "Resources": { + "S3Resources": [ + { + "BucketArn": "arn:aws:s3:::MyBucket", + "KeyRange": { + } + } + ] + }, + "RoleARN": "arn:aws:iam::123456789012:role/snowball-import-S3-role", + "ShippingOption": "SECOND_DAY" + } + }, + "comments": { + }, + "description": "Returns information about a specific cluster including shipping information, cluster status, and other important metadata.", + "id": "to-describe-a-cluster-1482864218396", + "title": "To describe a cluster" + } + ], + "DescribeJob": [ + { + "input": { + "JobId": "JID123e4567-e89b-12d3-a456-426655440000" + }, + "output": { + "JobMetadata": { + "AddressId": "ADID1234ab12-3eec-4eb3-9be6-9374c10eb51b", + "CreationDate": "1475626164", + "Description": "My Job", + "JobId": "JID123e4567-e89b-12d3-a456-426655440000", + "JobState": "New", + "JobType": "IMPORT", + "KmsKeyARN": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-12ab-34cd-56ef-123456123456", + "Notification": { + "JobStatesToNotify": [ + + ], + "NotifyAll": false + }, + "Resources": { + "S3Resources": [ + { + "BucketArn": "arn:aws:s3:::MyBucket", + "KeyRange": { + } + } + ] + }, + "RoleARN": "arn:aws:iam::123456789012:role/snowball-import-S3-role", + "ShippingDetails": { + "ShippingOption": "SECOND_DAY" + }, + "SnowballCapacityPreference": "T80", + "SnowballType": "STANDARD" + } + }, + "comments": { + }, + "description": "This operation describes a job you've created for AWS Snowball.", + "id": "to-describe-a-job-youve-created-for-aws-snowball-1482539500180", + "title": "To describe a job you've created for AWS Snowball" + } + ], + "GetJobManifest": [ + { + "input": { + "JobId": "JID123e4567-e89b-12d3-a456-426655440000" + }, + "output": { + "ManifestURI": "https://awsie-frosty-manifests-prod.s3.amazonaws.com/JID123e4567-e89b-12d3-a456-426655440000_manifest.bin?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20161224T005115Z&X-Amz-SignedHeaders=..." + }, + "comments": { + }, + "description": "Returns a link to an Amazon S3 presigned URL for the manifest file associated with the specified JobId value. You can access the manifest file for up to 60 minutes after this request has been made. To access the manifest file after 60 minutes have passed, you'll have to make another call to the GetJobManifest action.\n\nThe manifest is an encrypted file that you can download after your job enters the WithCustomer status. The manifest is decrypted by using the UnlockCode code value, when you pass both values to the Snowball through the Snowball client when the client is started for the first time.\n\nAs a best practice, we recommend that you don't save a copy of an UnlockCode value in the same location as the manifest file for that job. Saving these separately helps prevent unauthorized parties from gaining access to the Snowball associated with that job.\n\nThe credentials of a given job, including its manifest file and unlock code, expire 90 days after the job is created.", + "id": "to-get-the-manifest-for-a-job-youve-created-for-aws-snowball-1482540389246", + "title": "To get the manifest for a job you've created for AWS Snowball" + } + ], + "GetJobUnlockCode": [ + { + "input": { + "JobId": "JID123e4567-e89b-12d3-a456-426655440000" + }, + "output": { + "UnlockCode": "12345-abcde-56789-fghij-01234" + }, + "comments": { + }, + "description": "Returns the UnlockCode code value for the specified job. A particular UnlockCode value can be accessed for up to 90 days after the associated job has been created.\n\nThe UnlockCode value is a 29-character code with 25 alphanumeric characters and 4 hyphens. This code is used to decrypt the manifest file when it is passed along with the manifest to the Snowball through the Snowball client when the client is started for the first time.\n\nAs a best practice, we recommend that you don't save a copy of the UnlockCode in the same location as the manifest file for that job. Saving these separately helps prevent unauthorized parties from gaining access to the Snowball associated with that job.", + "id": "to-get-the-unlock-code-for-a-job-youve-created-for-aws-snowball-1482541987286", + "title": "To get the unlock code for a job you've created for AWS Snowball" + } + ], + "GetSnowballUsage": [ + { + "input": { + }, + "output": { + "SnowballLimit": 1, + "SnowballsInUse": 0 + }, + "comments": { + }, + "description": "Returns information about the Snowball service limit for your account, and also the number of Snowballs your account has in use.\n\nThe default service limit for the number of Snowballs that you can have at one time is 1. If you want to increase your service limit, contact AWS Support.", + "id": "to-see-your-snowball-service-limit-and-the-number-of-snowballs-you-have-in-use-1482863394588", + "title": "To see your Snowball service limit and the number of Snowballs you have in use" + } + ], + "ListClusterJobs": [ + { + "input": { + "ClusterId": "CID123e4567-e89b-12d3-a456-426655440000" + }, + "output": { + "JobListEntries": [ + { + "CreationDate": "1480475524.0", + "Description": "MyClustrer-node-001", + "IsMaster": false, + "JobId": "JID123e4567-e89b-12d3-a456-426655440000", + "JobState": "New", + "JobType": "LOCAL_USE", + "SnowballType": "EDGE" + }, + { + "CreationDate": "1480475525.0", + "Description": "MyClustrer-node-002", + "IsMaster": false, + "JobId": "JID123e4567-e89b-12d3-a456-426655440001", + "JobState": "New", + "JobType": "LOCAL_USE", + "SnowballType": "EDGE" + }, + { + "CreationDate": "1480475525.0", + "Description": "MyClustrer-node-003", + "IsMaster": false, + "JobId": "JID123e4567-e89b-12d3-a456-426655440002", + "JobState": "New", + "JobType": "LOCAL_USE", + "SnowballType": "EDGE" + }, + { + "CreationDate": "1480475525.0", + "Description": "MyClustrer-node-004", + "IsMaster": false, + "JobId": "JID123e4567-e89b-12d3-a456-426655440003", + "JobState": "New", + "JobType": "LOCAL_USE", + "SnowballType": "EDGE" + }, + { + "CreationDate": "1480475525.0", + "Description": "MyClustrer-node-005", + "IsMaster": false, + "JobId": "JID123e4567-e89b-12d3-a456-426655440004", + "JobState": "New", + "JobType": "LOCAL_USE", + "SnowballType": "EDGE" + } + ] + }, + "comments": { + }, + "description": "Returns an array of JobListEntry objects of the specified length. Each JobListEntry object is for a job in the specified cluster and contains a job's state, a job's ID, and other information.", + "id": "to-get-a-list-of-jobs-in-a-cluster-that-youve-created-for-aws-snowball-1482863105773", + "title": "To get a list of jobs in a cluster that you've created for AWS Snowball" + } + ], + "ListClusters": [ + { + "input": { + }, + "output": { + "ClusterListEntries": [ + { + "ClusterId": "CID123e4567-e89b-12d3-a456-426655440000", + "ClusterState": "Pending", + "CreationDate": "1480475517.0", + "Description": "MyCluster" + } + ] + }, + "comments": { + }, + "description": "Returns an array of ClusterListEntry objects of the specified length. Each ClusterListEntry object contains a cluster's state, a cluster's ID, and other important status information.", + "id": "to-get-a-list-of-clusters-that-youve-created-for-aws-snowball-1482862223003", + "title": "To get a list of clusters that you've created for AWS Snowball" + } + ], + "ListJobs": [ + { + "input": { + }, + "output": { + "JobListEntries": [ + { + "CreationDate": "1460678186.0", + "Description": "MyJob", + "IsMaster": false, + "JobId": "JID123e4567-e89b-12d3-a456-426655440000", + "JobState": "New", + "JobType": "IMPORT", + "SnowballType": "STANDARD" + } + ] + }, + "comments": { + }, + "description": "Returns an array of JobListEntry objects of the specified length. Each JobListEntry object contains a job's state, a job's ID, and a value that indicates whether the job is a job part, in the case of export jobs. Calling this API action in one of the US regions will return jobs from the list of all jobs associated with this account in all US regions.", + "id": "to-get-a-list-of-jobs-that-youve-created-for-aws-snowball-1482542167627", + "title": "To get a list of jobs that you've created for AWS Snowball" + } + ], + "UpdateCluster": [ + { + "input": { + "AddressId": "ADID1234ab12-3eec-4eb3-9be6-9374c10eb51b", + "ClusterId": "CID123e4567-e89b-12d3-a456-426655440000", + "Description": "updated-cluster-name" + }, + "comments": { + }, + "description": "This action allows you to update certain parameters for a cluster. Once the cluster changes to a different state, usually within 60 minutes of it being created, this action is no longer available.", + "id": "to-update-a-cluster-1482863900595", + "title": "To update a cluster" + } + ], + "UpdateJob": [ + { + "input": { + "AddressId": "ADID1234ab12-3eec-4eb3-9be6-9374c10eb51b", + "Description": "updated-job-name", + "JobId": "JID123e4567-e89b-12d3-a456-426655440000", + "ShippingOption": "NEXT_DAY", + "SnowballCapacityPreference": "T100" + }, + "comments": { + }, + "description": "This action allows you to update certain parameters for a job. Once the job changes to a different job state, usually within 60 minutes of the job being created, this action is no longer available.", + "id": "to-update-a-job-1482863556886", + "title": "To update a job" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/paginators-1.json new file mode 100644 index 00000000..05a7ea84 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "ListJobs": { + "limit_key": "MaxResults", + "output_token": "NextToken", + "input_token": "NextToken", + "result_key": "JobListEntries" + }, + "DescribeAddresses": { + "limit_key": "MaxResults", + "output_token": "NextToken", + "input_token": "NextToken", + "result_key": "Addresses" + }, + "ListClusterJobs": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "JobListEntries" + }, + "ListClusters": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ClusterListEntries" + }, + "ListCompatibleImages": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CompatibleImages" + }, + "ListLongTermPricing": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "LongTermPricingEntries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/service-2.json.gz new file mode 100644 index 00000000..cdfc823d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/snowball/2016-06-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..43b43c8e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/paginators-1.json new file mode 100644 index 00000000..5be5250d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/paginators-1.json @@ -0,0 +1,46 @@ +{ + "pagination": { + "ListEndpointsByPlatformApplication": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Endpoints" + }, + "ListPlatformApplications": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "PlatformApplications" + }, + "ListSubscriptions": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Subscriptions" + }, + "ListSubscriptionsByTopic": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Subscriptions" + }, + "ListTopics": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Topics" + }, + "ListPhoneNumbersOptedOut": { + "input_token": "nextToken", + "output_token": "nextToken", + "result_key": "phoneNumbers" + }, + "ListOriginationNumbers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PhoneNumbers" + }, + "ListSMSSandboxPhoneNumbers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PhoneNumbers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/service-2.json.gz new file mode 100644 index 00000000..aabef57d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sns/2010-03-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..b9e2cbe3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/paginators-1.json new file mode 100644 index 00000000..7c22d43a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListDeadLetterSourceQueues": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "queueUrls" + }, + "ListQueues": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "QueueUrls" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/service-2.json.gz new file mode 100644 index 00000000..76eeb6be Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sqs/2012-11-05/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..15ea1a5b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/examples-1.json new file mode 100644 index 00000000..d7c714d8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/examples-1.json @@ -0,0 +1,714 @@ +{ + "version": "1.0", + "examples": { + "AcceptPage": [ + { + "input": { + "AcceptCode": "425440", + "AcceptType": "READ", + "PageId": "arn:aws:ssm-contacts:us-east-2:682428703967:page/akuam/94ea0c7b-56d9-46c3-b84a-a37c8b067ad3" + }, + "output": { + }, + "comments": { + }, + "description": "The following accept-page operation uses an accept code sent to the contact channel to accept a page.", + "id": "to-accept-a-page-during-and-engagement-1630357840187", + "title": "To accept a page during and engagement" + } + ], + "ActivateContactChannel": [ + { + "input": { + "ActivationCode": "466136", + "ContactChannelId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/fc7405c4-46b2-48b7-87b2-93e2f225b90d" + }, + "output": { + }, + "comments": { + }, + "description": "The following activate-contact-channel example activates a contact channel and makes it usable as part of an incident.", + "id": "activate-a-contacts-contact-channel-1630359780075", + "title": "Activate a contact's contact channel" + } + ], + "CreateContact": [ + { + "input": { + "Alias": "akuam", + "DisplayName": "Akua Mansa", + "Plan": { + "Stages": [ + + ] + }, + "Type": "PERSONAL" + }, + "output": { + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam" + }, + "comments": { + }, + "description": "The following create-contact example creates a contact in your environment with a blank plan. The plan can be updated after creating contact channels. Use the create-contact-channel operation with the output ARN of this command. After you have created contact channels for this contact use update-contact to update the plan.", + "id": "to-create-a-contact-1630360152750", + "title": "To create a contact" + } + ], + "CreateContactChannel": [ + { + "input": { + "ContactId": "arn:aws:ssm-contacts:us-east-1:111122223333:contact/akuam", + "DeliveryAddress": { + "SimpleAddress": "+15005550199" + }, + "Name": "akuas sms-test", + "Type": "SMS" + }, + "output": { + "ContactChannelArn": "arn:aws:ssm-contacts:us-east-1:111122223333:contact-channel/akuam/02f506b9-ea5d-4764-af89-2daa793ff024" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a contact channel of type SMS for the contact Akua Mansa. Contact channels can be created of type SMS, EMAIL, or VOICE.", + "id": "to-create-a-contact-channel-1630360447010", + "title": "To create a contact channel" + } + ], + "DeactivateContactChannel": [ + { + "input": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/fc7405c4-46b2-48b7-87b2-93e2f225b90d" + }, + "output": { + }, + "comments": { + }, + "description": "The following ``deactivate-contact-channel`` example deactivates a contact channel. Deactivating a contact channel means the contact channel will no longer be paged during an incident. You can also reactivate a contact channel at any time using the activate-contact-channel operation.", + "id": "to-deactivate-a-contact-channel-1630360853894", + "title": "To deactivate a contact channel" + } + ], + "DeleteContact": [ + { + "input": { + "ContactId": "arn:aws:ssm-contacts:us-east-1:111122223333:contact/alejr" + }, + "output": { + }, + "comments": { + }, + "description": "The following delete-contact example deletes a contact. The contact will no longer be reachable from any escalation plan that refers to them.", + "id": "to-delete-a-contact-1630361093863", + "title": "To delete a contact" + } + ], + "DeleteContactChannel": [ + { + "input": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-1:111122223333:contact-channel/akuam/13149bad-52ee-45ea-ae1e-45857f78f9b2" + }, + "output": { + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following delete-contact-channel example deletes a contact channel. Deleting a contact channel ensures the contact channel will not be paged during an incident.", + "id": "to-delete-a-contact-channel-1630364616682", + "title": "To delete a contact channel" + } + ], + "DescribeEngagement": [ + { + "input": { + "EngagementId": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/example_escalation/69e40ce1-8dbb-4d57-8962-5fbe7fc53356" + }, + "output": { + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/example_escalation", + "Content": "Testing engagements", + "EngagementArn": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/example_escalation/69e40ce1-8dbb-4d57-8962-5fbe7fc53356", + "PublicContent": "Testing engagements", + "PublicSubject": "test", + "Sender": "tester", + "StartTime": "2021-05-18T18:25:41.151000+00:00", + "Subject": "test" + }, + "comments": { + }, + "description": "The following describe-engagement example lists the details of an engagement to a contact or escalation plan. The subject and content are sent to the contact channels.", + "id": "to-describe-the-details-of-an-engagement-1630364719475", + "title": "To describe the details of an engagement" + } + ], + "DescribePage": [ + { + "input": { + "PageId": "arn:aws:ssm-contacts:us-east-2:111122223333:page/akuam/ad0052bd-e606-498a-861b-25726292eb93" + }, + "output": { + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "Content": "Testing engagements", + "DeliveryTime": "2021-05-18T18:43:55.265000+00:00", + "EngagementArn": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/akuam/78a29753-3674-4ac5-9f83-0468563567f0", + "PageArn": "arn:aws:ssm-contacts:us-east-2:111122223333:page/akuam/ad0052bd-e606-498a-861b-25726292eb93", + "PublicContent": "Testing engagements", + "PublicSubject": "test", + "ReadTime": "2021-05-18T18:43:55.708000+00:00", + "Sender": "tester", + "SentTime": "2021-05-18T18:43:29.301000+00:00", + "Subject": "test" + }, + "comments": { + }, + "description": "The following describe-page example lists details of a page to a contact channel. The page will include the subject and content provided.", + "id": "to-list-the-details-of-a-page-to-a-contact-channel-1630364907282", + "title": "To list the details of a page to a contact channel" + } + ], + "GetContact": [ + { + "input": { + "ContactId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam" + }, + "output": { + "Alias": "akuam", + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "DisplayName": "Akua Mansa", + "Plan": { + "Stages": [ + { + "DurationInMinutes": 5, + "Targets": [ + { + "ChannelTargetInfo": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/beb25840-5ac8-4644-95cc-7a8de390fa65", + "RetryIntervalInMinutes": 1 + } + } + ] + }, + { + "DurationInMinutes": 5, + "Targets": [ + { + "ChannelTargetInfo": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/49f3c24d-5f9f-4638-ae25-3f49e04229ad", + "RetryIntervalInMinutes": 1 + } + } + ] + }, + { + "DurationInMinutes": 5, + "Targets": [ + { + "ChannelTargetInfo": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/77d4f447-f619-4954-afff-85551e369c2a", + "RetryIntervalInMinutes": 1 + } + } + ] + } + ] + }, + "Type": "PERSONAL" + }, + "comments": { + }, + "description": "The following get-contact example describes a contact.", + "id": "example-1-to-describe-a-contact-plan-1630365360005", + "title": "Example 1: To describe a contact plan" + }, + { + "input": { + "ContactId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/example_escalation" + }, + "output": { + "Alias": "example_escalation", + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/example_escalation", + "DisplayName": "Example Escalation Plan", + "Plan": { + "Stages": [ + { + "DurationInMinutes": 5, + "Targets": [ + { + "ContactTargetInfo": { + "ContactId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "IsEssential": true + } + } + ] + }, + { + "DurationInMinutes": 5, + "Targets": [ + { + "ContactTargetInfo": { + "ContactId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/alejr", + "IsEssential": false + } + } + ] + }, + { + "DurationInMinutes": 0, + "Targets": [ + { + "ContactTargetInfo": { + "ContactId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/anasi", + "IsEssential": false + } + } + ] + } + ] + }, + "Type": "ESCALATION" + }, + "comments": { + }, + "description": "The following get-contact example describes an escalation plan.", + "id": "example-2-to-describe-an-escalation-plan-1630365515731", + "title": "Example 2: To describe an escalation plan" + } + ], + "GetContactChannel": [ + { + "input": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/fc7405c4-46b2-48b7-87b2-93e2f225b90d" + }, + "output": { + "ActivationStatus": "ACTIVATED", + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "ContactChannelArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/fc7405c4-46b2-48b7-87b2-93e2f225b90d", + "DeliveryAddress": { + "SimpleAddress": "+15005550199" + }, + "Name": "akuas sms", + "Type": "SMS" + }, + "comments": { + }, + "description": "The following get-contact-channel example lists the details of a contact channel.", + "id": "to-list-the-details-of-a-contact-channel-1630365682730", + "title": "To list the details of a contact channel" + } + ], + "GetContactPolicy": [ + { + "input": { + "ContactArn": "arn:aws:ssm-contacts:us-east-1:111122223333:contact/akuam" + }, + "output": { + "ContactArn": "arn:aws:ssm-contacts:us-east-1:111122223333:contact/akuam", + "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"SharePolicyForDocumentationDralia\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"222233334444\"},\"Action\":[\"ssm-contacts:GetContact\",\"ssm-contacts:StartEngagement\",\"ssm-contacts:DescribeEngagement\",\"ssm-contacts:ListPagesByEngagement\",\"ssm-contacts:StopEngagement\"],\"Resource\":[\"arn:aws:ssm-contacts:*:111122223333:contact/akuam\",\"arn:aws:ssm-contacts:*:111122223333:engagement/akuam/*\"]}]}" + }, + "comments": { + }, + "description": "The following get-contact-policy example lists the resource policies associated with the specified contact.", + "id": "to-list-the-details-of-a-contact-channel-1630365682730", + "title": "To list the resource policies of a contact" + } + ], + "ListContactChannels": [ + { + "input": { + "ContactId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam" + }, + "output": { + "ContactChannels": [ + { + "ActivationStatus": "ACTIVATED", + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "ContactChannelArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/fc7405c4-46b2-48b7-87b2-93e2f225b90d", + "DeliveryAddress": { + "SimpleAddress": "+15005550100" + }, + "Name": "akuas sms", + "Type": "SMS" + } + ] + }, + "comments": { + }, + "description": "The following list-contact-channels example lists the available contact channels of the specified contact.", + "id": "to-list-the-contact-channels-of-a-contact-1630366544252", + "title": "To list the contact channels of a contact" + } + ], + "ListContacts": [ + { + "input": { + }, + "output": { + "Contacts": [ + { + "Alias": "akuam", + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "DisplayName": "Akua Mansa", + "Type": "PERSONAL" + }, + { + "Alias": "alejr", + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/alejr", + "DisplayName": "Alejandro Rosalez", + "Type": "PERSONAL" + }, + { + "Alias": "anasi", + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/anasi", + "DisplayName": "Ana Carolina Silva", + "Type": "PERSONAL" + }, + { + "Alias": "example_escalation", + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/example_escalation", + "DisplayName": "Example Escalation", + "Type": "ESCALATION" + } + ] + }, + "comments": { + }, + "description": "The following list-contacts example lists the contacts and escalation plans in your account.", + "id": "to-list-all-escalation-plans-and-contacts-1630367103082", + "title": "To list all escalation plans and contacts" + } + ], + "ListEngagements": [ + { + "input": { + }, + "output": { + "Engagements": [ + { + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "EngagementArn": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/akuam/91792571-0b53-4821-9f73-d25d13d9e529", + "Sender": "cli", + "StartTime": "2021-05-18T20:37:50.300000+00:00" + }, + { + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "EngagementArn": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/akuam/78a29753-3674-4ac5-9f83-0468563567f0", + "Sender": "cli", + "StartTime": "2021-05-18T18:40:26.666000+00:00" + }, + { + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/example_escalation", + "EngagementArn": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/example_escalation/69e40ce1-8dbb-4d57-8962-5fbe7fc53356", + "Sender": "cli", + "StartTime": "2021-05-18T18:25:41.151000+00:00" + }, + { + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "EngagementArn": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/akuam/607ced0e-e8fa-4ea7-8958-a237b8803f8f", + "Sender": "cli", + "StartTime": "2021-05-18T18:20:58.093000+00:00" + } + ] + }, + "comments": { + }, + "description": "The following list-engagements example lists engagements to escalation plans and contacts. You can also list engagements for a single incident.", + "id": "to-list-all-engagements-1630367432635", + "title": "To list all engagements" + } + ], + "ListPageReceipts": [ + { + "input": { + "PageId": "arn:aws:ssm-contacts:us-east-2:111122223333:page/akuam/94ea0c7b-56d9-46c3-b84a-a37c8b067ad3" + }, + "output": { + "Receipts": [ + { + "ContactChannelArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/fc7405c4-46b2-48b7-87b2-93e2f225b90d", + "ReceiptInfo": "425440", + "ReceiptTime": "2021-05-18T20:42:57.485000+00:00", + "ReceiptType": "DELIVERED" + }, + { + "ContactChannelArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/fc7405c4-46b2-48b7-87b2-93e2f225b90d", + "ReceiptInfo": "425440", + "ReceiptTime": "2021-05-18T20:42:57.907000+00:00", + "ReceiptType": "READ" + }, + { + "ContactChannelArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/fc7405c4-46b2-48b7-87b2-93e2f225b90d", + "ReceiptInfo": "SM6656c19132f1465f9c9c1123a5dde7c9", + "ReceiptTime": "2021-05-18T20:40:52.962000+00:00", + "ReceiptType": "SENT" + } + ] + }, + "comments": { + }, + "description": "The following command-name example lists whether a page was received or not by a contact.", + "id": "to-list-page-receipts-1630367706869", + "title": "To list page receipts" + } + ], + "ListPagesByContact": [ + { + "input": { + "ContactId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam" + }, + "output": { + "Pages": [ + { + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "DeliveryTime": "2021-05-18T18:43:55.265000+00:00", + "EngagementArn": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/akuam/78a29753-3674-4ac5-9f83-0468563567f0", + "PageArn": "arn:aws:ssm-contacts:us-east-2:111122223333:page/akuam/ad0052bd-e606-498a-861b-25726292eb93", + "ReadTime": "2021-05-18T18:43:55.708000+00:00", + "Sender": "cli", + "SentTime": "2021-05-18T18:43:29.301000+00:00" + } + ] + }, + "comments": { + }, + "description": "The following list-pages-by-contact example lists all pages to the specified contact.", + "id": "to-list-pages-by-contact-1630435789132", + "title": "To list pages by contact" + } + ], + "ListPagesByEngagement": [ + { + "input": { + "EngagementId": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/akuam/78a29753-3674-4ac5-9f83-0468563567f0" + }, + "output": { + "Pages": [ + { + "ContactArn": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "EngagementArn": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/akuam/78a29753-3674-4ac5-9f83-0468563567f0", + "PageArn": "arn:aws:ssm-contacts:us-east-2:111122223333:page/akuam/ad0052bd-e606-498a-861b-25726292eb93", + "Sender": "cli", + "SentTime": "2021-05-18T18:40:27.245000+00:00" + } + ] + }, + "comments": { + }, + "description": "The following list-pages-by-engagement example lists the pages that occurred while engaging the defined engagement plan.", + "id": "to-list-pages-to-contact-channels-started-from-an-engagement-1630435864674", + "title": "To list pages to contact channels started from an engagement." + } + ], + "ListTagsForResource": [ + { + "input": { + "ResourceARN": "arn:aws:ssm-contacts:us-east-1:111122223333:contact/akuam" + }, + "output": { + "Tags": [ + { + "Key": "group1", + "Value": "1" + } + ] + }, + "comments": { + }, + "description": "The following list-tags-for-resource example lists the tags of the specified contact.", + "id": "to-list-tags-for-a-contact-1630436051681", + "title": "To list tags for a contact" + } + ], + "PutContactPolicy": [ + { + "input": { + "ContactArn": "arn:aws:ssm-contacts:us-east-1:111122223333:contact/akuam", + "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"ExampleResourcePolicy\",\"Action\":[\"ssm-contacts:GetContact\",\"ssm-contacts:StartEngagement\",\"ssm-contacts:DescribeEngagement\",\"ssm-contacts:ListPagesByEngagement\",\"ssm-contacts:StopEngagement\"],\"Principal\":{\"AWS\":\"222233334444\"},\"Effect\":\"Allow\",\"Resource\":[\"arn:aws:ssm-contacts:*:111122223333:contact/akuam\",\"arn:aws:ssm-contacts:*:111122223333:engagement/akuam/*\"]}]}" + }, + "output": { + }, + "comments": { + }, + "description": "The following put-contact-policy example adds a resource policy to the contact Akua that shares the contact and related engagements with the principal.", + "id": "to-share-a-contact-and-engagements-1630436278898", + "title": "To share a contact and engagements" + } + ], + "SendActivationCode": [ + { + "input": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-1:111122223333:contact-channel/akuam/8ddae2d1-12c8-4e45-b852-c8587266c400" + }, + "output": { + }, + "comments": { + }, + "description": "The following send-activation-code example sends an activation code and message to the specified contact channel.", + "id": "to-send-an-activation-code-1630436453574", + "title": "To send an activation code" + } + ], + "StartEngagement": [ + { + "input": { + "ContactId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "Content": "Testing engagements", + "PublicContent": "Testing engagements", + "PublicSubject": "test", + "Sender": "tester", + "Subject": "test" + }, + "output": { + "EngagementArn": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/akuam/607ced0e-e8fa-4ea7-8958-a237b8803f8f" + }, + "comments": { + }, + "description": "The following start-engagement pages contact's contact channels. Sender, subject, public-subject, and public-content are all free from fields. Incident Manager sends the subject and content to the provided VOICE or EMAIL contact channels. Incident Manager sends the public-subject and public-content to the provided SMS contact channels. Sender is used to track who started the engagement.", + "id": "example-1-to-page-a-contacts-contact-channels-1630436634872", + "title": "Example 1: To page a contact's contact channels" + }, + { + "input": { + "ContactId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/example_escalation", + "Content": "Testing engagements", + "PublicContent": "Testing engagements", + "PublicSubject": "test", + "Sender": "tester", + "Subject": "test" + }, + "output": { + "EngagementArn": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/example_escalation/69e40ce1-8dbb-4d57-8962-5fbe7fc53356" + }, + "comments": { + }, + "description": "The following start-engagement engages contact's through an escalation plan. Each contact is paged according to their engagement plan.", + "id": "example-2-to-page-a-contact-in-the-provided-escalation-plan-1630436808480", + "title": "Example 2: To page a contact in the provided escalation plan." + } + ], + "StopEngagement": [ + { + "input": { + "EngagementId": "arn:aws:ssm-contacts:us-east-2:111122223333:engagement/example_escalation/69e40ce1-8dbb-4d57-8962-5fbe7fc53356" + }, + "output": { + }, + "comments": { + }, + "description": "The following stop-engagement example stops an engagement from paging further contacts and contact channels.", + "id": "to-stop-an-engagement-1630436882864", + "title": "To stop an engagement" + } + ], + "TagResource": [ + { + "input": { + "ResourceARN": "arn:aws:ssm-contacts:us-east-1:111122223333:contact/akuam", + "Tags": [ + { + "Key": "group1", + "Value": "1" + } + ] + }, + "output": { + }, + "comments": { + }, + "description": "The following tag-resource example tags a specified contact with the provided tag key value pair.", + "id": "to-tag-a-contact-1630437124572", + "title": "To tag a contact" + } + ], + "UntagResource": [ + { + "input": { + "ResourceARN": "arn:aws:ssm-contacts:us-east-1:111122223333:contact/akuam", + "TagKeys": [ + "group1" + ] + }, + "output": { + }, + "comments": { + }, + "description": "The following untag-resource example removes the group1 tag from the specified contact.", + "id": "to-remove-tags-from-a-contact-1630437251110", + "title": "To remove tags from a contact" + } + ], + "UpdateContact": [ + { + "input": { + "ContactId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact/akuam", + "Plan": { + "Stages": [ + { + "DurationInMinutes": 5, + "Targets": [ + { + "ChannelTargetInfo": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/beb25840-5ac8-4644-95cc-7a8de390fa65", + "RetryIntervalInMinutes": 1 + } + } + ] + }, + { + "DurationInMinutes": 5, + "Targets": [ + { + "ChannelTargetInfo": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/49f3c24d-5f9f-4638-ae25-3f49e04229ad", + "RetryIntervalInMinutes": 1 + } + } + ] + }, + { + "DurationInMinutes": 5, + "Targets": [ + { + "ChannelTargetInfo": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/77d4f447-f619-4954-afff-85551e369c2a", + "RetryIntervalInMinutes": 1 + } + } + ] + } + ] + } + }, + "output": { + }, + "comments": { + }, + "description": "The following update-contact example updates the engagement plan of the contact Akua to include the three types of contacts channels. This is done after creating contact channels for Akua.", + "id": "to-update-the-engagement-plan-of-contact-1630437436599", + "title": "To update the engagement plan of contact" + } + ], + "UpdateContactChannel": [ + { + "input": { + "ContactChannelId": "arn:aws:ssm-contacts:us-east-2:111122223333:contact-channel/akuam/49f3c24d-5f9f-4638-ae25-3f49e04229ad", + "DeliveryAddress": { + "SimpleAddress": "+15005550198" + }, + "Name": "akuas voice channel" + }, + "output": { + }, + "comments": { + }, + "description": "The following update-contact-channel example updates the name and delivery address of a contact channel.", + "id": "to-update-a-contact-channel-1630437610256", + "title": "To update a contact channel" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/paginators-1.json new file mode 100644 index 00000000..621bde80 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/paginators-1.json @@ -0,0 +1,69 @@ +{ + "pagination": { + "ListContactChannels": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ContactChannels" + }, + "ListContacts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Contacts" + }, + "ListEngagements": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Engagements" + }, + "ListPageReceipts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Receipts" + }, + "ListPagesByContact": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Pages" + }, + "ListPagesByEngagement": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Pages" + }, + "ListPageResolutions": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "PageResolutions" + }, + "ListPreviewRotationShifts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "RotationShifts" + }, + "ListRotationOverrides": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "RotationOverrides" + }, + "ListRotationShifts": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "RotationShifts" + }, + "ListRotations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Rotations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/service-2.json.gz new file mode 100644 index 00000000..e99f17e1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-contacts/2021-05-03/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e86305f9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/paginators-1.json new file mode 100644 index 00000000..662c714f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/paginators-1.json @@ -0,0 +1,46 @@ +{ + "pagination": { + "GetResourcePolicies": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "resourcePolicies" + }, + "ListIncidentRecords": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "incidentRecordSummaries" + }, + "ListRelatedItems": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "relatedItems" + }, + "ListReplicationSets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "replicationSetArns" + }, + "ListResponsePlans": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "responsePlanSummaries" + }, + "ListTimelineEvents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "eventSummaries" + }, + "ListIncidentFindings": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "findings" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..a6938c44 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/waiters-2.json new file mode 100644 index 00000000..47c19b3a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-incidents/2018-05-10/waiters-2.json @@ -0,0 +1,53 @@ +{ + "version" : 2, + "waiters" : { + "WaitForReplicationSetActive" : { + "description" : "Wait for a replication set to become ACTIVE", + "delay" : 30, + "maxAttempts" : 5, + "operation" : "GetReplicationSet", + "acceptors" : [ { + "matcher" : "path", + "argument" : "replicationSet.status", + "state" : "success", + "expected" : "ACTIVE" + }, { + "matcher" : "path", + "argument" : "replicationSet.status", + "state" : "retry", + "expected" : "CREATING" + }, { + "matcher" : "path", + "argument" : "replicationSet.status", + "state" : "retry", + "expected" : "UPDATING" + }, { + "matcher" : "path", + "argument" : "replicationSet.status", + "state" : "failure", + "expected" : "FAILED" + } ] + }, + "WaitForReplicationSetDeleted" : { + "description" : "Wait for a replication set to be deleted", + "delay" : 30, + "maxAttempts" : 5, + "operation" : "GetReplicationSet", + "acceptors" : [ { + "matcher" : "error", + "state" : "success", + "expected" : "ResourceNotFoundException" + }, { + "matcher" : "path", + "argument" : "replicationSet.status", + "state" : "retry", + "expected" : "DELETING" + }, { + "matcher" : "path", + "argument" : "replicationSet.status", + "state" : "failure", + "expected" : "FAILED" + } ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-sap/2018-05-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-sap/2018-05-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..5857f906 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-sap/2018-05-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-sap/2018-05-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-sap/2018-05-10/paginators-1.json new file mode 100644 index 00000000..1b25777b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-sap/2018-05-10/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListApplications": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Applications" + }, + "ListComponents": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Components" + }, + "ListDatabases": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Databases" + }, + "ListOperations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Operations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-sap/2018-05-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-sap/2018-05-10/service-2.json.gz new file mode 100644 index 00000000..e2de7e0d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm-sap/2018-05-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..fb2c3739 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/paginators-1.json new file mode 100644 index 00000000..871cef8b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/paginators-1.json @@ -0,0 +1,286 @@ +{ + "pagination": { + "ListAssociations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Associations" + }, + "ListCommandInvocations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "CommandInvocations" + }, + "ListCommands": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Commands" + }, + "ListDocuments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DocumentIdentifiers" + }, + "DescribeInstanceInformation": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "InstanceInformationList" + }, + "DescribeActivations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ActivationList" + }, + "DescribeParameters": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Parameters" + }, + "DescribeAssociationExecutions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AssociationExecutions" + }, + "DescribeAssociationExecutionTargets": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AssociationExecutionTargets" + }, + "GetInventory": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Entities" + }, + "GetParametersByPath": { + "result_key": "Parameters", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "GetParameterHistory": { + "result_key": "Parameters", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "DescribeAutomationExecutions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AutomationExecutionMetadataList" + }, + "DescribeAutomationStepExecutions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "StepExecutions" + }, + "DescribeAvailablePatches": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Patches" + }, + "DescribeEffectiveInstanceAssociations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Associations" + }, + "DescribeEffectivePatchesForPatchBaseline": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "EffectivePatches" + }, + "DescribeInstanceAssociationsStatus": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InstanceAssociationStatusInfos" + }, + "DescribeInstancePatchStates": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InstancePatchStates" + }, + "DescribeInstancePatchStatesForPatchGroup": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InstancePatchStates" + }, + "DescribeInstancePatches": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Patches" + }, + "DescribeInventoryDeletions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "InventoryDeletions" + }, + "DescribeMaintenanceWindowExecutionTaskInvocations": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "WindowExecutionTaskInvocationIdentities" + }, + "DescribeMaintenanceWindowExecutionTasks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "WindowExecutionTaskIdentities" + }, + "DescribeMaintenanceWindowExecutions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "WindowExecutions" + }, + "DescribeMaintenanceWindowSchedule": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ScheduledWindowExecutions" + }, + "DescribeMaintenanceWindowTargets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Targets" + }, + "DescribeMaintenanceWindowTasks": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Tasks" + }, + "DescribeMaintenanceWindows": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "WindowIdentities" + }, + "DescribeMaintenanceWindowsForTarget": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "WindowIdentities" + }, + "DescribePatchBaselines": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "BaselineIdentities" + }, + "DescribePatchGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Mappings" + }, + "DescribeSessions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Sessions" + }, + "GetInventorySchema": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Schemas" + }, + "ListAssociationVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AssociationVersions" + }, + "ListComplianceItems": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ComplianceItems" + }, + "ListComplianceSummaries": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ComplianceSummaryItems" + }, + "ListDocumentVersions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "DocumentVersions" + }, + "ListResourceComplianceSummaries": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ResourceComplianceSummaryItems" + }, + "ListResourceDataSync": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ResourceDataSyncItems" + }, + "DescribeOpsItems": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "OpsItemSummaries" + }, + "DescribePatchProperties": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Properties" + }, + "GetOpsSummary": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Entities" + }, + "ListOpsItemEvents": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Summaries" + }, + "ListOpsMetadata": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "OpsMetadataList" + }, + "ListOpsItemRelatedItems": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Summaries" + }, + "GetResourcePolicies": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Policies" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/service-2.json.gz new file mode 100644 index 00000000..07f97cd9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/waiters-2.json new file mode 100644 index 00000000..43f5237f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/ssm/2014-11-06/waiters-2.json @@ -0,0 +1,65 @@ +{ + "version": 2, + "waiters": { + "CommandExecuted": { + "delay": 5, + "operation": "GetCommandInvocation", + "maxAttempts": 20, + "acceptors": [ + { + "expected": "Pending", + "matcher": "path", + "state": "retry", + "argument": "Status" + }, + { + "expected": "InProgress", + "matcher": "path", + "state": "retry", + "argument": "Status" + }, + { + "expected": "Delayed", + "matcher": "path", + "state": "retry", + "argument": "Status" + }, + { + "expected": "Success", + "matcher": "path", + "state": "success", + "argument": "Status" + }, + { + "expected": "Cancelled", + "matcher": "path", + "state": "failure", + "argument": "Status" + }, + { + "expected": "TimedOut", + "matcher": "path", + "state": "failure", + "argument": "Status" + }, + { + "expected": "Failed", + "matcher": "path", + "state": "failure", + "argument": "Status" + }, + { + "expected": "Cancelling", + "matcher": "path", + "state": "failure", + "argument": "Status" + }, + { + "state": "retry", + "matcher": "error", + "expected": "InvocationDoesNotExist" + } + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..504d606d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/paginators-1.json new file mode 100644 index 00000000..d2c8b687 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/paginators-1.json @@ -0,0 +1,121 @@ +{ + "pagination": { + "ListAccountAssignmentCreationStatus": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AccountAssignmentsCreationStatus" + }, + "ListAccountAssignmentDeletionStatus": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AccountAssignmentsDeletionStatus" + }, + "ListAccountAssignments": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AccountAssignments" + }, + "ListAccountsForProvisionedPermissionSet": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AccountIds" + }, + "ListInstances": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Instances" + }, + "ListManagedPoliciesInPermissionSet": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "AttachedManagedPolicies" + }, + "ListPermissionSetProvisioningStatus": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PermissionSetsProvisioningStatus" + }, + "ListPermissionSets": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PermissionSets" + }, + "ListPermissionSetsProvisionedToAccount": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "PermissionSets" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Tags" + }, + "ListCustomerManagedPolicyReferencesInPermissionSet": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "CustomerManagedPolicyReferences" + }, + "ListAccountAssignmentsForPrincipal": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AccountAssignments" + }, + "ListApplicationAccessScopes": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Scopes" + }, + "ListApplicationAssignments": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ApplicationAssignments" + }, + "ListApplicationAssignmentsForPrincipal": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ApplicationAssignments" + }, + "ListApplicationAuthenticationMethods": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "AuthenticationMethods" + }, + "ListApplicationGrants": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Grants" + }, + "ListApplicationProviders": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "ApplicationProviders" + }, + "ListApplications": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Applications" + }, + "ListTrustedTokenIssuers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "TrustedTokenIssuers" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/service-2.json.gz new file mode 100644 index 00000000..f12f0b71 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-admin/2020-07-20/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..bac12149 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/service-2.json.gz new file mode 100644 index 00000000..82b20a0e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sso-oidc/2019-06-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f83d786b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/paginators-1.json new file mode 100644 index 00000000..daaed6fe --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListAccountRoles": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "roleList" + }, + "ListAccounts": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "accountList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/service-2.json.gz new file mode 100644 index 00000000..e11c4b72 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sso/2019-06-10/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e7f018dd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/paginators-1.json new file mode 100644 index 00000000..fb8eb5e5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "GetExecutionHistory": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "events" + }, + "ListActivities": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "activities" + }, + "ListExecutions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "executions" + }, + "ListStateMachines": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "stateMachines" + }, + "ListMapRuns": { + "input_token": "nextToken", + "limit_key": "maxResults", + "output_token": "nextToken", + "result_key": "mapRuns" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/service-2.json.gz new file mode 100644 index 00000000..ac719eab Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/stepfunctions/2016-11-23/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..4708ef6a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/examples-1.json new file mode 100644 index 00000000..7cc0d7d4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/examples-1.json @@ -0,0 +1,1381 @@ +{ + "version": "1.0", + "examples": { + "ActivateGateway": [ + { + "input": { + "ActivationKey": "29AV1-3OFV9-VVIUB-NKT0I-LRO6V", + "GatewayName": "My_Gateway", + "GatewayRegion": "us-east-1", + "GatewayTimezone": "GMT-12:00", + "GatewayType": "STORED", + "MediumChangerType": "AWS-Gateway-VTL", + "TapeDriveType": "IBM-ULT3580-TD5" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-11A2222B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Activates the gateway you previously deployed on your host.", + "id": "to-activate-the-gateway-1471281611207", + "title": "To activate the gateway" + } + ], + "AddCache": [ + { + "input": { + "DiskIds": [ + "pci-0000:03:00.0-scsi-0:0:0:0", + "pci-0000:03:00.0-scsi-0:0:1:0" + ], + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example shows a request that activates a gateway-stored volume.", + "id": "to-add-a-cache-1471043606854", + "title": "To add a cache" + } + ], + "AddTagsToResource": [ + { + "input": { + "ResourceARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-11A2222B", + "Tags": [ + { + "Key": "Dev Gatgeway Region", + "Value": "East Coast" + } + ] + }, + "output": { + "ResourceARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-11A2222B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Adds one or more tags to the specified resource.", + "id": "to-add-tags-to-resource-1471283689460", + "title": "To add tags to resource" + } + ], + "AddUploadBuffer": [ + { + "input": { + "DiskIds": [ + "pci-0000:03:00.0-scsi-0:0:0:0", + "pci-0000:03:00.0-scsi-0:0:1:0" + ], + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Configures one or more gateway local disks as upload buffer for a specified gateway.", + "id": "to-add-upload-buffer-on-local-disk-1471293902847", + "title": "To add upload buffer on local disk" + } + ], + "AddWorkingStorage": [ + { + "input": { + "DiskIds": [ + "pci-0000:03:00.0-scsi-0:0:0:0", + "pci-0000:03:00.0-scsi-0:0:1:0" + ], + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Configures one or more gateway local disks as working storage for a gateway. (Working storage is also referred to as upload buffer.)", + "id": "to-add-storage-on-local-disk-1471294305401", + "title": "To add storage on local disk" + } + ], + "CancelArchival": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/AMZN01A2A4" + }, + "output": { + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/AMZN01A2A4" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Cancels archiving of a virtual tape to the virtual tape shelf (VTS) after the archiving process is initiated.", + "id": "to-cancel-virtual-tape-archiving-1471294865203", + "title": "To cancel virtual tape archiving" + } + ], + "CancelRetrieval": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/AMZN01A2A4" + }, + "output": { + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/AMZN01A2A4" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Cancels retrieval of a virtual tape from the virtual tape shelf (VTS) to a gateway after the retrieval process is initiated.", + "id": "to-cancel-virtual-tape-retrieval-1471295704491", + "title": "To cancel virtual tape retrieval" + } + ], + "CreateCachediSCSIVolume": [ + { + "input": { + "ClientToken": "cachedvol112233", + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "NetworkInterfaceId": "10.1.1.1", + "SnapshotId": "snap-f47b7b94", + "TargetName": "my-volume", + "VolumeSizeInBytes": 536870912000 + }, + "output": { + "TargetARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:myvolume", + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a cached volume on a specified cached gateway.", + "id": "to-create-a-cached-iscsi-volume-1471296661787", + "title": "To create a cached iSCSI volume" + } + ], + "CreateSnapshot": [ + { + "input": { + "SnapshotDescription": "My root volume snapshot as of 10/03/2017", + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "output": { + "SnapshotId": "snap-78e22663", + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Initiates an ad-hoc snapshot of a gateway volume.", + "id": "to-create-a-snapshot-of-a-gateway-volume-1471301469561", + "title": "To create a snapshot of a gateway volume" + } + ], + "CreateSnapshotFromVolumeRecoveryPoint": [ + { + "input": { + "SnapshotDescription": "My root volume snapshot as of 2017-06-30T10:10:10.000Z", + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "output": { + "SnapshotId": "snap-78e22663", + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB", + "VolumeRecoveryPointTime": "2017-06-30T10:10:10.000Z" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Initiates a snapshot of a gateway from a volume recovery point.", + "id": "to-create-a-snapshot-of-a-gateway-volume-1471301469561", + "title": "To create a snapshot of a gateway volume" + } + ], + "CreateStorediSCSIVolume": [ + { + "input": { + "DiskId": "pci-0000:03:00.0-scsi-0:0:0:0", + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "NetworkInterfaceId": "10.1.1.1", + "PreserveExistingData": true, + "SnapshotId": "snap-f47b7b94", + "TargetName": "my-volume" + }, + "output": { + "TargetARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:myvolume", + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB", + "VolumeSizeInBytes": 1099511627776 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a stored volume on a specified stored gateway.", + "id": "to-create-a-stored-iscsi-volume-1471367662813", + "title": "To create a stored iSCSI volume" + } + ], + "CreateTapeWithBarcode": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B", + "TapeBarcode": "TEST12345", + "TapeSizeInBytes": 107374182400 + }, + "output": { + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/TEST12345" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates a virtual tape by using your own barcode.", + "id": "to-create-a-virtual-tape-using-a-barcode-1471371842452", + "title": "To create a virtual tape using a barcode" + } + ], + "CreateTapes": [ + { + "input": { + "ClientToken": "77777", + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B", + "NumTapesToCreate": 3, + "TapeBarcodePrefix": "TEST", + "TapeSizeInBytes": 107374182400 + }, + "output": { + "TapeARNs": [ + "arn:aws:storagegateway:us-east-1:999999999999:tape/TEST38A29D", + "arn:aws:storagegateway:us-east-1:204469490176:tape/TEST3AA29F", + "arn:aws:storagegateway:us-east-1:204469490176:tape/TEST3BA29E" + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Creates one or more virtual tapes.", + "id": "to-create-a-virtual-tape-1471372061659", + "title": "To create a virtual tape" + } + ], + "DeleteBandwidthRateLimit": [ + { + "input": { + "BandwidthType": "All", + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the bandwidth rate limits of a gateway; either the upload or download limit, or both.", + "id": "to-delete-bandwidth-rate-limits-of-gateway-1471373225520", + "title": "To delete bandwidth rate limits of gateway" + } + ], + "DeleteChapCredentials": [ + { + "input": { + "InitiatorName": "iqn.1991-05.com.microsoft:computername.domain.example.com", + "TargetARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:myvolume" + }, + "output": { + "InitiatorName": "iqn.1991-05.com.microsoft:computername.domain.example.com", + "TargetARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:myvolume" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes Challenge-Handshake Authentication Protocol (CHAP) credentials for a specified iSCSI target and initiator pair.", + "id": "to-delete-chap-credentials-1471375025612", + "title": "To delete CHAP credentials" + } + ], + "DeleteGateway": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation deletes the gateway, but not the gateway's VM from the host computer.", + "id": "to-delete-a-gatgeway-1471381697333", + "title": "To delete a gatgeway" + } + ], + "DeleteSnapshotSchedule": [ + { + "input": { + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "output": { + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This action enables you to delete a snapshot schedule for a volume.", + "id": "to-delete-a-snapshot-of-a-volume-1471382234377", + "title": "To delete a snapshot of a volume" + } + ], + "DeleteTape": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:204469490176:gateway/sgw-12A3456B", + "TapeARN": "arn:aws:storagegateway:us-east-1:204469490176:tape/TEST05A2A0" + }, + "output": { + "TapeARN": "arn:aws:storagegateway:us-east-1:204469490176:tape/TEST05A2A0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example deletes the specified virtual tape.", + "id": "to-delete-a-virtual-tape-1471382444157", + "title": "To delete a virtual tape" + } + ], + "DeleteTapeArchive": [ + { + "input": { + "TapeARN": "arn:aws:storagegateway:us-east-1:204469490176:tape/TEST05A2A0" + }, + "output": { + "TapeARN": "arn:aws:storagegateway:us-east-1:204469490176:tape/TEST05A2A0" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the specified virtual tape from the virtual tape shelf (VTS).", + "id": "to-delete-a-virtual-tape-from-the-shelf-vts-1471383964329", + "title": "To delete a virtual tape from the shelf (VTS)" + } + ], + "DeleteVolume": [ + { + "input": { + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "output": { + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Deletes the specified gateway volume that you previously created using the CreateCachediSCSIVolume or CreateStorediSCSIVolume API.", + "id": "to-delete-a-gateway-volume-1471384418416", + "title": "To delete a gateway volume" + } + ], + "DescribeBandwidthRateLimit": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "AverageDownloadRateLimitInBitsPerSec": 204800, + "AverageUploadRateLimitInBitsPerSec": 102400, + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns a value for a bandwidth rate limit if set. If not set, then only the gateway ARN is returned.", + "id": "to-describe-the-bandwidth-rate-limits-of-a-gateway-1471384826404", + "title": "To describe the bandwidth rate limits of a gateway" + } + ], + "DescribeCache": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "CacheAllocatedInBytes": 2199023255552, + "CacheDirtyPercentage": 0.07, + "CacheHitPercentage": 99.68, + "CacheMissPercentage": 0.32, + "CacheUsedPercentage": 0.07, + "DiskIds": [ + "pci-0000:03:00.0-scsi-0:0:0:0", + "pci-0000:04:00.0-scsi-0:1:0:0" + ], + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about the cache of a gateway.", + "id": "to-describe-cache-information-1471385756036", + "title": "To describe cache information" + } + ], + "DescribeCachediSCSIVolumes": [ + { + "input": { + "VolumeARNs": [ + "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + ] + }, + "output": { + "CachediSCSIVolumes": [ + { + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB", + "VolumeId": "vol-1122AABB", + "VolumeSizeInBytes": 1099511627776, + "VolumeStatus": "AVAILABLE", + "VolumeType": "CACHED iSCSI", + "VolumeiSCSIAttributes": { + "ChapEnabled": true, + "LunNumber": 1, + "NetworkInterfaceId": "10.243.43.207", + "NetworkInterfacePort": 3260, + "TargetARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:myvolume" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns a description of the gateway cached iSCSI volumes specified in the request.", + "id": "to-describe-gateway-cached-iscsi-volumes-1471458094649", + "title": "To describe gateway cached iSCSI volumes" + } + ], + "DescribeChapCredentials": [ + { + "input": { + "TargetARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:myvolume" + }, + "output": { + "ChapCredentials": [ + { + "InitiatorName": "iqn.1991-05.com.microsoft:computername.domain.example.com", + "SecretToAuthenticateInitiator": "111111111111", + "SecretToAuthenticateTarget": "222222222222", + "TargetARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:myvolume" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns an array of Challenge-Handshake Authentication Protocol (CHAP) credentials information for a specified iSCSI target, one for each target-initiator pair.", + "id": "to-describe-chap-credetnitals-for-an-iscsi-1471467462967", + "title": "To describe CHAP credetnitals for an iSCSI" + } + ], + "DescribeGatewayInformation": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "GatewayId": "sgw-AABB1122", + "GatewayName": "My_Gateway", + "GatewayNetworkInterfaces": [ + { + "Ipv4Address": "10.35.69.216" + } + ], + "GatewayState": "STATE_RUNNING", + "GatewayTimezone": "GMT-8:00", + "GatewayType": "STORED", + "LastSoftwareUpdate": "2016-01-02T16:00:00", + "NextUpdateAvailabilityDate": "2017-01-02T16:00:00" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns metadata about a gateway such as its name, network interfaces, configured time zone, and the state (whether the gateway is running or not).", + "id": "to-describe-metadata-about-the-gateway-1471467849079", + "title": "To describe metadata about the gateway" + } + ], + "DescribeMaintenanceStartTime": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "DayOfWeek": 2, + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "HourOfDay": 15, + "MinuteOfHour": 35, + "Timezone": "GMT+7:00" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns your gateway's weekly maintenance start time including the day and time of the week.", + "id": "to-describe-gateways-maintenance-start-time-1471470727387", + "title": "To describe gateway's maintenance start time" + } + ], + "DescribeSnapshotSchedule": [ + { + "input": { + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "output": { + "Description": "sgw-AABB1122:vol-AABB1122:Schedule", + "RecurrenceInHours": 24, + "StartAt": 6, + "Timezone": "GMT+7:00", + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Describes the snapshot schedule for the specified gateway volume including intervals at which snapshots are automatically initiated.", + "id": "to-describe-snapshot-schedule-for-gateway-volume-1471471139538", + "title": "To describe snapshot schedule for gateway volume" + } + ], + "DescribeStorediSCSIVolumes": [ + { + "input": { + "VolumeARNs": [ + "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + ] + }, + "output": { + "StorediSCSIVolumes": [ + { + "PreservedExistingData": false, + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB", + "VolumeDiskId": "pci-0000:03:00.0-scsi-0:0:0:0", + "VolumeId": "vol-1122AABB", + "VolumeProgress": 23.7, + "VolumeSizeInBytes": 1099511627776, + "VolumeStatus": "BOOTSTRAPPING", + "VolumeiSCSIAttributes": { + "ChapEnabled": true, + "NetworkInterfaceId": "10.243.43.207", + "NetworkInterfacePort": 3260, + "TargetARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:myvolume" + } + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns the description of the gateway volumes specified in the request belonging to the same gateway.", + "id": "to-describe-the-volumes-of-a-gateway-1471472640660", + "title": "To describe the volumes of a gateway" + } + ], + "DescribeTapeArchives": [ + { + "input": { + "Limit": 123, + "Marker": "1", + "TapeARNs": [ + "arn:aws:storagegateway:us-east-1:999999999999:tape/AM08A1AD", + "arn:aws:storagegateway:us-east-1:999999999999:tape/AMZN01A2A4" + ] + }, + "output": { + "Marker": "1", + "TapeArchives": [ + { + "CompletionTime": "2016-12-16T13:50Z", + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999:tape/AM08A1AD", + "TapeBarcode": "AM08A1AD", + "TapeSizeInBytes": 107374182400, + "TapeStatus": "ARCHIVED" + }, + { + "CompletionTime": "2016-12-16T13:59Z", + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999:tape/AMZN01A2A4", + "TapeBarcode": "AMZN01A2A4", + "TapeSizeInBytes": 429496729600, + "TapeStatus": "ARCHIVED" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns a description of specified virtual tapes in the virtual tape shelf (VTS).", + "id": "to-describe-virtual-tapes-in-the-vts-1471473188198", + "title": "To describe virtual tapes in the VTS" + } + ], + "DescribeTapeRecoveryPoints": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "Limit": 1, + "Marker": "1" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "Marker": "1", + "TapeRecoveryPointInfos": [ + { + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999:tape/AMZN01A2A4", + "TapeRecoveryPointTime": "2016-12-16T13:50Z", + "TapeSizeInBytes": 1471550497, + "TapeStatus": "AVAILABLE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns a list of virtual tape recovery points that are available for the specified gateway-VTL.", + "id": "to-describe-virtual-tape-recovery-points-1471542042026", + "title": "To describe virtual tape recovery points" + } + ], + "DescribeTapes": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B", + "Limit": 2, + "Marker": "1", + "TapeARNs": [ + "arn:aws:storagegateway:us-east-1:999999999999:tape/TEST04A2A1", + "arn:aws:storagegateway:us-east-1:999999999999:tape/TEST05A2A0" + ] + }, + "output": { + "Marker": "1", + "Tapes": [ + { + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/TEST04A2A1", + "TapeBarcode": "TEST04A2A1", + "TapeSizeInBytes": 107374182400, + "TapeStatus": "AVAILABLE" + }, + { + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/TEST05A2A0", + "TapeBarcode": "TEST05A2A0", + "TapeSizeInBytes": 107374182400, + "TapeStatus": "AVAILABLE" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns a description of the specified Amazon Resource Name (ARN) of virtual tapes. If a TapeARN is not specified, returns a description of all virtual tapes.", + "id": "to-describe-virtual-tapes-associated-with-gateway-1471629287727", + "title": "To describe virtual tape(s) associated with gateway" + } + ], + "DescribeUploadBuffer": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "DiskIds": [ + "pci-0000:03:00.0-scsi-0:0:0:0", + "pci-0000:04:00.0-scsi-0:1:0:0" + ], + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "UploadBufferAllocatedInBytes": 0, + "UploadBufferUsedInBytes": 161061273600 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about the upload buffer of a gateway including disk IDs and the amount of upload buffer space allocated/used.", + "id": "to-describe-upload-buffer-of-gateway-1471631099003", + "title": "To describe upload buffer of gateway" + }, + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "DiskIds": [ + "pci-0000:03:00.0-scsi-0:0:0:0", + "pci-0000:04:00.0-scsi-0:1:0:0" + ], + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "UploadBufferAllocatedInBytes": 161061273600, + "UploadBufferUsedInBytes": 0 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns information about the upload buffer of a gateway including disk IDs and the amount of upload buffer space allocated and used.", + "id": "to-describe-upload-buffer-of-a-gateway--1471904566370", + "title": "To describe upload buffer of a gateway" + } + ], + "DescribeVTLDevices": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B", + "Limit": 123, + "Marker": "1", + "VTLDeviceARNs": [ + + ] + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B", + "Marker": "1", + "VTLDevices": [ + { + "DeviceiSCSIAttributes": { + "ChapEnabled": false, + "NetworkInterfaceId": "10.243.43.207", + "NetworkInterfacePort": 3260, + "TargetARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:sgw-1fad4876-mediachanger" + }, + "VTLDeviceARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B/device/AMZN_SGW-1FAD4876_MEDIACHANGER_00001", + "VTLDeviceProductIdentifier": "L700", + "VTLDeviceType": "Medium Changer", + "VTLDeviceVendor": "STK" + }, + { + "DeviceiSCSIAttributes": { + "ChapEnabled": false, + "NetworkInterfaceId": "10.243.43.209", + "NetworkInterfacePort": 3260, + "TargetARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:sgw-1fad4876-tapedrive-01" + }, + "VTLDeviceARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B/device/AMZN_SGW-1FAD4876_TAPEDRIVE_00001", + "VTLDeviceProductIdentifier": "ULT3580-TD5", + "VTLDeviceType": "Tape Drive", + "VTLDeviceVendor": "IBM" + }, + { + "DeviceiSCSIAttributes": { + "ChapEnabled": false, + "NetworkInterfaceId": "10.243.43.209", + "NetworkInterfacePort": 3260, + "TargetARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:sgw-1fad4876-tapedrive-02" + }, + "VTLDeviceARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B/device/AMZN_SGW-1FAD4876_TAPEDRIVE_00002", + "VTLDeviceProductIdentifier": "ULT3580-TD5", + "VTLDeviceType": "Tape Drive", + "VTLDeviceVendor": "IBM" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Returns a description of virtual tape library (VTL) devices for the specified gateway.", + "id": "to-describe-virtual-tape-library-vtl-devices-of-a-single-gateway-1471906071410", + "title": "To describe virtual tape library (VTL) devices of a single gateway" + } + ], + "DescribeWorkingStorage": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "DiskIds": [ + "pci-0000:03:00.0-scsi-0:0:0:0", + "pci-0000:03:00.0-scsi-0:0:1:0" + ], + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "WorkingStorageAllocatedInBytes": 2199023255552, + "WorkingStorageUsedInBytes": 789207040 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation is supported only for the gateway-stored volume architecture. This operation is deprecated in cached-volumes API version (20120630). Use DescribeUploadBuffer instead.", + "id": "to-describe-the-working-storage-of-a-gateway-depreciated-1472070842332", + "title": "To describe the working storage of a gateway [Depreciated]" + } + ], + "DisableGateway": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Disables a gateway when the gateway is no longer functioning. Use this operation for a gateway-VTL that is not reachable or not functioning.", + "id": "to-disable-a-gateway-when-it-is-no-longer-functioning-1472076046936", + "title": "To disable a gateway when it is no longer functioning" + } + ], + "ListGateways": [ + { + "input": { + "Limit": 2, + "Marker": "1" + }, + "output": { + "Gateways": [ + { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-23A4567C" + } + ], + "Marker": "1" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists gateways owned by an AWS account in a specified region as requested. Results are sorted by gateway ARN up to a maximum of 100 gateways.", + "id": "to-lists-region-specific-gateways-per-aws-account-1472077860657", + "title": "To lists region specific gateways per AWS account" + } + ], + "ListLocalDisks": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "Disks": [ + { + "DiskAllocationType": "CACHE_STORAGE", + "DiskId": "pci-0000:03:00.0-scsi-0:0:0:0", + "DiskNode": "SCSI(0:0)", + "DiskPath": "/dev/sda", + "DiskSizeInBytes": 1099511627776, + "DiskStatus": "missing" + }, + { + "DiskAllocationResource": "", + "DiskAllocationType": "UPLOAD_BUFFER", + "DiskId": "pci-0000:03:00.0-scsi-0:0:1:0", + "DiskNode": "SCSI(0:1)", + "DiskPath": "/dev/sdb", + "DiskSizeInBytes": 1099511627776, + "DiskStatus": "present" + } + ], + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The request returns a list of all disks, specifying which are configured as working storage, cache storage, or stored volume or not configured at all.", + "id": "to-list-the-gateways-local-disks-1472079564618", + "title": "To list the gateway's local disks" + } + ], + "ListTagsForResource": [ + { + "input": { + "Limit": 1, + "Marker": "1", + "ResourceARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-11A2222B" + }, + "output": { + "Marker": "1", + "ResourceARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-11A2222B", + "Tags": [ + { + "Key": "Dev Gatgeway Region", + "Value": "East Coast" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the tags that have been added to the specified resource.", + "id": "to-list-tags-that-have-been-added-to-a-resource-1472080268972", + "title": "To list tags that have been added to a resource" + } + ], + "ListVolumeRecoveryPoints": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "VolumeRecoveryPointInfos": [ + { + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB", + "VolumeRecoveryPointTime": "2012-09-04T21:08:44.627Z", + "VolumeSizeInBytes": 536870912000 + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the recovery points for a specified gateway in which all data of the volume is consistent and can be used to create a snapshot.", + "id": "to-list-recovery-points-for-a-gateway-1472143015088", + "title": "To list recovery points for a gateway" + } + ], + "ListVolumes": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "Limit": 2, + "Marker": "1" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "Marker": "1", + "VolumeInfos": [ + { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "GatewayId": "sgw-12A3456B", + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB", + "VolumeId": "vol-1122AABB", + "VolumeSizeInBytes": 107374182400, + "VolumeType": "STORED" + }, + { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-13B4567C", + "GatewayId": "sgw-gw-13B4567C", + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-13B4567C/volume/vol-3344CCDD", + "VolumeId": "vol-1122AABB", + "VolumeSizeInBytes": 107374182400, + "VolumeType": "STORED" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the iSCSI stored volumes of a gateway. Results are sorted by volume ARN up to a maximum of 100 volumes.", + "id": "to-list-the-iscsi-stored-volumes-of-a-gateway-1472145723653", + "title": "To list the iSCSI stored volumes of a gateway" + } + ], + "RemoveTagsFromResource": [ + { + "input": { + "ResourceARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-11A2222B", + "TagKeys": [ + "Dev Gatgeway Region", + "East Coast" + ] + }, + "output": { + "ResourceARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-11A2222B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Lists the iSCSI stored volumes of a gateway. Removes one or more tags from the specified resource.", + "id": "to-remove-tags-from-a-resource-1472147210553", + "title": "To remove tags from a resource" + } + ], + "ResetCache": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-13B4567C" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-13B4567C" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Resets all cache disks that have encountered a error and makes the disks available for reconfiguration as cache storage.", + "id": "to-reset-cache-disks-in-error-status-1472148909807", + "title": "To reset cache disks in error status" + } + ], + "RetrieveTapeArchive": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B", + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/TEST0AA2AF" + }, + "output": { + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/TEST0AA2AF" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Retrieves an archived virtual tape from the virtual tape shelf (VTS) to a gateway-VTL. Virtual tapes archived in the VTS are not associated with any gateway.", + "id": "to-retrieve-an-archived-tape-from-the-vts-1472149812358", + "title": "To retrieve an archived tape from the VTS" + } + ], + "RetrieveTapeRecoveryPoint": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B", + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/TEST0AA2AF" + }, + "output": { + "TapeARN": "arn:aws:storagegateway:us-east-1:999999999999:tape/TEST0AA2AF" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Retrieves the recovery point for the specified virtual tape.", + "id": "to-retrieve-the-recovery-point-of-a-virtual-tape-1472150014805", + "title": "To retrieve the recovery point of a virtual tape" + } + ], + "SetLocalConsolePassword": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B", + "LocalConsolePassword": "PassWordMustBeAtLeast6Chars." + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Sets the password for your VM local console.", + "id": "to-set-a-password-for-your-vm-1472150202632", + "title": "To set a password for your VM" + } + ], + "ShutdownGateway": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This operation shuts down the gateway service component running in the storage gateway's virtual machine (VM) and not the VM.", + "id": "to-shut-down-a-gateway-service-1472150508835", + "title": "To shut down a gateway service" + } + ], + "StartGateway": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Starts a gateway service that was previously shut down.", + "id": "to-start-a-gateway-service-1472150722315", + "title": "To start a gateway service" + } + ], + "UpdateBandwidthRateLimit": [ + { + "input": { + "AverageDownloadRateLimitInBitsPerSec": 102400, + "AverageUploadRateLimitInBitsPerSec": 51200, + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Updates the bandwidth rate limits of a gateway. Both the upload and download bandwidth rate limit can be set, or either one of the two. If a new limit is not set, the existing rate limit remains.", + "id": "to-update-the-bandwidth-rate-limits-of-a-gateway-1472151016202", + "title": "To update the bandwidth rate limits of a gateway" + } + ], + "UpdateChapCredentials": [ + { + "input": { + "InitiatorName": "iqn.1991-05.com.microsoft:computername.domain.example.com", + "SecretToAuthenticateInitiator": "111111111111", + "SecretToAuthenticateTarget": "222222222222", + "TargetARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:myvolume" + }, + "output": { + "InitiatorName": "iqn.1991-05.com.microsoft:computername.domain.example.com", + "TargetARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/target/iqn.1997-05.com.amazon:myvolume" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Updates the Challenge-Handshake Authentication Protocol (CHAP) credentials for a specified iSCSI target.", + "id": "to-update-chap-credentials-for-an-iscsi-target-1472151325795", + "title": "To update CHAP credentials for an iSCSI target" + } + ], + "UpdateGatewayInformation": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "GatewayName": "MyGateway2", + "GatewayTimezone": "GMT-12:00" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "GatewayName": "" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Updates a gateway's metadata, which includes the gateway's name and time zone.", + "id": "to-update-a-gateways-metadata-1472151688693", + "title": "To update a gateway's metadata" + } + ], + "UpdateGatewaySoftwareNow": [ + { + "input": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Updates the gateway virtual machine (VM) software. The request immediately triggers the software update.", + "id": "to-update-a-gateways-vm-software-1472152020929", + "title": "To update a gateway's VM software" + } + ], + "UpdateMaintenanceStartTime": [ + { + "input": { + "DayOfWeek": 2, + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B", + "HourOfDay": 0, + "MinuteOfHour": 30 + }, + "output": { + "GatewayARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Updates a gateway's weekly maintenance start time information, including day and time of the week. The maintenance time is in your gateway's time zone.", + "id": "to-update-a-gateways-maintenance-start-time-1472152552031", + "title": "To update a gateway's maintenance start time" + } + ], + "UpdateSnapshotSchedule": [ + { + "input": { + "Description": "Hourly snapshot", + "RecurrenceInHours": 1, + "StartAt": 0, + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "output": { + "VolumeARN": "arn:aws:storagegateway:us-east-1:111122223333:gateway/sgw-12A3456B/volume/vol-1122AABB" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Updates a snapshot schedule configured for a gateway volume.", + "id": "to-update-a-volume-snapshot-schedule-1472152757068", + "title": "To update a volume snapshot schedule" + } + ], + "UpdateVTLDeviceType": [ + { + "input": { + "DeviceType": "Medium Changer", + "VTLDeviceARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B/device/AMZN_SGW-1FAD4876_MEDIACHANGER_00001" + }, + "output": { + "VTLDeviceARN": "arn:aws:storagegateway:us-east-1:999999999999:gateway/sgw-12A3456B/device/AMZN_SGW-1FAD4876_MEDIACHANGER_00001" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "Updates the type of medium changer in a gateway-VTL after a gateway-VTL is activated.", + "id": "to-update-a-vtl-device-type-1472153012967", + "title": "To update a VTL device type" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/paginators-1.json new file mode 100644 index 00000000..ef9e79e6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/paginators-1.json @@ -0,0 +1,79 @@ +{ + "pagination": { + "DescribeTapeArchives": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "TapeArchives" + }, + "DescribeTapeRecoveryPoints": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "TapeRecoveryPointInfos" + }, + "DescribeTapes": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "Tapes" + }, + "DescribeVTLDevices": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "VTLDevices" + }, + "ListGateways": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "Gateways" + }, + "ListVolumes": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "VolumeInfos" + }, + "ListTapes": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "TapeInfos" + }, + "ListFileShares": { + "input_token": "Marker", + "limit_key": "Limit", + "non_aggregate_keys": [ + "Marker" + ], + "output_token": "NextMarker", + "result_key": "FileShareInfoList" + }, + "ListTagsForResource": { + "input_token": "Marker", + "limit_key": "Limit", + "non_aggregate_keys": [ + "ResourceARN" + ], + "output_token": "Marker", + "result_key": "Tags" + }, + "ListTapePools": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "PoolInfos" + }, + "ListFileSystemAssociations": { + "input_token": "Marker", + "limit_key": "Limit", + "non_aggregate_keys": [ + "Marker" + ], + "output_token": "NextMarker", + "result_key": "FileSystemAssociationSummaryList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/service-2.json.gz new file mode 100644 index 00000000..52a88b8c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/storagegateway/2013-06-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c5909559 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/examples-1.json new file mode 100644 index 00000000..7396aef5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/examples-1.json @@ -0,0 +1,271 @@ +{ + "version": "1.0", + "examples": { + "AssumeRole": [ + { + "input": { + "ExternalId": "123ABC", + "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Stmt1\",\"Effect\":\"Allow\",\"Action\":\"s3:ListAllMyBuckets\",\"Resource\":\"*\"}]}", + "RoleArn": "arn:aws:iam::123456789012:role/demo", + "RoleSessionName": "testAssumeRoleSession", + "Tags": [ + { + "Key": "Project", + "Value": "Unicorn" + }, + { + "Key": "Team", + "Value": "Automation" + }, + { + "Key": "Cost-Center", + "Value": "12345" + } + ], + "TransitiveTagKeys": [ + "Project", + "Cost-Center" + ] + }, + "output": { + "AssumedRoleUser": { + "Arn": "arn:aws:sts::123456789012:assumed-role/demo/Bob", + "AssumedRoleId": "ARO123EXAMPLE123:Bob" + }, + "Credentials": { + "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", + "Expiration": "2011-07-15T23:28:33.359Z", + "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY", + "SessionToken": "AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==" + }, + "PackedPolicySize": 8 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "to-assume-a-role-1480532402212", + "title": "To assume a role" + } + ], + "AssumeRoleWithSAML": [ + { + "input": { + "DurationSeconds": 3600, + "PrincipalArn": "arn:aws:iam::123456789012:saml-provider/SAML-test", + "RoleArn": "arn:aws:iam::123456789012:role/TestSaml", + "SAMLAssertion": "VERYLONGENCODEDASSERTIONEXAMPLExzYW1sOkF1ZGllbmNlPmJsYW5rPC9zYW1sOkF1ZGllbmNlPjwvc2FtbDpBdWRpZW5jZVJlc3RyaWN0aW9uPjwvc2FtbDpDb25kaXRpb25zPjxzYW1sOlN1YmplY3Q+PHNhbWw6TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6dHJhbnNpZW50Ij5TYW1sRXhhbXBsZTwvc2FtbDpOYW1lSUQ+PHNhbWw6U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxzYW1sOlN1YmplY3RDb25maXJtYXRpb25EYXRhIE5vdE9uT3JBZnRlcj0iMjAxOS0xMS0wMVQyMDoyNTowNS4xNDVaIiBSZWNpcGllbnQ9Imh0dHBzOi8vc2lnbmluLmF3cy5hbWF6b24uY29tL3NhbWwiLz48L3NhbWw6U3ViamVjdENvbmZpcm1hdGlvbj48L3NhbWw6U3ViamVjdD48c2FtbDpBdXRoblN0YXRlbWVudCBBdXRoPD94bWwgdmpSZXNwb25zZT4=" + }, + "output": { + "AssumedRoleUser": { + "Arn": "arn:aws:sts::123456789012:assumed-role/TestSaml", + "AssumedRoleId": "ARO456EXAMPLE789:TestSaml" + }, + "Audience": "https://signin.aws.amazon.com/saml", + "Credentials": { + "AccessKeyId": "ASIAV3ZUEFP6EXAMPLE", + "Expiration": "2019-11-01T20:26:47Z", + "SecretAccessKey": "8P+SQvWIuLnKhh8d++jpw0nNmQRBZvNEXAMPLEKEY", + "SessionToken": "IQoJb3JpZ2luX2VjEOz////////////////////wEXAMPLEtMSJHMEUCIDoKK3JH9uGQE1z0sINr5M4jk+Na8KHDcCYRVjJCZEvOAiEA3OvJGtw1EcViOleS2vhs8VdCKFJQWPQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==" + }, + "Issuer": "https://integ.example.com/idp/shibboleth", + "NameQualifier": "SbdGOnUkh1i4+EXAMPLExL/jEvs=", + "PackedPolicySize": 6, + "Subject": "SamlExample", + "SubjectType": "transient" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "to-assume-role-with-saml-14882749597814", + "title": "To assume a role using a SAML assertion" + } + ], + "AssumeRoleWithWebIdentity": [ + { + "input": { + "DurationSeconds": 3600, + "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Stmt1\",\"Effect\":\"Allow\",\"Action\":\"s3:ListAllMyBuckets\",\"Resource\":\"*\"}]}", + "ProviderId": "www.amazon.com", + "RoleArn": "arn:aws:iam::123456789012:role/FederatedWebIdentityRole", + "RoleSessionName": "app1", + "WebIdentityToken": "Atza%7CIQEBLjAsAhRFiXuWpUXuRvQ9PZL3GMFcYevydwIUFAHZwXZXXXXXXXXJnrulxKDHwy87oGKPznh0D6bEQZTSCzyoCtL_8S07pLpr0zMbn6w1lfVZKNTBdDansFBmtGnIsIapjI6xKR02Yc_2bQ8LZbUXSGm6Ry6_BG7PrtLZtj_dfCTj92xNGed-CrKqjG7nPBjNIL016GGvuS5gSvPRUxWES3VYfm1wl7WTI7jn-Pcb6M-buCgHhFOzTQxod27L9CqnOLio7N3gZAGpsp6n1-AJBOCJckcyXe2c6uD0srOJeZlKUm2eTDVMf8IehDVI0r1QOnTV6KzzAI3OY87Vd_cVMQ" + }, + "output": { + "AssumedRoleUser": { + "Arn": "arn:aws:sts::123456789012:assumed-role/FederatedWebIdentityRole/app1", + "AssumedRoleId": "AROACLKWSDQRAOEXAMPLE:app1" + }, + "Audience": "client.5498841531868486423.1548@apps.example.com", + "Credentials": { + "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", + "Expiration": "2014-10-24T23:00:23Z", + "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY", + "SessionToken": "AQoDYXdzEE0a8ANXXXXXXXXNO1ewxE5TijQyp+IEXAMPLE" + }, + "PackedPolicySize": 123, + "Provider": "www.amazon.com", + "SubjectFromWebIdentityToken": "amzn1.account.AF6RHO7KZU5XRVQJGXK6HEXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "to-assume-a-role-as-an-openid-connect-federated-user-1480533445696", + "title": "To assume a role as an OpenID Connect-federated user" + } + ], + "DecodeAuthorizationMessage": [ + { + "input": { + "EncodedMessage": "" + }, + "output": { + "DecodedMessage": "{\"allowed\": \"false\",\"explicitDeny\": \"false\",\"matchedStatements\": \"\",\"failures\": \"\",\"context\": {\"principal\": {\"id\": \"AIDACKCEVSQ6C2EXAMPLE\",\"name\": \"Bob\",\"arn\": \"arn:aws:iam::123456789012:user/Bob\"},\"action\": \"ec2:StopInstances\",\"resource\": \"arn:aws:ec2:us-east-1:123456789012:instance/i-dd01c9bd\",\"conditions\": [{\"item\": {\"key\": \"ec2:Tenancy\",\"values\": [\"default\"]},{\"item\": {\"key\": \"ec2:ResourceTag/elasticbeanstalk:environment-name\",\"values\": [\"Default-Environment\"]}},(Additional items ...)]}}" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "to-decode-information-about-an-authorization-status-of-a-request-1480533854499", + "title": "To decode information about an authorization status of a request" + } + ], + "GetCallerIdentity": [ + { + "input": { + }, + "output": { + "Account": "123456789012", + "Arn": "arn:aws:iam::123456789012:user/Alice", + "UserId": "AKIAI44QH8DHBEXAMPLE" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows a request and response made with the credentials for a user named Alice in the AWS account 123456789012.", + "id": "to-get-details-about-a-calling-iam-user-1480540050376", + "title": "To get details about a calling IAM user" + }, + { + "input": { + }, + "output": { + "Account": "123456789012", + "Arn": "arn:aws:sts::123456789012:assumed-role/my-role-name/my-role-session-name", + "UserId": "AKIAI44QH8DHBEXAMPLE:my-role-session-name" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows a request and response made with temporary credentials created by AssumeRole. The name of the assumed role is my-role-name, and the RoleSessionName is set to my-role-session-name.", + "id": "to-get-details-about-a-calling-user-federated-with-assumerole-1480540158545", + "title": "To get details about a calling user federated with AssumeRole" + }, + { + "input": { + }, + "output": { + "Account": "123456789012", + "Arn": "arn:aws:sts::123456789012:federated-user/my-federated-user-name", + "UserId": "123456789012:my-federated-user-name" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "This example shows a request and response made with temporary credentials created by using GetFederationToken. The Name parameter is set to my-federated-user-name.", + "id": "to-get-details-about-a-calling-user-federated-with-getfederationtoken-1480540231316", + "title": "To get details about a calling user federated with GetFederationToken" + } + ], + "GetFederationToken": [ + { + "input": { + "DurationSeconds": 3600, + "Name": "testFedUserSession", + "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Stmt1\",\"Effect\":\"Allow\",\"Action\":\"s3:ListAllMyBuckets\",\"Resource\":\"*\"}]}", + "Tags": [ + { + "Key": "Project", + "Value": "Pegasus" + }, + { + "Key": "Cost-Center", + "Value": "98765" + } + ] + }, + "output": { + "Credentials": { + "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", + "Expiration": "2011-07-15T23:28:33.359Z", + "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY", + "SessionToken": "AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==" + }, + "FederatedUser": { + "Arn": "arn:aws:sts::123456789012:federated-user/Bob", + "FederatedUserId": "123456789012:Bob" + }, + "PackedPolicySize": 8 + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "to-get-temporary-credentials-for-a-role-by-using-getfederationtoken-1480540749900", + "title": "To get temporary credentials for a role by using GetFederationToken" + } + ], + "GetSessionToken": [ + { + "input": { + "DurationSeconds": 3600, + "SerialNumber": "YourMFASerialNumber", + "TokenCode": "123456" + }, + "output": { + "Credentials": { + "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", + "Expiration": "2011-07-11T19:55:29.611Z", + "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY", + "SessionToken": "AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "", + "id": "to-get-temporary-credentials-for-an-iam-user-or-an-aws-account-1480540814038", + "title": "To get temporary credentials for an IAM user or an AWS account" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/service-2.json.gz new file mode 100644 index 00000000..ac7db9e8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/sts/2011-06-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/supplychain/2024-01-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/supplychain/2024-01-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ad55a32c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/supplychain/2024-01-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/supplychain/2024-01-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/supplychain/2024-01-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/supplychain/2024-01-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/supplychain/2024-01-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/supplychain/2024-01-01/service-2.json.gz new file mode 100644 index 00000000..2fe1ca93 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/supplychain/2024-01-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/support-app/2021-08-20/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/support-app/2021-08-20/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..370173f1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/support-app/2021-08-20/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/support-app/2021-08-20/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/support-app/2021-08-20/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/support-app/2021-08-20/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/support-app/2021-08-20/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/support-app/2021-08-20/service-2.json.gz new file mode 100644 index 00000000..fb51c860 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/support-app/2021-08-20/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ea43e32f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/paginators-1.json new file mode 100644 index 00000000..11bdb62c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "DescribeCases": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "cases" + }, + "DescribeCommunications": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "communications" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/service-2.json.gz new file mode 100644 index 00000000..c142b071 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/support/2013-04-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..8c4b230e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/paginators-1.json new file mode 100644 index 00000000..e92bfebe --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/paginators-1.json @@ -0,0 +1,53 @@ +{ + "pagination": { + "GetWorkflowExecutionHistory": { + "limit_key": "maximumPageSize", + "input_token": "nextPageToken", + "output_token": "nextPageToken", + "result_key": "events" + }, + "ListActivityTypes": { + "limit_key": "maximumPageSize", + "input_token": "nextPageToken", + "output_token": "nextPageToken", + "result_key": "typeInfos" + }, + "ListClosedWorkflowExecutions": { + "limit_key": "maximumPageSize", + "input_token": "nextPageToken", + "output_token": "nextPageToken", + "result_key": "executionInfos" + }, + "ListDomains": { + "limit_key": "maximumPageSize", + "input_token": "nextPageToken", + "output_token": "nextPageToken", + "result_key": "domainInfos" + }, + "ListOpenWorkflowExecutions": { + "limit_key": "maximumPageSize", + "input_token": "nextPageToken", + "output_token": "nextPageToken", + "result_key": "executionInfos" + }, + "ListWorkflowTypes": { + "limit_key": "maximumPageSize", + "input_token": "nextPageToken", + "output_token": "nextPageToken", + "result_key": "typeInfos" + }, + "PollForDecisionTask": { + "limit_key": "maximumPageSize", + "input_token": "nextPageToken", + "output_token": "nextPageToken", + "result_key": "events", + "non_aggregate_keys": [ + "taskToken", + "startedEventId", + "workflowExecution", + "workflowType", + "previousStartedEventId" + ] + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/service-2.json.gz new file mode 100644 index 00000000..ff4d376d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/swf/2012-01-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..2c4b1897 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/service-2.json.gz new file mode 100644 index 00000000..72ba5acd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/synthetics/2017-10-11/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..e8cfc511 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/paginators-1.json new file mode 100644 index 00000000..f0d04050 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/paginators-1.json @@ -0,0 +1,16 @@ +{ + "pagination": { + "ListAdapterVersions": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AdapterVersions" + }, + "ListAdapters": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "Adapters" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/service-2.json.gz new file mode 100644 index 00000000..a446311d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/textract/2018-06-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f40d9061 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/paginators-1.json new file mode 100644 index 00000000..c4976942 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/paginators-1.json @@ -0,0 +1,27 @@ +{ + "pagination": { + "Query": { + "input_token": "NextToken", + "limit_key": "MaxRows", + "non_aggregate_keys": [ + "ColumnInfo", + "QueryId", + "QueryStatus" + ], + "output_token": "NextToken", + "result_key": "Rows" + }, + "ListScheduledQueries": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ScheduledQueries" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Tags" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/service-2.json.gz new file mode 100644 index 00000000..e59971cc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-query/2018-11-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..d8e1e7e2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/service-2.json.gz new file mode 100644 index 00000000..7d5b0f35 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/timestream-write/2018-11-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/tnb/2008-10-21/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/tnb/2008-10-21/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f18b66ef Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/tnb/2008-10-21/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/tnb/2008-10-21/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/tnb/2008-10-21/paginators-1.json new file mode 100644 index 00000000..18ac477b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/tnb/2008-10-21/paginators-1.json @@ -0,0 +1,34 @@ +{ + "pagination": { + "ListSolFunctionInstances": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "functionInstances" + }, + "ListSolFunctionPackages": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "functionPackages" + }, + "ListSolNetworkInstances": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "networkInstances" + }, + "ListSolNetworkOperations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "networkOperations" + }, + "ListSolNetworkPackages": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "networkPackages" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/tnb/2008-10-21/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/tnb/2008-10-21/service-2.json.gz new file mode 100644 index 00000000..325c01e2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/tnb/2008-10-21/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..ca4ef8c1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/service-2.json.gz new file mode 100644 index 00000000..5389084a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/transcribe/2017-10-26/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..6039e7a6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/paginators-1.json new file mode 100644 index 00000000..3fe23dc9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/paginators-1.json @@ -0,0 +1,82 @@ +{ + "pagination": { + "ListServers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Servers" + }, + "ListAccesses": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "ServerId" + ], + "output_token": "NextToken", + "result_key": "Accesses" + }, + "ListExecutions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "WorkflowId" + ], + "output_token": "NextToken", + "result_key": "Executions" + }, + "ListSecurityPolicies": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "SecurityPolicyNames" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "Arn" + ], + "output_token": "NextToken", + "result_key": "Tags" + }, + "ListUsers": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "non_aggregate_keys": [ + "ServerId" + ], + "output_token": "NextToken", + "result_key": "Users" + }, + "ListWorkflows": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Workflows" + }, + "ListAgreements": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Agreements" + }, + "ListCertificates": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Certificates" + }, + "ListConnectors": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Connectors" + }, + "ListProfiles": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Profiles" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/service-2.json.gz new file mode 100644 index 00000000..1e20c997 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/waiters-2.json new file mode 100644 index 00000000..ddcd604d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/transfer/2018-11-05/waiters-2.json @@ -0,0 +1,37 @@ +{ + "version" : 2, + "waiters" : { + "ServerOffline" : { + "delay" : 30, + "maxAttempts" : 120, + "operation" : "DescribeServer", + "acceptors" : [ { + "matcher" : "path", + "argument" : "Server.State", + "state" : "success", + "expected" : "OFFLINE" + }, { + "matcher" : "path", + "argument" : "Server.State", + "state" : "failure", + "expected" : "STOP_FAILED" + } ] + }, + "ServerOnline" : { + "delay" : 30, + "maxAttempts" : 120, + "operation" : "DescribeServer", + "acceptors" : [ { + "matcher" : "path", + "argument" : "Server.State", + "state" : "success", + "expected" : "ONLINE" + }, { + "matcher" : "path", + "argument" : "Server.State", + "state" : "failure", + "expected" : "START_FAILED" + } ] + } + } +} \ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f5d9fd67 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/paginators-1.json new file mode 100644 index 00000000..6898cd44 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/paginators-1.json @@ -0,0 +1,10 @@ +{ + "pagination": { + "ListTerminologies": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "TerminologyPropertiesList" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/service-2.json.gz new file mode 100644 index 00000000..ecca381b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/translate/2017-07-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/trustedadvisor/2022-09-15/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/trustedadvisor/2022-09-15/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1850773c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/trustedadvisor/2022-09-15/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/trustedadvisor/2022-09-15/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/trustedadvisor/2022-09-15/paginators-1.json new file mode 100644 index 00000000..0ac4c7b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/trustedadvisor/2022-09-15/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "ListChecks": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "checkSummaries" + }, + "ListOrganizationRecommendationAccounts": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "accountRecommendationLifecycleSummaries" + }, + "ListOrganizationRecommendationResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "organizationRecommendationResourceSummaries" + }, + "ListOrganizationRecommendations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "organizationRecommendationSummaries" + }, + "ListRecommendationResources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "recommendationResourceSummaries" + }, + "ListRecommendations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "recommendationSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/trustedadvisor/2022-09-15/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/trustedadvisor/2022-09-15/service-2.json.gz new file mode 100644 index 00000000..8c1f3fa5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/trustedadvisor/2022-09-15/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..0ad2029e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/paginators-1.json new file mode 100644 index 00000000..4314d715 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/paginators-1.json @@ -0,0 +1,28 @@ +{ + "pagination": { + "ListIdentitySources": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "identitySources" + }, + "ListPolicies": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "policies" + }, + "ListPolicyStores": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "policyStores" + }, + "ListPolicyTemplates": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "policyTemplates" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/service-2.json.gz new file mode 100644 index 00000000..fccf5a55 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/waiters-2.json b/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/waiters-2.json new file mode 100644 index 00000000..13f60ee6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/verifiedpermissions/2021-12-01/waiters-2.json @@ -0,0 +1,5 @@ +{ + "version": 2, + "waiters": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..f416867f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/paginators-1.json new file mode 100644 index 00000000..49dd7cca --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/paginators-1.json @@ -0,0 +1,40 @@ +{ + "pagination": { + "ListDomains": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "DomainSummaries" + }, + "ListFraudsterRegistrationJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "JobSummaries" + }, + "ListSpeakerEnrollmentJobs": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "JobSummaries" + }, + "ListSpeakers": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "SpeakerSummaries" + }, + "ListFraudsters": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "FraudsterSummaries" + }, + "ListWatchlists": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "WatchlistSummaries" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/service-2.json.gz new file mode 100644 index 00000000..35b1f885 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/voice-id/2021-09-27/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/vpc-lattice/2022-11-30/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/vpc-lattice/2022-11-30/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..c0c9913f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/vpc-lattice/2022-11-30/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/vpc-lattice/2022-11-30/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/vpc-lattice/2022-11-30/paginators-1.json new file mode 100644 index 00000000..3727cc35 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/vpc-lattice/2022-11-30/paginators-1.json @@ -0,0 +1,58 @@ +{ + "pagination": { + "ListAccessLogSubscriptions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListListeners": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListRules": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListServiceNetworkServiceAssociations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListServiceNetworkVpcAssociations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListServiceNetworks": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListServices": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListTargetGroups": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + }, + "ListTargets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/vpc-lattice/2022-11-30/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/vpc-lattice/2022-11-30/service-2.json.gz new file mode 100644 index 00000000..32ec8f52 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/vpc-lattice/2022-11-30/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..76b2c43b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/examples-1.json new file mode 100644 index 00000000..eee5b6f4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/examples-1.json @@ -0,0 +1,1017 @@ +{ + "version": "1.0", + "examples": { + "CreateIPSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Name": "MyIPSetFriendlyName" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "IPSet": { + "IPSetDescriptors": [ + { + "Type": "IPV4", + "Value": "192.0.2.44/32" + } + ], + "IPSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Name": "MyIPSetFriendlyName" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates an IP match set named MyIPSetFriendlyName.", + "id": "createipset-1472501003122", + "title": "To create an IP set" + } + ], + "CreateRule": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "MetricName": "WAFByteHeaderRule", + "Name": "WAFByteHeaderRule" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Rule": { + "MetricName": "WAFByteHeaderRule", + "Name": "WAFByteHeaderRule", + "Predicates": [ + { + "DataId": "MyByteMatchSetID", + "Negated": false, + "Type": "ByteMatch" + } + ], + "RuleId": "WAFRule-1-Example" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a rule named WAFByteHeaderRule.", + "id": "createrule-1474072675555", + "title": "To create a rule" + } + ], + "CreateSizeConstraintSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Name": "MySampleSizeConstraintSet" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SizeConstraintSet": { + "Name": "MySampleSizeConstraintSet", + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "SizeConstraints": [ + { + "ComparisonOperator": "GT", + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "Size": 0, + "TextTransformation": "NONE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates size constraint set named MySampleSizeConstraintSet.", + "id": "createsizeconstraint-1474299140754", + "title": "To create a size constraint" + } + ], + "CreateSqlInjectionMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Name": "MySQLInjectionMatchSet" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SqlInjectionMatchSet": { + "Name": "MySQLInjectionMatchSet", + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "SqlInjectionMatchTuples": [ + { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a SQL injection match set named MySQLInjectionMatchSet.", + "id": "createsqlinjectionmatchset-1474492796105", + "title": "To create a SQL injection match set" + } + ], + "CreateWebACL": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "DefaultAction": { + "Type": "ALLOW" + }, + "MetricName": "CreateExample", + "Name": "CreateExample" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "WebACL": { + "DefaultAction": { + "Type": "ALLOW" + }, + "MetricName": "CreateExample", + "Name": "CreateExample", + "Rules": [ + { + "Action": { + "Type": "ALLOW" + }, + "Priority": 1, + "RuleId": "WAFRule-1-Example" + } + ], + "WebACLId": "example-46da-4444-5555-example" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a web ACL named CreateExample.", + "id": "createwebacl-1472061481310", + "title": "To create a web ACL" + } + ], + "CreateXssMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Name": "MySampleXssMatchSet" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "XssMatchSet": { + "Name": "MySampleXssMatchSet", + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "XssMatchTuples": [ + { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates an XSS match set named MySampleXssMatchSet.", + "id": "createxssmatchset-1474560868500", + "title": "To create an XSS match set" + } + ], + "DeleteByteMatchSet": [ + { + "input": { + "ByteMatchSetId": "exampleIDs3t-46da-4fdb-b8d5-abc321j569j5", + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a byte match set with the ID exampleIDs3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "deletebytematchset-1473367566229", + "title": "To delete a byte match set" + } + ], + "DeleteIPSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "IPSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an IP match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "deleteipset-1472767434306", + "title": "To delete an IP set" + } + ], + "DeleteRule": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "RuleId": "WAFRule-1-Example" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a rule with the ID WAFRule-1-Example.", + "id": "deleterule-1474073108749", + "title": "To delete a rule" + } + ], + "DeleteSizeConstraintSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a size constraint set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "deletesizeconstraintset-1474299857905", + "title": "To delete a size constraint set" + } + ], + "DeleteSqlInjectionMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a SQL injection match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "deletesqlinjectionmatchset-1474493373197", + "title": "To delete a SQL injection match set" + } + ], + "DeleteWebACL": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "WebACLId": "example-46da-4444-5555-example" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a web ACL with the ID example-46da-4444-5555-example.", + "id": "deletewebacl-1472767755931", + "title": "To delete a web ACL" + } + ], + "DeleteXssMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an XSS match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "deletexssmatchset-1474561302618", + "title": "To delete an XSS match set" + } + ], + "GetByteMatchSet": [ + { + "input": { + "ByteMatchSetId": "exampleIDs3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ByteMatchSet": { + "ByteMatchSetId": "exampleIDs3t-46da-4fdb-b8d5-abc321j569j5", + "ByteMatchTuples": [ + { + "FieldToMatch": { + "Data": "referer", + "Type": "HEADER" + }, + "PositionalConstraint": "CONTAINS", + "TargetString": "badrefer1", + "TextTransformation": "NONE" + } + ], + "Name": "ByteMatchNameExample" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a byte match set with the ID exampleIDs3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getbytematchset-1473273311532", + "title": "To get a byte match set" + } + ], + "GetChangeToken": [ + { + "input": { + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns a change token to use for a create, update or delete operation.", + "id": "get-change-token-example-1471635120794", + "title": "To get a change token" + } + ], + "GetChangeTokenStatus": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "output": { + "ChangeTokenStatus": "PENDING" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the status of a change token with the ID abcd12f2-46da-4fdb-b8d5-fbd4c466928f.", + "id": "getchangetokenstatus-1474658417107", + "title": "To get the change token status" + } + ], + "GetIPSet": [ + { + "input": { + "IPSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "IPSet": { + "IPSetDescriptors": [ + { + "Type": "IPV4", + "Value": "192.0.2.44/32" + } + ], + "IPSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Name": "MyIPSetFriendlyName" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of an IP match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getipset-1474658688675", + "title": "To get an IP set" + } + ], + "GetRule": [ + { + "input": { + "RuleId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "Rule": { + "MetricName": "WAFByteHeaderRule", + "Name": "WAFByteHeaderRule", + "Predicates": [ + { + "DataId": "MyByteMatchSetID", + "Negated": false, + "Type": "ByteMatch" + } + ], + "RuleId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a rule with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getrule-1474659238790", + "title": "To get a rule" + } + ], + "GetSampledRequests": [ + { + "input": { + "MaxItems": 100, + "RuleId": "WAFRule-1-Example", + "TimeWindow": { + "EndTime": "2016-09-27T15:50Z", + "StartTime": "2016-09-27T15:50Z" + }, + "WebAclId": "createwebacl-1472061481310" + }, + "output": { + "PopulationSize": 50, + "SampledRequests": [ + { + "Action": "BLOCK", + "Request": { + "ClientIP": "192.0.2.44", + "Country": "US", + "HTTPVersion": "HTTP/1.1", + "Headers": [ + { + "Name": "User-Agent", + "Value": "BadBot " + } + ], + "Method": "HEAD" + }, + "Timestamp": "2016-09-27T14:55Z", + "Weight": 1 + } + ], + "TimeWindow": { + "EndTime": "2016-09-27T15:50Z", + "StartTime": "2016-09-27T14:50Z" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns detailed information about 100 requests --a sample-- that AWS WAF randomly selects from among the first 5,000 requests that your AWS resource received between the time period 2016-09-27T15:50Z to 2016-09-27T15:50Z.", + "id": "getsampledrequests-1474927997195", + "title": "To get a sampled requests" + } + ], + "GetSizeConstraintSet": [ + { + "input": { + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "SizeConstraintSet": { + "Name": "MySampleSizeConstraintSet", + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "SizeConstraints": [ + { + "ComparisonOperator": "GT", + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "Size": 0, + "TextTransformation": "NONE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a size constraint match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getsizeconstraintset-1475005422493", + "title": "To get a size constraint set" + } + ], + "GetSqlInjectionMatchSet": [ + { + "input": { + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "SqlInjectionMatchSet": { + "Name": "MySQLInjectionMatchSet", + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "SqlInjectionMatchTuples": [ + { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a SQL injection match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getsqlinjectionmatchset-1475005940137", + "title": "To get a SQL injection match set" + } + ], + "GetWebACL": [ + { + "input": { + "WebACLId": "createwebacl-1472061481310" + }, + "output": { + "WebACL": { + "DefaultAction": { + "Type": "ALLOW" + }, + "MetricName": "CreateExample", + "Name": "CreateExample", + "Rules": [ + { + "Action": { + "Type": "ALLOW" + }, + "Priority": 1, + "RuleId": "WAFRule-1-Example" + } + ], + "WebACLId": "createwebacl-1472061481310" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a web ACL with the ID createwebacl-1472061481310.", + "id": "getwebacl-1475006348525", + "title": "To get a web ACL" + } + ], + "GetXssMatchSet": [ + { + "input": { + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "XssMatchSet": { + "Name": "MySampleXssMatchSet", + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "XssMatchTuples": [ + { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of an XSS match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getxssmatchset-1475187879017", + "title": "To get an XSS match set" + } + ], + "ListIPSets": [ + { + "input": { + "Limit": 100 + }, + "output": { + "IPSets": [ + { + "IPSetId": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Name": "MyIPSetFriendlyName" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 IP match sets.", + "id": "listipsets-1472235676229", + "title": "To list IP sets" + } + ], + "ListRules": [ + { + "input": { + "Limit": 100 + }, + "output": { + "Rules": [ + { + "Name": "WAFByteHeaderRule", + "RuleId": "WAFRule-1-Example" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 rules.", + "id": "listrules-1475258406433", + "title": "To list rules" + } + ], + "ListSizeConstraintSets": [ + { + "input": { + "Limit": 100 + }, + "output": { + "SizeConstraintSets": [ + { + "Name": "MySampleSizeConstraintSet", + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 size contraint match sets.", + "id": "listsizeconstraintsets-1474300067597", + "title": "To list a size constraint sets" + } + ], + "ListSqlInjectionMatchSets": [ + { + "input": { + "Limit": 100 + }, + "output": { + "SqlInjectionMatchSets": [ + { + "Name": "MySQLInjectionMatchSet", + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 SQL injection match sets.", + "id": "listsqlinjectionmatchset-1474493560103", + "title": "To list SQL injection match sets" + } + ], + "ListWebACLs": [ + { + "input": { + "Limit": 100 + }, + "output": { + "WebACLs": [ + { + "Name": "WebACLexample", + "WebACLId": "webacl-1472061481310" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 web ACLs.", + "id": "listwebacls-1475258732691", + "title": "To list Web ACLs" + } + ], + "ListXssMatchSets": [ + { + "input": { + "Limit": 100 + }, + "output": { + "XssMatchSets": [ + { + "Name": "MySampleXssMatchSet", + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 XSS match sets.", + "id": "listxssmatchsets-1474561481168", + "title": "To list XSS match sets" + } + ], + "UpdateByteMatchSet": [ + { + "input": { + "ByteMatchSetId": "exampleIDs3t-46da-4fdb-b8d5-abc321j569j5", + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Updates": [ + { + "Action": "DELETE", + "ByteMatchTuple": { + "FieldToMatch": { + "Data": "referer", + "Type": "HEADER" + }, + "PositionalConstraint": "CONTAINS", + "TargetString": "badrefer1", + "TextTransformation": "NONE" + } + } + ] + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a ByteMatchTuple object (filters) in an byte match set with the ID exampleIDs3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updatebytematchset-1475259074558", + "title": "To update a byte match set" + } + ], + "UpdateIPSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "IPSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Updates": [ + { + "Action": "DELETE", + "IPSetDescriptor": { + "Type": "IPV4", + "Value": "192.0.2.44/32" + } + } + ] + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an IPSetDescriptor object in an IP match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updateipset-1475259733625", + "title": "To update an IP set" + } + ], + "UpdateRule": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "RuleId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Updates": [ + { + "Action": "DELETE", + "Predicate": { + "DataId": "MyByteMatchSetID", + "Negated": false, + "Type": "ByteMatch" + } + } + ] + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a Predicate object in a rule with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updaterule-1475260064720", + "title": "To update a rule" + } + ], + "UpdateSizeConstraintSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Updates": [ + { + "Action": "DELETE", + "SizeConstraint": { + "ComparisonOperator": "GT", + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "Size": 0, + "TextTransformation": "NONE" + } + } + ] + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a SizeConstraint object (filters) in a size constraint set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updatesizeconstraintset-1475531697891", + "title": "To update a size constraint set" + } + ], + "UpdateSqlInjectionMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Updates": [ + { + "Action": "DELETE", + "SqlInjectionMatchTuple": { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + } + ] + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a SqlInjectionMatchTuple object (filters) in a SQL injection match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updatesqlinjectionmatchset-1475532094686", + "title": "To update a SQL injection match set" + } + ], + "UpdateWebACL": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "DefaultAction": { + "Type": "ALLOW" + }, + "Updates": [ + { + "Action": "DELETE", + "ActivatedRule": { + "Action": { + "Type": "ALLOW" + }, + "Priority": 1, + "RuleId": "WAFRule-1-Example" + } + } + ], + "WebACLId": "webacl-1472061481310" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an ActivatedRule object in a WebACL with the ID webacl-1472061481310.", + "id": "updatewebacl-1475533627385", + "title": "To update a Web ACL" + } + ], + "UpdateXssMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Updates": [ + { + "Action": "DELETE", + "XssMatchTuple": { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + } + ], + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an XssMatchTuple object (filters) in an XssMatchSet with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updatexssmatchset-1475534098881", + "title": "To update an XSS match set" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/service-2.json.gz new file mode 100644 index 00000000..321795c7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/waf-regional/2016-11-28/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..666a1ca2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/examples-1.json new file mode 100644 index 00000000..eee5b6f4 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/examples-1.json @@ -0,0 +1,1017 @@ +{ + "version": "1.0", + "examples": { + "CreateIPSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Name": "MyIPSetFriendlyName" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "IPSet": { + "IPSetDescriptors": [ + { + "Type": "IPV4", + "Value": "192.0.2.44/32" + } + ], + "IPSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Name": "MyIPSetFriendlyName" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates an IP match set named MyIPSetFriendlyName.", + "id": "createipset-1472501003122", + "title": "To create an IP set" + } + ], + "CreateRule": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "MetricName": "WAFByteHeaderRule", + "Name": "WAFByteHeaderRule" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Rule": { + "MetricName": "WAFByteHeaderRule", + "Name": "WAFByteHeaderRule", + "Predicates": [ + { + "DataId": "MyByteMatchSetID", + "Negated": false, + "Type": "ByteMatch" + } + ], + "RuleId": "WAFRule-1-Example" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a rule named WAFByteHeaderRule.", + "id": "createrule-1474072675555", + "title": "To create a rule" + } + ], + "CreateSizeConstraintSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Name": "MySampleSizeConstraintSet" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SizeConstraintSet": { + "Name": "MySampleSizeConstraintSet", + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "SizeConstraints": [ + { + "ComparisonOperator": "GT", + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "Size": 0, + "TextTransformation": "NONE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates size constraint set named MySampleSizeConstraintSet.", + "id": "createsizeconstraint-1474299140754", + "title": "To create a size constraint" + } + ], + "CreateSqlInjectionMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Name": "MySQLInjectionMatchSet" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SqlInjectionMatchSet": { + "Name": "MySQLInjectionMatchSet", + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "SqlInjectionMatchTuples": [ + { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a SQL injection match set named MySQLInjectionMatchSet.", + "id": "createsqlinjectionmatchset-1474492796105", + "title": "To create a SQL injection match set" + } + ], + "CreateWebACL": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "DefaultAction": { + "Type": "ALLOW" + }, + "MetricName": "CreateExample", + "Name": "CreateExample" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "WebACL": { + "DefaultAction": { + "Type": "ALLOW" + }, + "MetricName": "CreateExample", + "Name": "CreateExample", + "Rules": [ + { + "Action": { + "Type": "ALLOW" + }, + "Priority": 1, + "RuleId": "WAFRule-1-Example" + } + ], + "WebACLId": "example-46da-4444-5555-example" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates a web ACL named CreateExample.", + "id": "createwebacl-1472061481310", + "title": "To create a web ACL" + } + ], + "CreateXssMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Name": "MySampleXssMatchSet" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "XssMatchSet": { + "Name": "MySampleXssMatchSet", + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "XssMatchTuples": [ + { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example creates an XSS match set named MySampleXssMatchSet.", + "id": "createxssmatchset-1474560868500", + "title": "To create an XSS match set" + } + ], + "DeleteByteMatchSet": [ + { + "input": { + "ByteMatchSetId": "exampleIDs3t-46da-4fdb-b8d5-abc321j569j5", + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a byte match set with the ID exampleIDs3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "deletebytematchset-1473367566229", + "title": "To delete a byte match set" + } + ], + "DeleteIPSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "IPSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an IP match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "deleteipset-1472767434306", + "title": "To delete an IP set" + } + ], + "DeleteRule": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "RuleId": "WAFRule-1-Example" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a rule with the ID WAFRule-1-Example.", + "id": "deleterule-1474073108749", + "title": "To delete a rule" + } + ], + "DeleteSizeConstraintSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a size constraint set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "deletesizeconstraintset-1474299857905", + "title": "To delete a size constraint set" + } + ], + "DeleteSqlInjectionMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a SQL injection match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "deletesqlinjectionmatchset-1474493373197", + "title": "To delete a SQL injection match set" + } + ], + "DeleteWebACL": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "WebACLId": "example-46da-4444-5555-example" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a web ACL with the ID example-46da-4444-5555-example.", + "id": "deletewebacl-1472767755931", + "title": "To delete a web ACL" + } + ], + "DeleteXssMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an XSS match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "deletexssmatchset-1474561302618", + "title": "To delete an XSS match set" + } + ], + "GetByteMatchSet": [ + { + "input": { + "ByteMatchSetId": "exampleIDs3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ByteMatchSet": { + "ByteMatchSetId": "exampleIDs3t-46da-4fdb-b8d5-abc321j569j5", + "ByteMatchTuples": [ + { + "FieldToMatch": { + "Data": "referer", + "Type": "HEADER" + }, + "PositionalConstraint": "CONTAINS", + "TargetString": "badrefer1", + "TextTransformation": "NONE" + } + ], + "Name": "ByteMatchNameExample" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a byte match set with the ID exampleIDs3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getbytematchset-1473273311532", + "title": "To get a byte match set" + } + ], + "GetChangeToken": [ + { + "input": { + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns a change token to use for a create, update or delete operation.", + "id": "get-change-token-example-1471635120794", + "title": "To get a change token" + } + ], + "GetChangeTokenStatus": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "output": { + "ChangeTokenStatus": "PENDING" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the status of a change token with the ID abcd12f2-46da-4fdb-b8d5-fbd4c466928f.", + "id": "getchangetokenstatus-1474658417107", + "title": "To get the change token status" + } + ], + "GetIPSet": [ + { + "input": { + "IPSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "IPSet": { + "IPSetDescriptors": [ + { + "Type": "IPV4", + "Value": "192.0.2.44/32" + } + ], + "IPSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Name": "MyIPSetFriendlyName" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of an IP match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getipset-1474658688675", + "title": "To get an IP set" + } + ], + "GetRule": [ + { + "input": { + "RuleId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "Rule": { + "MetricName": "WAFByteHeaderRule", + "Name": "WAFByteHeaderRule", + "Predicates": [ + { + "DataId": "MyByteMatchSetID", + "Negated": false, + "Type": "ByteMatch" + } + ], + "RuleId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a rule with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getrule-1474659238790", + "title": "To get a rule" + } + ], + "GetSampledRequests": [ + { + "input": { + "MaxItems": 100, + "RuleId": "WAFRule-1-Example", + "TimeWindow": { + "EndTime": "2016-09-27T15:50Z", + "StartTime": "2016-09-27T15:50Z" + }, + "WebAclId": "createwebacl-1472061481310" + }, + "output": { + "PopulationSize": 50, + "SampledRequests": [ + { + "Action": "BLOCK", + "Request": { + "ClientIP": "192.0.2.44", + "Country": "US", + "HTTPVersion": "HTTP/1.1", + "Headers": [ + { + "Name": "User-Agent", + "Value": "BadBot " + } + ], + "Method": "HEAD" + }, + "Timestamp": "2016-09-27T14:55Z", + "Weight": 1 + } + ], + "TimeWindow": { + "EndTime": "2016-09-27T15:50Z", + "StartTime": "2016-09-27T14:50Z" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns detailed information about 100 requests --a sample-- that AWS WAF randomly selects from among the first 5,000 requests that your AWS resource received between the time period 2016-09-27T15:50Z to 2016-09-27T15:50Z.", + "id": "getsampledrequests-1474927997195", + "title": "To get a sampled requests" + } + ], + "GetSizeConstraintSet": [ + { + "input": { + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "SizeConstraintSet": { + "Name": "MySampleSizeConstraintSet", + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "SizeConstraints": [ + { + "ComparisonOperator": "GT", + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "Size": 0, + "TextTransformation": "NONE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a size constraint match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getsizeconstraintset-1475005422493", + "title": "To get a size constraint set" + } + ], + "GetSqlInjectionMatchSet": [ + { + "input": { + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "SqlInjectionMatchSet": { + "Name": "MySQLInjectionMatchSet", + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "SqlInjectionMatchTuples": [ + { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a SQL injection match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getsqlinjectionmatchset-1475005940137", + "title": "To get a SQL injection match set" + } + ], + "GetWebACL": [ + { + "input": { + "WebACLId": "createwebacl-1472061481310" + }, + "output": { + "WebACL": { + "DefaultAction": { + "Type": "ALLOW" + }, + "MetricName": "CreateExample", + "Name": "CreateExample", + "Rules": [ + { + "Action": { + "Type": "ALLOW" + }, + "Priority": 1, + "RuleId": "WAFRule-1-Example" + } + ], + "WebACLId": "createwebacl-1472061481310" + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of a web ACL with the ID createwebacl-1472061481310.", + "id": "getwebacl-1475006348525", + "title": "To get a web ACL" + } + ], + "GetXssMatchSet": [ + { + "input": { + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "XssMatchSet": { + "Name": "MySampleXssMatchSet", + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "XssMatchTuples": [ + { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + ] + } + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns the details of an XSS match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "getxssmatchset-1475187879017", + "title": "To get an XSS match set" + } + ], + "ListIPSets": [ + { + "input": { + "Limit": 100 + }, + "output": { + "IPSets": [ + { + "IPSetId": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Name": "MyIPSetFriendlyName" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 IP match sets.", + "id": "listipsets-1472235676229", + "title": "To list IP sets" + } + ], + "ListRules": [ + { + "input": { + "Limit": 100 + }, + "output": { + "Rules": [ + { + "Name": "WAFByteHeaderRule", + "RuleId": "WAFRule-1-Example" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 rules.", + "id": "listrules-1475258406433", + "title": "To list rules" + } + ], + "ListSizeConstraintSets": [ + { + "input": { + "Limit": 100 + }, + "output": { + "SizeConstraintSets": [ + { + "Name": "MySampleSizeConstraintSet", + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 size contraint match sets.", + "id": "listsizeconstraintsets-1474300067597", + "title": "To list a size constraint sets" + } + ], + "ListSqlInjectionMatchSets": [ + { + "input": { + "Limit": 100 + }, + "output": { + "SqlInjectionMatchSets": [ + { + "Name": "MySQLInjectionMatchSet", + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 SQL injection match sets.", + "id": "listsqlinjectionmatchset-1474493560103", + "title": "To list SQL injection match sets" + } + ], + "ListWebACLs": [ + { + "input": { + "Limit": 100 + }, + "output": { + "WebACLs": [ + { + "Name": "WebACLexample", + "WebACLId": "webacl-1472061481310" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 web ACLs.", + "id": "listwebacls-1475258732691", + "title": "To list Web ACLs" + } + ], + "ListXssMatchSets": [ + { + "input": { + "Limit": 100 + }, + "output": { + "XssMatchSets": [ + { + "Name": "MySampleXssMatchSet", + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + } + ] + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example returns an array of up to 100 XSS match sets.", + "id": "listxssmatchsets-1474561481168", + "title": "To list XSS match sets" + } + ], + "UpdateByteMatchSet": [ + { + "input": { + "ByteMatchSetId": "exampleIDs3t-46da-4fdb-b8d5-abc321j569j5", + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Updates": [ + { + "Action": "DELETE", + "ByteMatchTuple": { + "FieldToMatch": { + "Data": "referer", + "Type": "HEADER" + }, + "PositionalConstraint": "CONTAINS", + "TargetString": "badrefer1", + "TextTransformation": "NONE" + } + } + ] + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a ByteMatchTuple object (filters) in an byte match set with the ID exampleIDs3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updatebytematchset-1475259074558", + "title": "To update a byte match set" + } + ], + "UpdateIPSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "IPSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Updates": [ + { + "Action": "DELETE", + "IPSetDescriptor": { + "Type": "IPV4", + "Value": "192.0.2.44/32" + } + } + ] + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an IPSetDescriptor object in an IP match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updateipset-1475259733625", + "title": "To update an IP set" + } + ], + "UpdateRule": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "RuleId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Updates": [ + { + "Action": "DELETE", + "Predicate": { + "DataId": "MyByteMatchSetID", + "Negated": false, + "Type": "ByteMatch" + } + } + ] + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a Predicate object in a rule with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updaterule-1475260064720", + "title": "To update a rule" + } + ], + "UpdateSizeConstraintSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SizeConstraintSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Updates": [ + { + "Action": "DELETE", + "SizeConstraint": { + "ComparisonOperator": "GT", + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "Size": 0, + "TextTransformation": "NONE" + } + } + ] + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a SizeConstraint object (filters) in a size constraint set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updatesizeconstraintset-1475531697891", + "title": "To update a size constraint set" + } + ], + "UpdateSqlInjectionMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "SqlInjectionMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5", + "Updates": [ + { + "Action": "DELETE", + "SqlInjectionMatchTuple": { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + } + ] + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes a SqlInjectionMatchTuple object (filters) in a SQL injection match set with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updatesqlinjectionmatchset-1475532094686", + "title": "To update a SQL injection match set" + } + ], + "UpdateWebACL": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "DefaultAction": { + "Type": "ALLOW" + }, + "Updates": [ + { + "Action": "DELETE", + "ActivatedRule": { + "Action": { + "Type": "ALLOW" + }, + "Priority": 1, + "RuleId": "WAFRule-1-Example" + } + } + ], + "WebACLId": "webacl-1472061481310" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an ActivatedRule object in a WebACL with the ID webacl-1472061481310.", + "id": "updatewebacl-1475533627385", + "title": "To update a Web ACL" + } + ], + "UpdateXssMatchSet": [ + { + "input": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f", + "Updates": [ + { + "Action": "DELETE", + "XssMatchTuple": { + "FieldToMatch": { + "Type": "QUERY_STRING" + }, + "TextTransformation": "URL_DECODE" + } + } + ], + "XssMatchSetId": "example1ds3t-46da-4fdb-b8d5-abc321j569j5" + }, + "output": { + "ChangeToken": "abcd12f2-46da-4fdb-b8d5-fbd4c466928f" + }, + "comments": { + "input": { + }, + "output": { + } + }, + "description": "The following example deletes an XssMatchTuple object (filters) in an XssMatchSet with the ID example1ds3t-46da-4fdb-b8d5-abc321j569j5.", + "id": "updatexssmatchset-1475534098881", + "title": "To update an XSS match set" + } + ] + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/paginators-1.json new file mode 100644 index 00000000..9f2eba80 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/paginators-1.json @@ -0,0 +1,99 @@ +{ + "pagination": { + "ListByteMatchSets": { + "input_token": "NextMarker", + "output_token": "NextMarker", + "limit_key": "Limit", + "result_key": "ByteMatchSets" + }, + "ListIPSets": { + "input_token": "NextMarker", + "output_token": "NextMarker", + "limit_key": "Limit", + "result_key": "IPSets" + }, + "ListRules": { + "input_token": "NextMarker", + "output_token": "NextMarker", + "limit_key": "Limit", + "result_key": "Rules" + }, + "ListSizeConstraintSets": { + "input_token": "NextMarker", + "output_token": "NextMarker", + "limit_key": "Limit", + "result_key": "SizeConstraintSets" + }, + "ListSqlInjectionMatchSets": { + "input_token": "NextMarker", + "output_token": "NextMarker", + "limit_key": "Limit", + "result_key": "SqlInjectionMatchSets" + }, + "ListWebACLs": { + "input_token": "NextMarker", + "output_token": "NextMarker", + "limit_key": "Limit", + "result_key": "WebACLs" + }, + "ListXssMatchSets": { + "input_token": "NextMarker", + "output_token": "NextMarker", + "limit_key": "Limit", + "result_key": "XssMatchSets" + }, + "GetRateBasedRuleManagedKeys": { + "input_token": "NextMarker", + "output_token": "NextMarker", + "result_key": "ManagedKeys" + }, + "ListActivatedRulesInRuleGroup": { + "input_token": "NextMarker", + "limit_key": "Limit", + "output_token": "NextMarker", + "result_key": "ActivatedRules" + }, + "ListGeoMatchSets": { + "input_token": "NextMarker", + "limit_key": "Limit", + "output_token": "NextMarker", + "result_key": "GeoMatchSets" + }, + "ListLoggingConfigurations": { + "input_token": "NextMarker", + "limit_key": "Limit", + "output_token": "NextMarker", + "result_key": "LoggingConfigurations" + }, + "ListRateBasedRules": { + "input_token": "NextMarker", + "limit_key": "Limit", + "output_token": "NextMarker", + "result_key": "Rules" + }, + "ListRegexMatchSets": { + "input_token": "NextMarker", + "limit_key": "Limit", + "output_token": "NextMarker", + "result_key": "RegexMatchSets" + }, + "ListRegexPatternSets": { + "input_token": "NextMarker", + "limit_key": "Limit", + "output_token": "NextMarker", + "result_key": "RegexPatternSets" + }, + "ListRuleGroups": { + "input_token": "NextMarker", + "limit_key": "Limit", + "output_token": "NextMarker", + "result_key": "RuleGroups" + }, + "ListSubscribedRuleGroups": { + "input_token": "NextMarker", + "limit_key": "Limit", + "output_token": "NextMarker", + "result_key": "RuleGroups" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/service-2.json.gz new file mode 100644 index 00000000..ab51836a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/waf/2015-08-24/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..1efa22b2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/service-2.json.gz new file mode 100644 index 00000000..adff70af Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/wafv2/2019-07-29/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..3674f962 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/service-2.json.gz new file mode 100644 index 00000000..ef7cdb38 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/wellarchitected/2020-03-31/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..7bd27b32 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/paginators-1.json new file mode 100644 index 00000000..60b1dca5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/paginators-1.json @@ -0,0 +1,64 @@ +{ + "pagination": { + "ListAssistantAssociations": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assistantAssociationSummaries" + }, + "ListAssistants": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "assistantSummaries" + }, + "ListContents": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "contentSummaries" + }, + "ListKnowledgeBases": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "knowledgeBaseSummaries" + }, + "QueryAssistant": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "results" + }, + "SearchContent": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "contentSummaries" + }, + "SearchSessions": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "sessionSummaries" + }, + "ListImportJobs": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "importJobSummaries" + }, + "ListQuickResponses": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "quickResponseSummaries" + }, + "SearchQuickResponses": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "results" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/service-2.json.gz new file mode 100644 index 00000000..9c28001e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/wisdom/2020-10-19/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..619f3710 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/paginators-1.json new file mode 100644 index 00000000..ff2f410a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/paginators-1.json @@ -0,0 +1,67 @@ +{ + "pagination": { + "DescribeDocumentVersions": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "DocumentVersions" + }, + "DescribeFolderContents": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": [ + "Folders", + "Documents" + ] + }, + "DescribeUsers": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "Users" + }, + "DescribeActivities": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "UserActivities" + }, + "DescribeComments": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "Comments" + }, + "DescribeGroups": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "Groups" + }, + "DescribeNotificationSubscriptions": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "Subscriptions" + }, + "DescribeResourcePermissions": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "Principals" + }, + "DescribeRootFolders": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "Folders" + }, + "SearchResources": { + "input_token": "Marker", + "limit_key": "Limit", + "output_token": "Marker", + "result_key": "Items" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/service-2.json.gz new file mode 100644 index 00000000..73d8c1fe Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workdocs/2016-05-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..70daf075 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/service-2.json.gz new file mode 100644 index 00000000..534f1083 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/worklink/2018-09-25/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..94084d7b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/paginators-1.json new file mode 100644 index 00000000..40a3cadf --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/paginators-1.json @@ -0,0 +1,58 @@ +{ + "pagination": { + "ListUsers": { + "result_key": "Users", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListGroupMembers": { + "result_key": "Members", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListOrganizations": { + "result_key": "OrganizationSummaries", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListGroups": { + "result_key": "Groups", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListResources": { + "result_key": "Resources", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListAliases": { + "result_key": "Aliases", + "output_token": "NextToken", + "input_token": "NextToken", + "limit_key": "MaxResults" + }, + "ListMailboxPermissions": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Permissions" + }, + "ListResourceDelegates": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Delegates" + }, + "ListAvailabilityConfigurations": { + "input_token": "NextToken", + "output_token": "NextToken", + "limit_key": "MaxResults", + "result_key": "AvailabilityConfigurations" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/service-2.json.gz new file mode 100644 index 00000000..5f1dc200 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workmail/2017-10-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..058fb848 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/service-2.json.gz new file mode 100644 index 00000000..7f222fd4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workmailmessageflow/2019-05-01/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-thin-client/2023-08-22/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-thin-client/2023-08-22/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a15db878 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-thin-client/2023-08-22/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-thin-client/2023-08-22/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-thin-client/2023-08-22/paginators-1.json new file mode 100644 index 00000000..9fe21a48 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-thin-client/2023-08-22/paginators-1.json @@ -0,0 +1,22 @@ +{ + "pagination": { + "ListDevices": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "devices" + }, + "ListEnvironments": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "environments" + }, + "ListSoftwareSets": { + "input_token": "nextToken", + "output_token": "nextToken", + "limit_key": "maxResults", + "result_key": "softwareSets" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-thin-client/2023-08-22/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-thin-client/2023-08-22/service-2.json.gz new file mode 100644 index 00000000..676b3409 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-thin-client/2023-08-22/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..71d19c72 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/paginators-1.json new file mode 100644 index 00000000..ea142457 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/paginators-1.json @@ -0,0 +1,3 @@ +{ + "pagination": {} +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/service-2.json.gz new file mode 100644 index 00000000..c55307da Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces-web/2020-07-08/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..a8e746a6 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/paginators-1.json new file mode 100644 index 00000000..57e10e02 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/paginators-1.json @@ -0,0 +1,48 @@ +{ + "pagination": { + "DescribeWorkspaceBundles": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Bundles" + }, + "DescribeWorkspaceDirectories": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Directories" + }, + "DescribeWorkspaces": { + "limit_key": "Limit", + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Workspaces" + }, + "DescribeAccountModifications": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "AccountModifications" + }, + "DescribeIpGroups": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Result" + }, + "DescribeWorkspaceImages": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "Images" + }, + "DescribeWorkspacesConnectionStatus": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "WorkspacesConnectionStatus" + }, + "ListAvailableManagementCidrRanges": { + "input_token": "NextToken", + "limit_key": "MaxResults", + "output_token": "NextToken", + "result_key": "ManagementCidrRanges" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/service-2.json.gz new file mode 100644 index 00000000..1fef185d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/workspaces/2015-04-08/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/endpoint-rule-set-1.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/endpoint-rule-set-1.json.gz new file mode 100644 index 00000000..03f621ce Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/endpoint-rule-set-1.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/examples-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/examples-1.json new file mode 100644 index 00000000..0ea7e3b0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/examples-1.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "examples": { + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/paginators-1.json b/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/paginators-1.json new file mode 100644 index 00000000..0f65898f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/paginators-1.json @@ -0,0 +1,69 @@ +{ + "pagination": { + "BatchGetTraces": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Traces", + "non_aggregate_keys": [ + "UnprocessedTraceIds" + ] + }, + "GetServiceGraph": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Services", + "non_aggregate_keys": [ + "StartTime", + "EndTime", + "ContainsOldGroupVersions" + ] + }, + "GetTraceGraph": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Services" + }, + "GetTraceSummaries": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "TraceSummaries", + "non_aggregate_keys": [ + "TracesProcessedCount", + "ApproximateTime" + ] + }, + "GetGroups": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Groups" + }, + "GetSamplingRules": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "SamplingRuleRecords" + }, + "GetSamplingStatisticSummaries": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "SamplingStatisticSummaries" + }, + "GetTimeSeriesServiceStatistics": { + "input_token": "NextToken", + "non_aggregate_keys": [ + "ContainsOldGroupVersions" + ], + "output_token": "NextToken", + "result_key": "TimeSeriesServiceStatistics" + }, + "ListResourcePolicies": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "ResourcePolicies" + }, + "ListTagsForResource": { + "input_token": "NextToken", + "output_token": "NextToken", + "result_key": "Tags" + } + } +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/service-2.json.gz b/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/service-2.json.gz new file mode 100644 index 00000000..abca9e20 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/data/xray/2016-04-12/service-2.json.gz differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/discovery.py b/dbtzin/lib/python3.8/site-packages/botocore/discovery.py new file mode 100644 index 00000000..9c68001d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/discovery.py @@ -0,0 +1,282 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import logging +import time +import weakref + +from botocore import xform_name +from botocore.exceptions import BotoCoreError, ConnectionError, HTTPClientError +from botocore.model import OperationNotFoundError +from botocore.utils import CachedProperty + +logger = logging.getLogger(__name__) + + +class EndpointDiscoveryException(BotoCoreError): + pass + + +class EndpointDiscoveryRequired(EndpointDiscoveryException): + """Endpoint Discovery is disabled but is required for this operation.""" + + fmt = 'Endpoint Discovery is not enabled but this operation requires it.' + + +class EndpointDiscoveryRefreshFailed(EndpointDiscoveryException): + """Endpoint Discovery failed to the refresh the known endpoints.""" + + fmt = 'Endpoint Discovery failed to refresh the required endpoints.' + + +def block_endpoint_discovery_required_operations(model, **kwargs): + endpoint_discovery = model.endpoint_discovery + if endpoint_discovery and endpoint_discovery.get('required'): + raise EndpointDiscoveryRequired() + + +class EndpointDiscoveryModel: + def __init__(self, service_model): + self._service_model = service_model + + @CachedProperty + def discovery_operation_name(self): + discovery_operation = self._service_model.endpoint_discovery_operation + return xform_name(discovery_operation.name) + + @CachedProperty + def discovery_operation_keys(self): + discovery_operation = self._service_model.endpoint_discovery_operation + keys = [] + if discovery_operation.input_shape: + keys = list(discovery_operation.input_shape.members.keys()) + return keys + + def discovery_required_for(self, operation_name): + try: + operation_model = self._service_model.operation_model( + operation_name + ) + return operation_model.endpoint_discovery.get('required', False) + except OperationNotFoundError: + return False + + def discovery_operation_kwargs(self, **kwargs): + input_keys = self.discovery_operation_keys + # Operation and Identifiers are only sent if there are Identifiers + if not kwargs.get('Identifiers'): + kwargs.pop('Operation', None) + kwargs.pop('Identifiers', None) + return {k: v for k, v in kwargs.items() if k in input_keys} + + def gather_identifiers(self, operation, params): + return self._gather_ids(operation.input_shape, params) + + def _gather_ids(self, shape, params, ids=None): + # Traverse the input shape and corresponding parameters, gathering + # any input fields labeled as an endpoint discovery id + if ids is None: + ids = {} + for member_name, member_shape in shape.members.items(): + if member_shape.metadata.get('endpointdiscoveryid'): + ids[member_name] = params[member_name] + elif ( + member_shape.type_name == 'structure' and member_name in params + ): + self._gather_ids(member_shape, params[member_name], ids) + return ids + + +class EndpointDiscoveryManager: + def __init__( + self, client, cache=None, current_time=None, always_discover=True + ): + if cache is None: + cache = {} + self._cache = cache + self._failed_attempts = {} + if current_time is None: + current_time = time.time + self._time = current_time + self._always_discover = always_discover + + # This needs to be a weak ref in order to prevent memory leaks on + # python 2.6 + self._client = weakref.proxy(client) + self._model = EndpointDiscoveryModel(client.meta.service_model) + + def _parse_endpoints(self, response): + endpoints = response['Endpoints'] + current_time = self._time() + for endpoint in endpoints: + cache_time = endpoint.get('CachePeriodInMinutes') + endpoint['Expiration'] = current_time + cache_time * 60 + return endpoints + + def _cache_item(self, value): + if isinstance(value, dict): + return tuple(sorted(value.items())) + else: + return value + + def _create_cache_key(self, **kwargs): + kwargs = self._model.discovery_operation_kwargs(**kwargs) + return tuple(self._cache_item(v) for k, v in sorted(kwargs.items())) + + def gather_identifiers(self, operation, params): + return self._model.gather_identifiers(operation, params) + + def delete_endpoints(self, **kwargs): + cache_key = self._create_cache_key(**kwargs) + if cache_key in self._cache: + del self._cache[cache_key] + + def _describe_endpoints(self, **kwargs): + # This is effectively a proxy to whatever name/kwargs the service + # supports for endpoint discovery. + kwargs = self._model.discovery_operation_kwargs(**kwargs) + operation_name = self._model.discovery_operation_name + discovery_operation = getattr(self._client, operation_name) + logger.debug('Discovering endpoints with kwargs: %s', kwargs) + return discovery_operation(**kwargs) + + def _get_current_endpoints(self, key): + if key not in self._cache: + return None + now = self._time() + return [e for e in self._cache[key] if now < e['Expiration']] + + def _refresh_current_endpoints(self, **kwargs): + cache_key = self._create_cache_key(**kwargs) + try: + response = self._describe_endpoints(**kwargs) + endpoints = self._parse_endpoints(response) + self._cache[cache_key] = endpoints + self._failed_attempts.pop(cache_key, None) + return endpoints + except (ConnectionError, HTTPClientError): + self._failed_attempts[cache_key] = self._time() + 60 + return None + + def _recently_failed(self, cache_key): + if cache_key in self._failed_attempts: + now = self._time() + if now < self._failed_attempts[cache_key]: + return True + del self._failed_attempts[cache_key] + return False + + def _select_endpoint(self, endpoints): + return endpoints[0]['Address'] + + def describe_endpoint(self, **kwargs): + operation = kwargs['Operation'] + discovery_required = self._model.discovery_required_for(operation) + + if not self._always_discover and not discovery_required: + # Discovery set to only run on required operations + logger.debug( + 'Optional discovery disabled. Skipping discovery for Operation: %s' + % operation + ) + return None + + # Get the endpoint for the provided operation and identifiers + cache_key = self._create_cache_key(**kwargs) + endpoints = self._get_current_endpoints(cache_key) + if endpoints: + return self._select_endpoint(endpoints) + # All known endpoints are stale + recently_failed = self._recently_failed(cache_key) + if not recently_failed: + # We haven't failed to discover recently, go ahead and refresh + endpoints = self._refresh_current_endpoints(**kwargs) + if endpoints: + return self._select_endpoint(endpoints) + # Discovery has failed recently, do our best to get an endpoint + logger.debug('Endpoint Discovery has failed for: %s', kwargs) + stale_entries = self._cache.get(cache_key, None) + if stale_entries: + # We have stale entries, use those while discovery is failing + return self._select_endpoint(stale_entries) + if discovery_required: + # It looks strange to be checking recently_failed again but, + # this informs us as to whether or not we tried to refresh earlier + if recently_failed: + # Discovery is required and we haven't already refreshed + endpoints = self._refresh_current_endpoints(**kwargs) + if endpoints: + return self._select_endpoint(endpoints) + # No endpoints even refresh, raise hard error + raise EndpointDiscoveryRefreshFailed() + # Discovery is optional, just use the default endpoint for now + return None + + +class EndpointDiscoveryHandler: + def __init__(self, manager): + self._manager = manager + + def register(self, events, service_id): + events.register( + 'before-parameter-build.%s' % service_id, self.gather_identifiers + ) + events.register_first( + 'request-created.%s' % service_id, self.discover_endpoint + ) + events.register('needs-retry.%s' % service_id, self.handle_retries) + + def gather_identifiers(self, params, model, context, **kwargs): + endpoint_discovery = model.endpoint_discovery + # Only continue if the operation supports endpoint discovery + if endpoint_discovery is None: + return + ids = self._manager.gather_identifiers(model, params) + context['discovery'] = {'identifiers': ids} + + def discover_endpoint(self, request, operation_name, **kwargs): + ids = request.context.get('discovery', {}).get('identifiers') + if ids is None: + return + endpoint = self._manager.describe_endpoint( + Operation=operation_name, Identifiers=ids + ) + if endpoint is None: + logger.debug('Failed to discover and inject endpoint') + return + if not endpoint.startswith('http'): + endpoint = 'https://' + endpoint + logger.debug('Injecting discovered endpoint: %s', endpoint) + request.url = endpoint + + def handle_retries(self, request_dict, response, operation, **kwargs): + if response is None: + return None + + _, response = response + status = response.get('ResponseMetadata', {}).get('HTTPStatusCode') + error_code = response.get('Error', {}).get('Code') + if status != 421 and error_code != 'InvalidEndpointException': + return None + + context = request_dict.get('context', {}) + ids = context.get('discovery', {}).get('identifiers') + if ids is None: + return None + + # Delete the cached endpoints, forcing a refresh on retry + # TODO: Improve eviction behavior to only evict the bad endpoint if + # there are multiple. This will almost certainly require a lock. + self._manager.delete_endpoints( + Operation=operation.name, Identifiers=ids + ) + return 0 diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__init__.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/__init__.py new file mode 100644 index 00000000..844f5de5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/__init__.py @@ -0,0 +1,54 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore.docs.service import ServiceDocumenter + +DEPRECATED_SERVICE_NAMES = {'sms-voice'} + + +def generate_docs(root_dir, session): + """Generates the reference documentation for botocore + + This will go through every available AWS service and output ReSTructured + text files documenting each service. + + :param root_dir: The directory to write the reference files to. Each + service's reference documentation is loacated at + root_dir/reference/services/service-name.rst + """ + # Create the root directory where all service docs live. + services_dir_path = os.path.join(root_dir, 'reference', 'services') + if not os.path.exists(services_dir_path): + os.makedirs(services_dir_path) + + # Prevents deprecated service names from being generated in docs. + available_services = [ + service + for service in session.get_available_services() + if service not in DEPRECATED_SERVICE_NAMES + ] + + # Generate reference docs and write them out. + for service_name in available_services: + docs = ServiceDocumenter( + service_name, session, services_dir_path + ).document_service() + + # Write the main service documentation page. + # Path: /reference/services//index.rst + service_file_path = os.path.join( + services_dir_path, f'{service_name}.rst' + ) + with open(service_file_path, 'wb') as f: + f.write(docs) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..9b582a36 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/client.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/client.cpython-38.pyc new file mode 100644 index 00000000..da91c7b3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/client.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/docstring.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/docstring.cpython-38.pyc new file mode 100644 index 00000000..21c0ef08 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/docstring.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/example.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/example.cpython-38.pyc new file mode 100644 index 00000000..f4039b7f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/example.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/method.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/method.cpython-38.pyc new file mode 100644 index 00000000..9ca63f41 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/method.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/paginator.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/paginator.cpython-38.pyc new file mode 100644 index 00000000..4f447a19 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/paginator.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/params.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/params.cpython-38.pyc new file mode 100644 index 00000000..e955c47a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/params.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/service.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/service.cpython-38.pyc new file mode 100644 index 00000000..536a4dba Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/service.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/shape.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/shape.cpython-38.pyc new file mode 100644 index 00000000..237f56e1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/shape.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/sharedexample.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/sharedexample.cpython-38.pyc new file mode 100644 index 00000000..ca0b0d85 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/sharedexample.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/translator.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/translator.cpython-38.pyc new file mode 100644 index 00000000..75dffe5c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/translator.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/utils.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/utils.cpython-38.pyc new file mode 100644 index 00000000..d477aeb5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/utils.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/waiter.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/waiter.cpython-38.pyc new file mode 100644 index 00000000..ac719f5c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/__pycache__/waiter.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__init__.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__init__.py new file mode 100644 index 00000000..b687f69d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +__version__ = '0.16.0' diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..5d1667d5 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/docstringparser.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/docstringparser.cpython-38.pyc new file mode 100644 index 00000000..dcc72241 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/docstringparser.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/restdoc.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/restdoc.cpython-38.pyc new file mode 100644 index 00000000..06a00528 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/restdoc.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/style.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/style.cpython-38.pyc new file mode 100644 index 00000000..9c37af2a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/__pycache__/style.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/docstringparser.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/docstringparser.py new file mode 100644 index 00000000..16e74e7d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/docstringparser.py @@ -0,0 +1,315 @@ +# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from html.parser import HTMLParser +from itertools import zip_longest + +PRIORITY_PARENT_TAGS = ('code', 'a') +OMIT_NESTED_TAGS = ('span', 'i', 'code', 'a') +OMIT_SELF_TAGS = ('i', 'b') +HTML_BLOCK_DISPLAY_TAGS = ('p', 'note', 'ul', 'li') + + +class DocStringParser(HTMLParser): + """ + A simple HTML parser. Focused on converting the subset of HTML + that appears in the documentation strings of the JSON models into + simple ReST format. + """ + + def __init__(self, doc): + self.tree = None + self.doc = doc + super().__init__() + + def reset(self): + HTMLParser.reset(self) + self.tree = HTMLTree(self.doc) + + def feed(self, data): + super().feed(data) + self.tree.write() + self.tree = HTMLTree(self.doc) + + def close(self): + super().close() + # Write if there is anything remaining. + self.tree.write() + self.tree = HTMLTree(self.doc) + + def handle_starttag(self, tag, attrs): + self.tree.add_tag(tag, attrs=attrs) + + def handle_endtag(self, tag): + self.tree.add_tag(tag, is_start=False) + + def handle_data(self, data): + self.tree.add_data(data) + + +class HTMLTree: + """ + A tree which handles HTML nodes. Designed to work with a python HTML parser, + meaning that the current_node will be the most recently opened tag. When + a tag is closed, the current_node moves up to the parent node. + """ + + def __init__(self, doc): + self.doc = doc + self.head = StemNode() + self.current_node = self.head + self.unhandled_tags = [] + + def add_tag(self, tag, attrs=None, is_start=True): + if not self._doc_has_handler(tag, is_start): + self.unhandled_tags.append(tag) + return + + if is_start: + node = TagNode(tag, attrs) + self.current_node.add_child(node) + self.current_node = node + else: + self.current_node = self.current_node.parent + + def _doc_has_handler(self, tag, is_start): + if is_start: + handler_name = 'start_%s' % tag + else: + handler_name = 'end_%s' % tag + + return hasattr(self.doc.style, handler_name) + + def add_data(self, data): + self.current_node.add_child(DataNode(data)) + + def write(self): + self.head.write(self.doc) + + +class Node: + def __init__(self, parent=None): + self.parent = parent + + def write(self, doc): + raise NotImplementedError + + +class StemNode(Node): + def __init__(self, parent=None): + super().__init__(parent) + self.children = [] + + def add_child(self, child): + child.parent = self + self.children.append(child) + + def write(self, doc): + self.collapse_whitespace() + self._write_children(doc) + + def _write_children(self, doc): + for child, next_child in zip_longest(self.children, self.children[1:]): + if isinstance(child, TagNode) and next_child is not None: + child.write(doc, next_child) + else: + child.write(doc) + + def is_whitespace(self): + return all(child.is_whitespace() for child in self.children) + + def startswith_whitespace(self): + return self.children and self.children[0].startswith_whitespace() + + def endswith_whitespace(self): + return self.children and self.children[-1].endswith_whitespace() + + def lstrip(self): + while self.children and self.children[0].is_whitespace(): + self.children = self.children[1:] + if self.children: + self.children[0].lstrip() + + def rstrip(self): + while self.children and self.children[-1].is_whitespace(): + self.children = self.children[:-1] + if self.children: + self.children[-1].rstrip() + + def collapse_whitespace(self): + """Remove collapsible white-space from HTML. + + HTML in docstrings often contains extraneous white-space around tags, + for readability. Browsers would collapse this white-space before + rendering. If not removed before conversion to RST where white-space is + part of the syntax, for example for indentation, it can result in + incorrect output. + """ + self.lstrip() + self.rstrip() + for child in self.children: + child.collapse_whitespace() + + +class TagNode(StemNode): + """ + A generic Tag node. It will verify that handlers exist before writing. + """ + + def __init__(self, tag, attrs=None, parent=None): + super().__init__(parent) + self.attrs = attrs + self.tag = tag + + def _has_nested_tags(self): + # Returns True if any children are TagNodes and False otherwise. + return any(isinstance(child, TagNode) for child in self.children) + + def write(self, doc, next_child=None): + prioritize_nested_tags = ( + self.tag in OMIT_SELF_TAGS and self._has_nested_tags() + ) + prioritize_parent_tag = ( + isinstance(self.parent, TagNode) + and self.parent.tag in PRIORITY_PARENT_TAGS + and self.tag in OMIT_NESTED_TAGS + ) + if prioritize_nested_tags or prioritize_parent_tag: + self._write_children(doc) + return + + self._write_start(doc) + self._write_children(doc) + self._write_end(doc, next_child) + + def collapse_whitespace(self): + """Remove collapsible white-space. + + All tags collapse internal whitespace. Block-display HTML tags also + strip all leading and trailing whitespace. + + Approximately follows the specification used in browsers: + https://www.w3.org/TR/css-text-3/#white-space-rules + https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Whitespace + """ + if self.tag in HTML_BLOCK_DISPLAY_TAGS: + self.lstrip() + self.rstrip() + # Collapse whitespace in situations like ``
foo`` into + # `` foo``. + for prev, cur in zip(self.children[:-1], self.children[1:]): + if ( + isinstance(prev, DataNode) + and prev.endswith_whitespace() + and cur.startswith_whitespace() + ): + cur.lstrip() + # Same logic, but for situations like ``bar ``: + for cur, nxt in zip(self.children[:-1], self.children[1:]): + if ( + isinstance(nxt, DataNode) + and cur.endswith_whitespace() + and nxt.startswith_whitespace() + ): + cur.rstrip() + # Recurse into children + for child in self.children: + child.collapse_whitespace() + + def _write_start(self, doc): + handler_name = 'start_%s' % self.tag + if hasattr(doc.style, handler_name): + getattr(doc.style, handler_name)(self.attrs) + + def _write_end(self, doc, next_child): + handler_name = 'end_%s' % self.tag + if hasattr(doc.style, handler_name): + if handler_name == 'end_a': + # We use lookahead to determine if a space is needed after a link node + getattr(doc.style, handler_name)(next_child) + else: + getattr(doc.style, handler_name)() + + +class DataNode(Node): + """ + A Node that contains only string data. + """ + + def __init__(self, data, parent=None): + super().__init__(parent) + if not isinstance(data, str): + raise ValueError("Expecting string type, %s given." % type(data)) + self._leading_whitespace = '' + self._trailing_whitespace = '' + self._stripped_data = '' + if data == '': + return + if data.isspace(): + self._trailing_whitespace = data + return + first_non_space = next( + idx for idx, ch in enumerate(data) if not ch.isspace() + ) + last_non_space = len(data) - next( + idx for idx, ch in enumerate(reversed(data)) if not ch.isspace() + ) + self._leading_whitespace = data[:first_non_space] + self._trailing_whitespace = data[last_non_space:] + self._stripped_data = data[first_non_space:last_non_space] + + @property + def data(self): + return ( + f'{self._leading_whitespace}{self._stripped_data}' + f'{self._trailing_whitespace}' + ) + + def is_whitespace(self): + return self._stripped_data == '' and ( + self._leading_whitespace != '' or self._trailing_whitespace != '' + ) + + def startswith_whitespace(self): + return self._leading_whitespace != '' or ( + self._stripped_data == '' and self._trailing_whitespace != '' + ) + + def endswith_whitespace(self): + return self._trailing_whitespace != '' or ( + self._stripped_data == '' and self._leading_whitespace != '' + ) + + def lstrip(self): + if self._leading_whitespace != '': + self._leading_whitespace = '' + elif self._stripped_data == '': + self.rstrip() + + def rstrip(self): + if self._trailing_whitespace != '': + self._trailing_whitespace = '' + elif self._stripped_data == '': + self.lstrip() + + def collapse_whitespace(self): + """Noop, ``DataNode.write`` always collapses whitespace""" + return + + def write(self, doc): + words = doc.translate_words(self._stripped_data.split()) + str_data = ( + f'{self._leading_whitespace}{" ".join(words)}' + f'{self._trailing_whitespace}' + ) + if str_data != '': + doc.handle_data(str_data) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/restdoc.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/restdoc.py new file mode 100644 index 00000000..d23fcf28 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/restdoc.py @@ -0,0 +1,282 @@ +# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import logging +import os +import re + +from botocore.compat import OrderedDict +from botocore.docs.bcdoc.docstringparser import DocStringParser +from botocore.docs.bcdoc.style import ReSTStyle + +DEFAULT_AWS_DOCS_LINK = 'https://docs.aws.amazon.com/index.html' +DOCUMENTATION_LINK_REGEX = re.compile( + r'`AWS API Documentation ' + r'`_' +) +LARGE_SECTION_MESSAGE = """ + + **{}** + :: + + # This section is too large to render. + # Please see the AWS API Documentation linked below. + + {} + """ +LOG = logging.getLogger('bcdocs') +SECTION_LINE_LIMIT_CONFIG = { + 'response-example': {'name': 'Response Syntax', 'line_limit': 1500}, + 'description': {'name': 'Response Structure', 'line_limit': 5000}, + 'request-example': {'name': 'Request Syntax', 'line_limit': 1500}, + 'request-params': {'name': 'Parameters', 'line_limit': 5000}, +} +SECTION_METHOD_PATH_DEPTH = { + 'client-api': 4, + 'paginator-api': 3, + 'waiter-api': 3, +} + + +class ReSTDocument: + def __init__(self, target='man'): + self.style = ReSTStyle(self) + self.target = target + self.parser = DocStringParser(self) + self.keep_data = True + self.do_translation = False + self.translation_map = {} + self.hrefs = {} + self._writes = [] + self._last_doc_string = None + + def _write(self, s): + if self.keep_data and s is not None: + self._writes.append(s) + + def write(self, content): + """ + Write content into the document. + """ + self._write(content) + + def writeln(self, content): + """ + Write content on a newline. + """ + self._write(f'{self.style.spaces()}{content}\n') + + def peek_write(self): + """ + Returns the last content written to the document without + removing it from the stack. + """ + return self._writes[-1] + + def pop_write(self): + """ + Removes and returns the last content written to the stack. + """ + return self._writes.pop() if len(self._writes) > 0 else None + + def push_write(self, s): + """ + Places new content on the stack. + """ + self._writes.append(s) + + def getvalue(self): + """ + Returns the current content of the document as a string. + """ + if self.hrefs: + self.style.new_paragraph() + for refname, link in self.hrefs.items(): + self.style.link_target_definition(refname, link) + return ''.join(self._writes).encode('utf-8') + + def translate_words(self, words): + return [self.translation_map.get(w, w) for w in words] + + def handle_data(self, data): + if data and self.keep_data: + self._write(data) + + def include_doc_string(self, doc_string): + if doc_string: + try: + start = len(self._writes) + self.parser.feed(doc_string) + self.parser.close() + end = len(self._writes) + self._last_doc_string = (start, end) + except Exception: + LOG.debug('Error parsing doc string', exc_info=True) + LOG.debug(doc_string) + + def remove_last_doc_string(self): + # Removes all writes inserted by last doc string + if self._last_doc_string is not None: + start, end = self._last_doc_string + del self._writes[start:end] + + +class DocumentStructure(ReSTDocument): + def __init__(self, name, section_names=None, target='man', context=None): + """Provides a Hierarichial structure to a ReSTDocument + + You can write to it similiar to as you can to a ReSTDocument but + has an innate structure for more orginaztion and abstraction. + + :param name: The name of the document + :param section_names: A list of sections to be included + in the document. + :param target: The target documentation of the Document structure + :param context: A dictionary of data to store with the strucuture. These + are only stored per section not the entire structure. + """ + super().__init__(target=target) + self._name = name + self._structure = OrderedDict() + self._path = [self._name] + self._context = {} + if context is not None: + self._context = context + if section_names is not None: + self._generate_structure(section_names) + + @property + def name(self): + """The name of the document structure""" + return self._name + + @property + def path(self): + """ + A list of where to find a particular document structure in the + overlying document structure. + """ + return self._path + + @path.setter + def path(self, value): + self._path = value + + @property + def available_sections(self): + return list(self._structure) + + @property + def context(self): + return self._context + + def _generate_structure(self, section_names): + for section_name in section_names: + self.add_new_section(section_name) + + def add_new_section(self, name, context=None): + """Adds a new section to the current document structure + + This document structure will be considered a section to the + current document structure but will in itself be an entirely + new document structure that can be written to and have sections + as well + + :param name: The name of the section. + :param context: A dictionary of data to store with the strucuture. These + are only stored per section not the entire structure. + :rtype: DocumentStructure + :returns: A new document structure to add to but lives as a section + to the document structure it was instantiated from. + """ + # Add a new section + section = self.__class__( + name=name, target=self.target, context=context + ) + section.path = self.path + [name] + # Indent the section apporpriately as well + section.style.indentation = self.style.indentation + section.translation_map = self.translation_map + section.hrefs = self.hrefs + self._structure[name] = section + return section + + def get_section(self, name): + """Retrieve a section""" + return self._structure[name] + + def delete_section(self, name): + """Delete a section""" + del self._structure[name] + + def flush_structure(self, docs_link=None): + """Flushes a doc structure to a ReSTructed string + + The document is flushed out in a DFS style where sections and their + subsections' values are added to the string as they are visited. + """ + # We are at the root flush the links at the beginning of the + # document + path_length = len(self.path) + if path_length == 1: + if self.hrefs: + self.style.new_paragraph() + for refname, link in self.hrefs.items(): + self.style.link_target_definition(refname, link) + # Clear docs_link at the correct depth to prevent passing a non-related link. + elif path_length == SECTION_METHOD_PATH_DEPTH.get(self.path[1]): + docs_link = None + value = self.getvalue() + for name, section in self._structure.items(): + # Checks is the AWS API Documentation link has been generated. + # If it has been generated, it gets passed as a the doc_link parameter. + match = DOCUMENTATION_LINK_REGEX.search(value.decode()) + docs_link = ( + f'{match.group(0)}\n\n'.encode() if match else docs_link + ) + value += section.flush_structure(docs_link) + + # Replace response/request sections if the line number exceeds our limit. + # The section is replaced with a message linking to AWS API Documentation. + line_count = len(value.splitlines()) + section_config = SECTION_LINE_LIMIT_CONFIG.get(self.name) + aws_docs_link = ( + docs_link.decode() + if docs_link is not None + else DEFAULT_AWS_DOCS_LINK + ) + if section_config and line_count > section_config['line_limit']: + value = LARGE_SECTION_MESSAGE.format( + section_config['name'], aws_docs_link + ).encode() + return value + + def getvalue(self): + return ''.join(self._writes).encode('utf-8') + + def remove_all_sections(self): + self._structure = OrderedDict() + + def clear_text(self): + self._writes = [] + + def add_title_section(self, title): + title_section = self.add_new_section('title') + title_section.style.h1(title) + return title_section + + def write_to_file(self, full_path, file_name): + if not os.path.exists(full_path): + os.makedirs(full_path) + sub_resource_file_path = os.path.join(full_path, f'{file_name}.rst') + with open(sub_resource_file_path, 'wb') as f: + f.write(self.flush_structure()) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/style.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/style.py new file mode 100644 index 00000000..f2a165a9 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/bcdoc/style.py @@ -0,0 +1,447 @@ +# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import logging + +logger = logging.getLogger('bcdocs') +# Terminal punctuation where a space is not needed before. +PUNCTUATION_CHARACTERS = ('.', ',', '?', '!', ':', ';') + + +class BaseStyle: + def __init__(self, doc, indent_width=2): + self.doc = doc + self.indent_width = indent_width + self._indent = 0 + self.keep_data = True + + @property + def indentation(self): + return self._indent + + @indentation.setter + def indentation(self, value): + self._indent = value + + def new_paragraph(self): + return '\n%s' % self.spaces() + + def indent(self): + self._indent += 1 + + def dedent(self): + if self._indent > 0: + self._indent -= 1 + + def spaces(self): + return ' ' * (self._indent * self.indent_width) + + def bold(self, s): + return s + + def ref(self, link, title=None): + return link + + def h2(self, s): + return s + + def h3(self, s): + return s + + def underline(self, s): + return s + + def italics(self, s): + return s + + def add_trailing_space_to_previous_write(self): + # Adds a trailing space if none exists. This is mainly used for + # ensuring inline code and links are separated from surrounding text. + last_write = self.doc.pop_write() + if last_write is None: + last_write = '' + if last_write != '' and last_write[-1] != ' ': + last_write += ' ' + self.doc.push_write(last_write) + + +class ReSTStyle(BaseStyle): + def __init__(self, doc, indent_width=2): + BaseStyle.__init__(self, doc, indent_width) + self.do_p = True + self.a_href = None + self.list_depth = 0 + + def new_paragraph(self): + self.doc.write('\n\n%s' % self.spaces()) + + def new_line(self): + self.doc.write('\n%s' % self.spaces()) + + def _start_inline(self, markup): + # Insert space between any directly adjacent bold and italic inlines to + # avoid situations like ``**abc***def*``. + try: + last_write = self.doc.peek_write() + except IndexError: + pass + else: + if last_write in ('*', '**') and markup in ('*', '**'): + self.doc.write(' ') + self.doc.write(markup) + + def _end_inline(self, markup): + # Remove empty and self-closing tags like ```` and ````. + # If we simply translate that directly then we end up with something + # like ****, which rst will assume is a heading instead of an empty + # bold. + last_write = self.doc.pop_write() + if last_write == markup: + return + self.doc.push_write(last_write) + self.doc.write(markup) + + def start_bold(self, attrs=None): + self._start_inline('**') + + def end_bold(self): + self._end_inline('**') + + def start_b(self, attrs=None): + self.doc.do_translation = True + self.start_bold(attrs) + + def end_b(self): + self.doc.do_translation = False + self.end_bold() + + def bold(self, s): + if s: + self.start_bold() + self.doc.write(s) + self.end_bold() + + def ref(self, title, link=None): + if link is None: + link = title + self.doc.write(f':doc:`{title} <{link}>`') + + def _heading(self, s, border_char): + border = border_char * len(s) + self.new_paragraph() + self.doc.write(f'{border}\n{s}\n{border}') + self.new_paragraph() + + def h1(self, s): + self._heading(s, '*') + + def h2(self, s): + self._heading(s, '=') + + def h3(self, s): + self._heading(s, '-') + + def start_italics(self, attrs=None): + self._start_inline('*') + + def end_italics(self): + self._end_inline('*') + + def italics(self, s): + if s: + self.start_italics() + self.doc.write(s) + self.end_italics() + + def start_p(self, attrs=None): + if self.do_p: + self.doc.write('\n\n%s' % self.spaces()) + + def end_p(self): + if self.do_p: + self.doc.write('\n\n%s' % self.spaces()) + + def start_code(self, attrs=None): + self.doc.do_translation = True + self.add_trailing_space_to_previous_write() + self._start_inline('``') + + def end_code(self): + self.doc.do_translation = False + self._end_inline('``') + + def code(self, s): + if s: + self.start_code() + self.doc.write(s) + self.end_code() + + def start_note(self, attrs=None): + self.new_paragraph() + self.doc.write('.. note::') + self.indent() + self.new_paragraph() + + def end_note(self): + self.dedent() + self.new_paragraph() + + def start_important(self, attrs=None): + self.new_paragraph() + self.doc.write('.. warning::') + self.indent() + self.new_paragraph() + + def end_important(self): + self.dedent() + self.new_paragraph() + + def start_danger(self, attrs=None): + self.new_paragraph() + self.doc.write('.. danger::') + self.indent() + self.new_paragraph() + + def end_danger(self): + self.dedent() + self.new_paragraph() + + def start_a(self, attrs=None): + # Write an empty space to guard against zero whitespace + # before an "a" tag. Example: hiExample + self.add_trailing_space_to_previous_write() + if attrs: + for attr_key, attr_value in attrs: + if attr_key == 'href': + # Removes unnecessary whitespace around the href link. + # Example: Example + self.a_href = attr_value.strip() + self.doc.write('`') + else: + # There are some model documentation that + # looks like this: DescribeInstances. + # In this case we just write out an empty + # string. + self.doc.write(' ') + self.doc.do_translation = True + + def link_target_definition(self, refname, link): + self.doc.writeln(f'.. _{refname}: {link}') + + def sphinx_reference_label(self, label, text=None): + if text is None: + text = label + if self.doc.target == 'html': + self.doc.write(f':ref:`{text} <{label}>`') + else: + self.doc.write(text) + + def _clean_link_text(self): + doc = self.doc + # Pop till we reach the link start character to retrieve link text. + last_write = doc.pop_write() + while not last_write.startswith('`'): + last_write = doc.pop_write() + last_write + if last_write != '': + # Remove whitespace from the start of link text. + if last_write.startswith('` '): + last_write = f'`{last_write[1:].lstrip(" ")}' + doc.push_write(last_write) + + def end_a(self, next_child=None): + self.doc.do_translation = False + if self.a_href: + self._clean_link_text() + last_write = self.doc.pop_write() + last_write = last_write.rstrip(' ') + if last_write and last_write != '`': + if ':' in last_write: + last_write = last_write.replace(':', r'\:') + self.doc.push_write(last_write) + self.doc.push_write(' <%s>`__' % self.a_href) + elif last_write == '`': + # Look at start_a(). It will do a self.doc.write('`') + # which is the start of the link title. If that is the + # case then there was no link text. We should just + # use an inline link. The syntax of this is + # ``_ + self.doc.push_write('`<%s>`__' % self.a_href) + else: + self.doc.push_write(self.a_href) + self.doc.hrefs[self.a_href] = self.a_href + self.doc.write('`__') + self.a_href = None + + def start_i(self, attrs=None): + self.doc.do_translation = True + self.start_italics() + + def end_i(self): + self.doc.do_translation = False + self.end_italics() + + def start_li(self, attrs=None): + self.new_line() + self.do_p = False + self.doc.write('* ') + + def end_li(self): + self.do_p = True + self.new_line() + + def li(self, s): + if s: + self.start_li() + self.doc.writeln(s) + self.end_li() + + def start_ul(self, attrs=None): + if self.list_depth != 0: + self.indent() + self.list_depth += 1 + self.new_paragraph() + + def end_ul(self): + self.list_depth -= 1 + if self.list_depth != 0: + self.dedent() + self.new_paragraph() + + def start_ol(self, attrs=None): + # TODO: Need to control the bullets used for LI items + if self.list_depth != 0: + self.indent() + self.list_depth += 1 + self.new_paragraph() + + def end_ol(self): + self.list_depth -= 1 + if self.list_depth != 0: + self.dedent() + self.new_paragraph() + + def start_examples(self, attrs=None): + self.doc.keep_data = False + + def end_examples(self): + self.doc.keep_data = True + + def start_fullname(self, attrs=None): + self.doc.keep_data = False + + def end_fullname(self): + self.doc.keep_data = True + + def start_codeblock(self, attrs=None): + self.doc.write('::') + self.indent() + self.new_paragraph() + + def end_codeblock(self): + self.dedent() + self.new_paragraph() + + def codeblock(self, code): + """ + Literal code blocks are introduced by ending a paragraph with + the special marker ::. The literal block must be indented + (and, like all paragraphs, separated from the surrounding + ones by blank lines). + """ + self.start_codeblock() + self.doc.writeln(code) + self.end_codeblock() + + def toctree(self): + if self.doc.target == 'html': + self.doc.write('\n.. toctree::\n') + self.doc.write(' :maxdepth: 1\n') + self.doc.write(' :titlesonly:\n\n') + else: + self.start_ul() + + def tocitem(self, item, file_name=None): + if self.doc.target == 'man': + self.li(item) + else: + if file_name: + self.doc.writeln(' %s' % file_name) + else: + self.doc.writeln(' %s' % item) + + def hidden_toctree(self): + if self.doc.target == 'html': + self.doc.write('\n.. toctree::\n') + self.doc.write(' :maxdepth: 1\n') + self.doc.write(' :hidden:\n\n') + + def hidden_tocitem(self, item): + if self.doc.target == 'html': + self.tocitem(item) + + def table_of_contents(self, title=None, depth=None): + self.doc.write('.. contents:: ') + if title is not None: + self.doc.writeln(title) + if depth is not None: + self.doc.writeln(' :depth: %s' % depth) + + def start_sphinx_py_class(self, class_name): + self.new_paragraph() + self.doc.write('.. py:class:: %s' % class_name) + self.indent() + self.new_paragraph() + + def end_sphinx_py_class(self): + self.dedent() + self.new_paragraph() + + def start_sphinx_py_method(self, method_name, parameters=None): + self.new_paragraph() + content = '.. py:method:: %s' % method_name + if parameters is not None: + content += '(%s)' % parameters + self.doc.write(content) + self.indent() + self.new_paragraph() + + def end_sphinx_py_method(self): + self.dedent() + self.new_paragraph() + + def start_sphinx_py_attr(self, attr_name): + self.new_paragraph() + self.doc.write('.. py:attribute:: %s' % attr_name) + self.indent() + self.new_paragraph() + + def end_sphinx_py_attr(self): + self.dedent() + self.new_paragraph() + + def write_py_doc_string(self, docstring): + docstring_lines = docstring.splitlines() + for docstring_line in docstring_lines: + self.doc.writeln(docstring_line) + + def external_link(self, title, link): + if self.doc.target == 'html': + self.doc.write(f'`{title} <{link}>`_') + else: + self.doc.write(title) + + def internal_link(self, title, page): + if self.doc.target == 'html': + self.doc.write(f':doc:`{title} <{page}>`') + else: + self.doc.write(title) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/client.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/client.py new file mode 100644 index 00000000..bc9b2658 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/client.py @@ -0,0 +1,455 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore import xform_name +from botocore.compat import OrderedDict +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.docs.example import ResponseExampleDocumenter +from botocore.docs.method import ( + document_custom_method, + document_model_driven_method, + get_instance_public_methods, +) +from botocore.docs.params import ResponseParamsDocumenter +from botocore.docs.sharedexample import document_shared_examples +from botocore.docs.utils import DocumentedShape, get_official_service_name + + +def _allowlist_generate_presigned_url(method_name, service_name, **kwargs): + if method_name != 'generate_presigned_url': + return None + return service_name in ['s3'] + + +class ClientDocumenter: + _CLIENT_METHODS_FILTERS = [ + _allowlist_generate_presigned_url, + ] + + def __init__(self, client, root_docs_path, shared_examples=None): + self._client = client + self._client_class_name = self._client.__class__.__name__ + self._root_docs_path = root_docs_path + self._shared_examples = shared_examples + if self._shared_examples is None: + self._shared_examples = {} + self._service_name = self._client.meta.service_model.service_name + + def document_client(self, section): + """Documents a client and its methods + + :param section: The section to write to. + """ + self._add_title(section) + self._add_class_signature(section) + client_methods = self._get_client_methods() + self._add_client_intro(section, client_methods) + self._add_client_methods(client_methods) + + def _get_client_methods(self): + client_methods = get_instance_public_methods(self._client) + return self._filter_client_methods(client_methods) + + def _filter_client_methods(self, client_methods): + filtered_methods = {} + for method_name, method in client_methods.items(): + include = self._filter_client_method( + method=method, + method_name=method_name, + service_name=self._service_name, + ) + if include: + filtered_methods[method_name] = method + return filtered_methods + + def _filter_client_method(self, **kwargs): + # Apply each filter to the method + for filter in self._CLIENT_METHODS_FILTERS: + filter_include = filter(**kwargs) + # Use the first non-None value returned by any of the filters + if filter_include is not None: + return filter_include + # Otherwise default to including it + return True + + def _add_title(self, section): + section.style.h2('Client') + + def _add_client_intro(self, section, client_methods): + section = section.add_new_section('intro') + # Write out the top level description for the client. + official_service_name = get_official_service_name( + self._client.meta.service_model + ) + section.write( + f"A low-level client representing {official_service_name}" + ) + section.style.new_line() + section.include_doc_string( + self._client.meta.service_model.documentation + ) + + # Write out the client example instantiation. + self._add_client_creation_example(section) + + # List out all of the possible client methods. + section.style.dedent() + section.style.new_paragraph() + section.writeln('These are the available methods:') + section.style.toctree() + for method_name in sorted(client_methods): + section.style.tocitem(f'{self._service_name}/client/{method_name}') + + def _add_class_signature(self, section): + section.style.start_sphinx_py_class( + class_name=f'{self._client_class_name}.Client' + ) + + def _add_client_creation_example(self, section): + section.style.start_codeblock() + section.style.new_line() + section.write( + 'client = session.create_client(\'{service}\')'.format( + service=self._service_name + ) + ) + section.style.end_codeblock() + + def _add_client_methods(self, client_methods): + for method_name in sorted(client_methods): + # Create a new DocumentStructure for each client method and add contents. + method_doc_structure = DocumentStructure( + method_name, target='html' + ) + self._add_client_method( + method_doc_structure, method_name, client_methods[method_name] + ) + # Write client methods in individual/nested files. + # Path: /reference/services//client/.rst + client_dir_path = os.path.join( + self._root_docs_path, self._service_name, 'client' + ) + method_doc_structure.write_to_file(client_dir_path, method_name) + + def _add_client_method(self, section, method_name, method): + breadcrumb_section = section.add_new_section('breadcrumb') + breadcrumb_section.style.ref( + self._client_class_name, f'../../{self._service_name}' + ) + breadcrumb_section.write(f' / Client / {method_name}') + section.add_title_section(method_name) + method_section = section.add_new_section( + method_name, + context={'qualifier': f'{self._client_class_name}.Client.'}, + ) + if self._is_custom_method(method_name): + self._add_custom_method( + method_section, + method_name, + method, + ) + else: + self._add_model_driven_method(method_section, method_name) + + def _is_custom_method(self, method_name): + return method_name not in self._client.meta.method_to_api_mapping + + def _add_custom_method(self, section, method_name, method): + document_custom_method(section, method_name, method) + + def _add_method_exceptions_list(self, section, operation_model): + error_section = section.add_new_section('exceptions') + error_section.style.new_line() + error_section.style.bold('Exceptions') + error_section.style.new_line() + for error in operation_model.error_shapes: + class_name = ( + f'{self._client_class_name}.Client.exceptions.{error.name}' + ) + error_section.style.li(':py:class:`%s`' % class_name) + + def _add_model_driven_method(self, section, method_name): + service_model = self._client.meta.service_model + operation_name = self._client.meta.method_to_api_mapping[method_name] + operation_model = service_model.operation_model(operation_name) + + example_prefix = 'response = client.%s' % method_name + full_method_name = ( + f"{section.context.get('qualifier', '')}{method_name}" + ) + document_model_driven_method( + section, + full_method_name, + operation_model, + event_emitter=self._client.meta.events, + method_description=operation_model.documentation, + example_prefix=example_prefix, + ) + + # Add any modeled exceptions + if operation_model.error_shapes: + self._add_method_exceptions_list(section, operation_model) + + # Add the shared examples + shared_examples = self._shared_examples.get(operation_name) + if shared_examples: + document_shared_examples( + section, operation_model, example_prefix, shared_examples + ) + + +class ClientExceptionsDocumenter: + _USER_GUIDE_LINK = ( + 'https://boto3.amazonaws.com/' + 'v1/documentation/api/latest/guide/error-handling.html' + ) + _GENERIC_ERROR_SHAPE = DocumentedShape( + name='Error', + type_name='structure', + documentation=('Normalized access to common exception attributes.'), + members=OrderedDict( + [ + ( + 'Code', + DocumentedShape( + name='Code', + type_name='string', + documentation=( + 'An identifier specifying the exception type.' + ), + ), + ), + ( + 'Message', + DocumentedShape( + name='Message', + type_name='string', + documentation=( + 'A descriptive message explaining why the exception ' + 'occured.' + ), + ), + ), + ] + ), + ) + + def __init__(self, client, root_docs_path): + self._client = client + self._client_class_name = self._client.__class__.__name__ + self._service_name = self._client.meta.service_model.service_name + self._root_docs_path = root_docs_path + + def document_exceptions(self, section): + self._add_title(section) + self._add_overview(section) + self._add_exceptions_list(section) + self._add_exception_classes() + + def _add_title(self, section): + section.style.h2('Client Exceptions') + + def _add_overview(self, section): + section.style.new_line() + section.write( + 'Client exceptions are available on a client instance ' + 'via the ``exceptions`` property. For more detailed instructions ' + 'and examples on the exact usage of client exceptions, see the ' + 'error handling ' + ) + section.style.external_link( + title='user guide', + link=self._USER_GUIDE_LINK, + ) + section.write('.') + section.style.new_line() + + def _exception_class_name(self, shape): + return f'{self._client_class_name}.Client.exceptions.{shape.name}' + + def _add_exceptions_list(self, section): + error_shapes = self._client.meta.service_model.error_shapes + if not error_shapes: + section.style.new_line() + section.write('This client has no modeled exception classes.') + section.style.new_line() + return + section.style.new_line() + section.writeln('The available client exceptions are:') + section.style.toctree() + for shape in error_shapes: + section.style.tocitem( + f'{self._service_name}/client/exceptions/{shape.name}' + ) + + def _add_exception_classes(self): + for shape in self._client.meta.service_model.error_shapes: + # Create a new DocumentStructure for each exception method and add contents. + exception_doc_structure = DocumentStructure( + shape.name, target='html' + ) + self._add_exception_class(exception_doc_structure, shape) + # Write exceptions in individual/nested files. + # Path: /reference/services//client/exceptions/.rst + exception_dir_path = os.path.join( + self._root_docs_path, + self._service_name, + 'client', + 'exceptions', + ) + exception_doc_structure.write_to_file( + exception_dir_path, shape.name + ) + + def _add_exception_class(self, section, shape): + breadcrumb_section = section.add_new_section('breadcrumb') + breadcrumb_section.style.ref( + self._client_class_name, f'../../../{self._service_name}' + ) + breadcrumb_section.write(f' / Client / exceptions / {shape.name}') + section.add_title_section(shape.name) + class_section = section.add_new_section(shape.name) + class_name = self._exception_class_name(shape) + class_section.style.start_sphinx_py_class(class_name=class_name) + self._add_top_level_documentation(class_section, shape) + self._add_exception_catch_example(class_section, shape) + self._add_response_attr(class_section, shape) + class_section.style.end_sphinx_py_class() + + def _add_top_level_documentation(self, section, shape): + if shape.documentation: + section.style.new_line() + section.include_doc_string(shape.documentation) + section.style.new_line() + + def _add_exception_catch_example(self, section, shape): + section.style.new_line() + section.style.bold('Example') + section.style.new_paragraph() + section.style.start_codeblock() + section.write('try:') + section.style.indent() + section.style.new_line() + section.write('...') + section.style.dedent() + section.style.new_line() + section.write('except client.exceptions.%s as e:' % shape.name) + section.style.indent() + section.style.new_line() + section.write('print(e.response)') + section.style.dedent() + section.style.end_codeblock() + + def _add_response_attr(self, section, shape): + response_section = section.add_new_section('response') + response_section.style.start_sphinx_py_attr('response') + self._add_response_attr_description(response_section) + self._add_response_example(response_section, shape) + self._add_response_params(response_section, shape) + response_section.style.end_sphinx_py_attr() + + def _add_response_attr_description(self, section): + section.style.new_line() + section.include_doc_string( + 'The parsed error response. All exceptions have a top level ' + '``Error`` key that provides normalized access to common ' + 'exception atrributes. All other keys are specific to this ' + 'service or exception class.' + ) + section.style.new_line() + + def _add_response_example(self, section, shape): + example_section = section.add_new_section('syntax') + example_section.style.new_line() + example_section.style.bold('Syntax') + example_section.style.new_paragraph() + documenter = ResponseExampleDocumenter( + service_name=self._service_name, + operation_name=None, + event_emitter=self._client.meta.events, + ) + documenter.document_example( + example_section, + shape, + include=[self._GENERIC_ERROR_SHAPE], + ) + + def _add_response_params(self, section, shape): + params_section = section.add_new_section('Structure') + params_section.style.new_line() + params_section.style.bold('Structure') + params_section.style.new_paragraph() + documenter = ResponseParamsDocumenter( + service_name=self._service_name, + operation_name=None, + event_emitter=self._client.meta.events, + ) + documenter.document_params( + params_section, + shape, + include=[self._GENERIC_ERROR_SHAPE], + ) + + +class ClientContextParamsDocumenter: + _CONFIG_GUIDE_LINK = ( + 'https://boto3.amazonaws.com/' + 'v1/documentation/api/latest/guide/configuration.html' + ) + + OMITTED_CONTEXT_PARAMS = { + 's3': ( + 'Accelerate', + 'DisableMultiRegionAccessPoints', + 'ForcePathStyle', + 'UseArnRegion', + ), + 's3control': ('UseArnRegion',), + } + + def __init__(self, service_name, context_params): + self._service_name = service_name + self._context_params = context_params + + def document_context_params(self, section): + self._add_title(section) + self._add_overview(section) + self._add_context_params_list(section) + + def _add_title(self, section): + section.style.h2('Client Context Parameters') + + def _add_overview(self, section): + section.style.new_line() + section.write( + 'Client context parameters are configurable on a client ' + 'instance via the ``client_context_params`` parameter in the ' + '``Config`` object. For more detailed instructions and examples ' + 'on the exact usage of context params see the ' + ) + section.style.external_link( + title='configuration guide', + link=self._CONFIG_GUIDE_LINK, + ) + section.write('.') + section.style.new_line() + + def _add_context_params_list(self, section): + section.style.new_line() + sn = f'``{self._service_name}``' + section.writeln(f'The available {sn} client context params are:') + for param in self._context_params: + section.style.new_line() + name = f'``{xform_name(param.name)}``' + section.write(f'* {name} ({param.type}) - {param.documentation}') diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/docstring.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/docstring.py new file mode 100644 index 00000000..93b2e6b2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/docstring.py @@ -0,0 +1,97 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.docs.method import document_model_driven_method +from botocore.docs.paginator import document_paginate_method +from botocore.docs.waiter import document_wait_method + + +class LazyLoadedDocstring(str): + """Used for lazily loading docstrings + + You can instantiate this class and assign it to a __doc__ value. + The docstring will not be generated till accessed via __doc__ or + help(). Note that all docstring classes **must** subclass from + this class. It cannot be used directly as a docstring. + """ + + def __init__(self, *args, **kwargs): + """ + The args and kwargs are the same as the underlying document + generation function. These just get proxied to the underlying + function. + """ + super().__init__() + self._gen_args = args + self._gen_kwargs = kwargs + self._docstring = None + + def __new__(cls, *args, **kwargs): + # Needed in order to sub class from str with args and kwargs + return super().__new__(cls) + + def _write_docstring(self, *args, **kwargs): + raise NotImplementedError( + '_write_docstring is not implemented. Please subclass from ' + 'this class and provide your own _write_docstring method' + ) + + def expandtabs(self, tabsize=8): + """Expands tabs to spaces + + So this is a big hack in order to get lazy loaded docstring work + for the ``help()``. In the ``help()`` function, ``pydoc`` and + ``inspect`` are used. At some point the ``inspect.cleandoc`` + method is called. To clean the docs ``expandtabs`` is called + and that is where we override the method to generate and return the + docstrings. + """ + if self._docstring is None: + self._generate() + return self._docstring.expandtabs(tabsize) + + def __str__(self): + return self._generate() + + # __doc__ of target will use either __repr__ or __str__ of this class. + __repr__ = __str__ + + def _generate(self): + # Generate the docstring if it is not already cached. + if self._docstring is None: + self._docstring = self._create_docstring() + return self._docstring + + def _create_docstring(self): + docstring_structure = DocumentStructure('docstring', target='html') + # Call the document method function with the args and kwargs + # passed to the class. + self._write_docstring( + docstring_structure, *self._gen_args, **self._gen_kwargs + ) + return docstring_structure.flush_structure().decode('utf-8') + + +class ClientMethodDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_model_driven_method(*args, **kwargs) + + +class WaiterDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_wait_method(*args, **kwargs) + + +class PaginatorDocstring(LazyLoadedDocstring): + def _write_docstring(self, *args, **kwargs): + document_paginate_method(*args, **kwargs) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/example.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/example.py new file mode 100644 index 00000000..9f831bcd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/example.py @@ -0,0 +1,236 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from botocore.docs.shape import ShapeDocumenter +from botocore.docs.utils import py_default + + +class BaseExampleDocumenter(ShapeDocumenter): + def document_example( + self, section, shape, prefix=None, include=None, exclude=None + ): + """Generates an example based on a shape + + :param section: The section to write the documentation to. + + :param shape: The shape of the operation. + + :param prefix: Anything to be included before the example + + :type include: Dictionary where keys are parameter names and + values are the shapes of the parameter names. + :param include: The parameter shapes to include in the documentation. + + :type exclude: List of the names of the parameters to exclude. + :param exclude: The names of the parameters to exclude from + documentation. + """ + history = [] + section.style.new_line() + section.style.start_codeblock() + if prefix is not None: + section.write(prefix) + self.traverse_and_document_shape( + section=section, + shape=shape, + history=history, + include=include, + exclude=exclude, + ) + final_blank_line_section = section.add_new_section('final-blank-line') + final_blank_line_section.style.new_line() + + def document_recursive_shape(self, section, shape, **kwargs): + section.write('{\'... recursive ...\'}') + + def document_shape_default( + self, section, shape, history, include=None, exclude=None, **kwargs + ): + py_type = self._get_special_py_default(shape) + if py_type is None: + py_type = py_default(shape.type_name) + + if self._context.get('streaming_shape') == shape: + py_type = 'StreamingBody()' + section.write(py_type) + + def document_shape_type_string( + self, section, shape, history, include=None, exclude=None, **kwargs + ): + if 'enum' in shape.metadata: + for i, enum in enumerate(shape.metadata['enum']): + section.write('\'%s\'' % enum) + if i < len(shape.metadata['enum']) - 1: + section.write('|') + else: + self.document_shape_default(section, shape, history) + + def document_shape_type_list( + self, section, shape, history, include=None, exclude=None, **kwargs + ): + param_shape = shape.member + list_section = section.add_new_section('list-value') + self._start_nested_param(list_section, '[') + param_section = list_section.add_new_section( + 'member', context={'shape': param_shape.name} + ) + self.traverse_and_document_shape( + section=param_section, shape=param_shape, history=history + ) + ending_comma_section = list_section.add_new_section('ending-comma') + ending_comma_section.write(',') + ending_bracket_section = list_section.add_new_section('ending-bracket') + self._end_nested_param(ending_bracket_section, ']') + + def document_shape_type_structure( + self, section, shape, history, include=None, exclude=None, **kwargs + ): + if not shape.members: + section.write('{}') + return + + section = section.add_new_section('structure-value') + self._start_nested_param(section, '{') + + input_members = self._add_members_to_shape(shape.members, include) + + for i, param in enumerate(input_members): + if exclude and param in exclude: + continue + param_section = section.add_new_section(param) + param_section.write('\'%s\': ' % param) + param_shape = input_members[param] + param_value_section = param_section.add_new_section( + 'member-value', context={'shape': param_shape.name} + ) + self.traverse_and_document_shape( + section=param_value_section, + shape=param_shape, + history=history, + name=param, + ) + if i < len(input_members) - 1: + ending_comma_section = param_section.add_new_section( + 'ending-comma' + ) + ending_comma_section.write(',') + ending_comma_section.style.new_line() + self._end_structure(section, '{', '}') + + def document_shape_type_map( + self, section, shape, history, include=None, exclude=None, **kwargs + ): + map_section = section.add_new_section('map-value') + self._start_nested_param(map_section, '{') + value_shape = shape.value + key_section = map_section.add_new_section( + 'key', context={'shape': shape.key.name} + ) + key_section.write('\'string\': ') + value_section = map_section.add_new_section( + 'value', context={'shape': value_shape.name} + ) + self.traverse_and_document_shape( + section=value_section, shape=value_shape, history=history + ) + end_bracket_section = map_section.add_new_section('ending-bracket') + self._end_nested_param(end_bracket_section, '}') + + def _add_members_to_shape(self, members, include): + if include: + members = members.copy() + for param in include: + members[param.name] = param + return members + + def _start_nested_param(self, section, start=None): + if start is not None: + section.write(start) + section.style.indent() + section.style.indent() + section.style.new_line() + + def _end_nested_param(self, section, end=None): + section.style.dedent() + section.style.dedent() + section.style.new_line() + if end is not None: + section.write(end) + + def _end_structure(self, section, start, end): + # If there are no members in the strucuture, then make sure the + # start and the end bracket are on the same line, by removing all + # previous text and writing the start and end. + if not section.available_sections: + section.clear_text() + section.write(start + end) + self._end_nested_param(section) + else: + end_bracket_section = section.add_new_section('ending-bracket') + self._end_nested_param(end_bracket_section, end) + + +class ResponseExampleDocumenter(BaseExampleDocumenter): + EVENT_NAME = 'response-example' + + def document_shape_type_event_stream( + self, section, shape, history, **kwargs + ): + section.write('EventStream(') + self.document_shape_type_structure(section, shape, history, **kwargs) + end_section = section.add_new_section('event-stream-end') + end_section.write(')') + + +class RequestExampleDocumenter(BaseExampleDocumenter): + EVENT_NAME = 'request-example' + + def document_shape_type_structure( + self, section, shape, history, include=None, exclude=None, **kwargs + ): + param_format = '\'%s\'' + operator = ': ' + start = '{' + end = '}' + + if len(history) <= 1: + operator = '=' + start = '(' + end = ')' + param_format = '%s' + section = section.add_new_section('structure-value') + self._start_nested_param(section, start) + input_members = self._add_members_to_shape(shape.members, include) + + for i, param in enumerate(input_members): + if exclude and param in exclude: + continue + param_section = section.add_new_section(param) + param_section.write(param_format % param) + param_section.write(operator) + param_shape = input_members[param] + param_value_section = param_section.add_new_section( + 'member-value', context={'shape': param_shape.name} + ) + self.traverse_and_document_shape( + section=param_value_section, + shape=param_shape, + history=history, + name=param, + ) + if i < len(input_members) - 1: + ending_comma_section = param_section.add_new_section( + 'ending-comma' + ) + ending_comma_section.write(',') + ending_comma_section.style.new_line() + self._end_structure(section, start, end) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/method.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/method.py new file mode 100644 index 00000000..5db906c8 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/method.py @@ -0,0 +1,328 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import inspect +import types + +from botocore.docs.example import ( + RequestExampleDocumenter, + ResponseExampleDocumenter, +) +from botocore.docs.params import ( + RequestParamsDocumenter, + ResponseParamsDocumenter, +) + +AWS_DOC_BASE = 'https://docs.aws.amazon.com/goto/WebAPI' + + +def get_instance_public_methods(instance): + """Retrieves an objects public methods + + :param instance: The instance of the class to inspect + :rtype: dict + :returns: A dictionary that represents an instance's methods where + the keys are the name of the methods and the + values are the handler to the method. + """ + instance_members = inspect.getmembers(instance) + instance_methods = {} + for name, member in instance_members: + if not name.startswith('_'): + if inspect.ismethod(member): + instance_methods[name] = member + return instance_methods + + +def document_model_driven_signature( + section, name, operation_model, include=None, exclude=None +): + """Documents the signature of a model-driven method + + :param section: The section to write the documentation to. + + :param name: The name of the method + + :param operation_model: The operation model for the method + + :type include: Dictionary where keys are parameter names and + values are the shapes of the parameter names. + :param include: The parameter shapes to include in the documentation. + + :type exclude: List of the names of the parameters to exclude. + :param exclude: The names of the parameters to exclude from + documentation. + """ + params = {} + if operation_model.input_shape: + params = operation_model.input_shape.members + + parameter_names = list(params.keys()) + + if include is not None: + for member in include: + parameter_names.append(member.name) + + if exclude is not None: + for member in exclude: + if member in parameter_names: + parameter_names.remove(member) + + signature_params = '' + if parameter_names: + signature_params = '**kwargs' + section.style.start_sphinx_py_method(name, signature_params) + + +def document_custom_signature( + section, name, method, include=None, exclude=None +): + """Documents the signature of a custom method + + :param section: The section to write the documentation to. + + :param name: The name of the method + + :param method: The handle to the method being documented + + :type include: Dictionary where keys are parameter names and + values are the shapes of the parameter names. + :param include: The parameter shapes to include in the documentation. + + :type exclude: List of the names of the parameters to exclude. + :param exclude: The names of the parameters to exclude from + documentation. + """ + signature = inspect.signature(method) + # "raw" class methods are FunctionType and they include "self" param + # object methods are MethodType and they skip the "self" param + if isinstance(method, types.FunctionType): + self_param = next(iter(signature.parameters)) + self_kind = signature.parameters[self_param].kind + # safety check that we got the right parameter + assert self_kind == inspect.Parameter.POSITIONAL_OR_KEYWORD + new_params = signature.parameters.copy() + del new_params[self_param] + signature = signature.replace(parameters=new_params.values()) + signature_params = str(signature).lstrip('(') + signature_params = signature_params.rstrip(')') + section.style.start_sphinx_py_method(name, signature_params) + + +def document_custom_method(section, method_name, method): + """Documents a non-data driven method + + :param section: The section to write the documentation to. + + :param method_name: The name of the method + + :param method: The handle to the method being documented + """ + full_method_name = f"{section.context.get('qualifier', '')}{method_name}" + document_custom_signature(section, full_method_name, method) + method_intro_section = section.add_new_section('method-intro') + method_intro_section.writeln('') + doc_string = inspect.getdoc(method) + if doc_string is not None: + method_intro_section.style.write_py_doc_string(doc_string) + + +def document_model_driven_method( + section, + method_name, + operation_model, + event_emitter, + method_description=None, + example_prefix=None, + include_input=None, + include_output=None, + exclude_input=None, + exclude_output=None, + document_output=True, + include_signature=True, +): + """Documents an individual method + + :param section: The section to write to + + :param method_name: The name of the method + + :param operation_model: The model of the operation + + :param event_emitter: The event emitter to use to emit events + + :param example_prefix: The prefix to use in the method example. + + :type include_input: Dictionary where keys are parameter names and + values are the shapes of the parameter names. + :param include_input: The parameter shapes to include in the + input documentation. + + :type include_output: Dictionary where keys are parameter names and + values are the shapes of the parameter names. + :param include_input: The parameter shapes to include in the + output documentation. + + :type exclude_input: List of the names of the parameters to exclude. + :param exclude_input: The names of the parameters to exclude from + input documentation. + + :type exclude_output: List of the names of the parameters to exclude. + :param exclude_input: The names of the parameters to exclude from + output documentation. + + :param document_output: A boolean flag to indicate whether to + document the output. + + :param include_signature: Whether or not to include the signature. + It is useful for generating docstrings. + """ + # Add the signature if specified. + if include_signature: + document_model_driven_signature( + section, + method_name, + operation_model, + include=include_input, + exclude=exclude_input, + ) + + # Add the description for the method. + method_intro_section = section.add_new_section('method-intro') + method_intro_section.include_doc_string(method_description) + if operation_model.deprecated: + method_intro_section.style.start_danger() + method_intro_section.writeln( + 'This operation is deprecated and may not function as ' + 'expected. This operation should not be used going forward ' + 'and is only kept for the purpose of backwards compatiblity.' + ) + method_intro_section.style.end_danger() + service_uid = operation_model.service_model.metadata.get('uid') + if service_uid is not None: + method_intro_section.style.new_paragraph() + method_intro_section.write("See also: ") + link = f"{AWS_DOC_BASE}/{service_uid}/{operation_model.name}" + method_intro_section.style.external_link( + title="AWS API Documentation", link=link + ) + method_intro_section.writeln('') + + # Add the example section. + example_section = section.add_new_section('request-example') + example_section.style.new_paragraph() + example_section.style.bold('Request Syntax') + + context = { + 'special_shape_types': { + 'streaming_input_shape': operation_model.get_streaming_input(), + 'streaming_output_shape': operation_model.get_streaming_output(), + 'eventstream_output_shape': operation_model.get_event_stream_output(), + }, + } + + if operation_model.input_shape: + RequestExampleDocumenter( + service_name=operation_model.service_model.service_name, + operation_name=operation_model.name, + event_emitter=event_emitter, + context=context, + ).document_example( + example_section, + operation_model.input_shape, + prefix=example_prefix, + include=include_input, + exclude=exclude_input, + ) + else: + example_section.style.new_paragraph() + example_section.style.start_codeblock() + example_section.write(example_prefix + '()') + + # Add the request parameter documentation. + request_params_section = section.add_new_section('request-params') + if operation_model.input_shape: + RequestParamsDocumenter( + service_name=operation_model.service_model.service_name, + operation_name=operation_model.name, + event_emitter=event_emitter, + context=context, + ).document_params( + request_params_section, + operation_model.input_shape, + include=include_input, + exclude=exclude_input, + ) + + # Add the return value documentation + return_section = section.add_new_section('return') + return_section.style.new_line() + if operation_model.output_shape is not None and document_output: + return_section.write(':rtype: dict') + return_section.style.new_line() + return_section.write(':returns: ') + return_section.style.indent() + return_section.style.new_line() + + # If the operation is an event stream, describe the tagged union + event_stream_output = operation_model.get_event_stream_output() + if event_stream_output: + event_section = return_section.add_new_section('event-stream') + event_section.style.new_paragraph() + event_section.write( + 'The response of this operation contains an ' + ':class:`.EventStream` member. When iterated the ' + ':class:`.EventStream` will yield events based on the ' + 'structure below, where only one of the top level keys ' + 'will be present for any given event.' + ) + event_section.style.new_line() + + # Add an example return value + return_example_section = return_section.add_new_section( + 'response-example' + ) + return_example_section.style.new_line() + return_example_section.style.bold('Response Syntax') + return_example_section.style.new_paragraph() + ResponseExampleDocumenter( + service_name=operation_model.service_model.service_name, + operation_name=operation_model.name, + event_emitter=event_emitter, + context=context, + ).document_example( + return_example_section, + operation_model.output_shape, + include=include_output, + exclude=exclude_output, + ) + + # Add a description for the return value + return_description_section = return_section.add_new_section( + 'description' + ) + return_description_section.style.new_line() + return_description_section.style.bold('Response Structure') + return_description_section.style.new_paragraph() + ResponseParamsDocumenter( + service_name=operation_model.service_model.service_name, + operation_name=operation_model.name, + event_emitter=event_emitter, + context=context, + ).document_params( + return_description_section, + operation_model.output_shape, + include=include_output, + exclude=exclude_output, + ) + else: + return_section.write(':returns: None') diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/paginator.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/paginator.py new file mode 100644 index 00000000..1ac4dd48 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/paginator.py @@ -0,0 +1,243 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore import xform_name +from botocore.compat import OrderedDict +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.docs.method import document_model_driven_method +from botocore.docs.utils import DocumentedShape +from botocore.utils import get_service_module_name + + +class PaginatorDocumenter: + def __init__(self, client, service_paginator_model, root_docs_path): + self._client = client + self._client_class_name = self._client.__class__.__name__ + self._service_name = self._client.meta.service_model.service_name + self._service_paginator_model = service_paginator_model + self._root_docs_path = root_docs_path + self._USER_GUIDE_LINK = ( + 'https://boto3.amazonaws.com/' + 'v1/documentation/api/latest/guide/paginators.html' + ) + + def document_paginators(self, section): + """Documents the various paginators for a service + + param section: The section to write to. + """ + section.style.h2('Paginators') + self._add_overview(section) + section.style.new_line() + section.writeln('The available paginators are:') + section.style.toctree() + + paginator_names = sorted( + self._service_paginator_model._paginator_config + ) + + # List the available paginators and then document each paginator. + for paginator_name in paginator_names: + section.style.tocitem( + f'{self._service_name}/paginator/{paginator_name}' + ) + # Create a new DocumentStructure for each paginator and add contents. + paginator_doc_structure = DocumentStructure( + paginator_name, target='html' + ) + self._add_paginator(paginator_doc_structure, paginator_name) + # Write paginators in individual/nested files. + # Path: /reference/services//paginator/.rst + paginator_dir_path = os.path.join( + self._root_docs_path, self._service_name, 'paginator' + ) + paginator_doc_structure.write_to_file( + paginator_dir_path, paginator_name + ) + + def _add_paginator(self, section, paginator_name): + breadcrumb_section = section.add_new_section('breadcrumb') + breadcrumb_section.style.ref( + self._client_class_name, f'../../{self._service_name}' + ) + breadcrumb_section.write(f' / Paginator / {paginator_name}') + section.add_title_section(paginator_name) + + # Docment the paginator class + paginator_section = section.add_new_section(paginator_name) + paginator_section.style.start_sphinx_py_class( + class_name=( + f'{self._client_class_name}.Paginator.{paginator_name}' + ) + ) + paginator_section.style.start_codeblock() + paginator_section.style.new_line() + + # Document how to instantiate the paginator. + paginator_section.write( + f"paginator = client.get_paginator('{xform_name(paginator_name)}')" + ) + paginator_section.style.end_codeblock() + paginator_section.style.new_line() + # Get the pagination model for the particular paginator. + paginator_config = self._service_paginator_model.get_paginator( + paginator_name + ) + document_paginate_method( + section=paginator_section, + paginator_name=paginator_name, + event_emitter=self._client.meta.events, + service_model=self._client.meta.service_model, + paginator_config=paginator_config, + ) + + def _add_overview(self, section): + section.style.new_line() + section.write( + 'Paginators are available on a client instance ' + 'via the ``get_paginator`` method. For more detailed instructions ' + 'and examples on the usage of paginators, see the ' + 'paginators ' + ) + section.style.external_link( + title='user guide', + link=self._USER_GUIDE_LINK, + ) + section.write('.') + section.style.new_line() + + +def document_paginate_method( + section, + paginator_name, + event_emitter, + service_model, + paginator_config, + include_signature=True, +): + """Documents the paginate method of a paginator + + :param section: The section to write to + + :param paginator_name: The name of the paginator. It is snake cased. + + :param event_emitter: The event emitter to use to emit events + + :param service_model: The service model + + :param paginator_config: The paginator config associated to a particular + paginator. + + :param include_signature: Whether or not to include the signature. + It is useful for generating docstrings. + """ + # Retrieve the operation model of the underlying operation. + operation_model = service_model.operation_model(paginator_name) + + # Add representations of the request and response parameters + # we want to include in the description of the paginate method. + # These are parameters we expose via the botocore interface. + pagination_config_members = OrderedDict() + + pagination_config_members['MaxItems'] = DocumentedShape( + name='MaxItems', + type_name='integer', + documentation=( + '

The total number of items to return. If the total ' + 'number of items available is more than the value ' + 'specified in max-items then a NextToken ' + 'will be provided in the output that you can use to ' + 'resume pagination.

' + ), + ) + + if paginator_config.get('limit_key', None): + pagination_config_members['PageSize'] = DocumentedShape( + name='PageSize', + type_name='integer', + documentation='

The size of each page.

', + ) + + pagination_config_members['StartingToken'] = DocumentedShape( + name='StartingToken', + type_name='string', + documentation=( + '

A token to specify where to start paginating. ' + 'This is the NextToken from a previous ' + 'response.

' + ), + ) + + botocore_pagination_params = [ + DocumentedShape( + name='PaginationConfig', + type_name='structure', + documentation=( + '

A dictionary that provides parameters to control ' + 'pagination.

' + ), + members=pagination_config_members, + ) + ] + + botocore_pagination_response_params = [ + DocumentedShape( + name='NextToken', + type_name='string', + documentation=('

A token to resume pagination.

'), + ) + ] + + service_pagination_params = [] + + # Add the normal input token of the method to a list + # of input paramters that we wish to hide since we expose our own. + if isinstance(paginator_config['input_token'], list): + service_pagination_params += paginator_config['input_token'] + else: + service_pagination_params.append(paginator_config['input_token']) + + # Hide the limit key in the documentation. + if paginator_config.get('limit_key', None): + service_pagination_params.append(paginator_config['limit_key']) + + # Hide the output tokens in the documentation. + service_pagination_response_params = [] + if isinstance(paginator_config['output_token'], list): + service_pagination_response_params += paginator_config['output_token'] + else: + service_pagination_response_params.append( + paginator_config['output_token'] + ) + + paginate_description = ( + 'Creates an iterator that will paginate through responses ' + 'from :py:meth:`{}.Client.{}`.'.format( + get_service_module_name(service_model), xform_name(paginator_name) + ) + ) + + document_model_driven_method( + section, + 'paginate', + operation_model, + event_emitter=event_emitter, + method_description=paginate_description, + example_prefix='response_iterator = paginator.paginate', + include_input=botocore_pagination_params, + include_output=botocore_pagination_response_params, + exclude_input=service_pagination_params, + exclude_output=service_pagination_response_params, + include_signature=include_signature, + ) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/params.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/params.py new file mode 100644 index 00000000..cddaf12f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/params.py @@ -0,0 +1,303 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from botocore.docs.shape import ShapeDocumenter +from botocore.docs.utils import py_type_name + + +class BaseParamsDocumenter(ShapeDocumenter): + def document_params(self, section, shape, include=None, exclude=None): + """Fills out the documentation for a section given a model shape. + + :param section: The section to write the documentation to. + + :param shape: The shape of the operation. + + :type include: Dictionary where keys are parameter names and + values are the shapes of the parameter names. + :param include: The parameter shapes to include in the documentation. + + :type exclude: List of the names of the parameters to exclude. + :param exclude: The names of the parameters to exclude from + documentation. + """ + history = [] + self.traverse_and_document_shape( + section=section, + shape=shape, + history=history, + name=None, + include=include, + exclude=exclude, + ) + + def document_recursive_shape(self, section, shape, **kwargs): + self._add_member_documentation(section, shape, **kwargs) + + def document_shape_default( + self, section, shape, history, include=None, exclude=None, **kwargs + ): + self._add_member_documentation(section, shape, **kwargs) + + def document_shape_type_list( + self, section, shape, history, include=None, exclude=None, **kwargs + ): + self._add_member_documentation(section, shape, **kwargs) + param_shape = shape.member + param_section = section.add_new_section( + param_shape.name, context={'shape': shape.member.name} + ) + self._start_nested_param(param_section) + self.traverse_and_document_shape( + section=param_section, + shape=param_shape, + history=history, + name=None, + ) + section = section.add_new_section('end-list') + self._end_nested_param(section) + + def document_shape_type_map( + self, section, shape, history, include=None, exclude=None, **kwargs + ): + self._add_member_documentation(section, shape, **kwargs) + + key_section = section.add_new_section( + 'key', context={'shape': shape.key.name} + ) + self._start_nested_param(key_section) + self._add_member_documentation(key_section, shape.key) + + param_section = section.add_new_section( + shape.value.name, context={'shape': shape.value.name} + ) + param_section.style.indent() + self._start_nested_param(param_section) + self.traverse_and_document_shape( + section=param_section, + shape=shape.value, + history=history, + name=None, + ) + + end_section = section.add_new_section('end-map') + self._end_nested_param(end_section) + self._end_nested_param(end_section) + + def document_shape_type_structure( + self, + section, + shape, + history, + include=None, + exclude=None, + name=None, + **kwargs, + ): + members = self._add_members_to_shape(shape.members, include) + self._add_member_documentation(section, shape, name=name) + for param in members: + if exclude and param in exclude: + continue + param_shape = members[param] + param_section = section.add_new_section( + param, context={'shape': param_shape.name} + ) + self._start_nested_param(param_section) + self.traverse_and_document_shape( + section=param_section, + shape=param_shape, + history=history, + name=param, + ) + section = section.add_new_section('end-structure') + self._end_nested_param(section) + + def _add_member_documentation(self, section, shape, **kwargs): + pass + + def _add_members_to_shape(self, members, include): + if include: + members = members.copy() + for param in include: + members[param.name] = param + return members + + def _document_non_top_level_param_type(self, type_section, shape): + special_py_type = self._get_special_py_type_name(shape) + py_type = py_type_name(shape.type_name) + + type_format = '(%s) --' + if special_py_type is not None: + # Special type can reference a linked class. + # Italicizing it blows away the link. + type_section.write(type_format % special_py_type) + else: + type_section.style.italics(type_format % py_type) + type_section.write(' ') + + def _start_nested_param(self, section): + section.style.indent() + section.style.new_line() + + def _end_nested_param(self, section): + section.style.dedent() + section.style.new_line() + + +class ResponseParamsDocumenter(BaseParamsDocumenter): + """Generates the description for the response parameters""" + + EVENT_NAME = 'response-params' + + def _add_member_documentation(self, section, shape, name=None, **kwargs): + name_section = section.add_new_section('param-name') + name_section.write('- ') + if name is not None: + name_section.style.bold('%s' % name) + name_section.write(' ') + type_section = section.add_new_section('param-type') + self._document_non_top_level_param_type(type_section, shape) + + documentation_section = section.add_new_section('param-documentation') + if shape.documentation: + documentation_section.style.indent() + if getattr(shape, 'is_tagged_union', False): + tagged_union_docs = section.add_new_section( + 'param-tagged-union-docs' + ) + note = ( + '.. note::' + ' This is a Tagged Union structure. Only one of the ' + ' following top level keys will be set: %s. ' + ' If a client receives an unknown member it will ' + ' set ``SDK_UNKNOWN_MEMBER`` as the top level key, ' + ' which maps to the name or tag of the unknown ' + ' member. The structure of ``SDK_UNKNOWN_MEMBER`` is ' + ' as follows' + ) + tagged_union_members_str = ', '.join( + ['``%s``' % key for key in shape.members.keys()] + ) + unknown_code_example = ( + '\'SDK_UNKNOWN_MEMBER\': ' + '{\'name\': \'UnknownMemberName\'}' + ) + tagged_union_docs.write(note % (tagged_union_members_str)) + example = section.add_new_section('param-unknown-example') + example.style.codeblock(unknown_code_example) + documentation_section.include_doc_string(shape.documentation) + section.style.new_paragraph() + + def document_shape_type_event_stream( + self, section, shape, history, **kwargs + ): + self.document_shape_type_structure(section, shape, history, **kwargs) + + +class RequestParamsDocumenter(BaseParamsDocumenter): + """Generates the description for the request parameters""" + + EVENT_NAME = 'request-params' + + def document_shape_type_structure( + self, section, shape, history, include=None, exclude=None, **kwargs + ): + if len(history) > 1: + self._add_member_documentation(section, shape, **kwargs) + section.style.indent() + members = self._add_members_to_shape(shape.members, include) + for i, param in enumerate(members): + if exclude and param in exclude: + continue + param_shape = members[param] + param_section = section.add_new_section( + param, context={'shape': param_shape.name} + ) + param_section.style.new_line() + is_required = param in shape.required_members + self.traverse_and_document_shape( + section=param_section, + shape=param_shape, + history=history, + name=param, + is_required=is_required, + ) + section = section.add_new_section('end-structure') + if len(history) > 1: + section.style.dedent() + section.style.new_line() + + def _add_member_documentation( + self, + section, + shape, + name=None, + is_top_level_param=False, + is_required=False, + **kwargs, + ): + py_type = self._get_special_py_type_name(shape) + if py_type is None: + py_type = py_type_name(shape.type_name) + if is_top_level_param: + type_section = section.add_new_section('param-type') + type_section.write(f':type {name}: {py_type}') + end_type_section = type_section.add_new_section('end-param-type') + end_type_section.style.new_line() + name_section = section.add_new_section('param-name') + name_section.write(':param %s: ' % name) + + else: + name_section = section.add_new_section('param-name') + name_section.write('- ') + if name is not None: + name_section.style.bold('%s' % name) + name_section.write(' ') + type_section = section.add_new_section('param-type') + self._document_non_top_level_param_type(type_section, shape) + + if is_required: + is_required_section = section.add_new_section('is-required') + is_required_section.style.indent() + is_required_section.style.bold('[REQUIRED]') + is_required_section.write(' ') + if shape.documentation: + documentation_section = section.add_new_section( + 'param-documentation' + ) + documentation_section.style.indent() + if getattr(shape, 'is_tagged_union', False): + tagged_union_docs = section.add_new_section( + 'param-tagged-union-docs' + ) + note = ( + '.. note::' + ' This is a Tagged Union structure. Only one of the ' + ' following top level keys can be set: %s. ' + ) + tagged_union_members_str = ', '.join( + ['``%s``' % key for key in shape.members.keys()] + ) + tagged_union_docs.write(note % (tagged_union_members_str)) + documentation_section.include_doc_string(shape.documentation) + self._add_special_trait_documentation(documentation_section, shape) + end_param_section = section.add_new_section('end-param') + end_param_section.style.new_paragraph() + + def _add_special_trait_documentation(self, section, shape): + if 'idempotencyToken' in shape.metadata: + self._append_idempotency_documentation(section) + + def _append_idempotency_documentation(self, section): + docstring = 'This field is autopopulated if not provided.' + section.write(docstring) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/service.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/service.py new file mode 100644 index 00000000..d20a889d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/service.py @@ -0,0 +1,133 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.docs.client import ( + ClientContextParamsDocumenter, + ClientDocumenter, + ClientExceptionsDocumenter, +) +from botocore.docs.paginator import PaginatorDocumenter +from botocore.docs.waiter import WaiterDocumenter +from botocore.exceptions import DataNotFoundError + + +class ServiceDocumenter: + def __init__(self, service_name, session, root_docs_path): + self._session = session + self._service_name = service_name + self._root_docs_path = root_docs_path + + self._client = self._session.create_client( + service_name, + region_name='us-east-1', + aws_access_key_id='foo', + aws_secret_access_key='bar', + ) + self._event_emitter = self._client.meta.events + + self.sections = [ + 'title', + 'client-api', + 'client-exceptions', + 'paginator-api', + 'waiter-api', + 'client-context-params', + ] + + def document_service(self): + """Documents an entire service. + + :returns: The reStructured text of the documented service. + """ + doc_structure = DocumentStructure( + self._service_name, section_names=self.sections, target='html' + ) + self.title(doc_structure.get_section('title')) + self.client_api(doc_structure.get_section('client-api')) + self.client_exceptions(doc_structure.get_section('client-exceptions')) + self.paginator_api(doc_structure.get_section('paginator-api')) + self.waiter_api(doc_structure.get_section('waiter-api')) + context_params_section = doc_structure.get_section( + 'client-context-params' + ) + self.client_context_params(context_params_section) + return doc_structure.flush_structure() + + def title(self, section): + section.style.h1(self._client.__class__.__name__) + self._event_emitter.emit( + f"docs.title.{self._service_name}", section=section + ) + + def table_of_contents(self, section): + section.style.table_of_contents(title='Table of Contents', depth=2) + + def client_api(self, section): + examples = None + try: + examples = self.get_examples(self._service_name) + except DataNotFoundError: + pass + + ClientDocumenter( + self._client, self._root_docs_path, examples + ).document_client(section) + + def client_exceptions(self, section): + ClientExceptionsDocumenter( + self._client, self._root_docs_path + ).document_exceptions(section) + + def paginator_api(self, section): + try: + service_paginator_model = self._session.get_paginator_model( + self._service_name + ) + except DataNotFoundError: + return + if service_paginator_model._paginator_config: + paginator_documenter = PaginatorDocumenter( + self._client, service_paginator_model, self._root_docs_path + ) + paginator_documenter.document_paginators(section) + + def waiter_api(self, section): + if self._client.waiter_names: + service_waiter_model = self._session.get_waiter_model( + self._service_name + ) + waiter_documenter = WaiterDocumenter( + self._client, service_waiter_model, self._root_docs_path + ) + waiter_documenter.document_waiters(section) + + def get_examples(self, service_name, api_version=None): + loader = self._session.get_component('data_loader') + examples = loader.load_service_model( + service_name, 'examples-1', api_version + ) + return examples['examples'] + + def client_context_params(self, section): + omitted_params = ClientContextParamsDocumenter.OMITTED_CONTEXT_PARAMS + params_to_omit = omitted_params.get(self._service_name, []) + service_model = self._client.meta.service_model + raw_context_params = service_model.client_context_parameters + context_params = [ + p for p in raw_context_params if p.name not in params_to_omit + ] + if context_params: + context_param_documenter = ClientContextParamsDocumenter( + self._service_name, context_params + ) + context_param_documenter.document_context_params(section) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/shape.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/shape.py new file mode 100644 index 00000000..640a5d18 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/shape.py @@ -0,0 +1,135 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + + +# NOTE: This class should not be instantiated and its +# ``traverse_and_document_shape`` method called directly. It should be +# inherited from a Documenter class with the appropriate methods +# and attributes. +from botocore.utils import is_json_value_header + + +class ShapeDocumenter: + EVENT_NAME = '' + + def __init__( + self, service_name, operation_name, event_emitter, context=None + ): + self._service_name = service_name + self._operation_name = operation_name + self._event_emitter = event_emitter + self._context = context + if context is None: + self._context = {'special_shape_types': {}} + + def traverse_and_document_shape( + self, + section, + shape, + history, + include=None, + exclude=None, + name=None, + is_required=False, + ): + """Traverses and documents a shape + + Will take a self class and call its appropriate methods as a shape + is traversed. + + :param section: The section to document. + + :param history: A list of the names of the shapes that have been + traversed. + + :type include: Dictionary where keys are parameter names and + values are the shapes of the parameter names. + :param include: The parameter shapes to include in the documentation. + + :type exclude: List of the names of the parameters to exclude. + :param exclude: The names of the parameters to exclude from + documentation. + + :param name: The name of the shape. + + :param is_required: If the shape is a required member. + """ + param_type = shape.type_name + if getattr(shape, 'serialization', {}).get('eventstream'): + param_type = 'event_stream' + if shape.name in history: + self.document_recursive_shape(section, shape, name=name) + else: + history.append(shape.name) + is_top_level_param = len(history) == 2 + if hasattr(shape, 'is_document_type') and shape.is_document_type: + param_type = 'document' + getattr( + self, + f"document_shape_type_{param_type}", + self.document_shape_default, + )( + section, + shape, + history=history, + name=name, + include=include, + exclude=exclude, + is_top_level_param=is_top_level_param, + is_required=is_required, + ) + if is_top_level_param: + self._event_emitter.emit( + f"docs.{self.EVENT_NAME}.{self._service_name}.{self._operation_name}.{name}", + section=section, + ) + at_overlying_method_section = len(history) == 1 + if at_overlying_method_section: + self._event_emitter.emit( + f"docs.{self.EVENT_NAME}.{self._service_name}.{self._operation_name}.complete-section", + section=section, + ) + history.pop() + + def _get_special_py_default(self, shape): + special_defaults = { + 'document_type': '{...}|[...]|123|123.4|\'string\'|True|None', + 'jsonvalue_header': '{...}|[...]|123|123.4|\'string\'|True|None', + 'streaming_input_shape': 'b\'bytes\'|file', + 'streaming_output_shape': 'StreamingBody()', + 'eventstream_output_shape': 'EventStream()', + } + return self._get_value_for_special_type(shape, special_defaults) + + def _get_special_py_type_name(self, shape): + special_type_names = { + 'document_type': ':ref:`document`', + 'jsonvalue_header': 'JSON serializable', + 'streaming_input_shape': 'bytes or seekable file-like object', + 'streaming_output_shape': ':class:`.StreamingBody`', + 'eventstream_output_shape': ':class:`.EventStream`', + } + return self._get_value_for_special_type(shape, special_type_names) + + def _get_value_for_special_type(self, shape, special_type_map): + if is_json_value_header(shape): + return special_type_map['jsonvalue_header'] + if hasattr(shape, 'is_document_type') and shape.is_document_type: + return special_type_map['document_type'] + for special_type, marked_shape in self._context[ + 'special_shape_types' + ].items(): + if special_type in special_type_map: + if shape == marked_shape: + return special_type_map[special_type] + return None diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/sharedexample.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/sharedexample.py new file mode 100644 index 00000000..58cdfa59 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/sharedexample.py @@ -0,0 +1,227 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import numbers +import re + +from botocore.docs.utils import escape_controls +from botocore.utils import parse_timestamp + + +class SharedExampleDocumenter: + def document_shared_example( + self, example, prefix, section, operation_model + ): + """Documents a single shared example based on its definition. + + :param example: The model of the example + + :param prefix: The prefix to use in the method example. + + :param section: The section to write to. + + :param operation_model: The model of the operation used in the example + """ + section.style.new_paragraph() + section.write(example.get('description')) + section.style.new_line() + self.document_input( + section, example, prefix, operation_model.input_shape + ) + self.document_output(section, example, operation_model.output_shape) + + def document_input(self, section, example, prefix, shape): + input_section = section.add_new_section('input') + input_section.style.start_codeblock() + if prefix is not None: + input_section.write(prefix) + params = example.get('input', {}) + comments = example.get('comments') + if comments: + comments = comments.get('input') + param_section = input_section.add_new_section('parameters') + self._document_params(param_section, params, comments, [], shape) + closing_section = input_section.add_new_section('input-close') + closing_section.style.new_line() + closing_section.style.new_line() + closing_section.write('print(response)') + closing_section.style.end_codeblock() + + def document_output(self, section, example, shape): + output_section = section.add_new_section('output') + output_section.style.new_line() + output_section.write('Expected Output:') + output_section.style.new_line() + output_section.style.start_codeblock() + params = example.get('output', {}) + + # There might not be an output, but we will return metadata anyway + params['ResponseMetadata'] = {"...": "..."} + comments = example.get('comments') + if comments: + comments = comments.get('output') + self._document_dict(output_section, params, comments, [], shape, True) + closing_section = output_section.add_new_section('output-close') + closing_section.style.end_codeblock() + + def _document(self, section, value, comments, path, shape): + """ + :param section: The section to add the docs to. + + :param value: The input / output values representing the parameters that + are included in the example. + + :param comments: The dictionary containing all the comments to be + applied to the example. + + :param path: A list describing where the documenter is in traversing the + parameters. This is used to find the equivalent location + in the comments dictionary. + """ + if isinstance(value, dict): + self._document_dict(section, value, comments, path, shape) + elif isinstance(value, list): + self._document_list(section, value, comments, path, shape) + elif isinstance(value, numbers.Number): + self._document_number(section, value, path) + elif shape and shape.type_name == 'timestamp': + self._document_datetime(section, value, path) + else: + self._document_str(section, value, path) + + def _document_dict( + self, section, value, comments, path, shape, top_level=False + ): + dict_section = section.add_new_section('dict-value') + self._start_nested_value(dict_section, '{') + for key, val in value.items(): + path.append('.%s' % key) + item_section = dict_section.add_new_section(key) + item_section.style.new_line() + item_comment = self._get_comment(path, comments) + if item_comment: + item_section.write(item_comment) + item_section.style.new_line() + item_section.write("'%s': " % key) + + # Shape could be none if there is no output besides ResponseMetadata + item_shape = None + if shape: + if shape.type_name == 'structure': + item_shape = shape.members.get(key) + elif shape.type_name == 'map': + item_shape = shape.value + self._document(item_section, val, comments, path, item_shape) + path.pop() + dict_section_end = dict_section.add_new_section('ending-brace') + self._end_nested_value(dict_section_end, '}') + if not top_level: + dict_section_end.write(',') + + def _document_params(self, section, value, comments, path, shape): + param_section = section.add_new_section('param-values') + self._start_nested_value(param_section, '(') + for key, val in value.items(): + path.append('.%s' % key) + item_section = param_section.add_new_section(key) + item_section.style.new_line() + item_comment = self._get_comment(path, comments) + if item_comment: + item_section.write(item_comment) + item_section.style.new_line() + item_section.write(key + '=') + + # Shape could be none if there are no input parameters + item_shape = None + if shape: + item_shape = shape.members.get(key) + self._document(item_section, val, comments, path, item_shape) + path.pop() + param_section_end = param_section.add_new_section('ending-parenthesis') + self._end_nested_value(param_section_end, ')') + + def _document_list(self, section, value, comments, path, shape): + list_section = section.add_new_section('list-section') + self._start_nested_value(list_section, '[') + item_shape = shape.member + for index, val in enumerate(value): + item_section = list_section.add_new_section(index) + item_section.style.new_line() + path.append('[%s]' % index) + item_comment = self._get_comment(path, comments) + if item_comment: + item_section.write(item_comment) + item_section.style.new_line() + self._document(item_section, val, comments, path, item_shape) + path.pop() + list_section_end = list_section.add_new_section('ending-bracket') + self._end_nested_value(list_section_end, '],') + + def _document_str(self, section, value, path): + # We do the string conversion because this might accept a type that + # we don't specifically address. + safe_value = escape_controls(value) + section.write(f"'{safe_value}',") + + def _document_number(self, section, value, path): + section.write("%s," % str(value)) + + def _document_datetime(self, section, value, path): + datetime_tuple = parse_timestamp(value).timetuple() + datetime_str = str(datetime_tuple[0]) + for i in range(1, len(datetime_tuple)): + datetime_str += ", " + str(datetime_tuple[i]) + section.write("datetime(%s)," % datetime_str) + + def _get_comment(self, path, comments): + key = re.sub(r'^\.', '', ''.join(path)) + if comments and key in comments: + return '# ' + comments[key] + else: + return '' + + def _start_nested_value(self, section, start): + section.write(start) + section.style.indent() + section.style.indent() + + def _end_nested_value(self, section, end): + section.style.dedent() + section.style.dedent() + section.style.new_line() + section.write(end) + + +def document_shared_examples( + section, operation_model, example_prefix, shared_examples +): + """Documents the shared examples + + :param section: The section to write to. + + :param operation_model: The model of the operation. + + :param example_prefix: The prefix to use in the method example. + + :param shared_examples: The shared JSON examples from the model. + """ + container_section = section.add_new_section('shared-examples') + container_section.style.new_paragraph() + container_section.style.bold('Examples') + documenter = SharedExampleDocumenter() + for example in shared_examples: + documenter.document_shared_example( + example=example, + section=container_section.add_new_section(example['id']), + prefix=example_prefix, + operation_model=operation_model, + ) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/translator.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/translator.py new file mode 100644 index 00000000..0b0a3089 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/translator.py @@ -0,0 +1,62 @@ +# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from docutils import nodes +from sphinx.locale import admonitionlabels +from sphinx.writers.html5 import HTML5Translator as SphinxHTML5Translator + + +class BotoHTML5Translator(SphinxHTML5Translator): + """Extension of Sphinx's ``HTML5Translator`` for Botocore documentation.""" + + IGNORE_IMPLICIT_HEADINGS = [ + '[REQUIRED]', + ] + + def visit_admonition(self, node, name=""): + """Uses the h3 tag for admonition titles instead of the p tag.""" + self.body.append( + self.starttag(node, "div", CLASS=("admonition " + name)) + ) + if name: + title = ( + f"

{admonitionlabels[name]}

" + ) + self.body.append(title) + + def is_implicit_heading(self, node): + """Determines if a node is an implicit heading. + + An implicit heading is represented by a paragraph node whose only + child is a strong node with text that isnt in `IGNORE_IMPLICIT_HEADINGS`. + """ + return ( + len(node) == 1 + and isinstance(node[0], nodes.strong) + and len(node[0]) == 1 + and isinstance(node[0][0], nodes.Text) + and node[0][0].astext() not in self.IGNORE_IMPLICIT_HEADINGS + ) + + def visit_paragraph(self, node): + """Visit a paragraph HTML element. + + Replaces implicit headings with an h3 tag and defers to default + behavior for normal paragraph elements. + """ + if self.is_implicit_heading(node): + text = node[0][0] + self.body.append(f'

{text}

\n') + # Do not visit the current nodes children or call its depart method. + raise nodes.SkipNode + else: + super().visit_paragraph(node) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/utils.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/utils.py new file mode 100644 index 00000000..eb6cae14 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/utils.py @@ -0,0 +1,222 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import re +from collections import namedtuple + + +def py_type_name(type_name): + """Get the Python type name for a given model type. + + >>> py_type_name('list') + 'list' + >>> py_type_name('structure') + 'dict' + + :rtype: string + """ + return { + 'blob': 'bytes', + 'character': 'string', + 'double': 'float', + 'long': 'integer', + 'map': 'dict', + 'structure': 'dict', + 'timestamp': 'datetime', + }.get(type_name, type_name) + + +def py_default(type_name): + """Get the Python default value for a given model type. + + >>> py_default('string') + '\'string\'' + >>> py_default('list') + '[...]' + >>> py_default('unknown') + '...' + + :rtype: string + """ + return { + 'double': '123.0', + 'long': '123', + 'integer': '123', + 'string': "'string'", + 'blob': "b'bytes'", + 'boolean': 'True|False', + 'list': '[...]', + 'map': '{...}', + 'structure': '{...}', + 'timestamp': 'datetime(2015, 1, 1)', + }.get(type_name, '...') + + +def get_official_service_name(service_model): + """Generate the official name of an AWS Service + + :param service_model: The service model representing the service + """ + official_name = service_model.metadata.get('serviceFullName') + short_name = service_model.metadata.get('serviceAbbreviation', '') + if short_name.startswith('Amazon'): + short_name = short_name[7:] + if short_name.startswith('AWS'): + short_name = short_name[4:] + if short_name and short_name.lower() not in official_name.lower(): + official_name += f' ({short_name})' + return official_name + + +_DocumentedShape = namedtuple( + 'DocumentedShape', + [ + 'name', + 'type_name', + 'documentation', + 'metadata', + 'members', + 'required_members', + ], +) + + +class DocumentedShape(_DocumentedShape): + """Use this class to inject new shapes into a model for documentation""" + + def __new__( + cls, + name, + type_name, + documentation, + metadata=None, + members=None, + required_members=None, + ): + if metadata is None: + metadata = [] + if members is None: + members = [] + if required_members is None: + required_members = [] + return super().__new__( + cls, + name, + type_name, + documentation, + metadata, + members, + required_members, + ) + + +class AutoPopulatedParam: + def __init__(self, name, param_description=None): + self.name = name + self.param_description = param_description + if param_description is None: + self.param_description = ( + 'Please note that this parameter is automatically populated ' + 'if it is not provided. Including this parameter is not ' + 'required\n' + ) + + def document_auto_populated_param(self, event_name, section, **kwargs): + """Documents auto populated parameters + + It will remove any required marks for the parameter, remove the + parameter from the example, and add a snippet about the parameter + being autopopulated in the description. + """ + if event_name.startswith('docs.request-params'): + if self.name in section.available_sections: + section = section.get_section(self.name) + if 'is-required' in section.available_sections: + section.delete_section('is-required') + description_section = section.get_section( + 'param-documentation' + ) + description_section.writeln(self.param_description) + elif event_name.startswith('docs.request-example'): + section = section.get_section('structure-value') + if self.name in section.available_sections: + section.delete_section(self.name) + + +class HideParamFromOperations: + """Hides a single parameter from multiple operations. + + This method will remove a parameter from documentation and from + examples. This method is typically used for things that are + automatically populated because a user would be unable to provide + a value (e.g., a checksum of a serialized XML request body).""" + + def __init__(self, service_name, parameter_name, operation_names): + """ + :type service_name: str + :param service_name: Name of the service to modify. + + :type parameter_name: str + :param parameter_name: Name of the parameter to modify. + + :type operation_names: list + :param operation_names: Operation names to modify. + """ + self._parameter_name = parameter_name + self._params_events = set() + self._example_events = set() + # Build up the sets of relevant event names. + param_template = 'docs.request-params.%s.%s.complete-section' + example_template = 'docs.request-example.%s.%s.complete-section' + for name in operation_names: + self._params_events.add(param_template % (service_name, name)) + self._example_events.add(example_template % (service_name, name)) + + def hide_param(self, event_name, section, **kwargs): + if event_name in self._example_events: + # Modify the structure value for example events. + section = section.get_section('structure-value') + elif event_name not in self._params_events: + return + if self._parameter_name in section.available_sections: + section.delete_section(self._parameter_name) + + +class AppendParamDocumentation: + """Appends documentation to a specific parameter""" + + def __init__(self, parameter_name, doc_string): + self._parameter_name = parameter_name + self._doc_string = doc_string + + def append_documentation(self, event_name, section, **kwargs): + if self._parameter_name in section.available_sections: + section = section.get_section(self._parameter_name) + description_section = section.get_section('param-documentation') + description_section.writeln(self._doc_string) + + +_CONTROLS = { + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\b': '\\b', + '\f': '\\f', +} +# Combines all CONTROLS keys into a big or regular expression +_ESCAPE_CONTROLS_RE = re.compile('|'.join(map(re.escape, _CONTROLS))) +# Based on the match get the appropriate replacement from CONTROLS +_CONTROLS_MATCH_HANDLER = lambda match: _CONTROLS[match.group(0)] + + +def escape_controls(value): + return _ESCAPE_CONTROLS_RE.sub(_CONTROLS_MATCH_HANDLER, value) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/docs/waiter.py b/dbtzin/lib/python3.8/site-packages/botocore/docs/waiter.py new file mode 100644 index 00000000..c5226d46 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/docs/waiter.py @@ -0,0 +1,184 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import os + +from botocore import xform_name +from botocore.compat import OrderedDict +from botocore.docs.bcdoc.restdoc import DocumentStructure +from botocore.docs.method import document_model_driven_method +from botocore.docs.utils import DocumentedShape +from botocore.utils import get_service_module_name + + +class WaiterDocumenter: + def __init__(self, client, service_waiter_model, root_docs_path): + self._client = client + self._client_class_name = self._client.__class__.__name__ + self._service_name = self._client.meta.service_model.service_name + self._service_waiter_model = service_waiter_model + self._root_docs_path = root_docs_path + self._USER_GUIDE_LINK = ( + 'https://boto3.amazonaws.com/' + 'v1/documentation/api/latest/guide/clients.html#waiters' + ) + + def document_waiters(self, section): + """Documents the various waiters for a service. + + :param section: The section to write to. + """ + section.style.h2('Waiters') + self._add_overview(section) + section.style.new_line() + section.writeln('The available waiters are:') + section.style.toctree() + for waiter_name in self._service_waiter_model.waiter_names: + section.style.tocitem(f'{self._service_name}/waiter/{waiter_name}') + # Create a new DocumentStructure for each waiter and add contents. + waiter_doc_structure = DocumentStructure( + waiter_name, target='html' + ) + self._add_single_waiter(waiter_doc_structure, waiter_name) + # Write waiters in individual/nested files. + # Path: /reference/services//waiter/.rst + waiter_dir_path = os.path.join( + self._root_docs_path, self._service_name, 'waiter' + ) + waiter_doc_structure.write_to_file(waiter_dir_path, waiter_name) + + def _add_single_waiter(self, section, waiter_name): + breadcrumb_section = section.add_new_section('breadcrumb') + breadcrumb_section.style.ref( + self._client_class_name, f'../../{self._service_name}' + ) + breadcrumb_section.write(f' / Waiter / {waiter_name}') + section.add_title_section(waiter_name) + waiter_section = section.add_new_section(waiter_name) + waiter_section.style.start_sphinx_py_class( + class_name=f"{self._client_class_name}.Waiter.{waiter_name}" + ) + + # Add example on how to instantiate waiter. + waiter_section.style.start_codeblock() + waiter_section.style.new_line() + waiter_section.write( + 'waiter = client.get_waiter(\'%s\')' % xform_name(waiter_name) + ) + waiter_section.style.end_codeblock() + + # Add information on the wait() method + waiter_section.style.new_line() + document_wait_method( + section=waiter_section, + waiter_name=waiter_name, + event_emitter=self._client.meta.events, + service_model=self._client.meta.service_model, + service_waiter_model=self._service_waiter_model, + ) + + def _add_overview(self, section): + section.style.new_line() + section.write( + 'Waiters are available on a client instance ' + 'via the ``get_waiter`` method. For more detailed instructions ' + 'and examples on the usage or waiters, see the ' + 'waiters ' + ) + section.style.external_link( + title='user guide', + link=self._USER_GUIDE_LINK, + ) + section.write('.') + section.style.new_line() + + +def document_wait_method( + section, + waiter_name, + event_emitter, + service_model, + service_waiter_model, + include_signature=True, +): + """Documents a the wait method of a waiter + + :param section: The section to write to + + :param waiter_name: The name of the waiter + + :param event_emitter: The event emitter to use to emit events + + :param service_model: The service model + + :param service_waiter_model: The waiter model associated to the service + + :param include_signature: Whether or not to include the signature. + It is useful for generating docstrings. + """ + waiter_model = service_waiter_model.get_waiter(waiter_name) + operation_model = service_model.operation_model(waiter_model.operation) + + waiter_config_members = OrderedDict() + + waiter_config_members['Delay'] = DocumentedShape( + name='Delay', + type_name='integer', + documentation=( + '

The amount of time in seconds to wait between ' + 'attempts. Default: {}

'.format(waiter_model.delay) + ), + ) + + waiter_config_members['MaxAttempts'] = DocumentedShape( + name='MaxAttempts', + type_name='integer', + documentation=( + '

The maximum number of attempts to be made. ' + 'Default: {}

'.format(waiter_model.max_attempts) + ), + ) + + botocore_waiter_params = [ + DocumentedShape( + name='WaiterConfig', + type_name='structure', + documentation=( + '

A dictionary that provides parameters to control ' + 'waiting behavior.

' + ), + members=waiter_config_members, + ) + ] + + wait_description = ( + 'Polls :py:meth:`{}.Client.{}` every {} ' + 'seconds until a successful state is reached. An error is ' + 'returned after {} failed checks.'.format( + get_service_module_name(service_model), + xform_name(waiter_model.operation), + waiter_model.delay, + waiter_model.max_attempts, + ) + ) + + document_model_driven_method( + section, + 'wait', + operation_model, + event_emitter=event_emitter, + method_description=wait_description, + example_prefix='waiter.wait', + include_input=botocore_waiter_params, + document_output=False, + include_signature=include_signature, + ) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/endpoint.py b/dbtzin/lib/python3.8/site-packages/botocore/endpoint.py new file mode 100644 index 00000000..adc622c2 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/endpoint.py @@ -0,0 +1,443 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import datetime +import logging +import os +import threading +import time +import uuid + +from botocore import parsers +from botocore.awsrequest import create_request_object +from botocore.exceptions import HTTPClientError +from botocore.history import get_global_history_recorder +from botocore.hooks import first_non_none_response +from botocore.httpchecksum import handle_checksum_body +from botocore.httpsession import URLLib3Session +from botocore.response import StreamingBody +from botocore.utils import ( + get_environ_proxies, + is_valid_endpoint_url, + is_valid_ipv6_endpoint_url, +) + +logger = logging.getLogger(__name__) +history_recorder = get_global_history_recorder() +DEFAULT_TIMEOUT = 60 +MAX_POOL_CONNECTIONS = 10 + + +def convert_to_response_dict(http_response, operation_model): + """Convert an HTTP response object to a request dict. + + This converts the requests library's HTTP response object to + a dictionary. + + :type http_response: botocore.vendored.requests.model.Response + :param http_response: The HTTP response from an AWS service request. + + :rtype: dict + :return: A response dictionary which will contain the following keys: + * headers (dict) + * status_code (int) + * body (string or file-like object) + + """ + response_dict = { + 'headers': http_response.headers, + 'status_code': http_response.status_code, + 'context': { + 'operation_name': operation_model.name, + }, + } + if response_dict['status_code'] >= 300: + response_dict['body'] = http_response.content + elif operation_model.has_event_stream_output: + response_dict['body'] = http_response.raw + elif operation_model.has_streaming_output: + length = response_dict['headers'].get('content-length') + response_dict['body'] = StreamingBody(http_response.raw, length) + else: + response_dict['body'] = http_response.content + return response_dict + + +class Endpoint: + """ + Represents an endpoint for a particular service in a specific + region. Only an endpoint can make requests. + + :ivar service: The Service object that describes this endpoints + service. + :ivar host: The fully qualified endpoint hostname. + :ivar session: The session object. + """ + + def __init__( + self, + host, + endpoint_prefix, + event_emitter, + response_parser_factory=None, + http_session=None, + ): + self._endpoint_prefix = endpoint_prefix + self._event_emitter = event_emitter + self.host = host + self._lock = threading.Lock() + if response_parser_factory is None: + response_parser_factory = parsers.ResponseParserFactory() + self._response_parser_factory = response_parser_factory + self.http_session = http_session + if self.http_session is None: + self.http_session = URLLib3Session() + + def __repr__(self): + return f'{self._endpoint_prefix}({self.host})' + + def close(self): + self.http_session.close() + + def make_request(self, operation_model, request_dict): + logger.debug( + "Making request for %s with params: %s", + operation_model, + request_dict, + ) + return self._send_request(request_dict, operation_model) + + def create_request(self, params, operation_model=None): + request = create_request_object(params) + if operation_model: + request.stream_output = any( + [ + operation_model.has_streaming_output, + operation_model.has_event_stream_output, + ] + ) + service_id = operation_model.service_model.service_id.hyphenize() + event_name = 'request-created.{service_id}.{op_name}'.format( + service_id=service_id, op_name=operation_model.name + ) + self._event_emitter.emit( + event_name, + request=request, + operation_name=operation_model.name, + ) + prepared_request = self.prepare_request(request) + return prepared_request + + def _encode_headers(self, headers): + # In place encoding of headers to utf-8 if they are unicode. + for key, value in headers.items(): + if isinstance(value, str): + headers[key] = value.encode('utf-8') + + def prepare_request(self, request): + self._encode_headers(request.headers) + return request.prepare() + + def _calculate_ttl( + self, response_received_timestamp, date_header, read_timeout + ): + local_timestamp = datetime.datetime.utcnow() + date_conversion = datetime.datetime.strptime( + date_header, "%a, %d %b %Y %H:%M:%S %Z" + ) + estimated_skew = date_conversion - response_received_timestamp + ttl = ( + local_timestamp + + datetime.timedelta(seconds=read_timeout) + + estimated_skew + ) + return ttl.strftime('%Y%m%dT%H%M%SZ') + + def _set_ttl(self, retries_context, read_timeout, success_response): + response_date_header = success_response[0].headers.get('Date') + has_streaming_input = retries_context.get('has_streaming_input') + if response_date_header and not has_streaming_input: + try: + response_received_timestamp = datetime.datetime.utcnow() + retries_context['ttl'] = self._calculate_ttl( + response_received_timestamp, + response_date_header, + read_timeout, + ) + except Exception: + logger.debug( + "Exception received when updating retries context with TTL", + exc_info=True, + ) + + def _update_retries_context(self, context, attempt, success_response=None): + retries_context = context.setdefault('retries', {}) + retries_context['attempt'] = attempt + if 'invocation-id' not in retries_context: + retries_context['invocation-id'] = str(uuid.uuid4()) + + if success_response: + read_timeout = context['client_config'].read_timeout + self._set_ttl(retries_context, read_timeout, success_response) + + def _send_request(self, request_dict, operation_model): + attempts = 1 + context = request_dict['context'] + self._update_retries_context(context, attempts) + request = self.create_request(request_dict, operation_model) + success_response, exception = self._get_response( + request, operation_model, context + ) + while self._needs_retry( + attempts, + operation_model, + request_dict, + success_response, + exception, + ): + attempts += 1 + self._update_retries_context(context, attempts, success_response) + # If there is a stream associated with the request, we need + # to reset it before attempting to send the request again. + # This will ensure that we resend the entire contents of the + # body. + request.reset_stream() + # Create a new request when retried (including a new signature). + request = self.create_request(request_dict, operation_model) + success_response, exception = self._get_response( + request, operation_model, context + ) + if ( + success_response is not None + and 'ResponseMetadata' in success_response[1] + ): + # We want to share num retries, not num attempts. + total_retries = attempts - 1 + success_response[1]['ResponseMetadata'][ + 'RetryAttempts' + ] = total_retries + if exception is not None: + raise exception + else: + return success_response + + def _get_response(self, request, operation_model, context): + # This will return a tuple of (success_response, exception) + # and success_response is itself a tuple of + # (http_response, parsed_dict). + # If an exception occurs then the success_response is None. + # If no exception occurs then exception is None. + success_response, exception = self._do_get_response( + request, operation_model, context + ) + kwargs_to_emit = { + 'response_dict': None, + 'parsed_response': None, + 'context': context, + 'exception': exception, + } + if success_response is not None: + http_response, parsed_response = success_response + kwargs_to_emit['parsed_response'] = parsed_response + kwargs_to_emit['response_dict'] = convert_to_response_dict( + http_response, operation_model + ) + service_id = operation_model.service_model.service_id.hyphenize() + self._event_emitter.emit( + f"response-received.{service_id}.{operation_model.name}", + **kwargs_to_emit, + ) + return success_response, exception + + def _do_get_response(self, request, operation_model, context): + try: + logger.debug("Sending http request: %s", request) + history_recorder.record( + 'HTTP_REQUEST', + { + 'method': request.method, + 'headers': request.headers, + 'streaming': operation_model.has_streaming_input, + 'url': request.url, + 'body': request.body, + }, + ) + service_id = operation_model.service_model.service_id.hyphenize() + event_name = f"before-send.{service_id}.{operation_model.name}" + responses = self._event_emitter.emit(event_name, request=request) + http_response = first_non_none_response(responses) + if http_response is None: + http_response = self._send(request) + except HTTPClientError as e: + return (None, e) + except Exception as e: + logger.debug( + "Exception received when sending HTTP request.", exc_info=True + ) + return (None, e) + # This returns the http_response and the parsed_data. + response_dict = convert_to_response_dict( + http_response, operation_model + ) + handle_checksum_body( + http_response, + response_dict, + context, + operation_model, + ) + + http_response_record_dict = response_dict.copy() + http_response_record_dict[ + 'streaming' + ] = operation_model.has_streaming_output + history_recorder.record('HTTP_RESPONSE', http_response_record_dict) + + protocol = operation_model.metadata['protocol'] + parser = self._response_parser_factory.create_parser(protocol) + parsed_response = parser.parse( + response_dict, operation_model.output_shape + ) + # Do a second parsing pass to pick up on any modeled error fields + # NOTE: Ideally, we would push this down into the parser classes but + # they currently have no reference to the operation or service model + # The parsers should probably take the operation model instead of + # output shape but we can't change that now + if http_response.status_code >= 300: + self._add_modeled_error_fields( + response_dict, + parsed_response, + operation_model, + parser, + ) + history_recorder.record('PARSED_RESPONSE', parsed_response) + return (http_response, parsed_response), None + + def _add_modeled_error_fields( + self, + response_dict, + parsed_response, + operation_model, + parser, + ): + error_code = parsed_response.get("Error", {}).get("Code") + if error_code is None: + return + service_model = operation_model.service_model + error_shape = service_model.shape_for_error_code(error_code) + if error_shape is None: + return + modeled_parse = parser.parse(response_dict, error_shape) + # TODO: avoid naming conflicts with ResponseMetadata and Error + parsed_response.update(modeled_parse) + + def _needs_retry( + self, + attempts, + operation_model, + request_dict, + response=None, + caught_exception=None, + ): + service_id = operation_model.service_model.service_id.hyphenize() + event_name = f"needs-retry.{service_id}.{operation_model.name}" + responses = self._event_emitter.emit( + event_name, + response=response, + endpoint=self, + operation=operation_model, + attempts=attempts, + caught_exception=caught_exception, + request_dict=request_dict, + ) + handler_response = first_non_none_response(responses) + if handler_response is None: + return False + else: + # Request needs to be retried, and we need to sleep + # for the specified number of times. + logger.debug( + "Response received to retry, sleeping for %s seconds", + handler_response, + ) + time.sleep(handler_response) + return True + + def _send(self, request): + return self.http_session.send(request) + + +class EndpointCreator: + def __init__(self, event_emitter): + self._event_emitter = event_emitter + + def create_endpoint( + self, + service_model, + region_name, + endpoint_url, + verify=None, + response_parser_factory=None, + timeout=DEFAULT_TIMEOUT, + max_pool_connections=MAX_POOL_CONNECTIONS, + http_session_cls=URLLib3Session, + proxies=None, + socket_options=None, + client_cert=None, + proxies_config=None, + ): + if not is_valid_endpoint_url( + endpoint_url + ) and not is_valid_ipv6_endpoint_url(endpoint_url): + raise ValueError("Invalid endpoint: %s" % endpoint_url) + + if proxies is None: + proxies = self._get_proxies(endpoint_url) + endpoint_prefix = service_model.endpoint_prefix + + logger.debug('Setting %s timeout as %s', endpoint_prefix, timeout) + http_session = http_session_cls( + timeout=timeout, + proxies=proxies, + verify=self._get_verify_value(verify), + max_pool_connections=max_pool_connections, + socket_options=socket_options, + client_cert=client_cert, + proxies_config=proxies_config, + ) + + return Endpoint( + endpoint_url, + endpoint_prefix=endpoint_prefix, + event_emitter=self._event_emitter, + response_parser_factory=response_parser_factory, + http_session=http_session, + ) + + def _get_proxies(self, url): + # We could also support getting proxies from a config file, + # but for now proxy support is taken from the environment. + return get_environ_proxies(url) + + def _get_verify_value(self, verify): + # This is to account for: + # https://github.com/kennethreitz/requests/issues/1436 + # where we need to honor REQUESTS_CA_BUNDLE because we're creating our + # own request objects. + # First, if verify is not None, then the user explicitly specified + # a value so this automatically wins. + if verify is not None: + return verify + # Otherwise use the value from REQUESTS_CA_BUNDLE, or default to + # True if the env var does not exist. + return os.environ.get('REQUESTS_CA_BUNDLE', True) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/endpoint_provider.py b/dbtzin/lib/python3.8/site-packages/botocore/endpoint_provider.py new file mode 100644 index 00000000..1be5a25c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/endpoint_provider.py @@ -0,0 +1,722 @@ +# Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +""" +NOTE: All classes and functions in this module are considered private and are +subject to abrupt breaking changes. Please do not use them directly. + +To view the raw JSON that the objects in this module represent, please +go to any `endpoint-rule-set.json` file in /botocore/data/// +or you can look at the test files in /tests/unit/data/endpoints/valid-rules/ +""" + + +import logging +import re +from enum import Enum +from string import Formatter +from typing import NamedTuple + +from botocore import xform_name +from botocore.compat import IPV4_RE, quote, urlparse +from botocore.exceptions import EndpointResolutionError +from botocore.utils import ( + ArnParser, + InvalidArnException, + is_valid_ipv4_endpoint_url, + is_valid_ipv6_endpoint_url, + lru_cache_weakref, + normalize_url_path, + percent_encode, +) + +logger = logging.getLogger(__name__) + +TEMPLATE_STRING_RE = re.compile(r"\{[a-zA-Z#]+\}") +GET_ATTR_RE = re.compile(r"(\w+)\[(\d+)\]") +VALID_HOST_LABEL_RE = re.compile( + r"^(?!-)[a-zA-Z\d-]{1,63}(?= len(value): + return None + return value[index] + else: + value = value[part] + return value + + def format_partition_output(self, partition): + output = partition["outputs"] + output["name"] = partition["id"] + return output + + def is_partition_match(self, region, partition): + matches_regex = re.match(partition["regionRegex"], region) is not None + return region in partition["regions"] or matches_regex + + def aws_partition(self, value): + """Match a region string to an AWS partition. + + :type value: str + :rtype: dict + """ + partitions = self.partitions_data['partitions'] + + if value is not None: + for partition in partitions: + if self.is_partition_match(value, partition): + return self.format_partition_output(partition) + + # return the default partition if no matches were found + aws_partition = partitions[0] + return self.format_partition_output(aws_partition) + + def aws_parse_arn(self, value): + """Parse and validate string for ARN components. + + :type value: str + :rtype: dict + """ + if value is None or not value.startswith("arn:"): + return None + + try: + arn_dict = ARN_PARSER.parse_arn(value) + except InvalidArnException: + return None + + # partition, resource, and service are required + if not all( + (arn_dict["partition"], arn_dict["service"], arn_dict["resource"]) + ): + return None + + arn_dict["accountId"] = arn_dict.pop("account") + + resource = arn_dict.pop("resource") + arn_dict["resourceId"] = resource.replace(":", "/").split("/") + + return arn_dict + + def is_valid_host_label(self, value, allow_subdomains): + """Evaluates whether a value is a valid host label per + RFC 1123. If allow_subdomains is True, split on `.` and validate + each component separately. + + :type value: str + :type allow_subdomains: bool + :rtype: bool + """ + if value is None or allow_subdomains is False and value.count(".") > 0: + return False + + if allow_subdomains is True: + return all( + self.is_valid_host_label(label, False) + for label in value.split(".") + ) + + return VALID_HOST_LABEL_RE.match(value) is not None + + def string_equals(self, value1, value2): + """Evaluates two string values for equality. + + :type value1: str + :type value2: str + :rtype: bool + """ + if not all(isinstance(val, str) for val in (value1, value2)): + msg = f"Both values must be strings, not {type(value1)} and {type(value2)}." + raise EndpointResolutionError(msg=msg) + return value1 == value2 + + def uri_encode(self, value): + """Perform percent-encoding on an input string. + + :type value: str + :rytpe: str + """ + if value is None: + return None + + return percent_encode(value) + + def parse_url(self, value): + """Parse a URL string into components. + + :type value: str + :rtype: dict + """ + if value is None: + return None + + url_components = urlparse(value) + try: + # url_parse may assign non-integer values to + # `port` and will fail when accessed. + url_components.port + except ValueError: + return None + + scheme = url_components.scheme + query = url_components.query + # URLs with queries are not supported + if scheme not in ("https", "http") or len(query) > 0: + return None + + path = url_components.path + normalized_path = quote(normalize_url_path(path)) + if not normalized_path.endswith("/"): + normalized_path = f"{normalized_path}/" + + return { + "scheme": scheme, + "authority": url_components.netloc, + "path": path, + "normalizedPath": normalized_path, + "isIp": is_valid_ipv4_endpoint_url(value) + or is_valid_ipv6_endpoint_url(value), + } + + def boolean_equals(self, value1, value2): + """Evaluates two boolean values for equality. + + :type value1: bool + :type value2: bool + :rtype: bool + """ + if not all(isinstance(val, bool) for val in (value1, value2)): + msg = f"Both arguments must be bools, not {type(value1)} and {type(value2)}." + raise EndpointResolutionError(msg=msg) + return value1 is value2 + + def is_ascii(self, value): + """Evaluates if a string only contains ASCII characters. + + :type value: str + :rtype: bool + """ + try: + value.encode("ascii") + return True + except UnicodeEncodeError: + return False + + def substring(self, value, start, stop, reverse): + """Computes a substring given the start index and end index. If `reverse` is + True, slice the string from the end instead. + + :type value: str + :type start: int + :type end: int + :type reverse: bool + :rtype: str + """ + if not isinstance(value, str): + msg = f"Input must be a string, not {type(value)}." + raise EndpointResolutionError(msg=msg) + if start >= stop or len(value) < stop or not self.is_ascii(value): + return None + + if reverse is True: + r_start = len(value) - stop + r_stop = len(value) - start + return value[r_start:r_stop] + + return value[start:stop] + + def _not(self, value): + """A function implementation of the logical operator `not`. + + :type value: Any + :rtype: bool + """ + return not value + + def aws_is_virtual_hostable_s3_bucket(self, value, allow_subdomains): + """Evaluates whether a value is a valid bucket name for virtual host + style bucket URLs. To pass, the value must meet the following criteria: + 1. is_valid_host_label(value) is True + 2. length between 3 and 63 characters (inclusive) + 3. does not contain uppercase characters + 4. is not formatted as an IP address + + If allow_subdomains is True, split on `.` and validate + each component separately. + + :type value: str + :type allow_subdomains: bool + :rtype: bool + """ + if ( + value is None + or len(value) < 3 + or value.lower() != value + or IPV4_RE.match(value) is not None + ): + return False + + return self.is_valid_host_label( + value, allow_subdomains=allow_subdomains + ) + + +# maintains backwards compatibility as `Library` was misspelled +# in earlier versions +RuleSetStandardLibary = RuleSetStandardLibrary + + +class BaseRule: + """Base interface for individual endpoint rules.""" + + def __init__(self, conditions, documentation=None): + self.conditions = conditions + self.documentation = documentation + + def evaluate(self, scope_vars, rule_lib): + raise NotImplementedError() + + def evaluate_conditions(self, scope_vars, rule_lib): + """Determine if all conditions in a rule are met. + + :type scope_vars: dict + :type rule_lib: RuleSetStandardLibrary + :rtype: bool + """ + for func_signature in self.conditions: + result = rule_lib.call_function(func_signature, scope_vars) + if result is False or result is None: + return False + return True + + +class RuleSetEndpoint(NamedTuple): + """A resolved endpoint object returned by a rule.""" + + url: str + properties: dict + headers: dict + + +class EndpointRule(BaseRule): + def __init__(self, endpoint, **kwargs): + super().__init__(**kwargs) + self.endpoint = endpoint + + def evaluate(self, scope_vars, rule_lib): + """Determine if conditions are met to provide a valid endpoint. + + :type scope_vars: dict + :rtype: RuleSetEndpoint + """ + if self.evaluate_conditions(scope_vars, rule_lib): + url = rule_lib.resolve_value(self.endpoint["url"], scope_vars) + properties = self.resolve_properties( + self.endpoint.get("properties", {}), + scope_vars, + rule_lib, + ) + headers = self.resolve_headers(scope_vars, rule_lib) + return RuleSetEndpoint( + url=url, properties=properties, headers=headers + ) + + return None + + def resolve_properties(self, properties, scope_vars, rule_lib): + """Traverse `properties` attribute, resolving any template strings. + + :type properties: dict/list/str + :type scope_vars: dict + :type rule_lib: RuleSetStandardLibrary + :rtype: dict + """ + if isinstance(properties, list): + return [ + self.resolve_properties(prop, scope_vars, rule_lib) + for prop in properties + ] + elif isinstance(properties, dict): + return { + key: self.resolve_properties(value, scope_vars, rule_lib) + for key, value in properties.items() + } + elif rule_lib.is_template(properties): + return rule_lib.resolve_template_string(properties, scope_vars) + + return properties + + def resolve_headers(self, scope_vars, rule_lib): + """Iterate through headers attribute resolving all values. + + :type scope_vars: dict + :type rule_lib: RuleSetStandardLibrary + :rtype: dict + """ + resolved_headers = {} + headers = self.endpoint.get("headers", {}) + + for header, values in headers.items(): + resolved_headers[header] = [ + rule_lib.resolve_value(item, scope_vars) for item in values + ] + return resolved_headers + + +class ErrorRule(BaseRule): + def __init__(self, error, **kwargs): + super().__init__(**kwargs) + self.error = error + + def evaluate(self, scope_vars, rule_lib): + """If an error rule's conditions are met, raise an error rule. + + :type scope_vars: dict + :type rule_lib: RuleSetStandardLibrary + :rtype: EndpointResolutionError + """ + if self.evaluate_conditions(scope_vars, rule_lib): + error = rule_lib.resolve_value(self.error, scope_vars) + raise EndpointResolutionError(msg=error) + return None + + +class TreeRule(BaseRule): + """A tree rule is non-terminal meaning it will never be returned to a provider. + Additionally this means it has no attributes that need to be resolved. + """ + + def __init__(self, rules, **kwargs): + super().__init__(**kwargs) + self.rules = [RuleCreator.create(**rule) for rule in rules] + + def evaluate(self, scope_vars, rule_lib): + """If a tree rule's conditions are met, iterate its sub-rules + and return first result found. + + :type scope_vars: dict + :type rule_lib: RuleSetStandardLibrary + :rtype: RuleSetEndpoint/EndpointResolutionError + """ + if self.evaluate_conditions(scope_vars, rule_lib): + for rule in self.rules: + # don't share scope_vars between rules + rule_result = rule.evaluate(scope_vars.copy(), rule_lib) + if rule_result: + return rule_result + return None + + +class RuleCreator: + endpoint = EndpointRule + error = ErrorRule + tree = TreeRule + + @classmethod + def create(cls, **kwargs): + """Create a rule instance from metadata. + + :rtype: TreeRule/EndpointRule/ErrorRule + """ + rule_type = kwargs.pop("type") + try: + rule_class = getattr(cls, rule_type) + except AttributeError: + raise EndpointResolutionError( + msg=f"Unknown rule type: {rule_type}. A rule must " + "be of type tree, endpoint or error." + ) + else: + return rule_class(**kwargs) + + +class ParameterType(Enum): + """Translation from `type` attribute to native Python type.""" + + string = str + boolean = bool + + +class ParameterDefinition: + """The spec of an individual parameter defined in a RuleSet.""" + + def __init__( + self, + name, + parameter_type, + documentation=None, + builtIn=None, + default=None, + required=None, + deprecated=None, + ): + self.name = name + try: + self.parameter_type = getattr( + ParameterType, parameter_type.lower() + ).value + except AttributeError: + raise EndpointResolutionError( + msg=f"Unknown parameter type: {parameter_type}. " + "A parameter must be of type string or boolean." + ) + self.documentation = documentation + self.builtin = builtIn + self.default = default + self.required = required + self.deprecated = deprecated + + def validate_input(self, value): + """Perform base validation on parameter input. + + :type value: Any + :raises: EndpointParametersError + """ + + if not isinstance(value, self.parameter_type): + raise EndpointResolutionError( + msg=f"Value ({self.name}) is the wrong " + f"type. Must be {self.parameter_type}." + ) + if self.deprecated is not None: + depr_str = f"{self.name} has been deprecated." + msg = self.deprecated.get("message") + since = self.deprecated.get("since") + if msg: + depr_str += f"\n{msg}" + if since: + depr_str += f"\nDeprecated since {since}." + logger.info(depr_str) + + return None + + def process_input(self, value): + """Process input against spec, applying default if value is None.""" + if value is None: + if self.default is not None: + return self.default + if self.required: + raise EndpointResolutionError( + f"Cannot find value for required parameter {self.name}" + ) + # in all other cases, the parameter will keep the value None + else: + self.validate_input(value) + return value + + +class RuleSet: + """Collection of rules to derive a routable service endpoint.""" + + def __init__( + self, version, parameters, rules, partitions, documentation=None + ): + self.version = version + self.parameters = self._ingest_parameter_spec(parameters) + self.rules = [RuleCreator.create(**rule) for rule in rules] + self.rule_lib = RuleSetStandardLibrary(partitions) + self.documentation = documentation + + def _ingest_parameter_spec(self, parameters): + return { + name: ParameterDefinition( + name, + spec["type"], + spec.get("documentation"), + spec.get("builtIn"), + spec.get("default"), + spec.get("required"), + spec.get("deprecated"), + ) + for name, spec in parameters.items() + } + + def process_input_parameters(self, input_params): + """Process each input parameter against its spec. + + :type input_params: dict + """ + for name, spec in self.parameters.items(): + value = spec.process_input(input_params.get(name)) + if value is not None: + input_params[name] = value + return None + + def evaluate(self, input_parameters): + """Evaluate input parameters against rules returning first match. + + :type input_parameters: dict + """ + self.process_input_parameters(input_parameters) + for rule in self.rules: + evaluation = rule.evaluate(input_parameters.copy(), self.rule_lib) + if evaluation is not None: + return evaluation + return None + + +class EndpointProvider: + """Derives endpoints from a RuleSet for given input parameters.""" + + def __init__(self, ruleset_data, partition_data): + self.ruleset = RuleSet(**ruleset_data, partitions=partition_data) + + @lru_cache_weakref(maxsize=CACHE_SIZE) + def resolve_endpoint(self, **input_parameters): + """Match input parameters to a rule. + + :type input_parameters: dict + :rtype: RuleSetEndpoint + """ + params_for_error = input_parameters.copy() + endpoint = self.ruleset.evaluate(input_parameters) + if endpoint is None: + param_string = "\n".join( + [f"{key}: {value}" for key, value in params_for_error.items()] + ) + raise EndpointResolutionError( + msg=f"No endpoint found for parameters:\n{param_string}" + ) + return endpoint diff --git a/dbtzin/lib/python3.8/site-packages/botocore/errorfactory.py b/dbtzin/lib/python3.8/site-packages/botocore/errorfactory.py new file mode 100644 index 00000000..d9a1e9cd --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/errorfactory.py @@ -0,0 +1,90 @@ +# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +from botocore.exceptions import ClientError +from botocore.utils import get_service_module_name + + +class BaseClientExceptions: + ClientError = ClientError + + def __init__(self, code_to_exception): + """Base class for exceptions object on a client + + :type code_to_exception: dict + :param code_to_exception: Mapping of error codes (strings) to exception + class that should be raised when encountering a particular + error code. + """ + self._code_to_exception = code_to_exception + + def from_code(self, error_code): + """Retrieves the error class based on the error code + + This is helpful for identifying the exception class needing to be + caught based on the ClientError.parsed_reponse['Error']['Code'] value + + :type error_code: string + :param error_code: The error code associated to a ClientError exception + + :rtype: ClientError or a subclass of ClientError + :returns: The appropriate modeled exception class for that error + code. If the error code does not match any of the known + modeled exceptions then return a generic ClientError. + """ + return self._code_to_exception.get(error_code, self.ClientError) + + def __getattr__(self, name): + exception_cls_names = [ + exception_cls.__name__ + for exception_cls in self._code_to_exception.values() + ] + raise AttributeError( + fr"{self} object has no attribute {name}. " + fr"Valid exceptions are: {', '.join(exception_cls_names)}" + ) + + +class ClientExceptionsFactory: + def __init__(self): + self._client_exceptions_cache = {} + + def create_client_exceptions(self, service_model): + """Creates a ClientExceptions object for the particular service client + + :type service_model: botocore.model.ServiceModel + :param service_model: The service model for the client + + :rtype: object that subclasses from BaseClientExceptions + :returns: The exceptions object of a client that can be used + to grab the various different modeled exceptions. + """ + service_name = service_model.service_name + if service_name not in self._client_exceptions_cache: + client_exceptions = self._create_client_exceptions(service_model) + self._client_exceptions_cache[service_name] = client_exceptions + return self._client_exceptions_cache[service_name] + + def _create_client_exceptions(self, service_model): + cls_props = {} + code_to_exception = {} + for error_shape in service_model.error_shapes: + exception_name = str(error_shape.name) + exception_cls = type(exception_name, (ClientError,), {}) + cls_props[exception_name] = exception_cls + code = str(error_shape.error_code) + code_to_exception[code] = exception_cls + cls_name = str(get_service_module_name(service_model) + 'Exceptions') + client_exceptions_cls = type( + cls_name, (BaseClientExceptions,), cls_props + ) + return client_exceptions_cls(code_to_exception) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/eventstream.py b/dbtzin/lib/python3.8/site-packages/botocore/eventstream.py new file mode 100644 index 00000000..11baf81a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/eventstream.py @@ -0,0 +1,633 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +"""Binary Event Stream Decoding """ + +from binascii import crc32 +from struct import unpack + +from botocore.exceptions import EventStreamError + +# byte length of the prelude (total_length + header_length + prelude_crc) +_PRELUDE_LENGTH = 12 +_MAX_HEADERS_LENGTH = 128 * 1024 # 128 Kb +_MAX_PAYLOAD_LENGTH = 16 * 1024**2 # 16 Mb + + +class ParserError(Exception): + """Base binary flow encoding parsing exception.""" + + pass + + +class DuplicateHeader(ParserError): + """Duplicate header found in the event.""" + + def __init__(self, header): + message = 'Duplicate header present: "%s"' % header + super().__init__(message) + + +class InvalidHeadersLength(ParserError): + """Headers length is longer than the maximum.""" + + def __init__(self, length): + message = 'Header length of {} exceeded the maximum of {}'.format( + length, + _MAX_HEADERS_LENGTH, + ) + super().__init__(message) + + +class InvalidPayloadLength(ParserError): + """Payload length is longer than the maximum.""" + + def __init__(self, length): + message = 'Payload length of {} exceeded the maximum of {}'.format( + length, + _MAX_PAYLOAD_LENGTH, + ) + super().__init__(message) + + +class ChecksumMismatch(ParserError): + """Calculated checksum did not match the expected checksum.""" + + def __init__(self, expected, calculated): + message = ( + 'Checksum mismatch: expected 0x{:08x}, calculated 0x{:08x}'.format( + expected, + calculated, + ) + ) + super().__init__(message) + + +class NoInitialResponseError(ParserError): + """An event of type initial-response was not received. + + This exception is raised when the event stream produced no events or + the first event in the stream was not of the initial-response type. + """ + + def __init__(self): + message = 'First event was not of the initial-response type' + super().__init__(message) + + +class DecodeUtils: + """Unpacking utility functions used in the decoder. + + All methods on this class take raw bytes and return a tuple containing + the value parsed from the bytes and the number of bytes consumed to parse + that value. + """ + + UINT8_BYTE_FORMAT = '!B' + UINT16_BYTE_FORMAT = '!H' + UINT32_BYTE_FORMAT = '!I' + INT8_BYTE_FORMAT = '!b' + INT16_BYTE_FORMAT = '!h' + INT32_BYTE_FORMAT = '!i' + INT64_BYTE_FORMAT = '!q' + PRELUDE_BYTE_FORMAT = '!III' + + # uint byte size to unpack format + UINT_BYTE_FORMAT = { + 1: UINT8_BYTE_FORMAT, + 2: UINT16_BYTE_FORMAT, + 4: UINT32_BYTE_FORMAT, + } + + @staticmethod + def unpack_true(data): + """This method consumes none of the provided bytes and returns True. + + :type data: bytes + :param data: The bytes to parse from. This is ignored in this method. + + :rtype: tuple + :rtype: (bool, int) + :returns: The tuple (True, 0) + """ + return True, 0 + + @staticmethod + def unpack_false(data): + """This method consumes none of the provided bytes and returns False. + + :type data: bytes + :param data: The bytes to parse from. This is ignored in this method. + + :rtype: tuple + :rtype: (bool, int) + :returns: The tuple (False, 0) + """ + return False, 0 + + @staticmethod + def unpack_uint8(data): + """Parse an unsigned 8-bit integer from the bytes. + + :type data: bytes + :param data: The bytes to parse from. + + :rtype: (int, int) + :returns: A tuple containing the (parsed integer value, bytes consumed) + """ + value = unpack(DecodeUtils.UINT8_BYTE_FORMAT, data[:1])[0] + return value, 1 + + @staticmethod + def unpack_uint32(data): + """Parse an unsigned 32-bit integer from the bytes. + + :type data: bytes + :param data: The bytes to parse from. + + :rtype: (int, int) + :returns: A tuple containing the (parsed integer value, bytes consumed) + """ + value = unpack(DecodeUtils.UINT32_BYTE_FORMAT, data[:4])[0] + return value, 4 + + @staticmethod + def unpack_int8(data): + """Parse a signed 8-bit integer from the bytes. + + :type data: bytes + :param data: The bytes to parse from. + + :rtype: (int, int) + :returns: A tuple containing the (parsed integer value, bytes consumed) + """ + value = unpack(DecodeUtils.INT8_BYTE_FORMAT, data[:1])[0] + return value, 1 + + @staticmethod + def unpack_int16(data): + """Parse a signed 16-bit integer from the bytes. + + :type data: bytes + :param data: The bytes to parse from. + + :rtype: tuple + :rtype: (int, int) + :returns: A tuple containing the (parsed integer value, bytes consumed) + """ + value = unpack(DecodeUtils.INT16_BYTE_FORMAT, data[:2])[0] + return value, 2 + + @staticmethod + def unpack_int32(data): + """Parse a signed 32-bit integer from the bytes. + + :type data: bytes + :param data: The bytes to parse from. + + :rtype: tuple + :rtype: (int, int) + :returns: A tuple containing the (parsed integer value, bytes consumed) + """ + value = unpack(DecodeUtils.INT32_BYTE_FORMAT, data[:4])[0] + return value, 4 + + @staticmethod + def unpack_int64(data): + """Parse a signed 64-bit integer from the bytes. + + :type data: bytes + :param data: The bytes to parse from. + + :rtype: tuple + :rtype: (int, int) + :returns: A tuple containing the (parsed integer value, bytes consumed) + """ + value = unpack(DecodeUtils.INT64_BYTE_FORMAT, data[:8])[0] + return value, 8 + + @staticmethod + def unpack_byte_array(data, length_byte_size=2): + """Parse a variable length byte array from the bytes. + + The bytes are expected to be in the following format: + [ length ][0 ... length bytes] + where length is an unsigned integer represented in the smallest number + of bytes to hold the maximum length of the array. + + :type data: bytes + :param data: The bytes to parse from. + + :type length_byte_size: int + :param length_byte_size: The byte size of the preceding integer that + represents the length of the array. Supported values are 1, 2, and 4. + + :rtype: (bytes, int) + :returns: A tuple containing the (parsed byte array, bytes consumed). + """ + uint_byte_format = DecodeUtils.UINT_BYTE_FORMAT[length_byte_size] + length = unpack(uint_byte_format, data[:length_byte_size])[0] + bytes_end = length + length_byte_size + array_bytes = data[length_byte_size:bytes_end] + return array_bytes, bytes_end + + @staticmethod + def unpack_utf8_string(data, length_byte_size=2): + """Parse a variable length utf-8 string from the bytes. + + The bytes are expected to be in the following format: + [ length ][0 ... length bytes] + where length is an unsigned integer represented in the smallest number + of bytes to hold the maximum length of the array and the following + bytes are a valid utf-8 string. + + :type data: bytes + :param bytes: The bytes to parse from. + + :type length_byte_size: int + :param length_byte_size: The byte size of the preceding integer that + represents the length of the array. Supported values are 1, 2, and 4. + + :rtype: (str, int) + :returns: A tuple containing the (utf-8 string, bytes consumed). + """ + array_bytes, consumed = DecodeUtils.unpack_byte_array( + data, length_byte_size + ) + return array_bytes.decode('utf-8'), consumed + + @staticmethod + def unpack_uuid(data): + """Parse a 16-byte uuid from the bytes. + + :type data: bytes + :param data: The bytes to parse from. + + :rtype: (bytes, int) + :returns: A tuple containing the (uuid bytes, bytes consumed). + """ + return data[:16], 16 + + @staticmethod + def unpack_prelude(data): + """Parse the prelude for an event stream message from the bytes. + + The prelude for an event stream message has the following format: + [total_length][header_length][prelude_crc] + where each field is an unsigned 32-bit integer. + + :rtype: ((int, int, int), int) + :returns: A tuple of ((total_length, headers_length, prelude_crc), + consumed) + """ + return (unpack(DecodeUtils.PRELUDE_BYTE_FORMAT, data), _PRELUDE_LENGTH) + + +def _validate_checksum(data, checksum, crc=0): + # To generate the same numeric value across all Python versions and + # platforms use crc32(data) & 0xffffffff. + computed_checksum = crc32(data, crc) & 0xFFFFFFFF + if checksum != computed_checksum: + raise ChecksumMismatch(checksum, computed_checksum) + + +class MessagePrelude: + """Represents the prelude of an event stream message.""" + + def __init__(self, total_length, headers_length, crc): + self.total_length = total_length + self.headers_length = headers_length + self.crc = crc + + @property + def payload_length(self): + """Calculates the total payload length. + + The extra minus 4 bytes is for the message CRC. + + :rtype: int + :returns: The total payload length. + """ + return self.total_length - self.headers_length - _PRELUDE_LENGTH - 4 + + @property + def payload_end(self): + """Calculates the byte offset for the end of the message payload. + + The extra minus 4 bytes is for the message CRC. + + :rtype: int + :returns: The byte offset from the beginning of the event stream + message to the end of the payload. + """ + return self.total_length - 4 + + @property + def headers_end(self): + """Calculates the byte offset for the end of the message headers. + + :rtype: int + :returns: The byte offset from the beginning of the event stream + message to the end of the headers. + """ + return _PRELUDE_LENGTH + self.headers_length + + +class EventStreamMessage: + """Represents an event stream message.""" + + def __init__(self, prelude, headers, payload, crc): + self.prelude = prelude + self.headers = headers + self.payload = payload + self.crc = crc + + def to_response_dict(self, status_code=200): + message_type = self.headers.get(':message-type') + if message_type == 'error' or message_type == 'exception': + status_code = 400 + return { + 'status_code': status_code, + 'headers': self.headers, + 'body': self.payload, + } + + +class EventStreamHeaderParser: + """Parses the event headers from an event stream message. + + Expects all of the header data upfront and creates a dictionary of headers + to return. This object can be reused multiple times to parse the headers + from multiple event stream messages. + """ + + # Maps header type to appropriate unpacking function + # These unpacking functions return the value and the amount unpacked + _HEADER_TYPE_MAP = { + # boolean_true + 0: DecodeUtils.unpack_true, + # boolean_false + 1: DecodeUtils.unpack_false, + # byte + 2: DecodeUtils.unpack_int8, + # short + 3: DecodeUtils.unpack_int16, + # integer + 4: DecodeUtils.unpack_int32, + # long + 5: DecodeUtils.unpack_int64, + # byte_array + 6: DecodeUtils.unpack_byte_array, + # string + 7: DecodeUtils.unpack_utf8_string, + # timestamp + 8: DecodeUtils.unpack_int64, + # uuid + 9: DecodeUtils.unpack_uuid, + } + + def __init__(self): + self._data = None + + def parse(self, data): + """Parses the event stream headers from an event stream message. + + :type data: bytes + :param data: The bytes that correspond to the headers section of an + event stream message. + + :rtype: dict + :returns: A dictionary of header key, value pairs. + """ + self._data = data + return self._parse_headers() + + def _parse_headers(self): + headers = {} + while self._data: + name, value = self._parse_header() + if name in headers: + raise DuplicateHeader(name) + headers[name] = value + return headers + + def _parse_header(self): + name = self._parse_name() + value = self._parse_value() + return name, value + + def _parse_name(self): + name, consumed = DecodeUtils.unpack_utf8_string(self._data, 1) + self._advance_data(consumed) + return name + + def _parse_type(self): + type, consumed = DecodeUtils.unpack_uint8(self._data) + self._advance_data(consumed) + return type + + def _parse_value(self): + header_type = self._parse_type() + value_unpacker = self._HEADER_TYPE_MAP[header_type] + value, consumed = value_unpacker(self._data) + self._advance_data(consumed) + return value + + def _advance_data(self, consumed): + self._data = self._data[consumed:] + + +class EventStreamBuffer: + """Streaming based event stream buffer + + A buffer class that wraps bytes from an event stream providing parsed + messages as they become available via an iterable interface. + """ + + def __init__(self): + self._data = b'' + self._prelude = None + self._header_parser = EventStreamHeaderParser() + + def add_data(self, data): + """Add data to the buffer. + + :type data: bytes + :param data: The bytes to add to the buffer to be used when parsing + """ + self._data += data + + def _validate_prelude(self, prelude): + if prelude.headers_length > _MAX_HEADERS_LENGTH: + raise InvalidHeadersLength(prelude.headers_length) + + if prelude.payload_length > _MAX_PAYLOAD_LENGTH: + raise InvalidPayloadLength(prelude.payload_length) + + def _parse_prelude(self): + prelude_bytes = self._data[:_PRELUDE_LENGTH] + raw_prelude, _ = DecodeUtils.unpack_prelude(prelude_bytes) + prelude = MessagePrelude(*raw_prelude) + self._validate_prelude(prelude) + # The minus 4 removes the prelude crc from the bytes to be checked + _validate_checksum(prelude_bytes[: _PRELUDE_LENGTH - 4], prelude.crc) + return prelude + + def _parse_headers(self): + header_bytes = self._data[_PRELUDE_LENGTH : self._prelude.headers_end] + return self._header_parser.parse(header_bytes) + + def _parse_payload(self): + prelude = self._prelude + payload_bytes = self._data[prelude.headers_end : prelude.payload_end] + return payload_bytes + + def _parse_message_crc(self): + prelude = self._prelude + crc_bytes = self._data[prelude.payload_end : prelude.total_length] + message_crc, _ = DecodeUtils.unpack_uint32(crc_bytes) + return message_crc + + def _parse_message_bytes(self): + # The minus 4 includes the prelude crc to the bytes to be checked + message_bytes = self._data[ + _PRELUDE_LENGTH - 4 : self._prelude.payload_end + ] + return message_bytes + + def _validate_message_crc(self): + message_crc = self._parse_message_crc() + message_bytes = self._parse_message_bytes() + _validate_checksum(message_bytes, message_crc, crc=self._prelude.crc) + return message_crc + + def _parse_message(self): + crc = self._validate_message_crc() + headers = self._parse_headers() + payload = self._parse_payload() + message = EventStreamMessage(self._prelude, headers, payload, crc) + self._prepare_for_next_message() + return message + + def _prepare_for_next_message(self): + # Advance the data and reset the current prelude + self._data = self._data[self._prelude.total_length :] + self._prelude = None + + def next(self): + """Provides the next available message parsed from the stream + + :rtype: EventStreamMessage + :returns: The next event stream message + """ + if len(self._data) < _PRELUDE_LENGTH: + raise StopIteration() + + if self._prelude is None: + self._prelude = self._parse_prelude() + + if len(self._data) < self._prelude.total_length: + raise StopIteration() + + return self._parse_message() + + def __next__(self): + return self.next() + + def __iter__(self): + return self + + +class EventStream: + """Wrapper class for an event stream body. + + This wraps the underlying streaming body, parsing it for individual events + and yielding them as they come available through the iterator interface. + + The following example uses the S3 select API to get structured data out of + an object stored in S3 using an event stream. + + **Example:** + :: + from botocore.session import Session + + s3 = Session().create_client('s3') + response = s3.select_object_content( + Bucket='bucketname', + Key='keyname', + ExpressionType='SQL', + RequestProgress={'Enabled': True}, + Expression="SELECT * FROM S3Object s", + InputSerialization={'CSV': {}}, + OutputSerialization={'CSV': {}}, + ) + # This is the event stream in the response + event_stream = response['Payload'] + end_event_received = False + with open('output', 'wb') as f: + # Iterate over events in the event stream as they come + for event in event_stream: + # If we received a records event, write the data to a file + if 'Records' in event: + data = event['Records']['Payload'] + f.write(data) + # If we received a progress event, print the details + elif 'Progress' in event: + print(event['Progress']['Details']) + # End event indicates that the request finished successfully + elif 'End' in event: + print('Result is complete') + end_event_received = True + if not end_event_received: + raise Exception("End event not received, request incomplete.") + """ + + def __init__(self, raw_stream, output_shape, parser, operation_name): + self._raw_stream = raw_stream + self._output_shape = output_shape + self._operation_name = operation_name + self._parser = parser + self._event_generator = self._create_raw_event_generator() + + def __iter__(self): + for event in self._event_generator: + parsed_event = self._parse_event(event) + if parsed_event: + yield parsed_event + + def _create_raw_event_generator(self): + event_stream_buffer = EventStreamBuffer() + for chunk in self._raw_stream.stream(): + event_stream_buffer.add_data(chunk) + yield from event_stream_buffer + + def _parse_event(self, event): + response_dict = event.to_response_dict() + parsed_response = self._parser.parse(response_dict, self._output_shape) + if response_dict['status_code'] == 200: + return parsed_response + else: + raise EventStreamError(parsed_response, self._operation_name) + + def get_initial_response(self): + try: + initial_event = next(self._event_generator) + event_type = initial_event.headers.get(':event-type') + if event_type == 'initial-response': + return initial_event + except StopIteration: + pass + raise NoInitialResponseError() + + def close(self): + """Closes the underlying streaming body.""" + self._raw_stream.close() diff --git a/dbtzin/lib/python3.8/site-packages/botocore/exceptions.py b/dbtzin/lib/python3.8/site-packages/botocore/exceptions.py new file mode 100644 index 00000000..1c480abb --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/exceptions.py @@ -0,0 +1,816 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +from botocore.vendored import requests +from botocore.vendored.requests.packages import urllib3 + + +def _exception_from_packed_args(exception_cls, args=None, kwargs=None): + # This is helpful for reducing Exceptions that only accept kwargs as + # only positional arguments can be provided for __reduce__ + # Ideally, this would also be a class method on the BotoCoreError + # but instance methods cannot be pickled. + if args is None: + args = () + if kwargs is None: + kwargs = {} + return exception_cls(*args, **kwargs) + + +class BotoCoreError(Exception): + """ + The base exception class for BotoCore exceptions. + + :ivar msg: The descriptive message associated with the error. + """ + + fmt = 'An unspecified error occurred' + + def __init__(self, **kwargs): + msg = self.fmt.format(**kwargs) + Exception.__init__(self, msg) + self.kwargs = kwargs + + def __reduce__(self): + return _exception_from_packed_args, (self.__class__, None, self.kwargs) + + +class DataNotFoundError(BotoCoreError): + """ + The data associated with a particular path could not be loaded. + + :ivar data_path: The data path that the user attempted to load. + """ + + fmt = 'Unable to load data for: {data_path}' + + +class UnknownServiceError(DataNotFoundError): + """Raised when trying to load data for an unknown service. + + :ivar service_name: The name of the unknown service. + + """ + + fmt = ( + "Unknown service: '{service_name}'. Valid service names are: " + "{known_service_names}" + ) + + +class UnknownRegionError(BotoCoreError): + """Raised when trying to load data for an unknown region. + + :ivar region_name: The name of the unknown region. + + """ + + fmt = "Unknown region: '{region_name}'. {error_msg}" + + +class ApiVersionNotFoundError(BotoCoreError): + """ + The data associated with either the API version or a compatible one + could not be loaded. + + :ivar data_path: The data path that the user attempted to load. + :ivar api_version: The API version that the user attempted to load. + """ + + fmt = 'Unable to load data {data_path} for: {api_version}' + + +class HTTPClientError(BotoCoreError): + fmt = 'An HTTP Client raised an unhandled exception: {error}' + + def __init__(self, request=None, response=None, **kwargs): + self.request = request + self.response = response + super().__init__(**kwargs) + + def __reduce__(self): + return _exception_from_packed_args, ( + self.__class__, + (self.request, self.response), + self.kwargs, + ) + + +class ConnectionError(BotoCoreError): + fmt = 'An HTTP Client failed to establish a connection: {error}' + + +class InvalidIMDSEndpointError(BotoCoreError): + fmt = 'Invalid endpoint EC2 Instance Metadata endpoint: {endpoint}' + + +class InvalidIMDSEndpointModeError(BotoCoreError): + fmt = ( + 'Invalid EC2 Instance Metadata endpoint mode: {mode}' + ' Valid endpoint modes (case-insensitive): {valid_modes}.' + ) + + +class EndpointConnectionError(ConnectionError): + fmt = 'Could not connect to the endpoint URL: "{endpoint_url}"' + + +class SSLError(ConnectionError, requests.exceptions.SSLError): + fmt = 'SSL validation failed for {endpoint_url} {error}' + + +class ConnectionClosedError(HTTPClientError): + fmt = ( + 'Connection was closed before we received a valid response ' + 'from endpoint URL: "{endpoint_url}".' + ) + + +class ReadTimeoutError( + HTTPClientError, + requests.exceptions.ReadTimeout, + urllib3.exceptions.ReadTimeoutError, +): + fmt = 'Read timeout on endpoint URL: "{endpoint_url}"' + + +class ConnectTimeoutError(ConnectionError, requests.exceptions.ConnectTimeout): + fmt = 'Connect timeout on endpoint URL: "{endpoint_url}"' + + +class ProxyConnectionError(ConnectionError, requests.exceptions.ProxyError): + fmt = 'Failed to connect to proxy URL: "{proxy_url}"' + + +class ResponseStreamingError(HTTPClientError): + fmt = 'An error occurred while reading from response stream: {error}' + + +class NoCredentialsError(BotoCoreError): + """ + No credentials could be found. + """ + + fmt = 'Unable to locate credentials' + + +class NoAuthTokenError(BotoCoreError): + """ + No authorization token could be found. + """ + + fmt = 'Unable to locate authorization token' + + +class TokenRetrievalError(BotoCoreError): + """ + Error attempting to retrieve a token from a remote source. + + :ivar provider: The name of the token provider. + :ivar error_msg: The msg explaining why the token could not be retrieved. + + """ + + fmt = 'Error when retrieving token from {provider}: {error_msg}' + + +class PartialCredentialsError(BotoCoreError): + """ + Only partial credentials were found. + + :ivar cred_var: The missing credential variable name. + + """ + + fmt = 'Partial credentials found in {provider}, missing: {cred_var}' + + +class CredentialRetrievalError(BotoCoreError): + """ + Error attempting to retrieve credentials from a remote source. + + :ivar provider: The name of the credential provider. + :ivar error_msg: The msg explaining why credentials could not be + retrieved. + + """ + + fmt = 'Error when retrieving credentials from {provider}: {error_msg}' + + +class UnknownSignatureVersionError(BotoCoreError): + """ + Requested Signature Version is not known. + + :ivar signature_version: The name of the requested signature version. + """ + + fmt = 'Unknown Signature Version: {signature_version}.' + + +class ServiceNotInRegionError(BotoCoreError): + """ + The service is not available in requested region. + + :ivar service_name: The name of the service. + :ivar region_name: The name of the region. + """ + + fmt = 'Service {service_name} not available in region {region_name}' + + +class BaseEndpointResolverError(BotoCoreError): + """Base error for endpoint resolving errors. + + Should never be raised directly, but clients can catch + this exception if they want to generically handle any errors + during the endpoint resolution process. + + """ + + +class NoRegionError(BaseEndpointResolverError): + """No region was specified.""" + + fmt = 'You must specify a region.' + + +class EndpointVariantError(BaseEndpointResolverError): + """ + Could not construct modeled endpoint variant. + + :ivar error_msg: The message explaining why the modeled endpoint variant + is unable to be constructed. + + """ + + fmt = ( + 'Unable to construct a modeled endpoint with the following ' + 'variant(s) {tags}: ' + ) + + +class UnknownEndpointError(BaseEndpointResolverError, ValueError): + """ + Could not construct an endpoint. + + :ivar service_name: The name of the service. + :ivar region_name: The name of the region. + """ + + fmt = ( + 'Unable to construct an endpoint for ' + '{service_name} in region {region_name}' + ) + + +class UnknownFIPSEndpointError(BaseEndpointResolverError): + """ + Could not construct a FIPS endpoint. + + :ivar service_name: The name of the service. + :ivar region_name: The name of the region. + """ + + fmt = ( + 'The provided FIPS pseudo-region "{region_name}" is not known for ' + 'the service "{service_name}". A FIPS compliant endpoint cannot be ' + 'constructed.' + ) + + +class ProfileNotFound(BotoCoreError): + """ + The specified configuration profile was not found in the + configuration file. + + :ivar profile: The name of the profile the user attempted to load. + """ + + fmt = 'The config profile ({profile}) could not be found' + + +class ConfigParseError(BotoCoreError): + """ + The configuration file could not be parsed. + + :ivar path: The path to the configuration file. + """ + + fmt = 'Unable to parse config file: {path}' + + +class ConfigNotFound(BotoCoreError): + """ + The specified configuration file could not be found. + + :ivar path: The path to the configuration file. + """ + + fmt = 'The specified config file ({path}) could not be found.' + + +class MissingParametersError(BotoCoreError): + """ + One or more required parameters were not supplied. + + :ivar object: The object that has missing parameters. + This can be an operation or a parameter (in the + case of inner params). The str() of this object + will be used so it doesn't need to implement anything + other than str(). + :ivar missing: The names of the missing parameters. + """ + + fmt = ( + 'The following required parameters are missing for ' + '{object_name}: {missing}' + ) + + +class ValidationError(BotoCoreError): + """ + An exception occurred validating parameters. + + Subclasses must accept a ``value`` and ``param`` + argument in their ``__init__``. + + :ivar value: The value that was being validated. + :ivar param: The parameter that failed validation. + :ivar type_name: The name of the underlying type. + """ + + fmt = "Invalid value ('{value}') for param {param} " "of type {type_name} " + + +class ParamValidationError(BotoCoreError): + fmt = 'Parameter validation failed:\n{report}' + + +# These exceptions subclass from ValidationError so that code +# can just 'except ValidationError' to catch any possibly validation +# error. +class UnknownKeyError(ValidationError): + """ + Unknown key in a struct parameter. + + :ivar value: The value that was being checked. + :ivar param: The name of the parameter. + :ivar choices: The valid choices the value can be. + """ + + fmt = ( + "Unknown key '{value}' for param '{param}'. Must be one " + "of: {choices}" + ) + + +class RangeError(ValidationError): + """ + A parameter value was out of the valid range. + + :ivar value: The value that was being checked. + :ivar param: The parameter that failed validation. + :ivar min_value: The specified minimum value. + :ivar max_value: The specified maximum value. + """ + + fmt = ( + 'Value out of range for param {param}: ' + '{min_value} <= {value} <= {max_value}' + ) + + +class UnknownParameterError(ValidationError): + """ + Unknown top level parameter. + + :ivar name: The name of the unknown parameter. + :ivar operation: The name of the operation. + :ivar choices: The valid choices the parameter name can be. + """ + + fmt = ( + "Unknown parameter '{name}' for operation {operation}. Must be one " + "of: {choices}" + ) + + +class InvalidRegionError(ValidationError, ValueError): + """ + Invalid region_name provided to client or resource. + + :ivar region_name: region_name that was being validated. + """ + + fmt = "Provided region_name '{region_name}' doesn't match a supported format." + + +class AliasConflictParameterError(ValidationError): + """ + Error when an alias is provided for a parameter as well as the original. + + :ivar original: The name of the original parameter. + :ivar alias: The name of the alias + :ivar operation: The name of the operation. + """ + + fmt = ( + "Parameter '{original}' and its alias '{alias}' were provided " + "for operation {operation}. Only one of them may be used." + ) + + +class UnknownServiceStyle(BotoCoreError): + """ + Unknown style of service invocation. + + :ivar service_style: The style requested. + """ + + fmt = 'The service style ({service_style}) is not understood.' + + +class PaginationError(BotoCoreError): + fmt = 'Error during pagination: {message}' + + +class OperationNotPageableError(BotoCoreError): + fmt = 'Operation cannot be paginated: {operation_name}' + + +class ChecksumError(BotoCoreError): + """The expected checksum did not match the calculated checksum.""" + + fmt = ( + 'Checksum {checksum_type} failed, expected checksum ' + '{expected_checksum} did not match calculated checksum ' + '{actual_checksum}.' + ) + + +class UnseekableStreamError(BotoCoreError): + """Need to seek a stream, but stream does not support seeking.""" + + fmt = ( + 'Need to rewind the stream {stream_object}, but stream ' + 'is not seekable.' + ) + + +class WaiterError(BotoCoreError): + """Waiter failed to reach desired state.""" + + fmt = 'Waiter {name} failed: {reason}' + + def __init__(self, name, reason, last_response): + super().__init__(name=name, reason=reason) + self.last_response = last_response + + +class IncompleteReadError(BotoCoreError): + """HTTP response did not return expected number of bytes.""" + + fmt = ( + '{actual_bytes} read, but total bytes ' 'expected is {expected_bytes}.' + ) + + +class InvalidExpressionError(BotoCoreError): + """Expression is either invalid or too complex.""" + + fmt = 'Invalid expression {expression}: Only dotted lookups are supported.' + + +class UnknownCredentialError(BotoCoreError): + """Tried to insert before/after an unregistered credential type.""" + + fmt = 'Credential named {name} not found.' + + +class WaiterConfigError(BotoCoreError): + """Error when processing waiter configuration.""" + + fmt = 'Error processing waiter config: {error_msg}' + + +class UnknownClientMethodError(BotoCoreError): + """Error when trying to access a method on a client that does not exist.""" + + fmt = 'Client does not have method: {method_name}' + + +class UnsupportedSignatureVersionError(BotoCoreError): + """Error when trying to use an unsupported Signature Version.""" + + fmt = 'Signature version is not supported: {signature_version}' + + +class ClientError(Exception): + MSG_TEMPLATE = ( + 'An error occurred ({error_code}) when calling the {operation_name} ' + 'operation{retry_info}: {error_message}' + ) + + def __init__(self, error_response, operation_name): + retry_info = self._get_retry_info(error_response) + error = error_response.get('Error', {}) + msg = self.MSG_TEMPLATE.format( + error_code=error.get('Code', 'Unknown'), + error_message=error.get('Message', 'Unknown'), + operation_name=operation_name, + retry_info=retry_info, + ) + super().__init__(msg) + self.response = error_response + self.operation_name = operation_name + + def _get_retry_info(self, response): + retry_info = '' + if 'ResponseMetadata' in response: + metadata = response['ResponseMetadata'] + if metadata.get('MaxAttemptsReached', False): + if 'RetryAttempts' in metadata: + retry_info = ( + f" (reached max retries: {metadata['RetryAttempts']})" + ) + return retry_info + + def __reduce__(self): + # Subclasses of ClientError's are dynamically generated and + # cannot be pickled unless they are attributes of a + # module. So at the very least return a ClientError back. + return ClientError, (self.response, self.operation_name) + + +class EventStreamError(ClientError): + pass + + +class UnsupportedTLSVersionWarning(Warning): + """Warn when an openssl version that uses TLS 1.2 is required""" + + pass + + +class ImminentRemovalWarning(Warning): + pass + + +class InvalidDNSNameError(BotoCoreError): + """Error when virtual host path is forced on a non-DNS compatible bucket""" + + fmt = ( + 'Bucket named {bucket_name} is not DNS compatible. Virtual ' + 'hosted-style addressing cannot be used. The addressing style ' + 'can be configured by removing the addressing_style value ' + 'or setting that value to \'path\' or \'auto\' in the AWS Config ' + 'file or in the botocore.client.Config object.' + ) + + +class InvalidS3AddressingStyleError(BotoCoreError): + """Error when an invalid path style is specified""" + + fmt = ( + 'S3 addressing style {s3_addressing_style} is invalid. Valid options ' + 'are: \'auto\', \'virtual\', and \'path\'' + ) + + +class UnsupportedS3ArnError(BotoCoreError): + """Error when S3 ARN provided to Bucket parameter is not supported""" + + fmt = ( + 'S3 ARN {arn} provided to "Bucket" parameter is invalid. Only ' + 'ARNs for S3 access-points are supported.' + ) + + +class UnsupportedS3ControlArnError(BotoCoreError): + """Error when S3 ARN provided to S3 control parameter is not supported""" + + fmt = 'S3 ARN "{arn}" provided is invalid for this operation. {msg}' + + +class InvalidHostLabelError(BotoCoreError): + """Error when an invalid host label would be bound to an endpoint""" + + fmt = ( + 'Invalid host label to be bound to the hostname of the endpoint: ' + '"{label}".' + ) + + +class UnsupportedOutpostResourceError(BotoCoreError): + """Error when S3 Outpost ARN provided to Bucket parameter is incomplete""" + + fmt = ( + 'S3 Outpost ARN resource "{resource_name}" provided to "Bucket" ' + 'parameter is invalid. Only ARNs for S3 Outpost arns with an ' + 'access-point sub-resource are supported.' + ) + + +class UnsupportedS3ConfigurationError(BotoCoreError): + """Error when an unsupported configuration is used with access-points""" + + fmt = 'Unsupported configuration when using S3: {msg}' + + +class UnsupportedS3AccesspointConfigurationError(BotoCoreError): + """Error when an unsupported configuration is used with access-points""" + + fmt = 'Unsupported configuration when using S3 access-points: {msg}' + + +class InvalidEndpointDiscoveryConfigurationError(BotoCoreError): + """Error when invalid value supplied for endpoint_discovery_enabled""" + + fmt = ( + 'Unsupported configuration value for endpoint_discovery_enabled. ' + 'Expected one of ("true", "false", "auto") but got {config_value}.' + ) + + +class UnsupportedS3ControlConfigurationError(BotoCoreError): + """Error when an unsupported configuration is used with S3 Control""" + + fmt = 'Unsupported configuration when using S3 Control: {msg}' + + +class InvalidRetryConfigurationError(BotoCoreError): + """Error when invalid retry configuration is specified""" + + fmt = ( + 'Cannot provide retry configuration for "{retry_config_option}". ' + 'Valid retry configuration options are: {valid_options}' + ) + + +class InvalidMaxRetryAttemptsError(InvalidRetryConfigurationError): + """Error when invalid retry configuration is specified""" + + fmt = ( + 'Value provided to "max_attempts": {provided_max_attempts} must ' + 'be an integer greater than or equal to {min_value}.' + ) + + +class InvalidRetryModeError(InvalidRetryConfigurationError): + """Error when invalid retry mode configuration is specified""" + + fmt = ( + 'Invalid value provided to "mode": "{provided_retry_mode}" must ' + 'be one of: {valid_modes}' + ) + + +class InvalidS3UsEast1RegionalEndpointConfigError(BotoCoreError): + """Error for invalid s3 us-east-1 regional endpoints configuration""" + + fmt = ( + 'S3 us-east-1 regional endpoint option ' + '{s3_us_east_1_regional_endpoint_config} is ' + 'invalid. Valid options are: "legacy", "regional"' + ) + + +class InvalidSTSRegionalEndpointsConfigError(BotoCoreError): + """Error when invalid sts regional endpoints configuration is specified""" + + fmt = ( + 'STS regional endpoints option {sts_regional_endpoints_config} is ' + 'invalid. Valid options are: "legacy", "regional"' + ) + + +class StubResponseError(BotoCoreError): + fmt = ( + 'Error getting response stub for operation {operation_name}: {reason}' + ) + + +class StubAssertionError(StubResponseError, AssertionError): + pass + + +class UnStubbedResponseError(StubResponseError): + pass + + +class InvalidConfigError(BotoCoreError): + fmt = '{error_msg}' + + +class InfiniteLoopConfigError(InvalidConfigError): + fmt = ( + 'Infinite loop in credential configuration detected. Attempting to ' + 'load from profile {source_profile} which has already been visited. ' + 'Visited profiles: {visited_profiles}' + ) + + +class RefreshWithMFAUnsupportedError(BotoCoreError): + fmt = 'Cannot refresh credentials: MFA token required.' + + +class MD5UnavailableError(BotoCoreError): + fmt = "This system does not support MD5 generation." + + +class MissingDependencyException(BotoCoreError): + fmt = "Missing Dependency: {msg}" + + +class MetadataRetrievalError(BotoCoreError): + fmt = "Error retrieving metadata: {error_msg}" + + +class UndefinedModelAttributeError(Exception): + pass + + +class MissingServiceIdError(UndefinedModelAttributeError): + fmt = ( + "The model being used for the service {service_name} is missing the " + "serviceId metadata property, which is required." + ) + + def __init__(self, **kwargs): + msg = self.fmt.format(**kwargs) + Exception.__init__(self, msg) + self.kwargs = kwargs + + +class SSOError(BotoCoreError): + fmt = ( + "An unspecified error happened when resolving AWS credentials or an " + "access token from SSO." + ) + + +class SSOTokenLoadError(SSOError): + fmt = "Error loading SSO Token: {error_msg}" + + +class UnauthorizedSSOTokenError(SSOError): + fmt = ( + "The SSO session associated with this profile has expired or is " + "otherwise invalid. To refresh this SSO session run aws sso login " + "with the corresponding profile." + ) + + +class CapacityNotAvailableError(BotoCoreError): + fmt = 'Insufficient request capacity available.' + + +class InvalidProxiesConfigError(BotoCoreError): + fmt = 'Invalid configuration value(s) provided for proxies_config.' + + +class InvalidDefaultsMode(BotoCoreError): + fmt = ( + 'Client configured with invalid defaults mode: {mode}. ' + 'Valid defaults modes include: {valid_modes}.' + ) + + +class AwsChunkedWrapperError(BotoCoreError): + fmt = '{error_msg}' + + +class FlexibleChecksumError(BotoCoreError): + fmt = '{error_msg}' + + +class InvalidEndpointConfigurationError(BotoCoreError): + fmt = 'Invalid endpoint configuration: {msg}' + + +class EndpointProviderError(BotoCoreError): + """Base error for the EndpointProvider class""" + + fmt = '{msg}' + + +class EndpointResolutionError(EndpointProviderError): + """Error when input parameters resolve to an error rule""" + + fmt = '{msg}' + + +class UnknownEndpointResolutionBuiltInName(EndpointProviderError): + fmt = 'Unknown builtin variable name: {name}' diff --git a/dbtzin/lib/python3.8/site-packages/botocore/handlers.py b/dbtzin/lib/python3.8/site-packages/botocore/handlers.py new file mode 100644 index 00000000..aa0ae98c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/handlers.py @@ -0,0 +1,1417 @@ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +"""Builtin event handlers. + +This module contains builtin handlers for events emitted by botocore. +""" + +import base64 +import copy +import logging +import os +import re +import uuid +import warnings +from io import BytesIO + +import botocore +import botocore.auth +from botocore import utils +from botocore.compat import ( + ETree, + OrderedDict, + XMLParseError, + ensure_bytes, + get_md5, + json, + quote, + unquote, + unquote_str, + urlsplit, + urlunsplit, +) +from botocore.docs.utils import ( + AppendParamDocumentation, + AutoPopulatedParam, + HideParamFromOperations, +) +from botocore.endpoint_provider import VALID_HOST_LABEL_RE +from botocore.exceptions import ( + AliasConflictParameterError, + ParamValidationError, + UnsupportedTLSVersionWarning, +) +from botocore.regions import EndpointResolverBuiltins +from botocore.signers import ( + add_generate_db_auth_token, + add_generate_presigned_post, + add_generate_presigned_url, +) +from botocore.utils import ( + SAFE_CHARS, + ArnParser, + conditionally_calculate_checksum, + conditionally_calculate_md5, + percent_encode, + switch_host_with_param, +) + +# Keep these imported. There's pre-existing code that uses them. +from botocore import retryhandler # noqa +from botocore import translate # noqa +from botocore.compat import MD5_AVAILABLE # noqa +from botocore.exceptions import MissingServiceIdError # noqa +from botocore.utils import hyphenize_service_id # noqa +from botocore.utils import is_global_accesspoint # noqa +from botocore.utils import SERVICE_NAME_ALIASES # noqa + + +logger = logging.getLogger(__name__) + +REGISTER_FIRST = object() +REGISTER_LAST = object() +# From the S3 docs: +# The rules for bucket names in the US Standard region allow bucket names +# to be as long as 255 characters, and bucket names can contain any +# combination of uppercase letters, lowercase letters, numbers, periods +# (.), hyphens (-), and underscores (_). +VALID_BUCKET = re.compile(r'^[a-zA-Z0-9.\-_]{1,255}$') +_ACCESSPOINT_ARN = ( + r'^arn:(aws).*:(s3|s3-object-lambda):[a-z\-0-9]*:[0-9]{12}:accesspoint[/:]' + r'[a-zA-Z0-9\-.]{1,63}$' +) +_OUTPOST_ARN = ( + r'^arn:(aws).*:s3-outposts:[a-z\-0-9]+:[0-9]{12}:outpost[/:]' + r'[a-zA-Z0-9\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\-]{1,63}$' +) +VALID_S3_ARN = re.compile('|'.join([_ACCESSPOINT_ARN, _OUTPOST_ARN])) +# signing names used for the services s3 and s3-control, for example in +# botocore/data/s3/2006-03-01/endpoints-rule-set-1.json +S3_SIGNING_NAMES = ('s3', 's3-outposts', 's3-object-lambda', 's3express') +VERSION_ID_SUFFIX = re.compile(r'\?versionId=[^\s]+$') + + +def handle_service_name_alias(service_name, **kwargs): + return SERVICE_NAME_ALIASES.get(service_name, service_name) + + +def add_recursion_detection_header(params, **kwargs): + has_lambda_name = 'AWS_LAMBDA_FUNCTION_NAME' in os.environ + trace_id = os.environ.get('_X_AMZN_TRACE_ID') + if has_lambda_name and trace_id: + headers = params['headers'] + if 'X-Amzn-Trace-Id' not in headers: + headers['X-Amzn-Trace-Id'] = quote(trace_id, safe='-=;:+&[]{}"\',') + + +def escape_xml_payload(params, **kwargs): + # Replace \r and \n with the escaped sequence over the whole XML document + # to avoid linebreak normalization modifying customer input when the + # document is parsed. Ideally, we would do this in ElementTree.tostring, + # but it doesn't allow us to override entity escaping for text fields. For + # this operation \r and \n can only appear in the XML document if they were + # passed as part of the customer input. + body = params['body'] + if b'\r' in body: + body = body.replace(b'\r', b' ') + if b'\n' in body: + body = body.replace(b'\n', b' ') + + params['body'] = body + + +def check_for_200_error(response, **kwargs): + # From: http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html + # There are two opportunities for a copy request to return an error. One + # can occur when Amazon S3 receives the copy request and the other can + # occur while Amazon S3 is copying the files. If the error occurs before + # the copy operation starts, you receive a standard Amazon S3 error. If the + # error occurs during the copy operation, the error response is embedded in + # the 200 OK response. This means that a 200 OK response can contain either + # a success or an error. Make sure to design your application to parse the + # contents of the response and handle it appropriately. + # + # So this handler checks for this case. Even though the server sends a + # 200 response, conceptually this should be handled exactly like a + # 500 response (with respect to raising exceptions, retries, etc.) + # We're connected *before* all the other retry logic handlers, so as long + # as we switch the error code to 500, we'll retry the error as expected. + if response is None: + # A None response can happen if an exception is raised while + # trying to retrieve the response. See Endpoint._get_response(). + return + http_response, parsed = response + if _looks_like_special_case_error(http_response): + logger.debug( + "Error found for response with 200 status code, " + "errors: %s, changing status code to " + "500.", + parsed, + ) + http_response.status_code = 500 + + +def _looks_like_special_case_error(http_response): + if http_response.status_code == 200: + try: + parser = ETree.XMLParser( + target=ETree.TreeBuilder(), encoding='utf-8' + ) + parser.feed(http_response.content) + root = parser.close() + except XMLParseError: + # In cases of network disruptions, we may end up with a partial + # streamed response from S3. We need to treat these cases as + # 500 Service Errors and try again. + return True + if root.tag == 'Error': + return True + return False + + +def set_operation_specific_signer(context, signing_name, **kwargs): + """Choose the operation-specific signer. + + Individual operations may have a different auth type than the service as a + whole. This will most often manifest as operations that should not be + authenticated at all, but can include other auth modes such as sigv4 + without body signing. + """ + auth_type = context.get('auth_type') + + # Auth type will be None if the operation doesn't have a configured auth + # type. + if not auth_type: + return + + # Auth type will be the string value 'none' if the operation should not + # be signed at all. + if auth_type == 'none': + return botocore.UNSIGNED + + if auth_type == 'bearer': + return 'bearer' + + if auth_type.startswith('v4'): + if auth_type == 'v4-s3express': + return auth_type + + if auth_type == 'v4a': + # If sigv4a is chosen, we must add additional signing config for + # global signature. + signing = {'region': '*', 'signing_name': signing_name} + if 'signing' in context: + context['signing'].update(signing) + else: + context['signing'] = signing + signature_version = 'v4a' + else: + signature_version = 'v4' + + # If the operation needs an unsigned body, we set additional context + # allowing the signer to be aware of this. + if auth_type == 'v4-unsigned-body': + context['payload_signing_enabled'] = False + + # Signing names used by s3 and s3-control use customized signers "s3v4" + # and "s3v4a". + if signing_name in S3_SIGNING_NAMES: + signature_version = f's3{signature_version}' + + return signature_version + + +def decode_console_output(parsed, **kwargs): + if 'Output' in parsed: + try: + # We're using 'replace' for errors because it is + # possible that console output contains non string + # chars we can't utf-8 decode. + value = base64.b64decode( + bytes(parsed['Output'], 'latin-1') + ).decode('utf-8', 'replace') + parsed['Output'] = value + except (ValueError, TypeError, AttributeError): + logger.debug('Error decoding base64', exc_info=True) + + +def generate_idempotent_uuid(params, model, **kwargs): + for name in model.idempotent_members: + if name not in params: + params[name] = str(uuid.uuid4()) + logger.debug( + "injecting idempotency token (%s) into param '%s'." + % (params[name], name) + ) + + +def decode_quoted_jsondoc(value): + try: + value = json.loads(unquote(value)) + except (ValueError, TypeError): + logger.debug('Error loading quoted JSON', exc_info=True) + return value + + +def json_decode_template_body(parsed, **kwargs): + if 'TemplateBody' in parsed: + try: + value = json.loads( + parsed['TemplateBody'], object_pairs_hook=OrderedDict + ) + parsed['TemplateBody'] = value + except (ValueError, TypeError): + logger.debug('error loading JSON', exc_info=True) + + +def validate_bucket_name(params, **kwargs): + if 'Bucket' not in params: + return + bucket = params['Bucket'] + if not VALID_BUCKET.search(bucket) and not VALID_S3_ARN.search(bucket): + error_msg = ( + f'Invalid bucket name "{bucket}": Bucket name must match ' + f'the regex "{VALID_BUCKET.pattern}" or be an ARN matching ' + f'the regex "{VALID_S3_ARN.pattern}"' + ) + raise ParamValidationError(report=error_msg) + + +def sse_md5(params, **kwargs): + """ + S3 server-side encryption requires the encryption key to be sent to the + server base64 encoded, as well as a base64-encoded MD5 hash of the + encryption key. This handler does both if the MD5 has not been set by + the caller. + """ + _sse_md5(params, 'SSECustomer') + + +def copy_source_sse_md5(params, **kwargs): + """ + S3 server-side encryption requires the encryption key to be sent to the + server base64 encoded, as well as a base64-encoded MD5 hash of the + encryption key. This handler does both if the MD5 has not been set by + the caller specifically if the parameter is for the copy-source sse-c key. + """ + _sse_md5(params, 'CopySourceSSECustomer') + + +def _sse_md5(params, sse_member_prefix='SSECustomer'): + if not _needs_s3_sse_customization(params, sse_member_prefix): + return + + sse_key_member = sse_member_prefix + 'Key' + sse_md5_member = sse_member_prefix + 'KeyMD5' + key_as_bytes = params[sse_key_member] + if isinstance(key_as_bytes, str): + key_as_bytes = key_as_bytes.encode('utf-8') + key_md5_str = base64.b64encode(get_md5(key_as_bytes).digest()).decode( + 'utf-8' + ) + key_b64_encoded = base64.b64encode(key_as_bytes).decode('utf-8') + params[sse_key_member] = key_b64_encoded + params[sse_md5_member] = key_md5_str + + +def _needs_s3_sse_customization(params, sse_member_prefix): + return ( + params.get(sse_member_prefix + 'Key') is not None + and sse_member_prefix + 'KeyMD5' not in params + ) + + +def disable_signing(**kwargs): + """ + This handler disables request signing by setting the signer + name to a special sentinel value. + """ + return botocore.UNSIGNED + + +def add_expect_header(model, params, **kwargs): + if model.http.get('method', '') not in ['PUT', 'POST']: + return + if 'body' in params: + body = params['body'] + if hasattr(body, 'read'): + # Any file like object will use an expect 100-continue + # header regardless of size. + logger.debug("Adding expect 100 continue header to request.") + params['headers']['Expect'] = '100-continue' + + +class DeprecatedServiceDocumenter: + def __init__(self, replacement_service_name): + self._replacement_service_name = replacement_service_name + + def inject_deprecation_notice(self, section, event_name, **kwargs): + section.style.start_important() + section.write('This service client is deprecated. Please use ') + section.style.ref( + self._replacement_service_name, + self._replacement_service_name, + ) + section.write(' instead.') + section.style.end_important() + + +def document_copy_source_form(section, event_name, **kwargs): + if 'request-example' in event_name: + parent = section.get_section('structure-value') + param_line = parent.get_section('CopySource') + value_portion = param_line.get_section('member-value') + value_portion.clear_text() + value_portion.write( + "'string' or {'Bucket': 'string', " + "'Key': 'string', 'VersionId': 'string'}" + ) + elif 'request-params' in event_name: + param_section = section.get_section('CopySource') + type_section = param_section.get_section('param-type') + type_section.clear_text() + type_section.write(':type CopySource: str or dict') + doc_section = param_section.get_section('param-documentation') + doc_section.clear_text() + doc_section.write( + "The name of the source bucket, key name of the source object, " + "and optional version ID of the source object. You can either " + "provide this value as a string or a dictionary. The " + "string form is {bucket}/{key} or " + "{bucket}/{key}?versionId={versionId} if you want to copy a " + "specific version. You can also provide this value as a " + "dictionary. The dictionary format is recommended over " + "the string format because it is more explicit. The dictionary " + "format is: {'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}." + " Note that the VersionId key is optional and may be omitted." + " To specify an S3 access point, provide the access point" + " ARN for the ``Bucket`` key in the copy source dictionary. If you" + " want to provide the copy source for an S3 access point as a" + " string instead of a dictionary, the ARN provided must be the" + " full S3 access point object ARN" + " (i.e. {accesspoint_arn}/object/{key})" + ) + + +def handle_copy_source_param(params, **kwargs): + """Convert CopySource param for CopyObject/UploadPartCopy. + + This handler will deal with two cases: + + * CopySource provided as a string. We'll make a best effort + to URL encode the key name as required. This will require + parsing the bucket and version id from the CopySource value + and only encoding the key. + * CopySource provided as a dict. In this case we're + explicitly given the Bucket, Key, and VersionId so we're + able to encode the key and ensure this value is serialized + and correctly sent to S3. + + """ + source = params.get('CopySource') + if source is None: + # The call will eventually fail but we'll let the + # param validator take care of this. It will + # give a better error message. + return + if isinstance(source, str): + params['CopySource'] = _quote_source_header(source) + elif isinstance(source, dict): + params['CopySource'] = _quote_source_header_from_dict(source) + + +def _quote_source_header_from_dict(source_dict): + try: + bucket = source_dict['Bucket'] + key = source_dict['Key'] + version_id = source_dict.get('VersionId') + if VALID_S3_ARN.search(bucket): + final = f'{bucket}/object/{key}' + else: + final = f'{bucket}/{key}' + except KeyError as e: + raise ParamValidationError( + report=f'Missing required parameter: {str(e)}' + ) + final = percent_encode(final, safe=SAFE_CHARS + '/') + if version_id is not None: + final += '?versionId=%s' % version_id + return final + + +def _quote_source_header(value): + result = VERSION_ID_SUFFIX.search(value) + if result is None: + return percent_encode(value, safe=SAFE_CHARS + '/') + else: + first, version_id = value[: result.start()], value[result.start() :] + return percent_encode(first, safe=SAFE_CHARS + '/') + version_id + + +def _get_cross_region_presigned_url( + request_signer, request_dict, model, source_region, destination_region +): + # The better way to do this is to actually get the + # endpoint_resolver and get the endpoint_url given the + # source region. In this specific case, we know that + # we can safely replace the dest region with the source + # region because of the supported EC2 regions, but in + # general this is not a safe assumption to make. + # I think eventually we should try to plumb through something + # that allows us to resolve endpoints from regions. + request_dict_copy = copy.deepcopy(request_dict) + request_dict_copy['body']['DestinationRegion'] = destination_region + request_dict_copy['url'] = request_dict['url'].replace( + destination_region, source_region + ) + request_dict_copy['method'] = 'GET' + request_dict_copy['headers'] = {} + return request_signer.generate_presigned_url( + request_dict_copy, region_name=source_region, operation_name=model.name + ) + + +def _get_presigned_url_source_and_destination_regions(request_signer, params): + # Gets the source and destination regions to be used + destination_region = request_signer._region_name + source_region = params.get('SourceRegion') + return source_region, destination_region + + +def inject_presigned_url_ec2(params, request_signer, model, **kwargs): + # The customer can still provide this, so we should pass if they do. + if 'PresignedUrl' in params['body']: + return + src, dest = _get_presigned_url_source_and_destination_regions( + request_signer, params['body'] + ) + url = _get_cross_region_presigned_url( + request_signer, params, model, src, dest + ) + params['body']['PresignedUrl'] = url + # EC2 Requires that the destination region be sent over the wire in + # addition to the source region. + params['body']['DestinationRegion'] = dest + + +def inject_presigned_url_rds(params, request_signer, model, **kwargs): + # SourceRegion is not required for RDS operations, so it's possible that + # it isn't set. In that case it's probably a local copy so we don't need + # to do anything else. + if 'SourceRegion' not in params['body']: + return + + src, dest = _get_presigned_url_source_and_destination_regions( + request_signer, params['body'] + ) + + # Since SourceRegion isn't actually modeled for RDS, it needs to be + # removed from the request params before we send the actual request. + del params['body']['SourceRegion'] + + if 'PreSignedUrl' in params['body']: + return + + url = _get_cross_region_presigned_url( + request_signer, params, model, src, dest + ) + params['body']['PreSignedUrl'] = url + + +def json_decode_policies(parsed, model, **kwargs): + # Any time an IAM operation returns a policy document + # it is a string that is json that has been urlencoded, + # i.e urlencode(json.dumps(policy_document)). + # To give users something more useful, we will urldecode + # this value and json.loads() the result so that they have + # the policy document as a dictionary. + output_shape = model.output_shape + if output_shape is not None: + _decode_policy_types(parsed, model.output_shape) + + +def _decode_policy_types(parsed, shape): + # IAM consistently uses the policyDocumentType shape to indicate + # strings that have policy documents. + shape_name = 'policyDocumentType' + if shape.type_name == 'structure': + for member_name, member_shape in shape.members.items(): + if ( + member_shape.type_name == 'string' + and member_shape.name == shape_name + and member_name in parsed + ): + parsed[member_name] = decode_quoted_jsondoc( + parsed[member_name] + ) + elif member_name in parsed: + _decode_policy_types(parsed[member_name], member_shape) + if shape.type_name == 'list': + shape_member = shape.member + for item in parsed: + _decode_policy_types(item, shape_member) + + +def parse_get_bucket_location(parsed, http_response, **kwargs): + # s3.GetBucketLocation cannot be modeled properly. To + # account for this we just manually parse the XML document. + # The "parsed" passed in only has the ResponseMetadata + # filled out. This handler will fill in the LocationConstraint + # value. + if http_response.raw is None: + return + response_body = http_response.content + parser = ETree.XMLParser(target=ETree.TreeBuilder(), encoding='utf-8') + parser.feed(response_body) + root = parser.close() + region = root.text + parsed['LocationConstraint'] = region + + +def base64_encode_user_data(params, **kwargs): + if 'UserData' in params: + if isinstance(params['UserData'], str): + # Encode it to bytes if it is text. + params['UserData'] = params['UserData'].encode('utf-8') + params['UserData'] = base64.b64encode(params['UserData']).decode( + 'utf-8' + ) + + +def document_base64_encoding(param): + description = ( + '**This value will be base64 encoded automatically. Do ' + 'not base64 encode this value prior to performing the ' + 'operation.**' + ) + append = AppendParamDocumentation(param, description) + return append.append_documentation + + +def validate_ascii_metadata(params, **kwargs): + """Verify S3 Metadata only contains ascii characters. + + From: http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html + + "Amazon S3 stores user-defined metadata in lowercase. Each name, value pair + must conform to US-ASCII when using REST and UTF-8 when using SOAP or + browser-based uploads via POST." + + """ + metadata = params.get('Metadata') + if not metadata or not isinstance(metadata, dict): + # We have to at least type check the metadata as a dict type + # because this handler is called before param validation. + # We'll go ahead and return because the param validator will + # give a descriptive error message for us. + # We might need a post-param validation event. + return + for key, value in metadata.items(): + try: + key.encode('ascii') + value.encode('ascii') + except UnicodeEncodeError: + error_msg = ( + 'Non ascii characters found in S3 metadata ' + 'for key "%s", value: "%s". \nS3 metadata can only ' + 'contain ASCII characters. ' % (key, value) + ) + raise ParamValidationError(report=error_msg) + + +def fix_route53_ids(params, model, **kwargs): + """ + Check for and split apart Route53 resource IDs, setting + only the last piece. This allows the output of one operation + (e.g. ``'foo/1234'``) to be used as input in another + operation (e.g. it expects just ``'1234'``). + """ + input_shape = model.input_shape + if not input_shape or not hasattr(input_shape, 'members'): + return + + members = [ + name + for (name, shape) in input_shape.members.items() + if shape.name in ['ResourceId', 'DelegationSetId', 'ChangeId'] + ] + + for name in members: + if name in params: + orig_value = params[name] + params[name] = orig_value.split('/')[-1] + logger.debug('%s %s -> %s', name, orig_value, params[name]) + + +def inject_account_id(params, **kwargs): + if params.get('accountId') is None: + # Glacier requires accountId, but allows you + # to specify '-' for the current owners account. + # We add this default value if the user does not + # provide the accountId as a convenience. + params['accountId'] = '-' + + +def add_glacier_version(model, params, **kwargs): + request_dict = params + request_dict['headers']['x-amz-glacier-version'] = model.metadata[ + 'apiVersion' + ] + + +def add_accept_header(model, params, **kwargs): + if params['headers'].get('Accept', None) is None: + request_dict = params + request_dict['headers']['Accept'] = 'application/json' + + +def add_glacier_checksums(params, **kwargs): + """Add glacier checksums to the http request. + + This will add two headers to the http request: + + * x-amz-content-sha256 + * x-amz-sha256-tree-hash + + These values will only be added if they are not present + in the HTTP request. + + """ + request_dict = params + headers = request_dict['headers'] + body = request_dict['body'] + if isinstance(body, bytes): + # If the user provided a bytes type instead of a file + # like object, we're temporarily create a BytesIO object + # so we can use the util functions to calculate the + # checksums which assume file like objects. Note that + # we're not actually changing the body in the request_dict. + body = BytesIO(body) + starting_position = body.tell() + if 'x-amz-content-sha256' not in headers: + headers['x-amz-content-sha256'] = utils.calculate_sha256( + body, as_hex=True + ) + body.seek(starting_position) + if 'x-amz-sha256-tree-hash' not in headers: + headers['x-amz-sha256-tree-hash'] = utils.calculate_tree_hash(body) + body.seek(starting_position) + + +def document_glacier_tree_hash_checksum(): + doc = ''' + This is a required field. + + Ideally you will want to compute this value with checksums from + previous uploaded parts, using the algorithm described in + `Glacier documentation `_. + + But if you prefer, you can also use botocore.utils.calculate_tree_hash() + to compute it from raw file by:: + + checksum = calculate_tree_hash(open('your_file.txt', 'rb')) + + ''' + return AppendParamDocumentation('checksum', doc).append_documentation + + +def document_cloudformation_get_template_return_type( + section, event_name, **kwargs +): + if 'response-params' in event_name: + template_body_section = section.get_section('TemplateBody') + type_section = template_body_section.get_section('param-type') + type_section.clear_text() + type_section.write('(*dict*) --') + elif 'response-example' in event_name: + parent = section.get_section('structure-value') + param_line = parent.get_section('TemplateBody') + value_portion = param_line.get_section('member-value') + value_portion.clear_text() + value_portion.write('{}') + + +def switch_host_machinelearning(request, **kwargs): + switch_host_with_param(request, 'PredictEndpoint') + + +def check_openssl_supports_tls_version_1_2(**kwargs): + import ssl + + try: + openssl_version_tuple = ssl.OPENSSL_VERSION_INFO + if openssl_version_tuple < (1, 0, 1): + warnings.warn( + 'Currently installed openssl version: %s does not ' + 'support TLS 1.2, which is required for use of iot-data. ' + 'Please use python installed with openssl version 1.0.1 or ' + 'higher.' % (ssl.OPENSSL_VERSION), + UnsupportedTLSVersionWarning, + ) + # We cannot check the openssl version on python2.6, so we should just + # pass on this conveniency check. + except AttributeError: + pass + + +def change_get_to_post(request, **kwargs): + # This is useful when we need to change a potentially large GET request + # into a POST with x-www-form-urlencoded encoding. + if request.method == 'GET' and '?' in request.url: + request.headers['Content-Type'] = 'application/x-www-form-urlencoded' + request.method = 'POST' + request.url, request.data = request.url.split('?', 1) + + +def set_list_objects_encoding_type_url(params, context, **kwargs): + if 'EncodingType' not in params: + # We set this context so that we know it wasn't the customer that + # requested the encoding. + context['encoding_type_auto_set'] = True + params['EncodingType'] = 'url' + + +def decode_list_object(parsed, context, **kwargs): + # This is needed because we are passing url as the encoding type. Since the + # paginator is based on the key, we need to handle it before it can be + # round tripped. + # + # From the documentation: If you specify encoding-type request parameter, + # Amazon S3 includes this element in the response, and returns encoded key + # name values in the following response elements: + # Delimiter, Marker, Prefix, NextMarker, Key. + _decode_list_object( + top_level_keys=['Delimiter', 'Marker', 'NextMarker'], + nested_keys=[('Contents', 'Key'), ('CommonPrefixes', 'Prefix')], + parsed=parsed, + context=context, + ) + + +def decode_list_object_v2(parsed, context, **kwargs): + # From the documentation: If you specify encoding-type request parameter, + # Amazon S3 includes this element in the response, and returns encoded key + # name values in the following response elements: + # Delimiter, Prefix, ContinuationToken, Key, and StartAfter. + _decode_list_object( + top_level_keys=['Delimiter', 'Prefix', 'StartAfter'], + nested_keys=[('Contents', 'Key'), ('CommonPrefixes', 'Prefix')], + parsed=parsed, + context=context, + ) + + +def decode_list_object_versions(parsed, context, **kwargs): + # From the documentation: If you specify encoding-type request parameter, + # Amazon S3 includes this element in the response, and returns encoded key + # name values in the following response elements: + # KeyMarker, NextKeyMarker, Prefix, Key, and Delimiter. + _decode_list_object( + top_level_keys=[ + 'KeyMarker', + 'NextKeyMarker', + 'Prefix', + 'Delimiter', + ], + nested_keys=[ + ('Versions', 'Key'), + ('DeleteMarkers', 'Key'), + ('CommonPrefixes', 'Prefix'), + ], + parsed=parsed, + context=context, + ) + + +def _decode_list_object(top_level_keys, nested_keys, parsed, context): + if parsed.get('EncodingType') == 'url' and context.get( + 'encoding_type_auto_set' + ): + # URL decode top-level keys in the response if present. + for key in top_level_keys: + if key in parsed: + parsed[key] = unquote_str(parsed[key]) + # URL decode nested keys from the response if present. + for top_key, child_key in nested_keys: + if top_key in parsed: + for member in parsed[top_key]: + member[child_key] = unquote_str(member[child_key]) + + +def convert_body_to_file_like_object(params, **kwargs): + if 'Body' in params: + if isinstance(params['Body'], str): + params['Body'] = BytesIO(ensure_bytes(params['Body'])) + elif isinstance(params['Body'], bytes): + params['Body'] = BytesIO(params['Body']) + + +def _add_parameter_aliases(handler_list): + # Mapping of original parameter to parameter alias. + # The key is ..parameter + # The first part of the key is used for event registration. + # The last part is the original parameter name and the value is the + # alias to expose in documentation. + aliases = { + 'ec2.*.Filter': 'Filters', + 'logs.CreateExportTask.from': 'fromTime', + 'cloudsearchdomain.Search.return': 'returnFields', + } + + for original, new_name in aliases.items(): + event_portion, original_name = original.rsplit('.', 1) + parameter_alias = ParameterAlias(original_name, new_name) + + # Add the handlers to the list of handlers. + # One handler is to handle when users provide the alias. + # The other handler is to update the documentation to show only + # the alias. + parameter_build_event_handler_tuple = ( + 'before-parameter-build.' + event_portion, + parameter_alias.alias_parameter_in_call, + REGISTER_FIRST, + ) + docs_event_handler_tuple = ( + 'docs.*.' + event_portion + '.complete-section', + parameter_alias.alias_parameter_in_documentation, + ) + handler_list.append(parameter_build_event_handler_tuple) + handler_list.append(docs_event_handler_tuple) + + +class ParameterAlias: + def __init__(self, original_name, alias_name): + self._original_name = original_name + self._alias_name = alias_name + + def alias_parameter_in_call(self, params, model, **kwargs): + if model.input_shape: + # Only consider accepting the alias if it is modeled in the + # input shape. + if self._original_name in model.input_shape.members: + if self._alias_name in params: + if self._original_name in params: + raise AliasConflictParameterError( + original=self._original_name, + alias=self._alias_name, + operation=model.name, + ) + # Remove the alias parameter value and use the old name + # instead. + params[self._original_name] = params.pop(self._alias_name) + + def alias_parameter_in_documentation(self, event_name, section, **kwargs): + if event_name.startswith('docs.request-params'): + if self._original_name not in section.available_sections: + return + # Replace the name for parameter type + param_section = section.get_section(self._original_name) + param_type_section = param_section.get_section('param-type') + self._replace_content(param_type_section) + + # Replace the name for the parameter description + param_name_section = param_section.get_section('param-name') + self._replace_content(param_name_section) + elif event_name.startswith('docs.request-example'): + section = section.get_section('structure-value') + if self._original_name not in section.available_sections: + return + # Replace the name for the example + param_section = section.get_section(self._original_name) + self._replace_content(param_section) + + def _replace_content(self, section): + content = section.getvalue().decode('utf-8') + updated_content = content.replace( + self._original_name, self._alias_name + ) + section.clear_text() + section.write(updated_content) + + +class ClientMethodAlias: + def __init__(self, actual_name): + """Aliases a non-extant method to an existing method. + + :param actual_name: The name of the method that actually exists on + the client. + """ + self._actual = actual_name + + def __call__(self, client, **kwargs): + return getattr(client, self._actual) + + +# TODO: Remove this class as it is no longer used +class HeaderToHostHoister: + """Takes a header and moves it to the front of the hoststring.""" + + _VALID_HOSTNAME = re.compile(r'(?!-)[a-z\d-]{1,63}(? 1 and ArnParser.is_arn( + unquote(auth_path_parts[1]) + ): + request.auth_path = '/'.join(['', *auth_path_parts[2:]]) + + +def customize_endpoint_resolver_builtins( + builtins, model, params, context, **kwargs +): + """Modify builtin parameter values for endpoint resolver + + Modifies the builtins dict in place. Changes are in effect for one call. + The corresponding event is emitted only if at least one builtin parameter + value is required for endpoint resolution for the operation. + """ + bucket_name = params.get('Bucket') + bucket_is_arn = bucket_name is not None and ArnParser.is_arn(bucket_name) + # In some situations the host will return AuthorizationHeaderMalformed + # when the signing region of a sigv4 request is not the bucket's + # region (which is likely unknown by the user of GetBucketLocation). + # Avoid this by always using path-style addressing. + if model.name == 'GetBucketLocation': + builtins[EndpointResolverBuiltins.AWS_S3_FORCE_PATH_STYLE] = True + # All situations where the bucket name is an ARN are not compatible + # with path style addressing. + elif bucket_is_arn: + builtins[EndpointResolverBuiltins.AWS_S3_FORCE_PATH_STYLE] = False + + # Bucket names that are invalid host labels require path-style addressing. + # If path-style addressing was specifically requested, the default builtin + # value is already set. + path_style_required = ( + bucket_name is not None and not VALID_HOST_LABEL_RE.match(bucket_name) + ) + path_style_requested = builtins[ + EndpointResolverBuiltins.AWS_S3_FORCE_PATH_STYLE + ] + + # Path-style addressing is incompatible with the global endpoint for + # presigned URLs. If the bucket name is an ARN, the ARN's region should be + # used in the endpoint. + if ( + context.get('use_global_endpoint') + and not path_style_required + and not path_style_requested + and not bucket_is_arn + and not utils.is_s3express_bucket(bucket_name) + ): + builtins[EndpointResolverBuiltins.AWS_REGION] = 'aws-global' + builtins[EndpointResolverBuiltins.AWS_S3_USE_GLOBAL_ENDPOINT] = True + + +def remove_content_type_header_for_presigning(request, **kwargs): + if ( + request.context.get('is_presign_request') is True + and 'Content-Type' in request.headers + ): + del request.headers['Content-Type'] + + +# This is a list of (event_name, handler). +# When a Session is created, everything in this list will be +# automatically registered with that Session. + +BUILTIN_HANDLERS = [ + ('choose-service-name', handle_service_name_alias), + ( + 'getattr.mturk.list_hi_ts_for_qualification_type', + ClientMethodAlias('list_hits_for_qualification_type'), + ), + ( + 'before-parameter-build.s3.UploadPart', + convert_body_to_file_like_object, + REGISTER_LAST, + ), + ( + 'before-parameter-build.s3.PutObject', + convert_body_to_file_like_object, + REGISTER_LAST, + ), + ('creating-client-class', add_generate_presigned_url), + ('creating-client-class.s3', add_generate_presigned_post), + ('creating-client-class.iot-data', check_openssl_supports_tls_version_1_2), + ('creating-client-class.lex-runtime-v2', remove_lex_v2_start_conversation), + ('after-call.iam', json_decode_policies), + ('after-call.ec2.GetConsoleOutput', decode_console_output), + ('after-call.cloudformation.GetTemplate', json_decode_template_body), + ('after-call.s3.GetBucketLocation', parse_get_bucket_location), + ('before-parameter-build', generate_idempotent_uuid), + ('before-parameter-build.s3', validate_bucket_name), + ('before-parameter-build.s3', remove_bucket_from_url_paths_from_model), + ( + 'before-parameter-build.s3.ListObjects', + set_list_objects_encoding_type_url, + ), + ( + 'before-parameter-build.s3.ListObjectsV2', + set_list_objects_encoding_type_url, + ), + ( + 'before-parameter-build.s3.ListObjectVersions', + set_list_objects_encoding_type_url, + ), + ('before-parameter-build.s3.CopyObject', handle_copy_source_param), + ('before-parameter-build.s3.UploadPartCopy', handle_copy_source_param), + ('before-parameter-build.s3.CopyObject', validate_ascii_metadata), + ('before-parameter-build.s3.PutObject', validate_ascii_metadata), + ( + 'before-parameter-build.s3.CreateMultipartUpload', + validate_ascii_metadata, + ), + ('before-parameter-build.s3-control', remove_accid_host_prefix_from_model), + ('docs.*.s3.CopyObject.complete-section', document_copy_source_form), + ('docs.*.s3.UploadPartCopy.complete-section', document_copy_source_form), + ('before-endpoint-resolution.s3', customize_endpoint_resolver_builtins), + ('before-call', add_recursion_detection_header), + ('before-call.s3', add_expect_header), + ('before-call.glacier', add_glacier_version), + ('before-call.apigateway', add_accept_header), + ('before-call.s3.PutObject', conditionally_calculate_checksum), + ('before-call.s3.UploadPart', conditionally_calculate_md5), + ('before-call.s3.DeleteObjects', escape_xml_payload), + ('before-call.s3.DeleteObjects', conditionally_calculate_checksum), + ('before-call.s3.PutBucketLifecycleConfiguration', escape_xml_payload), + ('before-call.glacier.UploadArchive', add_glacier_checksums), + ('before-call.glacier.UploadMultipartPart', add_glacier_checksums), + ('before-call.ec2.CopySnapshot', inject_presigned_url_ec2), + ('request-created', add_retry_headers), + ('request-created.machinelearning.Predict', switch_host_machinelearning), + ('needs-retry.s3.UploadPartCopy', check_for_200_error, REGISTER_FIRST), + ('needs-retry.s3.CopyObject', check_for_200_error, REGISTER_FIRST), + ( + 'needs-retry.s3.CompleteMultipartUpload', + check_for_200_error, + REGISTER_FIRST, + ), + ('choose-signer.cognito-identity.GetId', disable_signing), + ('choose-signer.cognito-identity.GetOpenIdToken', disable_signing), + ('choose-signer.cognito-identity.UnlinkIdentity', disable_signing), + ( + 'choose-signer.cognito-identity.GetCredentialsForIdentity', + disable_signing, + ), + ('choose-signer.sts.AssumeRoleWithSAML', disable_signing), + ('choose-signer.sts.AssumeRoleWithWebIdentity', disable_signing), + ('choose-signer', set_operation_specific_signer), + ('before-parameter-build.s3.HeadObject', sse_md5), + ('before-parameter-build.s3.GetObject', sse_md5), + ('before-parameter-build.s3.PutObject', sse_md5), + ('before-parameter-build.s3.CopyObject', sse_md5), + ('before-parameter-build.s3.CopyObject', copy_source_sse_md5), + ('before-parameter-build.s3.CreateMultipartUpload', sse_md5), + ('before-parameter-build.s3.UploadPart', sse_md5), + ('before-parameter-build.s3.UploadPartCopy', sse_md5), + ('before-parameter-build.s3.UploadPartCopy', copy_source_sse_md5), + ('before-parameter-build.s3.CompleteMultipartUpload', sse_md5), + ('before-parameter-build.s3.SelectObjectContent', sse_md5), + ('before-parameter-build.ec2.RunInstances', base64_encode_user_data), + ( + 'before-parameter-build.autoscaling.CreateLaunchConfiguration', + base64_encode_user_data, + ), + ('before-parameter-build.route53', fix_route53_ids), + ('before-parameter-build.glacier', inject_account_id), + ('before-sign.s3', remove_arn_from_signing_path), + ( + 'before-sign.polly.SynthesizeSpeech', + remove_content_type_header_for_presigning, + ), + ('after-call.s3.ListObjects', decode_list_object), + ('after-call.s3.ListObjectsV2', decode_list_object_v2), + ('after-call.s3.ListObjectVersions', decode_list_object_versions), + # Cloudsearchdomain search operation will be sent by HTTP POST + ('request-created.cloudsearchdomain.Search', change_get_to_post), + # Glacier documentation customizations + ( + 'docs.*.glacier.*.complete-section', + AutoPopulatedParam( + 'accountId', + 'Note: this parameter is set to "-" by' + 'default if no value is not specified.', + ).document_auto_populated_param, + ), + ( + 'docs.*.glacier.UploadArchive.complete-section', + AutoPopulatedParam('checksum').document_auto_populated_param, + ), + ( + 'docs.*.glacier.UploadMultipartPart.complete-section', + AutoPopulatedParam('checksum').document_auto_populated_param, + ), + ( + 'docs.request-params.glacier.CompleteMultipartUpload.complete-section', + document_glacier_tree_hash_checksum(), + ), + # Cloudformation documentation customizations + ( + 'docs.*.cloudformation.GetTemplate.complete-section', + document_cloudformation_get_template_return_type, + ), + # UserData base64 encoding documentation customizations + ( + 'docs.*.ec2.RunInstances.complete-section', + document_base64_encoding('UserData'), + ), + ( + 'docs.*.autoscaling.CreateLaunchConfiguration.complete-section', + document_base64_encoding('UserData'), + ), + # EC2 CopySnapshot documentation customizations + ( + 'docs.*.ec2.CopySnapshot.complete-section', + AutoPopulatedParam('PresignedUrl').document_auto_populated_param, + ), + ( + 'docs.*.ec2.CopySnapshot.complete-section', + AutoPopulatedParam('DestinationRegion').document_auto_populated_param, + ), + # S3 SSE documentation modifications + ( + 'docs.*.s3.*.complete-section', + AutoPopulatedParam('SSECustomerKeyMD5').document_auto_populated_param, + ), + # S3 SSE Copy Source documentation modifications + ( + 'docs.*.s3.*.complete-section', + AutoPopulatedParam( + 'CopySourceSSECustomerKeyMD5' + ).document_auto_populated_param, + ), + # Add base64 information to Lambda + ( + 'docs.*.lambda.UpdateFunctionCode.complete-section', + document_base64_encoding('ZipFile'), + ), + # The following S3 operations cannot actually accept a ContentMD5 + ( + 'docs.*.s3.*.complete-section', + HideParamFromOperations( + 's3', + 'ContentMD5', + [ + 'DeleteObjects', + 'PutBucketAcl', + 'PutBucketCors', + 'PutBucketLifecycle', + 'PutBucketLogging', + 'PutBucketNotification', + 'PutBucketPolicy', + 'PutBucketReplication', + 'PutBucketRequestPayment', + 'PutBucketTagging', + 'PutBucketVersioning', + 'PutBucketWebsite', + 'PutObjectAcl', + ], + ).hide_param, + ), + ############# + # RDS + ############# + ('creating-client-class.rds', add_generate_db_auth_token), + ('before-call.rds.CopyDBClusterSnapshot', inject_presigned_url_rds), + ('before-call.rds.CreateDBCluster', inject_presigned_url_rds), + ('before-call.rds.CopyDBSnapshot', inject_presigned_url_rds), + ('before-call.rds.CreateDBInstanceReadReplica', inject_presigned_url_rds), + ( + 'before-call.rds.StartDBInstanceAutomatedBackupsReplication', + inject_presigned_url_rds, + ), + # RDS PresignedUrl documentation customizations + ( + 'docs.*.rds.CopyDBClusterSnapshot.complete-section', + AutoPopulatedParam('PreSignedUrl').document_auto_populated_param, + ), + ( + 'docs.*.rds.CreateDBCluster.complete-section', + AutoPopulatedParam('PreSignedUrl').document_auto_populated_param, + ), + ( + 'docs.*.rds.CopyDBSnapshot.complete-section', + AutoPopulatedParam('PreSignedUrl').document_auto_populated_param, + ), + ( + 'docs.*.rds.CreateDBInstanceReadReplica.complete-section', + AutoPopulatedParam('PreSignedUrl').document_auto_populated_param, + ), + ( + 'docs.*.rds.StartDBInstanceAutomatedBackupsReplication.complete-section', + AutoPopulatedParam('PreSignedUrl').document_auto_populated_param, + ), + ############# + # Neptune + ############# + ('before-call.neptune.CopyDBClusterSnapshot', inject_presigned_url_rds), + ('before-call.neptune.CreateDBCluster', inject_presigned_url_rds), + # Neptune PresignedUrl documentation customizations + ( + 'docs.*.neptune.CopyDBClusterSnapshot.complete-section', + AutoPopulatedParam('PreSignedUrl').document_auto_populated_param, + ), + ( + 'docs.*.neptune.CreateDBCluster.complete-section', + AutoPopulatedParam('PreSignedUrl').document_auto_populated_param, + ), + ############# + # DocDB + ############# + ('before-call.docdb.CopyDBClusterSnapshot', inject_presigned_url_rds), + ('before-call.docdb.CreateDBCluster', inject_presigned_url_rds), + # DocDB PresignedUrl documentation customizations + ( + 'docs.*.docdb.CopyDBClusterSnapshot.complete-section', + AutoPopulatedParam('PreSignedUrl').document_auto_populated_param, + ), + ( + 'docs.*.docdb.CreateDBCluster.complete-section', + AutoPopulatedParam('PreSignedUrl').document_auto_populated_param, + ), + ('before-call', inject_api_version_header_if_needed), +] +_add_parameter_aliases(BUILTIN_HANDLERS) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/history.py b/dbtzin/lib/python3.8/site-packages/botocore/history.py new file mode 100644 index 00000000..59d9481d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/history.py @@ -0,0 +1,55 @@ +# Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import logging + +HISTORY_RECORDER = None +logger = logging.getLogger(__name__) + + +class BaseHistoryHandler: + def emit(self, event_type, payload, source): + raise NotImplementedError('emit()') + + +class HistoryRecorder: + def __init__(self): + self._enabled = False + self._handlers = [] + + def enable(self): + self._enabled = True + + def disable(self): + self._enabled = False + + def add_handler(self, handler): + self._handlers.append(handler) + + def record(self, event_type, payload, source='BOTOCORE'): + if self._enabled and self._handlers: + for handler in self._handlers: + try: + handler.emit(event_type, payload, source) + except Exception: + # Never let the process die because we had a failure in + # a record collection handler. + logger.debug( + "Exception raised in %s.", handler, exc_info=True + ) + + +def get_global_history_recorder(): + global HISTORY_RECORDER + if HISTORY_RECORDER is None: + HISTORY_RECORDER = HistoryRecorder() + return HISTORY_RECORDER diff --git a/dbtzin/lib/python3.8/site-packages/botocore/hooks.py b/dbtzin/lib/python3.8/site-packages/botocore/hooks.py new file mode 100644 index 00000000..01248a1e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/hooks.py @@ -0,0 +1,660 @@ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import copy +import logging +from collections import deque, namedtuple + +from botocore.compat import accepts_kwargs +from botocore.utils import EVENT_ALIASES + +logger = logging.getLogger(__name__) + + +_NodeList = namedtuple('NodeList', ['first', 'middle', 'last']) +_FIRST = 0 +_MIDDLE = 1 +_LAST = 2 + + +class NodeList(_NodeList): + def __copy__(self): + first_copy = copy.copy(self.first) + middle_copy = copy.copy(self.middle) + last_copy = copy.copy(self.last) + copied = NodeList(first_copy, middle_copy, last_copy) + return copied + + +def first_non_none_response(responses, default=None): + """Find first non None response in a list of tuples. + + This function can be used to find the first non None response from + handlers connected to an event. This is useful if you are interested + in the returned responses from event handlers. Example usage:: + + print(first_non_none_response([(func1, None), (func2, 'foo'), + (func3, 'bar')])) + # This will print 'foo' + + :type responses: list of tuples + :param responses: The responses from the ``EventHooks.emit`` method. + This is a list of tuples, and each tuple is + (handler, handler_response). + + :param default: If no non-None responses are found, then this default + value will be returned. + + :return: The first non-None response in the list of tuples. + + """ + for response in responses: + if response[1] is not None: + return response[1] + return default + + +class BaseEventHooks: + def emit(self, event_name, **kwargs): + """Call all handlers subscribed to an event. + + :type event_name: str + :param event_name: The name of the event to emit. + + :type **kwargs: dict + :param **kwargs: Arbitrary kwargs to pass through to the + subscribed handlers. The ``event_name`` will be injected + into the kwargs so it's not necessary to add this to **kwargs. + + :rtype: list of tuples + :return: A list of ``(handler_func, handler_func_return_value)`` + + """ + return [] + + def register( + self, event_name, handler, unique_id=None, unique_id_uses_count=False + ): + """Register an event handler for a given event. + + If a ``unique_id`` is given, the handler will not be registered + if a handler with the ``unique_id`` has already been registered. + + Handlers are called in the order they have been registered. + Note handlers can also be registered with ``register_first()`` + and ``register_last()``. All handlers registered with + ``register_first()`` are called before handlers registered + with ``register()`` which are called before handlers registered + with ``register_last()``. + + """ + self._verify_and_register( + event_name, + handler, + unique_id, + register_method=self._register, + unique_id_uses_count=unique_id_uses_count, + ) + + def register_first( + self, event_name, handler, unique_id=None, unique_id_uses_count=False + ): + """Register an event handler to be called first for an event. + + All event handlers registered with ``register_first()`` will + be called before handlers registered with ``register()`` and + ``register_last()``. + + """ + self._verify_and_register( + event_name, + handler, + unique_id, + register_method=self._register_first, + unique_id_uses_count=unique_id_uses_count, + ) + + def register_last( + self, event_name, handler, unique_id=None, unique_id_uses_count=False + ): + """Register an event handler to be called last for an event. + + All event handlers registered with ``register_last()`` will be called + after handlers registered with ``register_first()`` and ``register()``. + + """ + self._verify_and_register( + event_name, + handler, + unique_id, + register_method=self._register_last, + unique_id_uses_count=unique_id_uses_count, + ) + + def _verify_and_register( + self, + event_name, + handler, + unique_id, + register_method, + unique_id_uses_count, + ): + self._verify_is_callable(handler) + self._verify_accept_kwargs(handler) + register_method(event_name, handler, unique_id, unique_id_uses_count) + + def unregister( + self, + event_name, + handler=None, + unique_id=None, + unique_id_uses_count=False, + ): + """Unregister an event handler for a given event. + + If no ``unique_id`` was given during registration, then the + first instance of the event handler is removed (if the event + handler has been registered multiple times). + + """ + pass + + def _verify_is_callable(self, func): + if not callable(func): + raise ValueError("Event handler %s must be callable." % func) + + def _verify_accept_kwargs(self, func): + """Verifies a callable accepts kwargs + + :type func: callable + :param func: A callable object. + + :returns: True, if ``func`` accepts kwargs, otherwise False. + + """ + try: + if not accepts_kwargs(func): + raise ValueError( + f"Event handler {func} must accept keyword " + f"arguments (**kwargs)" + ) + except TypeError: + return False + + +class HierarchicalEmitter(BaseEventHooks): + def __init__(self): + # We keep a reference to the handlers for quick + # read only access (we never modify self._handlers). + # A cache of event name to handler list. + self._lookup_cache = {} + self._handlers = _PrefixTrie() + # This is used to ensure that unique_id's are only + # registered once. + self._unique_id_handlers = {} + + def _emit(self, event_name, kwargs, stop_on_response=False): + """ + Emit an event with optional keyword arguments. + + :type event_name: string + :param event_name: Name of the event + :type kwargs: dict + :param kwargs: Arguments to be passed to the handler functions. + :type stop_on_response: boolean + :param stop_on_response: Whether to stop on the first non-None + response. If False, then all handlers + will be called. This is especially useful + to handlers which mutate data and then + want to stop propagation of the event. + :rtype: list + :return: List of (handler, response) tuples from all processed + handlers. + """ + responses = [] + # Invoke the event handlers from most specific + # to least specific, each time stripping off a dot. + handlers_to_call = self._lookup_cache.get(event_name) + if handlers_to_call is None: + handlers_to_call = self._handlers.prefix_search(event_name) + self._lookup_cache[event_name] = handlers_to_call + elif not handlers_to_call: + # Short circuit and return an empty response is we have + # no handlers to call. This is the common case where + # for the majority of signals, nothing is listening. + return [] + kwargs['event_name'] = event_name + responses = [] + for handler in handlers_to_call: + logger.debug('Event %s: calling handler %s', event_name, handler) + response = handler(**kwargs) + responses.append((handler, response)) + if stop_on_response and response is not None: + return responses + return responses + + def emit(self, event_name, **kwargs): + """ + Emit an event by name with arguments passed as keyword args. + + >>> responses = emitter.emit( + ... 'my-event.service.operation', arg1='one', arg2='two') + + :rtype: list + :return: List of (handler, response) tuples from all processed + handlers. + """ + return self._emit(event_name, kwargs) + + def emit_until_response(self, event_name, **kwargs): + """ + Emit an event by name with arguments passed as keyword args, + until the first non-``None`` response is received. This + method prevents subsequent handlers from being invoked. + + >>> handler, response = emitter.emit_until_response( + 'my-event.service.operation', arg1='one', arg2='two') + + :rtype: tuple + :return: The first (handler, response) tuple where the response + is not ``None``, otherwise (``None``, ``None``). + """ + responses = self._emit(event_name, kwargs, stop_on_response=True) + if responses: + return responses[-1] + else: + return (None, None) + + def _register( + self, event_name, handler, unique_id=None, unique_id_uses_count=False + ): + self._register_section( + event_name, + handler, + unique_id, + unique_id_uses_count, + section=_MIDDLE, + ) + + def _register_first( + self, event_name, handler, unique_id=None, unique_id_uses_count=False + ): + self._register_section( + event_name, + handler, + unique_id, + unique_id_uses_count, + section=_FIRST, + ) + + def _register_last( + self, event_name, handler, unique_id, unique_id_uses_count=False + ): + self._register_section( + event_name, handler, unique_id, unique_id_uses_count, section=_LAST + ) + + def _register_section( + self, event_name, handler, unique_id, unique_id_uses_count, section + ): + if unique_id is not None: + if unique_id in self._unique_id_handlers: + # We've already registered a handler using this unique_id + # so we don't need to register it again. + count = self._unique_id_handlers[unique_id].get('count', None) + if unique_id_uses_count: + if not count: + raise ValueError( + "Initial registration of unique id %s was " + "specified to use a counter. Subsequent register " + "calls to unique id must specify use of a counter " + "as well." % unique_id + ) + else: + self._unique_id_handlers[unique_id]['count'] += 1 + else: + if count: + raise ValueError( + "Initial registration of unique id %s was " + "specified to not use a counter. Subsequent " + "register calls to unique id must specify not to " + "use a counter as well." % unique_id + ) + return + else: + # Note that the trie knows nothing about the unique + # id. We track uniqueness in this class via the + # _unique_id_handlers. + self._handlers.append_item( + event_name, handler, section=section + ) + unique_id_handler_item = {'handler': handler} + if unique_id_uses_count: + unique_id_handler_item['count'] = 1 + self._unique_id_handlers[unique_id] = unique_id_handler_item + else: + self._handlers.append_item(event_name, handler, section=section) + # Super simple caching strategy for now, if we change the registrations + # clear the cache. This has the opportunity for smarter invalidations. + self._lookup_cache = {} + + def unregister( + self, + event_name, + handler=None, + unique_id=None, + unique_id_uses_count=False, + ): + if unique_id is not None: + try: + count = self._unique_id_handlers[unique_id].get('count', None) + except KeyError: + # There's no handler matching that unique_id so we have + # nothing to unregister. + return + if unique_id_uses_count: + if count is None: + raise ValueError( + "Initial registration of unique id %s was specified to " + "use a counter. Subsequent unregister calls to unique " + "id must specify use of a counter as well." % unique_id + ) + elif count == 1: + handler = self._unique_id_handlers.pop(unique_id)[ + 'handler' + ] + else: + self._unique_id_handlers[unique_id]['count'] -= 1 + return + else: + if count: + raise ValueError( + "Initial registration of unique id %s was specified " + "to not use a counter. Subsequent unregister calls " + "to unique id must specify not to use a counter as " + "well." % unique_id + ) + handler = self._unique_id_handlers.pop(unique_id)['handler'] + try: + self._handlers.remove_item(event_name, handler) + self._lookup_cache = {} + except ValueError: + pass + + def __copy__(self): + new_instance = self.__class__() + new_state = self.__dict__.copy() + new_state['_handlers'] = copy.copy(self._handlers) + new_state['_unique_id_handlers'] = copy.copy(self._unique_id_handlers) + new_instance.__dict__ = new_state + return new_instance + + +class EventAliaser(BaseEventHooks): + def __init__(self, event_emitter, event_aliases=None): + self._event_aliases = event_aliases + if event_aliases is None: + self._event_aliases = EVENT_ALIASES + self._alias_name_cache = {} + self._emitter = event_emitter + + def emit(self, event_name, **kwargs): + aliased_event_name = self._alias_event_name(event_name) + return self._emitter.emit(aliased_event_name, **kwargs) + + def emit_until_response(self, event_name, **kwargs): + aliased_event_name = self._alias_event_name(event_name) + return self._emitter.emit_until_response(aliased_event_name, **kwargs) + + def register( + self, event_name, handler, unique_id=None, unique_id_uses_count=False + ): + aliased_event_name = self._alias_event_name(event_name) + return self._emitter.register( + aliased_event_name, handler, unique_id, unique_id_uses_count + ) + + def register_first( + self, event_name, handler, unique_id=None, unique_id_uses_count=False + ): + aliased_event_name = self._alias_event_name(event_name) + return self._emitter.register_first( + aliased_event_name, handler, unique_id, unique_id_uses_count + ) + + def register_last( + self, event_name, handler, unique_id=None, unique_id_uses_count=False + ): + aliased_event_name = self._alias_event_name(event_name) + return self._emitter.register_last( + aliased_event_name, handler, unique_id, unique_id_uses_count + ) + + def unregister( + self, + event_name, + handler=None, + unique_id=None, + unique_id_uses_count=False, + ): + aliased_event_name = self._alias_event_name(event_name) + return self._emitter.unregister( + aliased_event_name, handler, unique_id, unique_id_uses_count + ) + + def _alias_event_name(self, event_name): + if event_name in self._alias_name_cache: + return self._alias_name_cache[event_name] + + for old_part, new_part in self._event_aliases.items(): + # We can't simply do a string replace for everything, otherwise we + # might end up translating substrings that we never intended to + # translate. When there aren't any dots in the old event name + # part, then we can quickly replace the item in the list if it's + # there. + event_parts = event_name.split('.') + if '.' not in old_part: + try: + # Theoretically a given event name could have the same part + # repeated, but in practice this doesn't happen + event_parts[event_parts.index(old_part)] = new_part + except ValueError: + continue + + # If there's dots in the name, it gets more complicated. Now we + # have to replace multiple sections of the original event. + elif old_part in event_name: + old_parts = old_part.split('.') + self._replace_subsection(event_parts, old_parts, new_part) + else: + continue + + new_name = '.'.join(event_parts) + logger.debug( + f"Changing event name from {event_name} to {new_name}" + ) + self._alias_name_cache[event_name] = new_name + return new_name + + self._alias_name_cache[event_name] = event_name + return event_name + + def _replace_subsection(self, sections, old_parts, new_part): + for i in range(len(sections)): + if ( + sections[i] == old_parts[0] + and sections[i : i + len(old_parts)] == old_parts + ): + sections[i : i + len(old_parts)] = [new_part] + return + + def __copy__(self): + return self.__class__( + copy.copy(self._emitter), copy.copy(self._event_aliases) + ) + + +class _PrefixTrie: + """Specialized prefix trie that handles wildcards. + + The prefixes in this case are based on dot separated + names so 'foo.bar.baz' is:: + + foo -> bar -> baz + + Wildcard support just means that having a key such as 'foo.bar.*.baz' will + be matched with a call to ``get_items(key='foo.bar.ANYTHING.baz')``. + + You can think of this prefix trie as the equivalent as defaultdict(list), + except that it can do prefix searches: + + foo.bar.baz -> A + foo.bar -> B + foo -> C + + Calling ``get_items('foo.bar.baz')`` will return [A + B + C], from + most specific to least specific. + + """ + + def __init__(self): + # Each dictionary can be though of as a node, where a node + # has values associated with the node, and children is a link + # to more nodes. So 'foo.bar' would have a 'foo' node with + # a 'bar' node as a child of foo. + # {'foo': {'children': {'bar': {...}}}}. + self._root = {'chunk': None, 'children': {}, 'values': None} + + def append_item(self, key, value, section=_MIDDLE): + """Add an item to a key. + + If a value is already associated with that key, the new + value is appended to the list for the key. + """ + key_parts = key.split('.') + current = self._root + for part in key_parts: + if part not in current['children']: + new_child = {'chunk': part, 'values': None, 'children': {}} + current['children'][part] = new_child + current = new_child + else: + current = current['children'][part] + if current['values'] is None: + current['values'] = NodeList([], [], []) + current['values'][section].append(value) + + def prefix_search(self, key): + """Collect all items that are prefixes of key. + + Prefix in this case are delineated by '.' characters so + 'foo.bar.baz' is a 3 chunk sequence of 3 "prefixes" ( + "foo", "bar", and "baz"). + + """ + collected = deque() + key_parts = key.split('.') + current = self._root + self._get_items(current, key_parts, collected, 0) + return collected + + def _get_items(self, starting_node, key_parts, collected, starting_index): + stack = [(starting_node, starting_index)] + key_parts_len = len(key_parts) + # Traverse down the nodes, where at each level we add the + # next part from key_parts as well as the wildcard element '*'. + # This means for each node we see we potentially add two more + # elements to our stack. + while stack: + current_node, index = stack.pop() + if current_node['values']: + # We're using extendleft because we want + # the values associated with the node furthest + # from the root to come before nodes closer + # to the root. extendleft() also adds its items + # in right-left order so .extendleft([1, 2, 3]) + # will result in final_list = [3, 2, 1], which is + # why we reverse the lists. + node_list = current_node['values'] + complete_order = ( + node_list.first + node_list.middle + node_list.last + ) + collected.extendleft(reversed(complete_order)) + if not index == key_parts_len: + children = current_node['children'] + directs = children.get(key_parts[index]) + wildcard = children.get('*') + next_index = index + 1 + if wildcard is not None: + stack.append((wildcard, next_index)) + if directs is not None: + stack.append((directs, next_index)) + + def remove_item(self, key, value): + """Remove an item associated with a key. + + If the value is not associated with the key a ``ValueError`` + will be raised. If the key does not exist in the trie, a + ``ValueError`` will be raised. + + """ + key_parts = key.split('.') + current = self._root + self._remove_item(current, key_parts, value, index=0) + + def _remove_item(self, current_node, key_parts, value, index): + if current_node is None: + return + elif index < len(key_parts): + next_node = current_node['children'].get(key_parts[index]) + if next_node is not None: + self._remove_item(next_node, key_parts, value, index + 1) + if index == len(key_parts) - 1: + node_list = next_node['values'] + if value in node_list.first: + node_list.first.remove(value) + elif value in node_list.middle: + node_list.middle.remove(value) + elif value in node_list.last: + node_list.last.remove(value) + if not next_node['children'] and not next_node['values']: + # Then this is a leaf node with no values so + # we can just delete this link from the parent node. + # This makes subsequent search faster in the case + # where a key does not exist. + del current_node['children'][key_parts[index]] + else: + raise ValueError(f"key is not in trie: {'.'.join(key_parts)}") + + def __copy__(self): + # The fact that we're using a nested dict under the covers + # is an implementation detail, and the user shouldn't have + # to know that they'd normally need a deepcopy so we expose + # __copy__ instead of __deepcopy__. + new_copy = self.__class__() + copied_attrs = self._recursive_copy(self.__dict__) + new_copy.__dict__ = copied_attrs + return new_copy + + def _recursive_copy(self, node): + # We can't use copy.deepcopy because we actually only want to copy + # the structure of the trie, not the handlers themselves. + # Each node has a chunk, children, and values. + copied_node = {} + for key, value in node.items(): + if isinstance(value, NodeList): + copied_node[key] = copy.copy(value) + elif isinstance(value, dict): + copied_node[key] = self._recursive_copy(value) + else: + copied_node[key] = value + return copied_node diff --git a/dbtzin/lib/python3.8/site-packages/botocore/httpchecksum.py b/dbtzin/lib/python3.8/site-packages/botocore/httpchecksum.py new file mode 100644 index 00000000..3e812c65 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/httpchecksum.py @@ -0,0 +1,483 @@ +# Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +""" The interfaces in this module are not intended for public use. + +This module defines interfaces for applying checksums to HTTP requests within +the context of botocore. This involves both resolving the checksum to be used +based on client configuration and environment, as well as application of the +checksum to the request. +""" +import base64 +import io +import logging +from binascii import crc32 +from hashlib import sha1, sha256 + +from botocore.compat import HAS_CRT +from botocore.exceptions import ( + AwsChunkedWrapperError, + FlexibleChecksumError, + MissingDependencyException, +) +from botocore.response import StreamingBody +from botocore.utils import ( + conditionally_calculate_md5, + determine_content_length, +) + +if HAS_CRT: + from awscrt import checksums as crt_checksums +else: + crt_checksums = None + +logger = logging.getLogger(__name__) + + +class BaseChecksum: + _CHUNK_SIZE = 1024 * 1024 + + def update(self, chunk): + pass + + def digest(self): + pass + + def b64digest(self): + bs = self.digest() + return base64.b64encode(bs).decode("ascii") + + def _handle_fileobj(self, fileobj): + start_position = fileobj.tell() + for chunk in iter(lambda: fileobj.read(self._CHUNK_SIZE), b""): + self.update(chunk) + fileobj.seek(start_position) + + def handle(self, body): + if isinstance(body, (bytes, bytearray)): + self.update(body) + else: + self._handle_fileobj(body) + return self.b64digest() + + +class Crc32Checksum(BaseChecksum): + def __init__(self): + self._int_crc32 = 0 + + def update(self, chunk): + self._int_crc32 = crc32(chunk, self._int_crc32) & 0xFFFFFFFF + + def digest(self): + return self._int_crc32.to_bytes(4, byteorder="big") + + +class CrtCrc32Checksum(BaseChecksum): + # Note: This class is only used if the CRT is available + def __init__(self): + self._int_crc32 = 0 + + def update(self, chunk): + new_checksum = crt_checksums.crc32(chunk, self._int_crc32) + self._int_crc32 = new_checksum & 0xFFFFFFFF + + def digest(self): + return self._int_crc32.to_bytes(4, byteorder="big") + + +class CrtCrc32cChecksum(BaseChecksum): + # Note: This class is only used if the CRT is available + def __init__(self): + self._int_crc32c = 0 + + def update(self, chunk): + new_checksum = crt_checksums.crc32c(chunk, self._int_crc32c) + self._int_crc32c = new_checksum & 0xFFFFFFFF + + def digest(self): + return self._int_crc32c.to_bytes(4, byteorder="big") + + +class Sha1Checksum(BaseChecksum): + def __init__(self): + self._checksum = sha1() + + def update(self, chunk): + self._checksum.update(chunk) + + def digest(self): + return self._checksum.digest() + + +class Sha256Checksum(BaseChecksum): + def __init__(self): + self._checksum = sha256() + + def update(self, chunk): + self._checksum.update(chunk) + + def digest(self): + return self._checksum.digest() + + +class AwsChunkedWrapper: + _DEFAULT_CHUNK_SIZE = 1024 * 1024 + + def __init__( + self, + raw, + checksum_cls=None, + checksum_name="x-amz-checksum", + chunk_size=None, + ): + self._raw = raw + self._checksum_name = checksum_name + self._checksum_cls = checksum_cls + self._reset() + + if chunk_size is None: + chunk_size = self._DEFAULT_CHUNK_SIZE + self._chunk_size = chunk_size + + def _reset(self): + self._remaining = b"" + self._complete = False + self._checksum = None + if self._checksum_cls: + self._checksum = self._checksum_cls() + + def seek(self, offset, whence=0): + if offset != 0 or whence != 0: + raise AwsChunkedWrapperError( + error_msg="Can only seek to start of stream" + ) + self._reset() + self._raw.seek(0) + + def read(self, size=None): + # Normalize "read all" size values to None + if size is not None and size <= 0: + size = None + + # If the underlying body is done and we have nothing left then + # end the stream + if self._complete and not self._remaining: + return b"" + + # While we're not done and want more bytes + want_more_bytes = size is None or size > len(self._remaining) + while not self._complete and want_more_bytes: + self._remaining += self._make_chunk() + want_more_bytes = size is None or size > len(self._remaining) + + # If size was None, we want to return everything + if size is None: + size = len(self._remaining) + + # Return a chunk up to the size asked for + to_return = self._remaining[:size] + self._remaining = self._remaining[size:] + return to_return + + def _make_chunk(self): + # NOTE: Chunk size is not deterministic as read could return less. This + # means we cannot know the content length of the encoded aws-chunked + # stream ahead of time without ensuring a consistent chunk size + raw_chunk = self._raw.read(self._chunk_size) + hex_len = hex(len(raw_chunk))[2:].encode("ascii") + self._complete = not raw_chunk + + if self._checksum: + self._checksum.update(raw_chunk) + + if self._checksum and self._complete: + name = self._checksum_name.encode("ascii") + checksum = self._checksum.b64digest().encode("ascii") + return b"0\r\n%s:%s\r\n\r\n" % (name, checksum) + + return b"%s\r\n%s\r\n" % (hex_len, raw_chunk) + + def __iter__(self): + while not self._complete: + yield self._make_chunk() + + +class StreamingChecksumBody(StreamingBody): + def __init__(self, raw_stream, content_length, checksum, expected): + super().__init__(raw_stream, content_length) + self._checksum = checksum + self._expected = expected + + def read(self, amt=None): + chunk = super().read(amt=amt) + self._checksum.update(chunk) + if amt is None or (not chunk and amt > 0): + self._validate_checksum() + return chunk + + def _validate_checksum(self): + if self._checksum.digest() != base64.b64decode(self._expected): + error_msg = ( + f"Expected checksum {self._expected} did not match calculated " + f"checksum: {self._checksum.b64digest()}" + ) + raise FlexibleChecksumError(error_msg=error_msg) + + +def resolve_checksum_context(request, operation_model, params): + resolve_request_checksum_algorithm(request, operation_model, params) + resolve_response_checksum_algorithms(request, operation_model, params) + + +def resolve_request_checksum_algorithm( + request, + operation_model, + params, + supported_algorithms=None, +): + http_checksum = operation_model.http_checksum + algorithm_member = http_checksum.get("requestAlgorithmMember") + if algorithm_member and algorithm_member in params: + # If the client has opted into using flexible checksums and the + # request supports it, use that instead of checksum required + if supported_algorithms is None: + supported_algorithms = _SUPPORTED_CHECKSUM_ALGORITHMS + + algorithm_name = params[algorithm_member].lower() + if algorithm_name not in supported_algorithms: + if not HAS_CRT and algorithm_name in _CRT_CHECKSUM_ALGORITHMS: + raise MissingDependencyException( + msg=( + f"Using {algorithm_name.upper()} requires an " + "additional dependency. You will need to pip install " + "botocore[crt] before proceeding." + ) + ) + raise FlexibleChecksumError( + error_msg="Unsupported checksum algorithm: %s" % algorithm_name + ) + + location_type = "header" + if operation_model.has_streaming_input: + # Operations with streaming input must support trailers. + if request["url"].startswith("https:"): + # We only support unsigned trailer checksums currently. As this + # disables payload signing we'll only use trailers over TLS. + location_type = "trailer" + + algorithm = { + "algorithm": algorithm_name, + "in": location_type, + "name": "x-amz-checksum-%s" % algorithm_name, + } + + if algorithm["name"] in request["headers"]: + # If the header is already set by the customer, skip calculation + return + + checksum_context = request["context"].get("checksum", {}) + checksum_context["request_algorithm"] = algorithm + request["context"]["checksum"] = checksum_context + elif operation_model.http_checksum_required or http_checksum.get( + "requestChecksumRequired" + ): + # Otherwise apply the old http checksum behavior via Content-MD5 + checksum_context = request["context"].get("checksum", {}) + checksum_context["request_algorithm"] = "conditional-md5" + request["context"]["checksum"] = checksum_context + + +def apply_request_checksum(request): + checksum_context = request.get("context", {}).get("checksum", {}) + algorithm = checksum_context.get("request_algorithm") + + if not algorithm: + return + + if algorithm == "conditional-md5": + # Special case to handle the http checksum required trait + conditionally_calculate_md5(request) + elif algorithm["in"] == "header": + _apply_request_header_checksum(request) + elif algorithm["in"] == "trailer": + _apply_request_trailer_checksum(request) + else: + raise FlexibleChecksumError( + error_msg="Unknown checksum variant: %s" % algorithm["in"] + ) + + +def _apply_request_header_checksum(request): + checksum_context = request.get("context", {}).get("checksum", {}) + algorithm = checksum_context.get("request_algorithm") + location_name = algorithm["name"] + if location_name in request["headers"]: + # If the header is already set by the customer, skip calculation + return + checksum_cls = _CHECKSUM_CLS.get(algorithm["algorithm"]) + digest = checksum_cls().handle(request["body"]) + request["headers"][location_name] = digest + + +def _apply_request_trailer_checksum(request): + checksum_context = request.get("context", {}).get("checksum", {}) + algorithm = checksum_context.get("request_algorithm") + location_name = algorithm["name"] + checksum_cls = _CHECKSUM_CLS.get(algorithm["algorithm"]) + + headers = request["headers"] + body = request["body"] + + if location_name in headers: + # If the header is already set by the customer, skip calculation + return + + headers["Transfer-Encoding"] = "chunked" + if "Content-Encoding" in headers: + # We need to preserve the existing content encoding and add + # aws-chunked as a new content encoding. + headers["Content-Encoding"] += ",aws-chunked" + else: + headers["Content-Encoding"] = "aws-chunked" + headers["X-Amz-Trailer"] = location_name + + content_length = determine_content_length(body) + if content_length is not None: + # Send the decoded content length if we can determine it. Some + # services such as S3 may require the decoded content length + headers["X-Amz-Decoded-Content-Length"] = str(content_length) + + if isinstance(body, (bytes, bytearray)): + body = io.BytesIO(body) + + request["body"] = AwsChunkedWrapper( + body, + checksum_cls=checksum_cls, + checksum_name=location_name, + ) + + +def resolve_response_checksum_algorithms( + request, operation_model, params, supported_algorithms=None +): + http_checksum = operation_model.http_checksum + mode_member = http_checksum.get("requestValidationModeMember") + if mode_member and mode_member in params: + if supported_algorithms is None: + supported_algorithms = _SUPPORTED_CHECKSUM_ALGORITHMS + response_algorithms = { + a.lower() for a in http_checksum.get("responseAlgorithms", []) + } + + usable_algorithms = [] + for algorithm in _ALGORITHMS_PRIORITY_LIST: + if algorithm not in response_algorithms: + continue + if algorithm in supported_algorithms: + usable_algorithms.append(algorithm) + + checksum_context = request["context"].get("checksum", {}) + checksum_context["response_algorithms"] = usable_algorithms + request["context"]["checksum"] = checksum_context + + +def handle_checksum_body(http_response, response, context, operation_model): + headers = response["headers"] + checksum_context = context.get("checksum", {}) + algorithms = checksum_context.get("response_algorithms") + + if not algorithms: + return + + for algorithm in algorithms: + header_name = "x-amz-checksum-%s" % algorithm + # If the header is not found, check the next algorithm + if header_name not in headers: + continue + + # If a - is in the checksum this is not valid Base64. S3 returns + # checksums that include a -# suffix to indicate a checksum derived + # from the hash of all part checksums. We cannot wrap this response + if "-" in headers[header_name]: + continue + + if operation_model.has_streaming_output: + response["body"] = _handle_streaming_response( + http_response, response, algorithm + ) + else: + response["body"] = _handle_bytes_response( + http_response, response, algorithm + ) + + # Expose metadata that the checksum check actually occurred + checksum_context = response["context"].get("checksum", {}) + checksum_context["response_algorithm"] = algorithm + response["context"]["checksum"] = checksum_context + return + + logger.info( + f'Skipping checksum validation. Response did not contain one of the ' + f'following algorithms: {algorithms}.' + ) + + +def _handle_streaming_response(http_response, response, algorithm): + checksum_cls = _CHECKSUM_CLS.get(algorithm) + header_name = "x-amz-checksum-%s" % algorithm + return StreamingChecksumBody( + http_response.raw, + response["headers"].get("content-length"), + checksum_cls(), + response["headers"][header_name], + ) + + +def _handle_bytes_response(http_response, response, algorithm): + body = http_response.content + header_name = "x-amz-checksum-%s" % algorithm + checksum_cls = _CHECKSUM_CLS.get(algorithm) + checksum = checksum_cls() + checksum.update(body) + expected = response["headers"][header_name] + if checksum.digest() != base64.b64decode(expected): + error_msg = ( + "Expected checksum %s did not match calculated checksum: %s" + % ( + expected, + checksum.b64digest(), + ) + ) + raise FlexibleChecksumError(error_msg=error_msg) + return body + + +_CHECKSUM_CLS = { + "crc32": Crc32Checksum, + "sha1": Sha1Checksum, + "sha256": Sha256Checksum, +} +_CRT_CHECKSUM_ALGORITHMS = ["crc32", "crc32c"] +if HAS_CRT: + # Use CRT checksum implementations if available + _CRT_CHECKSUM_CLS = { + "crc32": CrtCrc32Checksum, + "crc32c": CrtCrc32cChecksum, + } + _CHECKSUM_CLS.update(_CRT_CHECKSUM_CLS) + # Validate this list isn't out of sync with _CRT_CHECKSUM_CLS keys + assert all( + name in _CRT_CHECKSUM_ALGORITHMS for name in _CRT_CHECKSUM_CLS.keys() + ) +_SUPPORTED_CHECKSUM_ALGORITHMS = list(_CHECKSUM_CLS.keys()) +_ALGORITHMS_PRIORITY_LIST = ['crc32c', 'crc32', 'sha1', 'sha256'] diff --git a/dbtzin/lib/python3.8/site-packages/botocore/httpsession.py b/dbtzin/lib/python3.8/site-packages/botocore/httpsession.py new file mode 100644 index 00000000..bd8b82fa --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/httpsession.py @@ -0,0 +1,509 @@ +import logging +import os +import os.path +import socket +import sys +import warnings +from base64 import b64encode + +from urllib3 import PoolManager, Timeout, proxy_from_url +from urllib3.exceptions import ( + ConnectTimeoutError as URLLib3ConnectTimeoutError, +) +from urllib3.exceptions import ( + LocationParseError, + NewConnectionError, + ProtocolError, + ProxyError, +) +from urllib3.exceptions import ReadTimeoutError as URLLib3ReadTimeoutError +from urllib3.exceptions import SSLError as URLLib3SSLError +from urllib3.util.retry import Retry +from urllib3.util.ssl_ import ( + OP_NO_COMPRESSION, + PROTOCOL_TLS, + OP_NO_SSLv2, + OP_NO_SSLv3, + is_ipaddress, + ssl, +) +from urllib3.util.url import parse_url + +try: + from urllib3.util.ssl_ import OP_NO_TICKET, PROTOCOL_TLS_CLIENT +except ImportError: + # Fallback directly to ssl for version of urllib3 before 1.26. + # They are available in the standard library starting in Python 3.6. + from ssl import OP_NO_TICKET, PROTOCOL_TLS_CLIENT + +try: + # pyopenssl will be removed in urllib3 2.0, we'll fall back to ssl_ at that point. + # This can be removed once our urllib3 floor is raised to >= 2.0. + with warnings.catch_warnings(): + warnings.simplefilter("ignore", category=DeprecationWarning) + # Always import the original SSLContext, even if it has been patched + from urllib3.contrib.pyopenssl import ( + orig_util_SSLContext as SSLContext, + ) +except ImportError: + from urllib3.util.ssl_ import SSLContext + +try: + from urllib3.util.ssl_ import DEFAULT_CIPHERS +except ImportError: + # Defer to system configuration starting with + # urllib3 2.0. This will choose the ciphers provided by + # Openssl 1.1.1+ or secure system defaults. + DEFAULT_CIPHERS = None + +import botocore.awsrequest +from botocore.compat import ( + IPV6_ADDRZ_RE, + ensure_bytes, + filter_ssl_warnings, + unquote, + urlparse, +) +from botocore.exceptions import ( + ConnectionClosedError, + ConnectTimeoutError, + EndpointConnectionError, + HTTPClientError, + InvalidProxiesConfigError, + ProxyConnectionError, + ReadTimeoutError, + SSLError, +) + +filter_ssl_warnings() +logger = logging.getLogger(__name__) +DEFAULT_TIMEOUT = 60 +MAX_POOL_CONNECTIONS = 10 +DEFAULT_CA_BUNDLE = os.path.join(os.path.dirname(__file__), 'cacert.pem') + +try: + from certifi import where +except ImportError: + + def where(): + return DEFAULT_CA_BUNDLE + + +def get_cert_path(verify): + if verify is not True: + return verify + + cert_path = where() + logger.debug(f"Certificate path: {cert_path}") + + return cert_path + + +def create_urllib3_context( + ssl_version=None, cert_reqs=None, options=None, ciphers=None +): + """This function is a vendored version of the same function in urllib3 + + We vendor this function to ensure that the SSL contexts we construct + always use the std lib SSLContext instead of pyopenssl. + """ + # PROTOCOL_TLS is deprecated in Python 3.10 + if not ssl_version or ssl_version == PROTOCOL_TLS: + ssl_version = PROTOCOL_TLS_CLIENT + + context = SSLContext(ssl_version) + + if ciphers: + context.set_ciphers(ciphers) + elif DEFAULT_CIPHERS: + context.set_ciphers(DEFAULT_CIPHERS) + + # Setting the default here, as we may have no ssl module on import + cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs + + if options is None: + options = 0 + # SSLv2 is easily broken and is considered harmful and dangerous + options |= OP_NO_SSLv2 + # SSLv3 has several problems and is now dangerous + options |= OP_NO_SSLv3 + # Disable compression to prevent CRIME attacks for OpenSSL 1.0+ + # (issue urllib3#309) + options |= OP_NO_COMPRESSION + # TLSv1.2 only. Unless set explicitly, do not request tickets. + # This may save some bandwidth on wire, and although the ticket is encrypted, + # there is a risk associated with it being on wire, + # if the server is not rotating its ticketing keys properly. + options |= OP_NO_TICKET + + context.options |= options + + # Enable post-handshake authentication for TLS 1.3, see GH #1634. PHA is + # necessary for conditional client cert authentication with TLS 1.3. + # The attribute is None for OpenSSL <= 1.1.0 or does not exist in older + # versions of Python. We only enable on Python 3.7.4+ or if certificate + # verification is enabled to work around Python issue #37428 + # See: https://bugs.python.org/issue37428 + if ( + cert_reqs == ssl.CERT_REQUIRED or sys.version_info >= (3, 7, 4) + ) and getattr(context, "post_handshake_auth", None) is not None: + context.post_handshake_auth = True + + def disable_check_hostname(): + if ( + getattr(context, "check_hostname", None) is not None + ): # Platform-specific: Python 3.2 + # We do our own verification, including fingerprints and alternative + # hostnames. So disable it here + context.check_hostname = False + + # The order of the below lines setting verify_mode and check_hostname + # matter due to safe-guards SSLContext has to prevent an SSLContext with + # check_hostname=True, verify_mode=NONE/OPTIONAL. This is made even more + # complex because we don't know whether PROTOCOL_TLS_CLIENT will be used + # or not so we don't know the initial state of the freshly created SSLContext. + if cert_reqs == ssl.CERT_REQUIRED: + context.verify_mode = cert_reqs + disable_check_hostname() + else: + disable_check_hostname() + context.verify_mode = cert_reqs + + # Enable logging of TLS session keys via defacto standard environment variable + # 'SSLKEYLOGFILE', if the feature is available (Python 3.8+). Skip empty values. + if hasattr(context, "keylog_filename"): + sslkeylogfile = os.environ.get("SSLKEYLOGFILE") + if sslkeylogfile and not sys.flags.ignore_environment: + context.keylog_filename = sslkeylogfile + + return context + + +def ensure_boolean(val): + """Ensures a boolean value if a string or boolean is provided + + For strings, the value for True/False is case insensitive + """ + if isinstance(val, bool): + return val + else: + return val.lower() == 'true' + + +def mask_proxy_url(proxy_url): + """ + Mask proxy url credentials. + + :type proxy_url: str + :param proxy_url: The proxy url, i.e. https://username:password@proxy.com + + :return: Masked proxy url, i.e. https://***:***@proxy.com + """ + mask = '*' * 3 + parsed_url = urlparse(proxy_url) + if parsed_url.username: + proxy_url = proxy_url.replace(parsed_url.username, mask, 1) + if parsed_url.password: + proxy_url = proxy_url.replace(parsed_url.password, mask, 1) + return proxy_url + + +def _is_ipaddress(host): + """Wrap urllib3's is_ipaddress to support bracketed IPv6 addresses.""" + return is_ipaddress(host) or bool(IPV6_ADDRZ_RE.match(host)) + + +class ProxyConfiguration: + """Represents a proxy configuration dictionary and additional settings. + + This class represents a proxy configuration dictionary and provides utility + functions to retrieve well structured proxy urls and proxy headers from the + proxy configuration dictionary. + """ + + def __init__(self, proxies=None, proxies_settings=None): + if proxies is None: + proxies = {} + if proxies_settings is None: + proxies_settings = {} + + self._proxies = proxies + self._proxies_settings = proxies_settings + + def proxy_url_for(self, url): + """Retrieves the corresponding proxy url for a given url.""" + parsed_url = urlparse(url) + proxy = self._proxies.get(parsed_url.scheme) + if proxy: + proxy = self._fix_proxy_url(proxy) + return proxy + + def proxy_headers_for(self, proxy_url): + """Retrieves the corresponding proxy headers for a given proxy url.""" + headers = {} + username, password = self._get_auth_from_url(proxy_url) + if username and password: + basic_auth = self._construct_basic_auth(username, password) + headers['Proxy-Authorization'] = basic_auth + return headers + + @property + def settings(self): + return self._proxies_settings + + def _fix_proxy_url(self, proxy_url): + if proxy_url.startswith('http:') or proxy_url.startswith('https:'): + return proxy_url + elif proxy_url.startswith('//'): + return 'http:' + proxy_url + else: + return 'http://' + proxy_url + + def _construct_basic_auth(self, username, password): + auth_str = f'{username}:{password}' + encoded_str = b64encode(auth_str.encode('ascii')).strip().decode() + return f'Basic {encoded_str}' + + def _get_auth_from_url(self, url): + parsed_url = urlparse(url) + try: + return unquote(parsed_url.username), unquote(parsed_url.password) + except (AttributeError, TypeError): + return None, None + + +class URLLib3Session: + """A basic HTTP client that supports connection pooling and proxies. + + This class is inspired by requests.adapters.HTTPAdapter, but has been + boiled down to meet the use cases needed by botocore. For the most part + this classes matches the functionality of HTTPAdapter in requests v2.7.0 + (the same as our vendored version). The only major difference of note is + that we currently do not support sending chunked requests. While requests + v2.7.0 implemented this themselves, later version urllib3 support this + directly via a flag to urlopen so enabling it if needed should be trivial. + """ + + def __init__( + self, + verify=True, + proxies=None, + timeout=None, + max_pool_connections=MAX_POOL_CONNECTIONS, + socket_options=None, + client_cert=None, + proxies_config=None, + ): + self._verify = verify + self._proxy_config = ProxyConfiguration( + proxies=proxies, proxies_settings=proxies_config + ) + self._pool_classes_by_scheme = { + 'http': botocore.awsrequest.AWSHTTPConnectionPool, + 'https': botocore.awsrequest.AWSHTTPSConnectionPool, + } + if timeout is None: + timeout = DEFAULT_TIMEOUT + if not isinstance(timeout, (int, float)): + timeout = Timeout(connect=timeout[0], read=timeout[1]) + + self._cert_file = None + self._key_file = None + if isinstance(client_cert, str): + self._cert_file = client_cert + elif isinstance(client_cert, tuple): + self._cert_file, self._key_file = client_cert + + self._timeout = timeout + self._max_pool_connections = max_pool_connections + self._socket_options = socket_options + if socket_options is None: + self._socket_options = [] + self._proxy_managers = {} + self._manager = PoolManager(**self._get_pool_manager_kwargs()) + self._manager.pool_classes_by_scheme = self._pool_classes_by_scheme + + def _proxies_kwargs(self, **kwargs): + proxies_settings = self._proxy_config.settings + proxies_kwargs = { + 'use_forwarding_for_https': proxies_settings.get( + 'proxy_use_forwarding_for_https' + ), + **kwargs, + } + return {k: v for k, v in proxies_kwargs.items() if v is not None} + + def _get_pool_manager_kwargs(self, **extra_kwargs): + pool_manager_kwargs = { + 'timeout': self._timeout, + 'maxsize': self._max_pool_connections, + 'ssl_context': self._get_ssl_context(), + 'socket_options': self._socket_options, + 'cert_file': self._cert_file, + 'key_file': self._key_file, + } + pool_manager_kwargs.update(**extra_kwargs) + return pool_manager_kwargs + + def _get_ssl_context(self): + return create_urllib3_context() + + def _get_proxy_manager(self, proxy_url): + if proxy_url not in self._proxy_managers: + proxy_headers = self._proxy_config.proxy_headers_for(proxy_url) + proxy_ssl_context = self._setup_proxy_ssl_context(proxy_url) + proxy_manager_kwargs = self._get_pool_manager_kwargs( + proxy_headers=proxy_headers + ) + proxy_manager_kwargs.update( + self._proxies_kwargs(proxy_ssl_context=proxy_ssl_context) + ) + proxy_manager = proxy_from_url(proxy_url, **proxy_manager_kwargs) + proxy_manager.pool_classes_by_scheme = self._pool_classes_by_scheme + self._proxy_managers[proxy_url] = proxy_manager + + return self._proxy_managers[proxy_url] + + def _path_url(self, url): + parsed_url = urlparse(url) + path = parsed_url.path + if not path: + path = '/' + if parsed_url.query: + path = path + '?' + parsed_url.query + return path + + def _setup_ssl_cert(self, conn, url, verify): + if url.lower().startswith('https') and verify: + conn.cert_reqs = 'CERT_REQUIRED' + conn.ca_certs = get_cert_path(verify) + else: + conn.cert_reqs = 'CERT_NONE' + conn.ca_certs = None + + def _setup_proxy_ssl_context(self, proxy_url): + proxies_settings = self._proxy_config.settings + proxy_ca_bundle = proxies_settings.get('proxy_ca_bundle') + proxy_cert = proxies_settings.get('proxy_client_cert') + if proxy_ca_bundle is None and proxy_cert is None: + return None + + context = self._get_ssl_context() + try: + url = parse_url(proxy_url) + # urllib3 disables this by default but we need it for proper + # proxy tls negotiation when proxy_url is not an IP Address + if not _is_ipaddress(url.host): + context.check_hostname = True + if proxy_ca_bundle is not None: + context.load_verify_locations(cafile=proxy_ca_bundle) + + if isinstance(proxy_cert, tuple): + context.load_cert_chain(proxy_cert[0], keyfile=proxy_cert[1]) + elif isinstance(proxy_cert, str): + context.load_cert_chain(proxy_cert) + + return context + except (OSError, URLLib3SSLError, LocationParseError) as e: + raise InvalidProxiesConfigError(error=e) + + def _get_connection_manager(self, url, proxy_url=None): + if proxy_url: + manager = self._get_proxy_manager(proxy_url) + else: + manager = self._manager + return manager + + def _get_request_target(self, url, proxy_url): + has_proxy = proxy_url is not None + + if not has_proxy: + return self._path_url(url) + + # HTTP proxies expect the request_target to be the absolute url to know + # which host to establish a connection to. urllib3 also supports + # forwarding for HTTPS through the 'use_forwarding_for_https' parameter. + proxy_scheme = urlparse(proxy_url).scheme + using_https_forwarding_proxy = ( + proxy_scheme == 'https' + and self._proxies_kwargs().get('use_forwarding_for_https', False) + ) + + if using_https_forwarding_proxy or url.startswith('http:'): + return url + else: + return self._path_url(url) + + def _chunked(self, headers): + transfer_encoding = headers.get('Transfer-Encoding', b'') + transfer_encoding = ensure_bytes(transfer_encoding) + return transfer_encoding.lower() == b'chunked' + + def close(self): + self._manager.clear() + for manager in self._proxy_managers.values(): + manager.clear() + + def send(self, request): + try: + proxy_url = self._proxy_config.proxy_url_for(request.url) + manager = self._get_connection_manager(request.url, proxy_url) + conn = manager.connection_from_url(request.url) + self._setup_ssl_cert(conn, request.url, self._verify) + if ensure_boolean( + os.environ.get('BOTO_EXPERIMENTAL__ADD_PROXY_HOST_HEADER', '') + ): + # This is currently an "experimental" feature which provides + # no guarantees of backwards compatibility. It may be subject + # to change or removal in any patch version. Anyone opting in + # to this feature should strictly pin botocore. + host = urlparse(request.url).hostname + conn.proxy_headers['host'] = host + + request_target = self._get_request_target(request.url, proxy_url) + urllib_response = conn.urlopen( + method=request.method, + url=request_target, + body=request.body, + headers=request.headers, + retries=Retry(False), + assert_same_host=False, + preload_content=False, + decode_content=False, + chunked=self._chunked(request.headers), + ) + + http_response = botocore.awsrequest.AWSResponse( + request.url, + urllib_response.status, + urllib_response.headers, + urllib_response, + ) + + if not request.stream_output: + # Cause the raw stream to be exhausted immediately. We do it + # this way instead of using preload_content because + # preload_content will never buffer chunked responses + http_response.content + + return http_response + except URLLib3SSLError as e: + raise SSLError(endpoint_url=request.url, error=e) + except (NewConnectionError, socket.gaierror) as e: + raise EndpointConnectionError(endpoint_url=request.url, error=e) + except ProxyError as e: + raise ProxyConnectionError( + proxy_url=mask_proxy_url(proxy_url), error=e + ) + except URLLib3ConnectTimeoutError as e: + raise ConnectTimeoutError(endpoint_url=request.url, error=e) + except URLLib3ReadTimeoutError as e: + raise ReadTimeoutError(endpoint_url=request.url, error=e) + except ProtocolError as e: + raise ConnectionClosedError( + error=e, request=request, endpoint_url=request.url + ) + except Exception as e: + message = 'Exception received when sending urllib3 HTTP request' + logger.debug(message, exc_info=True) + raise HTTPClientError(error=e) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/loaders.py b/dbtzin/lib/python3.8/site-packages/botocore/loaders.py new file mode 100644 index 00000000..2baf4196 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/loaders.py @@ -0,0 +1,524 @@ +# Copyright 2012-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +"""Module for loading various model files. + +This module provides the classes that are used to load models used +by botocore. This can include: + + * Service models (e.g. the model for EC2, S3, DynamoDB, etc.) + * Service model extras which customize the service models + * Other models associated with a service (pagination, waiters) + * Non service-specific config (Endpoint data, retry config) + +Loading a module is broken down into several steps: + + * Determining the path to load + * Search the data_path for files to load + * The mechanics of loading the file + * Searching for extras and applying them to the loaded file + +The last item is used so that other faster loading mechanism +besides the default JSON loader can be used. + +The Search Path +=============== + +Similar to how the PATH environment variable is to finding executables +and the PYTHONPATH environment variable is to finding python modules +to import, the botocore loaders have the concept of a data path exposed +through AWS_DATA_PATH. + +This enables end users to provide additional search paths where we +will attempt to load models outside of the models we ship with +botocore. When you create a ``Loader``, there are two paths +automatically added to the model search path: + + * /data/ + * ~/.aws/models + +The first value is the path where all the model files shipped with +botocore are located. + +The second path is so that users can just drop new model files in +``~/.aws/models`` without having to mess around with the AWS_DATA_PATH. + +The AWS_DATA_PATH using the platform specific path separator to +separate entries (typically ``:`` on linux and ``;`` on windows). + + +Directory Layout +================ + +The Loader expects a particular directory layout. In order for any +directory specified in AWS_DATA_PATH to be considered, it must have +this structure for service models:: + + + | + |-- servicename1 + | |-- 2012-10-25 + | |-- service-2.json + |-- ec2 + | |-- 2014-01-01 + | | |-- paginators-1.json + | | |-- service-2.json + | | |-- waiters-2.json + | |-- 2015-03-01 + | |-- paginators-1.json + | |-- service-2.json + | |-- waiters-2.json + | |-- service-2.sdk-extras.json + + +That is: + + * The root directory contains sub directories that are the name + of the services. + * Within each service directory, there's a sub directory for each + available API version. + * Within each API version, there are model specific files, including + (but not limited to): service-2.json, waiters-2.json, paginators-1.json + +The ``-1`` and ``-2`` suffix at the end of the model files denote which version +schema is used within the model. Even though this information is available in +the ``version`` key within the model, this version is also part of the filename +so that code does not need to load the JSON model in order to determine which +version to use. + +The ``sdk-extras`` and similar files represent extra data that needs to be +applied to the model after it is loaded. Data in these files might represent +information that doesn't quite fit in the original models, but is still needed +for the sdk. For instance, additional operation parameters might be added here +which don't represent the actual service api. +""" +import logging +import os + +from botocore import BOTOCORE_ROOT +from botocore.compat import HAS_GZIP, OrderedDict, json +from botocore.exceptions import DataNotFoundError, UnknownServiceError +from botocore.utils import deep_merge + +_JSON_OPEN_METHODS = { + '.json': open, +} + + +if HAS_GZIP: + from gzip import open as gzip_open + + _JSON_OPEN_METHODS['.json.gz'] = gzip_open + + +logger = logging.getLogger(__name__) + + +def instance_cache(func): + """Cache the result of a method on a per instance basis. + + This is not a general purpose caching decorator. In order + for this to be used, it must be used on methods on an + instance, and that instance *must* provide a + ``self._cache`` dictionary. + + """ + + def _wrapper(self, *args, **kwargs): + key = (func.__name__,) + args + for pair in sorted(kwargs.items()): + key += pair + if key in self._cache: + return self._cache[key] + data = func(self, *args, **kwargs) + self._cache[key] = data + return data + + return _wrapper + + +class JSONFileLoader: + """Loader JSON files. + + This class can load the default format of models, which is a JSON file. + + """ + + def exists(self, file_path): + """Checks if the file exists. + + :type file_path: str + :param file_path: The full path to the file to load without + the '.json' extension. + + :return: True if file path exists, False otherwise. + + """ + for ext in _JSON_OPEN_METHODS: + if os.path.isfile(file_path + ext): + return True + return False + + def _load_file(self, full_path, open_method): + if not os.path.isfile(full_path): + return + + # By default the file will be opened with locale encoding on Python 3. + # We specify "utf8" here to ensure the correct behavior. + with open_method(full_path, 'rb') as fp: + payload = fp.read().decode('utf-8') + + logger.debug("Loading JSON file: %s", full_path) + return json.loads(payload, object_pairs_hook=OrderedDict) + + def load_file(self, file_path): + """Attempt to load the file path. + + :type file_path: str + :param file_path: The full path to the file to load without + the '.json' extension. + + :return: The loaded data if it exists, otherwise None. + + """ + for ext, open_method in _JSON_OPEN_METHODS.items(): + data = self._load_file(file_path + ext, open_method) + if data is not None: + return data + return None + + +def create_loader(search_path_string=None): + """Create a Loader class. + + This factory function creates a loader given a search string path. + + :type search_string_path: str + :param search_string_path: The AWS_DATA_PATH value. A string + of data path values separated by the ``os.path.pathsep`` value, + which is typically ``:`` on POSIX platforms and ``;`` on + windows. + + :return: A ``Loader`` instance. + + """ + if search_path_string is None: + return Loader() + paths = [] + extra_paths = search_path_string.split(os.pathsep) + for path in extra_paths: + path = os.path.expanduser(os.path.expandvars(path)) + paths.append(path) + return Loader(extra_search_paths=paths) + + +class Loader: + """Find and load data models. + + This class will handle searching for and loading data models. + + The main method used here is ``load_service_model``, which is a + convenience method over ``load_data`` and ``determine_latest_version``. + + """ + + FILE_LOADER_CLASS = JSONFileLoader + # The included models in botocore/data/ that we ship with botocore. + BUILTIN_DATA_PATH = os.path.join(BOTOCORE_ROOT, 'data') + # For convenience we automatically add ~/.aws/models to the data path. + CUSTOMER_DATA_PATH = os.path.join( + os.path.expanduser('~'), '.aws', 'models' + ) + BUILTIN_EXTRAS_TYPES = ['sdk'] + + def __init__( + self, + extra_search_paths=None, + file_loader=None, + cache=None, + include_default_search_paths=True, + include_default_extras=True, + ): + self._cache = {} + if file_loader is None: + file_loader = self.FILE_LOADER_CLASS() + self.file_loader = file_loader + if extra_search_paths is not None: + self._search_paths = extra_search_paths + else: + self._search_paths = [] + if include_default_search_paths: + self._search_paths.extend( + [self.CUSTOMER_DATA_PATH, self.BUILTIN_DATA_PATH] + ) + + self._extras_types = [] + if include_default_extras: + self._extras_types.extend(self.BUILTIN_EXTRAS_TYPES) + + self._extras_processor = ExtrasProcessor() + + @property + def search_paths(self): + return self._search_paths + + @property + def extras_types(self): + return self._extras_types + + @instance_cache + def list_available_services(self, type_name): + """List all known services. + + This will traverse the search path and look for all known + services. + + :type type_name: str + :param type_name: The type of the service (service-2, + paginators-1, waiters-2, etc). This is needed because + the list of available services depends on the service + type. For example, the latest API version available for + a resource-1.json file may not be the latest API version + available for a services-2.json file. + + :return: A list of all services. The list of services will + be sorted. + + """ + services = set() + for possible_path in self._potential_locations(): + # Any directory in the search path is potentially a service. + # We'll collect any initial list of potential services, + # but we'll then need to further process these directories + # by searching for the corresponding type_name in each + # potential directory. + possible_services = [ + d + for d in os.listdir(possible_path) + if os.path.isdir(os.path.join(possible_path, d)) + ] + for service_name in possible_services: + full_dirname = os.path.join(possible_path, service_name) + api_versions = os.listdir(full_dirname) + for api_version in api_versions: + full_load_path = os.path.join( + full_dirname, api_version, type_name + ) + if self.file_loader.exists(full_load_path): + services.add(service_name) + break + return sorted(services) + + @instance_cache + def determine_latest_version(self, service_name, type_name): + """Find the latest API version available for a service. + + :type service_name: str + :param service_name: The name of the service. + + :type type_name: str + :param type_name: The type of the service (service-2, + paginators-1, waiters-2, etc). This is needed because + the latest API version available can depend on the service + type. For example, the latest API version available for + a resource-1.json file may not be the latest API version + available for a services-2.json file. + + :rtype: str + :return: The latest API version. If the service does not exist + or does not have any available API data, then a + ``DataNotFoundError`` exception will be raised. + + """ + return max(self.list_api_versions(service_name, type_name)) + + @instance_cache + def list_api_versions(self, service_name, type_name): + """List all API versions available for a particular service type + + :type service_name: str + :param service_name: The name of the service + + :type type_name: str + :param type_name: The type name for the service (i.e service-2, + paginators-1, etc.) + + :rtype: list + :return: A list of API version strings in sorted order. + + """ + known_api_versions = set() + for possible_path in self._potential_locations( + service_name, must_exist=True, is_dir=True + ): + for dirname in os.listdir(possible_path): + full_path = os.path.join(possible_path, dirname, type_name) + # Only add to the known_api_versions if the directory + # contains a service-2, paginators-1, etc. file corresponding + # to the type_name passed in. + if self.file_loader.exists(full_path): + known_api_versions.add(dirname) + if not known_api_versions: + raise DataNotFoundError(data_path=service_name) + return sorted(known_api_versions) + + @instance_cache + def load_service_model(self, service_name, type_name, api_version=None): + """Load a botocore service model + + This is the main method for loading botocore models (e.g. a service + model, pagination configs, waiter configs, etc.). + + :type service_name: str + :param service_name: The name of the service (e.g ``ec2``, ``s3``). + + :type type_name: str + :param type_name: The model type. Valid types include, but are not + limited to: ``service-2``, ``paginators-1``, ``waiters-2``. + + :type api_version: str + :param api_version: The API version to load. If this is not + provided, then the latest API version will be used. + + :type load_extras: bool + :param load_extras: Whether or not to load the tool extras which + contain additional data to be added to the model. + + :raises: UnknownServiceError if there is no known service with + the provided service_name. + + :raises: DataNotFoundError if no data could be found for the + service_name/type_name/api_version. + + :return: The loaded data, as a python type (e.g. dict, list, etc). + """ + # Wrapper around the load_data. This will calculate the path + # to call load_data with. + known_services = self.list_available_services(type_name) + if service_name not in known_services: + raise UnknownServiceError( + service_name=service_name, + known_service_names=', '.join(sorted(known_services)), + ) + if api_version is None: + api_version = self.determine_latest_version( + service_name, type_name + ) + full_path = os.path.join(service_name, api_version, type_name) + model = self.load_data(full_path) + + # Load in all the extras + extras_data = self._find_extras(service_name, type_name, api_version) + self._extras_processor.process(model, extras_data) + + return model + + def _find_extras(self, service_name, type_name, api_version): + """Creates an iterator over all the extras data.""" + for extras_type in self.extras_types: + extras_name = f'{type_name}.{extras_type}-extras' + full_path = os.path.join(service_name, api_version, extras_name) + + try: + yield self.load_data(full_path) + except DataNotFoundError: + pass + + @instance_cache + def load_data_with_path(self, name): + """Same as ``load_data`` but returns file path as second return value. + + :type name: str + :param name: The data path, i.e ``ec2/2015-03-01/service-2``. + + :return: Tuple of the loaded data and the path to the data file + where the data was loaded from. If no data could be found then a + DataNotFoundError is raised. + """ + for possible_path in self._potential_locations(name): + found = self.file_loader.load_file(possible_path) + if found is not None: + return found, possible_path + + # We didn't find anything that matched on any path. + raise DataNotFoundError(data_path=name) + + def load_data(self, name): + """Load data given a data path. + + This is a low level method that will search through the various + search paths until it's able to load a value. This is typically + only needed to load *non* model files (such as _endpoints and + _retry). If you need to load model files, you should prefer + ``load_service_model``. Use ``load_data_with_path`` to get the + data path of the data file as second return value. + + :type name: str + :param name: The data path, i.e ``ec2/2015-03-01/service-2``. + + :return: The loaded data. If no data could be found then + a DataNotFoundError is raised. + """ + data, _ = self.load_data_with_path(name) + return data + + def _potential_locations(self, name=None, must_exist=False, is_dir=False): + # Will give an iterator over the full path of potential locations + # according to the search path. + for path in self.search_paths: + if os.path.isdir(path): + full_path = path + if name is not None: + full_path = os.path.join(path, name) + if not must_exist: + yield full_path + else: + if is_dir and os.path.isdir(full_path): + yield full_path + elif os.path.exists(full_path): + yield full_path + + def is_builtin_path(self, path): + """Whether a given path is within the package's data directory. + + This method can be used together with load_data_with_path(name) + to determine if data has been loaded from a file bundled with the + package, as opposed to a file in a separate location. + + :type path: str + :param path: The file path to check. + + :return: Whether the given path is within the package's data directory. + """ + path = os.path.expanduser(os.path.expandvars(path)) + return path.startswith(self.BUILTIN_DATA_PATH) + + +class ExtrasProcessor: + """Processes data from extras files into service models.""" + + def process(self, original_model, extra_models): + """Processes data from a list of loaded extras files into a model + + :type original_model: dict + :param original_model: The service model to load all the extras into. + + :type extra_models: iterable of dict + :param extra_models: A list of loaded extras models. + """ + for extras in extra_models: + self._process(original_model, extras) + + def _process(self, model, extra_model): + """Process a single extras model into a service model.""" + if 'merge' in extra_model: + deep_merge(model, extra_model['merge']) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/model.py b/dbtzin/lib/python3.8/site-packages/botocore/model.py new file mode 100644 index 00000000..8aa3d2dc --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/model.py @@ -0,0 +1,954 @@ +# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +"""Abstractions to interact with service models.""" +from collections import defaultdict +from typing import NamedTuple, Union + +from botocore.compat import OrderedDict +from botocore.exceptions import ( + MissingServiceIdError, + UndefinedModelAttributeError, +) +from botocore.utils import CachedProperty, hyphenize_service_id, instance_cache + +NOT_SET = object() + + +class NoShapeFoundError(Exception): + pass + + +class InvalidShapeError(Exception): + pass + + +class OperationNotFoundError(Exception): + pass + + +class InvalidShapeReferenceError(Exception): + pass + + +class ServiceId(str): + def hyphenize(self): + return hyphenize_service_id(self) + + +class Shape: + """Object representing a shape from the service model.""" + + # To simplify serialization logic, all shape params that are + # related to serialization are moved from the top level hash into + # a 'serialization' hash. This list below contains the names of all + # the attributes that should be moved. + SERIALIZED_ATTRS = [ + 'locationName', + 'queryName', + 'flattened', + 'location', + 'payload', + 'streaming', + 'timestampFormat', + 'xmlNamespace', + 'resultWrapper', + 'xmlAttribute', + 'eventstream', + 'event', + 'eventheader', + 'eventpayload', + 'jsonvalue', + 'timestampFormat', + 'hostLabel', + ] + METADATA_ATTRS = [ + 'required', + 'min', + 'max', + 'pattern', + 'sensitive', + 'enum', + 'idempotencyToken', + 'error', + 'exception', + 'endpointdiscoveryid', + 'retryable', + 'document', + 'union', + 'contextParam', + 'clientContextParams', + 'requiresLength', + ] + MAP_TYPE = OrderedDict + + def __init__(self, shape_name, shape_model, shape_resolver=None): + """ + + :type shape_name: string + :param shape_name: The name of the shape. + + :type shape_model: dict + :param shape_model: The shape model. This would be the value + associated with the key in the "shapes" dict of the + service model (i.e ``model['shapes'][shape_name]``) + + :type shape_resolver: botocore.model.ShapeResolver + :param shape_resolver: A shape resolver object. This is used to + resolve references to other shapes. For scalar shape types + (string, integer, boolean, etc.), this argument is not + required. If a shape_resolver is not provided for a complex + type, then a ``ValueError`` will be raised when an attempt + to resolve a shape is made. + + """ + self.name = shape_name + self.type_name = shape_model['type'] + self.documentation = shape_model.get('documentation', '') + self._shape_model = shape_model + if shape_resolver is None: + # If a shape_resolver is not provided, we create an object + # that will throw errors if you attempt to resolve + # a shape. This is actually ok for scalar shapes + # because they don't need to resolve shapes and shouldn't + # be required to provide an object they won't use. + shape_resolver = UnresolvableShapeMap() + self._shape_resolver = shape_resolver + self._cache = {} + + @CachedProperty + def serialization(self): + """Serialization information about the shape. + + This contains information that may be needed for input serialization + or response parsing. This can include: + + * name + * queryName + * flattened + * location + * payload + * streaming + * xmlNamespace + * resultWrapper + * xmlAttribute + * jsonvalue + * timestampFormat + + :rtype: dict + :return: Serialization information about the shape. + + """ + model = self._shape_model + serialization = {} + for attr in self.SERIALIZED_ATTRS: + if attr in self._shape_model: + serialization[attr] = model[attr] + # For consistency, locationName is renamed to just 'name'. + if 'locationName' in serialization: + serialization['name'] = serialization.pop('locationName') + return serialization + + @CachedProperty + def metadata(self): + """Metadata about the shape. + + This requires optional information about the shape, including: + + * min + * max + * pattern + * enum + * sensitive + * required + * idempotencyToken + * document + * union + * contextParam + * clientContextParams + * requiresLength + + :rtype: dict + :return: Metadata about the shape. + + """ + model = self._shape_model + metadata = {} + for attr in self.METADATA_ATTRS: + if attr in self._shape_model: + metadata[attr] = model[attr] + return metadata + + @CachedProperty + def required_members(self): + """A list of members that are required. + + A structure shape can define members that are required. + This value will return a list of required members. If there + are no required members an empty list is returned. + + """ + return self.metadata.get('required', []) + + def _resolve_shape_ref(self, shape_ref): + return self._shape_resolver.resolve_shape_ref(shape_ref) + + def __repr__(self): + return f"<{self.__class__.__name__}({self.name})>" + + @property + def event_stream_name(self): + return None + + +class StructureShape(Shape): + @CachedProperty + def members(self): + members = self._shape_model.get('members', self.MAP_TYPE()) + # The members dict looks like: + # 'members': { + # 'MemberName': {'shape': 'shapeName'}, + # 'MemberName2': {'shape': 'shapeName'}, + # } + # We return a dict of member name to Shape object. + shape_members = self.MAP_TYPE() + for name, shape_ref in members.items(): + shape_members[name] = self._resolve_shape_ref(shape_ref) + return shape_members + + @CachedProperty + def event_stream_name(self): + for member_name, member in self.members.items(): + if member.serialization.get('eventstream'): + return member_name + return None + + @CachedProperty + def error_code(self): + if not self.metadata.get('exception', False): + return None + error_metadata = self.metadata.get("error", {}) + code = error_metadata.get("code") + if code: + return code + # Use the exception name if there is no explicit code modeled + return self.name + + @CachedProperty + def is_document_type(self): + return self.metadata.get('document', False) + + @CachedProperty + def is_tagged_union(self): + return self.metadata.get('union', False) + + +class ListShape(Shape): + @CachedProperty + def member(self): + return self._resolve_shape_ref(self._shape_model['member']) + + +class MapShape(Shape): + @CachedProperty + def key(self): + return self._resolve_shape_ref(self._shape_model['key']) + + @CachedProperty + def value(self): + return self._resolve_shape_ref(self._shape_model['value']) + + +class StringShape(Shape): + @CachedProperty + def enum(self): + return self.metadata.get('enum', []) + + +class StaticContextParameter(NamedTuple): + name: str + value: Union[bool, str] + + +class ContextParameter(NamedTuple): + name: str + member_name: str + + +class ClientContextParameter(NamedTuple): + name: str + type: str + documentation: str + + +class ServiceModel: + """ + + :ivar service_description: The parsed service description dictionary. + + """ + + def __init__(self, service_description, service_name=None): + """ + + :type service_description: dict + :param service_description: The service description model. This value + is obtained from a botocore.loader.Loader, or from directly loading + the file yourself:: + + service_description = json.load( + open('/path/to/service-description-model.json')) + model = ServiceModel(service_description) + + :type service_name: str + :param service_name: The name of the service. Normally this is + the endpoint prefix defined in the service_description. However, + you can override this value to provide a more convenient name. + This is done in a few places in botocore (ses instead of email, + emr instead of elasticmapreduce). If this value is not provided, + it will default to the endpointPrefix defined in the model. + + """ + self._service_description = service_description + # We want clients to be able to access metadata directly. + self.metadata = service_description.get('metadata', {}) + self._shape_resolver = ShapeResolver( + service_description.get('shapes', {}) + ) + self._signature_version = NOT_SET + self._service_name = service_name + self._instance_cache = {} + + def shape_for(self, shape_name, member_traits=None): + return self._shape_resolver.get_shape_by_name( + shape_name, member_traits + ) + + def shape_for_error_code(self, error_code): + return self._error_code_cache.get(error_code, None) + + @CachedProperty + def _error_code_cache(self): + error_code_cache = {} + for error_shape in self.error_shapes: + code = error_shape.error_code + error_code_cache[code] = error_shape + return error_code_cache + + def resolve_shape_ref(self, shape_ref): + return self._shape_resolver.resolve_shape_ref(shape_ref) + + @CachedProperty + def shape_names(self): + return list(self._service_description.get('shapes', {})) + + @CachedProperty + def error_shapes(self): + error_shapes = [] + for shape_name in self.shape_names: + error_shape = self.shape_for(shape_name) + if error_shape.metadata.get('exception', False): + error_shapes.append(error_shape) + return error_shapes + + @instance_cache + def operation_model(self, operation_name): + try: + model = self._service_description['operations'][operation_name] + except KeyError: + raise OperationNotFoundError(operation_name) + return OperationModel(model, self, operation_name) + + @CachedProperty + def documentation(self): + return self._service_description.get('documentation', '') + + @CachedProperty + def operation_names(self): + return list(self._service_description.get('operations', [])) + + @CachedProperty + def service_name(self): + """The name of the service. + + This defaults to the endpointPrefix defined in the service model. + However, this value can be overriden when a ``ServiceModel`` is + created. If a service_name was not provided when the ``ServiceModel`` + was created and if there is no endpointPrefix defined in the + service model, then an ``UndefinedModelAttributeError`` exception + will be raised. + + """ + if self._service_name is not None: + return self._service_name + else: + return self.endpoint_prefix + + @CachedProperty + def service_id(self): + try: + return ServiceId(self._get_metadata_property('serviceId')) + except UndefinedModelAttributeError: + raise MissingServiceIdError(service_name=self._service_name) + + @CachedProperty + def signing_name(self): + """The name to use when computing signatures. + + If the model does not define a signing name, this + value will be the endpoint prefix defined in the model. + """ + signing_name = self.metadata.get('signingName') + if signing_name is None: + signing_name = self.endpoint_prefix + return signing_name + + @CachedProperty + def api_version(self): + return self._get_metadata_property('apiVersion') + + @CachedProperty + def protocol(self): + return self._get_metadata_property('protocol') + + @CachedProperty + def endpoint_prefix(self): + return self._get_metadata_property('endpointPrefix') + + @CachedProperty + def endpoint_discovery_operation(self): + for operation in self.operation_names: + model = self.operation_model(operation) + if model.is_endpoint_discovery_operation: + return model + + @CachedProperty + def endpoint_discovery_required(self): + for operation in self.operation_names: + model = self.operation_model(operation) + if ( + model.endpoint_discovery is not None + and model.endpoint_discovery.get('required') + ): + return True + return False + + @CachedProperty + def client_context_parameters(self): + params = self._service_description.get('clientContextParams', {}) + return [ + ClientContextParameter( + name=param_name, + type=param_val['type'], + documentation=param_val['documentation'], + ) + for param_name, param_val in params.items() + ] + + def _get_metadata_property(self, name): + try: + return self.metadata[name] + except KeyError: + raise UndefinedModelAttributeError( + f'"{name}" not defined in the metadata of the model: {self}' + ) + + # Signature version is one of the rare properties + # that can be modified so a CachedProperty is not used here. + + @property + def signature_version(self): + if self._signature_version is NOT_SET: + signature_version = self.metadata.get('signatureVersion') + self._signature_version = signature_version + return self._signature_version + + @signature_version.setter + def signature_version(self, value): + self._signature_version = value + + def __repr__(self): + return f'{self.__class__.__name__}({self.service_name})' + + +class OperationModel: + def __init__(self, operation_model, service_model, name=None): + """ + + :type operation_model: dict + :param operation_model: The operation model. This comes from the + service model, and is the value associated with the operation + name in the service model (i.e ``model['operations'][op_name]``). + + :type service_model: botocore.model.ServiceModel + :param service_model: The service model associated with the operation. + + :type name: string + :param name: The operation name. This is the operation name exposed to + the users of this model. This can potentially be different from + the "wire_name", which is the operation name that *must* by + provided over the wire. For example, given:: + + "CreateCloudFrontOriginAccessIdentity":{ + "name":"CreateCloudFrontOriginAccessIdentity2014_11_06", + ... + } + + The ``name`` would be ``CreateCloudFrontOriginAccessIdentity``, + but the ``self.wire_name`` would be + ``CreateCloudFrontOriginAccessIdentity2014_11_06``, which is the + value we must send in the corresponding HTTP request. + + """ + self._operation_model = operation_model + self._service_model = service_model + self._api_name = name + # Clients can access '.name' to get the operation name + # and '.metadata' to get the top level metdata of the service. + self._wire_name = operation_model.get('name') + self.metadata = service_model.metadata + self.http = operation_model.get('http', {}) + + @CachedProperty + def name(self): + if self._api_name is not None: + return self._api_name + else: + return self.wire_name + + @property + def wire_name(self): + """The wire name of the operation. + + In many situations this is the same value as the + ``name``, value, but in some services, the operation name + exposed to the user is different from the operation name + we send across the wire (e.g cloudfront). + + Any serialization code should use ``wire_name``. + + """ + return self._operation_model.get('name') + + @property + def service_model(self): + return self._service_model + + @CachedProperty + def documentation(self): + return self._operation_model.get('documentation', '') + + @CachedProperty + def deprecated(self): + return self._operation_model.get('deprecated', False) + + @CachedProperty + def endpoint_discovery(self): + # Explicit None default. An empty dictionary for this trait means it is + # enabled but not required to be used. + return self._operation_model.get('endpointdiscovery', None) + + @CachedProperty + def is_endpoint_discovery_operation(self): + return self._operation_model.get('endpointoperation', False) + + @CachedProperty + def input_shape(self): + if 'input' not in self._operation_model: + # Some operations do not accept any input and do not define an + # input shape. + return None + return self._service_model.resolve_shape_ref( + self._operation_model['input'] + ) + + @CachedProperty + def output_shape(self): + if 'output' not in self._operation_model: + # Some operations do not define an output shape, + # in which case we return None to indicate the + # operation has no expected output. + return None + return self._service_model.resolve_shape_ref( + self._operation_model['output'] + ) + + @CachedProperty + def idempotent_members(self): + input_shape = self.input_shape + if not input_shape: + return [] + + return [ + name + for (name, shape) in input_shape.members.items() + if 'idempotencyToken' in shape.metadata + and shape.metadata['idempotencyToken'] + ] + + @CachedProperty + def static_context_parameters(self): + params = self._operation_model.get('staticContextParams', {}) + return [ + StaticContextParameter(name=name, value=props.get('value')) + for name, props in params.items() + ] + + @CachedProperty + def context_parameters(self): + if not self.input_shape: + return [] + + return [ + ContextParameter( + name=shape.metadata['contextParam']['name'], + member_name=name, + ) + for name, shape in self.input_shape.members.items() + if 'contextParam' in shape.metadata + and 'name' in shape.metadata['contextParam'] + ] + + @CachedProperty + def request_compression(self): + return self._operation_model.get('requestcompression') + + @CachedProperty + def auth_type(self): + return self._operation_model.get('authtype') + + @CachedProperty + def error_shapes(self): + shapes = self._operation_model.get("errors", []) + return list(self._service_model.resolve_shape_ref(s) for s in shapes) + + @CachedProperty + def endpoint(self): + return self._operation_model.get('endpoint') + + @CachedProperty + def http_checksum_required(self): + return self._operation_model.get('httpChecksumRequired', False) + + @CachedProperty + def http_checksum(self): + return self._operation_model.get('httpChecksum', {}) + + @CachedProperty + def has_event_stream_input(self): + return self.get_event_stream_input() is not None + + @CachedProperty + def has_event_stream_output(self): + return self.get_event_stream_output() is not None + + def get_event_stream_input(self): + return self._get_event_stream(self.input_shape) + + def get_event_stream_output(self): + return self._get_event_stream(self.output_shape) + + def _get_event_stream(self, shape): + """Returns the event stream member's shape if any or None otherwise.""" + if shape is None: + return None + event_name = shape.event_stream_name + if event_name: + return shape.members[event_name] + return None + + @CachedProperty + def has_streaming_input(self): + return self.get_streaming_input() is not None + + @CachedProperty + def has_streaming_output(self): + return self.get_streaming_output() is not None + + def get_streaming_input(self): + return self._get_streaming_body(self.input_shape) + + def get_streaming_output(self): + return self._get_streaming_body(self.output_shape) + + def _get_streaming_body(self, shape): + """Returns the streaming member's shape if any; or None otherwise.""" + if shape is None: + return None + payload = shape.serialization.get('payload') + if payload is not None: + payload_shape = shape.members[payload] + if payload_shape.type_name == 'blob': + return payload_shape + return None + + def __repr__(self): + return f'{self.__class__.__name__}(name={self.name})' + + +class ShapeResolver: + """Resolves shape references.""" + + # Any type not in this mapping will default to the Shape class. + SHAPE_CLASSES = { + 'structure': StructureShape, + 'list': ListShape, + 'map': MapShape, + 'string': StringShape, + } + + def __init__(self, shape_map): + self._shape_map = shape_map + self._shape_cache = {} + + def get_shape_by_name(self, shape_name, member_traits=None): + try: + shape_model = self._shape_map[shape_name] + except KeyError: + raise NoShapeFoundError(shape_name) + try: + shape_cls = self.SHAPE_CLASSES.get(shape_model['type'], Shape) + except KeyError: + raise InvalidShapeError( + f"Shape is missing required key 'type': {shape_model}" + ) + if member_traits: + shape_model = shape_model.copy() + shape_model.update(member_traits) + result = shape_cls(shape_name, shape_model, self) + return result + + def resolve_shape_ref(self, shape_ref): + # A shape_ref is a dict that has a 'shape' key that + # refers to a shape name as well as any additional + # member traits that are then merged over the shape + # definition. For example: + # {"shape": "StringType", "locationName": "Foobar"} + if len(shape_ref) == 1 and 'shape' in shape_ref: + # It's just a shape ref with no member traits, we can avoid + # a .copy(). This is the common case so it's specifically + # called out here. + return self.get_shape_by_name(shape_ref['shape']) + else: + member_traits = shape_ref.copy() + try: + shape_name = member_traits.pop('shape') + except KeyError: + raise InvalidShapeReferenceError( + f"Invalid model, missing shape reference: {shape_ref}" + ) + return self.get_shape_by_name(shape_name, member_traits) + + +class UnresolvableShapeMap: + """A ShapeResolver that will throw ValueErrors when shapes are resolved.""" + + def get_shape_by_name(self, shape_name, member_traits=None): + raise ValueError( + f"Attempted to lookup shape '{shape_name}', but no shape map was provided." + ) + + def resolve_shape_ref(self, shape_ref): + raise ValueError( + f"Attempted to resolve shape '{shape_ref}', but no shape " + f"map was provided." + ) + + +class DenormalizedStructureBuilder: + """Build a StructureShape from a denormalized model. + + This is a convenience builder class that makes it easy to construct + ``StructureShape``s based on a denormalized model. + + It will handle the details of creating unique shape names and creating + the appropriate shape map needed by the ``StructureShape`` class. + + Example usage:: + + builder = DenormalizedStructureBuilder() + shape = builder.with_members({ + 'A': { + 'type': 'structure', + 'members': { + 'B': { + 'type': 'structure', + 'members': { + 'C': { + 'type': 'string', + } + } + } + } + } + }).build_model() + # ``shape`` is now an instance of botocore.model.StructureShape + + :type dict_type: class + :param dict_type: The dictionary type to use, allowing you to opt-in + to using OrderedDict or another dict type. This can + be particularly useful for testing when order + matters, such as for documentation. + + """ + + SCALAR_TYPES = ( + 'string', + 'integer', + 'boolean', + 'blob', + 'float', + 'timestamp', + 'long', + 'double', + 'char', + ) + + def __init__(self, name=None): + self.members = OrderedDict() + self._name_generator = ShapeNameGenerator() + if name is None: + self.name = self._name_generator.new_shape_name('structure') + + def with_members(self, members): + """ + + :type members: dict + :param members: The denormalized members. + + :return: self + + """ + self._members = members + return self + + def build_model(self): + """Build the model based on the provided members. + + :rtype: botocore.model.StructureShape + :return: The built StructureShape object. + + """ + shapes = OrderedDict() + denormalized = { + 'type': 'structure', + 'members': self._members, + } + self._build_model(denormalized, shapes, self.name) + resolver = ShapeResolver(shape_map=shapes) + return StructureShape( + shape_name=self.name, + shape_model=shapes[self.name], + shape_resolver=resolver, + ) + + def _build_model(self, model, shapes, shape_name): + if model['type'] == 'structure': + shapes[shape_name] = self._build_structure(model, shapes) + elif model['type'] == 'list': + shapes[shape_name] = self._build_list(model, shapes) + elif model['type'] == 'map': + shapes[shape_name] = self._build_map(model, shapes) + elif model['type'] in self.SCALAR_TYPES: + shapes[shape_name] = self._build_scalar(model) + else: + raise InvalidShapeError(f"Unknown shape type: {model['type']}") + + def _build_structure(self, model, shapes): + members = OrderedDict() + shape = self._build_initial_shape(model) + shape['members'] = members + + for name, member_model in model.get('members', OrderedDict()).items(): + member_shape_name = self._get_shape_name(member_model) + members[name] = {'shape': member_shape_name} + self._build_model(member_model, shapes, member_shape_name) + return shape + + def _build_list(self, model, shapes): + member_shape_name = self._get_shape_name(model) + shape = self._build_initial_shape(model) + shape['member'] = {'shape': member_shape_name} + self._build_model(model['member'], shapes, member_shape_name) + return shape + + def _build_map(self, model, shapes): + key_shape_name = self._get_shape_name(model['key']) + value_shape_name = self._get_shape_name(model['value']) + shape = self._build_initial_shape(model) + shape['key'] = {'shape': key_shape_name} + shape['value'] = {'shape': value_shape_name} + self._build_model(model['key'], shapes, key_shape_name) + self._build_model(model['value'], shapes, value_shape_name) + return shape + + def _build_initial_shape(self, model): + shape = { + 'type': model['type'], + } + if 'documentation' in model: + shape['documentation'] = model['documentation'] + for attr in Shape.METADATA_ATTRS: + if attr in model: + shape[attr] = model[attr] + return shape + + def _build_scalar(self, model): + return self._build_initial_shape(model) + + def _get_shape_name(self, model): + if 'shape_name' in model: + return model['shape_name'] + else: + return self._name_generator.new_shape_name(model['type']) + + +class ShapeNameGenerator: + """Generate unique shape names for a type. + + This class can be used in conjunction with the DenormalizedStructureBuilder + to generate unique shape names for a given type. + + """ + + def __init__(self): + self._name_cache = defaultdict(int) + + def new_shape_name(self, type_name): + """Generate a unique shape name. + + This method will guarantee a unique shape name each time it is + called with the same type. + + :: + + >>> s = ShapeNameGenerator() + >>> s.new_shape_name('structure') + 'StructureType1' + >>> s.new_shape_name('structure') + 'StructureType2' + >>> s.new_shape_name('list') + 'ListType1' + >>> s.new_shape_name('list') + 'ListType2' + + + :type type_name: string + :param type_name: The type name (structure, list, map, string, etc.) + + :rtype: string + :return: A unique shape name for the given type + + """ + self._name_cache[type_name] += 1 + current_index = self._name_cache[type_name] + return f'{type_name.capitalize()}Type{current_index}' diff --git a/dbtzin/lib/python3.8/site-packages/botocore/monitoring.py b/dbtzin/lib/python3.8/site-packages/botocore/monitoring.py new file mode 100644 index 00000000..71d72302 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/monitoring.py @@ -0,0 +1,586 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import json +import logging +import re +import time + +from botocore.compat import ensure_bytes, ensure_unicode, urlparse +from botocore.retryhandler import EXCEPTION_MAP as RETRYABLE_EXCEPTIONS + +logger = logging.getLogger(__name__) + + +class Monitor: + _EVENTS_TO_REGISTER = [ + 'before-parameter-build', + 'request-created', + 'response-received', + 'after-call', + 'after-call-error', + ] + + def __init__(self, adapter, publisher): + """Abstraction for monitoring clients API calls + + :param adapter: An adapter that takes event emitter events + and produces monitor events + + :param publisher: A publisher for generated monitor events + """ + self._adapter = adapter + self._publisher = publisher + + def register(self, event_emitter): + """Register an event emitter to the monitor""" + for event_to_register in self._EVENTS_TO_REGISTER: + event_emitter.register_last(event_to_register, self.capture) + + def capture(self, event_name, **payload): + """Captures an incoming event from the event emitter + + It will feed an event emitter event to the monitor's adaptor to create + a monitor event and then publish that event to the monitor's publisher. + """ + try: + monitor_event = self._adapter.feed(event_name, payload) + if monitor_event: + self._publisher.publish(monitor_event) + except Exception as e: + logger.debug( + 'Exception %s raised by client monitor in handling event %s', + e, + event_name, + exc_info=True, + ) + + +class MonitorEventAdapter: + def __init__(self, time=time.time): + """Adapts event emitter events to produce monitor events + + :type time: callable + :param time: A callable that produces the current time + """ + self._time = time + + def feed(self, emitter_event_name, emitter_payload): + """Feed an event emitter event to generate a monitor event + + :type emitter_event_name: str + :param emitter_event_name: The name of the event emitted + + :type emitter_payload: dict + :param emitter_payload: The payload to associated to the event + emitted + + :rtype: BaseMonitorEvent + :returns: A monitor event based on the event emitter events + fired + """ + return self._get_handler(emitter_event_name)(**emitter_payload) + + def _get_handler(self, event_name): + return getattr( + self, '_handle_' + event_name.split('.')[0].replace('-', '_') + ) + + def _handle_before_parameter_build(self, model, context, **kwargs): + context['current_api_call_event'] = APICallEvent( + service=model.service_model.service_id, + operation=model.wire_name, + timestamp=self._get_current_time(), + ) + + def _handle_request_created(self, request, **kwargs): + context = request.context + new_attempt_event = context[ + 'current_api_call_event' + ].new_api_call_attempt(timestamp=self._get_current_time()) + new_attempt_event.request_headers = request.headers + new_attempt_event.url = request.url + context['current_api_call_attempt_event'] = new_attempt_event + + def _handle_response_received( + self, parsed_response, context, exception, **kwargs + ): + attempt_event = context.pop('current_api_call_attempt_event') + attempt_event.latency = self._get_latency(attempt_event) + if parsed_response is not None: + attempt_event.http_status_code = parsed_response[ + 'ResponseMetadata' + ]['HTTPStatusCode'] + attempt_event.response_headers = parsed_response[ + 'ResponseMetadata' + ]['HTTPHeaders'] + attempt_event.parsed_error = parsed_response.get('Error') + else: + attempt_event.wire_exception = exception + return attempt_event + + def _handle_after_call(self, context, parsed, **kwargs): + context['current_api_call_event'].retries_exceeded = parsed[ + 'ResponseMetadata' + ].get('MaxAttemptsReached', False) + return self._complete_api_call(context) + + def _handle_after_call_error(self, context, exception, **kwargs): + # If the after-call-error was emitted and the error being raised + # was a retryable connection error, then the retries must have exceeded + # for that exception as this event gets emitted **after** retries + # happen. + context[ + 'current_api_call_event' + ].retries_exceeded = self._is_retryable_exception(exception) + return self._complete_api_call(context) + + def _is_retryable_exception(self, exception): + return isinstance( + exception, tuple(RETRYABLE_EXCEPTIONS['GENERAL_CONNECTION_ERROR']) + ) + + def _complete_api_call(self, context): + call_event = context.pop('current_api_call_event') + call_event.latency = self._get_latency(call_event) + return call_event + + def _get_latency(self, event): + return self._get_current_time() - event.timestamp + + def _get_current_time(self): + return int(self._time() * 1000) + + +class BaseMonitorEvent: + def __init__(self, service, operation, timestamp): + """Base monitor event + + :type service: str + :param service: A string identifying the service associated to + the event + + :type operation: str + :param operation: A string identifying the operation of service + associated to the event + + :type timestamp: int + :param timestamp: Epoch time in milliseconds from when the event began + """ + self.service = service + self.operation = operation + self.timestamp = timestamp + + def __repr__(self): + return f'{self.__class__.__name__}({self.__dict__!r})' + + def __eq__(self, other): + if isinstance(other, self.__class__): + return self.__dict__ == other.__dict__ + return False + + +class APICallEvent(BaseMonitorEvent): + def __init__( + self, + service, + operation, + timestamp, + latency=None, + attempts=None, + retries_exceeded=False, + ): + """Monitor event for a single API call + + This event corresponds to a single client method call, which includes + every HTTP requests attempt made in order to complete the client call + + :type service: str + :param service: A string identifying the service associated to + the event + + :type operation: str + :param operation: A string identifying the operation of service + associated to the event + + :type timestamp: int + :param timestamp: Epoch time in milliseconds from when the event began + + :type latency: int + :param latency: The time in milliseconds to complete the client call + + :type attempts: list + :param attempts: The list of APICallAttempts associated to the + APICall + + :type retries_exceeded: bool + :param retries_exceeded: True if API call exceeded retries. False + otherwise + """ + super().__init__( + service=service, operation=operation, timestamp=timestamp + ) + self.latency = latency + self.attempts = attempts + if attempts is None: + self.attempts = [] + self.retries_exceeded = retries_exceeded + + def new_api_call_attempt(self, timestamp): + """Instantiates APICallAttemptEvent associated to the APICallEvent + + :type timestamp: int + :param timestamp: Epoch time in milliseconds to associate to the + APICallAttemptEvent + """ + attempt_event = APICallAttemptEvent( + service=self.service, operation=self.operation, timestamp=timestamp + ) + self.attempts.append(attempt_event) + return attempt_event + + +class APICallAttemptEvent(BaseMonitorEvent): + def __init__( + self, + service, + operation, + timestamp, + latency=None, + url=None, + http_status_code=None, + request_headers=None, + response_headers=None, + parsed_error=None, + wire_exception=None, + ): + """Monitor event for a single API call attempt + + This event corresponds to a single HTTP request attempt in completing + the entire client method call. + + :type service: str + :param service: A string identifying the service associated to + the event + + :type operation: str + :param operation: A string identifying the operation of service + associated to the event + + :type timestamp: int + :param timestamp: Epoch time in milliseconds from when the HTTP request + started + + :type latency: int + :param latency: The time in milliseconds to complete the HTTP request + whether it succeeded or failed + + :type url: str + :param url: The URL the attempt was sent to + + :type http_status_code: int + :param http_status_code: The HTTP status code of the HTTP response + if there was a response + + :type request_headers: dict + :param request_headers: The HTTP headers sent in making the HTTP + request + + :type response_headers: dict + :param response_headers: The HTTP headers returned in the HTTP response + if there was a response + + :type parsed_error: dict + :param parsed_error: The error parsed if the service returned an + error back + + :type wire_exception: Exception + :param wire_exception: The exception raised in sending the HTTP + request (i.e. ConnectionError) + """ + super().__init__( + service=service, operation=operation, timestamp=timestamp + ) + self.latency = latency + self.url = url + self.http_status_code = http_status_code + self.request_headers = request_headers + self.response_headers = response_headers + self.parsed_error = parsed_error + self.wire_exception = wire_exception + + +class CSMSerializer: + _MAX_CLIENT_ID_LENGTH = 255 + _MAX_EXCEPTION_CLASS_LENGTH = 128 + _MAX_ERROR_CODE_LENGTH = 128 + _MAX_USER_AGENT_LENGTH = 256 + _MAX_MESSAGE_LENGTH = 512 + _RESPONSE_HEADERS_TO_EVENT_ENTRIES = { + 'x-amzn-requestid': 'XAmznRequestId', + 'x-amz-request-id': 'XAmzRequestId', + 'x-amz-id-2': 'XAmzId2', + } + _AUTH_REGEXS = { + 'v4': re.compile( + r'AWS4-HMAC-SHA256 ' + r'Credential=(?P\w+)/\d+/' + r'(?P[a-z0-9-]+)/' + ), + 's3': re.compile(r'AWS (?P\w+):'), + } + _SERIALIZEABLE_EVENT_PROPERTIES = [ + 'service', + 'operation', + 'timestamp', + 'attempts', + 'latency', + 'retries_exceeded', + 'url', + 'request_headers', + 'http_status_code', + 'response_headers', + 'parsed_error', + 'wire_exception', + ] + + def __init__(self, csm_client_id): + """Serializes monitor events to CSM (Client Side Monitoring) format + + :type csm_client_id: str + :param csm_client_id: The application identifier to associate + to the serialized events + """ + self._validate_client_id(csm_client_id) + self.csm_client_id = csm_client_id + + def _validate_client_id(self, csm_client_id): + if len(csm_client_id) > self._MAX_CLIENT_ID_LENGTH: + raise ValueError( + f'The value provided for csm_client_id: {csm_client_id} exceeds ' + f'the maximum length of {self._MAX_CLIENT_ID_LENGTH} characters' + ) + + def serialize(self, event): + """Serializes a monitor event to the CSM format + + :type event: BaseMonitorEvent + :param event: The event to serialize to bytes + + :rtype: bytes + :returns: The CSM serialized form of the event + """ + event_dict = self._get_base_event_dict(event) + event_type = self._get_event_type(event) + event_dict['Type'] = event_type + for attr in self._SERIALIZEABLE_EVENT_PROPERTIES: + value = getattr(event, attr, None) + if value is not None: + getattr(self, '_serialize_' + attr)( + value, event_dict, event_type=event_type + ) + return ensure_bytes(json.dumps(event_dict, separators=(',', ':'))) + + def _get_base_event_dict(self, event): + return { + 'Version': 1, + 'ClientId': self.csm_client_id, + } + + def _serialize_service(self, service, event_dict, **kwargs): + event_dict['Service'] = service + + def _serialize_operation(self, operation, event_dict, **kwargs): + event_dict['Api'] = operation + + def _serialize_timestamp(self, timestamp, event_dict, **kwargs): + event_dict['Timestamp'] = timestamp + + def _serialize_attempts(self, attempts, event_dict, **kwargs): + event_dict['AttemptCount'] = len(attempts) + if attempts: + self._add_fields_from_last_attempt(event_dict, attempts[-1]) + + def _add_fields_from_last_attempt(self, event_dict, last_attempt): + if last_attempt.request_headers: + # It does not matter which attempt to use to grab the region + # for the ApiCall event, but SDKs typically do the last one. + region = self._get_region(last_attempt.request_headers) + if region is not None: + event_dict['Region'] = region + event_dict['UserAgent'] = self._get_user_agent( + last_attempt.request_headers + ) + if last_attempt.http_status_code is not None: + event_dict['FinalHttpStatusCode'] = last_attempt.http_status_code + if last_attempt.parsed_error is not None: + self._serialize_parsed_error( + last_attempt.parsed_error, event_dict, 'ApiCall' + ) + if last_attempt.wire_exception is not None: + self._serialize_wire_exception( + last_attempt.wire_exception, event_dict, 'ApiCall' + ) + + def _serialize_latency(self, latency, event_dict, event_type): + if event_type == 'ApiCall': + event_dict['Latency'] = latency + elif event_type == 'ApiCallAttempt': + event_dict['AttemptLatency'] = latency + + def _serialize_retries_exceeded( + self, retries_exceeded, event_dict, **kwargs + ): + event_dict['MaxRetriesExceeded'] = 1 if retries_exceeded else 0 + + def _serialize_url(self, url, event_dict, **kwargs): + event_dict['Fqdn'] = urlparse(url).netloc + + def _serialize_request_headers( + self, request_headers, event_dict, **kwargs + ): + event_dict['UserAgent'] = self._get_user_agent(request_headers) + if self._is_signed(request_headers): + event_dict['AccessKey'] = self._get_access_key(request_headers) + region = self._get_region(request_headers) + if region is not None: + event_dict['Region'] = region + if 'X-Amz-Security-Token' in request_headers: + event_dict['SessionToken'] = request_headers[ + 'X-Amz-Security-Token' + ] + + def _serialize_http_status_code( + self, http_status_code, event_dict, **kwargs + ): + event_dict['HttpStatusCode'] = http_status_code + + def _serialize_response_headers( + self, response_headers, event_dict, **kwargs + ): + for header, entry in self._RESPONSE_HEADERS_TO_EVENT_ENTRIES.items(): + if header in response_headers: + event_dict[entry] = response_headers[header] + + def _serialize_parsed_error( + self, parsed_error, event_dict, event_type, **kwargs + ): + field_prefix = 'Final' if event_type == 'ApiCall' else '' + event_dict[field_prefix + 'AwsException'] = self._truncate( + parsed_error['Code'], self._MAX_ERROR_CODE_LENGTH + ) + event_dict[field_prefix + 'AwsExceptionMessage'] = self._truncate( + parsed_error['Message'], self._MAX_MESSAGE_LENGTH + ) + + def _serialize_wire_exception( + self, wire_exception, event_dict, event_type, **kwargs + ): + field_prefix = 'Final' if event_type == 'ApiCall' else '' + event_dict[field_prefix + 'SdkException'] = self._truncate( + wire_exception.__class__.__name__, self._MAX_EXCEPTION_CLASS_LENGTH + ) + event_dict[field_prefix + 'SdkExceptionMessage'] = self._truncate( + str(wire_exception), self._MAX_MESSAGE_LENGTH + ) + + def _get_event_type(self, event): + if isinstance(event, APICallEvent): + return 'ApiCall' + elif isinstance(event, APICallAttemptEvent): + return 'ApiCallAttempt' + + def _get_access_key(self, request_headers): + auth_val = self._get_auth_value(request_headers) + _, auth_match = self._get_auth_match(auth_val) + return auth_match.group('access_key') + + def _get_region(self, request_headers): + if not self._is_signed(request_headers): + return None + auth_val = self._get_auth_value(request_headers) + signature_version, auth_match = self._get_auth_match(auth_val) + if signature_version != 'v4': + return None + return auth_match.group('signing_region') + + def _get_user_agent(self, request_headers): + return self._truncate( + ensure_unicode(request_headers.get('User-Agent', '')), + self._MAX_USER_AGENT_LENGTH, + ) + + def _is_signed(self, request_headers): + return 'Authorization' in request_headers + + def _get_auth_value(self, request_headers): + return ensure_unicode(request_headers['Authorization']) + + def _get_auth_match(self, auth_val): + for signature_version, regex in self._AUTH_REGEXS.items(): + match = regex.match(auth_val) + if match: + return signature_version, match + return None, None + + def _truncate(self, text, max_length): + if len(text) > max_length: + logger.debug( + 'Truncating following value to maximum length of ' '%s: %s', + text, + max_length, + ) + return text[:max_length] + return text + + +class SocketPublisher: + _MAX_MONITOR_EVENT_LENGTH = 8 * 1024 + + def __init__(self, socket, host, port, serializer): + """Publishes monitor events to a socket + + :type socket: socket.socket + :param socket: The socket object to use to publish events + + :type host: string + :param host: The host to send events to + + :type port: integer + :param port: The port on the host to send events to + + :param serializer: The serializer to use to serialize the event + to a form that can be published to the socket. This must + have a `serialize()` method that accepts a monitor event + and return bytes + """ + self._socket = socket + self._address = (host, port) + self._serializer = serializer + + def publish(self, event): + """Publishes a specified monitor event + + :type event: BaseMonitorEvent + :param event: The monitor event to be sent + over the publisher's socket to the desired address. + """ + serialized_event = self._serializer.serialize(event) + if len(serialized_event) > self._MAX_MONITOR_EVENT_LENGTH: + logger.debug( + 'Serialized event of size %s exceeds the maximum length ' + 'allowed: %s. Not sending event to socket.', + len(serialized_event), + self._MAX_MONITOR_EVENT_LENGTH, + ) + return + self._socket.sendto(serialized_event, self._address) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/paginate.py b/dbtzin/lib/python3.8/site-packages/botocore/paginate.py new file mode 100644 index 00000000..42e74d08 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/paginate.py @@ -0,0 +1,720 @@ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import base64 +import json +import logging +from itertools import tee + +import jmespath + +from botocore.exceptions import PaginationError +from botocore.utils import merge_dicts, set_value_from_jmespath + +log = logging.getLogger(__name__) + + +class TokenEncoder: + """Encodes dictionaries into opaque strings. + + This for the most part json dumps + base64 encoding, but also supports + having bytes in the dictionary in addition to the types that json can + handle by default. + + This is intended for use in encoding pagination tokens, which in some + cases can be complex structures and / or contain bytes. + """ + + def encode(self, token): + """Encodes a dictionary to an opaque string. + + :type token: dict + :param token: A dictionary containing pagination information, + particularly the service pagination token(s) but also other boto + metadata. + + :rtype: str + :returns: An opaque string + """ + try: + # Try just using json dumps first to avoid having to traverse + # and encode the dict. In 99.9999% of cases this will work. + json_string = json.dumps(token) + except (TypeError, UnicodeDecodeError): + # If normal dumping failed, go through and base64 encode all bytes. + encoded_token, encoded_keys = self._encode(token, []) + + # Save the list of all the encoded key paths. We can safely + # assume that no service will ever use this key. + encoded_token['boto_encoded_keys'] = encoded_keys + + # Now that the bytes are all encoded, dump the json. + json_string = json.dumps(encoded_token) + + # base64 encode the json string to produce an opaque token string. + return base64.b64encode(json_string.encode('utf-8')).decode('utf-8') + + def _encode(self, data, path): + """Encode bytes in given data, keeping track of the path traversed.""" + if isinstance(data, dict): + return self._encode_dict(data, path) + elif isinstance(data, list): + return self._encode_list(data, path) + elif isinstance(data, bytes): + return self._encode_bytes(data, path) + else: + return data, [] + + def _encode_list(self, data, path): + """Encode any bytes in a list, noting the index of what is encoded.""" + new_data = [] + encoded = [] + for i, value in enumerate(data): + new_path = path + [i] + new_value, new_encoded = self._encode(value, new_path) + new_data.append(new_value) + encoded.extend(new_encoded) + return new_data, encoded + + def _encode_dict(self, data, path): + """Encode any bytes in a dict, noting the index of what is encoded.""" + new_data = {} + encoded = [] + for key, value in data.items(): + new_path = path + [key] + new_value, new_encoded = self._encode(value, new_path) + new_data[key] = new_value + encoded.extend(new_encoded) + return new_data, encoded + + def _encode_bytes(self, data, path): + """Base64 encode a byte string.""" + return base64.b64encode(data).decode('utf-8'), [path] + + +class TokenDecoder: + """Decodes token strings back into dictionaries. + + This performs the inverse operation to the TokenEncoder, accepting + opaque strings and decoding them into a useable form. + """ + + def decode(self, token): + """Decodes an opaque string to a dictionary. + + :type token: str + :param token: A token string given by the botocore pagination + interface. + + :rtype: dict + :returns: A dictionary containing pagination information, + particularly the service pagination token(s) but also other boto + metadata. + """ + json_string = base64.b64decode(token.encode('utf-8')).decode('utf-8') + decoded_token = json.loads(json_string) + + # Remove the encoding metadata as it is read since it will no longer + # be needed. + encoded_keys = decoded_token.pop('boto_encoded_keys', None) + if encoded_keys is None: + return decoded_token + else: + return self._decode(decoded_token, encoded_keys) + + def _decode(self, token, encoded_keys): + """Find each encoded value and decode it.""" + for key in encoded_keys: + encoded = self._path_get(token, key) + decoded = base64.b64decode(encoded.encode('utf-8')) + self._path_set(token, key, decoded) + return token + + def _path_get(self, data, path): + """Return the nested data at the given path. + + For instance: + data = {'foo': ['bar', 'baz']} + path = ['foo', 0] + ==> 'bar' + """ + # jmespath isn't used here because it would be difficult to actually + # create the jmespath query when taking all of the unknowns of key + # structure into account. Gross though this is, it is simple and not + # very error prone. + d = data + for step in path: + d = d[step] + return d + + def _path_set(self, data, path, value): + """Set the value of a key in the given data. + + Example: + data = {'foo': ['bar', 'baz']} + path = ['foo', 1] + value = 'bin' + ==> data = {'foo': ['bar', 'bin']} + """ + container = self._path_get(data, path[:-1]) + container[path[-1]] = value + + +class PaginatorModel: + def __init__(self, paginator_config): + self._paginator_config = paginator_config['pagination'] + + def get_paginator(self, operation_name): + try: + single_paginator_config = self._paginator_config[operation_name] + except KeyError: + raise ValueError( + "Paginator for operation does not exist: %s" % operation_name + ) + return single_paginator_config + + +class PageIterator: + """An iterable object to paginate API results. + Please note it is NOT a python iterator. + Use ``iter`` to wrap this as a generator. + """ + + def __init__( + self, + method, + input_token, + output_token, + more_results, + result_keys, + non_aggregate_keys, + limit_key, + max_items, + starting_token, + page_size, + op_kwargs, + ): + self._method = method + self._input_token = input_token + self._output_token = output_token + self._more_results = more_results + self._result_keys = result_keys + self._max_items = max_items + self._limit_key = limit_key + self._starting_token = starting_token + self._page_size = page_size + self._op_kwargs = op_kwargs + self._resume_token = None + self._non_aggregate_key_exprs = non_aggregate_keys + self._non_aggregate_part = {} + self._token_encoder = TokenEncoder() + self._token_decoder = TokenDecoder() + + @property + def result_keys(self): + return self._result_keys + + @property + def resume_token(self): + """Token to specify to resume pagination.""" + return self._resume_token + + @resume_token.setter + def resume_token(self, value): + if not isinstance(value, dict): + raise ValueError("Bad starting token: %s" % value) + + if 'boto_truncate_amount' in value: + token_keys = sorted(self._input_token + ['boto_truncate_amount']) + else: + token_keys = sorted(self._input_token) + dict_keys = sorted(value.keys()) + + if token_keys == dict_keys: + self._resume_token = self._token_encoder.encode(value) + else: + raise ValueError("Bad starting token: %s" % value) + + @property + def non_aggregate_part(self): + return self._non_aggregate_part + + def __iter__(self): + current_kwargs = self._op_kwargs + previous_next_token = None + next_token = {key: None for key in self._input_token} + if self._starting_token is not None: + # If the starting token exists, populate the next_token with the + # values inside it. This ensures that we have the service's + # pagination token on hand if we need to truncate after the + # first response. + next_token = self._parse_starting_token()[0] + # The number of items from result_key we've seen so far. + total_items = 0 + first_request = True + primary_result_key = self.result_keys[0] + starting_truncation = 0 + self._inject_starting_params(current_kwargs) + while True: + response = self._make_request(current_kwargs) + parsed = self._extract_parsed_response(response) + if first_request: + # The first request is handled differently. We could + # possibly have a resume/starting token that tells us where + # to index into the retrieved page. + if self._starting_token is not None: + starting_truncation = self._handle_first_request( + parsed, primary_result_key, starting_truncation + ) + first_request = False + self._record_non_aggregate_key_values(parsed) + else: + # If this isn't the first request, we have already sliced into + # the first request and had to make additional requests after. + # We no longer need to add this to truncation. + starting_truncation = 0 + current_response = primary_result_key.search(parsed) + if current_response is None: + current_response = [] + num_current_response = len(current_response) + truncate_amount = 0 + if self._max_items is not None: + truncate_amount = ( + total_items + num_current_response - self._max_items + ) + if truncate_amount > 0: + self._truncate_response( + parsed, + primary_result_key, + truncate_amount, + starting_truncation, + next_token, + ) + yield response + break + else: + yield response + total_items += num_current_response + next_token = self._get_next_token(parsed) + if all(t is None for t in next_token.values()): + break + if ( + self._max_items is not None + and total_items == self._max_items + ): + # We're on a page boundary so we can set the current + # next token to be the resume token. + self.resume_token = next_token + break + if ( + previous_next_token is not None + and previous_next_token == next_token + ): + message = ( + f"The same next token was received " + f"twice: {next_token}" + ) + raise PaginationError(message=message) + self._inject_token_into_kwargs(current_kwargs, next_token) + previous_next_token = next_token + + def search(self, expression): + """Applies a JMESPath expression to a paginator + + Each page of results is searched using the provided JMESPath + expression. If the result is not a list, it is yielded + directly. If the result is a list, each element in the result + is yielded individually (essentially implementing a flatmap in + which the JMESPath search is the mapping function). + + :type expression: str + :param expression: JMESPath expression to apply to each page. + + :return: Returns an iterator that yields the individual + elements of applying a JMESPath expression to each page of + results. + """ + compiled = jmespath.compile(expression) + for page in self: + results = compiled.search(page) + if isinstance(results, list): + yield from results + else: + # Yield result directly if it is not a list. + yield results + + def _make_request(self, current_kwargs): + return self._method(**current_kwargs) + + def _extract_parsed_response(self, response): + return response + + def _record_non_aggregate_key_values(self, response): + non_aggregate_keys = {} + for expression in self._non_aggregate_key_exprs: + result = expression.search(response) + set_value_from_jmespath( + non_aggregate_keys, expression.expression, result + ) + self._non_aggregate_part = non_aggregate_keys + + def _inject_starting_params(self, op_kwargs): + # If the user has specified a starting token we need to + # inject that into the operation's kwargs. + if self._starting_token is not None: + # Don't need to do anything special if there is no starting + # token specified. + next_token = self._parse_starting_token()[0] + self._inject_token_into_kwargs(op_kwargs, next_token) + if self._page_size is not None: + # Pass the page size as the parameter name for limiting + # page size, also known as the limit_key. + op_kwargs[self._limit_key] = self._page_size + + def _inject_token_into_kwargs(self, op_kwargs, next_token): + for name, token in next_token.items(): + if (token is not None) and (token != 'None'): + op_kwargs[name] = token + elif name in op_kwargs: + del op_kwargs[name] + + def _handle_first_request( + self, parsed, primary_result_key, starting_truncation + ): + # If the payload is an array or string, we need to slice into it + # and only return the truncated amount. + starting_truncation = self._parse_starting_token()[1] + all_data = primary_result_key.search(parsed) + if isinstance(all_data, (list, str)): + data = all_data[starting_truncation:] + else: + data = None + set_value_from_jmespath(parsed, primary_result_key.expression, data) + # We also need to truncate any secondary result keys + # because they were not truncated in the previous last + # response. + for token in self.result_keys: + if token == primary_result_key: + continue + sample = token.search(parsed) + if isinstance(sample, list): + empty_value = [] + elif isinstance(sample, str): + empty_value = '' + elif isinstance(sample, (int, float)): + empty_value = 0 + else: + empty_value = None + set_value_from_jmespath(parsed, token.expression, empty_value) + return starting_truncation + + def _truncate_response( + self, + parsed, + primary_result_key, + truncate_amount, + starting_truncation, + next_token, + ): + original = primary_result_key.search(parsed) + if original is None: + original = [] + amount_to_keep = len(original) - truncate_amount + truncated = original[:amount_to_keep] + set_value_from_jmespath( + parsed, primary_result_key.expression, truncated + ) + # The issue here is that even though we know how much we've truncated + # we need to account for this globally including any starting + # left truncation. For example: + # Raw response: [0,1,2,3] + # Starting index: 1 + # Max items: 1 + # Starting left truncation: [1, 2, 3] + # End right truncation for max items: [1] + # However, even though we only kept 1, this is post + # left truncation so the next starting index should be 2, not 1 + # (left_truncation + amount_to_keep). + next_token['boto_truncate_amount'] = ( + amount_to_keep + starting_truncation + ) + self.resume_token = next_token + + def _get_next_token(self, parsed): + if self._more_results is not None: + if not self._more_results.search(parsed): + return {} + next_tokens = {} + for output_token, input_key in zip( + self._output_token, self._input_token + ): + next_token = output_token.search(parsed) + # We do not want to include any empty strings as actual tokens. + # Treat them as None. + if next_token: + next_tokens[input_key] = next_token + else: + next_tokens[input_key] = None + return next_tokens + + def result_key_iters(self): + teed_results = tee(self, len(self.result_keys)) + return [ + ResultKeyIterator(i, result_key) + for i, result_key in zip(teed_results, self.result_keys) + ] + + def build_full_result(self): + complete_result = {} + for response in self: + page = response + # We want to try to catch operation object pagination + # and format correctly for those. They come in the form + # of a tuple of two elements: (http_response, parsed_responsed). + # We want the parsed_response as that is what the page iterator + # uses. We can remove it though once operation objects are removed. + if isinstance(response, tuple) and len(response) == 2: + page = response[1] + # We're incrementally building the full response page + # by page. For each page in the response we need to + # inject the necessary components from the page + # into the complete_result. + for result_expression in self.result_keys: + # In order to incrementally update a result key + # we need to search the existing value from complete_result, + # then we need to search the _current_ page for the + # current result key value. Then we append the current + # value onto the existing value, and re-set that value + # as the new value. + result_value = result_expression.search(page) + if result_value is None: + continue + existing_value = result_expression.search(complete_result) + if existing_value is None: + # Set the initial result + set_value_from_jmespath( + complete_result, + result_expression.expression, + result_value, + ) + continue + # Now both result_value and existing_value contain something + if isinstance(result_value, list): + existing_value.extend(result_value) + elif isinstance(result_value, (int, float, str)): + # Modify the existing result with the sum or concatenation + set_value_from_jmespath( + complete_result, + result_expression.expression, + existing_value + result_value, + ) + merge_dicts(complete_result, self.non_aggregate_part) + if self.resume_token is not None: + complete_result['NextToken'] = self.resume_token + return complete_result + + def _parse_starting_token(self): + if self._starting_token is None: + return None + + # The starting token is a dict passed as a base64 encoded string. + next_token = self._starting_token + try: + next_token = self._token_decoder.decode(next_token) + index = 0 + if 'boto_truncate_amount' in next_token: + index = next_token.get('boto_truncate_amount') + del next_token['boto_truncate_amount'] + except (ValueError, TypeError): + next_token, index = self._parse_starting_token_deprecated() + return next_token, index + + def _parse_starting_token_deprecated(self): + """ + This handles parsing of old style starting tokens, and attempts to + coerce them into the new style. + """ + log.debug( + "Attempting to fall back to old starting token parser. For " + "token: %s" % self._starting_token + ) + if self._starting_token is None: + return None + + parts = self._starting_token.split('___') + next_token = [] + index = 0 + if len(parts) == len(self._input_token) + 1: + try: + index = int(parts.pop()) + except ValueError: + # This doesn't look like a valid old-style token, so we're + # passing it along as an opaque service token. + parts = [self._starting_token] + + for part in parts: + if part == 'None': + next_token.append(None) + else: + next_token.append(part) + return self._convert_deprecated_starting_token(next_token), index + + def _convert_deprecated_starting_token(self, deprecated_token): + """ + This attempts to convert a deprecated starting token into the new + style. + """ + len_deprecated_token = len(deprecated_token) + len_input_token = len(self._input_token) + if len_deprecated_token > len_input_token: + raise ValueError("Bad starting token: %s" % self._starting_token) + elif len_deprecated_token < len_input_token: + log.debug( + "Old format starting token does not contain all input " + "tokens. Setting the rest, in order, as None." + ) + for i in range(len_input_token - len_deprecated_token): + deprecated_token.append(None) + return dict(zip(self._input_token, deprecated_token)) + + +class Paginator: + PAGE_ITERATOR_CLS = PageIterator + + def __init__(self, method, pagination_config, model): + self._model = model + self._method = method + self._pagination_cfg = pagination_config + self._output_token = self._get_output_tokens(self._pagination_cfg) + self._input_token = self._get_input_tokens(self._pagination_cfg) + self._more_results = self._get_more_results_token(self._pagination_cfg) + self._non_aggregate_keys = self._get_non_aggregate_keys( + self._pagination_cfg + ) + self._result_keys = self._get_result_keys(self._pagination_cfg) + self._limit_key = self._get_limit_key(self._pagination_cfg) + + @property + def result_keys(self): + return self._result_keys + + def _get_non_aggregate_keys(self, config): + keys = [] + for key in config.get('non_aggregate_keys', []): + keys.append(jmespath.compile(key)) + return keys + + def _get_output_tokens(self, config): + output = [] + output_token = config['output_token'] + if not isinstance(output_token, list): + output_token = [output_token] + for config in output_token: + output.append(jmespath.compile(config)) + return output + + def _get_input_tokens(self, config): + input_token = self._pagination_cfg['input_token'] + if not isinstance(input_token, list): + input_token = [input_token] + return input_token + + def _get_more_results_token(self, config): + more_results = config.get('more_results') + if more_results is not None: + return jmespath.compile(more_results) + + def _get_result_keys(self, config): + result_key = config.get('result_key') + if result_key is not None: + if not isinstance(result_key, list): + result_key = [result_key] + result_key = [jmespath.compile(rk) for rk in result_key] + return result_key + + def _get_limit_key(self, config): + return config.get('limit_key') + + def paginate(self, **kwargs): + """Create paginator object for an operation. + + This returns an iterable object. Iterating over + this object will yield a single page of a response + at a time. + + """ + page_params = self._extract_paging_params(kwargs) + return self.PAGE_ITERATOR_CLS( + self._method, + self._input_token, + self._output_token, + self._more_results, + self._result_keys, + self._non_aggregate_keys, + self._limit_key, + page_params['MaxItems'], + page_params['StartingToken'], + page_params['PageSize'], + kwargs, + ) + + def _extract_paging_params(self, kwargs): + pagination_config = kwargs.pop('PaginationConfig', {}) + max_items = pagination_config.get('MaxItems', None) + if max_items is not None: + max_items = int(max_items) + page_size = pagination_config.get('PageSize', None) + if page_size is not None: + if self._limit_key is None: + raise PaginationError( + message="PageSize parameter is not supported for the " + "pagination interface for this operation." + ) + input_members = self._model.input_shape.members + limit_key_shape = input_members.get(self._limit_key) + if limit_key_shape.type_name == 'string': + if not isinstance(page_size, str): + page_size = str(page_size) + else: + page_size = int(page_size) + return { + 'MaxItems': max_items, + 'StartingToken': pagination_config.get('StartingToken', None), + 'PageSize': page_size, + } + + +class ResultKeyIterator: + """Iterates over the results of paginated responses. + + Each iterator is associated with a single result key. + Iterating over this object will give you each element in + the result key list. + + :param pages_iterator: An iterator that will give you + pages of results (a ``PageIterator`` class). + :param result_key: The JMESPath expression representing + the result key. + + """ + + def __init__(self, pages_iterator, result_key): + self._pages_iterator = pages_iterator + self.result_key = result_key + + def __iter__(self): + for page in self._pages_iterator: + results = self.result_key.search(page) + if results is None: + results = [] + yield from results diff --git a/dbtzin/lib/python3.8/site-packages/botocore/parsers.py b/dbtzin/lib/python3.8/site-packages/botocore/parsers.py new file mode 100644 index 00000000..3905757c --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/parsers.py @@ -0,0 +1,1122 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +"""Response parsers for the various protocol types. + +The module contains classes that can take an HTTP response, and given +an output shape, parse the response into a dict according to the +rules in the output shape. + +There are many similarities amongst the different protocols with regard +to response parsing, and the code is structured in a way to avoid +code duplication when possible. The diagram below is a diagram +showing the inheritance hierarchy of the response classes. + +:: + + + + +--------------+ + |ResponseParser| + +--------------+ + ^ ^ ^ + +--------------------+ | +-------------------+ + | | | + +----------+----------+ +------+-------+ +-------+------+ + |BaseXMLResponseParser| |BaseRestParser| |BaseJSONParser| + +---------------------+ +--------------+ +--------------+ + ^ ^ ^ ^ ^ ^ + | | | | | | + | | | | | | + | ++----------+-+ +-+-----------++ | + | |RestXMLParser| |RestJSONParser| | + +-----+-----+ +-------------+ +--------------+ +----+-----+ + |QueryParser| |JSONParser| + +-----------+ +----------+ + + +The diagram above shows that there is a base class, ``ResponseParser`` that +contains logic that is similar amongst all the different protocols (``query``, +``json``, ``rest-json``, ``rest-xml``). Amongst the various services there +is shared logic that can be grouped several ways: + +* The ``query`` and ``rest-xml`` both have XML bodies that are parsed in the + same way. +* The ``json`` and ``rest-json`` protocols both have JSON bodies that are + parsed in the same way. +* The ``rest-json`` and ``rest-xml`` protocols have additional attributes + besides body parameters that are parsed the same (headers, query string, + status code). + +This is reflected in the class diagram above. The ``BaseXMLResponseParser`` +and the BaseJSONParser contain logic for parsing the XML/JSON body, +and the BaseRestParser contains logic for parsing out attributes that +come from other parts of the HTTP response. Classes like the +``RestXMLParser`` inherit from the ``BaseXMLResponseParser`` to get the +XML body parsing logic and the ``BaseRestParser`` to get the HTTP +header/status code/query string parsing. + +Additionally, there are event stream parsers that are used by the other parsers +to wrap streaming bodies that represent a stream of events. The +BaseEventStreamParser extends from ResponseParser and defines the logic for +parsing values from the headers and payload of a message from the underlying +binary encoding protocol. Currently, event streams support parsing bodies +encoded as JSON and XML through the following hierarchy. + + + +--------------+ + |ResponseParser| + +--------------+ + ^ ^ ^ + +--------------------+ | +------------------+ + | | | + +----------+----------+ +----------+----------+ +-------+------+ + |BaseXMLResponseParser| |BaseEventStreamParser| |BaseJSONParser| + +---------------------+ +---------------------+ +--------------+ + ^ ^ ^ ^ + | | | | + | | | | + +-+----------------+-+ +-+-----------------+-+ + |EventStreamXMLParser| |EventStreamJSONParser| + +--------------------+ +---------------------+ + +Return Values +============= + +Each call to ``parse()`` returns a dict has this form:: + + Standard Response + + { + "ResponseMetadata": {"RequestId": } + + } + + Error response + + { + "ResponseMetadata": {"RequestId": } + "Error": { + "Code": , + "Message": , + "Type": , + + } + } + +""" +import base64 +import http.client +import json +import logging +import re + +from botocore.compat import ETree, XMLParseError +from botocore.eventstream import EventStream, NoInitialResponseError +from botocore.utils import ( + is_json_value_header, + lowercase_dict, + merge_dicts, + parse_timestamp, +) + +LOG = logging.getLogger(__name__) + +DEFAULT_TIMESTAMP_PARSER = parse_timestamp + + +class ResponseParserFactory: + def __init__(self): + self._defaults = {} + + def set_parser_defaults(self, **kwargs): + """Set default arguments when a parser instance is created. + + You can specify any kwargs that are allowed by a ResponseParser + class. There are currently two arguments: + + * timestamp_parser - A callable that can parse a timestamp string + * blob_parser - A callable that can parse a blob type + + """ + self._defaults.update(kwargs) + + def create_parser(self, protocol_name): + parser_cls = PROTOCOL_PARSERS[protocol_name] + return parser_cls(**self._defaults) + + +def create_parser(protocol): + return ResponseParserFactory().create_parser(protocol) + + +def _text_content(func): + # This decorator hides the difference between + # an XML node with text or a plain string. It's used + # to ensure that scalar processing operates only on text + # strings, which allows the same scalar handlers to be used + # for XML nodes from the body and HTTP headers. + def _get_text_content(self, shape, node_or_string): + if hasattr(node_or_string, 'text'): + text = node_or_string.text + if text is None: + # If an XML node is empty , + # we want to parse that as an empty string, + # not as a null/None value. + text = '' + else: + text = node_or_string + return func(self, shape, text) + + return _get_text_content + + +class ResponseParserError(Exception): + pass + + +class ResponseParser: + """Base class for response parsing. + + This class represents the interface that all ResponseParsers for the + various protocols must implement. + + This class will take an HTTP response and a model shape and parse the + HTTP response into a dictionary. + + There is a single public method exposed: ``parse``. See the ``parse`` + docstring for more info. + + """ + + DEFAULT_ENCODING = 'utf-8' + EVENT_STREAM_PARSER_CLS = None + + def __init__(self, timestamp_parser=None, blob_parser=None): + if timestamp_parser is None: + timestamp_parser = DEFAULT_TIMESTAMP_PARSER + self._timestamp_parser = timestamp_parser + if blob_parser is None: + blob_parser = self._default_blob_parser + self._blob_parser = blob_parser + self._event_stream_parser = None + if self.EVENT_STREAM_PARSER_CLS is not None: + self._event_stream_parser = self.EVENT_STREAM_PARSER_CLS( + timestamp_parser, blob_parser + ) + + def _default_blob_parser(self, value): + # Blobs are always returned as bytes type (this matters on python3). + # We don't decode this to a str because it's entirely possible that the + # blob contains binary data that actually can't be decoded. + return base64.b64decode(value) + + def parse(self, response, shape): + """Parse the HTTP response given a shape. + + :param response: The HTTP response dictionary. This is a dictionary + that represents the HTTP request. The dictionary must have the + following keys, ``body``, ``headers``, and ``status_code``. + + :param shape: The model shape describing the expected output. + :return: Returns a dictionary representing the parsed response + described by the model. In addition to the shape described from + the model, each response will also have a ``ResponseMetadata`` + which contains metadata about the response, which contains at least + two keys containing ``RequestId`` and ``HTTPStatusCode``. Some + responses may populate additional keys, but ``RequestId`` will + always be present. + + """ + LOG.debug('Response headers: %r', response['headers']) + LOG.debug('Response body:\n%r', response['body']) + if response['status_code'] >= 301: + if self._is_generic_error_response(response): + parsed = self._do_generic_error_parse(response) + elif self._is_modeled_error_shape(shape): + parsed = self._do_modeled_error_parse(response, shape) + # We don't want to decorate the modeled fields with metadata + return parsed + else: + parsed = self._do_error_parse(response, shape) + else: + parsed = self._do_parse(response, shape) + + # We don't want to decorate event stream responses with metadata + if shape and shape.serialization.get('eventstream'): + return parsed + + # Add ResponseMetadata if it doesn't exist and inject the HTTP + # status code and headers from the response. + if isinstance(parsed, dict): + response_metadata = parsed.get('ResponseMetadata', {}) + response_metadata['HTTPStatusCode'] = response['status_code'] + # Ensure that the http header keys are all lower cased. Older + # versions of urllib3 (< 1.11) would unintentionally do this for us + # (see urllib3#633). We need to do this conversion manually now. + headers = response['headers'] + response_metadata['HTTPHeaders'] = lowercase_dict(headers) + parsed['ResponseMetadata'] = response_metadata + self._add_checksum_response_metadata(response, response_metadata) + return parsed + + def _add_checksum_response_metadata(self, response, response_metadata): + checksum_context = response.get('context', {}).get('checksum', {}) + algorithm = checksum_context.get('response_algorithm') + if algorithm: + response_metadata['ChecksumAlgorithm'] = algorithm + + def _is_modeled_error_shape(self, shape): + return shape is not None and shape.metadata.get('exception', False) + + def _is_generic_error_response(self, response): + # There are times when a service will respond with a generic + # error response such as: + # 'Http/1.1 Service Unavailable' + # + # This can also happen if you're going through a proxy. + # In this case the protocol specific _do_error_parse will either + # fail to parse the response (in the best case) or silently succeed + # and treat the HTML above as an XML response and return + # non sensical parsed data. + # To prevent this case from happening we first need to check + # whether or not this response looks like the generic response. + if response['status_code'] >= 500: + if 'body' not in response or response['body'] is None: + return True + + body = response['body'].strip() + return body.startswith(b'') or not body + + def _do_generic_error_parse(self, response): + # There's not really much we can do when we get a generic + # html response. + LOG.debug( + "Received a non protocol specific error response from the " + "service, unable to populate error code and message." + ) + return { + 'Error': { + 'Code': str(response['status_code']), + 'Message': http.client.responses.get( + response['status_code'], '' + ), + }, + 'ResponseMetadata': {}, + } + + def _do_parse(self, response, shape): + raise NotImplementedError("%s._do_parse" % self.__class__.__name__) + + def _do_error_parse(self, response, shape): + raise NotImplementedError(f"{self.__class__.__name__}._do_error_parse") + + def _do_modeled_error_parse(self, response, shape, parsed): + raise NotImplementedError( + f"{self.__class__.__name__}._do_modeled_error_parse" + ) + + def _parse_shape(self, shape, node): + handler = getattr( + self, f'_handle_{shape.type_name}', self._default_handle + ) + return handler(shape, node) + + def _handle_list(self, shape, node): + # Enough implementations share list serialization that it's moved + # up here in the base class. + parsed = [] + member_shape = shape.member + for item in node: + parsed.append(self._parse_shape(member_shape, item)) + return parsed + + def _default_handle(self, shape, value): + return value + + def _create_event_stream(self, response, shape): + parser = self._event_stream_parser + name = response['context'].get('operation_name') + return EventStream(response['body'], shape, parser, name) + + def _get_first_key(self, value): + return list(value)[0] + + def _has_unknown_tagged_union_member(self, shape, value): + if shape.is_tagged_union: + cleaned_value = value.copy() + cleaned_value.pop("__type", None) + if len(cleaned_value) != 1: + error_msg = ( + "Invalid service response: %s must have one and only " + "one member set." + ) + raise ResponseParserError(error_msg % shape.name) + tag = self._get_first_key(cleaned_value) + if tag not in shape.members: + msg = ( + "Received a tagged union response with member " + "unknown to client: %s. Please upgrade SDK for full " + "response support." + ) + LOG.info(msg % tag) + return True + return False + + def _handle_unknown_tagged_union_member(self, tag): + return {'SDK_UNKNOWN_MEMBER': {'name': tag}} + + +class BaseXMLResponseParser(ResponseParser): + def __init__(self, timestamp_parser=None, blob_parser=None): + super().__init__(timestamp_parser, blob_parser) + self._namespace_re = re.compile('{.*}') + + def _handle_map(self, shape, node): + parsed = {} + key_shape = shape.key + value_shape = shape.value + key_location_name = key_shape.serialization.get('name') or 'key' + value_location_name = value_shape.serialization.get('name') or 'value' + if shape.serialization.get('flattened') and not isinstance(node, list): + node = [node] + for keyval_node in node: + for single_pair in keyval_node: + # Within each there's a and a + tag_name = self._node_tag(single_pair) + if tag_name == key_location_name: + key_name = self._parse_shape(key_shape, single_pair) + elif tag_name == value_location_name: + val_name = self._parse_shape(value_shape, single_pair) + else: + raise ResponseParserError("Unknown tag: %s" % tag_name) + parsed[key_name] = val_name + return parsed + + def _node_tag(self, node): + return self._namespace_re.sub('', node.tag) + + def _handle_list(self, shape, node): + # When we use _build_name_to_xml_node, repeated elements are aggregated + # into a list. However, we can't tell the difference between a scalar + # value and a single element flattened list. So before calling the + # real _handle_list, we know that "node" should actually be a list if + # it's flattened, and if it's not, then we make it a one element list. + if shape.serialization.get('flattened') and not isinstance(node, list): + node = [node] + return super()._handle_list(shape, node) + + def _handle_structure(self, shape, node): + parsed = {} + members = shape.members + if shape.metadata.get('exception', False): + node = self._get_error_root(node) + xml_dict = self._build_name_to_xml_node(node) + if self._has_unknown_tagged_union_member(shape, xml_dict): + tag = self._get_first_key(xml_dict) + return self._handle_unknown_tagged_union_member(tag) + for member_name in members: + member_shape = members[member_name] + if ( + 'location' in member_shape.serialization + or member_shape.serialization.get('eventheader') + ): + # All members with locations have already been handled, + # so we don't need to parse these members. + continue + xml_name = self._member_key_name(member_shape, member_name) + member_node = xml_dict.get(xml_name) + if member_node is not None: + parsed[member_name] = self._parse_shape( + member_shape, member_node + ) + elif member_shape.serialization.get('xmlAttribute'): + attribs = {} + location_name = member_shape.serialization['name'] + for key, value in node.attrib.items(): + new_key = self._namespace_re.sub( + location_name.split(':')[0] + ':', key + ) + attribs[new_key] = value + if location_name in attribs: + parsed[member_name] = attribs[location_name] + return parsed + + def _get_error_root(self, original_root): + if self._node_tag(original_root) == 'ErrorResponse': + for child in original_root: + if self._node_tag(child) == 'Error': + return child + return original_root + + def _member_key_name(self, shape, member_name): + # This method is needed because we have to special case flattened list + # with a serialization name. If this is the case we use the + # locationName from the list's member shape as the key name for the + # surrounding structure. + if shape.type_name == 'list' and shape.serialization.get('flattened'): + list_member_serialized_name = shape.member.serialization.get( + 'name' + ) + if list_member_serialized_name is not None: + return list_member_serialized_name + serialized_name = shape.serialization.get('name') + if serialized_name is not None: + return serialized_name + return member_name + + def _build_name_to_xml_node(self, parent_node): + # If the parent node is actually a list. We should not be trying + # to serialize it to a dictionary. Instead, return the first element + # in the list. + if isinstance(parent_node, list): + return self._build_name_to_xml_node(parent_node[0]) + xml_dict = {} + for item in parent_node: + key = self._node_tag(item) + if key in xml_dict: + # If the key already exists, the most natural + # way to handle this is to aggregate repeated + # keys into a single list. + # 12 -> {'foo': [Node(1), Node(2)]} + if isinstance(xml_dict[key], list): + xml_dict[key].append(item) + else: + # Convert from a scalar to a list. + xml_dict[key] = [xml_dict[key], item] + else: + xml_dict[key] = item + return xml_dict + + def _parse_xml_string_to_dom(self, xml_string): + try: + parser = ETree.XMLParser( + target=ETree.TreeBuilder(), encoding=self.DEFAULT_ENCODING + ) + parser.feed(xml_string) + root = parser.close() + except XMLParseError as e: + raise ResponseParserError( + "Unable to parse response (%s), " + "invalid XML received. Further retries may succeed:\n%s" + % (e, xml_string) + ) + return root + + def _replace_nodes(self, parsed): + for key, value in parsed.items(): + if list(value): + sub_dict = self._build_name_to_xml_node(value) + parsed[key] = self._replace_nodes(sub_dict) + else: + parsed[key] = value.text + return parsed + + @_text_content + def _handle_boolean(self, shape, text): + if text == 'true': + return True + else: + return False + + @_text_content + def _handle_float(self, shape, text): + return float(text) + + @_text_content + def _handle_timestamp(self, shape, text): + return self._timestamp_parser(text) + + @_text_content + def _handle_integer(self, shape, text): + return int(text) + + @_text_content + def _handle_string(self, shape, text): + return text + + @_text_content + def _handle_blob(self, shape, text): + return self._blob_parser(text) + + _handle_character = _handle_string + _handle_double = _handle_float + _handle_long = _handle_integer + + +class QueryParser(BaseXMLResponseParser): + def _do_error_parse(self, response, shape): + xml_contents = response['body'] + root = self._parse_xml_string_to_dom(xml_contents) + parsed = self._build_name_to_xml_node(root) + self._replace_nodes(parsed) + # Once we've converted xml->dict, we need to make one or two + # more adjustments to extract nested errors and to be consistent + # with ResponseMetadata for non-error responses: + # 1. {"Errors": {"Error": {...}}} -> {"Error": {...}} + # 2. {"RequestId": "id"} -> {"ResponseMetadata": {"RequestId": "id"}} + if 'Errors' in parsed: + parsed.update(parsed.pop('Errors')) + if 'RequestId' in parsed: + parsed['ResponseMetadata'] = {'RequestId': parsed.pop('RequestId')} + return parsed + + def _do_modeled_error_parse(self, response, shape): + return self._parse_body_as_xml(response, shape, inject_metadata=False) + + def _do_parse(self, response, shape): + return self._parse_body_as_xml(response, shape, inject_metadata=True) + + def _parse_body_as_xml(self, response, shape, inject_metadata=True): + xml_contents = response['body'] + root = self._parse_xml_string_to_dom(xml_contents) + parsed = {} + if shape is not None: + start = root + if 'resultWrapper' in shape.serialization: + start = self._find_result_wrapped_shape( + shape.serialization['resultWrapper'], root + ) + parsed = self._parse_shape(shape, start) + if inject_metadata: + self._inject_response_metadata(root, parsed) + return parsed + + def _find_result_wrapped_shape(self, element_name, xml_root_node): + mapping = self._build_name_to_xml_node(xml_root_node) + return mapping[element_name] + + def _inject_response_metadata(self, node, inject_into): + mapping = self._build_name_to_xml_node(node) + child_node = mapping.get('ResponseMetadata') + if child_node is not None: + sub_mapping = self._build_name_to_xml_node(child_node) + for key, value in sub_mapping.items(): + sub_mapping[key] = value.text + inject_into['ResponseMetadata'] = sub_mapping + + +class EC2QueryParser(QueryParser): + def _inject_response_metadata(self, node, inject_into): + mapping = self._build_name_to_xml_node(node) + child_node = mapping.get('requestId') + if child_node is not None: + inject_into['ResponseMetadata'] = {'RequestId': child_node.text} + + def _do_error_parse(self, response, shape): + # EC2 errors look like: + # + # + # + # InvalidInstanceID.Malformed + # Invalid id: "1343124" + # + # + # 12345 + # + # This is different from QueryParser in that it's RequestID, + # not RequestId + original = super()._do_error_parse(response, shape) + if 'RequestID' in original: + original['ResponseMetadata'] = { + 'RequestId': original.pop('RequestID') + } + return original + + def _get_error_root(self, original_root): + for child in original_root: + if self._node_tag(child) == 'Errors': + for errors_child in child: + if self._node_tag(errors_child) == 'Error': + return errors_child + return original_root + + +class BaseJSONParser(ResponseParser): + def _handle_structure(self, shape, value): + final_parsed = {} + if shape.is_document_type: + final_parsed = value + else: + member_shapes = shape.members + if value is None: + # If the comes across the wire as "null" (None in python), + # we should be returning this unchanged, instead of as an + # empty dict. + return None + final_parsed = {} + if self._has_unknown_tagged_union_member(shape, value): + tag = self._get_first_key(value) + return self._handle_unknown_tagged_union_member(tag) + for member_name in member_shapes: + member_shape = member_shapes[member_name] + json_name = member_shape.serialization.get('name', member_name) + raw_value = value.get(json_name) + if raw_value is not None: + final_parsed[member_name] = self._parse_shape( + member_shapes[member_name], raw_value + ) + return final_parsed + + def _handle_map(self, shape, value): + parsed = {} + key_shape = shape.key + value_shape = shape.value + for key, value in value.items(): + actual_key = self._parse_shape(key_shape, key) + actual_value = self._parse_shape(value_shape, value) + parsed[actual_key] = actual_value + return parsed + + def _handle_blob(self, shape, value): + return self._blob_parser(value) + + def _handle_timestamp(self, shape, value): + return self._timestamp_parser(value) + + def _do_error_parse(self, response, shape): + body = self._parse_body_as_json(response['body']) + error = {"Error": {"Message": '', "Code": ''}, "ResponseMetadata": {}} + headers = response['headers'] + # Error responses can have slightly different structures for json. + # The basic structure is: + # + # {"__type":"ConnectClientException", + # "message":"The error message."} + + # The error message can either come in the 'message' or 'Message' key + # so we need to check for both. + error['Error']['Message'] = body.get( + 'message', body.get('Message', '') + ) + # if the message did not contain an error code + # include the response status code + response_code = response.get('status_code') + + code = body.get('__type', response_code and str(response_code)) + if code is not None: + # code has a couple forms as well: + # * "com.aws.dynamodb.vAPI#ProvisionedThroughputExceededException" + # * "ResourceNotFoundException" + if '#' in code: + code = code.rsplit('#', 1)[1] + if 'x-amzn-query-error' in headers: + code = self._do_query_compatible_error_parse( + code, headers, error + ) + error['Error']['Code'] = code + self._inject_response_metadata(error, response['headers']) + return error + + def _do_query_compatible_error_parse(self, code, headers, error): + """ + Error response may contain an x-amzn-query-error header to translate + errors codes from former `query` services into `json`. We use this to + do our lookup in the errorfactory for modeled errors. + """ + query_error = headers['x-amzn-query-error'] + query_error_components = query_error.split(';') + + if len(query_error_components) == 2 and query_error_components[0]: + error['Error']['QueryErrorCode'] = code + error['Error']['Type'] = query_error_components[1] + return query_error_components[0] + return code + + def _inject_response_metadata(self, parsed, headers): + if 'x-amzn-requestid' in headers: + parsed.setdefault('ResponseMetadata', {})['RequestId'] = headers[ + 'x-amzn-requestid' + ] + + def _parse_body_as_json(self, body_contents): + if not body_contents: + return {} + body = body_contents.decode(self.DEFAULT_ENCODING) + try: + original_parsed = json.loads(body) + return original_parsed + except ValueError: + # if the body cannot be parsed, include + # the literal string as the message + return {'message': body} + + +class BaseEventStreamParser(ResponseParser): + def _do_parse(self, response, shape): + final_parsed = {} + if shape.serialization.get('eventstream'): + event_type = response['headers'].get(':event-type') + event_shape = shape.members.get(event_type) + if event_shape: + final_parsed[event_type] = self._do_parse( + response, event_shape + ) + else: + self._parse_non_payload_attrs( + response, shape, shape.members, final_parsed + ) + self._parse_payload(response, shape, shape.members, final_parsed) + return final_parsed + + def _do_error_parse(self, response, shape): + exception_type = response['headers'].get(':exception-type') + exception_shape = shape.members.get(exception_type) + if exception_shape is not None: + original_parsed = self._initial_body_parse(response['body']) + body = self._parse_shape(exception_shape, original_parsed) + error = { + 'Error': { + 'Code': exception_type, + 'Message': body.get('Message', body.get('message', '')), + } + } + else: + error = { + 'Error': { + 'Code': response['headers'].get(':error-code', ''), + 'Message': response['headers'].get(':error-message', ''), + } + } + return error + + def _parse_payload(self, response, shape, member_shapes, final_parsed): + if shape.serialization.get('event'): + for name in member_shapes: + member_shape = member_shapes[name] + if member_shape.serialization.get('eventpayload'): + body = response['body'] + if member_shape.type_name == 'blob': + parsed_body = body + elif member_shape.type_name == 'string': + parsed_body = body.decode(self.DEFAULT_ENCODING) + else: + raw_parse = self._initial_body_parse(body) + parsed_body = self._parse_shape( + member_shape, raw_parse + ) + final_parsed[name] = parsed_body + return + # If we didn't find an explicit payload, use the current shape + original_parsed = self._initial_body_parse(response['body']) + body_parsed = self._parse_shape(shape, original_parsed) + final_parsed.update(body_parsed) + + def _parse_non_payload_attrs( + self, response, shape, member_shapes, final_parsed + ): + headers = response['headers'] + for name in member_shapes: + member_shape = member_shapes[name] + if member_shape.serialization.get('eventheader'): + if name in headers: + value = headers[name] + if member_shape.type_name == 'timestamp': + # Event stream timestamps are an in milleseconds so we + # divide by 1000 to convert to seconds. + value = self._timestamp_parser(value / 1000.0) + final_parsed[name] = value + + def _initial_body_parse(self, body_contents): + # This method should do the initial xml/json parsing of the + # body. We we still need to walk the parsed body in order + # to convert types, but this method will do the first round + # of parsing. + raise NotImplementedError("_initial_body_parse") + + +class EventStreamJSONParser(BaseEventStreamParser, BaseJSONParser): + def _initial_body_parse(self, body_contents): + return self._parse_body_as_json(body_contents) + + +class EventStreamXMLParser(BaseEventStreamParser, BaseXMLResponseParser): + def _initial_body_parse(self, xml_string): + if not xml_string: + return ETree.Element('') + return self._parse_xml_string_to_dom(xml_string) + + +class JSONParser(BaseJSONParser): + EVENT_STREAM_PARSER_CLS = EventStreamJSONParser + + """Response parser for the "json" protocol.""" + + def _do_parse(self, response, shape): + parsed = {} + if shape is not None: + event_name = shape.event_stream_name + if event_name: + parsed = self._handle_event_stream(response, shape, event_name) + else: + parsed = self._handle_json_body(response['body'], shape) + self._inject_response_metadata(parsed, response['headers']) + return parsed + + def _do_modeled_error_parse(self, response, shape): + return self._handle_json_body(response['body'], shape) + + def _handle_event_stream(self, response, shape, event_name): + event_stream_shape = shape.members[event_name] + event_stream = self._create_event_stream(response, event_stream_shape) + try: + event = event_stream.get_initial_response() + except NoInitialResponseError: + error_msg = 'First event was not of type initial-response' + raise ResponseParserError(error_msg) + parsed = self._handle_json_body(event.payload, shape) + parsed[event_name] = event_stream + return parsed + + def _handle_json_body(self, raw_body, shape): + # The json.loads() gives us the primitive JSON types, + # but we need to traverse the parsed JSON data to convert + # to richer types (blobs, timestamps, etc. + parsed_json = self._parse_body_as_json(raw_body) + return self._parse_shape(shape, parsed_json) + + +class BaseRestParser(ResponseParser): + def _do_parse(self, response, shape): + final_parsed = {} + final_parsed['ResponseMetadata'] = self._populate_response_metadata( + response + ) + self._add_modeled_parse(response, shape, final_parsed) + return final_parsed + + def _add_modeled_parse(self, response, shape, final_parsed): + if shape is None: + return final_parsed + member_shapes = shape.members + self._parse_non_payload_attrs( + response, shape, member_shapes, final_parsed + ) + self._parse_payload(response, shape, member_shapes, final_parsed) + + def _do_modeled_error_parse(self, response, shape): + final_parsed = {} + self._add_modeled_parse(response, shape, final_parsed) + return final_parsed + + def _populate_response_metadata(self, response): + metadata = {} + headers = response['headers'] + if 'x-amzn-requestid' in headers: + metadata['RequestId'] = headers['x-amzn-requestid'] + elif 'x-amz-request-id' in headers: + metadata['RequestId'] = headers['x-amz-request-id'] + # HostId is what it's called whenever this value is returned + # in an XML response body, so to be consistent, we'll always + # call is HostId. + metadata['HostId'] = headers.get('x-amz-id-2', '') + return metadata + + def _parse_payload(self, response, shape, member_shapes, final_parsed): + if 'payload' in shape.serialization: + # If a payload is specified in the output shape, then only that + # shape is used for the body payload. + payload_member_name = shape.serialization['payload'] + body_shape = member_shapes[payload_member_name] + if body_shape.serialization.get('eventstream'): + body = self._create_event_stream(response, body_shape) + final_parsed[payload_member_name] = body + elif body_shape.type_name in ['string', 'blob']: + # This is a stream + body = response['body'] + if isinstance(body, bytes): + body = body.decode(self.DEFAULT_ENCODING) + final_parsed[payload_member_name] = body + else: + original_parsed = self._initial_body_parse(response['body']) + final_parsed[payload_member_name] = self._parse_shape( + body_shape, original_parsed + ) + else: + original_parsed = self._initial_body_parse(response['body']) + body_parsed = self._parse_shape(shape, original_parsed) + final_parsed.update(body_parsed) + + def _parse_non_payload_attrs( + self, response, shape, member_shapes, final_parsed + ): + headers = response['headers'] + for name in member_shapes: + member_shape = member_shapes[name] + location = member_shape.serialization.get('location') + if location is None: + continue + elif location == 'statusCode': + final_parsed[name] = self._parse_shape( + member_shape, response['status_code'] + ) + elif location == 'headers': + final_parsed[name] = self._parse_header_map( + member_shape, headers + ) + elif location == 'header': + header_name = member_shape.serialization.get('name', name) + if header_name in headers: + final_parsed[name] = self._parse_shape( + member_shape, headers[header_name] + ) + + def _parse_header_map(self, shape, headers): + # Note that headers are case insensitive, so we .lower() + # all header names and header prefixes. + parsed = {} + prefix = shape.serialization.get('name', '').lower() + for header_name in headers: + if header_name.lower().startswith(prefix): + # The key name inserted into the parsed hash + # strips off the prefix. + name = header_name[len(prefix) :] + parsed[name] = headers[header_name] + return parsed + + def _initial_body_parse(self, body_contents): + # This method should do the initial xml/json parsing of the + # body. We we still need to walk the parsed body in order + # to convert types, but this method will do the first round + # of parsing. + raise NotImplementedError("_initial_body_parse") + + def _handle_string(self, shape, value): + parsed = value + if is_json_value_header(shape): + decoded = base64.b64decode(value).decode(self.DEFAULT_ENCODING) + parsed = json.loads(decoded) + return parsed + + def _handle_list(self, shape, node): + location = shape.serialization.get('location') + if location == 'header' and not isinstance(node, list): + # List in headers may be a comma separated string as per RFC7230 + node = [e.strip() for e in node.split(',')] + return super()._handle_list(shape, node) + + +class RestJSONParser(BaseRestParser, BaseJSONParser): + EVENT_STREAM_PARSER_CLS = EventStreamJSONParser + + def _initial_body_parse(self, body_contents): + return self._parse_body_as_json(body_contents) + + def _do_error_parse(self, response, shape): + error = super()._do_error_parse(response, shape) + self._inject_error_code(error, response) + return error + + def _inject_error_code(self, error, response): + # The "Code" value can come from either a response + # header or a value in the JSON body. + body = self._initial_body_parse(response['body']) + if 'x-amzn-errortype' in response['headers']: + code = response['headers']['x-amzn-errortype'] + # Could be: + # x-amzn-errortype: ValidationException: + code = code.split(':')[0] + error['Error']['Code'] = code + elif 'code' in body or 'Code' in body: + error['Error']['Code'] = body.get('code', body.get('Code', '')) + + def _handle_integer(self, shape, value): + return int(value) + + _handle_long = _handle_integer + + +class RestXMLParser(BaseRestParser, BaseXMLResponseParser): + EVENT_STREAM_PARSER_CLS = EventStreamXMLParser + + def _initial_body_parse(self, xml_string): + if not xml_string: + return ETree.Element('') + return self._parse_xml_string_to_dom(xml_string) + + def _do_error_parse(self, response, shape): + # We're trying to be service agnostic here, but S3 does have a slightly + # different response structure for its errors compared to other + # rest-xml serivces (route53/cloudfront). We handle this by just + # trying to parse both forms. + # First: + # + # + # Sender + # InvalidInput + # Invalid resource type: foo + # + # request-id + # + if response['body']: + # If the body ends up being invalid xml, the xml parser should not + # blow up. It should at least try to pull information about the + # the error response from other sources like the HTTP status code. + try: + return self._parse_error_from_body(response) + except ResponseParserError: + LOG.debug( + 'Exception caught when parsing error response body:', + exc_info=True, + ) + return self._parse_error_from_http_status(response) + + def _parse_error_from_http_status(self, response): + return { + 'Error': { + 'Code': str(response['status_code']), + 'Message': http.client.responses.get( + response['status_code'], '' + ), + }, + 'ResponseMetadata': { + 'RequestId': response['headers'].get('x-amz-request-id', ''), + 'HostId': response['headers'].get('x-amz-id-2', ''), + }, + } + + def _parse_error_from_body(self, response): + xml_contents = response['body'] + root = self._parse_xml_string_to_dom(xml_contents) + parsed = self._build_name_to_xml_node(root) + self._replace_nodes(parsed) + if root.tag == 'Error': + # This is an S3 error response. First we'll populate the + # response metadata. + metadata = self._populate_response_metadata(response) + # The RequestId and the HostId are already in the + # ResponseMetadata, but are also duplicated in the XML + # body. We don't need these values in both places, + # we'll just remove them from the parsed XML body. + parsed.pop('RequestId', '') + parsed.pop('HostId', '') + return {'Error': parsed, 'ResponseMetadata': metadata} + elif 'RequestId' in parsed: + # Other rest-xml services: + parsed['ResponseMetadata'] = {'RequestId': parsed.pop('RequestId')} + default = {'Error': {'Message': '', 'Code': ''}} + merge_dicts(default, parsed) + return default + + @_text_content + def _handle_string(self, shape, text): + text = super()._handle_string(shape, text) + return text + + +PROTOCOL_PARSERS = { + 'ec2': EC2QueryParser, + 'query': QueryParser, + 'json': JSONParser, + 'rest-json': RestJSONParser, + 'rest-xml': RestXMLParser, +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/regions.py b/dbtzin/lib/python3.8/site-packages/botocore/regions.py new file mode 100644 index 00000000..0fe8f0ee --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/regions.py @@ -0,0 +1,830 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +"""Resolves regions and endpoints. + +This module implements endpoint resolution, including resolving endpoints for a +given service and region and resolving the available endpoints for a service +in a specific AWS partition. +""" +import copy +import logging +import re +from enum import Enum + +from botocore import UNSIGNED, xform_name +from botocore.auth import AUTH_TYPE_MAPS, HAS_CRT +from botocore.crt import CRT_SUPPORTED_AUTH_TYPES +from botocore.endpoint_provider import EndpointProvider +from botocore.exceptions import ( + EndpointProviderError, + EndpointVariantError, + InvalidEndpointConfigurationError, + InvalidHostLabelError, + MissingDependencyException, + NoRegionError, + ParamValidationError, + UnknownEndpointResolutionBuiltInName, + UnknownRegionError, + UnknownSignatureVersionError, + UnsupportedS3AccesspointConfigurationError, + UnsupportedS3ConfigurationError, + UnsupportedS3ControlArnError, + UnsupportedS3ControlConfigurationError, +) +from botocore.utils import ensure_boolean, instance_cache + +LOG = logging.getLogger(__name__) +DEFAULT_URI_TEMPLATE = '{service}.{region}.{dnsSuffix}' # noqa +DEFAULT_SERVICE_DATA = {'endpoints': {}} + + +class BaseEndpointResolver: + """Resolves regions and endpoints. Must be subclassed.""" + + def construct_endpoint(self, service_name, region_name=None): + """Resolves an endpoint for a service and region combination. + + :type service_name: string + :param service_name: Name of the service to resolve an endpoint for + (e.g., s3) + + :type region_name: string + :param region_name: Region/endpoint name to resolve (e.g., us-east-1) + if no region is provided, the first found partition-wide endpoint + will be used if available. + + :rtype: dict + :return: Returns a dict containing the following keys: + - partition: (string, required) Resolved partition name + - endpointName: (string, required) Resolved endpoint name + - hostname: (string, required) Hostname to use for this endpoint + - sslCommonName: (string) sslCommonName to use for this endpoint. + - credentialScope: (dict) Signature version 4 credential scope + - region: (string) region name override when signing. + - service: (string) service name override when signing. + - signatureVersions: (list) A list of possible signature + versions, including s3, v4, v2, and s3v4 + - protocols: (list) A list of supported protocols + (e.g., http, https) + - ...: Other keys may be included as well based on the metadata + """ + raise NotImplementedError + + def get_available_partitions(self): + """Lists the partitions available to the endpoint resolver. + + :return: Returns a list of partition names (e.g., ["aws", "aws-cn"]). + """ + raise NotImplementedError + + def get_available_endpoints( + self, service_name, partition_name='aws', allow_non_regional=False + ): + """Lists the endpoint names of a particular partition. + + :type service_name: string + :param service_name: Name of a service to list endpoint for (e.g., s3) + + :type partition_name: string + :param partition_name: Name of the partition to limit endpoints to. + (e.g., aws for the public AWS endpoints, aws-cn for AWS China + endpoints, aws-us-gov for AWS GovCloud (US) Endpoints, etc. + + :type allow_non_regional: bool + :param allow_non_regional: Set to True to include endpoints that are + not regional endpoints (e.g., s3-external-1, + fips-us-gov-west-1, etc). + :return: Returns a list of endpoint names (e.g., ["us-east-1"]). + """ + raise NotImplementedError + + +class EndpointResolver(BaseEndpointResolver): + """Resolves endpoints based on partition endpoint metadata""" + + _UNSUPPORTED_DUALSTACK_PARTITIONS = ['aws-iso', 'aws-iso-b'] + + def __init__(self, endpoint_data, uses_builtin_data=False): + """ + :type endpoint_data: dict + :param endpoint_data: A dict of partition data. + + :type uses_builtin_data: boolean + :param uses_builtin_data: Whether the endpoint data originates in the + package's data directory. + """ + if 'partitions' not in endpoint_data: + raise ValueError('Missing "partitions" in endpoint data') + self._endpoint_data = endpoint_data + self.uses_builtin_data = uses_builtin_data + + def get_service_endpoints_data(self, service_name, partition_name='aws'): + for partition in self._endpoint_data['partitions']: + if partition['partition'] != partition_name: + continue + services = partition['services'] + if service_name not in services: + continue + return services[service_name]['endpoints'] + + def get_available_partitions(self): + result = [] + for partition in self._endpoint_data['partitions']: + result.append(partition['partition']) + return result + + def get_available_endpoints( + self, + service_name, + partition_name='aws', + allow_non_regional=False, + endpoint_variant_tags=None, + ): + result = [] + for partition in self._endpoint_data['partitions']: + if partition['partition'] != partition_name: + continue + services = partition['services'] + if service_name not in services: + continue + service_endpoints = services[service_name]['endpoints'] + for endpoint_name in service_endpoints: + is_regional_endpoint = endpoint_name in partition['regions'] + # Only regional endpoints can be modeled with variants + if endpoint_variant_tags and is_regional_endpoint: + variant_data = self._retrieve_variant_data( + service_endpoints[endpoint_name], endpoint_variant_tags + ) + if variant_data: + result.append(endpoint_name) + elif allow_non_regional or is_regional_endpoint: + result.append(endpoint_name) + return result + + def get_partition_dns_suffix( + self, partition_name, endpoint_variant_tags=None + ): + for partition in self._endpoint_data['partitions']: + if partition['partition'] == partition_name: + if endpoint_variant_tags: + variant = self._retrieve_variant_data( + partition.get('defaults'), endpoint_variant_tags + ) + if variant and 'dnsSuffix' in variant: + return variant['dnsSuffix'] + else: + return partition['dnsSuffix'] + return None + + def construct_endpoint( + self, + service_name, + region_name=None, + partition_name=None, + use_dualstack_endpoint=False, + use_fips_endpoint=False, + ): + if ( + service_name == 's3' + and use_dualstack_endpoint + and region_name is None + ): + region_name = 'us-east-1' + + if partition_name is not None: + valid_partition = None + for partition in self._endpoint_data['partitions']: + if partition['partition'] == partition_name: + valid_partition = partition + + if valid_partition is not None: + result = self._endpoint_for_partition( + valid_partition, + service_name, + region_name, + use_dualstack_endpoint, + use_fips_endpoint, + True, + ) + return result + return None + + # Iterate over each partition until a match is found. + for partition in self._endpoint_data['partitions']: + if use_dualstack_endpoint and ( + partition['partition'] + in self._UNSUPPORTED_DUALSTACK_PARTITIONS + ): + continue + result = self._endpoint_for_partition( + partition, + service_name, + region_name, + use_dualstack_endpoint, + use_fips_endpoint, + ) + if result: + return result + + def get_partition_for_region(self, region_name): + for partition in self._endpoint_data['partitions']: + if self._region_match(partition, region_name): + return partition['partition'] + raise UnknownRegionError( + region_name=region_name, + error_msg='No partition found for provided region_name.', + ) + + def _endpoint_for_partition( + self, + partition, + service_name, + region_name, + use_dualstack_endpoint, + use_fips_endpoint, + force_partition=False, + ): + partition_name = partition["partition"] + if ( + use_dualstack_endpoint + and partition_name in self._UNSUPPORTED_DUALSTACK_PARTITIONS + ): + error_msg = ( + "Dualstack endpoints are currently not supported" + " for %s partition" % partition_name + ) + raise EndpointVariantError(tags=['dualstack'], error_msg=error_msg) + + # Get the service from the partition, or an empty template. + service_data = partition['services'].get( + service_name, DEFAULT_SERVICE_DATA + ) + # Use the partition endpoint if no region is supplied. + if region_name is None: + if 'partitionEndpoint' in service_data: + region_name = service_data['partitionEndpoint'] + else: + raise NoRegionError() + + resolve_kwargs = { + 'partition': partition, + 'service_name': service_name, + 'service_data': service_data, + 'endpoint_name': region_name, + 'use_dualstack_endpoint': use_dualstack_endpoint, + 'use_fips_endpoint': use_fips_endpoint, + } + + # Attempt to resolve the exact region for this partition. + if region_name in service_data['endpoints']: + return self._resolve(**resolve_kwargs) + + # Check to see if the endpoint provided is valid for the partition. + if self._region_match(partition, region_name) or force_partition: + # Use the partition endpoint if set and not regionalized. + partition_endpoint = service_data.get('partitionEndpoint') + is_regionalized = service_data.get('isRegionalized', True) + if partition_endpoint and not is_regionalized: + LOG.debug( + 'Using partition endpoint for %s, %s: %s', + service_name, + region_name, + partition_endpoint, + ) + resolve_kwargs['endpoint_name'] = partition_endpoint + return self._resolve(**resolve_kwargs) + LOG.debug( + 'Creating a regex based endpoint for %s, %s', + service_name, + region_name, + ) + return self._resolve(**resolve_kwargs) + + def _region_match(self, partition, region_name): + if region_name in partition['regions']: + return True + if 'regionRegex' in partition: + return re.compile(partition['regionRegex']).match(region_name) + return False + + def _retrieve_variant_data(self, endpoint_data, tags): + variants = endpoint_data.get('variants', []) + for variant in variants: + if set(variant['tags']) == set(tags): + result = variant.copy() + return result + + def _create_tag_list(self, use_dualstack_endpoint, use_fips_endpoint): + tags = [] + if use_dualstack_endpoint: + tags.append('dualstack') + if use_fips_endpoint: + tags.append('fips') + return tags + + def _resolve_variant( + self, tags, endpoint_data, service_defaults, partition_defaults + ): + result = {} + for variants in [endpoint_data, service_defaults, partition_defaults]: + variant = self._retrieve_variant_data(variants, tags) + if variant: + self._merge_keys(variant, result) + return result + + def _resolve( + self, + partition, + service_name, + service_data, + endpoint_name, + use_dualstack_endpoint, + use_fips_endpoint, + ): + endpoint_data = service_data.get('endpoints', {}).get( + endpoint_name, {} + ) + + if endpoint_data.get('deprecated'): + LOG.warning( + 'Client is configured with the deprecated endpoint: %s' + % (endpoint_name) + ) + + service_defaults = service_data.get('defaults', {}) + partition_defaults = partition.get('defaults', {}) + tags = self._create_tag_list(use_dualstack_endpoint, use_fips_endpoint) + + if tags: + result = self._resolve_variant( + tags, endpoint_data, service_defaults, partition_defaults + ) + if result == {}: + error_msg = ( + f"Endpoint does not exist for {service_name} " + f"in region {endpoint_name}" + ) + raise EndpointVariantError(tags=tags, error_msg=error_msg) + self._merge_keys(endpoint_data, result) + else: + result = endpoint_data + + # If dnsSuffix has not already been consumed from a variant definition + if 'dnsSuffix' not in result: + result['dnsSuffix'] = partition['dnsSuffix'] + + result['partition'] = partition['partition'] + result['endpointName'] = endpoint_name + + # Merge in the service defaults then the partition defaults. + self._merge_keys(service_defaults, result) + self._merge_keys(partition_defaults, result) + + result['hostname'] = self._expand_template( + partition, + result['hostname'], + service_name, + endpoint_name, + result['dnsSuffix'], + ) + if 'sslCommonName' in result: + result['sslCommonName'] = self._expand_template( + partition, + result['sslCommonName'], + service_name, + endpoint_name, + result['dnsSuffix'], + ) + + return result + + def _merge_keys(self, from_data, result): + for key in from_data: + if key not in result: + result[key] = from_data[key] + + def _expand_template( + self, partition, template, service_name, endpoint_name, dnsSuffix + ): + return template.format( + service=service_name, region=endpoint_name, dnsSuffix=dnsSuffix + ) + + +class EndpointResolverBuiltins(str, Enum): + # The AWS Region configured for the SDK client (str) + AWS_REGION = "AWS::Region" + # Whether the UseFIPSEndpoint configuration option has been enabled for + # the SDK client (bool) + AWS_USE_FIPS = "AWS::UseFIPS" + # Whether the UseDualStackEndpoint configuration option has been enabled + # for the SDK client (bool) + AWS_USE_DUALSTACK = "AWS::UseDualStack" + # Whether the global endpoint should be used with STS, rather the the + # regional endpoint for us-east-1 (bool) + AWS_STS_USE_GLOBAL_ENDPOINT = "AWS::STS::UseGlobalEndpoint" + # Whether the global endpoint should be used with S3, rather then the + # regional endpoint for us-east-1 (bool) + AWS_S3_USE_GLOBAL_ENDPOINT = "AWS::S3::UseGlobalEndpoint" + # Whether S3 Transfer Acceleration has been requested (bool) + AWS_S3_ACCELERATE = "AWS::S3::Accelerate" + # Whether S3 Force Path Style has been enabled (bool) + AWS_S3_FORCE_PATH_STYLE = "AWS::S3::ForcePathStyle" + # Whether to use the ARN region or raise an error when ARN and client + # region differ (for s3 service only, bool) + AWS_S3_USE_ARN_REGION = "AWS::S3::UseArnRegion" + # Whether to use the ARN region or raise an error when ARN and client + # region differ (for s3-control service only, bool) + AWS_S3CONTROL_USE_ARN_REGION = 'AWS::S3Control::UseArnRegion' + # Whether multi-region access points (MRAP) should be disabled (bool) + AWS_S3_DISABLE_MRAP = "AWS::S3::DisableMultiRegionAccessPoints" + # Whether a custom endpoint has been configured (str) + SDK_ENDPOINT = "SDK::Endpoint" + + +class EndpointRulesetResolver: + """Resolves endpoints using a service's endpoint ruleset""" + + def __init__( + self, + endpoint_ruleset_data, + partition_data, + service_model, + builtins, + client_context, + event_emitter, + use_ssl=True, + requested_auth_scheme=None, + ): + self._provider = EndpointProvider( + ruleset_data=endpoint_ruleset_data, + partition_data=partition_data, + ) + self._param_definitions = self._provider.ruleset.parameters + self._service_model = service_model + self._builtins = builtins + self._client_context = client_context + self._event_emitter = event_emitter + self._use_ssl = use_ssl + self._requested_auth_scheme = requested_auth_scheme + self._instance_cache = {} + + def construct_endpoint( + self, + operation_model, + call_args, + request_context, + ): + """Invokes the provider with params defined in the service's ruleset""" + if call_args is None: + call_args = {} + + if request_context is None: + request_context = {} + + provider_params = self._get_provider_params( + operation_model, call_args, request_context + ) + LOG.debug( + 'Calling endpoint provider with parameters: %s' % provider_params + ) + try: + provider_result = self._provider.resolve_endpoint( + **provider_params + ) + except EndpointProviderError as ex: + botocore_exception = self.ruleset_error_to_botocore_exception( + ex, provider_params + ) + if botocore_exception is None: + raise + else: + raise botocore_exception from ex + LOG.debug('Endpoint provider result: %s' % provider_result.url) + + # The endpoint provider does not support non-secure transport. + if not self._use_ssl and provider_result.url.startswith('https://'): + provider_result = provider_result._replace( + url=f'http://{provider_result.url[8:]}' + ) + + # Multi-valued headers are not supported in botocore. Replace the list + # of values returned for each header with just its first entry, + # dropping any additionally entries. + provider_result = provider_result._replace( + headers={ + key: val[0] for key, val in provider_result.headers.items() + } + ) + + return provider_result + + def _get_provider_params( + self, operation_model, call_args, request_context + ): + """Resolve a value for each parameter defined in the service's ruleset + + The resolution order for parameter values is: + 1. Operation-specific static context values from the service definition + 2. Operation-specific dynamic context values from API parameters + 3. Client-specific context parameters + 4. Built-in values such as region, FIPS usage, ... + """ + provider_params = {} + # Builtin values can be customized for each operation by hooks + # subscribing to the ``before-endpoint-resolution.*`` event. + customized_builtins = self._get_customized_builtins( + operation_model, call_args, request_context + ) + for param_name, param_def in self._param_definitions.items(): + param_val = self._resolve_param_from_context( + param_name=param_name, + operation_model=operation_model, + call_args=call_args, + ) + if param_val is None and param_def.builtin is not None: + param_val = self._resolve_param_as_builtin( + builtin_name=param_def.builtin, + builtins=customized_builtins, + ) + if param_val is not None: + provider_params[param_name] = param_val + + return provider_params + + def _resolve_param_from_context( + self, param_name, operation_model, call_args + ): + static = self._resolve_param_as_static_context_param( + param_name, operation_model + ) + if static is not None: + return static + dynamic = self._resolve_param_as_dynamic_context_param( + param_name, operation_model, call_args + ) + if dynamic is not None: + return dynamic + return self._resolve_param_as_client_context_param(param_name) + + def _resolve_param_as_static_context_param( + self, param_name, operation_model + ): + static_ctx_params = self._get_static_context_params(operation_model) + return static_ctx_params.get(param_name) + + def _resolve_param_as_dynamic_context_param( + self, param_name, operation_model, call_args + ): + dynamic_ctx_params = self._get_dynamic_context_params(operation_model) + if param_name in dynamic_ctx_params: + member_name = dynamic_ctx_params[param_name] + return call_args.get(member_name) + + def _resolve_param_as_client_context_param(self, param_name): + client_ctx_params = self._get_client_context_params() + if param_name in client_ctx_params: + client_ctx_varname = client_ctx_params[param_name] + return self._client_context.get(client_ctx_varname) + + def _resolve_param_as_builtin(self, builtin_name, builtins): + if builtin_name not in EndpointResolverBuiltins.__members__.values(): + raise UnknownEndpointResolutionBuiltInName(name=builtin_name) + return builtins.get(builtin_name) + + @instance_cache + def _get_static_context_params(self, operation_model): + """Mapping of param names to static param value for an operation""" + return { + param.name: param.value + for param in operation_model.static_context_parameters + } + + @instance_cache + def _get_dynamic_context_params(self, operation_model): + """Mapping of param names to member names for an operation""" + return { + param.name: param.member_name + for param in operation_model.context_parameters + } + + @instance_cache + def _get_client_context_params(self): + """Mapping of param names to client configuration variable""" + return { + param.name: xform_name(param.name) + for param in self._service_model.client_context_parameters + } + + def _get_customized_builtins( + self, operation_model, call_args, request_context + ): + service_id = self._service_model.service_id.hyphenize() + customized_builtins = copy.copy(self._builtins) + # Handlers are expected to modify the builtins dict in place. + self._event_emitter.emit( + 'before-endpoint-resolution.%s' % service_id, + builtins=customized_builtins, + model=operation_model, + params=call_args, + context=request_context, + ) + return customized_builtins + + def auth_schemes_to_signing_ctx(self, auth_schemes): + """Convert an Endpoint's authSchemes property to a signing_context dict + + :type auth_schemes: list + :param auth_schemes: A list of dictionaries taken from the + ``authSchemes`` property of an Endpoint object returned by + ``EndpointProvider``. + + :rtype: str, dict + :return: Tuple of auth type string (to be used in + ``request_context['auth_type']``) and signing context dict (for use + in ``request_context['signing']``). + """ + if not isinstance(auth_schemes, list) or len(auth_schemes) == 0: + raise TypeError("auth_schemes must be a non-empty list.") + + LOG.debug( + 'Selecting from endpoint provider\'s list of auth schemes: %s. ' + 'User selected auth scheme is: "%s"', + ', '.join([f'"{s.get("name")}"' for s in auth_schemes]), + self._requested_auth_scheme, + ) + + if self._requested_auth_scheme == UNSIGNED: + return 'none', {} + + auth_schemes = [ + {**scheme, 'name': self._strip_sig_prefix(scheme['name'])} + for scheme in auth_schemes + ] + if self._requested_auth_scheme is not None: + try: + # Use the first scheme that matches the requested scheme, + # after accounting for naming differences between botocore and + # endpoint rulesets. Keep the requested name. + name, scheme = next( + (self._requested_auth_scheme, s) + for s in auth_schemes + if self._does_botocore_authname_match_ruleset_authname( + self._requested_auth_scheme, s['name'] + ) + ) + except StopIteration: + # For legacy signers, no match will be found. Do not raise an + # exception, instead default to the logic in botocore + # customizations. + return None, {} + else: + try: + name, scheme = next( + (s['name'], s) + for s in auth_schemes + if s['name'] in AUTH_TYPE_MAPS + ) + except StopIteration: + # If no auth scheme was specifically requested and an + # authSchemes list is present in the Endpoint object but none + # of the entries are supported, raise an exception. + fixable_with_crt = False + auth_type_options = [s['name'] for s in auth_schemes] + if not HAS_CRT: + fixable_with_crt = any( + scheme in CRT_SUPPORTED_AUTH_TYPES + for scheme in auth_type_options + ) + + if fixable_with_crt: + raise MissingDependencyException( + msg='This operation requires an additional dependency.' + ' Use pip install botocore[crt] before proceeding.' + ) + else: + raise UnknownSignatureVersionError( + signature_version=', '.join(auth_type_options) + ) + + signing_context = {} + if 'signingRegion' in scheme: + signing_context['region'] = scheme['signingRegion'] + elif 'signingRegionSet' in scheme: + if len(scheme['signingRegionSet']) > 0: + signing_context['region'] = scheme['signingRegionSet'][0] + if 'signingName' in scheme: + signing_context.update(signing_name=scheme['signingName']) + if 'disableDoubleEncoding' in scheme: + signing_context['disableDoubleEncoding'] = ensure_boolean( + scheme['disableDoubleEncoding'] + ) + + LOG.debug( + 'Selected auth type "%s" as "%s" with signing context params: %s', + scheme['name'], # original name without "sig" + name, # chosen name can differ when `signature_version` is set + signing_context, + ) + return name, signing_context + + def _strip_sig_prefix(self, auth_name): + """Normalize auth type names by removing any "sig" prefix""" + return auth_name[3:] if auth_name.startswith('sig') else auth_name + + def _does_botocore_authname_match_ruleset_authname(self, botoname, rsname): + """ + Whether a valid string provided as signature_version parameter for + client construction refers to the same auth methods as a string + returned by the endpoint ruleset provider. This accounts for: + + * The ruleset prefixes auth names with "sig" + * The s3 and s3control rulesets don't distinguish between v4[a] and + s3v4[a] signers + * The v2, v3, and HMAC v1 based signers (s3, s3-*) are botocore legacy + features and do not exist in the rulesets + * Only characters up to the first dash are considered + + Example matches: + * v4, sigv4 + * v4, v4 + * s3v4, sigv4 + * s3v7, sigv7 (hypothetical example) + * s3v4a, sigv4a + * s3v4-query, sigv4 + + Example mismatches: + * v4a, sigv4 + * s3, sigv4 + * s3-presign-post, sigv4 + """ + rsname = self._strip_sig_prefix(rsname) + botoname = botoname.split('-')[0] + if botoname != 's3' and botoname.startswith('s3'): + botoname = botoname[2:] + return rsname == botoname + + def ruleset_error_to_botocore_exception(self, ruleset_exception, params): + """Attempts to translate ruleset errors to pre-existing botocore + exception types by string matching exception strings. + """ + msg = ruleset_exception.kwargs.get('msg') + if msg is None: + return + + if msg.startswith('Invalid region in ARN: '): + # Example message: + # "Invalid region in ARN: `us-we$t-2` (invalid DNS name)" + try: + label = msg.split('`')[1] + except IndexError: + label = msg + return InvalidHostLabelError(label=label) + + service_name = self._service_model.service_name + if service_name == 's3': + if ( + msg == 'S3 Object Lambda does not support S3 Accelerate' + or msg == 'Accelerate cannot be used with FIPS' + ): + return UnsupportedS3ConfigurationError(msg=msg) + if ( + msg.startswith('S3 Outposts does not support') + or msg.startswith('S3 MRAP does not support') + or msg.startswith('S3 Object Lambda does not support') + or msg.startswith('Access Points do not support') + or msg.startswith('Invalid configuration:') + or msg.startswith('Client was configured for partition') + ): + return UnsupportedS3AccesspointConfigurationError(msg=msg) + if msg.lower().startswith('invalid arn:'): + return ParamValidationError(report=msg) + if service_name == 's3control': + if msg.startswith('Invalid ARN:'): + arn = params.get('Bucket') + return UnsupportedS3ControlArnError(arn=arn, msg=msg) + if msg.startswith('Invalid configuration:') or msg.startswith( + 'Client was configured for partition' + ): + return UnsupportedS3ControlConfigurationError(msg=msg) + if msg == "AccountId is required but not set": + return ParamValidationError(report=msg) + if service_name == 'events': + if msg.startswith( + 'Invalid Configuration: FIPS is not supported with ' + 'EventBridge multi-region endpoints.' + ): + return InvalidEndpointConfigurationError(msg=msg) + if msg == 'EndpointId must be a valid host label.': + return InvalidEndpointConfigurationError(msg=msg) + return None diff --git a/dbtzin/lib/python3.8/site-packages/botocore/response.py b/dbtzin/lib/python3.8/site-packages/botocore/response.py new file mode 100644 index 00000000..ba3fac9b --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/response.py @@ -0,0 +1,201 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import logging +from io import IOBase + +from urllib3.exceptions import ProtocolError as URLLib3ProtocolError +from urllib3.exceptions import ReadTimeoutError as URLLib3ReadTimeoutError + +from botocore import parsers +from botocore.compat import set_socket_timeout +from botocore.exceptions import ( + IncompleteReadError, + ReadTimeoutError, + ResponseStreamingError, +) + +# Keep these imported. There's pre-existing code that uses them. +from botocore import ScalarTypes # noqa +from botocore.compat import XMLParseError # noqa +from botocore.hooks import first_non_none_response # noqa + + +logger = logging.getLogger(__name__) + + +class StreamingBody(IOBase): + """Wrapper class for an http response body. + + This provides a few additional conveniences that do not exist + in the urllib3 model: + + * Set the timeout on the socket (i.e read() timeouts) + * Auto validation of content length, if the amount of bytes + we read does not match the content length, an exception + is raised. + + """ + + _DEFAULT_CHUNK_SIZE = 1024 + + def __init__(self, raw_stream, content_length): + self._raw_stream = raw_stream + self._content_length = content_length + self._amount_read = 0 + + def __del__(self): + # Extending destructor in order to preserve the underlying raw_stream. + # The ability to add custom cleanup logic introduced in Python3.4+. + # https://www.python.org/dev/peps/pep-0442/ + pass + + def set_socket_timeout(self, timeout): + """Set the timeout seconds on the socket.""" + # The problem we're trying to solve is to prevent .read() calls from + # hanging. This can happen in rare cases. What we'd like to ideally + # do is set a timeout on the .read() call so that callers can retry + # the request. + # Unfortunately, this isn't currently possible in requests. + # See: https://github.com/kennethreitz/requests/issues/1803 + # So what we're going to do is reach into the guts of the stream and + # grab the socket object, which we can set the timeout on. We're + # putting in a check here so in case this interface goes away, we'll + # know. + try: + set_socket_timeout(self._raw_stream, timeout) + except AttributeError: + logger.error( + "Cannot access the socket object of " + "a streaming response. It's possible " + "the interface has changed.", + exc_info=True, + ) + raise + + def readable(self): + try: + return self._raw_stream.readable() + except AttributeError: + return False + + def read(self, amt=None): + """Read at most amt bytes from the stream. + + If the amt argument is omitted, read all data. + """ + try: + chunk = self._raw_stream.read(amt) + except URLLib3ReadTimeoutError as e: + # TODO: the url will be None as urllib3 isn't setting it yet + raise ReadTimeoutError(endpoint_url=e.url, error=e) + except URLLib3ProtocolError as e: + raise ResponseStreamingError(error=e) + self._amount_read += len(chunk) + if amt is None or (not chunk and amt > 0): + # If the server sends empty contents or + # we ask to read all of the contents, then we know + # we need to verify the content length. + self._verify_content_length() + return chunk + + def readlines(self): + return self._raw_stream.readlines() + + def __iter__(self): + """Return an iterator to yield 1k chunks from the raw stream.""" + return self.iter_chunks(self._DEFAULT_CHUNK_SIZE) + + def __next__(self): + """Return the next 1k chunk from the raw stream.""" + current_chunk = self.read(self._DEFAULT_CHUNK_SIZE) + if current_chunk: + return current_chunk + raise StopIteration() + + def __enter__(self): + return self._raw_stream + + def __exit__(self, type, value, traceback): + self._raw_stream.close() + + next = __next__ + + def iter_lines(self, chunk_size=_DEFAULT_CHUNK_SIZE, keepends=False): + """Return an iterator to yield lines from the raw stream. + + This is achieved by reading chunk of bytes (of size chunk_size) at a + time from the raw stream, and then yielding lines from there. + """ + pending = b'' + for chunk in self.iter_chunks(chunk_size): + lines = (pending + chunk).splitlines(True) + for line in lines[:-1]: + yield line.splitlines(keepends)[0] + pending = lines[-1] + if pending: + yield pending.splitlines(keepends)[0] + + def iter_chunks(self, chunk_size=_DEFAULT_CHUNK_SIZE): + """Return an iterator to yield chunks of chunk_size bytes from the raw + stream. + """ + while True: + current_chunk = self.read(chunk_size) + if current_chunk == b"": + break + yield current_chunk + + def _verify_content_length(self): + # See: https://github.com/kennethreitz/requests/issues/1855 + # Basically, our http library doesn't do this for us, so we have + # to do this ourself. + if self._content_length is not None and self._amount_read != int( + self._content_length + ): + raise IncompleteReadError( + actual_bytes=self._amount_read, + expected_bytes=int(self._content_length), + ) + + def tell(self): + return self._raw_stream.tell() + + def close(self): + """Close the underlying http response stream.""" + self._raw_stream.close() + + +def get_response(operation_model, http_response): + protocol = operation_model.metadata['protocol'] + response_dict = { + 'headers': http_response.headers, + 'status_code': http_response.status_code, + } + # TODO: Unfortunately, we have to have error logic here. + # If it looks like an error, in the streaming response case we + # need to actually grab the contents. + if response_dict['status_code'] >= 300: + response_dict['body'] = http_response.content + elif operation_model.has_streaming_output: + response_dict['body'] = StreamingBody( + http_response.raw, response_dict['headers'].get('content-length') + ) + else: + response_dict['body'] = http_response.content + + parser = parsers.create_parser(protocol) + return http_response, parser.parse( + response_dict, operation_model.output_shape + ) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/__init__.py b/dbtzin/lib/python3.8/site-packages/botocore/retries/__init__.py new file mode 100644 index 00000000..a6d6b377 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/retries/__init__.py @@ -0,0 +1,6 @@ +"""New retry v2 handlers. + +This package obsoletes the botocore/retryhandler.py module and contains +new retry logic. + +""" diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..08d59d3a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/adaptive.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/adaptive.cpython-38.pyc new file mode 100644 index 00000000..bb4b2b54 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/adaptive.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/base.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/base.cpython-38.pyc new file mode 100644 index 00000000..75d001c9 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/base.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/bucket.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/bucket.cpython-38.pyc new file mode 100644 index 00000000..1abbada7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/bucket.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/quota.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/quota.cpython-38.pyc new file mode 100644 index 00000000..db3911f1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/quota.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/special.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/special.cpython-38.pyc new file mode 100644 index 00000000..da107db1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/special.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/standard.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/standard.cpython-38.pyc new file mode 100644 index 00000000..dc33187c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/standard.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/throttling.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/throttling.cpython-38.pyc new file mode 100644 index 00000000..a8535089 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/retries/__pycache__/throttling.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/adaptive.py b/dbtzin/lib/python3.8/site-packages/botocore/retries/adaptive.py new file mode 100644 index 00000000..5e638ddb --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/retries/adaptive.py @@ -0,0 +1,132 @@ +import logging +import math +import threading + +from botocore.retries import bucket, standard, throttling + +logger = logging.getLogger(__name__) + + +def register_retry_handler(client): + clock = bucket.Clock() + rate_adjustor = throttling.CubicCalculator( + starting_max_rate=0, start_time=clock.current_time() + ) + token_bucket = bucket.TokenBucket(max_rate=1, clock=clock) + rate_clocker = RateClocker(clock) + throttling_detector = standard.ThrottlingErrorDetector( + retry_event_adapter=standard.RetryEventAdapter(), + ) + limiter = ClientRateLimiter( + rate_adjustor=rate_adjustor, + rate_clocker=rate_clocker, + token_bucket=token_bucket, + throttling_detector=throttling_detector, + clock=clock, + ) + client.meta.events.register( + 'before-send', + limiter.on_sending_request, + ) + client.meta.events.register( + 'needs-retry', + limiter.on_receiving_response, + ) + return limiter + + +class ClientRateLimiter: + _MAX_RATE_ADJUST_SCALE = 2.0 + + def __init__( + self, + rate_adjustor, + rate_clocker, + token_bucket, + throttling_detector, + clock, + ): + self._rate_adjustor = rate_adjustor + self._rate_clocker = rate_clocker + self._token_bucket = token_bucket + self._throttling_detector = throttling_detector + self._clock = clock + self._enabled = False + self._lock = threading.Lock() + + def on_sending_request(self, request, **kwargs): + if self._enabled: + self._token_bucket.acquire() + + # Hooked up to needs-retry. + def on_receiving_response(self, **kwargs): + measured_rate = self._rate_clocker.record() + timestamp = self._clock.current_time() + with self._lock: + if not self._throttling_detector.is_throttling_error(**kwargs): + new_rate = self._rate_adjustor.success_received(timestamp) + else: + if not self._enabled: + rate_to_use = measured_rate + else: + rate_to_use = min( + measured_rate, self._token_bucket.max_rate + ) + new_rate = self._rate_adjustor.error_received( + rate_to_use, timestamp + ) + logger.debug( + "Throttling response received, new send rate: %s " + "measured rate: %s, token bucket capacity " + "available: %s", + new_rate, + measured_rate, + self._token_bucket.available_capacity, + ) + self._enabled = True + self._token_bucket.max_rate = min( + new_rate, self._MAX_RATE_ADJUST_SCALE * measured_rate + ) + + +class RateClocker: + """Tracks the rate at which a client is sending a request.""" + + _DEFAULT_SMOOTHING = 0.8 + # Update the rate every _TIME_BUCKET_RANGE seconds. + _TIME_BUCKET_RANGE = 0.5 + + def __init__( + self, + clock, + smoothing=_DEFAULT_SMOOTHING, + time_bucket_range=_TIME_BUCKET_RANGE, + ): + self._clock = clock + self._measured_rate = 0 + self._smoothing = smoothing + self._last_bucket = math.floor(self._clock.current_time()) + self._time_bucket_scale = 1 / self._TIME_BUCKET_RANGE + self._count = 0 + self._lock = threading.Lock() + + def record(self, amount=1): + with self._lock: + t = self._clock.current_time() + bucket = ( + math.floor(t * self._time_bucket_scale) + / self._time_bucket_scale + ) + self._count += amount + if bucket > self._last_bucket: + current_rate = self._count / float(bucket - self._last_bucket) + self._measured_rate = (current_rate * self._smoothing) + ( + self._measured_rate * (1 - self._smoothing) + ) + self._count = 0 + self._last_bucket = bucket + return self._measured_rate + + @property + def measured_rate(self): + return self._measured_rate diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/base.py b/dbtzin/lib/python3.8/site-packages/botocore/retries/base.py new file mode 100644 index 00000000..108bfed6 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/retries/base.py @@ -0,0 +1,26 @@ +class BaseRetryBackoff: + def delay_amount(self, context): + """Calculate how long we should delay before retrying. + + :type context: RetryContext + + """ + raise NotImplementedError("delay_amount") + + +class BaseRetryableChecker: + """Base class for determining if a retry should happen. + + This base class checks for specific retryable conditions. + A single retryable checker doesn't necessarily indicate a retry + will happen. It's up to the ``RetryPolicy`` to use its + ``BaseRetryableCheckers`` to make the final decision on whether a retry + should happen. + """ + + def is_retryable(self, context): + """Returns True if retryable, False if not. + + :type context: RetryContext + """ + raise NotImplementedError("is_retryable") diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/bucket.py b/dbtzin/lib/python3.8/site-packages/botocore/retries/bucket.py new file mode 100644 index 00000000..1818e5d5 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/retries/bucket.py @@ -0,0 +1,114 @@ +"""This module implements token buckets used for client side throttling.""" +import threading +import time + +from botocore.exceptions import CapacityNotAvailableError + + +class Clock: + def __init__(self): + pass + + def sleep(self, amount): + time.sleep(amount) + + def current_time(self): + return time.time() + + +class TokenBucket: + _MIN_RATE = 0.5 + + def __init__(self, max_rate, clock, min_rate=_MIN_RATE): + self._fill_rate = None + self._max_capacity = None + self._current_capacity = 0 + self._clock = clock + self._last_timestamp = None + self._min_rate = min_rate + self._lock = threading.Lock() + self._new_fill_rate_condition = threading.Condition(self._lock) + self.max_rate = max_rate + + @property + def max_rate(self): + return self._fill_rate + + @max_rate.setter + def max_rate(self, value): + with self._new_fill_rate_condition: + # Before we can change the rate we need to fill any pending + # tokens we might have based on the current rate. If we don't + # do this it means everything since the last recorded timestamp + # will accumulate at the rate we're about to set which isn't + # correct. + self._refill() + self._fill_rate = max(value, self._min_rate) + if value >= 1: + self._max_capacity = value + else: + self._max_capacity = 1 + # If we're scaling down, we also can't have a capacity that's + # more than our max_capacity. + self._current_capacity = min( + self._current_capacity, self._max_capacity + ) + self._new_fill_rate_condition.notify() + + @property + def max_capacity(self): + return self._max_capacity + + @property + def available_capacity(self): + return self._current_capacity + + def acquire(self, amount=1, block=True): + """Acquire token or return amount of time until next token available. + + If block is True, then this method will block until there's sufficient + capacity to acquire the desired amount. + + If block is False, then this method will return True is capacity + was successfully acquired, False otherwise. + + """ + with self._new_fill_rate_condition: + return self._acquire(amount=amount, block=block) + + def _acquire(self, amount, block): + self._refill() + if amount <= self._current_capacity: + self._current_capacity -= amount + return True + else: + if not block: + raise CapacityNotAvailableError() + # Not enough capacity. + sleep_amount = self._sleep_amount(amount) + while sleep_amount > 0: + # Until python3.2, wait() always returned None so we can't + # tell if a timeout occurred waiting on the cond var. + # Because of this we'll unconditionally call _refill(). + # The downside to this is that we were waken up via + # a notify(), we're calling unnecessarily calling _refill() an + # extra time. + self._new_fill_rate_condition.wait(sleep_amount) + self._refill() + sleep_amount = self._sleep_amount(amount) + self._current_capacity -= amount + return True + + def _sleep_amount(self, amount): + return (amount - self._current_capacity) / self._fill_rate + + def _refill(self): + timestamp = self._clock.current_time() + if self._last_timestamp is None: + self._last_timestamp = timestamp + return + current_capacity = self._current_capacity + fill_amount = (timestamp - self._last_timestamp) * self._fill_rate + new_capacity = min(self._max_capacity, current_capacity + fill_amount) + self._current_capacity = new_capacity + self._last_timestamp = timestamp diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/quota.py b/dbtzin/lib/python3.8/site-packages/botocore/retries/quota.py new file mode 100644 index 00000000..c3e91ae3 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/retries/quota.py @@ -0,0 +1,56 @@ +"""Retry quota implementation. + + +""" +import threading + + +class RetryQuota: + INITIAL_CAPACITY = 500 + + def __init__(self, initial_capacity=INITIAL_CAPACITY, lock=None): + self._max_capacity = initial_capacity + self._available_capacity = initial_capacity + if lock is None: + lock = threading.Lock() + self._lock = lock + + def acquire(self, capacity_amount): + """Attempt to aquire a certain amount of capacity. + + If there's not sufficient amount of capacity available, ``False`` + is returned. Otherwise, ``True`` is returned, which indicates that + capacity was successfully allocated. + + """ + # The acquire() is only called when we encounter a retryable + # response so we aren't worried about locking the entire method. + with self._lock: + if capacity_amount > self._available_capacity: + return False + self._available_capacity -= capacity_amount + return True + + def release(self, capacity_amount): + """Release capacity back to the retry quota. + + The capacity being released will be truncated if necessary + to ensure the max capacity is never exceeded. + + """ + # Implementation note: The release() method is called as part + # of the "after-call" event, which means it gets invoked for + # every API call. In the common case where the request is + # successful and we're at full capacity, we can avoid locking. + # We can't exceed max capacity so there's no work we have to do. + if self._max_capacity == self._available_capacity: + return + with self._lock: + amount = min( + self._max_capacity - self._available_capacity, capacity_amount + ) + self._available_capacity += amount + + @property + def available_capacity(self): + return self._available_capacity diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/special.py b/dbtzin/lib/python3.8/site-packages/botocore/retries/special.py new file mode 100644 index 00000000..9ce18b1f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/retries/special.py @@ -0,0 +1,50 @@ +"""Special cased retries. + +These are additional retry cases we still have to handle from the legacy +retry handler. They don't make sense as part of the standard mode retry +module. Ideally we should be able to remove this module. + +""" +import logging +from binascii import crc32 + +from botocore.retries.base import BaseRetryableChecker + +logger = logging.getLogger(__name__) + + +# TODO: This is an ideal candidate for the retryable trait once that's +# available. +class RetryIDPCommunicationError(BaseRetryableChecker): + _SERVICE_NAME = 'sts' + + def is_retryable(self, context): + service_name = context.operation_model.service_model.service_name + if service_name != self._SERVICE_NAME: + return False + error_code = context.get_error_code() + return error_code == 'IDPCommunicationError' + + +class RetryDDBChecksumError(BaseRetryableChecker): + _CHECKSUM_HEADER = 'x-amz-crc32' + _SERVICE_NAME = 'dynamodb' + + def is_retryable(self, context): + service_name = context.operation_model.service_model.service_name + if service_name != self._SERVICE_NAME: + return False + if context.http_response is None: + return False + checksum = context.http_response.headers.get(self._CHECKSUM_HEADER) + if checksum is None: + return False + actual_crc32 = crc32(context.http_response.content) & 0xFFFFFFFF + if actual_crc32 != int(checksum): + logger.debug( + "DynamoDB crc32 checksum does not match, " + "expected: %s, actual: %s", + checksum, + actual_crc32, + ) + return True diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/standard.py b/dbtzin/lib/python3.8/site-packages/botocore/retries/standard.py new file mode 100644 index 00000000..00927d67 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/retries/standard.py @@ -0,0 +1,531 @@ +"""Standard retry behavior. + +This contains the default standard retry behavior. +It provides consistent behavior with other AWS SDKs. + +The key base classes uses for retries: + + * ``BaseRetryableChecker`` - Use to check a specific condition that + indicates a retry should happen. This can include things like + max attempts, HTTP status code checks, error code checks etc. + * ``RetryBackoff`` - Use to determine how long we should backoff until + we retry a request. This is the class that will implement delay such + as exponential backoff. + * ``RetryPolicy`` - Main class that determines if a retry should + happen. It can combine data from a various BaseRetryableCheckers + to make a final call as to whether or not a retry should happen. + It then uses a ``BaseRetryBackoff`` to determine how long to delay. + * ``RetryHandler`` - The bridge between botocore's event system + used by endpoint.py to manage retries and the interfaces defined + in this module. + +This allows us to define an API that has minimal coupling to the event +based API used by botocore. + +""" +import logging +import random + +from botocore.exceptions import ( + ConnectionError, + ConnectTimeoutError, + HTTPClientError, + ReadTimeoutError, +) +from botocore.retries import quota, special +from botocore.retries.base import BaseRetryableChecker, BaseRetryBackoff + +DEFAULT_MAX_ATTEMPTS = 3 +logger = logging.getLogger(__name__) + + +def register_retry_handler(client, max_attempts=DEFAULT_MAX_ATTEMPTS): + retry_quota = RetryQuotaChecker(quota.RetryQuota()) + + service_id = client.meta.service_model.service_id + service_event_name = service_id.hyphenize() + client.meta.events.register( + f'after-call.{service_event_name}', retry_quota.release_retry_quota + ) + + handler = RetryHandler( + retry_policy=RetryPolicy( + retry_checker=StandardRetryConditions(max_attempts=max_attempts), + retry_backoff=ExponentialBackoff(), + ), + retry_event_adapter=RetryEventAdapter(), + retry_quota=retry_quota, + ) + + unique_id = 'retry-config-%s' % service_event_name + client.meta.events.register( + 'needs-retry.%s' % service_event_name, + handler.needs_retry, + unique_id=unique_id, + ) + return handler + + +class RetryHandler: + """Bridge between botocore's event system and this module. + + This class is intended to be hooked to botocore's event system + as an event handler. + """ + + def __init__(self, retry_policy, retry_event_adapter, retry_quota): + self._retry_policy = retry_policy + self._retry_event_adapter = retry_event_adapter + self._retry_quota = retry_quota + + def needs_retry(self, **kwargs): + """Connect as a handler to the needs-retry event.""" + retry_delay = None + context = self._retry_event_adapter.create_retry_context(**kwargs) + if self._retry_policy.should_retry(context): + # Before we can retry we need to ensure we have sufficient + # capacity in our retry quota. + if self._retry_quota.acquire_retry_quota(context): + retry_delay = self._retry_policy.compute_retry_delay(context) + logger.debug( + "Retry needed, retrying request after delay of: %s", + retry_delay, + ) + else: + logger.debug( + "Retry needed but retry quota reached, " + "not retrying request." + ) + else: + logger.debug("Not retrying request.") + self._retry_event_adapter.adapt_retry_response_from_context(context) + return retry_delay + + +class RetryEventAdapter: + """Adapter to existing retry interface used in the endpoints layer. + + This existing interface for determining if a retry needs to happen + is event based and used in ``botocore.endpoint``. The interface has + grown organically over the years and could use some cleanup. This + adapter converts that interface into the interface used by the + new retry strategies. + + """ + + def create_retry_context(self, **kwargs): + """Create context based on needs-retry kwargs.""" + response = kwargs['response'] + if response is None: + # If response is None it means that an exception was raised + # because we never received a response from the service. This + # could be something like a ConnectionError we get from our + # http layer. + http_response = None + parsed_response = None + else: + http_response, parsed_response = response + # This provides isolation between the kwargs emitted in the + # needs-retry event, and what this module uses to check for + # retries. + context = RetryContext( + attempt_number=kwargs['attempts'], + operation_model=kwargs['operation'], + http_response=http_response, + parsed_response=parsed_response, + caught_exception=kwargs['caught_exception'], + request_context=kwargs['request_dict']['context'], + ) + return context + + def adapt_retry_response_from_context(self, context): + """Modify response back to user back from context.""" + # This will mutate attributes that are returned back to the end + # user. We do it this way so that all the various retry classes + # don't mutate any input parameters from the needs-retry event. + metadata = context.get_retry_metadata() + if context.parsed_response is not None: + context.parsed_response.setdefault('ResponseMetadata', {}).update( + metadata + ) + + +# Implementation note: this is meant to encapsulate all the misc stuff +# that gets sent in the needs-retry event. This is mapped so that params +# are more clear and explicit. +class RetryContext: + """Normalize a response that we use to check if a retry should occur. + + This class smoothes over the different types of responses we may get + from a service including: + + * A modeled error response from the service that contains a service + code and error message. + * A raw HTTP response that doesn't contain service protocol specific + error keys. + * An exception received while attempting to retrieve a response. + This could be a ConnectionError we receive from our HTTP layer which + could represent that we weren't able to receive a response from + the service. + + This class guarantees that at least one of the above attributes will be + non None. + + This class is meant to provide a read-only view into the properties + associated with a possible retryable response. None of the properties + are meant to be modified directly. + + """ + + def __init__( + self, + attempt_number, + operation_model=None, + parsed_response=None, + http_response=None, + caught_exception=None, + request_context=None, + ): + # 1-based attempt number. + self.attempt_number = attempt_number + self.operation_model = operation_model + # This is the parsed response dictionary we get from parsing + # the HTTP response from the service. + self.parsed_response = parsed_response + # This is an instance of botocore.awsrequest.AWSResponse. + self.http_response = http_response + # This is a subclass of Exception that will be non None if + # an exception was raised when retrying to retrieve a response. + self.caught_exception = caught_exception + # This is the request context dictionary that's added to the + # request dict. This is used to story any additional state + # about the request. We use this for storing retry quota + # capacity. + if request_context is None: + request_context = {} + self.request_context = request_context + self._retry_metadata = {} + + # These are misc helper methods to avoid duplication in the various + # checkers. + def get_error_code(self): + """Check if there was a parsed response with an error code. + + If we could not find any error codes, ``None`` is returned. + + """ + if self.parsed_response is None: + return + error = self.parsed_response.get('Error', {}) + if not isinstance(error, dict): + return + return error.get('Code') + + def add_retry_metadata(self, **kwargs): + """Add key/value pairs to the retry metadata. + + This allows any objects during the retry process to add + metadata about any checks/validations that happened. + + This gets added to the response metadata in the retry handler. + + """ + self._retry_metadata.update(**kwargs) + + def get_retry_metadata(self): + return self._retry_metadata.copy() + + +class RetryPolicy: + def __init__(self, retry_checker, retry_backoff): + self._retry_checker = retry_checker + self._retry_backoff = retry_backoff + + def should_retry(self, context): + return self._retry_checker.is_retryable(context) + + def compute_retry_delay(self, context): + return self._retry_backoff.delay_amount(context) + + +class ExponentialBackoff(BaseRetryBackoff): + _BASE = 2 + _MAX_BACKOFF = 20 + + def __init__(self, max_backoff=20, random=random.random): + self._base = self._BASE + self._max_backoff = max_backoff + self._random = random + + def delay_amount(self, context): + """Calculates delay based on exponential backoff. + + This class implements truncated binary exponential backoff + with jitter:: + + t_i = min(rand(0, 1) * 2 ** attempt, MAX_BACKOFF) + + where ``i`` is the request attempt (0 based). + + """ + # The context.attempt_number is a 1-based value, but we have + # to calculate the delay based on i based a 0-based value. We + # want the first delay to just be ``rand(0, 1)``. + return min( + self._random() * (self._base ** (context.attempt_number - 1)), + self._max_backoff, + ) + + +class MaxAttemptsChecker(BaseRetryableChecker): + def __init__(self, max_attempts): + self._max_attempts = max_attempts + + def is_retryable(self, context): + under_max_attempts = context.attempt_number < self._max_attempts + retries_context = context.request_context.get('retries') + if retries_context: + retries_context['max'] = max( + retries_context.get('max', 0), self._max_attempts + ) + if not under_max_attempts: + logger.debug("Max attempts of %s reached.", self._max_attempts) + context.add_retry_metadata(MaxAttemptsReached=True) + return under_max_attempts + + +class TransientRetryableChecker(BaseRetryableChecker): + _TRANSIENT_ERROR_CODES = [ + 'RequestTimeout', + 'RequestTimeoutException', + 'PriorRequestNotComplete', + ] + _TRANSIENT_STATUS_CODES = [500, 502, 503, 504] + _TRANSIENT_EXCEPTION_CLS = ( + ConnectionError, + HTTPClientError, + ) + + def __init__( + self, + transient_error_codes=None, + transient_status_codes=None, + transient_exception_cls=None, + ): + if transient_error_codes is None: + transient_error_codes = self._TRANSIENT_ERROR_CODES[:] + if transient_status_codes is None: + transient_status_codes = self._TRANSIENT_STATUS_CODES[:] + if transient_exception_cls is None: + transient_exception_cls = self._TRANSIENT_EXCEPTION_CLS + self._transient_error_codes = transient_error_codes + self._transient_status_codes = transient_status_codes + self._transient_exception_cls = transient_exception_cls + + def is_retryable(self, context): + if context.get_error_code() in self._transient_error_codes: + return True + if context.http_response is not None: + if ( + context.http_response.status_code + in self._transient_status_codes + ): + return True + if context.caught_exception is not None: + return isinstance( + context.caught_exception, self._transient_exception_cls + ) + return False + + +class ThrottledRetryableChecker(BaseRetryableChecker): + # This is the union of all error codes we've seen that represent + # a throttled error. + _THROTTLED_ERROR_CODES = [ + 'Throttling', + 'ThrottlingException', + 'ThrottledException', + 'RequestThrottledException', + 'TooManyRequestsException', + 'ProvisionedThroughputExceededException', + 'TransactionInProgressException', + 'RequestLimitExceeded', + 'BandwidthLimitExceeded', + 'LimitExceededException', + 'RequestThrottled', + 'SlowDown', + 'PriorRequestNotComplete', + 'EC2ThrottledException', + ] + + def __init__(self, throttled_error_codes=None): + if throttled_error_codes is None: + throttled_error_codes = self._THROTTLED_ERROR_CODES[:] + self._throttled_error_codes = throttled_error_codes + + def is_retryable(self, context): + # Only the error code from a parsed service response is used + # to determine if the response is a throttled response. + return context.get_error_code() in self._throttled_error_codes + + +class ModeledRetryableChecker(BaseRetryableChecker): + """Check if an error has been modeled as retryable.""" + + def __init__(self): + self._error_detector = ModeledRetryErrorDetector() + + def is_retryable(self, context): + error_code = context.get_error_code() + if error_code is None: + return False + return self._error_detector.detect_error_type(context) is not None + + +class ModeledRetryErrorDetector: + """Checks whether or not an error is a modeled retryable error.""" + + # There are return values from the detect_error_type() method. + TRANSIENT_ERROR = 'TRANSIENT_ERROR' + THROTTLING_ERROR = 'THROTTLING_ERROR' + # This class is lower level than ModeledRetryableChecker, which + # implements BaseRetryableChecker. This object allows you to distinguish + # between the various types of retryable errors. + + def detect_error_type(self, context): + """Detect the error type associated with an error code and model. + + This will either return: + + * ``self.TRANSIENT_ERROR`` - If the error is a transient error + * ``self.THROTTLING_ERROR`` - If the error is a throttling error + * ``None`` - If the error is neither type of error. + + """ + error_code = context.get_error_code() + op_model = context.operation_model + if op_model is None or not op_model.error_shapes: + return + for shape in op_model.error_shapes: + if shape.metadata.get('retryable') is not None: + # Check if this error code matches the shape. This can + # be either by name or by a modeled error code. + error_code_to_check = ( + shape.metadata.get('error', {}).get('code') or shape.name + ) + if error_code == error_code_to_check: + if shape.metadata['retryable'].get('throttling'): + return self.THROTTLING_ERROR + return self.TRANSIENT_ERROR + + +class ThrottlingErrorDetector: + def __init__(self, retry_event_adapter): + self._modeled_error_detector = ModeledRetryErrorDetector() + self._fixed_error_code_detector = ThrottledRetryableChecker() + self._retry_event_adapter = retry_event_adapter + + # This expects the kwargs from needs-retry to be passed through. + def is_throttling_error(self, **kwargs): + context = self._retry_event_adapter.create_retry_context(**kwargs) + if self._fixed_error_code_detector.is_retryable(context): + return True + error_type = self._modeled_error_detector.detect_error_type(context) + return error_type == self._modeled_error_detector.THROTTLING_ERROR + + +class StandardRetryConditions(BaseRetryableChecker): + """Concrete class that implements the standard retry policy checks. + + Specifically: + + not max_attempts and (transient or throttled or modeled_retry) + + """ + + def __init__(self, max_attempts=DEFAULT_MAX_ATTEMPTS): + # Note: This class is for convenience so you can have the + # standard retry condition in a single class. + self._max_attempts_checker = MaxAttemptsChecker(max_attempts) + self._additional_checkers = OrRetryChecker( + [ + TransientRetryableChecker(), + ThrottledRetryableChecker(), + ModeledRetryableChecker(), + OrRetryChecker( + [ + special.RetryIDPCommunicationError(), + special.RetryDDBChecksumError(), + ] + ), + ] + ) + + def is_retryable(self, context): + return self._max_attempts_checker.is_retryable( + context + ) and self._additional_checkers.is_retryable(context) + + +class OrRetryChecker(BaseRetryableChecker): + def __init__(self, checkers): + self._checkers = checkers + + def is_retryable(self, context): + return any(checker.is_retryable(context) for checker in self._checkers) + + +class RetryQuotaChecker: + _RETRY_COST = 5 + _NO_RETRY_INCREMENT = 1 + _TIMEOUT_RETRY_REQUEST = 10 + _TIMEOUT_EXCEPTIONS = (ConnectTimeoutError, ReadTimeoutError) + + # Implementation note: We're not making this a BaseRetryableChecker + # because this isn't just a check if we can retry. This also changes + # state so we have to careful when/how we call this. Making it + # a BaseRetryableChecker implies you can call .is_retryable(context) + # as many times as you want and not affect anything. + + def __init__(self, quota): + self._quota = quota + # This tracks the last amount + self._last_amount_acquired = None + + def acquire_retry_quota(self, context): + if self._is_timeout_error(context): + capacity_amount = self._TIMEOUT_RETRY_REQUEST + else: + capacity_amount = self._RETRY_COST + success = self._quota.acquire(capacity_amount) + if success: + # We add the capacity amount to the request context so we know + # how much to release later. The capacity amount can vary based + # on the error. + context.request_context['retry_quota_capacity'] = capacity_amount + return True + context.add_retry_metadata(RetryQuotaReached=True) + return False + + def _is_timeout_error(self, context): + return isinstance(context.caught_exception, self._TIMEOUT_EXCEPTIONS) + + # This is intended to be hooked up to ``after-call``. + def release_retry_quota(self, context, http_response, **kwargs): + # There's three possible options. + # 1. The HTTP response did not have a 2xx response. In that case we + # give no quota back. + # 2. The HTTP request was successful and was never retried. In + # that case we give _NO_RETRY_INCREMENT back. + # 3. The API call had retries, and we eventually receive an HTTP + # response with a 2xx status code. In that case we give back + # whatever quota was associated with the last acquisition. + if http_response is None: + return + status_code = http_response.status_code + if 200 <= status_code < 300: + if 'retry_quota_capacity' not in context: + self._quota.release(self._NO_RETRY_INCREMENT) + else: + capacity_amount = context['retry_quota_capacity'] + self._quota.release(capacity_amount) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retries/throttling.py b/dbtzin/lib/python3.8/site-packages/botocore/retries/throttling.py new file mode 100644 index 00000000..34ab4172 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/retries/throttling.py @@ -0,0 +1,55 @@ +from collections import namedtuple + +CubicParams = namedtuple('CubicParams', ['w_max', 'k', 'last_fail']) + + +class CubicCalculator: + _SCALE_CONSTANT = 0.4 + _BETA = 0.7 + + def __init__( + self, + starting_max_rate, + start_time, + scale_constant=_SCALE_CONSTANT, + beta=_BETA, + ): + self._w_max = starting_max_rate + self._scale_constant = scale_constant + self._beta = beta + self._k = self._calculate_zero_point() + self._last_fail = start_time + + def _calculate_zero_point(self): + scaled_value = (self._w_max * (1 - self._beta)) / self._scale_constant + k = scaled_value ** (1 / 3.0) + return k + + def success_received(self, timestamp): + dt = timestamp - self._last_fail + new_rate = self._scale_constant * (dt - self._k) ** 3 + self._w_max + return new_rate + + def error_received(self, current_rate, timestamp): + # Consider not having this be the current measured rate. + + # We have a new max rate, which is the current rate we were sending + # at when we received an error response. + self._w_max = current_rate + self._k = self._calculate_zero_point() + self._last_fail = timestamp + return current_rate * self._beta + + def get_params_snapshot(self): + """Return a read-only object of the current cubic parameters. + + These parameters are intended to be used for debug/troubleshooting + purposes. These object is a read-only snapshot and cannot be used + to modify the behavior of the CUBIC calculations. + + New parameters may be added to this object in the future. + + """ + return CubicParams( + w_max=self._w_max, k=self._k, last_fail=self._last_fail + ) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/retryhandler.py b/dbtzin/lib/python3.8/site-packages/botocore/retryhandler.py new file mode 100644 index 00000000..deef1bfe --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/retryhandler.py @@ -0,0 +1,416 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +import functools +import logging +import random +from binascii import crc32 + +from botocore.exceptions import ( + ChecksumError, + ConnectionClosedError, + ConnectionError, + EndpointConnectionError, + ReadTimeoutError, +) + +logger = logging.getLogger(__name__) +# The only supported error for now is GENERAL_CONNECTION_ERROR +# which maps to requests generic ConnectionError. If we're able +# to get more specific exceptions from requests we can update +# this mapping with more specific exceptions. +EXCEPTION_MAP = { + 'GENERAL_CONNECTION_ERROR': [ + ConnectionError, + ConnectionClosedError, + ReadTimeoutError, + EndpointConnectionError, + ], +} + + +def delay_exponential(base, growth_factor, attempts): + """Calculate time to sleep based on exponential function. + + The format is:: + + base * growth_factor ^ (attempts - 1) + + If ``base`` is set to 'rand' then a random number between + 0 and 1 will be used as the base. + Base must be greater than 0, otherwise a ValueError will be + raised. + + """ + if base == 'rand': + base = random.random() + elif base <= 0: + raise ValueError( + f"The 'base' param must be greater than 0, got: {base}" + ) + time_to_sleep = base * (growth_factor ** (attempts - 1)) + return time_to_sleep + + +def create_exponential_delay_function(base, growth_factor): + """Create an exponential delay function based on the attempts. + + This is used so that you only have to pass it the attempts + parameter to calculate the delay. + + """ + return functools.partial( + delay_exponential, base=base, growth_factor=growth_factor + ) + + +def create_retry_handler(config, operation_name=None): + checker = create_checker_from_retry_config( + config, operation_name=operation_name + ) + action = create_retry_action_from_config( + config, operation_name=operation_name + ) + return RetryHandler(checker=checker, action=action) + + +def create_retry_action_from_config(config, operation_name=None): + # The spec has the possibility of supporting per policy + # actions, but right now, we assume this comes from the + # default section, which means that delay functions apply + # for every policy in the retry config (per service). + delay_config = config['__default__']['delay'] + if delay_config['type'] == 'exponential': + return create_exponential_delay_function( + base=delay_config['base'], + growth_factor=delay_config['growth_factor'], + ) + + +def create_checker_from_retry_config(config, operation_name=None): + checkers = [] + max_attempts = None + retryable_exceptions = [] + if '__default__' in config: + policies = config['__default__'].get('policies', []) + max_attempts = config['__default__']['max_attempts'] + for key in policies: + current_config = policies[key] + checkers.append(_create_single_checker(current_config)) + retry_exception = _extract_retryable_exception(current_config) + if retry_exception is not None: + retryable_exceptions.extend(retry_exception) + if operation_name is not None and config.get(operation_name) is not None: + operation_policies = config[operation_name]['policies'] + for key in operation_policies: + checkers.append(_create_single_checker(operation_policies[key])) + retry_exception = _extract_retryable_exception( + operation_policies[key] + ) + if retry_exception is not None: + retryable_exceptions.extend(retry_exception) + if len(checkers) == 1: + # Don't need to use a MultiChecker + return MaxAttemptsDecorator(checkers[0], max_attempts=max_attempts) + else: + multi_checker = MultiChecker(checkers) + return MaxAttemptsDecorator( + multi_checker, + max_attempts=max_attempts, + retryable_exceptions=tuple(retryable_exceptions), + ) + + +def _create_single_checker(config): + if 'response' in config['applies_when']: + return _create_single_response_checker( + config['applies_when']['response'] + ) + elif 'socket_errors' in config['applies_when']: + return ExceptionRaiser() + + +def _create_single_response_checker(response): + if 'service_error_code' in response: + checker = ServiceErrorCodeChecker( + status_code=response['http_status_code'], + error_code=response['service_error_code'], + ) + elif 'http_status_code' in response: + checker = HTTPStatusCodeChecker( + status_code=response['http_status_code'] + ) + elif 'crc32body' in response: + checker = CRC32Checker(header=response['crc32body']) + else: + # TODO: send a signal. + raise ValueError("Unknown retry policy") + return checker + + +def _extract_retryable_exception(config): + applies_when = config['applies_when'] + if 'crc32body' in applies_when.get('response', {}): + return [ChecksumError] + elif 'socket_errors' in applies_when: + exceptions = [] + for name in applies_when['socket_errors']: + exceptions.extend(EXCEPTION_MAP[name]) + return exceptions + + +class RetryHandler: + """Retry handler. + + The retry handler takes two params, ``checker`` object + and an ``action`` object. + + The ``checker`` object must be a callable object and based on a response + and an attempt number, determines whether or not sufficient criteria for + a retry has been met. If this is the case then the ``action`` object + (which also is a callable) determines what needs to happen in the event + of a retry. + + """ + + def __init__(self, checker, action): + self._checker = checker + self._action = action + + def __call__(self, attempts, response, caught_exception, **kwargs): + """Handler for a retry. + + Intended to be hooked up to an event handler (hence the **kwargs), + this will process retries appropriately. + + """ + checker_kwargs = { + 'attempt_number': attempts, + 'response': response, + 'caught_exception': caught_exception, + } + if isinstance(self._checker, MaxAttemptsDecorator): + retries_context = kwargs['request_dict']['context'].get('retries') + checker_kwargs.update({'retries_context': retries_context}) + + if self._checker(**checker_kwargs): + result = self._action(attempts=attempts) + logger.debug("Retry needed, action of: %s", result) + return result + logger.debug("No retry needed.") + + +class BaseChecker: + """Base class for retry checkers. + + Each class is responsible for checking a single criteria that determines + whether or not a retry should not happen. + + """ + + def __call__(self, attempt_number, response, caught_exception): + """Determine if retry criteria matches. + + Note that either ``response`` is not None and ``caught_exception`` is + None or ``response`` is None and ``caught_exception`` is not None. + + :type attempt_number: int + :param attempt_number: The total number of times we've attempted + to send the request. + + :param response: The HTTP response (if one was received). + + :type caught_exception: Exception + :param caught_exception: Any exception that was caught while trying to + send the HTTP response. + + :return: True, if the retry criteria matches (and therefore a retry + should occur. False if the criteria does not match. + + """ + # The default implementation allows subclasses to not have to check + # whether or not response is None or not. + if response is not None: + return self._check_response(attempt_number, response) + elif caught_exception is not None: + return self._check_caught_exception( + attempt_number, caught_exception + ) + else: + raise ValueError("Both response and caught_exception are None.") + + def _check_response(self, attempt_number, response): + pass + + def _check_caught_exception(self, attempt_number, caught_exception): + pass + + +class MaxAttemptsDecorator(BaseChecker): + """Allow retries up to a maximum number of attempts. + + This will pass through calls to the decorated retry checker, provided + that the number of attempts does not exceed max_attempts. It will + also catch any retryable_exceptions passed in. Once max_attempts has + been exceeded, then False will be returned or the retryable_exceptions + that was previously being caught will be raised. + + """ + + def __init__(self, checker, max_attempts, retryable_exceptions=None): + self._checker = checker + self._max_attempts = max_attempts + self._retryable_exceptions = retryable_exceptions + + def __call__( + self, attempt_number, response, caught_exception, retries_context + ): + if retries_context: + retries_context['max'] = max( + retries_context.get('max', 0), self._max_attempts + ) + + should_retry = self._should_retry( + attempt_number, response, caught_exception + ) + if should_retry: + if attempt_number >= self._max_attempts: + # explicitly set MaxAttemptsReached + if response is not None and 'ResponseMetadata' in response[1]: + response[1]['ResponseMetadata'][ + 'MaxAttemptsReached' + ] = True + logger.debug( + "Reached the maximum number of retry attempts: %s", + attempt_number, + ) + return False + else: + return should_retry + else: + return False + + def _should_retry(self, attempt_number, response, caught_exception): + if self._retryable_exceptions and attempt_number < self._max_attempts: + try: + return self._checker( + attempt_number, response, caught_exception + ) + except self._retryable_exceptions as e: + logger.debug( + "retry needed, retryable exception caught: %s", + e, + exc_info=True, + ) + return True + else: + # If we've exceeded the max attempts we just let the exception + # propagate if one has occurred. + return self._checker(attempt_number, response, caught_exception) + + +class HTTPStatusCodeChecker(BaseChecker): + def __init__(self, status_code): + self._status_code = status_code + + def _check_response(self, attempt_number, response): + if response[0].status_code == self._status_code: + logger.debug( + "retry needed: retryable HTTP status code received: %s", + self._status_code, + ) + return True + else: + return False + + +class ServiceErrorCodeChecker(BaseChecker): + def __init__(self, status_code, error_code): + self._status_code = status_code + self._error_code = error_code + + def _check_response(self, attempt_number, response): + if response[0].status_code == self._status_code: + actual_error_code = response[1].get('Error', {}).get('Code') + if actual_error_code == self._error_code: + logger.debug( + "retry needed: matching HTTP status and error code seen: " + "%s, %s", + self._status_code, + self._error_code, + ) + return True + return False + + +class MultiChecker(BaseChecker): + def __init__(self, checkers): + self._checkers = checkers + + def __call__(self, attempt_number, response, caught_exception): + for checker in self._checkers: + checker_response = checker( + attempt_number, response, caught_exception + ) + if checker_response: + return checker_response + return False + + +class CRC32Checker(BaseChecker): + def __init__(self, header): + # The header where the expected crc32 is located. + self._header_name = header + + def _check_response(self, attempt_number, response): + http_response = response[0] + expected_crc = http_response.headers.get(self._header_name) + if expected_crc is None: + logger.debug( + "crc32 check skipped, the %s header is not " + "in the http response.", + self._header_name, + ) + else: + actual_crc32 = crc32(response[0].content) & 0xFFFFFFFF + if not actual_crc32 == int(expected_crc): + logger.debug( + "retry needed: crc32 check failed, expected != actual: " + "%s != %s", + int(expected_crc), + actual_crc32, + ) + raise ChecksumError( + checksum_type='crc32', + expected_checksum=int(expected_crc), + actual_checksum=actual_crc32, + ) + + +class ExceptionRaiser(BaseChecker): + """Raise any caught exceptions. + + This class will raise any non None ``caught_exception``. + + """ + + def _check_caught_exception(self, attempt_number, caught_exception): + # This is implementation specific, but this class is useful by + # coordinating with the MaxAttemptsDecorator. + # The MaxAttemptsDecorator has a list of exceptions it should catch + # and retry, but something needs to come along and actually raise the + # caught_exception. That's what this class is being used for. If + # the MaxAttemptsDecorator is not interested in retrying the exception + # then this exception just propagates out past the retry code. + raise caught_exception diff --git a/dbtzin/lib/python3.8/site-packages/botocore/serialize.py b/dbtzin/lib/python3.8/site-packages/botocore/serialize.py new file mode 100644 index 00000000..306441e0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/serialize.py @@ -0,0 +1,810 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +"""Protocol input serializes. + +This module contains classes that implement input serialization +for the various AWS protocol types. + +These classes essentially take user input, a model object that +represents what the expected input should look like, and it returns +a dictionary that contains the various parts of a request. A few +high level design decisions: + + +* Each protocol type maps to a separate class, all inherit from + ``Serializer``. +* The return value for ``serialize_to_request`` (the main entry + point) returns a dictionary that represents a request. This + will have keys like ``url_path``, ``query_string``, etc. This + is done so that it's a) easy to test and b) not tied to a + particular HTTP library. See the ``serialize_to_request`` docstring + for more details. + +Unicode +------- + +The input to the serializers should be text (str/unicode), not bytes, +with the exception of blob types. Those are assumed to be binary, +and if a str/unicode type is passed in, it will be encoded as utf-8. +""" +import base64 +import calendar +import datetime +import json +import re +from xml.etree import ElementTree + +from botocore import validate +from botocore.compat import formatdate +from botocore.exceptions import ParamValidationError +from botocore.utils import ( + has_header, + is_json_value_header, + parse_to_aware_datetime, + percent_encode, +) + +# From the spec, the default timestamp format if not specified is iso8601. +DEFAULT_TIMESTAMP_FORMAT = 'iso8601' +ISO8601 = '%Y-%m-%dT%H:%M:%SZ' +# Same as ISO8601, but with microsecond precision. +ISO8601_MICRO = '%Y-%m-%dT%H:%M:%S.%fZ' +HOST_PREFIX_RE = re.compile(r"^[A-Za-z0-9\.\-]+$") + + +def create_serializer(protocol_name, include_validation=True): + # TODO: Unknown protocols. + serializer = SERIALIZERS[protocol_name]() + if include_validation: + validator = validate.ParamValidator() + serializer = validate.ParamValidationDecorator(validator, serializer) + return serializer + + +class Serializer: + DEFAULT_METHOD = 'POST' + # Clients can change this to a different MutableMapping + # (i.e OrderedDict) if they want. This is used in the + # compliance test to match the hash ordering used in the + # tests. + MAP_TYPE = dict + DEFAULT_ENCODING = 'utf-8' + + def serialize_to_request(self, parameters, operation_model): + """Serialize parameters into an HTTP request. + + This method takes user provided parameters and a shape + model and serializes the parameters to an HTTP request. + More specifically, this method returns information about + parts of the HTTP request, it does not enforce a particular + interface or standard for an HTTP request. It instead returns + a dictionary of: + + * 'url_path' + * 'host_prefix' + * 'query_string' + * 'headers' + * 'body' + * 'method' + + It is then up to consumers to decide how to map this to a Request + object of their HTTP library of choice. Below is an example + return value:: + + {'body': {'Action': 'OperationName', + 'Bar': 'val2', + 'Foo': 'val1', + 'Version': '2014-01-01'}, + 'headers': {}, + 'method': 'POST', + 'query_string': '', + 'host_prefix': 'value.', + 'url_path': '/'} + + :param parameters: The dictionary input parameters for the + operation (i.e the user input). + :param operation_model: The OperationModel object that describes + the operation. + """ + raise NotImplementedError("serialize_to_request") + + def _create_default_request(self): + # Creates a boilerplate default request dict that subclasses + # can use as a starting point. + serialized = { + 'url_path': '/', + 'query_string': '', + 'method': self.DEFAULT_METHOD, + 'headers': {}, + # An empty body is represented as an empty byte string. + 'body': b'', + } + return serialized + + # Some extra utility methods subclasses can use. + + def _timestamp_iso8601(self, value): + if value.microsecond > 0: + timestamp_format = ISO8601_MICRO + else: + timestamp_format = ISO8601 + return value.strftime(timestamp_format) + + def _timestamp_unixtimestamp(self, value): + return int(calendar.timegm(value.timetuple())) + + def _timestamp_rfc822(self, value): + if isinstance(value, datetime.datetime): + value = self._timestamp_unixtimestamp(value) + return formatdate(value, usegmt=True) + + def _convert_timestamp_to_str(self, value, timestamp_format=None): + if timestamp_format is None: + timestamp_format = self.TIMESTAMP_FORMAT + timestamp_format = timestamp_format.lower() + datetime_obj = parse_to_aware_datetime(value) + converter = getattr(self, f'_timestamp_{timestamp_format}') + final_value = converter(datetime_obj) + return final_value + + def _get_serialized_name(self, shape, default_name): + # Returns the serialized name for the shape if it exists. + # Otherwise it will return the passed in default_name. + return shape.serialization.get('name', default_name) + + def _get_base64(self, value): + # Returns the base64-encoded version of value, handling + # both strings and bytes. The returned value is a string + # via the default encoding. + if isinstance(value, str): + value = value.encode(self.DEFAULT_ENCODING) + return base64.b64encode(value).strip().decode(self.DEFAULT_ENCODING) + + def _expand_host_prefix(self, parameters, operation_model): + operation_endpoint = operation_model.endpoint + if ( + operation_endpoint is None + or 'hostPrefix' not in operation_endpoint + ): + return None + + host_prefix_expression = operation_endpoint['hostPrefix'] + input_members = operation_model.input_shape.members + host_labels = [ + member + for member, shape in input_members.items() + if shape.serialization.get('hostLabel') + ] + format_kwargs = {} + bad_labels = [] + for name in host_labels: + param = parameters[name] + if not HOST_PREFIX_RE.match(param): + bad_labels.append(name) + format_kwargs[name] = param + if bad_labels: + raise ParamValidationError( + report=( + f"Invalid value for parameter(s): {', '.join(bad_labels)}. " + "Must contain only alphanumeric characters, hyphen, " + "or period." + ) + ) + return host_prefix_expression.format(**format_kwargs) + + +class QuerySerializer(Serializer): + TIMESTAMP_FORMAT = 'iso8601' + + def serialize_to_request(self, parameters, operation_model): + shape = operation_model.input_shape + serialized = self._create_default_request() + serialized['method'] = operation_model.http.get( + 'method', self.DEFAULT_METHOD + ) + serialized['headers'] = { + 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' + } + # The query serializer only deals with body params so + # that's what we hand off the _serialize_* methods. + body_params = self.MAP_TYPE() + body_params['Action'] = operation_model.name + body_params['Version'] = operation_model.metadata['apiVersion'] + if shape is not None: + self._serialize(body_params, parameters, shape) + serialized['body'] = body_params + + host_prefix = self._expand_host_prefix(parameters, operation_model) + if host_prefix is not None: + serialized['host_prefix'] = host_prefix + + return serialized + + def _serialize(self, serialized, value, shape, prefix=''): + # serialized: The dict that is incrementally added to with the + # final serialized parameters. + # value: The current user input value. + # shape: The shape object that describes the structure of the + # input. + # prefix: The incrementally built up prefix for the serialized + # key (i.e Foo.bar.members.1). + method = getattr( + self, + f'_serialize_type_{shape.type_name}', + self._default_serialize, + ) + method(serialized, value, shape, prefix=prefix) + + def _serialize_type_structure(self, serialized, value, shape, prefix=''): + members = shape.members + for key, value in value.items(): + member_shape = members[key] + member_prefix = self._get_serialized_name(member_shape, key) + if prefix: + member_prefix = f'{prefix}.{member_prefix}' + self._serialize(serialized, value, member_shape, member_prefix) + + def _serialize_type_list(self, serialized, value, shape, prefix=''): + if not value: + # The query protocol serializes empty lists. + serialized[prefix] = '' + return + if self._is_shape_flattened(shape): + list_prefix = prefix + if shape.member.serialization.get('name'): + name = self._get_serialized_name(shape.member, default_name='') + # Replace '.Original' with '.{name}'. + list_prefix = '.'.join(prefix.split('.')[:-1] + [name]) + else: + list_name = shape.member.serialization.get('name', 'member') + list_prefix = f'{prefix}.{list_name}' + for i, element in enumerate(value, 1): + element_prefix = f'{list_prefix}.{i}' + element_shape = shape.member + self._serialize(serialized, element, element_shape, element_prefix) + + def _serialize_type_map(self, serialized, value, shape, prefix=''): + if self._is_shape_flattened(shape): + full_prefix = prefix + else: + full_prefix = '%s.entry' % prefix + template = full_prefix + '.{i}.{suffix}' + key_shape = shape.key + value_shape = shape.value + key_suffix = self._get_serialized_name(key_shape, default_name='key') + value_suffix = self._get_serialized_name(value_shape, 'value') + for i, key in enumerate(value, 1): + key_prefix = template.format(i=i, suffix=key_suffix) + value_prefix = template.format(i=i, suffix=value_suffix) + self._serialize(serialized, key, key_shape, key_prefix) + self._serialize(serialized, value[key], value_shape, value_prefix) + + def _serialize_type_blob(self, serialized, value, shape, prefix=''): + # Blob args must be base64 encoded. + serialized[prefix] = self._get_base64(value) + + def _serialize_type_timestamp(self, serialized, value, shape, prefix=''): + serialized[prefix] = self._convert_timestamp_to_str( + value, shape.serialization.get('timestampFormat') + ) + + def _serialize_type_boolean(self, serialized, value, shape, prefix=''): + if value: + serialized[prefix] = 'true' + else: + serialized[prefix] = 'false' + + def _default_serialize(self, serialized, value, shape, prefix=''): + serialized[prefix] = value + + def _is_shape_flattened(self, shape): + return shape.serialization.get('flattened') + + +class EC2Serializer(QuerySerializer): + """EC2 specific customizations to the query protocol serializers. + + The EC2 model is almost, but not exactly, similar to the query protocol + serializer. This class encapsulates those differences. The model + will have be marked with a ``protocol`` of ``ec2``, so you don't need + to worry about wiring this class up correctly. + + """ + + def _get_serialized_name(self, shape, default_name): + # Returns the serialized name for the shape if it exists. + # Otherwise it will return the passed in default_name. + if 'queryName' in shape.serialization: + return shape.serialization['queryName'] + elif 'name' in shape.serialization: + # A locationName is always capitalized + # on input for the ec2 protocol. + name = shape.serialization['name'] + return name[0].upper() + name[1:] + else: + return default_name + + def _serialize_type_list(self, serialized, value, shape, prefix=''): + for i, element in enumerate(value, 1): + element_prefix = f'{prefix}.{i}' + element_shape = shape.member + self._serialize(serialized, element, element_shape, element_prefix) + + +class JSONSerializer(Serializer): + TIMESTAMP_FORMAT = 'unixtimestamp' + + def serialize_to_request(self, parameters, operation_model): + target = '{}.{}'.format( + operation_model.metadata['targetPrefix'], + operation_model.name, + ) + json_version = operation_model.metadata['jsonVersion'] + serialized = self._create_default_request() + serialized['method'] = operation_model.http.get( + 'method', self.DEFAULT_METHOD + ) + serialized['headers'] = { + 'X-Amz-Target': target, + 'Content-Type': 'application/x-amz-json-%s' % json_version, + } + body = self.MAP_TYPE() + input_shape = operation_model.input_shape + if input_shape is not None: + self._serialize(body, parameters, input_shape) + serialized['body'] = json.dumps(body).encode(self.DEFAULT_ENCODING) + + host_prefix = self._expand_host_prefix(parameters, operation_model) + if host_prefix is not None: + serialized['host_prefix'] = host_prefix + + return serialized + + def _serialize(self, serialized, value, shape, key=None): + method = getattr( + self, + '_serialize_type_%s' % shape.type_name, + self._default_serialize, + ) + method(serialized, value, shape, key) + + def _serialize_type_structure(self, serialized, value, shape, key): + if shape.is_document_type: + serialized[key] = value + else: + if key is not None: + # If a key is provided, this is a result of a recursive + # call so we need to add a new child dict as the value + # of the passed in serialized dict. We'll then add + # all the structure members as key/vals in the new serialized + # dictionary we just created. + new_serialized = self.MAP_TYPE() + serialized[key] = new_serialized + serialized = new_serialized + members = shape.members + for member_key, member_value in value.items(): + member_shape = members[member_key] + if 'name' in member_shape.serialization: + member_key = member_shape.serialization['name'] + self._serialize( + serialized, member_value, member_shape, member_key + ) + + def _serialize_type_map(self, serialized, value, shape, key): + map_obj = self.MAP_TYPE() + serialized[key] = map_obj + for sub_key, sub_value in value.items(): + self._serialize(map_obj, sub_value, shape.value, sub_key) + + def _serialize_type_list(self, serialized, value, shape, key): + list_obj = [] + serialized[key] = list_obj + for list_item in value: + wrapper = {} + # The JSON list serialization is the only case where we aren't + # setting a key on a dict. We handle this by using + # a __current__ key on a wrapper dict to serialize each + # list item before appending it to the serialized list. + self._serialize(wrapper, list_item, shape.member, "__current__") + list_obj.append(wrapper["__current__"]) + + def _default_serialize(self, serialized, value, shape, key): + serialized[key] = value + + def _serialize_type_timestamp(self, serialized, value, shape, key): + serialized[key] = self._convert_timestamp_to_str( + value, shape.serialization.get('timestampFormat') + ) + + def _serialize_type_blob(self, serialized, value, shape, key): + serialized[key] = self._get_base64(value) + + +class BaseRestSerializer(Serializer): + """Base class for rest protocols. + + The only variance between the various rest protocols is the + way that the body is serialized. All other aspects (headers, uri, etc.) + are the same and logic for serializing those aspects lives here. + + Subclasses must implement the ``_serialize_body_params`` method. + + """ + + QUERY_STRING_TIMESTAMP_FORMAT = 'iso8601' + HEADER_TIMESTAMP_FORMAT = 'rfc822' + # This is a list of known values for the "location" key in the + # serialization dict. The location key tells us where on the request + # to put the serialized value. + KNOWN_LOCATIONS = ['uri', 'querystring', 'header', 'headers'] + + def serialize_to_request(self, parameters, operation_model): + serialized = self._create_default_request() + serialized['method'] = operation_model.http.get( + 'method', self.DEFAULT_METHOD + ) + shape = operation_model.input_shape + if shape is None: + serialized['url_path'] = operation_model.http['requestUri'] + return serialized + shape_members = shape.members + # While the ``serialized`` key holds the final serialized request + # data, we need interim dicts for the various locations of the + # request. We need this for the uri_path_kwargs and the + # query_string_kwargs because they are templated, so we need + # to gather all the needed data for the string template, + # then we render the template. The body_kwargs is needed + # because once we've collected them all, we run them through + # _serialize_body_params, which for rest-json, creates JSON, + # and for rest-xml, will create XML. This is what the + # ``partitioned`` dict below is for. + partitioned = { + 'uri_path_kwargs': self.MAP_TYPE(), + 'query_string_kwargs': self.MAP_TYPE(), + 'body_kwargs': self.MAP_TYPE(), + 'headers': self.MAP_TYPE(), + } + for param_name, param_value in parameters.items(): + if param_value is None: + # Don't serialize any parameter with a None value. + continue + self._partition_parameters( + partitioned, param_name, param_value, shape_members + ) + serialized['url_path'] = self._render_uri_template( + operation_model.http['requestUri'], partitioned['uri_path_kwargs'] + ) + + if 'authPath' in operation_model.http: + serialized['auth_path'] = self._render_uri_template( + operation_model.http['authPath'], + partitioned['uri_path_kwargs'], + ) + # Note that we lean on the http implementation to handle the case + # where the requestUri path already has query parameters. + # The bundled http client, requests, already supports this. + serialized['query_string'] = partitioned['query_string_kwargs'] + if partitioned['headers']: + serialized['headers'] = partitioned['headers'] + self._serialize_payload( + partitioned, parameters, serialized, shape, shape_members + ) + self._serialize_content_type(serialized, shape, shape_members) + + host_prefix = self._expand_host_prefix(parameters, operation_model) + if host_prefix is not None: + serialized['host_prefix'] = host_prefix + + return serialized + + def _render_uri_template(self, uri_template, params): + # We need to handle two cases:: + # + # /{Bucket}/foo + # /{Key+}/bar + # A label ending with '+' is greedy. There can only + # be one greedy key. + encoded_params = {} + for template_param in re.findall(r'{(.*?)}', uri_template): + if template_param.endswith('+'): + encoded_params[template_param] = percent_encode( + params[template_param[:-1]], safe='/~' + ) + else: + encoded_params[template_param] = percent_encode( + params[template_param] + ) + return uri_template.format(**encoded_params) + + def _serialize_payload( + self, partitioned, parameters, serialized, shape, shape_members + ): + # partitioned - The user input params partitioned by location. + # parameters - The user input params. + # serialized - The final serialized request dict. + # shape - Describes the expected input shape + # shape_members - The members of the input struct shape + payload_member = shape.serialization.get('payload') + if self._has_streaming_payload(payload_member, shape_members): + # If it's streaming, then the body is just the + # value of the payload. + body_payload = parameters.get(payload_member, b'') + body_payload = self._encode_payload(body_payload) + serialized['body'] = body_payload + elif payload_member is not None: + # If there's a payload member, we serialized that + # member to they body. + body_params = parameters.get(payload_member) + if body_params is not None: + serialized['body'] = self._serialize_body_params( + body_params, shape_members[payload_member] + ) + else: + serialized['body'] = self._serialize_empty_body() + elif partitioned['body_kwargs']: + serialized['body'] = self._serialize_body_params( + partitioned['body_kwargs'], shape + ) + elif self._requires_empty_body(shape): + serialized['body'] = self._serialize_empty_body() + + def _serialize_empty_body(self): + return b'' + + def _serialize_content_type(self, serialized, shape, shape_members): + """ + Some protocols require varied Content-Type headers + depending on user input. This allows subclasses to apply + this conditionally. + """ + pass + + def _requires_empty_body(self, shape): + """ + Some protocols require a specific body to represent an empty + payload. This allows subclasses to apply this conditionally. + """ + return False + + def _has_streaming_payload(self, payload, shape_members): + """Determine if payload is streaming (a blob or string).""" + return payload is not None and shape_members[payload].type_name in ( + 'blob', + 'string', + ) + + def _encode_payload(self, body): + if isinstance(body, str): + return body.encode(self.DEFAULT_ENCODING) + return body + + def _partition_parameters( + self, partitioned, param_name, param_value, shape_members + ): + # This takes the user provided input parameter (``param``) + # and figures out where they go in the request dict. + # Some params are HTTP headers, some are used in the URI, some + # are in the request body. This method deals with this. + member = shape_members[param_name] + location = member.serialization.get('location') + key_name = member.serialization.get('name', param_name) + if location == 'uri': + partitioned['uri_path_kwargs'][key_name] = param_value + elif location == 'querystring': + if isinstance(param_value, dict): + partitioned['query_string_kwargs'].update(param_value) + elif isinstance(param_value, bool): + bool_str = str(param_value).lower() + partitioned['query_string_kwargs'][key_name] = bool_str + elif member.type_name == 'timestamp': + timestamp_format = member.serialization.get( + 'timestampFormat', self.QUERY_STRING_TIMESTAMP_FORMAT + ) + timestamp = self._convert_timestamp_to_str( + param_value, timestamp_format + ) + partitioned['query_string_kwargs'][key_name] = timestamp + else: + partitioned['query_string_kwargs'][key_name] = param_value + elif location == 'header': + shape = shape_members[param_name] + if not param_value and shape.type_name == 'list': + # Empty lists should not be set on the headers + return + value = self._convert_header_value(shape, param_value) + partitioned['headers'][key_name] = str(value) + elif location == 'headers': + # 'headers' is a bit of an oddball. The ``key_name`` + # is actually really a prefix for the header names: + header_prefix = key_name + # The value provided by the user is a dict so we'll be + # creating multiple header key/val pairs. The key + # name to use for each header is the header_prefix (``key_name``) + # plus the key provided by the user. + self._do_serialize_header_map( + header_prefix, partitioned['headers'], param_value + ) + else: + partitioned['body_kwargs'][param_name] = param_value + + def _do_serialize_header_map(self, header_prefix, headers, user_input): + for key, val in user_input.items(): + full_key = header_prefix + key + headers[full_key] = val + + def _serialize_body_params(self, params, shape): + raise NotImplementedError('_serialize_body_params') + + def _convert_header_value(self, shape, value): + if shape.type_name == 'timestamp': + datetime_obj = parse_to_aware_datetime(value) + timestamp = calendar.timegm(datetime_obj.utctimetuple()) + timestamp_format = shape.serialization.get( + 'timestampFormat', self.HEADER_TIMESTAMP_FORMAT + ) + return self._convert_timestamp_to_str(timestamp, timestamp_format) + elif shape.type_name == 'list': + converted_value = [ + self._convert_header_value(shape.member, v) + for v in value + if v is not None + ] + return ",".join(converted_value) + elif is_json_value_header(shape): + # Serialize with no spaces after separators to save space in + # the header. + return self._get_base64(json.dumps(value, separators=(',', ':'))) + else: + return value + + +class RestJSONSerializer(BaseRestSerializer, JSONSerializer): + def _serialize_empty_body(self): + return b'{}' + + def _requires_empty_body(self, shape): + """ + Serialize an empty JSON object whenever the shape has + members not targeting a location. + """ + for member, val in shape.members.items(): + if 'location' not in val.serialization: + return True + return False + + def _serialize_content_type(self, serialized, shape, shape_members): + """Set Content-Type to application/json for all structured bodies.""" + payload = shape.serialization.get('payload') + if self._has_streaming_payload(payload, shape_members): + # Don't apply content-type to streaming bodies + return + + has_body = serialized['body'] != b'' + has_content_type = has_header('Content-Type', serialized['headers']) + if has_body and not has_content_type: + serialized['headers']['Content-Type'] = 'application/json' + + def _serialize_body_params(self, params, shape): + serialized_body = self.MAP_TYPE() + self._serialize(serialized_body, params, shape) + return json.dumps(serialized_body).encode(self.DEFAULT_ENCODING) + + +class RestXMLSerializer(BaseRestSerializer): + TIMESTAMP_FORMAT = 'iso8601' + + def _serialize_body_params(self, params, shape): + root_name = shape.serialization['name'] + pseudo_root = ElementTree.Element('') + self._serialize(shape, params, pseudo_root, root_name) + real_root = list(pseudo_root)[0] + return ElementTree.tostring(real_root, encoding=self.DEFAULT_ENCODING) + + def _serialize(self, shape, params, xmlnode, name): + method = getattr( + self, + '_serialize_type_%s' % shape.type_name, + self._default_serialize, + ) + method(xmlnode, params, shape, name) + + def _serialize_type_structure(self, xmlnode, params, shape, name): + structure_node = ElementTree.SubElement(xmlnode, name) + + if 'xmlNamespace' in shape.serialization: + namespace_metadata = shape.serialization['xmlNamespace'] + attribute_name = 'xmlns' + if namespace_metadata.get('prefix'): + attribute_name += ':%s' % namespace_metadata['prefix'] + structure_node.attrib[attribute_name] = namespace_metadata['uri'] + for key, value in params.items(): + member_shape = shape.members[key] + member_name = member_shape.serialization.get('name', key) + # We need to special case member shapes that are marked as an + # xmlAttribute. Rather than serializing into an XML child node, + # we instead serialize the shape to an XML attribute of the + # *current* node. + if value is None: + # Don't serialize any param whose value is None. + return + if member_shape.serialization.get('xmlAttribute'): + # xmlAttributes must have a serialization name. + xml_attribute_name = member_shape.serialization['name'] + structure_node.attrib[xml_attribute_name] = value + continue + self._serialize(member_shape, value, structure_node, member_name) + + def _serialize_type_list(self, xmlnode, params, shape, name): + member_shape = shape.member + if shape.serialization.get('flattened'): + element_name = name + list_node = xmlnode + else: + element_name = member_shape.serialization.get('name', 'member') + list_node = ElementTree.SubElement(xmlnode, name) + for item in params: + self._serialize(member_shape, item, list_node, element_name) + + def _serialize_type_map(self, xmlnode, params, shape, name): + # Given the ``name`` of MyMap, and input of {"key1": "val1"} + # we serialize this as: + # + # + # key1 + # val1 + # + # + node = ElementTree.SubElement(xmlnode, name) + # TODO: handle flattened maps. + for key, value in params.items(): + entry_node = ElementTree.SubElement(node, 'entry') + key_name = self._get_serialized_name(shape.key, default_name='key') + val_name = self._get_serialized_name( + shape.value, default_name='value' + ) + self._serialize(shape.key, key, entry_node, key_name) + self._serialize(shape.value, value, entry_node, val_name) + + def _serialize_type_boolean(self, xmlnode, params, shape, name): + # For scalar types, the 'params' attr is actually just a scalar + # value representing the data we need to serialize as a boolean. + # It will either be 'true' or 'false' + node = ElementTree.SubElement(xmlnode, name) + if params: + str_value = 'true' + else: + str_value = 'false' + node.text = str_value + + def _serialize_type_blob(self, xmlnode, params, shape, name): + node = ElementTree.SubElement(xmlnode, name) + node.text = self._get_base64(params) + + def _serialize_type_timestamp(self, xmlnode, params, shape, name): + node = ElementTree.SubElement(xmlnode, name) + node.text = self._convert_timestamp_to_str( + params, shape.serialization.get('timestampFormat') + ) + + def _default_serialize(self, xmlnode, params, shape, name): + node = ElementTree.SubElement(xmlnode, name) + node.text = str(params) + + +SERIALIZERS = { + 'ec2': EC2Serializer, + 'query': QuerySerializer, + 'json': JSONSerializer, + 'rest-json': RestJSONSerializer, + 'rest-xml': RestXMLSerializer, +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/session.py b/dbtzin/lib/python3.8/site-packages/botocore/session.py new file mode 100644 index 00000000..0739286e --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/session.py @@ -0,0 +1,1269 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +""" +This module contains the main interface to the botocore package, the +Session object. +""" + +import copy +import logging +import os +import platform +import socket +import warnings + +import botocore.client +import botocore.configloader +import botocore.credentials +import botocore.tokens +from botocore import ( + UNSIGNED, + __version__, + handlers, + invoke_initializers, + monitoring, + paginate, + retryhandler, + translate, + waiter, +) +from botocore.compat import HAS_CRT, MutableMapping +from botocore.configprovider import ( + BOTOCORE_DEFAUT_SESSION_VARIABLES, + ConfigChainFactory, + ConfiguredEndpointProvider, + ConfigValueStore, + DefaultConfigResolver, + SmartDefaultsConfigStoreFactory, + create_botocore_default_config_mapping, +) +from botocore.errorfactory import ClientExceptionsFactory +from botocore.exceptions import ( + ConfigNotFound, + InvalidDefaultsMode, + PartialCredentialsError, + ProfileNotFound, + UnknownServiceError, +) +from botocore.hooks import ( + EventAliaser, + HierarchicalEmitter, + first_non_none_response, +) +from botocore.loaders import create_loader +from botocore.model import ServiceModel +from botocore.parsers import ResponseParserFactory +from botocore.regions import EndpointResolver +from botocore.useragent import UserAgentString +from botocore.utils import ( + EVENT_ALIASES, + IMDSRegionProvider, + validate_region_name, +) + +from botocore.compat import HAS_CRT # noqa + + +logger = logging.getLogger(__name__) + + +class Session: + """ + The Session object collects together useful functionality + from `botocore` as well as important data such as configuration + information and credentials into a single, easy-to-use object. + + :ivar available_profiles: A list of profiles defined in the config + file associated with this session. + :ivar profile: The current profile. + """ + + SESSION_VARIABLES = copy.copy(BOTOCORE_DEFAUT_SESSION_VARIABLES) + + #: The default format string to use when configuring the botocore logger. + LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' + + def __init__( + self, + session_vars=None, + event_hooks=None, + include_builtin_handlers=True, + profile=None, + ): + """ + Create a new Session object. + + :type session_vars: dict + :param session_vars: A dictionary that is used to override some or all + of the environment variables associated with this session. The + key/value pairs defined in this dictionary will override the + corresponding variables defined in ``SESSION_VARIABLES``. + + :type event_hooks: BaseEventHooks + :param event_hooks: The event hooks object to use. If one is not + provided, an event hooks object will be automatically created + for you. + + :type include_builtin_handlers: bool + :param include_builtin_handlers: Indicates whether or not to + automatically register builtin handlers. + + :type profile: str + :param profile: The name of the profile to use for this + session. Note that the profile can only be set when + the session is created. + + """ + if event_hooks is None: + self._original_handler = HierarchicalEmitter() + else: + self._original_handler = event_hooks + self._events = EventAliaser(self._original_handler) + if include_builtin_handlers: + self._register_builtin_handlers(self._events) + self.user_agent_name = 'Botocore' + self.user_agent_version = __version__ + self.user_agent_extra = '' + # The _profile attribute is just used to cache the value + # of the current profile to avoid going through the normal + # config lookup process each access time. + self._profile = None + self._config = None + self._credentials = None + self._auth_token = None + self._profile_map = None + # This is a dict that stores per session specific config variable + # overrides via set_config_variable(). + self._session_instance_vars = {} + if profile is not None: + self._session_instance_vars['profile'] = profile + self._client_config = None + self._last_client_region_used = None + self._components = ComponentLocator() + self._internal_components = ComponentLocator() + self._register_components() + self.session_var_map = SessionVarDict(self, self.SESSION_VARIABLES) + if session_vars is not None: + self.session_var_map.update(session_vars) + invoke_initializers(self) + + def _register_components(self): + self._register_credential_provider() + self._register_token_provider() + self._register_data_loader() + self._register_endpoint_resolver() + self._register_event_emitter() + self._register_response_parser_factory() + self._register_exceptions_factory() + self._register_config_store() + self._register_monitor() + self._register_default_config_resolver() + self._register_smart_defaults_factory() + self._register_user_agent_creator() + + def _register_event_emitter(self): + self._components.register_component('event_emitter', self._events) + + def _register_token_provider(self): + self._components.lazy_register_component( + 'token_provider', self._create_token_resolver + ) + + def _create_token_resolver(self): + return botocore.tokens.create_token_resolver(self) + + def _register_credential_provider(self): + self._components.lazy_register_component( + 'credential_provider', self._create_credential_resolver + ) + + def _create_credential_resolver(self): + return botocore.credentials.create_credential_resolver( + self, region_name=self._last_client_region_used + ) + + def _register_data_loader(self): + self._components.lazy_register_component( + 'data_loader', + lambda: create_loader(self.get_config_variable('data_path')), + ) + + def _register_endpoint_resolver(self): + def create_default_resolver(): + loader = self.get_component('data_loader') + endpoints, path = loader.load_data_with_path('endpoints') + uses_builtin = loader.is_builtin_path(path) + return EndpointResolver(endpoints, uses_builtin_data=uses_builtin) + + self._internal_components.lazy_register_component( + 'endpoint_resolver', create_default_resolver + ) + + def _register_default_config_resolver(self): + def create_default_config_resolver(): + loader = self.get_component('data_loader') + defaults = loader.load_data('sdk-default-configuration') + return DefaultConfigResolver(defaults) + + self._internal_components.lazy_register_component( + 'default_config_resolver', create_default_config_resolver + ) + + def _register_smart_defaults_factory(self): + def create_smart_defaults_factory(): + default_config_resolver = self._get_internal_component( + 'default_config_resolver' + ) + imds_region_provider = IMDSRegionProvider(session=self) + return SmartDefaultsConfigStoreFactory( + default_config_resolver, imds_region_provider + ) + + self._internal_components.lazy_register_component( + 'smart_defaults_factory', create_smart_defaults_factory + ) + + def _register_response_parser_factory(self): + self._components.register_component( + 'response_parser_factory', ResponseParserFactory() + ) + + def _register_exceptions_factory(self): + self._internal_components.register_component( + 'exceptions_factory', ClientExceptionsFactory() + ) + + def _register_builtin_handlers(self, events): + for spec in handlers.BUILTIN_HANDLERS: + if len(spec) == 2: + event_name, handler = spec + self.register(event_name, handler) + else: + event_name, handler, register_type = spec + if register_type is handlers.REGISTER_FIRST: + self._events.register_first(event_name, handler) + elif register_type is handlers.REGISTER_LAST: + self._events.register_last(event_name, handler) + + def _register_config_store(self): + config_store_component = ConfigValueStore( + mapping=create_botocore_default_config_mapping(self) + ) + self._components.register_component( + 'config_store', config_store_component + ) + + def _register_monitor(self): + self._internal_components.lazy_register_component( + 'monitor', self._create_csm_monitor + ) + + def _register_user_agent_creator(self): + uas = UserAgentString.from_environment() + self._components.register_component('user_agent_creator', uas) + + def _create_csm_monitor(self): + if self.get_config_variable('csm_enabled'): + client_id = self.get_config_variable('csm_client_id') + host = self.get_config_variable('csm_host') + port = self.get_config_variable('csm_port') + handler = monitoring.Monitor( + adapter=monitoring.MonitorEventAdapter(), + publisher=monitoring.SocketPublisher( + socket=socket.socket(socket.AF_INET, socket.SOCK_DGRAM), + host=host, + port=port, + serializer=monitoring.CSMSerializer( + csm_client_id=client_id + ), + ), + ) + return handler + return None + + def _get_crt_version(self): + user_agent_creator = self.get_component('user_agent_creator') + return user_agent_creator._crt_version or 'Unknown' + + @property + def available_profiles(self): + return list(self._build_profile_map().keys()) + + def _build_profile_map(self): + # This will build the profile map if it has not been created, + # otherwise it will return the cached value. The profile map + # is a list of profile names, to the config values for the profile. + if self._profile_map is None: + self._profile_map = self.full_config['profiles'] + return self._profile_map + + @property + def profile(self): + if self._profile is None: + profile = self.get_config_variable('profile') + self._profile = profile + return self._profile + + def get_config_variable(self, logical_name, methods=None): + if methods is not None: + return self._get_config_variable_with_custom_methods( + logical_name, methods + ) + return self.get_component('config_store').get_config_variable( + logical_name + ) + + def _get_config_variable_with_custom_methods(self, logical_name, methods): + # If a custom list of methods was supplied we need to perserve the + # behavior with the new system. To do so a new chain that is a copy of + # the old one will be constructed, but only with the supplied methods + # being added to the chain. This chain will be consulted for a value + # and then thrown out. This is not efficient, nor is the methods arg + # used in botocore, this is just for backwards compatibility. + chain_builder = SubsetChainConfigFactory(session=self, methods=methods) + mapping = create_botocore_default_config_mapping(self) + for name, config_options in self.session_var_map.items(): + config_name, env_vars, default, typecast = config_options + build_chain_config_args = { + 'conversion_func': typecast, + 'default': default, + } + if 'instance' in methods: + build_chain_config_args['instance_name'] = name + if 'env' in methods: + build_chain_config_args['env_var_names'] = env_vars + if 'config' in methods: + build_chain_config_args['config_property_name'] = config_name + mapping[name] = chain_builder.create_config_chain( + **build_chain_config_args + ) + config_store_component = ConfigValueStore(mapping=mapping) + value = config_store_component.get_config_variable(logical_name) + return value + + def set_config_variable(self, logical_name, value): + """Set a configuration variable to a specific value. + + By using this method, you can override the normal lookup + process used in ``get_config_variable`` by explicitly setting + a value. Subsequent calls to ``get_config_variable`` will + use the ``value``. This gives you per-session specific + configuration values. + + :: + >>> # Assume logical name 'foo' maps to env var 'FOO' + >>> os.environ['FOO'] = 'myvalue' + >>> s.get_config_variable('foo') + 'myvalue' + >>> s.set_config_variable('foo', 'othervalue') + >>> s.get_config_variable('foo') + 'othervalue' + + :type logical_name: str + :param logical_name: The logical name of the session variable + you want to set. These are the keys in ``SESSION_VARIABLES``. + :param value: The value to associate with the config variable. + + """ + logger.debug( + "Setting config variable for %s to %r", + logical_name, + value, + ) + self._session_instance_vars[logical_name] = value + + def instance_variables(self): + return copy.copy(self._session_instance_vars) + + def get_scoped_config(self): + """ + Returns the config values from the config file scoped to the current + profile. + + The configuration data is loaded **only** from the config file. + It does not resolve variables based on different locations + (e.g. first from the session instance, then from environment + variables, then from the config file). If you want this lookup + behavior, use the ``get_config_variable`` method instead. + + Note that this configuration is specific to a single profile (the + ``profile`` session variable). + + If the ``profile`` session variable is set and the profile does + not exist in the config file, a ``ProfileNotFound`` exception + will be raised. + + :raises: ConfigNotFound, ConfigParseError, ProfileNotFound + :rtype: dict + + """ + profile_name = self.get_config_variable('profile') + profile_map = self._build_profile_map() + # If a profile is not explicitly set return the default + # profile config or an empty config dict if we don't have + # a default profile. + if profile_name is None: + return profile_map.get('default', {}) + elif profile_name not in profile_map: + # Otherwise if they specified a profile, it has to + # exist (even if it's the default profile) otherwise + # we complain. + raise ProfileNotFound(profile=profile_name) + else: + return profile_map[profile_name] + + @property + def full_config(self): + """Return the parsed config file. + + The ``get_config`` method returns the config associated with the + specified profile. This property returns the contents of the + **entire** config file. + + :rtype: dict + """ + if self._config is None: + try: + config_file = self.get_config_variable('config_file') + self._config = botocore.configloader.load_config(config_file) + except ConfigNotFound: + self._config = {'profiles': {}} + try: + # Now we need to inject the profiles from the + # credentials file. We don't actually need the values + # in the creds file, only the profile names so that we + # can validate the user is not referring to a nonexistent + # profile. + cred_file = self.get_config_variable('credentials_file') + cred_profiles = botocore.configloader.raw_config_parse( + cred_file + ) + for profile in cred_profiles: + cred_vars = cred_profiles[profile] + if profile not in self._config['profiles']: + self._config['profiles'][profile] = cred_vars + else: + self._config['profiles'][profile].update(cred_vars) + except ConfigNotFound: + pass + return self._config + + def get_default_client_config(self): + """Retrieves the default config for creating clients + + :rtype: botocore.client.Config + :returns: The default client config object when creating clients. If + the value is ``None`` then there is no default config object + attached to the session. + """ + return self._client_config + + def set_default_client_config(self, client_config): + """Sets the default config for creating clients + + :type client_config: botocore.client.Config + :param client_config: The default client config object when creating + clients. If the value is ``None`` then there is no default config + object attached to the session. + """ + self._client_config = client_config + + def set_credentials(self, access_key, secret_key, token=None): + """ + Manually create credentials for this session. If you would + prefer to use botocore without a config file, environment variables, + or IAM roles, you can pass explicit credentials into this + method to establish credentials for this session. + + :type access_key: str + :param access_key: The access key part of the credentials. + + :type secret_key: str + :param secret_key: The secret key part of the credentials. + + :type token: str + :param token: An option session token used by STS session + credentials. + """ + self._credentials = botocore.credentials.Credentials( + access_key, secret_key, token + ) + + def get_credentials(self): + """ + Return the :class:`botocore.credential.Credential` object + associated with this session. If the credentials have not + yet been loaded, this will attempt to load them. If they + have already been loaded, this will return the cached + credentials. + + """ + if self._credentials is None: + self._credentials = self._components.get_component( + 'credential_provider' + ).load_credentials() + return self._credentials + + def get_auth_token(self): + """ + Return the :class:`botocore.tokens.AuthToken` object associated with + this session. If the authorization token has not yet been loaded, this + will attempt to load it. If it has already been loaded, this will + return the cached authorization token. + + """ + if self._auth_token is None: + provider = self._components.get_component('token_provider') + self._auth_token = provider.load_token() + return self._auth_token + + def user_agent(self): + """ + Return a string suitable for use as a User-Agent header. + The string will be of the form: + + / Python/ / + + Where: + + - agent_name is the value of the `user_agent_name` attribute + of the session object (`Botocore` by default). + - agent_version is the value of the `user_agent_version` + attribute of the session object (the botocore version by default). + by default. + - py_ver is the version of the Python interpreter beng used. + - plat_name is the name of the platform (e.g. Darwin) + - plat_ver is the version of the platform + - exec_env is exec-env/$AWS_EXECUTION_ENV + + If ``user_agent_extra`` is not empty, then this value will be + appended to the end of the user agent string. + + """ + base = ( + f'{self.user_agent_name}/{self.user_agent_version} ' + f'Python/{platform.python_version()} ' + f'{platform.system()}/{platform.release()}' + ) + if HAS_CRT: + base += ' awscrt/%s' % self._get_crt_version() + if os.environ.get('AWS_EXECUTION_ENV') is not None: + base += ' exec-env/%s' % os.environ.get('AWS_EXECUTION_ENV') + if self.user_agent_extra: + base += ' %s' % self.user_agent_extra + + return base + + def get_data(self, data_path): + """ + Retrieve the data associated with `data_path`. + + :type data_path: str + :param data_path: The path to the data you wish to retrieve. + """ + return self.get_component('data_loader').load_data(data_path) + + def get_service_model(self, service_name, api_version=None): + """Get the service model object. + + :type service_name: string + :param service_name: The service name + + :type api_version: string + :param api_version: The API version of the service. If none is + provided, then the latest API version will be used. + + :rtype: L{botocore.model.ServiceModel} + :return: The botocore service model for the service. + + """ + service_description = self.get_service_data(service_name, api_version) + return ServiceModel(service_description, service_name=service_name) + + def get_waiter_model(self, service_name, api_version=None): + loader = self.get_component('data_loader') + waiter_config = loader.load_service_model( + service_name, 'waiters-2', api_version + ) + return waiter.WaiterModel(waiter_config) + + def get_paginator_model(self, service_name, api_version=None): + loader = self.get_component('data_loader') + paginator_config = loader.load_service_model( + service_name, 'paginators-1', api_version + ) + return paginate.PaginatorModel(paginator_config) + + def get_service_data(self, service_name, api_version=None): + """ + Retrieve the fully merged data associated with a service. + """ + data_path = service_name + service_data = self.get_component('data_loader').load_service_model( + data_path, type_name='service-2', api_version=api_version + ) + service_id = EVENT_ALIASES.get(service_name, service_name) + self._events.emit( + 'service-data-loaded.%s' % service_id, + service_data=service_data, + service_name=service_name, + session=self, + ) + return service_data + + def get_available_services(self): + """ + Return a list of names of available services. + """ + return self.get_component('data_loader').list_available_services( + type_name='service-2' + ) + + def set_debug_logger(self, logger_name='botocore'): + """ + Convenience function to quickly configure full debug output + to go to the console. + """ + self.set_stream_logger(logger_name, logging.DEBUG) + + def set_stream_logger( + self, logger_name, log_level, stream=None, format_string=None + ): + """ + Convenience method to configure a stream logger. + + :type logger_name: str + :param logger_name: The name of the logger to configure + + :type log_level: str + :param log_level: The log level to set for the logger. This + is any param supported by the ``.setLevel()`` method of + a ``Log`` object. + + :type stream: file + :param stream: A file like object to log to. If none is provided + then sys.stderr will be used. + + :type format_string: str + :param format_string: The format string to use for the log + formatter. If none is provided this will default to + ``self.LOG_FORMAT``. + + """ + log = logging.getLogger(logger_name) + log.setLevel(logging.DEBUG) + + ch = logging.StreamHandler(stream) + ch.setLevel(log_level) + + # create formatter + if format_string is None: + format_string = self.LOG_FORMAT + formatter = logging.Formatter(format_string) + + # add formatter to ch + ch.setFormatter(formatter) + + # add ch to logger + log.addHandler(ch) + + def set_file_logger(self, log_level, path, logger_name='botocore'): + """ + Convenience function to quickly configure any level of logging + to a file. + + :type log_level: int + :param log_level: A log level as specified in the `logging` module + + :type path: string + :param path: Path to the log file. The file will be created + if it doesn't already exist. + """ + log = logging.getLogger(logger_name) + log.setLevel(logging.DEBUG) + + # create console handler and set level to debug + ch = logging.FileHandler(path) + ch.setLevel(log_level) + + # create formatter + formatter = logging.Formatter(self.LOG_FORMAT) + + # add formatter to ch + ch.setFormatter(formatter) + + # add ch to logger + log.addHandler(ch) + + def register( + self, event_name, handler, unique_id=None, unique_id_uses_count=False + ): + """Register a handler with an event. + + :type event_name: str + :param event_name: The name of the event. + + :type handler: callable + :param handler: The callback to invoke when the event + is emitted. This object must be callable, and must + accept ``**kwargs``. If either of these preconditions are + not met, a ``ValueError`` will be raised. + + :type unique_id: str + :param unique_id: An optional identifier to associate with the + registration. A unique_id can only be used once for + the entire session registration (unless it is unregistered). + This can be used to prevent an event handler from being + registered twice. + + :param unique_id_uses_count: boolean + :param unique_id_uses_count: Specifies if the event should maintain + a count when a ``unique_id`` is registered and unregisted. The + event can only be completely unregistered once every register call + using the unique id has been matched by an ``unregister`` call. + If ``unique_id`` is specified, subsequent ``register`` + calls must use the same value for ``unique_id_uses_count`` + as the ``register`` call that first registered the event. + + :raises ValueError: If the call to ``register`` uses ``unique_id`` + but the value for ``unique_id_uses_count`` differs from the + ``unique_id_uses_count`` value declared by the very first + ``register`` call for that ``unique_id``. + """ + self._events.register( + event_name, + handler, + unique_id, + unique_id_uses_count=unique_id_uses_count, + ) + + def unregister( + self, + event_name, + handler=None, + unique_id=None, + unique_id_uses_count=False, + ): + """Unregister a handler with an event. + + :type event_name: str + :param event_name: The name of the event. + + :type handler: callable + :param handler: The callback to unregister. + + :type unique_id: str + :param unique_id: A unique identifier identifying the callback + to unregister. You can provide either the handler or the + unique_id, you do not have to provide both. + + :param unique_id_uses_count: boolean + :param unique_id_uses_count: Specifies if the event should maintain + a count when a ``unique_id`` is registered and unregisted. The + event can only be completely unregistered once every ``register`` + call using the ``unique_id`` has been matched by an ``unregister`` + call. If the ``unique_id`` is specified, subsequent + ``unregister`` calls must use the same value for + ``unique_id_uses_count`` as the ``register`` call that first + registered the event. + + :raises ValueError: If the call to ``unregister`` uses ``unique_id`` + but the value for ``unique_id_uses_count`` differs from the + ``unique_id_uses_count`` value declared by the very first + ``register`` call for that ``unique_id``. + """ + self._events.unregister( + event_name, + handler=handler, + unique_id=unique_id, + unique_id_uses_count=unique_id_uses_count, + ) + + def emit(self, event_name, **kwargs): + return self._events.emit(event_name, **kwargs) + + def emit_first_non_none_response(self, event_name, **kwargs): + responses = self._events.emit(event_name, **kwargs) + return first_non_none_response(responses) + + def get_component(self, name): + try: + return self._components.get_component(name) + except ValueError: + if name in ['endpoint_resolver', 'exceptions_factory']: + warnings.warn( + 'Fetching the %s component with the get_component() ' + 'method is deprecated as the component has always been ' + 'considered an internal interface of botocore' % name, + DeprecationWarning, + ) + return self._internal_components.get_component(name) + raise + + def _get_internal_component(self, name): + # While this method may be called by botocore classes outside of the + # Session, this method should **never** be used by a class that lives + # outside of botocore. + return self._internal_components.get_component(name) + + def _register_internal_component(self, name, component): + # While this method may be called by botocore classes outside of the + # Session, this method should **never** be used by a class that lives + # outside of botocore. + return self._internal_components.register_component(name, component) + + def register_component(self, name, component): + self._components.register_component(name, component) + + def lazy_register_component(self, name, component): + self._components.lazy_register_component(name, component) + + def create_client( + self, + service_name, + region_name=None, + api_version=None, + use_ssl=True, + verify=None, + endpoint_url=None, + aws_access_key_id=None, + aws_secret_access_key=None, + aws_session_token=None, + config=None, + ): + """Create a botocore client. + + :type service_name: string + :param service_name: The name of the service for which a client will + be created. You can use the ``Session.get_available_services()`` + method to get a list of all available service names. + + :type region_name: string + :param region_name: The name of the region associated with the client. + A client is associated with a single region. + + :type api_version: string + :param api_version: The API version to use. By default, botocore will + use the latest API version when creating a client. You only need + to specify this parameter if you want to use a previous API version + of the client. + + :type use_ssl: boolean + :param use_ssl: Whether or not to use SSL. By default, SSL is used. + Note that not all services support non-ssl connections. + + :type verify: boolean/string + :param verify: Whether or not to verify SSL certificates. + By default SSL certificates are verified. You can provide the + following values: + + * False - do not validate SSL certificates. SSL will still be + used (unless use_ssl is False), but SSL certificates + will not be verified. + * path/to/cert/bundle.pem - A filename of the CA cert bundle to + uses. You can specify this argument if you want to use a + different CA cert bundle than the one used by botocore. + + :type endpoint_url: string + :param endpoint_url: The complete URL to use for the constructed + client. Normally, botocore will automatically construct the + appropriate URL to use when communicating with a service. You can + specify a complete URL (including the "http/https" scheme) to + override this behavior. If this value is provided, then + ``use_ssl`` is ignored. + + :type aws_access_key_id: string + :param aws_access_key_id: The access key to use when creating + the client. This is entirely optional, and if not provided, + the credentials configured for the session will automatically + be used. You only need to provide this argument if you want + to override the credentials used for this specific client. + + :type aws_secret_access_key: string + :param aws_secret_access_key: The secret key to use when creating + the client. Same semantics as aws_access_key_id above. + + :type aws_session_token: string + :param aws_session_token: The session token to use when creating + the client. Same semantics as aws_access_key_id above. + + :type config: botocore.client.Config + :param config: Advanced client configuration options. If a value + is specified in the client config, its value will take precedence + over environment variables and configuration values, but not over + a value passed explicitly to the method. If a default config + object is set on the session, the config object used when creating + the client will be the result of calling ``merge()`` on the + default config with the config provided to this call. + + :rtype: botocore.client.BaseClient + :return: A botocore client instance + + """ + default_client_config = self.get_default_client_config() + # If a config is provided and a default config is set, then + # use the config resulting from merging the two. + if config is not None and default_client_config is not None: + config = default_client_config.merge(config) + # If a config was not provided then use the default + # client config from the session + elif default_client_config is not None: + config = default_client_config + + region_name = self._resolve_region_name(region_name, config) + + # Figure out the verify value base on the various + # configuration options. + if verify is None: + verify = self.get_config_variable('ca_bundle') + + if api_version is None: + api_version = self.get_config_variable('api_versions').get( + service_name, None + ) + + loader = self.get_component('data_loader') + event_emitter = self.get_component('event_emitter') + response_parser_factory = self.get_component('response_parser_factory') + if config is not None and config.signature_version is UNSIGNED: + credentials = None + elif ( + aws_access_key_id is not None and aws_secret_access_key is not None + ): + credentials = botocore.credentials.Credentials( + access_key=aws_access_key_id, + secret_key=aws_secret_access_key, + token=aws_session_token, + ) + elif self._missing_cred_vars(aws_access_key_id, aws_secret_access_key): + raise PartialCredentialsError( + provider='explicit', + cred_var=self._missing_cred_vars( + aws_access_key_id, aws_secret_access_key + ), + ) + else: + credentials = self.get_credentials() + auth_token = self.get_auth_token() + endpoint_resolver = self._get_internal_component('endpoint_resolver') + exceptions_factory = self._get_internal_component('exceptions_factory') + config_store = copy.copy(self.get_component('config_store')) + user_agent_creator = self.get_component('user_agent_creator') + # Session configuration values for the user agent string are applied + # just before each client creation because they may have been modified + # at any time between session creation and client creation. + user_agent_creator.set_session_config( + session_user_agent_name=self.user_agent_name, + session_user_agent_version=self.user_agent_version, + session_user_agent_extra=self.user_agent_extra, + ) + defaults_mode = self._resolve_defaults_mode(config, config_store) + if defaults_mode != 'legacy': + smart_defaults_factory = self._get_internal_component( + 'smart_defaults_factory' + ) + smart_defaults_factory.merge_smart_defaults( + config_store, defaults_mode, region_name + ) + + self._add_configured_endpoint_provider( + client_name=service_name, + config_store=config_store, + ) + + client_creator = botocore.client.ClientCreator( + loader, + endpoint_resolver, + self.user_agent(), + event_emitter, + retryhandler, + translate, + response_parser_factory, + exceptions_factory, + config_store, + user_agent_creator=user_agent_creator, + ) + client = client_creator.create_client( + service_name=service_name, + region_name=region_name, + is_secure=use_ssl, + endpoint_url=endpoint_url, + verify=verify, + credentials=credentials, + scoped_config=self.get_scoped_config(), + client_config=config, + api_version=api_version, + auth_token=auth_token, + ) + monitor = self._get_internal_component('monitor') + if monitor is not None: + monitor.register(client.meta.events) + return client + + def _resolve_region_name(self, region_name, config): + # Figure out the user-provided region based on the various + # configuration options. + if region_name is None: + if config and config.region_name is not None: + region_name = config.region_name + else: + region_name = self.get_config_variable('region') + + validate_region_name(region_name) + # For any client that we create in retrieving credentials + # we want to create it using the same region as specified in + # creating this client. It is important to note though that the + # credentials client is only created once per session. So if a new + # client is created with a different region, its credential resolver + # will use the region of the first client. However, that is not an + # issue as of now because the credential resolver uses only STS and + # the credentials returned at regional endpoints are valid across + # all regions in the partition. + self._last_client_region_used = region_name + return region_name + + def _resolve_defaults_mode(self, client_config, config_store): + mode = config_store.get_config_variable('defaults_mode') + + if client_config and client_config.defaults_mode: + mode = client_config.defaults_mode + + default_config_resolver = self._get_internal_component( + 'default_config_resolver' + ) + default_modes = default_config_resolver.get_default_modes() + lmode = mode.lower() + if lmode not in default_modes: + raise InvalidDefaultsMode( + mode=mode, valid_modes=', '.join(default_modes) + ) + + return lmode + + def _add_configured_endpoint_provider(self, client_name, config_store): + chain = ConfiguredEndpointProvider( + full_config=self.full_config, + scoped_config=self.get_scoped_config(), + client_name=client_name, + ) + config_store.set_config_provider( + logical_name='endpoint_url', + provider=chain, + ) + + def _missing_cred_vars(self, access_key, secret_key): + if access_key is not None and secret_key is None: + return 'aws_secret_access_key' + if secret_key is not None and access_key is None: + return 'aws_access_key_id' + return None + + def get_available_partitions(self): + """Lists the available partitions found on disk + + :rtype: list + :return: Returns a list of partition names (e.g., ["aws", "aws-cn"]) + """ + resolver = self._get_internal_component('endpoint_resolver') + return resolver.get_available_partitions() + + def get_partition_for_region(self, region_name): + """Lists the partition name of a particular region. + + :type region_name: string + :param region_name: Name of the region to list partition for (e.g., + us-east-1). + + :rtype: string + :return: Returns the respective partition name (e.g., aws). + """ + resolver = self._get_internal_component('endpoint_resolver') + return resolver.get_partition_for_region(region_name) + + def get_available_regions( + self, service_name, partition_name='aws', allow_non_regional=False + ): + """Lists the region and endpoint names of a particular partition. + + :type service_name: string + :param service_name: Name of a service to list endpoint for (e.g., s3). + This parameter accepts a service name (e.g., "elb") or endpoint + prefix (e.g., "elasticloadbalancing"). + + :type partition_name: string + :param partition_name: Name of the partition to limit endpoints to. + (e.g., aws for the public AWS endpoints, aws-cn for AWS China + endpoints, aws-us-gov for AWS GovCloud (US) Endpoints, etc. + + :type allow_non_regional: bool + :param allow_non_regional: Set to True to include endpoints that are + not regional endpoints (e.g., s3-external-1, + fips-us-gov-west-1, etc). + :return: Returns a list of endpoint names (e.g., ["us-east-1"]). + """ + resolver = self._get_internal_component('endpoint_resolver') + results = [] + try: + service_data = self.get_service_data(service_name) + endpoint_prefix = service_data['metadata'].get( + 'endpointPrefix', service_name + ) + results = resolver.get_available_endpoints( + endpoint_prefix, partition_name, allow_non_regional + ) + except UnknownServiceError: + pass + return results + + +class ComponentLocator: + """Service locator for session components.""" + + def __init__(self): + self._components = {} + self._deferred = {} + + def get_component(self, name): + if name in self._deferred: + factory = self._deferred[name] + self._components[name] = factory() + # Only delete the component from the deferred dict after + # successfully creating the object from the factory as well as + # injecting the instantiated value into the _components dict. + try: + del self._deferred[name] + except KeyError: + # If we get here, it's likely that get_component was called + # concurrently from multiple threads, and another thread + # already deleted the entry. This means the factory was + # probably called twice, but cleaning up the deferred entry + # should not crash outright. + pass + try: + return self._components[name] + except KeyError: + raise ValueError("Unknown component: %s" % name) + + def register_component(self, name, component): + self._components[name] = component + try: + del self._deferred[name] + except KeyError: + pass + + def lazy_register_component(self, name, no_arg_factory): + self._deferred[name] = no_arg_factory + try: + del self._components[name] + except KeyError: + pass + + +class SessionVarDict(MutableMapping): + def __init__(self, session, session_vars): + self._session = session + self._store = copy.copy(session_vars) + + def __getitem__(self, key): + return self._store[key] + + def __setitem__(self, key, value): + self._store[key] = value + self._update_config_store_from_session_vars(key, value) + + def __delitem__(self, key): + del self._store[key] + + def __iter__(self): + return iter(self._store) + + def __len__(self): + return len(self._store) + + def _update_config_store_from_session_vars( + self, logical_name, config_options + ): + # This is for backwards compatibility. The new preferred way to + # modify configuration logic is to use the component system to get + # the config_store component from the session, and then update + # a key with a custom config provider(s). + # This backwards compatibility method takes the old session_vars + # list of tuples and and transforms that into a set of updates to + # the config_store component. + config_chain_builder = ConfigChainFactory(session=self._session) + config_name, env_vars, default, typecast = config_options + config_store = self._session.get_component('config_store') + config_store.set_config_provider( + logical_name, + config_chain_builder.create_config_chain( + instance_name=logical_name, + env_var_names=env_vars, + config_property_names=config_name, + default=default, + conversion_func=typecast, + ), + ) + + +class SubsetChainConfigFactory: + """A class for creating backwards compatible configuration chains. + + This class can be used instead of + :class:`botocore.configprovider.ConfigChainFactory` to make it honor the + methods argument to get_config_variable. This class can be used to filter + out providers that are not in the methods tuple when creating a new config + chain. + """ + + def __init__(self, session, methods, environ=None): + self._factory = ConfigChainFactory(session, environ) + self._supported_methods = methods + + def create_config_chain( + self, + instance_name=None, + env_var_names=None, + config_property_name=None, + default=None, + conversion_func=None, + ): + """Build a config chain following the standard botocore pattern. + + This config chain factory will omit any providers not in the methods + tuple provided at initialization. For example if given the tuple + ('instance', 'config',) it will not inject the environment provider + into the standard config chain. This lets the botocore session support + the custom ``methods`` argument for all the default botocore config + variables when calling ``get_config_variable``. + """ + if 'instance' not in self._supported_methods: + instance_name = None + if 'env' not in self._supported_methods: + env_var_names = None + if 'config' not in self._supported_methods: + config_property_name = None + return self._factory.create_config_chain( + instance_name=instance_name, + env_var_names=env_var_names, + config_property_names=config_property_name, + default=default, + conversion_func=conversion_func, + ) + + +def get_session(env_vars=None): + """ + Return a new session object. + """ + return Session(env_vars) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/signers.py b/dbtzin/lib/python3.8/site-packages/botocore/signers.py new file mode 100644 index 00000000..b42550e0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/signers.py @@ -0,0 +1,868 @@ +# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import base64 +import datetime +import json +import weakref + +import botocore +import botocore.auth +from botocore.awsrequest import create_request_object, prepare_request_dict +from botocore.compat import OrderedDict +from botocore.exceptions import ( + UnknownClientMethodError, + UnknownSignatureVersionError, + UnsupportedSignatureVersionError, +) +from botocore.utils import ArnParser, datetime2timestamp + +# Keep these imported. There's pre-existing code that uses them. +from botocore.utils import fix_s3_host # noqa + + +class RequestSigner: + """ + An object to sign requests before they go out over the wire using + one of the authentication mechanisms defined in ``auth.py``. This + class fires two events scoped to a service and operation name: + + * choose-signer: Allows overriding the auth signer name. + * before-sign: Allows mutating the request before signing. + + Together these events allow for customization of the request + signing pipeline, including overrides, request path manipulation, + and disabling signing per operation. + + + :type service_id: botocore.model.ServiceId + :param service_id: The service id for the service, e.g. ``S3`` + + :type region_name: string + :param region_name: Name of the service region, e.g. ``us-east-1`` + + :type signing_name: string + :param signing_name: Service signing name. This is usually the + same as the service name, but can differ. E.g. + ``emr`` vs. ``elasticmapreduce``. + + :type signature_version: string + :param signature_version: Signature name like ``v4``. + + :type credentials: :py:class:`~botocore.credentials.Credentials` + :param credentials: User credentials with which to sign requests. + + :type event_emitter: :py:class:`~botocore.hooks.BaseEventHooks` + :param event_emitter: Extension mechanism to fire events. + """ + + def __init__( + self, + service_id, + region_name, + signing_name, + signature_version, + credentials, + event_emitter, + auth_token=None, + ): + self._region_name = region_name + self._signing_name = signing_name + self._signature_version = signature_version + self._credentials = credentials + self._auth_token = auth_token + self._service_id = service_id + + # We need weakref to prevent leaking memory in Python 2.6 on Linux 2.6 + self._event_emitter = weakref.proxy(event_emitter) + + @property + def region_name(self): + return self._region_name + + @property + def signature_version(self): + return self._signature_version + + @property + def signing_name(self): + return self._signing_name + + def handler(self, operation_name=None, request=None, **kwargs): + # This is typically hooked up to the "request-created" event + # from a client's event emitter. When a new request is created + # this method is invoked to sign the request. + # Don't call this method directly. + return self.sign(operation_name, request) + + def sign( + self, + operation_name, + request, + region_name=None, + signing_type='standard', + expires_in=None, + signing_name=None, + ): + """Sign a request before it goes out over the wire. + + :type operation_name: string + :param operation_name: The name of the current operation, e.g. + ``ListBuckets``. + :type request: AWSRequest + :param request: The request object to be sent over the wire. + + :type region_name: str + :param region_name: The region to sign the request for. + + :type signing_type: str + :param signing_type: The type of signing to perform. This can be one of + three possible values: + + * 'standard' - This should be used for most requests. + * 'presign-url' - This should be used when pre-signing a request. + * 'presign-post' - This should be used when pre-signing an S3 post. + + :type expires_in: int + :param expires_in: The number of seconds the presigned url is valid + for. This parameter is only valid for signing type 'presign-url'. + + :type signing_name: str + :param signing_name: The name to use for the service when signing. + """ + explicit_region_name = region_name + if region_name is None: + region_name = self._region_name + + if signing_name is None: + signing_name = self._signing_name + + signature_version = self._choose_signer( + operation_name, signing_type, request.context + ) + + # Allow mutating request before signing + self._event_emitter.emit( + 'before-sign.{}.{}'.format( + self._service_id.hyphenize(), operation_name + ), + request=request, + signing_name=signing_name, + region_name=self._region_name, + signature_version=signature_version, + request_signer=self, + operation_name=operation_name, + ) + + if signature_version != botocore.UNSIGNED: + kwargs = { + 'signing_name': signing_name, + 'region_name': region_name, + 'signature_version': signature_version, + } + if expires_in is not None: + kwargs['expires'] = expires_in + signing_context = request.context.get('signing', {}) + if not explicit_region_name and signing_context.get('region'): + kwargs['region_name'] = signing_context['region'] + if signing_context.get('signing_name'): + kwargs['signing_name'] = signing_context['signing_name'] + if signing_context.get('identity_cache') is not None: + self._resolve_identity_cache( + kwargs, + signing_context['identity_cache'], + signing_context['cache_key'], + ) + try: + auth = self.get_auth_instance(**kwargs) + except UnknownSignatureVersionError as e: + if signing_type != 'standard': + raise UnsupportedSignatureVersionError( + signature_version=signature_version + ) + else: + raise e + + auth.add_auth(request) + + def _resolve_identity_cache(self, kwargs, cache, cache_key): + kwargs['identity_cache'] = cache + kwargs['cache_key'] = cache_key + + def _choose_signer(self, operation_name, signing_type, context): + """ + Allow setting the signature version via the choose-signer event. + A value of `botocore.UNSIGNED` means no signing will be performed. + + :param operation_name: The operation to sign. + :param signing_type: The type of signing that the signer is to be used + for. + :return: The signature version to sign with. + """ + signing_type_suffix_map = { + 'presign-post': '-presign-post', + 'presign-url': '-query', + } + suffix = signing_type_suffix_map.get(signing_type, '') + + # operation specific signing context takes precedent over client-level + # defaults + signature_version = context.get('auth_type') or self._signature_version + signing = context.get('signing', {}) + signing_name = signing.get('signing_name', self._signing_name) + region_name = signing.get('region', self._region_name) + if ( + signature_version is not botocore.UNSIGNED + and not signature_version.endswith(suffix) + ): + signature_version += suffix + + handler, response = self._event_emitter.emit_until_response( + 'choose-signer.{}.{}'.format( + self._service_id.hyphenize(), operation_name + ), + signing_name=signing_name, + region_name=region_name, + signature_version=signature_version, + context=context, + ) + + if response is not None: + signature_version = response + # The suffix needs to be checked again in case we get an improper + # signature version from choose-signer. + if ( + signature_version is not botocore.UNSIGNED + and not signature_version.endswith(suffix) + ): + signature_version += suffix + + return signature_version + + def get_auth_instance( + self, signing_name, region_name, signature_version=None, **kwargs + ): + """ + Get an auth instance which can be used to sign a request + using the given signature version. + + :type signing_name: string + :param signing_name: Service signing name. This is usually the + same as the service name, but can differ. E.g. + ``emr`` vs. ``elasticmapreduce``. + + :type region_name: string + :param region_name: Name of the service region, e.g. ``us-east-1`` + + :type signature_version: string + :param signature_version: Signature name like ``v4``. + + :rtype: :py:class:`~botocore.auth.BaseSigner` + :return: Auth instance to sign a request. + """ + if signature_version is None: + signature_version = self._signature_version + + cls = botocore.auth.AUTH_TYPE_MAPS.get(signature_version) + if cls is None: + raise UnknownSignatureVersionError( + signature_version=signature_version + ) + + if cls.REQUIRES_TOKEN is True: + frozen_token = None + if self._auth_token is not None: + frozen_token = self._auth_token.get_frozen_token() + auth = cls(frozen_token) + return auth + + credentials = self._credentials + if getattr(cls, "REQUIRES_IDENTITY_CACHE", None) is True: + cache = kwargs["identity_cache"] + key = kwargs["cache_key"] + credentials = cache.get_credentials(key) + del kwargs["cache_key"] + + # If there's no credentials provided (i.e credentials is None), + # then we'll pass a value of "None" over to the auth classes, + # which already handle the cases where no credentials have + # been provided. + frozen_credentials = None + if credentials is not None: + frozen_credentials = credentials.get_frozen_credentials() + kwargs['credentials'] = frozen_credentials + if cls.REQUIRES_REGION: + if self._region_name is None: + raise botocore.exceptions.NoRegionError() + kwargs['region_name'] = region_name + kwargs['service_name'] = signing_name + auth = cls(**kwargs) + return auth + + # Alias get_auth for backwards compatibility. + get_auth = get_auth_instance + + def generate_presigned_url( + self, + request_dict, + operation_name, + expires_in=3600, + region_name=None, + signing_name=None, + ): + """Generates a presigned url + + :type request_dict: dict + :param request_dict: The prepared request dictionary returned by + ``botocore.awsrequest.prepare_request_dict()`` + + :type operation_name: str + :param operation_name: The operation being signed. + + :type expires_in: int + :param expires_in: The number of seconds the presigned url is valid + for. By default it expires in an hour (3600 seconds) + + :type region_name: string + :param region_name: The region name to sign the presigned url. + + :type signing_name: str + :param signing_name: The name to use for the service when signing. + + :returns: The presigned url + """ + request = create_request_object(request_dict) + self.sign( + operation_name, + request, + region_name, + 'presign-url', + expires_in, + signing_name, + ) + + request.prepare() + return request.url + + +class CloudFrontSigner: + '''A signer to create a signed CloudFront URL. + + First you create a cloudfront signer based on a normalized RSA signer:: + + import rsa + def rsa_signer(message): + private_key = open('private_key.pem', 'r').read() + return rsa.sign( + message, + rsa.PrivateKey.load_pkcs1(private_key.encode('utf8')), + 'SHA-1') # CloudFront requires SHA-1 hash + cf_signer = CloudFrontSigner(key_id, rsa_signer) + + To sign with a canned policy:: + + signed_url = cf_signer.generate_signed_url( + url, date_less_than=datetime(2015, 12, 1)) + + To sign with a custom policy:: + + signed_url = cf_signer.generate_signed_url(url, policy=my_policy) + ''' + + def __init__(self, key_id, rsa_signer): + """Create a CloudFrontSigner. + + :type key_id: str + :param key_id: The CloudFront Key Pair ID + + :type rsa_signer: callable + :param rsa_signer: An RSA signer. + Its only input parameter will be the message to be signed, + and its output will be the signed content as a binary string. + The hash algorithm needed by CloudFront is SHA-1. + """ + self.key_id = key_id + self.rsa_signer = rsa_signer + + def generate_presigned_url(self, url, date_less_than=None, policy=None): + """Creates a signed CloudFront URL based on given parameters. + + :type url: str + :param url: The URL of the protected object + + :type date_less_than: datetime + :param date_less_than: The URL will expire after that date and time + + :type policy: str + :param policy: The custom policy, possibly built by self.build_policy() + + :rtype: str + :return: The signed URL. + """ + both_args_supplied = date_less_than is not None and policy is not None + neither_arg_supplied = date_less_than is None and policy is None + if both_args_supplied or neither_arg_supplied: + e = 'Need to provide either date_less_than or policy, but not both' + raise ValueError(e) + if date_less_than is not None: + # We still need to build a canned policy for signing purpose + policy = self.build_policy(url, date_less_than) + if isinstance(policy, str): + policy = policy.encode('utf8') + if date_less_than is not None: + params = ['Expires=%s' % int(datetime2timestamp(date_less_than))] + else: + params = ['Policy=%s' % self._url_b64encode(policy).decode('utf8')] + signature = self.rsa_signer(policy) + params.extend( + [ + f"Signature={self._url_b64encode(signature).decode('utf8')}", + f"Key-Pair-Id={self.key_id}", + ] + ) + return self._build_url(url, params) + + def _build_url(self, base_url, extra_params): + separator = '&' if '?' in base_url else '?' + return base_url + separator + '&'.join(extra_params) + + def build_policy( + self, resource, date_less_than, date_greater_than=None, ip_address=None + ): + """A helper to build policy. + + :type resource: str + :param resource: The URL or the stream filename of the protected object + + :type date_less_than: datetime + :param date_less_than: The URL will expire after the time has passed + + :type date_greater_than: datetime + :param date_greater_than: The URL will not be valid until this time + + :type ip_address: str + :param ip_address: Use 'x.x.x.x' for an IP, or 'x.x.x.x/x' for a subnet + + :rtype: str + :return: The policy in a compact string. + """ + # Note: + # 1. Order in canned policy is significant. Special care has been taken + # to ensure the output will match the order defined by the document. + # There is also a test case to ensure that order. + # SEE: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html#private-content-canned-policy-creating-policy-statement + # 2. Albeit the order in custom policy is not required by CloudFront, + # we still use OrderedDict internally to ensure the result is stable + # and also matches canned policy requirement. + # SEE: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html + moment = int(datetime2timestamp(date_less_than)) + condition = OrderedDict({"DateLessThan": {"AWS:EpochTime": moment}}) + if ip_address: + if '/' not in ip_address: + ip_address += '/32' + condition["IpAddress"] = {"AWS:SourceIp": ip_address} + if date_greater_than: + moment = int(datetime2timestamp(date_greater_than)) + condition["DateGreaterThan"] = {"AWS:EpochTime": moment} + ordered_payload = [('Resource', resource), ('Condition', condition)] + custom_policy = {"Statement": [OrderedDict(ordered_payload)]} + return json.dumps(custom_policy, separators=(',', ':')) + + def _url_b64encode(self, data): + # Required by CloudFront. See also: + # http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-linux-openssl.html + return ( + base64.b64encode(data) + .replace(b'+', b'-') + .replace(b'=', b'_') + .replace(b'/', b'~') + ) + + +def add_generate_db_auth_token(class_attributes, **kwargs): + class_attributes['generate_db_auth_token'] = generate_db_auth_token + + +def generate_db_auth_token(self, DBHostname, Port, DBUsername, Region=None): + """Generates an auth token used to connect to a db with IAM credentials. + + :type DBHostname: str + :param DBHostname: The hostname of the database to connect to. + + :type Port: int + :param Port: The port number the database is listening on. + + :type DBUsername: str + :param DBUsername: The username to log in as. + + :type Region: str + :param Region: The region the database is in. If None, the client + region will be used. + + :return: A presigned url which can be used as an auth token. + """ + region = Region + if region is None: + region = self.meta.region_name + + params = { + 'Action': 'connect', + 'DBUser': DBUsername, + } + + request_dict = { + 'url_path': '/', + 'query_string': '', + 'headers': {}, + 'body': params, + 'method': 'GET', + } + + # RDS requires that the scheme not be set when sent over. This can cause + # issues when signing because the Python url parsing libraries follow + # RFC 1808 closely, which states that a netloc must be introduced by `//`. + # Otherwise the url is presumed to be relative, and thus the whole + # netloc would be treated as a path component. To work around this we + # introduce https here and remove it once we're done processing it. + scheme = 'https://' + endpoint_url = f'{scheme}{DBHostname}:{Port}' + prepare_request_dict(request_dict, endpoint_url) + presigned_url = self._request_signer.generate_presigned_url( + operation_name='connect', + request_dict=request_dict, + region_name=region, + expires_in=900, + signing_name='rds-db', + ) + return presigned_url[len(scheme) :] + + +class S3PostPresigner: + def __init__(self, request_signer): + self._request_signer = request_signer + + def generate_presigned_post( + self, + request_dict, + fields=None, + conditions=None, + expires_in=3600, + region_name=None, + ): + """Generates the url and the form fields used for a presigned s3 post + + :type request_dict: dict + :param request_dict: The prepared request dictionary returned by + ``botocore.awsrequest.prepare_request_dict()`` + + :type fields: dict + :param fields: A dictionary of prefilled form fields to build on top + of. + + :type conditions: list + :param conditions: A list of conditions to include in the policy. Each + element can be either a list or a structure. For example: + [ + {"acl": "public-read"}, + {"bucket": "mybucket"}, + ["starts-with", "$key", "mykey"] + ] + + :type expires_in: int + :param expires_in: The number of seconds the presigned post is valid + for. + + :type region_name: string + :param region_name: The region name to sign the presigned post to. + + :rtype: dict + :returns: A dictionary with two elements: ``url`` and ``fields``. + Url is the url to post to. Fields is a dictionary filled with + the form fields and respective values to use when submitting the + post. For example: + + {'url': 'https://mybucket.s3.amazonaws.com + 'fields': {'acl': 'public-read', + 'key': 'mykey', + 'signature': 'mysignature', + 'policy': 'mybase64 encoded policy'} + } + """ + if fields is None: + fields = {} + + if conditions is None: + conditions = [] + + # Create the policy for the post. + policy = {} + + # Create an expiration date for the policy + datetime_now = datetime.datetime.utcnow() + expire_date = datetime_now + datetime.timedelta(seconds=expires_in) + policy['expiration'] = expire_date.strftime(botocore.auth.ISO8601) + + # Append all of the conditions that the user supplied. + policy['conditions'] = [] + for condition in conditions: + policy['conditions'].append(condition) + + # Store the policy and the fields in the request for signing + request = create_request_object(request_dict) + request.context['s3-presign-post-fields'] = fields + request.context['s3-presign-post-policy'] = policy + + self._request_signer.sign( + 'PutObject', request, region_name, 'presign-post' + ) + # Return the url and the fields for th form to post. + return {'url': request.url, 'fields': fields} + + +def add_generate_presigned_url(class_attributes, **kwargs): + class_attributes['generate_presigned_url'] = generate_presigned_url + + +def generate_presigned_url( + self, ClientMethod, Params=None, ExpiresIn=3600, HttpMethod=None +): + """Generate a presigned url given a client, its method, and arguments + + :type ClientMethod: string + :param ClientMethod: The client method to presign for + + :type Params: dict + :param Params: The parameters normally passed to + ``ClientMethod``. + + :type ExpiresIn: int + :param ExpiresIn: The number of seconds the presigned url is valid + for. By default it expires in an hour (3600 seconds) + + :type HttpMethod: string + :param HttpMethod: The http method to use on the generated url. By + default, the http method is whatever is used in the method's model. + + :returns: The presigned url + """ + client_method = ClientMethod + params = Params + if params is None: + params = {} + expires_in = ExpiresIn + http_method = HttpMethod + context = { + 'is_presign_request': True, + 'use_global_endpoint': _should_use_global_endpoint(self), + } + + request_signer = self._request_signer + + try: + operation_name = self._PY_TO_OP_NAME[client_method] + except KeyError: + raise UnknownClientMethodError(method_name=client_method) + + operation_model = self.meta.service_model.operation_model(operation_name) + params = self._emit_api_params( + api_params=params, + operation_model=operation_model, + context=context, + ) + bucket_is_arn = ArnParser.is_arn(params.get('Bucket', '')) + ( + endpoint_url, + additional_headers, + properties, + ) = self._resolve_endpoint_ruleset( + operation_model, + params, + context, + ignore_signing_region=(not bucket_is_arn), + ) + + request_dict = self._convert_to_request_dict( + api_params=params, + operation_model=operation_model, + endpoint_url=endpoint_url, + context=context, + headers=additional_headers, + set_user_agent_header=False, + ) + + # Switch out the http method if user specified it. + if http_method is not None: + request_dict['method'] = http_method + + # Generate the presigned url. + return request_signer.generate_presigned_url( + request_dict=request_dict, + expires_in=expires_in, + operation_name=operation_name, + ) + + +def add_generate_presigned_post(class_attributes, **kwargs): + class_attributes['generate_presigned_post'] = generate_presigned_post + + +def generate_presigned_post( + self, Bucket, Key, Fields=None, Conditions=None, ExpiresIn=3600 +): + """Builds the url and the form fields used for a presigned s3 post + + :type Bucket: string + :param Bucket: The name of the bucket to presign the post to. Note that + bucket related conditions should not be included in the + ``conditions`` parameter. + + :type Key: string + :param Key: Key name, optionally add ${filename} to the end to + attach the submitted filename. Note that key related conditions and + fields are filled out for you and should not be included in the + ``Fields`` or ``Conditions`` parameter. + + :type Fields: dict + :param Fields: A dictionary of prefilled form fields to build on top + of. Elements that may be included are acl, Cache-Control, + Content-Type, Content-Disposition, Content-Encoding, Expires, + success_action_redirect, redirect, success_action_status, + and x-amz-meta-. + + Note that if a particular element is included in the fields + dictionary it will not be automatically added to the conditions + list. You must specify a condition for the element as well. + + :type Conditions: list + :param Conditions: A list of conditions to include in the policy. Each + element can be either a list or a structure. For example: + + [ + {"acl": "public-read"}, + ["content-length-range", 2, 5], + ["starts-with", "$success_action_redirect", ""] + ] + + Conditions that are included may pertain to acl, + content-length-range, Cache-Control, Content-Type, + Content-Disposition, Content-Encoding, Expires, + success_action_redirect, redirect, success_action_status, + and/or x-amz-meta-. + + Note that if you include a condition, you must specify + the a valid value in the fields dictionary as well. A value will + not be added automatically to the fields dictionary based on the + conditions. + + :type ExpiresIn: int + :param ExpiresIn: The number of seconds the presigned post + is valid for. + + :rtype: dict + :returns: A dictionary with two elements: ``url`` and ``fields``. + Url is the url to post to. Fields is a dictionary filled with + the form fields and respective values to use when submitting the + post. For example: + + {'url': 'https://mybucket.s3.amazonaws.com + 'fields': {'acl': 'public-read', + 'key': 'mykey', + 'signature': 'mysignature', + 'policy': 'mybase64 encoded policy'} + } + """ + bucket = Bucket + key = Key + fields = Fields + conditions = Conditions + expires_in = ExpiresIn + + if fields is None: + fields = {} + else: + fields = fields.copy() + + if conditions is None: + conditions = [] + + context = { + 'is_presign_request': True, + 'use_global_endpoint': _should_use_global_endpoint(self), + } + + post_presigner = S3PostPresigner(self._request_signer) + + # We choose the CreateBucket operation model because its url gets + # serialized to what a presign post requires. + operation_model = self.meta.service_model.operation_model('CreateBucket') + params = self._emit_api_params( + api_params={'Bucket': bucket}, + operation_model=operation_model, + context=context, + ) + bucket_is_arn = ArnParser.is_arn(params.get('Bucket', '')) + ( + endpoint_url, + additional_headers, + properties, + ) = self._resolve_endpoint_ruleset( + operation_model, + params, + context, + ignore_signing_region=(not bucket_is_arn), + ) + + request_dict = self._convert_to_request_dict( + api_params=params, + operation_model=operation_model, + endpoint_url=endpoint_url, + context=context, + headers=additional_headers, + set_user_agent_header=False, + ) + + # Append that the bucket name to the list of conditions. + conditions.append({'bucket': bucket}) + + # If the key ends with filename, the only constraint that can be + # imposed is if it starts with the specified prefix. + if key.endswith('${filename}'): + conditions.append(["starts-with", '$key', key[: -len('${filename}')]]) + else: + conditions.append({'key': key}) + + # Add the key to the fields. + fields['key'] = key + + return post_presigner.generate_presigned_post( + request_dict=request_dict, + fields=fields, + conditions=conditions, + expires_in=expires_in, + ) + + +def _should_use_global_endpoint(client): + if client.meta.partition != 'aws': + return False + s3_config = client.meta.config.s3 + if s3_config: + if s3_config.get('use_dualstack_endpoint', False): + return False + if ( + s3_config.get('us_east_1_regional_endpoint') == 'regional' + and client.meta.config.region_name == 'us-east-1' + ): + return False + if s3_config.get('addressing_style') == 'virtual': + return False + return True diff --git a/dbtzin/lib/python3.8/site-packages/botocore/stub.py b/dbtzin/lib/python3.8/site-packages/botocore/stub.py new file mode 100644 index 00000000..137cfe42 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/stub.py @@ -0,0 +1,429 @@ +# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import copy +from collections import deque +from pprint import pformat + +from botocore.awsrequest import AWSResponse +from botocore.exceptions import ( + ParamValidationError, + StubAssertionError, + StubResponseError, + UnStubbedResponseError, +) +from botocore.validate import validate_parameters + + +class _ANY: + """ + A helper object that compares equal to everything. Copied from + unittest.mock + """ + + def __eq__(self, other): + return True + + def __ne__(self, other): + return False + + def __repr__(self): + return '' + + +ANY = _ANY() + + +class Stubber: + """ + This class will allow you to stub out requests so you don't have to hit + an endpoint to write tests. Responses are returned first in, first out. + If operations are called out of order, or are called with no remaining + queued responses, an error will be raised. + + **Example:** + :: + import datetime + import botocore.session + from botocore.stub import Stubber + + + s3 = botocore.session.get_session().create_client('s3') + stubber = Stubber(s3) + + response = { + 'IsTruncated': False, + 'Name': 'test-bucket', + 'MaxKeys': 1000, 'Prefix': '', + 'Contents': [{ + 'Key': 'test.txt', + 'ETag': '"abc123"', + 'StorageClass': 'STANDARD', + 'LastModified': datetime.datetime(2016, 1, 20, 22, 9), + 'Owner': {'ID': 'abc123', 'DisplayName': 'myname'}, + 'Size': 14814 + }], + 'EncodingType': 'url', + 'ResponseMetadata': { + 'RequestId': 'abc123', + 'HTTPStatusCode': 200, + 'HostId': 'abc123' + }, + 'Marker': '' + } + + expected_params = {'Bucket': 'test-bucket'} + + stubber.add_response('list_objects', response, expected_params) + stubber.activate() + + service_response = s3.list_objects(Bucket='test-bucket') + assert service_response == response + + + This class can also be called as a context manager, which will handle + activation / deactivation for you. + + **Example:** + :: + import datetime + import botocore.session + from botocore.stub import Stubber + + + s3 = botocore.session.get_session().create_client('s3') + + response = { + "Owner": { + "ID": "foo", + "DisplayName": "bar" + }, + "Buckets": [{ + "CreationDate": datetime.datetime(2016, 1, 20, 22, 9), + "Name": "baz" + }] + } + + + with Stubber(s3) as stubber: + stubber.add_response('list_buckets', response, {}) + service_response = s3.list_buckets() + + assert service_response == response + + + If you have an input parameter that is a randomly generated value, or you + otherwise don't care about its value, you can use ``stub.ANY`` to ignore + it in validation. + + **Example:** + :: + import datetime + import botocore.session + from botocore.stub import Stubber, ANY + + + s3 = botocore.session.get_session().create_client('s3') + stubber = Stubber(s3) + + response = { + 'IsTruncated': False, + 'Name': 'test-bucket', + 'MaxKeys': 1000, 'Prefix': '', + 'Contents': [{ + 'Key': 'test.txt', + 'ETag': '"abc123"', + 'StorageClass': 'STANDARD', + 'LastModified': datetime.datetime(2016, 1, 20, 22, 9), + 'Owner': {'ID': 'abc123', 'DisplayName': 'myname'}, + 'Size': 14814 + }], + 'EncodingType': 'url', + 'ResponseMetadata': { + 'RequestId': 'abc123', + 'HTTPStatusCode': 200, + 'HostId': 'abc123' + }, + 'Marker': '' + } + + expected_params = {'Bucket': ANY} + stubber.add_response('list_objects', response, expected_params) + + with stubber: + service_response = s3.list_objects(Bucket='test-bucket') + + assert service_response == response + """ + + def __init__(self, client): + """ + :param client: The client to add your stubs to. + """ + self.client = client + self._event_id = 'boto_stubber' + self._expected_params_event_id = 'boto_stubber_expected_params' + self._queue = deque() + + def __enter__(self): + self.activate() + return self + + def __exit__(self, exception_type, exception_value, traceback): + self.deactivate() + + def activate(self): + """ + Activates the stubber on the client + """ + self.client.meta.events.register_first( + 'before-parameter-build.*.*', + self._assert_expected_params, + unique_id=self._expected_params_event_id, + ) + self.client.meta.events.register( + 'before-call.*.*', + self._get_response_handler, + unique_id=self._event_id, + ) + + def deactivate(self): + """ + Deactivates the stubber on the client + """ + self.client.meta.events.unregister( + 'before-parameter-build.*.*', + self._assert_expected_params, + unique_id=self._expected_params_event_id, + ) + self.client.meta.events.unregister( + 'before-call.*.*', + self._get_response_handler, + unique_id=self._event_id, + ) + + def add_response(self, method, service_response, expected_params=None): + """ + Adds a service response to the response queue. This will be validated + against the service model to ensure correctness. It should be noted, + however, that while missing attributes are often considered correct, + your code may not function properly if you leave them out. Therefore + you should always fill in every value you see in a typical response for + your particular request. + + :param method: The name of the client method to stub. + :type method: str + + :param service_response: A dict response stub. Provided parameters will + be validated against the service model. + :type service_response: dict + + :param expected_params: A dictionary of the expected parameters to + be called for the provided service response. The parameters match + the names of keyword arguments passed to that client call. If + any of the parameters differ a ``StubResponseError`` is thrown. + You can use stub.ANY to indicate a particular parameter to ignore + in validation. stub.ANY is only valid for top level params. + """ + self._add_response(method, service_response, expected_params) + + def _add_response(self, method, service_response, expected_params): + if not hasattr(self.client, method): + raise ValueError( + "Client %s does not have method: %s" + % (self.client.meta.service_model.service_name, method) + ) + + # Create a successful http response + http_response = AWSResponse(None, 200, {}, None) + + operation_name = self.client.meta.method_to_api_mapping.get(method) + self._validate_operation_response(operation_name, service_response) + + # Add the service_response to the queue for returning responses + response = { + 'operation_name': operation_name, + 'response': (http_response, service_response), + 'expected_params': expected_params, + } + self._queue.append(response) + + def add_client_error( + self, + method, + service_error_code='', + service_message='', + http_status_code=400, + service_error_meta=None, + expected_params=None, + response_meta=None, + modeled_fields=None, + ): + """ + Adds a ``ClientError`` to the response queue. + + :param method: The name of the service method to return the error on. + :type method: str + + :param service_error_code: The service error code to return, + e.g. ``NoSuchBucket`` + :type service_error_code: str + + :param service_message: The service message to return, e.g. + 'The specified bucket does not exist.' + :type service_message: str + + :param http_status_code: The HTTP status code to return, e.g. 404, etc + :type http_status_code: int + + :param service_error_meta: Additional keys to be added to the + service Error + :type service_error_meta: dict + + :param expected_params: A dictionary of the expected parameters to + be called for the provided service response. The parameters match + the names of keyword arguments passed to that client call. If + any of the parameters differ a ``StubResponseError`` is thrown. + You can use stub.ANY to indicate a particular parameter to ignore + in validation. + + :param response_meta: Additional keys to be added to the + response's ResponseMetadata + :type response_meta: dict + + :param modeled_fields: Additional keys to be added to the response + based on fields that are modeled for the particular error code. + These keys will be validated against the particular error shape + designated by the error code. + :type modeled_fields: dict + + """ + http_response = AWSResponse(None, http_status_code, {}, None) + + # We don't look to the model to build this because the caller would + # need to know the details of what the HTTP body would need to + # look like. + parsed_response = { + 'ResponseMetadata': {'HTTPStatusCode': http_status_code}, + 'Error': {'Message': service_message, 'Code': service_error_code}, + } + + if service_error_meta is not None: + parsed_response['Error'].update(service_error_meta) + + if response_meta is not None: + parsed_response['ResponseMetadata'].update(response_meta) + + if modeled_fields is not None: + service_model = self.client.meta.service_model + shape = service_model.shape_for_error_code(service_error_code) + self._validate_response(shape, modeled_fields) + parsed_response.update(modeled_fields) + + operation_name = self.client.meta.method_to_api_mapping.get(method) + # Note that we do not allow for expected_params while + # adding errors into the queue yet. + response = { + 'operation_name': operation_name, + 'response': (http_response, parsed_response), + 'expected_params': expected_params, + } + self._queue.append(response) + + def assert_no_pending_responses(self): + """ + Asserts that all expected calls were made. + """ + remaining = len(self._queue) + if remaining != 0: + raise AssertionError(f"{remaining} responses remaining in queue.") + + def _assert_expected_call_order(self, model, params): + if not self._queue: + raise UnStubbedResponseError( + operation_name=model.name, + reason=( + 'Unexpected API Call: A call was made but no additional ' + 'calls expected. Either the API Call was not stubbed or ' + 'it was called multiple times.' + ), + ) + + name = self._queue[0]['operation_name'] + if name != model.name: + raise StubResponseError( + operation_name=model.name, + reason=f'Operation mismatch: found response for {name}.', + ) + + def _get_response_handler(self, model, params, context, **kwargs): + self._assert_expected_call_order(model, params) + # Pop off the entire response once everything has been validated + return self._queue.popleft()['response'] + + def _assert_expected_params(self, model, params, context, **kwargs): + if self._should_not_stub(context): + return + self._assert_expected_call_order(model, params) + expected_params = self._queue[0]['expected_params'] + if expected_params is None: + return + + # Validate the parameters are equal + for param, value in expected_params.items(): + if param not in params or expected_params[param] != params[param]: + raise StubAssertionError( + operation_name=model.name, + reason='Expected parameters:\n%s,\nbut received:\n%s' + % (pformat(expected_params), pformat(params)), + ) + + # Ensure there are no extra params hanging around + if sorted(expected_params.keys()) != sorted(params.keys()): + raise StubAssertionError( + operation_name=model.name, + reason='Expected parameters:\n%s,\nbut received:\n%s' + % (pformat(expected_params), pformat(params)), + ) + + def _should_not_stub(self, context): + # Do not include presign requests when processing stubbed client calls + # as a presign request will never have an HTTP request sent over the + # wire for it and therefore not receive a response back. + if context and context.get('is_presign_request'): + return True + + def _validate_operation_response(self, operation_name, service_response): + service_model = self.client.meta.service_model + operation_model = service_model.operation_model(operation_name) + output_shape = operation_model.output_shape + + # Remove ResponseMetadata so that the validator doesn't attempt to + # perform validation on it. + response = service_response + if 'ResponseMetadata' in response: + response = copy.copy(service_response) + del response['ResponseMetadata'] + + self._validate_response(output_shape, response) + + def _validate_response(self, shape, response): + if shape is not None: + validate_parameters(response, shape) + elif response: + # If the output shape is None, that means the response should be + # empty apart from ResponseMetadata + raise ParamValidationError( + report=( + "Service response should only contain ResponseMetadata." + ) + ) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/tokens.py b/dbtzin/lib/python3.8/site-packages/botocore/tokens.py new file mode 100644 index 00000000..6e616946 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/tokens.py @@ -0,0 +1,330 @@ +# Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import json +import logging +import os +import threading +from datetime import datetime, timedelta +from typing import NamedTuple, Optional + +import dateutil.parser +from dateutil.tz import tzutc + +from botocore import UNSIGNED +from botocore.compat import total_seconds +from botocore.config import Config +from botocore.exceptions import ( + ClientError, + InvalidConfigError, + TokenRetrievalError, +) +from botocore.utils import CachedProperty, JSONFileCache, SSOTokenLoader + +logger = logging.getLogger(__name__) + + +def _utc_now(): + return datetime.now(tzutc()) + + +def create_token_resolver(session): + providers = [ + SSOTokenProvider(session), + ] + return TokenProviderChain(providers=providers) + + +def _serialize_utc_timestamp(obj): + if isinstance(obj, datetime): + return obj.strftime("%Y-%m-%dT%H:%M:%SZ") + return obj + + +def _sso_json_dumps(obj): + return json.dumps(obj, default=_serialize_utc_timestamp) + + +class FrozenAuthToken(NamedTuple): + token: str + expiration: Optional[datetime] = None + + +class DeferredRefreshableToken: + # The time at which we'll attempt to refresh, but not block if someone else + # is refreshing. + _advisory_refresh_timeout = 15 * 60 + # The time at which all threads will block waiting for a refreshed token + _mandatory_refresh_timeout = 10 * 60 + # Refresh at most once every minute to avoid blocking every request + _attempt_timeout = 60 + + def __init__(self, method, refresh_using, time_fetcher=_utc_now): + self._time_fetcher = time_fetcher + self._refresh_using = refresh_using + self.method = method + + # The frozen token is protected by this lock + self._refresh_lock = threading.Lock() + self._frozen_token = None + self._next_refresh = None + + def get_frozen_token(self): + self._refresh() + return self._frozen_token + + def _refresh(self): + # If we don't need to refresh just return + refresh_type = self._should_refresh() + if not refresh_type: + return None + + # Block for refresh if we're in the mandatory refresh window + block_for_refresh = refresh_type == "mandatory" + if self._refresh_lock.acquire(block_for_refresh): + try: + self._protected_refresh() + finally: + self._refresh_lock.release() + + def _protected_refresh(self): + # This should only be called after acquiring the refresh lock + # Another thread may have already refreshed, double check refresh + refresh_type = self._should_refresh() + if not refresh_type: + return None + + try: + now = self._time_fetcher() + self._next_refresh = now + timedelta(seconds=self._attempt_timeout) + self._frozen_token = self._refresh_using() + except Exception: + logger.warning( + "Refreshing token failed during the %s refresh period.", + refresh_type, + exc_info=True, + ) + if refresh_type == "mandatory": + # This refresh was mandatory, error must be propagated back + raise + + if self._is_expired(): + # Fresh credentials should never be expired + raise TokenRetrievalError( + provider=self.method, + error_msg="Token has expired and refresh failed", + ) + + def _is_expired(self): + if self._frozen_token is None: + return False + + expiration = self._frozen_token.expiration + remaining = total_seconds(expiration - self._time_fetcher()) + return remaining <= 0 + + def _should_refresh(self): + if self._frozen_token is None: + # We don't have a token yet, mandatory refresh + return "mandatory" + + expiration = self._frozen_token.expiration + if expiration is None: + # No expiration, so assume we don't need to refresh. + return None + + now = self._time_fetcher() + if now < self._next_refresh: + return None + + remaining = total_seconds(expiration - now) + + if remaining < self._mandatory_refresh_timeout: + return "mandatory" + elif remaining < self._advisory_refresh_timeout: + return "advisory" + + return None + + +class TokenProviderChain: + def __init__(self, providers=None): + if providers is None: + providers = [] + self._providers = providers + + def load_token(self): + for provider in self._providers: + token = provider.load_token() + if token is not None: + return token + return None + + +class SSOTokenProvider: + METHOD = "sso" + _REFRESH_WINDOW = 15 * 60 + _SSO_TOKEN_CACHE_DIR = os.path.expanduser( + os.path.join("~", ".aws", "sso", "cache") + ) + _SSO_CONFIG_VARS = [ + "sso_start_url", + "sso_region", + ] + _GRANT_TYPE = "refresh_token" + DEFAULT_CACHE_CLS = JSONFileCache + + def __init__( + self, session, cache=None, time_fetcher=_utc_now, profile_name=None + ): + self._session = session + if cache is None: + cache = self.DEFAULT_CACHE_CLS( + self._SSO_TOKEN_CACHE_DIR, + dumps_func=_sso_json_dumps, + ) + self._now = time_fetcher + self._cache = cache + self._token_loader = SSOTokenLoader(cache=self._cache) + self._profile_name = ( + profile_name + or self._session.get_config_variable("profile") + or 'default' + ) + + def _load_sso_config(self): + loaded_config = self._session.full_config + profiles = loaded_config.get("profiles", {}) + sso_sessions = loaded_config.get("sso_sessions", {}) + profile_config = profiles.get(self._profile_name, {}) + + if "sso_session" not in profile_config: + return + + sso_session_name = profile_config["sso_session"] + sso_config = sso_sessions.get(sso_session_name, None) + + if not sso_config: + error_msg = ( + f'The profile "{self._profile_name}" is configured to use the SSO ' + f'token provider but the "{sso_session_name}" sso_session ' + f"configuration does not exist." + ) + raise InvalidConfigError(error_msg=error_msg) + + missing_configs = [] + for var in self._SSO_CONFIG_VARS: + if var not in sso_config: + missing_configs.append(var) + + if missing_configs: + error_msg = ( + f'The profile "{self._profile_name}" is configured to use the SSO ' + f"token provider but is missing the following configuration: " + f"{missing_configs}." + ) + raise InvalidConfigError(error_msg=error_msg) + + return { + "session_name": sso_session_name, + "sso_region": sso_config["sso_region"], + "sso_start_url": sso_config["sso_start_url"], + } + + @CachedProperty + def _sso_config(self): + return self._load_sso_config() + + @CachedProperty + def _client(self): + config = Config( + region_name=self._sso_config["sso_region"], + signature_version=UNSIGNED, + ) + return self._session.create_client("sso-oidc", config=config) + + def _attempt_create_token(self, token): + response = self._client.create_token( + grantType=self._GRANT_TYPE, + clientId=token["clientId"], + clientSecret=token["clientSecret"], + refreshToken=token["refreshToken"], + ) + expires_in = timedelta(seconds=response["expiresIn"]) + new_token = { + "startUrl": self._sso_config["sso_start_url"], + "region": self._sso_config["sso_region"], + "accessToken": response["accessToken"], + "expiresAt": self._now() + expires_in, + # Cache the registration alongside the token + "clientId": token["clientId"], + "clientSecret": token["clientSecret"], + "registrationExpiresAt": token["registrationExpiresAt"], + } + if "refreshToken" in response: + new_token["refreshToken"] = response["refreshToken"] + logger.info("SSO Token refresh succeeded") + return new_token + + def _refresh_access_token(self, token): + keys = ( + "refreshToken", + "clientId", + "clientSecret", + "registrationExpiresAt", + ) + missing_keys = [k for k in keys if k not in token] + if missing_keys: + msg = f"Unable to refresh SSO token: missing keys: {missing_keys}" + logger.info(msg) + return None + + expiry = dateutil.parser.parse(token["registrationExpiresAt"]) + if total_seconds(expiry - self._now()) <= 0: + logger.info(f"SSO token registration expired at {expiry}") + return None + + try: + return self._attempt_create_token(token) + except ClientError: + logger.warning("SSO token refresh attempt failed", exc_info=True) + return None + + def _refresher(self): + start_url = self._sso_config["sso_start_url"] + session_name = self._sso_config["session_name"] + logger.info(f"Loading cached SSO token for {session_name}") + token_dict = self._token_loader(start_url, session_name=session_name) + expiration = dateutil.parser.parse(token_dict["expiresAt"]) + logger.debug(f"Cached SSO token expires at {expiration}") + + remaining = total_seconds(expiration - self._now()) + if remaining < self._REFRESH_WINDOW: + new_token_dict = self._refresh_access_token(token_dict) + if new_token_dict is not None: + token_dict = new_token_dict + expiration = token_dict["expiresAt"] + self._token_loader.save_token( + start_url, token_dict, session_name=session_name + ) + + return FrozenAuthToken( + token_dict["accessToken"], expiration=expiration + ) + + def load_token(self): + if self._sso_config is None: + return None + + return DeferredRefreshableToken( + self.METHOD, self._refresher, time_fetcher=self._now + ) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/translate.py b/dbtzin/lib/python3.8/site-packages/botocore/translate.py new file mode 100644 index 00000000..ecfe3bca --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/translate.py @@ -0,0 +1,78 @@ +# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/ +# Copyright 2012-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import copy + +from botocore.utils import merge_dicts + + +def build_retry_config( + endpoint_prefix, retry_model, definitions, client_retry_config=None +): + service_config = retry_model.get(endpoint_prefix, {}) + resolve_references(service_config, definitions) + # We want to merge the global defaults with the service specific + # defaults, with the service specific defaults taking precedence. + # So we use the global defaults as the base. + # + # A deepcopy is done on the retry defaults because it ensures the + # retry model has no chance of getting mutated when the service specific + # configuration or client retry config is merged in. + final_retry_config = { + '__default__': copy.deepcopy(retry_model.get('__default__', {})) + } + resolve_references(final_retry_config, definitions) + # The merge the service specific config on top. + merge_dicts(final_retry_config, service_config) + if client_retry_config is not None: + _merge_client_retry_config(final_retry_config, client_retry_config) + return final_retry_config + + +def _merge_client_retry_config(retry_config, client_retry_config): + max_retry_attempts_override = client_retry_config.get('max_attempts') + if max_retry_attempts_override is not None: + # In the retry config, the max_attempts refers to the maximum number + # of requests in general will be made. However, for the client's + # retry config it refers to how many retry attempts will be made at + # most. So to translate this number from the client config, one is + # added to convert it to the maximum number request that will be made + # by including the initial request. + # + # It is also important to note that if we ever support per operation + # configuration in the retry model via the client, we will need to + # revisit this logic to make sure max_attempts gets applied + # per operation. + retry_config['__default__']['max_attempts'] = ( + max_retry_attempts_override + 1 + ) + + +def resolve_references(config, definitions): + """Recursively replace $ref keys. + + To cut down on duplication, common definitions can be declared + (and passed in via the ``definitions`` attribute) and then + references as {"$ref": "name"}, when this happens the reference + dict is placed with the value from the ``definition`` dict. + + This is recursively done. + + """ + for key, value in config.items(): + if isinstance(value, dict): + if len(value) == 1 and list(value.keys())[0] == '$ref': + # Then we need to resolve this reference. + config[key] = definitions[list(value.values())[0]] + else: + resolve_references(value, definitions) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/useragent.py b/dbtzin/lib/python3.8/site-packages/botocore/useragent.py new file mode 100644 index 00000000..f837fc86 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/useragent.py @@ -0,0 +1,503 @@ +# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +""" +NOTE: All classes and functions in this module are considered private and are +subject to abrupt breaking changes. Please do not use them directly. + +To modify the User-Agent header sent by botocore, use one of these +configuration options: +* The ``AWS_SDK_UA_APP_ID`` environment variable. +* The ``sdk_ua_app_id`` setting in the shared AWS config file. +* The ``user_agent_appid`` field in the :py:class:`botocore.config.Config`. +* The ``user_agent_extra`` field in the :py:class:`botocore.config.Config`. + +""" +import os +import platform +from copy import copy +from string import ascii_letters, digits +from typing import NamedTuple, Optional + +from botocore import __version__ as botocore_version +from botocore.compat import HAS_CRT + +_USERAGENT_ALLOWED_CHARACTERS = ascii_letters + digits + "!$%&'*+-.^_`|~" +_USERAGENT_ALLOWED_OS_NAMES = ( + 'windows', + 'linux', + 'macos', + 'android', + 'ios', + 'watchos', + 'tvos', + 'other', +) +_USERAGENT_PLATFORM_NAME_MAPPINGS = {'darwin': 'macos'} +# The name by which botocore is identified in the User-Agent header. While most +# AWS SDKs follow a naming pattern of "aws-sdk-*", botocore and boto3 continue +# using their existing values. Uses uppercase "B" with all other characters +# lowercase. +_USERAGENT_SDK_NAME = 'Botocore' + + +def sanitize_user_agent_string_component(raw_str, allow_hash): + """Replaces all not allowed characters in the string with a dash ("-"). + + Allowed characters are ASCII alphanumerics and ``!$%&'*+-.^_`|~``. If + ``allow_hash`` is ``True``, "#"``" is also allowed. + + :type raw_str: str + :param raw_str: The input string to be sanitized. + + :type allow_hash: bool + :param allow_hash: Whether "#" is considered an allowed character. + """ + return ''.join( + c + if c in _USERAGENT_ALLOWED_CHARACTERS or (allow_hash and c == '#') + else '-' + for c in raw_str + ) + + +class UserAgentComponent(NamedTuple): + """ + Component of a Botocore User-Agent header string in the standard format. + + Each component consists of a prefix, a name, and a value. In the string + representation these are combined in the format ``prefix/name#value``. + + This class is considered private and is subject to abrupt breaking changes. + """ + + prefix: str + name: str + value: Optional[str] = None + + def to_string(self): + """Create string like 'prefix/name#value' from a UserAgentComponent.""" + clean_prefix = sanitize_user_agent_string_component( + self.prefix, allow_hash=True + ) + clean_name = sanitize_user_agent_string_component( + self.name, allow_hash=False + ) + if self.value is None or self.value == '': + return f'{clean_prefix}/{clean_name}' + clean_value = sanitize_user_agent_string_component( + self.value, allow_hash=True + ) + return f'{clean_prefix}/{clean_name}#{clean_value}' + + +class RawStringUserAgentComponent: + """ + UserAgentComponent interface wrapper around ``str``. + + Use for User-Agent header components that are not constructed from + prefix+name+value but instead are provided as strings. No sanitization is + performed. + """ + + def __init__(self, value): + self._value = value + + def to_string(self): + return self._value + + +# This is not a public interface and is subject to abrupt breaking changes. +# Any usage is not advised or supported in external code bases. +try: + from botocore.customizations.useragent import modify_components +except ImportError: + # Default implementation that returns unmodified User-Agent components. + def modify_components(components): + return components + + +class UserAgentString: + """ + Generator for AWS SDK User-Agent header strings. + + The User-Agent header format contains information from session, client, and + request context. ``UserAgentString`` provides methods for collecting the + information and ``to_string`` for assembling it into the standardized + string format. + + Example usage: + + ua_session = UserAgentString.from_environment() + ua_session.set_session_config(...) + ua_client = ua_session.with_client_config(Config(...)) + ua_string = ua_request.to_string() + + For testing or when information from all sources is available at the same + time, the methods can be chained: + + ua_string = ( + UserAgentString + .from_environment() + .set_session_config(...) + .with_client_config(Config(...)) + .to_string() + ) + + """ + + def __init__( + self, + platform_name, + platform_version, + platform_machine, + python_version, + python_implementation, + execution_env, + crt_version=None, + ): + """ + :type platform_name: str + :param platform_name: Name of the operating system or equivalent + platform name. Should be sourced from :py:meth:`platform.system`. + :type platform_version: str + :param platform_version: Version of the operating system or equivalent + platform name. Should be sourced from :py:meth:`platform.version`. + :type platform_machine: str + :param platform_version: Processor architecture or machine type. For + example "x86_64". Should be sourced from :py:meth:`platform.machine`. + :type python_version: str + :param python_version: Version of the python implementation as str. + Should be sourced from :py:meth:`platform.python_version`. + :type python_implementation: str + :param python_implementation: Name of the python implementation. + Should be sourced from :py:meth:`platform.python_implementation`. + :type execution_env: str + :param execution_env: The value of the AWS execution environment. + Should be sourced from the ``AWS_EXECUTION_ENV` environment + variable. + :type crt_version: str + :param crt_version: Version string of awscrt package, if installed. + """ + self._platform_name = platform_name + self._platform_version = platform_version + self._platform_machine = platform_machine + self._python_version = python_version + self._python_implementation = python_implementation + self._execution_env = execution_env + self._crt_version = crt_version + + # Components that can be added with ``set_session_config()`` + self._session_user_agent_name = None + self._session_user_agent_version = None + self._session_user_agent_extra = None + + self._client_config = None + self._uses_paginator = None + self._uses_waiter = None + self._uses_resource = None + + @classmethod + def from_environment(cls): + crt_version = None + if HAS_CRT: + crt_version = _get_crt_version() or 'Unknown' + return cls( + platform_name=platform.system(), + platform_version=platform.release(), + platform_machine=platform.machine(), + python_version=platform.python_version(), + python_implementation=platform.python_implementation(), + execution_env=os.environ.get('AWS_EXECUTION_ENV'), + crt_version=crt_version, + ) + + def set_session_config( + self, + session_user_agent_name, + session_user_agent_version, + session_user_agent_extra, + ): + """ + Set the user agent configuration values that apply at session level. + + :param user_agent_name: The user agent name configured in the + :py:class:`botocore.session.Session` object. For backwards + compatibility, this will always be at the beginning of the + User-Agent string, together with ``user_agent_version``. + :param user_agent_version: The user agent version configured in the + :py:class:`botocore.session.Session` object. + :param user_agent_extra: The user agent "extra" configured in the + :py:class:`botocore.session.Session` object. + """ + self._session_user_agent_name = session_user_agent_name + self._session_user_agent_version = session_user_agent_version + self._session_user_agent_extra = session_user_agent_extra + return self + + def with_client_config(self, client_config): + """ + Create a copy with all original values and client-specific values. + + :type client_config: botocore.config.Config + :param client_config: The client configuration object. + """ + cp = copy(self) + cp._client_config = client_config + return cp + + def to_string(self): + """ + Build User-Agent header string from the object's properties. + """ + config_ua_override = None + if self._client_config: + if hasattr(self._client_config, '_supplied_user_agent'): + config_ua_override = self._client_config._supplied_user_agent + else: + config_ua_override = self._client_config.user_agent + + if config_ua_override is not None: + return self._build_legacy_ua_string(config_ua_override) + + components = [ + *self._build_sdk_metadata(), + RawStringUserAgentComponent('ua/2.0'), + *self._build_os_metadata(), + *self._build_architecture_metadata(), + *self._build_language_metadata(), + *self._build_execution_env_metadata(), + *self._build_feature_metadata(), + *self._build_config_metadata(), + *self._build_app_id(), + *self._build_extra(), + ] + + components = modify_components(components) + + return ' '.join([comp.to_string() for comp in components]) + + def _build_sdk_metadata(self): + """ + Build the SDK name and version component of the User-Agent header. + + For backwards-compatibility both session-level and client-level config + of custom tool names are honored. If this removes the Botocore + information from the start of the string, Botocore's name and version + are included as a separate field with "md" prefix. + """ + sdk_md = [] + if ( + self._session_user_agent_name + and self._session_user_agent_version + and ( + self._session_user_agent_name != _USERAGENT_SDK_NAME + or self._session_user_agent_version != botocore_version + ) + ): + sdk_md.extend( + [ + UserAgentComponent( + self._session_user_agent_name, + self._session_user_agent_version, + ), + UserAgentComponent( + 'md', _USERAGENT_SDK_NAME, botocore_version + ), + ] + ) + else: + sdk_md.append( + UserAgentComponent(_USERAGENT_SDK_NAME, botocore_version) + ) + + if self._crt_version is not None: + sdk_md.append( + UserAgentComponent('md', 'awscrt', self._crt_version) + ) + + return sdk_md + + def _build_os_metadata(self): + """ + Build the OS/platform components of the User-Agent header string. + + For recognized platform names that match or map to an entry in the list + of standardized OS names, a single component with prefix "os" is + returned. Otherwise, one component "os/other" is returned and a second + with prefix "md" and the raw platform name. + + String representations of example return values: + * ``os/macos#10.13.6`` + * ``os/linux`` + * ``os/other`` + * ``os/other md/foobar#1.2.3`` + """ + if self._platform_name is None: + return [UserAgentComponent('os', 'other')] + + plt_name_lower = self._platform_name.lower() + if plt_name_lower in _USERAGENT_ALLOWED_OS_NAMES: + os_family = plt_name_lower + elif plt_name_lower in _USERAGENT_PLATFORM_NAME_MAPPINGS: + os_family = _USERAGENT_PLATFORM_NAME_MAPPINGS[plt_name_lower] + else: + os_family = None + + if os_family is not None: + return [ + UserAgentComponent('os', os_family, self._platform_version) + ] + else: + return [ + UserAgentComponent('os', 'other'), + UserAgentComponent( + 'md', self._platform_name, self._platform_version + ), + ] + + def _build_architecture_metadata(self): + """ + Build architecture component of the User-Agent header string. + + Returns the machine type with prefix "md" and name "arch", if one is + available. Common values include "x86_64", "arm64", "i386". + """ + if self._platform_machine: + return [ + UserAgentComponent( + 'md', 'arch', self._platform_machine.lower() + ) + ] + return [] + + def _build_language_metadata(self): + """ + Build the language components of the User-Agent header string. + + Returns the Python version in a component with prefix "lang" and name + "python". The Python implementation (e.g. CPython, PyPy) is returned as + separate metadata component with prefix "md" and name "pyimpl". + + String representation of an example return value: + ``lang/python#3.10.4 md/pyimpl#CPython`` + """ + lang_md = [ + UserAgentComponent('lang', 'python', self._python_version), + ] + if self._python_implementation: + lang_md.append( + UserAgentComponent('md', 'pyimpl', self._python_implementation) + ) + return lang_md + + def _build_execution_env_metadata(self): + """ + Build the execution environment component of the User-Agent header. + + Returns a single component prefixed with "exec-env", usually sourced + from the environment variable AWS_EXECUTION_ENV. + """ + if self._execution_env: + return [UserAgentComponent('exec-env', self._execution_env)] + else: + return [] + + def _build_feature_metadata(self): + """ + Build the features components of the User-Agent header string. + + Botocore currently does not report any features. This may change in a + future version. + """ + return [] + + def _build_config_metadata(self): + """ + Build the configuration components of the User-Agent header string. + + Returns a list of components with prefix "cfg" followed by the config + setting name and its value. Tracked configuration settings may be + added or removed in future versions. + """ + if not self._client_config or not self._client_config.retries: + return [] + retry_mode = self._client_config.retries.get('mode') + cfg_md = [UserAgentComponent('cfg', 'retry-mode', retry_mode)] + if self._client_config.endpoint_discovery_enabled: + cfg_md.append(UserAgentComponent('cfg', 'endpoint-discovery')) + return cfg_md + + def _build_app_id(self): + """ + Build app component of the User-Agent header string. + + Returns a single component with prefix "app" and value sourced from the + ``user_agent_appid`` field in :py:class:`botocore.config.Config` or + the ``sdk_ua_app_id`` setting in the shared configuration file, or the + ``AWS_SDK_UA_APP_ID`` environment variable. These are the recommended + ways for apps built with Botocore to insert their identifer into the + User-Agent header. + """ + if self._client_config and self._client_config.user_agent_appid: + return [ + UserAgentComponent('app', self._client_config.user_agent_appid) + ] + else: + return [] + + def _build_extra(self): + """User agent string components based on legacy "extra" settings. + + Creates components from the session-level and client-level + ``user_agent_extra`` setting, if present. Both are passed through + verbatim and should be appended at the end of the string. + + Preferred ways to inject application-specific information into + botocore's User-Agent header string are the ``user_agent_appid` field + in :py:class:`botocore.config.Config`. The ``AWS_SDK_UA_APP_ID`` + environment variable and the ``sdk_ua_app_id`` configuration file + setting are alternative ways to set the ``user_agent_appid`` config. + """ + extra = [] + if self._session_user_agent_extra: + extra.append( + RawStringUserAgentComponent(self._session_user_agent_extra) + ) + if self._client_config and self._client_config.user_agent_extra: + extra.append( + RawStringUserAgentComponent( + self._client_config.user_agent_extra + ) + ) + return extra + + def _build_legacy_ua_string(self, config_ua_override): + components = [config_ua_override] + if self._session_user_agent_extra: + components.append(self._session_user_agent_extra) + if self._client_config.user_agent_extra: + components.append(self._client_config.user_agent_extra) + return ' '.join(components) + + +def _get_crt_version(): + """ + This function is considered private and is subject to abrupt breaking + changes. + """ + try: + import awscrt + + return awscrt.__version__ + except AttributeError: + return None diff --git a/dbtzin/lib/python3.8/site-packages/botocore/utils.py b/dbtzin/lib/python3.8/site-packages/botocore/utils.py new file mode 100644 index 00000000..923217ea --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/utils.py @@ -0,0 +1,3638 @@ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import base64 +import binascii +import datetime +import email.message +import functools +import hashlib +import io +import logging +import os +import random +import re +import socket +import time +import warnings +import weakref +from datetime import datetime as _DatetimeClass +from ipaddress import ip_address +from pathlib import Path +from urllib.request import getproxies, proxy_bypass + +import dateutil.parser +from dateutil.tz import tzutc +from urllib3.exceptions import LocationParseError + +import botocore +import botocore.awsrequest +import botocore.httpsession + +# IP Regexes retained for backwards compatibility +from botocore.compat import HEX_PAT # noqa: F401 +from botocore.compat import IPV4_PAT # noqa: F401 +from botocore.compat import IPV6_ADDRZ_PAT # noqa: F401 +from botocore.compat import IPV6_PAT # noqa: F401 +from botocore.compat import LS32_PAT # noqa: F401 +from botocore.compat import UNRESERVED_PAT # noqa: F401 +from botocore.compat import ZONE_ID_PAT # noqa: F401 +from botocore.compat import ( + HAS_CRT, + IPV4_RE, + IPV6_ADDRZ_RE, + MD5_AVAILABLE, + UNSAFE_URL_CHARS, + OrderedDict, + get_md5, + get_tzinfo_options, + json, + quote, + urlparse, + urlsplit, + urlunsplit, + zip_longest, +) +from botocore.exceptions import ( + ClientError, + ConfigNotFound, + ConnectionClosedError, + ConnectTimeoutError, + EndpointConnectionError, + HTTPClientError, + InvalidDNSNameError, + InvalidEndpointConfigurationError, + InvalidExpressionError, + InvalidHostLabelError, + InvalidIMDSEndpointError, + InvalidIMDSEndpointModeError, + InvalidRegionError, + MetadataRetrievalError, + MissingDependencyException, + ReadTimeoutError, + SSOTokenLoadError, + UnsupportedOutpostResourceError, + UnsupportedS3AccesspointConfigurationError, + UnsupportedS3ArnError, + UnsupportedS3ConfigurationError, + UnsupportedS3ControlArnError, + UnsupportedS3ControlConfigurationError, +) + +logger = logging.getLogger(__name__) +DEFAULT_METADATA_SERVICE_TIMEOUT = 1 +METADATA_BASE_URL = 'http://169.254.169.254/' +METADATA_BASE_URL_IPv6 = 'http://[fd00:ec2::254]/' +METADATA_ENDPOINT_MODES = ('ipv4', 'ipv6') + +# These are chars that do not need to be urlencoded. +# Based on rfc2986, section 2.3 +SAFE_CHARS = '-._~' +LABEL_RE = re.compile(r'[a-z0-9][a-z0-9\-]*[a-z0-9]') +RETRYABLE_HTTP_ERRORS = ( + ReadTimeoutError, + EndpointConnectionError, + ConnectionClosedError, + ConnectTimeoutError, +) +S3_ACCELERATE_WHITELIST = ['dualstack'] +# In switching events from using service name / endpoint prefix to service +# id, we have to preserve compatibility. This maps the instances where either +# is different than the transformed service id. +EVENT_ALIASES = { + "a4b": "alexa-for-business", + "alexaforbusiness": "alexa-for-business", + "api.mediatailor": "mediatailor", + "api.pricing": "pricing", + "api.sagemaker": "sagemaker", + "apigateway": "api-gateway", + "application-autoscaling": "application-auto-scaling", + "appstream2": "appstream", + "autoscaling": "auto-scaling", + "autoscaling-plans": "auto-scaling-plans", + "ce": "cost-explorer", + "cloudhsmv2": "cloudhsm-v2", + "cloudsearchdomain": "cloudsearch-domain", + "cognito-idp": "cognito-identity-provider", + "config": "config-service", + "cur": "cost-and-usage-report-service", + "data.iot": "iot-data-plane", + "data.jobs.iot": "iot-jobs-data-plane", + "data.mediastore": "mediastore-data", + "datapipeline": "data-pipeline", + "devicefarm": "device-farm", + "devices.iot1click": "iot-1click-devices-service", + "directconnect": "direct-connect", + "discovery": "application-discovery-service", + "dms": "database-migration-service", + "ds": "directory-service", + "dynamodbstreams": "dynamodb-streams", + "elasticbeanstalk": "elastic-beanstalk", + "elasticfilesystem": "efs", + "elasticloadbalancing": "elastic-load-balancing", + "elasticmapreduce": "emr", + "elastictranscoder": "elastic-transcoder", + "elb": "elastic-load-balancing", + "elbv2": "elastic-load-balancing-v2", + "email": "ses", + "entitlement.marketplace": "marketplace-entitlement-service", + "es": "elasticsearch-service", + "events": "eventbridge", + "cloudwatch-events": "eventbridge", + "iot-data": "iot-data-plane", + "iot-jobs-data": "iot-jobs-data-plane", + "iot1click-devices": "iot-1click-devices-service", + "iot1click-projects": "iot-1click-projects", + "kinesisanalytics": "kinesis-analytics", + "kinesisvideo": "kinesis-video", + "lex-models": "lex-model-building-service", + "lex-runtime": "lex-runtime-service", + "logs": "cloudwatch-logs", + "machinelearning": "machine-learning", + "marketplace-entitlement": "marketplace-entitlement-service", + "marketplacecommerceanalytics": "marketplace-commerce-analytics", + "metering.marketplace": "marketplace-metering", + "meteringmarketplace": "marketplace-metering", + "mgh": "migration-hub", + "models.lex": "lex-model-building-service", + "monitoring": "cloudwatch", + "mturk-requester": "mturk", + "opsworks-cm": "opsworkscm", + "projects.iot1click": "iot-1click-projects", + "resourcegroupstaggingapi": "resource-groups-tagging-api", + "route53": "route-53", + "route53domains": "route-53-domains", + "runtime.lex": "lex-runtime-service", + "runtime.sagemaker": "sagemaker-runtime", + "sdb": "simpledb", + "secretsmanager": "secrets-manager", + "serverlessrepo": "serverlessapplicationrepository", + "servicecatalog": "service-catalog", + "states": "sfn", + "stepfunctions": "sfn", + "storagegateway": "storage-gateway", + "streams.dynamodb": "dynamodb-streams", + "tagging": "resource-groups-tagging-api", +} + + +# This pattern can be used to detect if a header is a flexible checksum header +CHECKSUM_HEADER_PATTERN = re.compile( + r'^X-Amz-Checksum-([a-z0-9]*)$', + flags=re.IGNORECASE, +) + + +def ensure_boolean(val): + """Ensures a boolean value if a string or boolean is provided + + For strings, the value for True/False is case insensitive + """ + if isinstance(val, bool): + return val + elif isinstance(val, str): + return val.lower() == 'true' + else: + return False + + +def resolve_imds_endpoint_mode(session): + """Resolving IMDS endpoint mode to either IPv6 or IPv4. + + ec2_metadata_service_endpoint_mode takes precedence over imds_use_ipv6. + """ + endpoint_mode = session.get_config_variable( + 'ec2_metadata_service_endpoint_mode' + ) + if endpoint_mode is not None: + lendpoint_mode = endpoint_mode.lower() + if lendpoint_mode not in METADATA_ENDPOINT_MODES: + error_msg_kwargs = { + 'mode': endpoint_mode, + 'valid_modes': METADATA_ENDPOINT_MODES, + } + raise InvalidIMDSEndpointModeError(**error_msg_kwargs) + return lendpoint_mode + elif session.get_config_variable('imds_use_ipv6'): + return 'ipv6' + return 'ipv4' + + +def is_json_value_header(shape): + """Determines if the provided shape is the special header type jsonvalue. + + :type shape: botocore.shape + :param shape: Shape to be inspected for the jsonvalue trait. + + :return: True if this type is a jsonvalue, False otherwise + :rtype: Bool + """ + return ( + hasattr(shape, 'serialization') + and shape.serialization.get('jsonvalue', False) + and shape.serialization.get('location') == 'header' + and shape.type_name == 'string' + ) + + +def has_header(header_name, headers): + """Case-insensitive check for header key.""" + if header_name is None: + return False + elif isinstance(headers, botocore.awsrequest.HeadersDict): + return header_name in headers + else: + return header_name.lower() in [key.lower() for key in headers.keys()] + + +def get_service_module_name(service_model): + """Returns the module name for a service + + This is the value used in both the documentation and client class name + """ + name = service_model.metadata.get( + 'serviceAbbreviation', + service_model.metadata.get( + 'serviceFullName', service_model.service_name + ), + ) + name = name.replace('Amazon', '') + name = name.replace('AWS', '') + name = re.sub(r'\W+', '', name) + return name + + +def normalize_url_path(path): + if not path: + return '/' + return remove_dot_segments(path) + + +def normalize_boolean(val): + """Returns None if val is None, otherwise ensure value + converted to boolean""" + if val is None: + return val + else: + return ensure_boolean(val) + + +def remove_dot_segments(url): + # RFC 3986, section 5.2.4 "Remove Dot Segments" + # Also, AWS services require consecutive slashes to be removed, + # so that's done here as well + if not url: + return '' + input_url = url.split('/') + output_list = [] + for x in input_url: + if x and x != '.': + if x == '..': + if output_list: + output_list.pop() + else: + output_list.append(x) + + if url[0] == '/': + first = '/' + else: + first = '' + if url[-1] == '/' and output_list: + last = '/' + else: + last = '' + return first + '/'.join(output_list) + last + + +def validate_jmespath_for_set(expression): + # Validates a limited jmespath expression to determine if we can set a + # value based on it. Only works with dotted paths. + if not expression or expression == '.': + raise InvalidExpressionError(expression=expression) + + for invalid in ['[', ']', '*']: + if invalid in expression: + raise InvalidExpressionError(expression=expression) + + +def set_value_from_jmespath(source, expression, value, is_first=True): + # This takes a (limited) jmespath-like expression & can set a value based + # on it. + # Limitations: + # * Only handles dotted lookups + # * No offsets/wildcards/slices/etc. + if is_first: + validate_jmespath_for_set(expression) + + bits = expression.split('.', 1) + current_key, remainder = bits[0], bits[1] if len(bits) > 1 else '' + + if not current_key: + raise InvalidExpressionError(expression=expression) + + if remainder: + if current_key not in source: + # We've got something in the expression that's not present in the + # source (new key). If there's any more bits, we'll set the key + # with an empty dictionary. + source[current_key] = {} + + return set_value_from_jmespath( + source[current_key], remainder, value, is_first=False + ) + + # If we're down to a single key, set it. + source[current_key] = value + + +def is_global_accesspoint(context): + """Determine if request is intended for an MRAP accesspoint.""" + s3_accesspoint = context.get('s3_accesspoint', {}) + is_global = s3_accesspoint.get('region') == '' + return is_global + + +class _RetriesExceededError(Exception): + """Internal exception used when the number of retries are exceeded.""" + + pass + + +class BadIMDSRequestError(Exception): + def __init__(self, request): + self.request = request + + +class IMDSFetcher: + _RETRIES_EXCEEDED_ERROR_CLS = _RetriesExceededError + _TOKEN_PATH = 'latest/api/token' + _TOKEN_TTL = '21600' + + def __init__( + self, + timeout=DEFAULT_METADATA_SERVICE_TIMEOUT, + num_attempts=1, + base_url=METADATA_BASE_URL, + env=None, + user_agent=None, + config=None, + ): + self._timeout = timeout + self._num_attempts = num_attempts + if config is None: + config = {} + self._base_url = self._select_base_url(base_url, config) + self._config = config + + if env is None: + env = os.environ.copy() + self._disabled = ( + env.get('AWS_EC2_METADATA_DISABLED', 'false').lower() == 'true' + ) + self._imds_v1_disabled = config.get('ec2_metadata_v1_disabled') + self._user_agent = user_agent + self._session = botocore.httpsession.URLLib3Session( + timeout=self._timeout, + proxies=get_environ_proxies(self._base_url), + ) + + def get_base_url(self): + return self._base_url + + def _select_base_url(self, base_url, config): + if config is None: + config = {} + + requires_ipv6 = ( + config.get('ec2_metadata_service_endpoint_mode') == 'ipv6' + ) + custom_metadata_endpoint = config.get('ec2_metadata_service_endpoint') + + if requires_ipv6 and custom_metadata_endpoint: + logger.warning( + "Custom endpoint and IMDS_USE_IPV6 are both set. Using custom endpoint." + ) + + chosen_base_url = None + + if base_url != METADATA_BASE_URL: + chosen_base_url = base_url + elif custom_metadata_endpoint: + chosen_base_url = custom_metadata_endpoint + elif requires_ipv6: + chosen_base_url = METADATA_BASE_URL_IPv6 + else: + chosen_base_url = METADATA_BASE_URL + + logger.debug("IMDS ENDPOINT: %s" % chosen_base_url) + if not is_valid_uri(chosen_base_url): + raise InvalidIMDSEndpointError(endpoint=chosen_base_url) + + return chosen_base_url + + def _construct_url(self, path): + sep = '' + if self._base_url and not self._base_url.endswith('/'): + sep = '/' + return f'{self._base_url}{sep}{path}' + + def _fetch_metadata_token(self): + self._assert_enabled() + url = self._construct_url(self._TOKEN_PATH) + headers = { + 'x-aws-ec2-metadata-token-ttl-seconds': self._TOKEN_TTL, + } + self._add_user_agent(headers) + request = botocore.awsrequest.AWSRequest( + method='PUT', url=url, headers=headers + ) + for i in range(self._num_attempts): + try: + response = self._session.send(request.prepare()) + if response.status_code == 200: + return response.text + elif response.status_code in (404, 403, 405): + return None + elif response.status_code in (400,): + raise BadIMDSRequestError(request) + except ReadTimeoutError: + return None + except RETRYABLE_HTTP_ERRORS as e: + logger.debug( + "Caught retryable HTTP exception while making metadata " + "service request to %s: %s", + url, + e, + exc_info=True, + ) + except HTTPClientError as e: + if isinstance(e.kwargs.get('error'), LocationParseError): + raise InvalidIMDSEndpointError(endpoint=url, error=e) + else: + raise + return None + + def _get_request(self, url_path, retry_func, token=None): + """Make a get request to the Instance Metadata Service. + + :type url_path: str + :param url_path: The path component of the URL to make a get request. + This arg is appended to the base_url that was provided in the + initializer. + + :type retry_func: callable + :param retry_func: A function that takes the response as an argument + and determines if it needs to retry. By default empty and non + 200 OK responses are retried. + + :type token: str + :param token: Metadata token to send along with GET requests to IMDS. + """ + self._assert_enabled() + if not token: + self._assert_v1_enabled() + if retry_func is None: + retry_func = self._default_retry + url = self._construct_url(url_path) + headers = {} + if token is not None: + headers['x-aws-ec2-metadata-token'] = token + self._add_user_agent(headers) + for i in range(self._num_attempts): + try: + request = botocore.awsrequest.AWSRequest( + method='GET', url=url, headers=headers + ) + response = self._session.send(request.prepare()) + if not retry_func(response): + return response + except RETRYABLE_HTTP_ERRORS as e: + logger.debug( + "Caught retryable HTTP exception while making metadata " + "service request to %s: %s", + url, + e, + exc_info=True, + ) + raise self._RETRIES_EXCEEDED_ERROR_CLS() + + def _add_user_agent(self, headers): + if self._user_agent is not None: + headers['User-Agent'] = self._user_agent + + def _assert_enabled(self): + if self._disabled: + logger.debug("Access to EC2 metadata has been disabled.") + raise self._RETRIES_EXCEEDED_ERROR_CLS() + + def _assert_v1_enabled(self): + if self._imds_v1_disabled: + raise MetadataRetrievalError( + error_msg="Unable to retrieve token for use in IMDSv2 call and IMDSv1 has been disabled" + ) + + def _default_retry(self, response): + return self._is_non_ok_response(response) or self._is_empty(response) + + def _is_non_ok_response(self, response): + if response.status_code != 200: + self._log_imds_response(response, 'non-200', log_body=True) + return True + return False + + def _is_empty(self, response): + if not response.content: + self._log_imds_response(response, 'no body', log_body=True) + return True + return False + + def _log_imds_response(self, response, reason_to_log, log_body=False): + statement = ( + "Metadata service returned %s response " + "with status code of %s for url: %s" + ) + logger_args = [reason_to_log, response.status_code, response.url] + if log_body: + statement += ", content body: %s" + logger_args.append(response.content) + logger.debug(statement, *logger_args) + + +class InstanceMetadataFetcher(IMDSFetcher): + _URL_PATH = 'latest/meta-data/iam/security-credentials/' + _REQUIRED_CREDENTIAL_FIELDS = [ + 'AccessKeyId', + 'SecretAccessKey', + 'Token', + 'Expiration', + ] + + def retrieve_iam_role_credentials(self): + try: + token = self._fetch_metadata_token() + role_name = self._get_iam_role(token) + credentials = self._get_credentials(role_name, token) + if self._contains_all_credential_fields(credentials): + credentials = { + 'role_name': role_name, + 'access_key': credentials['AccessKeyId'], + 'secret_key': credentials['SecretAccessKey'], + 'token': credentials['Token'], + 'expiry_time': credentials['Expiration'], + } + self._evaluate_expiration(credentials) + return credentials + else: + # IMDS can return a 200 response that has a JSON formatted + # error message (i.e. if ec2 is not trusted entity for the + # attached role). We do not necessarily want to retry for + # these and we also do not necessarily want to raise a key + # error. So at least log the problematic response and return + # an empty dictionary to signal that it was not able to + # retrieve credentials. These error will contain both a + # Code and Message key. + if 'Code' in credentials and 'Message' in credentials: + logger.debug( + 'Error response received when retrieving' + 'credentials: %s.', + credentials, + ) + return {} + except self._RETRIES_EXCEEDED_ERROR_CLS: + logger.debug( + "Max number of attempts exceeded (%s) when " + "attempting to retrieve data from metadata service.", + self._num_attempts, + ) + except BadIMDSRequestError as e: + logger.debug("Bad IMDS request: %s", e.request) + return {} + + def _get_iam_role(self, token=None): + return self._get_request( + url_path=self._URL_PATH, + retry_func=self._needs_retry_for_role_name, + token=token, + ).text + + def _get_credentials(self, role_name, token=None): + r = self._get_request( + url_path=self._URL_PATH + role_name, + retry_func=self._needs_retry_for_credentials, + token=token, + ) + return json.loads(r.text) + + def _is_invalid_json(self, response): + try: + json.loads(response.text) + return False + except ValueError: + self._log_imds_response(response, 'invalid json') + return True + + def _needs_retry_for_role_name(self, response): + return self._is_non_ok_response(response) or self._is_empty(response) + + def _needs_retry_for_credentials(self, response): + return ( + self._is_non_ok_response(response) + or self._is_empty(response) + or self._is_invalid_json(response) + ) + + def _contains_all_credential_fields(self, credentials): + for field in self._REQUIRED_CREDENTIAL_FIELDS: + if field not in credentials: + logger.debug( + 'Retrieved credentials is missing required field: %s', + field, + ) + return False + return True + + def _evaluate_expiration(self, credentials): + expiration = credentials.get("expiry_time") + if expiration is None: + return + try: + expiration = datetime.datetime.strptime( + expiration, "%Y-%m-%dT%H:%M:%SZ" + ) + refresh_interval = self._config.get( + "ec2_credential_refresh_window", 60 * 10 + ) + jitter = random.randint(120, 600) # Between 2 to 10 minutes + refresh_interval_with_jitter = refresh_interval + jitter + current_time = datetime.datetime.utcnow() + refresh_offset = datetime.timedelta( + seconds=refresh_interval_with_jitter + ) + extension_time = expiration - refresh_offset + if current_time >= extension_time: + new_time = current_time + refresh_offset + credentials["expiry_time"] = new_time.strftime( + "%Y-%m-%dT%H:%M:%SZ" + ) + logger.info( + f"Attempting credential expiration extension due to a " + f"credential service availability issue. A refresh of " + f"these credentials will be attempted again within " + f"the next {refresh_interval_with_jitter/60:.0f} minutes." + ) + except ValueError: + logger.debug( + f"Unable to parse expiry_time in {credentials['expiry_time']}" + ) + + +class IMDSRegionProvider: + def __init__(self, session, environ=None, fetcher=None): + """Initialize IMDSRegionProvider. + :type session: :class:`botocore.session.Session` + :param session: The session is needed to look up configuration for + how to contact the instance metadata service. Specifically the + whether or not it should use the IMDS region at all, and if so how + to configure the timeout and number of attempts to reach the + service. + :type environ: None or dict + :param environ: A dictionary of environment variables to use. If + ``None`` is the argument then ``os.environ`` will be used by + default. + :type fecther: :class:`botocore.utils.InstanceMetadataRegionFetcher` + :param fetcher: The class to actually handle the fetching of the region + from the IMDS. If not provided a default one will be created. + """ + self._session = session + if environ is None: + environ = os.environ + self._environ = environ + self._fetcher = fetcher + + def provide(self): + """Provide the region value from IMDS.""" + instance_region = self._get_instance_metadata_region() + return instance_region + + def _get_instance_metadata_region(self): + fetcher = self._get_fetcher() + region = fetcher.retrieve_region() + return region + + def _get_fetcher(self): + if self._fetcher is None: + self._fetcher = self._create_fetcher() + return self._fetcher + + def _create_fetcher(self): + metadata_timeout = self._session.get_config_variable( + 'metadata_service_timeout' + ) + metadata_num_attempts = self._session.get_config_variable( + 'metadata_service_num_attempts' + ) + imds_config = { + 'ec2_metadata_service_endpoint': self._session.get_config_variable( + 'ec2_metadata_service_endpoint' + ), + 'ec2_metadata_service_endpoint_mode': resolve_imds_endpoint_mode( + self._session + ), + 'ec2_metadata_v1_disabled': self._session.get_config_variable( + 'ec2_metadata_v1_disabled' + ), + } + fetcher = InstanceMetadataRegionFetcher( + timeout=metadata_timeout, + num_attempts=metadata_num_attempts, + env=self._environ, + user_agent=self._session.user_agent(), + config=imds_config, + ) + return fetcher + + +class InstanceMetadataRegionFetcher(IMDSFetcher): + _URL_PATH = 'latest/meta-data/placement/availability-zone/' + + def retrieve_region(self): + """Get the current region from the instance metadata service. + :rvalue: str + :returns: The region the current instance is running in or None + if the instance metadata service cannot be contacted or does not + give a valid response. + :rtype: None or str + :returns: Returns the region as a string if it is configured to use + IMDS as a region source. Otherwise returns ``None``. It will also + return ``None`` if it fails to get the region from IMDS due to + exhausting its retries or not being able to connect. + """ + try: + region = self._get_region() + return region + except self._RETRIES_EXCEEDED_ERROR_CLS: + logger.debug( + "Max number of attempts exceeded (%s) when " + "attempting to retrieve data from metadata service.", + self._num_attempts, + ) + return None + + def _get_region(self): + token = self._fetch_metadata_token() + response = self._get_request( + url_path=self._URL_PATH, + retry_func=self._default_retry, + token=token, + ) + availability_zone = response.text + region = availability_zone[:-1] + return region + + +def merge_dicts(dict1, dict2, append_lists=False): + """Given two dict, merge the second dict into the first. + + The dicts can have arbitrary nesting. + + :param append_lists: If true, instead of clobbering a list with the new + value, append all of the new values onto the original list. + """ + for key in dict2: + if isinstance(dict2[key], dict): + if key in dict1 and key in dict2: + merge_dicts(dict1[key], dict2[key]) + else: + dict1[key] = dict2[key] + # If the value is a list and the ``append_lists`` flag is set, + # append the new values onto the original list + elif isinstance(dict2[key], list) and append_lists: + # The value in dict1 must be a list in order to append new + # values onto it. + if key in dict1 and isinstance(dict1[key], list): + dict1[key].extend(dict2[key]) + else: + dict1[key] = dict2[key] + else: + # At scalar types, we iterate and merge the + # current dict that we're on. + dict1[key] = dict2[key] + + +def lowercase_dict(original): + """Copies the given dictionary ensuring all keys are lowercase strings.""" + copy = {} + for key in original: + copy[key.lower()] = original[key] + return copy + + +def parse_key_val_file(filename, _open=open): + try: + with _open(filename) as f: + contents = f.read() + return parse_key_val_file_contents(contents) + except OSError: + raise ConfigNotFound(path=filename) + + +def parse_key_val_file_contents(contents): + # This was originally extracted from the EC2 credential provider, which was + # fairly lenient in its parsing. We only try to parse key/val pairs if + # there's a '=' in the line. + final = {} + for line in contents.splitlines(): + if '=' not in line: + continue + key, val = line.split('=', 1) + key = key.strip() + val = val.strip() + final[key] = val + return final + + +def percent_encode_sequence(mapping, safe=SAFE_CHARS): + """Urlencode a dict or list into a string. + + This is similar to urllib.urlencode except that: + + * It uses quote, and not quote_plus + * It has a default list of safe chars that don't need + to be encoded, which matches what AWS services expect. + + If any value in the input ``mapping`` is a list type, + then each list element wil be serialized. This is the equivalent + to ``urlencode``'s ``doseq=True`` argument. + + This function should be preferred over the stdlib + ``urlencode()`` function. + + :param mapping: Either a dict to urlencode or a list of + ``(key, value)`` pairs. + + """ + encoded_pairs = [] + if hasattr(mapping, 'items'): + pairs = mapping.items() + else: + pairs = mapping + for key, value in pairs: + if isinstance(value, list): + for element in value: + encoded_pairs.append( + f'{percent_encode(key)}={percent_encode(element)}' + ) + else: + encoded_pairs.append( + f'{percent_encode(key)}={percent_encode(value)}' + ) + return '&'.join(encoded_pairs) + + +def percent_encode(input_str, safe=SAFE_CHARS): + """Urlencodes a string. + + Whereas percent_encode_sequence handles taking a dict/sequence and + producing a percent encoded string, this function deals only with + taking a string (not a dict/sequence) and percent encoding it. + + If given the binary type, will simply URL encode it. If given the + text type, will produce the binary type by UTF-8 encoding the + text. If given something else, will convert it to the text type + first. + """ + # If its not a binary or text string, make it a text string. + if not isinstance(input_str, (bytes, str)): + input_str = str(input_str) + # If it's not bytes, make it bytes by UTF-8 encoding it. + if not isinstance(input_str, bytes): + input_str = input_str.encode('utf-8') + return quote(input_str, safe=safe) + + +def _epoch_seconds_to_datetime(value, tzinfo): + """Parse numerical epoch timestamps (seconds since 1970) into a + ``datetime.datetime`` in UTC using ``datetime.timedelta``. This is intended + as fallback when ``fromtimestamp`` raises ``OverflowError`` or ``OSError``. + + :type value: float or int + :param value: The Unix timestamps as number. + + :type tzinfo: callable + :param tzinfo: A ``datetime.tzinfo`` class or compatible callable. + """ + epoch_zero = datetime.datetime(1970, 1, 1, 0, 0, 0, tzinfo=tzutc()) + epoch_zero_localized = epoch_zero.astimezone(tzinfo()) + return epoch_zero_localized + datetime.timedelta(seconds=value) + + +def _parse_timestamp_with_tzinfo(value, tzinfo): + """Parse timestamp with pluggable tzinfo options.""" + if isinstance(value, (int, float)): + # Possibly an epoch time. + return datetime.datetime.fromtimestamp(value, tzinfo()) + else: + try: + return datetime.datetime.fromtimestamp(float(value), tzinfo()) + except (TypeError, ValueError): + pass + try: + # In certain cases, a timestamp marked with GMT can be parsed into a + # different time zone, so here we provide a context which will + # enforce that GMT == UTC. + return dateutil.parser.parse(value, tzinfos={'GMT': tzutc()}) + except (TypeError, ValueError) as e: + raise ValueError(f'Invalid timestamp "{value}": {e}') + + +def parse_timestamp(value): + """Parse a timestamp into a datetime object. + + Supported formats: + + * iso8601 + * rfc822 + * epoch (value is an integer) + + This will return a ``datetime.datetime`` object. + + """ + tzinfo_options = get_tzinfo_options() + for tzinfo in tzinfo_options: + try: + return _parse_timestamp_with_tzinfo(value, tzinfo) + except (OSError, OverflowError) as e: + logger.debug( + 'Unable to parse timestamp with "%s" timezone info.', + tzinfo.__name__, + exc_info=e, + ) + # For numeric values attempt fallback to using fromtimestamp-free method. + # From Python's ``datetime.datetime.fromtimestamp`` documentation: "This + # may raise ``OverflowError``, if the timestamp is out of the range of + # values supported by the platform C localtime() function, and ``OSError`` + # on localtime() failure. It's common for this to be restricted to years + # from 1970 through 2038." + try: + numeric_value = float(value) + except (TypeError, ValueError): + pass + else: + try: + for tzinfo in tzinfo_options: + return _epoch_seconds_to_datetime(numeric_value, tzinfo=tzinfo) + except (OSError, OverflowError) as e: + logger.debug( + 'Unable to parse timestamp using fallback method with "%s" ' + 'timezone info.', + tzinfo.__name__, + exc_info=e, + ) + raise RuntimeError( + 'Unable to calculate correct timezone offset for "%s"' % value + ) + + +def parse_to_aware_datetime(value): + """Converted the passed in value to a datetime object with tzinfo. + + This function can be used to normalize all timestamp inputs. This + function accepts a number of different types of inputs, but + will always return a datetime.datetime object with time zone + information. + + The input param ``value`` can be one of several types: + + * A datetime object (both naive and aware) + * An integer representing the epoch time (can also be a string + of the integer, i.e '0', instead of 0). The epoch time is + considered to be UTC. + * An iso8601 formatted timestamp. This does not need to be + a complete timestamp, it can contain just the date portion + without the time component. + + The returned value will be a datetime object that will have tzinfo. + If no timezone info was provided in the input value, then UTC is + assumed, not local time. + + """ + # This is a general purpose method that handles several cases of + # converting the provided value to a string timestamp suitable to be + # serialized to an http request. It can handle: + # 1) A datetime.datetime object. + if isinstance(value, _DatetimeClass): + datetime_obj = value + else: + # 2) A string object that's formatted as a timestamp. + # We document this as being an iso8601 timestamp, although + # parse_timestamp is a bit more flexible. + datetime_obj = parse_timestamp(value) + if datetime_obj.tzinfo is None: + # I think a case would be made that if no time zone is provided, + # we should use the local time. However, to restore backwards + # compat, the previous behavior was to assume UTC, which is + # what we're going to do here. + datetime_obj = datetime_obj.replace(tzinfo=tzutc()) + else: + datetime_obj = datetime_obj.astimezone(tzutc()) + return datetime_obj + + +def datetime2timestamp(dt, default_timezone=None): + """Calculate the timestamp based on the given datetime instance. + + :type dt: datetime + :param dt: A datetime object to be converted into timestamp + :type default_timezone: tzinfo + :param default_timezone: If it is provided as None, we treat it as tzutc(). + But it is only used when dt is a naive datetime. + :returns: The timestamp + """ + epoch = datetime.datetime(1970, 1, 1) + if dt.tzinfo is None: + if default_timezone is None: + default_timezone = tzutc() + dt = dt.replace(tzinfo=default_timezone) + d = dt.replace(tzinfo=None) - dt.utcoffset() - epoch + return d.total_seconds() + + +def calculate_sha256(body, as_hex=False): + """Calculate a sha256 checksum. + + This method will calculate the sha256 checksum of a file like + object. Note that this method will iterate through the entire + file contents. The caller is responsible for ensuring the proper + starting position of the file and ``seek()``'ing the file back + to its starting location if other consumers need to read from + the file like object. + + :param body: Any file like object. The file must be opened + in binary mode such that a ``.read()`` call returns bytes. + :param as_hex: If True, then the hex digest is returned. + If False, then the digest (as binary bytes) is returned. + + :returns: The sha256 checksum + + """ + checksum = hashlib.sha256() + for chunk in iter(lambda: body.read(1024 * 1024), b''): + checksum.update(chunk) + if as_hex: + return checksum.hexdigest() + else: + return checksum.digest() + + +def calculate_tree_hash(body): + """Calculate a tree hash checksum. + + For more information see: + + http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html + + :param body: Any file like object. This has the same constraints as + the ``body`` param in calculate_sha256 + + :rtype: str + :returns: The hex version of the calculated tree hash + + """ + chunks = [] + required_chunk_size = 1024 * 1024 + sha256 = hashlib.sha256 + for chunk in iter(lambda: body.read(required_chunk_size), b''): + chunks.append(sha256(chunk).digest()) + if not chunks: + return sha256(b'').hexdigest() + while len(chunks) > 1: + new_chunks = [] + for first, second in _in_pairs(chunks): + if second is not None: + new_chunks.append(sha256(first + second).digest()) + else: + # We're at the end of the list and there's no pair left. + new_chunks.append(first) + chunks = new_chunks + return binascii.hexlify(chunks[0]).decode('ascii') + + +def _in_pairs(iterable): + # Creates iterator that iterates over the list in pairs: + # for a, b in _in_pairs([0, 1, 2, 3, 4]): + # print(a, b) + # + # will print: + # 0, 1 + # 2, 3 + # 4, None + shared_iter = iter(iterable) + # Note that zip_longest is a compat import that uses + # the itertools izip_longest. This creates an iterator, + # this call below does _not_ immediately create the list + # of pairs. + return zip_longest(shared_iter, shared_iter) + + +class CachedProperty: + """A read only property that caches the initially computed value. + + This descriptor will only call the provided ``fget`` function once. + Subsequent access to this property will return the cached value. + + """ + + def __init__(self, fget): + self._fget = fget + + def __get__(self, obj, cls): + if obj is None: + return self + else: + computed_value = self._fget(obj) + obj.__dict__[self._fget.__name__] = computed_value + return computed_value + + +class ArgumentGenerator: + """Generate sample input based on a shape model. + + This class contains a ``generate_skeleton`` method that will take + an input/output shape (created from ``botocore.model``) and generate + a sample dictionary corresponding to the input/output shape. + + The specific values used are place holder values. For strings either an + empty string or the member name can be used, for numbers 0 or 0.0 is used. + The intended usage of this class is to generate the *shape* of the input + structure. + + This can be useful for operations that have complex input shapes. + This allows a user to just fill in the necessary data instead of + worrying about the specific structure of the input arguments. + + Example usage:: + + s = botocore.session.get_session() + ddb = s.get_service_model('dynamodb') + arg_gen = ArgumentGenerator() + sample_input = arg_gen.generate_skeleton( + ddb.operation_model('CreateTable').input_shape) + print("Sample input for dynamodb.CreateTable: %s" % sample_input) + + """ + + def __init__(self, use_member_names=False): + self._use_member_names = use_member_names + + def generate_skeleton(self, shape): + """Generate a sample input. + + :type shape: ``botocore.model.Shape`` + :param shape: The input shape. + + :return: The generated skeleton input corresponding to the + provided input shape. + + """ + stack = [] + return self._generate_skeleton(shape, stack) + + def _generate_skeleton(self, shape, stack, name=''): + stack.append(shape.name) + try: + if shape.type_name == 'structure': + return self._generate_type_structure(shape, stack) + elif shape.type_name == 'list': + return self._generate_type_list(shape, stack) + elif shape.type_name == 'map': + return self._generate_type_map(shape, stack) + elif shape.type_name == 'string': + if self._use_member_names: + return name + if shape.enum: + return random.choice(shape.enum) + return '' + elif shape.type_name in ['integer', 'long']: + return 0 + elif shape.type_name in ['float', 'double']: + return 0.0 + elif shape.type_name == 'boolean': + return True + elif shape.type_name == 'timestamp': + return datetime.datetime(1970, 1, 1, 0, 0, 0) + finally: + stack.pop() + + def _generate_type_structure(self, shape, stack): + if stack.count(shape.name) > 1: + return {} + skeleton = OrderedDict() + for member_name, member_shape in shape.members.items(): + skeleton[member_name] = self._generate_skeleton( + member_shape, stack, name=member_name + ) + return skeleton + + def _generate_type_list(self, shape, stack): + # For list elements we've arbitrarily decided to + # return two elements for the skeleton list. + name = '' + if self._use_member_names: + name = shape.member.name + return [ + self._generate_skeleton(shape.member, stack, name), + ] + + def _generate_type_map(self, shape, stack): + key_shape = shape.key + value_shape = shape.value + assert key_shape.type_name == 'string' + return OrderedDict( + [ + ('KeyName', self._generate_skeleton(value_shape, stack)), + ] + ) + + +def is_valid_ipv6_endpoint_url(endpoint_url): + if UNSAFE_URL_CHARS.intersection(endpoint_url): + return False + hostname = f'[{urlparse(endpoint_url).hostname}]' + return IPV6_ADDRZ_RE.match(hostname) is not None + + +def is_valid_ipv4_endpoint_url(endpoint_url): + hostname = urlparse(endpoint_url).hostname + return IPV4_RE.match(hostname) is not None + + +def is_valid_endpoint_url(endpoint_url): + """Verify the endpoint_url is valid. + + :type endpoint_url: string + :param endpoint_url: An endpoint_url. Must have at least a scheme + and a hostname. + + :return: True if the endpoint url is valid. False otherwise. + + """ + # post-bpo-43882 urlsplit() strips unsafe characters from URL, causing + # it to pass hostname validation below. Detect them early to fix that. + if UNSAFE_URL_CHARS.intersection(endpoint_url): + return False + parts = urlsplit(endpoint_url) + hostname = parts.hostname + if hostname is None: + return False + if len(hostname) > 255: + return False + if hostname[-1] == ".": + hostname = hostname[:-1] + allowed = re.compile( + r"^((?!-)[A-Z\d-]{1,63}(? 63: + # Wrong length + return False + match = LABEL_RE.match(bucket_name) + if match is None or match.end() != len(bucket_name): + return False + return True + + +def fix_s3_host( + request, + signature_version, + region_name, + default_endpoint_url=None, + **kwargs, +): + """ + This handler looks at S3 requests just before they are signed. + If there is a bucket name on the path (true for everything except + ListAllBuckets) it checks to see if that bucket name conforms to + the DNS naming conventions. If it does, it alters the request to + use ``virtual hosting`` style addressing rather than ``path-style`` + addressing. + + """ + if request.context.get('use_global_endpoint', False): + default_endpoint_url = 's3.amazonaws.com' + try: + switch_to_virtual_host_style( + request, signature_version, default_endpoint_url + ) + except InvalidDNSNameError as e: + bucket_name = e.kwargs['bucket_name'] + logger.debug( + 'Not changing URI, bucket is not DNS compatible: %s', bucket_name + ) + + +def switch_to_virtual_host_style( + request, signature_version, default_endpoint_url=None, **kwargs +): + """ + This is a handler to force virtual host style s3 addressing no matter + the signature version (which is taken in consideration for the default + case). If the bucket is not DNS compatible an InvalidDNSName is thrown. + + :param request: A AWSRequest object that is about to be sent. + :param signature_version: The signature version to sign with + :param default_endpoint_url: The endpoint to use when switching to a + virtual style. If None is supplied, the virtual host will be + constructed from the url of the request. + """ + if request.auth_path is not None: + # The auth_path has already been applied (this may be a + # retried request). We don't need to perform this + # customization again. + return + elif _is_get_bucket_location_request(request): + # For the GetBucketLocation response, we should not be using + # the virtual host style addressing so we can avoid any sigv4 + # issues. + logger.debug( + "Request is GetBucketLocation operation, not checking " + "for DNS compatibility." + ) + return + parts = urlsplit(request.url) + request.auth_path = parts.path + path_parts = parts.path.split('/') + + # Retrieve what the endpoint we will be prepending the bucket name to. + if default_endpoint_url is None: + default_endpoint_url = parts.netloc + + if len(path_parts) > 1: + bucket_name = path_parts[1] + if not bucket_name: + # If the bucket name is empty we should not be checking for + # dns compatibility. + return + logger.debug('Checking for DNS compatible bucket for: %s', request.url) + if check_dns_name(bucket_name): + # If the operation is on a bucket, the auth_path must be + # terminated with a '/' character. + if len(path_parts) == 2: + if request.auth_path[-1] != '/': + request.auth_path += '/' + path_parts.remove(bucket_name) + # At the very least the path must be a '/', such as with the + # CreateBucket operation when DNS style is being used. If this + # is not used you will get an empty path which is incorrect. + path = '/'.join(path_parts) or '/' + global_endpoint = default_endpoint_url + host = bucket_name + '.' + global_endpoint + new_tuple = (parts.scheme, host, path, parts.query, '') + new_uri = urlunsplit(new_tuple) + request.url = new_uri + logger.debug('URI updated to: %s', new_uri) + else: + raise InvalidDNSNameError(bucket_name=bucket_name) + + +def _is_get_bucket_location_request(request): + return request.url.endswith('?location') + + +def instance_cache(func): + """Method decorator for caching method calls to a single instance. + + **This is not a general purpose caching decorator.** + + In order to use this, you *must* provide an ``_instance_cache`` + attribute on the instance. + + This decorator is used to cache method calls. The cache is only + scoped to a single instance though such that multiple instances + will maintain their own cache. In order to keep things simple, + this decorator requires that you provide an ``_instance_cache`` + attribute on your instance. + + """ + func_name = func.__name__ + + @functools.wraps(func) + def _cache_guard(self, *args, **kwargs): + cache_key = (func_name, args) + if kwargs: + kwarg_items = tuple(sorted(kwargs.items())) + cache_key = (func_name, args, kwarg_items) + result = self._instance_cache.get(cache_key) + if result is not None: + return result + result = func(self, *args, **kwargs) + self._instance_cache[cache_key] = result + return result + + return _cache_guard + + +def lru_cache_weakref(*cache_args, **cache_kwargs): + """ + Version of functools.lru_cache that stores a weak reference to ``self``. + + Serves the same purpose as :py:func:`instance_cache` but uses Python's + functools implementation which offers ``max_size`` and ``typed`` properties. + + lru_cache is a global cache even when used on a method. The cache's + reference to ``self`` will prevent garbace collection of the object. This + wrapper around functools.lru_cache replaces the reference to ``self`` with + a weak reference to not interfere with garbage collection. + """ + + def wrapper(func): + @functools.lru_cache(*cache_args, **cache_kwargs) + def func_with_weakref(weakref_to_self, *args, **kwargs): + return func(weakref_to_self(), *args, **kwargs) + + @functools.wraps(func) + def inner(self, *args, **kwargs): + return func_with_weakref(weakref.ref(self), *args, **kwargs) + + inner.cache_info = func_with_weakref.cache_info + return inner + + return wrapper + + +def switch_host_s3_accelerate(request, operation_name, **kwargs): + """Switches the current s3 endpoint with an S3 Accelerate endpoint""" + + # Note that when registered the switching of the s3 host happens + # before it gets changed to virtual. So we are not concerned with ensuring + # that the bucket name is translated to the virtual style here and we + # can hard code the Accelerate endpoint. + parts = urlsplit(request.url).netloc.split('.') + parts = [p for p in parts if p in S3_ACCELERATE_WHITELIST] + endpoint = 'https://s3-accelerate.' + if len(parts) > 0: + endpoint += '.'.join(parts) + '.' + endpoint += 'amazonaws.com' + + if operation_name in ['ListBuckets', 'CreateBucket', 'DeleteBucket']: + return + _switch_hosts(request, endpoint, use_new_scheme=False) + + +def switch_host_with_param(request, param_name): + """Switches the host using a parameter value from a JSON request body""" + request_json = json.loads(request.data.decode('utf-8')) + if request_json.get(param_name): + new_endpoint = request_json[param_name] + _switch_hosts(request, new_endpoint) + + +def _switch_hosts(request, new_endpoint, use_new_scheme=True): + final_endpoint = _get_new_endpoint( + request.url, new_endpoint, use_new_scheme + ) + request.url = final_endpoint + + +def _get_new_endpoint(original_endpoint, new_endpoint, use_new_scheme=True): + new_endpoint_components = urlsplit(new_endpoint) + original_endpoint_components = urlsplit(original_endpoint) + scheme = original_endpoint_components.scheme + if use_new_scheme: + scheme = new_endpoint_components.scheme + final_endpoint_components = ( + scheme, + new_endpoint_components.netloc, + original_endpoint_components.path, + original_endpoint_components.query, + '', + ) + final_endpoint = urlunsplit(final_endpoint_components) + logger.debug(f'Updating URI from {original_endpoint} to {final_endpoint}') + return final_endpoint + + +def deep_merge(base, extra): + """Deeply two dictionaries, overriding existing keys in the base. + + :param base: The base dictionary which will be merged into. + :param extra: The dictionary to merge into the base. Keys from this + dictionary will take precedence. + """ + for key in extra: + # If the key represents a dict on both given dicts, merge the sub-dicts + if ( + key in base + and isinstance(base[key], dict) + and isinstance(extra[key], dict) + ): + deep_merge(base[key], extra[key]) + continue + + # Otherwise, set the key on the base to be the value of the extra. + base[key] = extra[key] + + +def hyphenize_service_id(service_id): + """Translate the form used for event emitters. + + :param service_id: The service_id to convert. + """ + return service_id.replace(' ', '-').lower() + + +class IdentityCache: + """Base IdentityCache implementation for storing and retrieving + highly accessed credentials. + + This class is not intended to be instantiated in user code. + """ + + METHOD = "base_identity_cache" + + def __init__(self, client, credential_cls): + self._client = client + self._credential_cls = credential_cls + + def get_credentials(self, **kwargs): + callback = self.build_refresh_callback(**kwargs) + metadata = callback() + credential_entry = self._credential_cls.create_from_metadata( + metadata=metadata, + refresh_using=callback, + method=self.METHOD, + advisory_timeout=45, + mandatory_timeout=10, + ) + return credential_entry + + def build_refresh_callback(**kwargs): + """Callback to be implemented by subclasses. + + Returns a set of metadata to be converted into a new + credential instance. + """ + raise NotImplementedError() + + +class S3ExpressIdentityCache(IdentityCache): + """S3Express IdentityCache for retrieving and storing + credentials from CreateSession calls. + + This class is not intended to be instantiated in user code. + """ + + METHOD = "s3express" + + def __init__(self, client, credential_cls): + self._client = client + self._credential_cls = credential_cls + + @functools.lru_cache(maxsize=100) + def get_credentials(self, bucket): + return super().get_credentials(bucket=bucket) + + def build_refresh_callback(self, bucket): + def refresher(): + response = self._client.create_session(Bucket=bucket) + creds = response['Credentials'] + expiration = self._serialize_if_needed( + creds['Expiration'], iso=True + ) + return { + "access_key": creds['AccessKeyId'], + "secret_key": creds['SecretAccessKey'], + "token": creds['SessionToken'], + "expiry_time": expiration, + } + + return refresher + + def _serialize_if_needed(self, value, iso=False): + if isinstance(value, _DatetimeClass): + if iso: + return value.isoformat() + return value.strftime('%Y-%m-%dT%H:%M:%S%Z') + return value + + +class S3ExpressIdentityResolver: + def __init__(self, client, credential_cls, cache=None): + self._client = weakref.proxy(client) + + if cache is None: + cache = S3ExpressIdentityCache(self._client, credential_cls) + self._cache = cache + + def register(self, event_emitter=None): + logger.debug('Registering S3Express Identity Resolver') + emitter = event_emitter or self._client.meta.events + emitter.register( + 'before-parameter-build.s3', self.inject_signing_cache_key + ) + emitter.register('before-call.s3', self.apply_signing_cache_key) + emitter.register('before-sign.s3', self.resolve_s3express_identity) + + def inject_signing_cache_key(self, params, context, **kwargs): + if 'Bucket' in params: + context['S3Express'] = {'bucket_name': params['Bucket']} + + def apply_signing_cache_key(self, params, context, **kwargs): + endpoint_properties = context.get('endpoint_properties', {}) + backend = endpoint_properties.get('backend', None) + + # Add cache key if Bucket supplied for s3express request + bucket_name = context.get('S3Express', {}).get('bucket_name') + if backend == 'S3Express' and bucket_name is not None: + context.setdefault('signing', {}) + context['signing']['cache_key'] = bucket_name + + def resolve_s3express_identity( + self, + request, + signing_name, + region_name, + signature_version, + request_signer, + operation_name, + **kwargs, + ): + signing_context = request.context.get('signing', {}) + signing_name = signing_context.get('signing_name') + if signing_name == 's3express' and signature_version.startswith( + 'v4-s3express' + ): + signing_context['identity_cache'] = self._cache + if 'cache_key' not in signing_context: + signing_context['cache_key'] = ( + request.context.get('s3_redirect', {}) + .get('params', {}) + .get('Bucket') + ) + + +class S3RegionRedirectorv2: + """Updated version of S3RegionRedirector for use when + EndpointRulesetResolver is in use for endpoint resolution. + + This class is considered private and subject to abrupt breaking changes or + removal without prior announcement. Please do not use it directly. + """ + + def __init__(self, endpoint_bridge, client, cache=None): + self._cache = cache or {} + self._client = weakref.proxy(client) + + def register(self, event_emitter=None): + logger.debug('Registering S3 region redirector handler') + emitter = event_emitter or self._client.meta.events + emitter.register('needs-retry.s3', self.redirect_from_error) + emitter.register( + 'before-parameter-build.s3', self.annotate_request_context + ) + emitter.register( + 'before-endpoint-resolution.s3', self.redirect_from_cache + ) + + def redirect_from_error(self, request_dict, response, operation, **kwargs): + """ + An S3 request sent to the wrong region will return an error that + contains the endpoint the request should be sent to. This handler + will add the redirect information to the signing context and then + redirect the request. + """ + if response is None: + # This could be none if there was a ConnectionError or other + # transport error. + return + + redirect_ctx = request_dict.get('context', {}).get('s3_redirect', {}) + if ArnParser.is_arn(redirect_ctx.get('bucket')): + logger.debug( + 'S3 request was previously for an Accesspoint ARN, not ' + 'redirecting.' + ) + return + + if redirect_ctx.get('redirected'): + logger.debug( + 'S3 request was previously redirected, not redirecting.' + ) + return + + error = response[1].get('Error', {}) + error_code = error.get('Code') + response_metadata = response[1].get('ResponseMetadata', {}) + + # We have to account for 400 responses because + # if we sign a Head* request with the wrong region, + # we'll get a 400 Bad Request but we won't get a + # body saying it's an "AuthorizationHeaderMalformed". + is_special_head_object = ( + error_code in ('301', '400') and operation.name == 'HeadObject' + ) + is_special_head_bucket = ( + error_code in ('301', '400') + and operation.name == 'HeadBucket' + and 'x-amz-bucket-region' + in response_metadata.get('HTTPHeaders', {}) + ) + is_wrong_signing_region = ( + error_code == 'AuthorizationHeaderMalformed' and 'Region' in error + ) + is_redirect_status = response[0] is not None and response[ + 0 + ].status_code in (301, 302, 307) + is_permanent_redirect = error_code == 'PermanentRedirect' + if not any( + [ + is_special_head_object, + is_wrong_signing_region, + is_permanent_redirect, + is_special_head_bucket, + is_redirect_status, + ] + ): + return + + bucket = request_dict['context']['s3_redirect']['bucket'] + client_region = request_dict['context'].get('client_region') + new_region = self.get_bucket_region(bucket, response) + + if new_region is None: + logger.debug( + "S3 client configured for region %s but the bucket %s is not " + "in that region and the proper region could not be " + "automatically determined." % (client_region, bucket) + ) + return + + logger.debug( + "S3 client configured for region %s but the bucket %s is in region" + " %s; Please configure the proper region to avoid multiple " + "unnecessary redirects and signing attempts." + % (client_region, bucket, new_region) + ) + # Adding the new region to _cache will make construct_endpoint() to + # use the new region as value for the AWS::Region builtin parameter. + self._cache[bucket] = new_region + + # Re-resolve endpoint with new region and modify request_dict with + # the new URL, auth scheme, and signing context. + ep_resolver = self._client._ruleset_resolver + ep_info = ep_resolver.construct_endpoint( + operation_model=operation, + call_args=request_dict['context']['s3_redirect']['params'], + request_context=request_dict['context'], + ) + request_dict['url'] = self.set_request_url( + request_dict['url'], ep_info.url + ) + request_dict['context']['s3_redirect']['redirected'] = True + auth_schemes = ep_info.properties.get('authSchemes') + if auth_schemes is not None: + auth_info = ep_resolver.auth_schemes_to_signing_ctx(auth_schemes) + auth_type, signing_context = auth_info + request_dict['context']['auth_type'] = auth_type + request_dict['context']['signing'] = { + **request_dict['context'].get('signing', {}), + **signing_context, + } + + # Return 0 so it doesn't wait to retry + return 0 + + def get_bucket_region(self, bucket, response): + """ + There are multiple potential sources for the new region to redirect to, + but they aren't all universally available for use. This will try to + find region from response elements, but will fall back to calling + HEAD on the bucket if all else fails. + + :param bucket: The bucket to find the region for. This is necessary if + the region is not available in the error response. + :param response: A response representing a service request that failed + due to incorrect region configuration. + """ + # First try to source the region from the headers. + service_response = response[1] + response_headers = service_response['ResponseMetadata']['HTTPHeaders'] + if 'x-amz-bucket-region' in response_headers: + return response_headers['x-amz-bucket-region'] + + # Next, check the error body + region = service_response.get('Error', {}).get('Region', None) + if region is not None: + return region + + # Finally, HEAD the bucket. No other choice sadly. + try: + response = self._client.head_bucket(Bucket=bucket) + headers = response['ResponseMetadata']['HTTPHeaders'] + except ClientError as e: + headers = e.response['ResponseMetadata']['HTTPHeaders'] + + region = headers.get('x-amz-bucket-region', None) + return region + + def set_request_url(self, old_url, new_endpoint, **kwargs): + """ + Splice a new endpoint into an existing URL. Note that some endpoints + from the the endpoint provider have a path component which will be + discarded by this function. + """ + return _get_new_endpoint(old_url, new_endpoint, False) + + def redirect_from_cache(self, builtins, params, **kwargs): + """ + If a bucket name has been redirected before, it is in the cache. This + handler will update the AWS::Region endpoint resolver builtin param + to use the region from cache instead of the client region to avoid the + redirect. + """ + bucket = params.get('Bucket') + if bucket is not None and bucket in self._cache: + new_region = self._cache.get(bucket) + builtins['AWS::Region'] = new_region + + def annotate_request_context(self, params, context, **kwargs): + """Store the bucket name in context for later use when redirecting. + The bucket name may be an access point ARN or alias. + """ + bucket = params.get('Bucket') + context['s3_redirect'] = { + 'redirected': False, + 'bucket': bucket, + 'params': params, + } + + +class S3RegionRedirector: + """This handler has been replaced by S3RegionRedirectorv2. The original + version remains in place for any third-party libraries that import it. + """ + + def __init__(self, endpoint_bridge, client, cache=None): + self._endpoint_resolver = endpoint_bridge + self._cache = cache + if self._cache is None: + self._cache = {} + + # This needs to be a weak ref in order to prevent memory leaks on + # python 2.6 + self._client = weakref.proxy(client) + + warnings.warn( + 'The S3RegionRedirector class has been deprecated for a new ' + 'internal replacement. A future version of botocore may remove ' + 'this class.', + category=FutureWarning, + ) + + def register(self, event_emitter=None): + emitter = event_emitter or self._client.meta.events + emitter.register('needs-retry.s3', self.redirect_from_error) + emitter.register('before-call.s3', self.set_request_url) + emitter.register('before-parameter-build.s3', self.redirect_from_cache) + + def redirect_from_error(self, request_dict, response, operation, **kwargs): + """ + An S3 request sent to the wrong region will return an error that + contains the endpoint the request should be sent to. This handler + will add the redirect information to the signing context and then + redirect the request. + """ + if response is None: + # This could be none if there was a ConnectionError or other + # transport error. + return + + if self._is_s3_accesspoint(request_dict.get('context', {})): + logger.debug( + 'S3 request was previously to an accesspoint, not redirecting.' + ) + return + + if request_dict.get('context', {}).get('s3_redirected'): + logger.debug( + 'S3 request was previously redirected, not redirecting.' + ) + return + + error = response[1].get('Error', {}) + error_code = error.get('Code') + response_metadata = response[1].get('ResponseMetadata', {}) + + # We have to account for 400 responses because + # if we sign a Head* request with the wrong region, + # we'll get a 400 Bad Request but we won't get a + # body saying it's an "AuthorizationHeaderMalformed". + is_special_head_object = ( + error_code in ('301', '400') and operation.name == 'HeadObject' + ) + is_special_head_bucket = ( + error_code in ('301', '400') + and operation.name == 'HeadBucket' + and 'x-amz-bucket-region' + in response_metadata.get('HTTPHeaders', {}) + ) + is_wrong_signing_region = ( + error_code == 'AuthorizationHeaderMalformed' and 'Region' in error + ) + is_redirect_status = response[0] is not None and response[ + 0 + ].status_code in (301, 302, 307) + is_permanent_redirect = error_code == 'PermanentRedirect' + if not any( + [ + is_special_head_object, + is_wrong_signing_region, + is_permanent_redirect, + is_special_head_bucket, + is_redirect_status, + ] + ): + return + + bucket = request_dict['context']['signing']['bucket'] + client_region = request_dict['context'].get('client_region') + new_region = self.get_bucket_region(bucket, response) + + if new_region is None: + logger.debug( + "S3 client configured for region %s but the bucket %s is not " + "in that region and the proper region could not be " + "automatically determined." % (client_region, bucket) + ) + return + + logger.debug( + "S3 client configured for region %s but the bucket %s is in region" + " %s; Please configure the proper region to avoid multiple " + "unnecessary redirects and signing attempts." + % (client_region, bucket, new_region) + ) + endpoint = self._endpoint_resolver.resolve('s3', new_region) + endpoint = endpoint['endpoint_url'] + + signing_context = { + 'region': new_region, + 'bucket': bucket, + 'endpoint': endpoint, + } + request_dict['context']['signing'] = signing_context + + self._cache[bucket] = signing_context + self.set_request_url(request_dict, request_dict['context']) + + request_dict['context']['s3_redirected'] = True + + # Return 0 so it doesn't wait to retry + return 0 + + def get_bucket_region(self, bucket, response): + """ + There are multiple potential sources for the new region to redirect to, + but they aren't all universally available for use. This will try to + find region from response elements, but will fall back to calling + HEAD on the bucket if all else fails. + + :param bucket: The bucket to find the region for. This is necessary if + the region is not available in the error response. + :param response: A response representing a service request that failed + due to incorrect region configuration. + """ + # First try to source the region from the headers. + service_response = response[1] + response_headers = service_response['ResponseMetadata']['HTTPHeaders'] + if 'x-amz-bucket-region' in response_headers: + return response_headers['x-amz-bucket-region'] + + # Next, check the error body + region = service_response.get('Error', {}).get('Region', None) + if region is not None: + return region + + # Finally, HEAD the bucket. No other choice sadly. + try: + response = self._client.head_bucket(Bucket=bucket) + headers = response['ResponseMetadata']['HTTPHeaders'] + except ClientError as e: + headers = e.response['ResponseMetadata']['HTTPHeaders'] + + region = headers.get('x-amz-bucket-region', None) + return region + + def set_request_url(self, params, context, **kwargs): + endpoint = context.get('signing', {}).get('endpoint', None) + if endpoint is not None: + params['url'] = _get_new_endpoint(params['url'], endpoint, False) + + def redirect_from_cache(self, params, context, **kwargs): + """ + This handler retrieves a given bucket's signing context from the cache + and adds it into the request context. + """ + if self._is_s3_accesspoint(context): + return + bucket = params.get('Bucket') + signing_context = self._cache.get(bucket) + if signing_context is not None: + context['signing'] = signing_context + else: + context['signing'] = {'bucket': bucket} + + def _is_s3_accesspoint(self, context): + return 's3_accesspoint' in context + + +class InvalidArnException(ValueError): + pass + + +class ArnParser: + def parse_arn(self, arn): + arn_parts = arn.split(':', 5) + if len(arn_parts) < 6: + raise InvalidArnException( + 'Provided ARN: %s must be of the format: ' + 'arn:partition:service:region:account:resource' % arn + ) + return { + 'partition': arn_parts[1], + 'service': arn_parts[2], + 'region': arn_parts[3], + 'account': arn_parts[4], + 'resource': arn_parts[5], + } + + @staticmethod + def is_arn(value): + if not isinstance(value, str) or not value.startswith('arn:'): + return False + arn_parser = ArnParser() + try: + arn_parser.parse_arn(value) + return True + except InvalidArnException: + return False + + +class S3ArnParamHandler: + _RESOURCE_REGEX = re.compile( + r'^(?Paccesspoint|outpost)[/:](?P.+)$' + ) + _OUTPOST_RESOURCE_REGEX = re.compile( + r'^(?P[a-zA-Z0-9\-]{1,63})[/:]accesspoint[/:]' + r'(?P[a-zA-Z0-9\-]{1,63}$)' + ) + _BLACKLISTED_OPERATIONS = ['CreateBucket'] + + def __init__(self, arn_parser=None): + self._arn_parser = arn_parser + if arn_parser is None: + self._arn_parser = ArnParser() + + def register(self, event_emitter): + event_emitter.register('before-parameter-build.s3', self.handle_arn) + + def handle_arn(self, params, model, context, **kwargs): + if model.name in self._BLACKLISTED_OPERATIONS: + return + arn_details = self._get_arn_details_from_bucket_param(params) + if arn_details is None: + return + if arn_details['resource_type'] == 'accesspoint': + self._store_accesspoint(params, context, arn_details) + elif arn_details['resource_type'] == 'outpost': + self._store_outpost(params, context, arn_details) + + def _get_arn_details_from_bucket_param(self, params): + if 'Bucket' in params: + try: + arn = params['Bucket'] + arn_details = self._arn_parser.parse_arn(arn) + self._add_resource_type_and_name(arn, arn_details) + return arn_details + except InvalidArnException: + pass + return None + + def _add_resource_type_and_name(self, arn, arn_details): + match = self._RESOURCE_REGEX.match(arn_details['resource']) + if match: + arn_details['resource_type'] = match.group('resource_type') + arn_details['resource_name'] = match.group('resource_name') + else: + raise UnsupportedS3ArnError(arn=arn) + + def _store_accesspoint(self, params, context, arn_details): + # Ideally the access-point would be stored as a parameter in the + # request where the serializer would then know how to serialize it, + # but access-points are not modeled in S3 operations so it would fail + # validation. Instead, we set the access-point to the bucket parameter + # to have some value set when serializing the request and additional + # information on the context from the arn to use in forming the + # access-point endpoint. + params['Bucket'] = arn_details['resource_name'] + context['s3_accesspoint'] = { + 'name': arn_details['resource_name'], + 'account': arn_details['account'], + 'partition': arn_details['partition'], + 'region': arn_details['region'], + 'service': arn_details['service'], + } + + def _store_outpost(self, params, context, arn_details): + resource_name = arn_details['resource_name'] + match = self._OUTPOST_RESOURCE_REGEX.match(resource_name) + if not match: + raise UnsupportedOutpostResourceError(resource_name=resource_name) + # Because we need to set the bucket name to something to pass + # validation we're going to use the access point name to be consistent + # with normal access point arns. + accesspoint_name = match.group('accesspoint_name') + params['Bucket'] = accesspoint_name + context['s3_accesspoint'] = { + 'outpost_name': match.group('outpost_name'), + 'name': accesspoint_name, + 'account': arn_details['account'], + 'partition': arn_details['partition'], + 'region': arn_details['region'], + 'service': arn_details['service'], + } + + +class S3EndpointSetter: + _DEFAULT_PARTITION = 'aws' + _DEFAULT_DNS_SUFFIX = 'amazonaws.com' + + def __init__( + self, + endpoint_resolver, + region=None, + s3_config=None, + endpoint_url=None, + partition=None, + use_fips_endpoint=False, + ): + # This is calling the endpoint_resolver in regions.py + self._endpoint_resolver = endpoint_resolver + self._region = region + self._s3_config = s3_config + self._use_fips_endpoint = use_fips_endpoint + if s3_config is None: + self._s3_config = {} + self._endpoint_url = endpoint_url + self._partition = partition + if partition is None: + self._partition = self._DEFAULT_PARTITION + + def register(self, event_emitter): + event_emitter.register('before-sign.s3', self.set_endpoint) + event_emitter.register('choose-signer.s3', self.set_signer) + event_emitter.register( + 'before-call.s3.WriteGetObjectResponse', + self.update_endpoint_to_s3_object_lambda, + ) + + def update_endpoint_to_s3_object_lambda(self, params, context, **kwargs): + if self._use_accelerate_endpoint: + raise UnsupportedS3ConfigurationError( + msg='S3 client does not support accelerate endpoints for S3 Object Lambda operations', + ) + + self._override_signing_name(context, 's3-object-lambda') + if self._endpoint_url: + # Only update the url if an explicit url was not provided + return + + resolver = self._endpoint_resolver + # Constructing endpoints as s3-object-lambda as region + resolved = resolver.construct_endpoint( + 's3-object-lambda', self._region + ) + + # Ideally we would be able to replace the endpoint before + # serialization but there's no event to do that currently + # host_prefix is all the arn/bucket specs + new_endpoint = 'https://{host_prefix}{hostname}'.format( + host_prefix=params['host_prefix'], + hostname=resolved['hostname'], + ) + + params['url'] = _get_new_endpoint(params['url'], new_endpoint, False) + + def set_endpoint(self, request, **kwargs): + if self._use_accesspoint_endpoint(request): + self._validate_accesspoint_supported(request) + self._validate_fips_supported(request) + self._validate_global_regions(request) + region_name = self._resolve_region_for_accesspoint_endpoint( + request + ) + self._resolve_signing_name_for_accesspoint_endpoint(request) + self._switch_to_accesspoint_endpoint(request, region_name) + return + if self._use_accelerate_endpoint: + if self._use_fips_endpoint: + raise UnsupportedS3ConfigurationError( + msg=( + 'Client is configured to use the FIPS psuedo region ' + 'for "%s", but S3 Accelerate does not have any FIPS ' + 'compatible endpoints.' % (self._region) + ) + ) + switch_host_s3_accelerate(request=request, **kwargs) + if self._s3_addressing_handler: + self._s3_addressing_handler(request=request, **kwargs) + + def _use_accesspoint_endpoint(self, request): + return 's3_accesspoint' in request.context + + def _validate_fips_supported(self, request): + if not self._use_fips_endpoint: + return + if 'fips' in request.context['s3_accesspoint']['region']: + raise UnsupportedS3AccesspointConfigurationError( + msg={'Invalid ARN, FIPS region not allowed in ARN.'} + ) + if 'outpost_name' in request.context['s3_accesspoint']: + raise UnsupportedS3AccesspointConfigurationError( + msg=( + 'Client is configured to use the FIPS psuedo-region "%s", ' + 'but outpost ARNs do not support FIPS endpoints.' + % (self._region) + ) + ) + # Transforming psuedo region to actual region + accesspoint_region = request.context['s3_accesspoint']['region'] + if accesspoint_region != self._region: + if not self._s3_config.get('use_arn_region', True): + # TODO: Update message to reflect use_arn_region + # is not set + raise UnsupportedS3AccesspointConfigurationError( + msg=( + 'Client is configured to use the FIPS psuedo-region ' + 'for "%s", but the access-point ARN provided is for ' + 'the "%s" region. For clients using a FIPS ' + 'psuedo-region calls to access-point ARNs in another ' + 'region are not allowed.' + % (self._region, accesspoint_region) + ) + ) + + def _validate_global_regions(self, request): + if self._s3_config.get('use_arn_region', True): + return + if self._region in ['aws-global', 's3-external-1']: + raise UnsupportedS3AccesspointConfigurationError( + msg=( + 'Client is configured to use the global psuedo-region ' + '"%s". When providing access-point ARNs a regional ' + 'endpoint must be specified.' % self._region + ) + ) + + def _validate_accesspoint_supported(self, request): + if self._use_accelerate_endpoint: + raise UnsupportedS3AccesspointConfigurationError( + msg=( + 'Client does not support s3 accelerate configuration ' + 'when an access-point ARN is specified.' + ) + ) + request_partition = request.context['s3_accesspoint']['partition'] + if request_partition != self._partition: + raise UnsupportedS3AccesspointConfigurationError( + msg=( + 'Client is configured for "%s" partition, but access-point' + ' ARN provided is for "%s" partition. The client and ' + ' access-point partition must be the same.' + % (self._partition, request_partition) + ) + ) + s3_service = request.context['s3_accesspoint'].get('service') + if s3_service == 's3-object-lambda' and self._s3_config.get( + 'use_dualstack_endpoint' + ): + raise UnsupportedS3AccesspointConfigurationError( + msg=( + 'Client does not support s3 dualstack configuration ' + 'when an S3 Object Lambda access point ARN is specified.' + ) + ) + outpost_name = request.context['s3_accesspoint'].get('outpost_name') + if outpost_name and self._s3_config.get('use_dualstack_endpoint'): + raise UnsupportedS3AccesspointConfigurationError( + msg=( + 'Client does not support s3 dualstack configuration ' + 'when an outpost ARN is specified.' + ) + ) + self._validate_mrap_s3_config(request) + + def _validate_mrap_s3_config(self, request): + if not is_global_accesspoint(request.context): + return + if self._s3_config.get('s3_disable_multiregion_access_points'): + raise UnsupportedS3AccesspointConfigurationError( + msg=( + 'Invalid configuration, Multi-Region Access Point ' + 'ARNs are disabled.' + ) + ) + elif self._s3_config.get('use_dualstack_endpoint'): + raise UnsupportedS3AccesspointConfigurationError( + msg=( + 'Client does not support s3 dualstack configuration ' + 'when a Multi-Region Access Point ARN is specified.' + ) + ) + + def _resolve_region_for_accesspoint_endpoint(self, request): + if is_global_accesspoint(request.context): + # Requests going to MRAP endpoints MUST be set to any (*) region. + self._override_signing_region(request, '*') + elif self._s3_config.get('use_arn_region', True): + accesspoint_region = request.context['s3_accesspoint']['region'] + # If we are using the region from the access point, + # we will also want to make sure that we set it as the + # signing region as well + self._override_signing_region(request, accesspoint_region) + return accesspoint_region + return self._region + + def set_signer(self, context, **kwargs): + if is_global_accesspoint(context): + if HAS_CRT: + return 's3v4a' + else: + raise MissingDependencyException( + msg="Using S3 with an MRAP arn requires an additional " + "dependency. You will need to pip install " + "botocore[crt] before proceeding." + ) + + def _resolve_signing_name_for_accesspoint_endpoint(self, request): + accesspoint_service = request.context['s3_accesspoint']['service'] + self._override_signing_name(request.context, accesspoint_service) + + def _switch_to_accesspoint_endpoint(self, request, region_name): + original_components = urlsplit(request.url) + accesspoint_endpoint = urlunsplit( + ( + original_components.scheme, + self._get_netloc(request.context, region_name), + self._get_accesspoint_path( + original_components.path, request.context + ), + original_components.query, + '', + ) + ) + logger.debug( + f'Updating URI from {request.url} to {accesspoint_endpoint}' + ) + request.url = accesspoint_endpoint + + def _get_netloc(self, request_context, region_name): + if is_global_accesspoint(request_context): + return self._get_mrap_netloc(request_context) + else: + return self._get_accesspoint_netloc(request_context, region_name) + + def _get_mrap_netloc(self, request_context): + s3_accesspoint = request_context['s3_accesspoint'] + region_name = 's3-global' + mrap_netloc_components = [s3_accesspoint['name']] + if self._endpoint_url: + endpoint_url_netloc = urlsplit(self._endpoint_url).netloc + mrap_netloc_components.append(endpoint_url_netloc) + else: + partition = s3_accesspoint['partition'] + mrap_netloc_components.extend( + [ + 'accesspoint', + region_name, + self._get_partition_dns_suffix(partition), + ] + ) + return '.'.join(mrap_netloc_components) + + def _get_accesspoint_netloc(self, request_context, region_name): + s3_accesspoint = request_context['s3_accesspoint'] + accesspoint_netloc_components = [ + '{}-{}'.format(s3_accesspoint['name'], s3_accesspoint['account']), + ] + outpost_name = s3_accesspoint.get('outpost_name') + if self._endpoint_url: + if outpost_name: + accesspoint_netloc_components.append(outpost_name) + endpoint_url_netloc = urlsplit(self._endpoint_url).netloc + accesspoint_netloc_components.append(endpoint_url_netloc) + else: + if outpost_name: + outpost_host = [outpost_name, 's3-outposts'] + accesspoint_netloc_components.extend(outpost_host) + elif s3_accesspoint['service'] == 's3-object-lambda': + component = self._inject_fips_if_needed( + 's3-object-lambda', request_context + ) + accesspoint_netloc_components.append(component) + else: + component = self._inject_fips_if_needed( + 's3-accesspoint', request_context + ) + accesspoint_netloc_components.append(component) + if self._s3_config.get('use_dualstack_endpoint'): + accesspoint_netloc_components.append('dualstack') + accesspoint_netloc_components.extend( + [region_name, self._get_dns_suffix(region_name)] + ) + return '.'.join(accesspoint_netloc_components) + + def _inject_fips_if_needed(self, component, request_context): + if self._use_fips_endpoint: + return '%s-fips' % component + return component + + def _get_accesspoint_path(self, original_path, request_context): + # The Bucket parameter was substituted with the access-point name as + # some value was required in serializing the bucket name. Now that + # we are making the request directly to the access point, we will + # want to remove that access-point name from the path. + name = request_context['s3_accesspoint']['name'] + # All S3 operations require at least a / in their path. + return original_path.replace('/' + name, '', 1) or '/' + + def _get_partition_dns_suffix(self, partition_name): + dns_suffix = self._endpoint_resolver.get_partition_dns_suffix( + partition_name + ) + if dns_suffix is None: + dns_suffix = self._DEFAULT_DNS_SUFFIX + return dns_suffix + + def _get_dns_suffix(self, region_name): + resolved = self._endpoint_resolver.construct_endpoint( + 's3', region_name + ) + dns_suffix = self._DEFAULT_DNS_SUFFIX + if resolved and 'dnsSuffix' in resolved: + dns_suffix = resolved['dnsSuffix'] + return dns_suffix + + def _override_signing_region(self, request, region_name): + signing_context = request.context.get('signing', {}) + # S3SigV4Auth will use the context['signing']['region'] value to + # sign with if present. This is used by the Bucket redirector + # as well but we should be fine because the redirector is never + # used in combination with the accesspoint setting logic. + signing_context['region'] = region_name + request.context['signing'] = signing_context + + def _override_signing_name(self, context, signing_name): + signing_context = context.get('signing', {}) + # S3SigV4Auth will use the context['signing']['signing_name'] value to + # sign with if present. This is used by the Bucket redirector + # as well but we should be fine because the redirector is never + # used in combination with the accesspoint setting logic. + signing_context['signing_name'] = signing_name + context['signing'] = signing_context + + @CachedProperty + def _use_accelerate_endpoint(self): + # Enable accelerate if the configuration is set to to true or the + # endpoint being used matches one of the accelerate endpoints. + + # Accelerate has been explicitly configured. + if self._s3_config.get('use_accelerate_endpoint'): + return True + + # Accelerate mode is turned on automatically if an endpoint url is + # provided that matches the accelerate scheme. + if self._endpoint_url is None: + return False + + # Accelerate is only valid for Amazon endpoints. + netloc = urlsplit(self._endpoint_url).netloc + if not netloc.endswith('amazonaws.com'): + return False + + # The first part of the url should always be s3-accelerate. + parts = netloc.split('.') + if parts[0] != 's3-accelerate': + return False + + # Url parts between 's3-accelerate' and 'amazonaws.com' which + # represent different url features. + feature_parts = parts[1:-2] + + # There should be no duplicate url parts. + if len(feature_parts) != len(set(feature_parts)): + return False + + # Remaining parts must all be in the whitelist. + return all(p in S3_ACCELERATE_WHITELIST for p in feature_parts) + + @CachedProperty + def _addressing_style(self): + # Use virtual host style addressing if accelerate is enabled or if + # the given endpoint url is an accelerate endpoint. + if self._use_accelerate_endpoint: + return 'virtual' + + # If a particular addressing style is configured, use it. + configured_addressing_style = self._s3_config.get('addressing_style') + if configured_addressing_style: + return configured_addressing_style + + @CachedProperty + def _s3_addressing_handler(self): + # If virtual host style was configured, use it regardless of whether + # or not the bucket looks dns compatible. + if self._addressing_style == 'virtual': + logger.debug("Using S3 virtual host style addressing.") + return switch_to_virtual_host_style + + # If path style is configured, no additional steps are needed. If + # endpoint_url was specified, don't default to virtual. We could + # potentially default provided endpoint urls to virtual hosted + # style, but for now it is avoided. + if self._addressing_style == 'path' or self._endpoint_url is not None: + logger.debug("Using S3 path style addressing.") + return None + + logger.debug( + "Defaulting to S3 virtual host style addressing with " + "path style addressing fallback." + ) + + # By default, try to use virtual style with path fallback. + return fix_s3_host + + +class S3ControlEndpointSetter: + _DEFAULT_PARTITION = 'aws' + _DEFAULT_DNS_SUFFIX = 'amazonaws.com' + _HOST_LABEL_REGEX = re.compile(r'^[a-zA-Z0-9\-]{1,63}$') + + def __init__( + self, + endpoint_resolver, + region=None, + s3_config=None, + endpoint_url=None, + partition=None, + use_fips_endpoint=False, + ): + self._endpoint_resolver = endpoint_resolver + self._region = region + self._s3_config = s3_config + self._use_fips_endpoint = use_fips_endpoint + if s3_config is None: + self._s3_config = {} + self._endpoint_url = endpoint_url + self._partition = partition + if partition is None: + self._partition = self._DEFAULT_PARTITION + + def register(self, event_emitter): + event_emitter.register('before-sign.s3-control', self.set_endpoint) + + def set_endpoint(self, request, **kwargs): + if self._use_endpoint_from_arn_details(request): + self._validate_endpoint_from_arn_details_supported(request) + region_name = self._resolve_region_from_arn_details(request) + self._resolve_signing_name_from_arn_details(request) + self._resolve_endpoint_from_arn_details(request, region_name) + self._add_headers_from_arn_details(request) + elif self._use_endpoint_from_outpost_id(request): + self._validate_outpost_redirection_valid(request) + self._override_signing_name(request, 's3-outposts') + new_netloc = self._construct_outpost_endpoint(self._region) + self._update_request_netloc(request, new_netloc) + + def _use_endpoint_from_arn_details(self, request): + return 'arn_details' in request.context + + def _use_endpoint_from_outpost_id(self, request): + return 'outpost_id' in request.context + + def _validate_endpoint_from_arn_details_supported(self, request): + if 'fips' in request.context['arn_details']['region']: + raise UnsupportedS3ControlArnError( + arn=request.context['arn_details']['original'], + msg='Invalid ARN, FIPS region not allowed in ARN.', + ) + if not self._s3_config.get('use_arn_region', False): + arn_region = request.context['arn_details']['region'] + if arn_region != self._region: + error_msg = ( + 'The use_arn_region configuration is disabled but ' + 'received arn for "%s" when the client is configured ' + 'to use "%s"' + ) % (arn_region, self._region) + raise UnsupportedS3ControlConfigurationError(msg=error_msg) + request_partion = request.context['arn_details']['partition'] + if request_partion != self._partition: + raise UnsupportedS3ControlConfigurationError( + msg=( + 'Client is configured for "%s" partition, but arn ' + 'provided is for "%s" partition. The client and ' + 'arn partition must be the same.' + % (self._partition, request_partion) + ) + ) + if self._s3_config.get('use_accelerate_endpoint'): + raise UnsupportedS3ControlConfigurationError( + msg='S3 control client does not support accelerate endpoints', + ) + if 'outpost_name' in request.context['arn_details']: + self._validate_outpost_redirection_valid(request) + + def _validate_outpost_redirection_valid(self, request): + if self._s3_config.get('use_dualstack_endpoint'): + raise UnsupportedS3ControlConfigurationError( + msg=( + 'Client does not support s3 dualstack configuration ' + 'when an outpost is specified.' + ) + ) + + def _resolve_region_from_arn_details(self, request): + if self._s3_config.get('use_arn_region', False): + arn_region = request.context['arn_details']['region'] + # If we are using the region from the expanded arn, we will also + # want to make sure that we set it as the signing region as well + self._override_signing_region(request, arn_region) + return arn_region + return self._region + + def _resolve_signing_name_from_arn_details(self, request): + arn_service = request.context['arn_details']['service'] + self._override_signing_name(request, arn_service) + return arn_service + + def _resolve_endpoint_from_arn_details(self, request, region_name): + new_netloc = self._resolve_netloc_from_arn_details( + request, region_name + ) + self._update_request_netloc(request, new_netloc) + + def _update_request_netloc(self, request, new_netloc): + original_components = urlsplit(request.url) + arn_details_endpoint = urlunsplit( + ( + original_components.scheme, + new_netloc, + original_components.path, + original_components.query, + '', + ) + ) + logger.debug( + f'Updating URI from {request.url} to {arn_details_endpoint}' + ) + request.url = arn_details_endpoint + + def _resolve_netloc_from_arn_details(self, request, region_name): + arn_details = request.context['arn_details'] + if 'outpost_name' in arn_details: + return self._construct_outpost_endpoint(region_name) + account = arn_details['account'] + return self._construct_s3_control_endpoint(region_name, account) + + def _is_valid_host_label(self, label): + return self._HOST_LABEL_REGEX.match(label) + + def _validate_host_labels(self, *labels): + for label in labels: + if not self._is_valid_host_label(label): + raise InvalidHostLabelError(label=label) + + def _construct_s3_control_endpoint(self, region_name, account): + self._validate_host_labels(region_name, account) + if self._endpoint_url: + endpoint_url_netloc = urlsplit(self._endpoint_url).netloc + netloc = [account, endpoint_url_netloc] + else: + netloc = [ + account, + 's3-control', + ] + self._add_dualstack(netloc) + dns_suffix = self._get_dns_suffix(region_name) + netloc.extend([region_name, dns_suffix]) + return self._construct_netloc(netloc) + + def _construct_outpost_endpoint(self, region_name): + self._validate_host_labels(region_name) + if self._endpoint_url: + return urlsplit(self._endpoint_url).netloc + else: + netloc = [ + 's3-outposts', + region_name, + self._get_dns_suffix(region_name), + ] + self._add_fips(netloc) + return self._construct_netloc(netloc) + + def _construct_netloc(self, netloc): + return '.'.join(netloc) + + def _add_fips(self, netloc): + if self._use_fips_endpoint: + netloc[0] = netloc[0] + '-fips' + + def _add_dualstack(self, netloc): + if self._s3_config.get('use_dualstack_endpoint'): + netloc.append('dualstack') + + def _get_dns_suffix(self, region_name): + resolved = self._endpoint_resolver.construct_endpoint( + 's3', region_name + ) + dns_suffix = self._DEFAULT_DNS_SUFFIX + if resolved and 'dnsSuffix' in resolved: + dns_suffix = resolved['dnsSuffix'] + return dns_suffix + + def _override_signing_region(self, request, region_name): + signing_context = request.context.get('signing', {}) + # S3SigV4Auth will use the context['signing']['region'] value to + # sign with if present. This is used by the Bucket redirector + # as well but we should be fine because the redirector is never + # used in combination with the accesspoint setting logic. + signing_context['region'] = region_name + request.context['signing'] = signing_context + + def _override_signing_name(self, request, signing_name): + signing_context = request.context.get('signing', {}) + # S3SigV4Auth will use the context['signing']['signing_name'] value to + # sign with if present. This is used by the Bucket redirector + # as well but we should be fine because the redirector is never + # used in combination with the accesspoint setting logic. + signing_context['signing_name'] = signing_name + request.context['signing'] = signing_context + + def _add_headers_from_arn_details(self, request): + arn_details = request.context['arn_details'] + outpost_name = arn_details.get('outpost_name') + if outpost_name: + self._add_outpost_id_header(request, outpost_name) + + def _add_outpost_id_header(self, request, outpost_name): + request.headers['x-amz-outpost-id'] = outpost_name + + +class S3ControlArnParamHandler: + """This handler has been replaced by S3ControlArnParamHandlerv2. The + original version remains in place for any third-party importers. + """ + + _RESOURCE_SPLIT_REGEX = re.compile(r'[/:]') + + def __init__(self, arn_parser=None): + self._arn_parser = arn_parser + if arn_parser is None: + self._arn_parser = ArnParser() + warnings.warn( + 'The S3ControlArnParamHandler class has been deprecated for a new ' + 'internal replacement. A future version of botocore may remove ' + 'this class.', + category=FutureWarning, + ) + + def register(self, event_emitter): + event_emitter.register( + 'before-parameter-build.s3-control', + self.handle_arn, + ) + + def handle_arn(self, params, model, context, **kwargs): + if model.name in ('CreateBucket', 'ListRegionalBuckets'): + # CreateBucket and ListRegionalBuckets are special cases that do + # not obey ARN based redirection but will redirect based off of the + # presence of the OutpostId parameter + self._handle_outpost_id_param(params, model, context) + else: + self._handle_name_param(params, model, context) + self._handle_bucket_param(params, model, context) + + def _get_arn_details_from_param(self, params, param_name): + if param_name not in params: + return None + try: + arn = params[param_name] + arn_details = self._arn_parser.parse_arn(arn) + arn_details['original'] = arn + arn_details['resources'] = self._split_resource(arn_details) + return arn_details + except InvalidArnException: + return None + + def _split_resource(self, arn_details): + return self._RESOURCE_SPLIT_REGEX.split(arn_details['resource']) + + def _override_account_id_param(self, params, arn_details): + account_id = arn_details['account'] + if 'AccountId' in params and params['AccountId'] != account_id: + error_msg = ( + 'Account ID in arn does not match the AccountId parameter ' + 'provided: "%s"' + ) % params['AccountId'] + raise UnsupportedS3ControlArnError( + arn=arn_details['original'], + msg=error_msg, + ) + params['AccountId'] = account_id + + def _handle_outpost_id_param(self, params, model, context): + if 'OutpostId' not in params: + return + context['outpost_id'] = params['OutpostId'] + + def _handle_name_param(self, params, model, context): + # CreateAccessPoint is a special case that does not expand Name + if model.name == 'CreateAccessPoint': + return + arn_details = self._get_arn_details_from_param(params, 'Name') + if arn_details is None: + return + if self._is_outpost_accesspoint(arn_details): + self._store_outpost_accesspoint(params, context, arn_details) + else: + error_msg = 'The Name parameter does not support the provided ARN' + raise UnsupportedS3ControlArnError( + arn=arn_details['original'], + msg=error_msg, + ) + + def _is_outpost_accesspoint(self, arn_details): + if arn_details['service'] != 's3-outposts': + return False + resources = arn_details['resources'] + if len(resources) != 4: + return False + # Resource must be of the form outpost/op-123/accesspoint/name + return resources[0] == 'outpost' and resources[2] == 'accesspoint' + + def _store_outpost_accesspoint(self, params, context, arn_details): + self._override_account_id_param(params, arn_details) + accesspoint_name = arn_details['resources'][3] + params['Name'] = accesspoint_name + arn_details['accesspoint_name'] = accesspoint_name + arn_details['outpost_name'] = arn_details['resources'][1] + context['arn_details'] = arn_details + + def _handle_bucket_param(self, params, model, context): + arn_details = self._get_arn_details_from_param(params, 'Bucket') + if arn_details is None: + return + if self._is_outpost_bucket(arn_details): + self._store_outpost_bucket(params, context, arn_details) + else: + error_msg = ( + 'The Bucket parameter does not support the provided ARN' + ) + raise UnsupportedS3ControlArnError( + arn=arn_details['original'], + msg=error_msg, + ) + + def _is_outpost_bucket(self, arn_details): + if arn_details['service'] != 's3-outposts': + return False + resources = arn_details['resources'] + if len(resources) != 4: + return False + # Resource must be of the form outpost/op-123/bucket/name + return resources[0] == 'outpost' and resources[2] == 'bucket' + + def _store_outpost_bucket(self, params, context, arn_details): + self._override_account_id_param(params, arn_details) + bucket_name = arn_details['resources'][3] + params['Bucket'] = bucket_name + arn_details['bucket_name'] = bucket_name + arn_details['outpost_name'] = arn_details['resources'][1] + context['arn_details'] = arn_details + + +class S3ControlArnParamHandlerv2(S3ControlArnParamHandler): + """Updated version of S3ControlArnParamHandler for use when + EndpointRulesetResolver is in use for endpoint resolution. + + This class is considered private and subject to abrupt breaking changes or + removal without prior announcement. Please do not use it directly. + """ + + def __init__(self, arn_parser=None): + self._arn_parser = arn_parser + if arn_parser is None: + self._arn_parser = ArnParser() + + def register(self, event_emitter): + event_emitter.register( + 'before-endpoint-resolution.s3-control', + self.handle_arn, + ) + + def _handle_name_param(self, params, model, context): + # CreateAccessPoint is a special case that does not expand Name + if model.name == 'CreateAccessPoint': + return + arn_details = self._get_arn_details_from_param(params, 'Name') + if arn_details is None: + return + self._raise_for_fips_pseudo_region(arn_details) + self._raise_for_accelerate_endpoint(context) + if self._is_outpost_accesspoint(arn_details): + self._store_outpost_accesspoint(params, context, arn_details) + else: + error_msg = 'The Name parameter does not support the provided ARN' + raise UnsupportedS3ControlArnError( + arn=arn_details['original'], + msg=error_msg, + ) + + def _store_outpost_accesspoint(self, params, context, arn_details): + self._override_account_id_param(params, arn_details) + + def _handle_bucket_param(self, params, model, context): + arn_details = self._get_arn_details_from_param(params, 'Bucket') + if arn_details is None: + return + self._raise_for_fips_pseudo_region(arn_details) + self._raise_for_accelerate_endpoint(context) + if self._is_outpost_bucket(arn_details): + self._store_outpost_bucket(params, context, arn_details) + else: + error_msg = ( + 'The Bucket parameter does not support the provided ARN' + ) + raise UnsupportedS3ControlArnError( + arn=arn_details['original'], + msg=error_msg, + ) + + def _store_outpost_bucket(self, params, context, arn_details): + self._override_account_id_param(params, arn_details) + + def _raise_for_fips_pseudo_region(self, arn_details): + # FIPS pseudo region names cannot be used in ARNs + arn_region = arn_details['region'] + if arn_region.startswith('fips-') or arn_region.endswith('fips-'): + raise UnsupportedS3ControlArnError( + arn=arn_details['original'], + msg='Invalid ARN, FIPS region not allowed in ARN.', + ) + + def _raise_for_accelerate_endpoint(self, context): + s3_config = context['client_config'].s3 or {} + if s3_config.get('use_accelerate_endpoint'): + raise UnsupportedS3ControlConfigurationError( + msg='S3 control client does not support accelerate endpoints', + ) + + +class ContainerMetadataFetcher: + TIMEOUT_SECONDS = 2 + RETRY_ATTEMPTS = 3 + SLEEP_TIME = 1 + IP_ADDRESS = '169.254.170.2' + _ALLOWED_HOSTS = [ + IP_ADDRESS, + '169.254.170.23', + 'fd00:ec2::23', + 'localhost', + ] + + def __init__(self, session=None, sleep=time.sleep): + if session is None: + session = botocore.httpsession.URLLib3Session( + timeout=self.TIMEOUT_SECONDS + ) + self._session = session + self._sleep = sleep + + def retrieve_full_uri(self, full_url, headers=None): + """Retrieve JSON metadata from container metadata. + + :type full_url: str + :param full_url: The full URL of the metadata service. + This should include the scheme as well, e.g + "http://localhost:123/foo" + + """ + self._validate_allowed_url(full_url) + return self._retrieve_credentials(full_url, headers) + + def _validate_allowed_url(self, full_url): + parsed = botocore.compat.urlparse(full_url) + if self._is_loopback_address(parsed.hostname): + return + is_whitelisted_host = self._check_if_whitelisted_host(parsed.hostname) + if not is_whitelisted_host: + raise ValueError( + f"Unsupported host '{parsed.hostname}'. Can only retrieve metadata " + f"from a loopback address or one of these hosts: {', '.join(self._ALLOWED_HOSTS)}" + ) + + def _is_loopback_address(self, hostname): + try: + ip = ip_address(hostname) + return ip.is_loopback + except ValueError: + return False + + def _check_if_whitelisted_host(self, host): + if host in self._ALLOWED_HOSTS: + return True + return False + + def retrieve_uri(self, relative_uri): + """Retrieve JSON metadata from container metadata. + + :type relative_uri: str + :param relative_uri: A relative URI, e.g "/foo/bar?id=123" + + :return: The parsed JSON response. + + """ + full_url = self.full_url(relative_uri) + return self._retrieve_credentials(full_url) + + def _retrieve_credentials(self, full_url, extra_headers=None): + headers = {'Accept': 'application/json'} + if extra_headers is not None: + headers.update(extra_headers) + attempts = 0 + while True: + try: + return self._get_response( + full_url, headers, self.TIMEOUT_SECONDS + ) + except MetadataRetrievalError as e: + logger.debug( + "Received error when attempting to retrieve " + "container metadata: %s", + e, + exc_info=True, + ) + self._sleep(self.SLEEP_TIME) + attempts += 1 + if attempts >= self.RETRY_ATTEMPTS: + raise + + def _get_response(self, full_url, headers, timeout): + try: + AWSRequest = botocore.awsrequest.AWSRequest + request = AWSRequest(method='GET', url=full_url, headers=headers) + response = self._session.send(request.prepare()) + response_text = response.content.decode('utf-8') + if response.status_code != 200: + raise MetadataRetrievalError( + error_msg=( + f"Received non 200 response {response.status_code} " + f"from container metadata: {response_text}" + ) + ) + try: + return json.loads(response_text) + except ValueError: + error_msg = "Unable to parse JSON returned from container metadata services" + logger.debug('%s:%s', error_msg, response_text) + raise MetadataRetrievalError(error_msg=error_msg) + except RETRYABLE_HTTP_ERRORS as e: + error_msg = ( + "Received error when attempting to retrieve " + f"container metadata: {e}" + ) + raise MetadataRetrievalError(error_msg=error_msg) + + def full_url(self, relative_uri): + return f'http://{self.IP_ADDRESS}{relative_uri}' + + +def get_environ_proxies(url): + if should_bypass_proxies(url): + return {} + else: + return getproxies() + + +def should_bypass_proxies(url): + """ + Returns whether we should bypass proxies or not. + """ + # NOTE: requests allowed for ip/cidr entries in no_proxy env that we don't + # support current as urllib only checks DNS suffix + # If the system proxy settings indicate that this URL should be bypassed, + # don't proxy. + # The proxy_bypass function is incredibly buggy on OS X in early versions + # of Python 2.6, so allow this call to fail. Only catch the specific + # exceptions we've seen, though: this call failing in other ways can reveal + # legitimate problems. + try: + if proxy_bypass(urlparse(url).netloc): + return True + except (TypeError, socket.gaierror): + pass + + return False + + +def determine_content_length(body): + # No body, content length of 0 + if not body: + return 0 + + # Try asking the body for it's length + try: + return len(body) + except (AttributeError, TypeError): + pass + + # Try getting the length from a seekable stream + if hasattr(body, 'seek') and hasattr(body, 'tell'): + try: + orig_pos = body.tell() + body.seek(0, 2) + end_file_pos = body.tell() + body.seek(orig_pos) + return end_file_pos - orig_pos + except io.UnsupportedOperation: + # in case when body is, for example, io.BufferedIOBase object + # it has "seek" method which throws "UnsupportedOperation" + # exception in such case we want to fall back to "chunked" + # encoding + pass + # Failed to determine the length + return None + + +def get_encoding_from_headers(headers, default='ISO-8859-1'): + """Returns encodings from given HTTP Header Dict. + + :param headers: dictionary to extract encoding from. + :param default: default encoding if the content-type is text + """ + + content_type = headers.get('content-type') + + if not content_type: + return None + + message = email.message.Message() + message['content-type'] = content_type + charset = message.get_param("charset") + + if charset is not None: + return charset + + if 'text' in content_type: + return default + + +def calculate_md5(body, **kwargs): + if isinstance(body, (bytes, bytearray)): + binary_md5 = _calculate_md5_from_bytes(body) + else: + binary_md5 = _calculate_md5_from_file(body) + return base64.b64encode(binary_md5).decode('ascii') + + +def _calculate_md5_from_bytes(body_bytes): + md5 = get_md5(body_bytes) + return md5.digest() + + +def _calculate_md5_from_file(fileobj): + start_position = fileobj.tell() + md5 = get_md5() + for chunk in iter(lambda: fileobj.read(1024 * 1024), b''): + md5.update(chunk) + fileobj.seek(start_position) + return md5.digest() + + +def _is_s3express_request(params): + endpoint_properties = params.get('context', {}).get( + 'endpoint_properties', {} + ) + return endpoint_properties.get('backend') == 'S3Express' + + +def _has_checksum_header(params): + headers = params['headers'] + # If a user provided Content-MD5 is present, + # don't try to compute a new one. + if 'Content-MD5' in headers: + return True + + # If a header matching the x-amz-checksum-* pattern is present, we + # assume a checksum has already been provided and an md5 is not needed + for header in headers: + if CHECKSUM_HEADER_PATTERN.match(header): + return True + + return False + + +def conditionally_calculate_checksum(params, **kwargs): + if not _has_checksum_header(params): + conditionally_calculate_md5(params, **kwargs) + conditionally_enable_crc32(params, **kwargs) + + +def conditionally_enable_crc32(params, **kwargs): + checksum_context = params.get('context', {}).get('checksum', {}) + checksum_algorithm = checksum_context.get('request_algorithm') + if ( + _is_s3express_request(params) + and params['body'] is not None + and checksum_algorithm in (None, "conditional-md5") + ): + params['context']['checksum'] = { + 'request_algorithm': { + 'algorithm': 'crc32', + 'in': 'header', + 'name': 'x-amz-checksum-crc32', + } + } + + +def conditionally_calculate_md5(params, **kwargs): + """Only add a Content-MD5 if the system supports it.""" + body = params['body'] + checksum_context = params.get('context', {}).get('checksum', {}) + checksum_algorithm = checksum_context.get('request_algorithm') + if checksum_algorithm and checksum_algorithm != 'conditional-md5': + # Skip for requests that will have a flexible checksum applied + return + + if _has_checksum_header(params): + # Don't add a new header if one is already available. + return + + if _is_s3express_request(params): + # S3Express doesn't support MD5 + return + + if MD5_AVAILABLE and body is not None: + md5_digest = calculate_md5(body, **kwargs) + params['headers']['Content-MD5'] = md5_digest + + +class FileWebIdentityTokenLoader: + def __init__(self, web_identity_token_path, _open=open): + self._web_identity_token_path = web_identity_token_path + self._open = _open + + def __call__(self): + with self._open(self._web_identity_token_path) as token_file: + return token_file.read() + + +class SSOTokenLoader: + def __init__(self, cache=None): + if cache is None: + cache = {} + self._cache = cache + + def _generate_cache_key(self, start_url, session_name): + input_str = start_url + if session_name is not None: + input_str = session_name + return hashlib.sha1(input_str.encode('utf-8')).hexdigest() + + def save_token(self, start_url, token, session_name=None): + cache_key = self._generate_cache_key(start_url, session_name) + self._cache[cache_key] = token + + def __call__(self, start_url, session_name=None): + cache_key = self._generate_cache_key(start_url, session_name) + logger.debug(f'Checking for cached token at: {cache_key}') + if cache_key not in self._cache: + name = start_url + if session_name is not None: + name = session_name + error_msg = f'Token for {name} does not exist' + raise SSOTokenLoadError(error_msg=error_msg) + + token = self._cache[cache_key] + if 'accessToken' not in token or 'expiresAt' not in token: + error_msg = f'Token for {start_url} is invalid' + raise SSOTokenLoadError(error_msg=error_msg) + return token + + +class EventbridgeSignerSetter: + _DEFAULT_PARTITION = 'aws' + _DEFAULT_DNS_SUFFIX = 'amazonaws.com' + + def __init__(self, endpoint_resolver, region=None, endpoint_url=None): + self._endpoint_resolver = endpoint_resolver + self._region = region + self._endpoint_url = endpoint_url + + def register(self, event_emitter): + event_emitter.register( + 'before-parameter-build.events.PutEvents', + self.check_for_global_endpoint, + ) + event_emitter.register( + 'before-call.events.PutEvents', self.set_endpoint_url + ) + + def set_endpoint_url(self, params, context, **kwargs): + if 'eventbridge_endpoint' in context: + endpoint = context['eventbridge_endpoint'] + logger.debug(f"Rewriting URL from {params['url']} to {endpoint}") + params['url'] = endpoint + + def check_for_global_endpoint(self, params, context, **kwargs): + endpoint = params.get('EndpointId') + if endpoint is None: + return + + if len(endpoint) == 0: + raise InvalidEndpointConfigurationError( + msg='EndpointId must not be a zero length string' + ) + + if not HAS_CRT: + raise MissingDependencyException( + msg="Using EndpointId requires an additional " + "dependency. You will need to pip install " + "botocore[crt] before proceeding." + ) + + config = context.get('client_config') + endpoint_variant_tags = None + if config is not None: + if config.use_fips_endpoint: + raise InvalidEndpointConfigurationError( + msg="FIPS is not supported with EventBridge " + "multi-region endpoints." + ) + if config.use_dualstack_endpoint: + endpoint_variant_tags = ['dualstack'] + + if self._endpoint_url is None: + # Validate endpoint is a valid hostname component + parts = urlparse(f'https://{endpoint}') + if parts.hostname != endpoint: + raise InvalidEndpointConfigurationError( + msg='EndpointId is not a valid hostname component.' + ) + resolved_endpoint = self._get_global_endpoint( + endpoint, endpoint_variant_tags=endpoint_variant_tags + ) + else: + resolved_endpoint = self._endpoint_url + + context['eventbridge_endpoint'] = resolved_endpoint + context['auth_type'] = 'v4a' + + def _get_global_endpoint(self, endpoint, endpoint_variant_tags=None): + resolver = self._endpoint_resolver + + partition = resolver.get_partition_for_region(self._region) + if partition is None: + partition = self._DEFAULT_PARTITION + dns_suffix = resolver.get_partition_dns_suffix( + partition, endpoint_variant_tags=endpoint_variant_tags + ) + if dns_suffix is None: + dns_suffix = self._DEFAULT_DNS_SUFFIX + + return f"https://{endpoint}.endpoint.events.{dns_suffix}/" + + +def is_s3_accelerate_url(url): + """Does the URL match the S3 Accelerate endpoint scheme? + + Virtual host naming style with bucket names in the netloc part of the URL + are not allowed by this function. + """ + if url is None: + return False + + # Accelerate is only valid for Amazon endpoints. + url_parts = urlsplit(url) + if not url_parts.netloc.endswith( + 'amazonaws.com' + ) or url_parts.scheme not in ['https', 'http']: + return False + + # The first part of the URL must be s3-accelerate. + parts = url_parts.netloc.split('.') + if parts[0] != 's3-accelerate': + return False + + # Url parts between 's3-accelerate' and 'amazonaws.com' which + # represent different url features. + feature_parts = parts[1:-2] + + # There should be no duplicate URL parts. + if len(feature_parts) != len(set(feature_parts)): + return False + + # Remaining parts must all be in the whitelist. + return all(p in S3_ACCELERATE_WHITELIST for p in feature_parts) + + +class JSONFileCache: + """JSON file cache. + This provides a dict like interface that stores JSON serializable + objects. + The objects are serialized to JSON and stored in a file. These + values can be retrieved at a later time. + """ + + CACHE_DIR = os.path.expanduser(os.path.join('~', '.aws', 'boto', 'cache')) + + def __init__(self, working_dir=CACHE_DIR, dumps_func=None): + self._working_dir = working_dir + if dumps_func is None: + dumps_func = self._default_dumps + self._dumps = dumps_func + + def _default_dumps(self, obj): + return json.dumps(obj, default=self._serialize_if_needed) + + def __contains__(self, cache_key): + actual_key = self._convert_cache_key(cache_key) + return os.path.isfile(actual_key) + + def __getitem__(self, cache_key): + """Retrieve value from a cache key.""" + actual_key = self._convert_cache_key(cache_key) + try: + with open(actual_key) as f: + return json.load(f) + except (OSError, ValueError): + raise KeyError(cache_key) + + def __delitem__(self, cache_key): + actual_key = self._convert_cache_key(cache_key) + try: + key_path = Path(actual_key) + key_path.unlink() + except FileNotFoundError: + raise KeyError(cache_key) + + def __setitem__(self, cache_key, value): + full_key = self._convert_cache_key(cache_key) + try: + file_content = self._dumps(value) + except (TypeError, ValueError): + raise ValueError( + f"Value cannot be cached, must be " + f"JSON serializable: {value}" + ) + if not os.path.isdir(self._working_dir): + os.makedirs(self._working_dir) + with os.fdopen( + os.open(full_key, os.O_WRONLY | os.O_CREAT, 0o600), 'w' + ) as f: + f.truncate() + f.write(file_content) + + def _convert_cache_key(self, cache_key): + full_path = os.path.join(self._working_dir, cache_key + '.json') + return full_path + + def _serialize_if_needed(self, value, iso=False): + if isinstance(value, _DatetimeClass): + if iso: + return value.isoformat() + return value.strftime('%Y-%m-%dT%H:%M:%S%Z') + return value + + +def is_s3express_bucket(bucket): + if bucket is None: + return False + return bucket.endswith('--x-s3') + + +# This parameter is not part of the public interface and is subject to abrupt +# breaking changes or removal without prior announcement. +# Mapping of services that have been renamed for backwards compatibility reasons. +# Keys are the previous name that should be allowed, values are the documented +# and preferred client name. +SERVICE_NAME_ALIASES = {'runtime.sagemaker': 'sagemaker-runtime'} + + +# This parameter is not part of the public interface and is subject to abrupt +# breaking changes or removal without prior announcement. +# Mapping to determine the service ID for services that do not use it as the +# model data directory name. The keys are the data directory name and the +# values are the transformed service IDs (lower case and hyphenated). +CLIENT_NAME_TO_HYPHENIZED_SERVICE_ID_OVERRIDES = { + # Actual service name we use -> Allowed computed service name. + 'alexaforbusiness': 'alexa-for-business', + 'apigateway': 'api-gateway', + 'application-autoscaling': 'application-auto-scaling', + 'appmesh': 'app-mesh', + 'autoscaling': 'auto-scaling', + 'autoscaling-plans': 'auto-scaling-plans', + 'ce': 'cost-explorer', + 'cloudhsmv2': 'cloudhsm-v2', + 'cloudsearchdomain': 'cloudsearch-domain', + 'cognito-idp': 'cognito-identity-provider', + 'config': 'config-service', + 'cur': 'cost-and-usage-report-service', + 'datapipeline': 'data-pipeline', + 'directconnect': 'direct-connect', + 'devicefarm': 'device-farm', + 'discovery': 'application-discovery-service', + 'dms': 'database-migration-service', + 'ds': 'directory-service', + 'dynamodbstreams': 'dynamodb-streams', + 'elasticbeanstalk': 'elastic-beanstalk', + 'elastictranscoder': 'elastic-transcoder', + 'elb': 'elastic-load-balancing', + 'elbv2': 'elastic-load-balancing-v2', + 'es': 'elasticsearch-service', + 'events': 'eventbridge', + 'globalaccelerator': 'global-accelerator', + 'iot-data': 'iot-data-plane', + 'iot-jobs-data': 'iot-jobs-data-plane', + 'iot1click-devices': 'iot-1click-devices-service', + 'iot1click-projects': 'iot-1click-projects', + 'iotevents-data': 'iot-events-data', + 'iotevents': 'iot-events', + 'iotwireless': 'iot-wireless', + 'kinesisanalytics': 'kinesis-analytics', + 'kinesisanalyticsv2': 'kinesis-analytics-v2', + 'kinesisvideo': 'kinesis-video', + 'lex-models': 'lex-model-building-service', + 'lexv2-models': 'lex-models-v2', + 'lex-runtime': 'lex-runtime-service', + 'lexv2-runtime': 'lex-runtime-v2', + 'logs': 'cloudwatch-logs', + 'machinelearning': 'machine-learning', + 'marketplacecommerceanalytics': 'marketplace-commerce-analytics', + 'marketplace-entitlement': 'marketplace-entitlement-service', + 'meteringmarketplace': 'marketplace-metering', + 'mgh': 'migration-hub', + 'sms-voice': 'pinpoint-sms-voice', + 'resourcegroupstaggingapi': 'resource-groups-tagging-api', + 'route53': 'route-53', + 'route53domains': 'route-53-domains', + 's3control': 's3-control', + 'sdb': 'simpledb', + 'secretsmanager': 'secrets-manager', + 'serverlessrepo': 'serverlessapplicationrepository', + 'servicecatalog': 'service-catalog', + 'servicecatalog-appregistry': 'service-catalog-appregistry', + 'stepfunctions': 'sfn', + 'storagegateway': 'storage-gateway', +} diff --git a/dbtzin/lib/python3.8/site-packages/botocore/validate.py b/dbtzin/lib/python3.8/site-packages/botocore/validate.py new file mode 100644 index 00000000..dfcca3da --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/validate.py @@ -0,0 +1,384 @@ +"""User input parameter validation. + +This module handles user input parameter validation +against a provided input model. + +Note that the objects in this module do *not* mutate any +arguments. No type version happens here. It is up to another +layer to properly convert arguments to any required types. + +Validation Errors +----------------- + + +""" + +import decimal +import json +from datetime import datetime + +from botocore.exceptions import ParamValidationError +from botocore.utils import is_json_value_header, parse_to_aware_datetime + + +def validate_parameters(params, shape): + """Validates input parameters against a schema. + + This is a convenience function that validates parameters against a schema. + You can also instantiate and use the ParamValidator class directly if you + want more control. + + If there are any validation errors then a ParamValidationError + will be raised. If there are no validation errors than no exception + is raised and a value of None is returned. + + :param params: The user provided input parameters. + + :type shape: botocore.model.Shape + :param shape: The schema which the input parameters should + adhere to. + + :raise: ParamValidationError + + """ + validator = ParamValidator() + report = validator.validate(params, shape) + if report.has_errors(): + raise ParamValidationError(report=report.generate_report()) + + +def type_check(valid_types): + def _create_type_check_guard(func): + def _on_passes_type_check(self, param, shape, errors, name): + if _type_check(param, errors, name): + return func(self, param, shape, errors, name) + + def _type_check(param, errors, name): + if not isinstance(param, valid_types): + valid_type_names = [str(t) for t in valid_types] + errors.report( + name, + 'invalid type', + param=param, + valid_types=valid_type_names, + ) + return False + return True + + return _on_passes_type_check + + return _create_type_check_guard + + +def range_check(name, value, shape, error_type, errors): + failed = False + min_allowed = float('-inf') + if 'min' in shape.metadata: + min_allowed = shape.metadata['min'] + if value < min_allowed: + failed = True + elif hasattr(shape, 'serialization'): + # Members that can be bound to the host have an implicit min of 1 + if shape.serialization.get('hostLabel'): + min_allowed = 1 + if value < min_allowed: + failed = True + if failed: + errors.report(name, error_type, param=value, min_allowed=min_allowed) + + +class ValidationErrors: + def __init__(self): + self._errors = [] + + def has_errors(self): + if self._errors: + return True + return False + + def generate_report(self): + error_messages = [] + for error in self._errors: + error_messages.append(self._format_error(error)) + return '\n'.join(error_messages) + + def _format_error(self, error): + error_type, name, additional = error + name = self._get_name(name) + if error_type == 'missing required field': + return ( + f"Missing required parameter in {name}: " + f"\"{additional['required_name']}\"" + ) + elif error_type == 'unknown field': + unknown_param = additional['unknown_param'] + valid_names = ', '.join(additional['valid_names']) + return ( + f'Unknown parameter in {name}: "{unknown_param}", ' + f'must be one of: {valid_names}' + ) + elif error_type == 'invalid type': + param = additional['param'] + param_type = type(param) + valid_types = ', '.join(additional['valid_types']) + return ( + f'Invalid type for parameter {name}, value: {param}, ' + f'type: {param_type}, valid types: {valid_types}' + ) + elif error_type == 'invalid range': + param = additional['param'] + min_allowed = additional['min_allowed'] + return ( + f'Invalid value for parameter {name}, value: {param}, ' + f'valid min value: {min_allowed}' + ) + elif error_type == 'invalid length': + param = additional['param'] + min_allowed = additional['min_allowed'] + return ( + f'Invalid length for parameter {name}, value: {param}, ' + f'valid min length: {min_allowed}' + ) + elif error_type == 'unable to encode to json': + return 'Invalid parameter {} must be json serializable: {}'.format( + name, + additional['type_error'], + ) + elif error_type == 'invalid type for document': + param = additional['param'] + param_type = type(param) + valid_types = ', '.join(additional['valid_types']) + return ( + f'Invalid type for document parameter {name}, value: {param}, ' + f'type: {param_type}, valid types: {valid_types}' + ) + elif error_type == 'more than one input': + members = ', '.join(additional['members']) + return ( + f'Invalid number of parameters set for tagged union structure ' + f'{name}. Can only set one of the following keys: ' + f'{members}.' + ) + elif error_type == 'empty input': + members = ', '.join(additional['members']) + return ( + f'Must set one of the following keys for tagged union' + f'structure {name}: {members}.' + ) + + def _get_name(self, name): + if not name: + return 'input' + elif name.startswith('.'): + return name[1:] + else: + return name + + def report(self, name, reason, **kwargs): + self._errors.append((reason, name, kwargs)) + + +class ParamValidator: + """Validates parameters against a shape model.""" + + def validate(self, params, shape): + """Validate parameters against a shape model. + + This method will validate the parameters against a provided shape model. + All errors will be collected before returning to the caller. This means + that this method will not stop at the first error, it will return all + possible errors. + + :param params: User provided dict of parameters + :param shape: A shape model describing the expected input. + + :return: A list of errors. + + """ + errors = ValidationErrors() + self._validate(params, shape, errors, name='') + return errors + + def _check_special_validation_cases(self, shape): + if is_json_value_header(shape): + return self._validate_jsonvalue_string + if shape.type_name == 'structure' and shape.is_document_type: + return self._validate_document + + def _validate(self, params, shape, errors, name): + special_validator = self._check_special_validation_cases(shape) + if special_validator: + special_validator(params, shape, errors, name) + else: + getattr(self, '_validate_%s' % shape.type_name)( + params, shape, errors, name + ) + + def _validate_jsonvalue_string(self, params, shape, errors, name): + # Check to see if a value marked as a jsonvalue can be dumped to + # a json string. + try: + json.dumps(params) + except (ValueError, TypeError) as e: + errors.report(name, 'unable to encode to json', type_error=e) + + def _validate_document(self, params, shape, errors, name): + if params is None: + return + + if isinstance(params, dict): + for key in params: + self._validate_document(params[key], shape, errors, key) + elif isinstance(params, list): + for index, entity in enumerate(params): + self._validate_document( + entity, shape, errors, '%s[%d]' % (name, index) + ) + elif not isinstance(params, ((str,), int, bool, float)): + valid_types = (str, int, bool, float, list, dict) + valid_type_names = [str(t) for t in valid_types] + errors.report( + name, + 'invalid type for document', + param=params, + param_type=type(params), + valid_types=valid_type_names, + ) + + @type_check(valid_types=(dict,)) + def _validate_structure(self, params, shape, errors, name): + if shape.is_tagged_union: + if len(params) == 0: + errors.report(name, 'empty input', members=shape.members) + elif len(params) > 1: + errors.report( + name, 'more than one input', members=shape.members + ) + + # Validate required fields. + for required_member in shape.metadata.get('required', []): + if required_member not in params: + errors.report( + name, + 'missing required field', + required_name=required_member, + user_params=params, + ) + members = shape.members + known_params = [] + # Validate known params. + for param in params: + if param not in members: + errors.report( + name, + 'unknown field', + unknown_param=param, + valid_names=list(members), + ) + else: + known_params.append(param) + # Validate structure members. + for param in known_params: + self._validate( + params[param], + shape.members[param], + errors, + f'{name}.{param}', + ) + + @type_check(valid_types=(str,)) + def _validate_string(self, param, shape, errors, name): + # Validate range. For a string, the min/max constraints + # are of the string length. + # Looks like: + # "WorkflowId":{ + # "type":"string", + # "min":1, + # "max":256 + # } + range_check(name, len(param), shape, 'invalid length', errors) + + @type_check(valid_types=(list, tuple)) + def _validate_list(self, param, shape, errors, name): + member_shape = shape.member + range_check(name, len(param), shape, 'invalid length', errors) + for i, item in enumerate(param): + self._validate(item, member_shape, errors, f'{name}[{i}]') + + @type_check(valid_types=(dict,)) + def _validate_map(self, param, shape, errors, name): + key_shape = shape.key + value_shape = shape.value + for key, value in param.items(): + self._validate(key, key_shape, errors, f"{name} (key: {key})") + self._validate(value, value_shape, errors, f'{name}.{key}') + + @type_check(valid_types=(int,)) + def _validate_integer(self, param, shape, errors, name): + range_check(name, param, shape, 'invalid range', errors) + + def _validate_blob(self, param, shape, errors, name): + if isinstance(param, (bytes, bytearray, str)): + return + elif hasattr(param, 'read'): + # File like objects are also allowed for blob types. + return + else: + errors.report( + name, + 'invalid type', + param=param, + valid_types=[str(bytes), str(bytearray), 'file-like object'], + ) + + @type_check(valid_types=(bool,)) + def _validate_boolean(self, param, shape, errors, name): + pass + + @type_check(valid_types=(float, decimal.Decimal) + (int,)) + def _validate_double(self, param, shape, errors, name): + range_check(name, param, shape, 'invalid range', errors) + + _validate_float = _validate_double + + @type_check(valid_types=(int,)) + def _validate_long(self, param, shape, errors, name): + range_check(name, param, shape, 'invalid range', errors) + + def _validate_timestamp(self, param, shape, errors, name): + # We don't use @type_check because datetimes are a bit + # more flexible. You can either provide a datetime + # object, or a string that parses to a datetime. + is_valid_type = self._type_check_datetime(param) + if not is_valid_type: + valid_type_names = [str(datetime), 'timestamp-string'] + errors.report( + name, 'invalid type', param=param, valid_types=valid_type_names + ) + + def _type_check_datetime(self, value): + try: + parse_to_aware_datetime(value) + return True + except (TypeError, ValueError, AttributeError): + # Yes, dateutil can sometimes raise an AttributeError + # when parsing timestamps. + return False + + +class ParamValidationDecorator: + def __init__(self, param_validator, serializer): + self._param_validator = param_validator + self._serializer = serializer + + def serialize_to_request(self, parameters, operation_model): + input_shape = operation_model.input_shape + if input_shape is not None: + report = self._param_validator.validate( + parameters, operation_model.input_shape + ) + if report.has_errors(): + raise ParamValidationError(report=report.generate_report()) + return self._serializer.serialize_to_request( + parameters, operation_model + ) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/__init__.py b/dbtzin/lib/python3.8/site-packages/botocore/vendored/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/vendored/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..5acee70e Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/vendored/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/__pycache__/six.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/vendored/__pycache__/six.cpython-38.pyc new file mode 100644 index 00000000..a15e78e1 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/vendored/__pycache__/six.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/__init__.py b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/__init__.py new file mode 100644 index 00000000..0ada6e0f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/__init__.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- + +# __ +# /__) _ _ _ _ _/ _ +# / ( (- (/ (/ (- _) / _) +# / +from .exceptions import ( + RequestException, Timeout, URLRequired, + TooManyRedirects, HTTPError, ConnectionError +) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..422b4243 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/__pycache__/exceptions.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/__pycache__/exceptions.cpython-38.pyc new file mode 100644 index 00000000..1d86f218 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/__pycache__/exceptions.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/exceptions.py b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/exceptions.py new file mode 100644 index 00000000..89135a80 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/exceptions.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- + +""" +requests.exceptions +~~~~~~~~~~~~~~~~~~~ + +This module contains the set of Requests' exceptions. + +""" +from .packages.urllib3.exceptions import HTTPError as BaseHTTPError + + +class RequestException(IOError): + """There was an ambiguous exception that occurred while handling your + request.""" + + def __init__(self, *args, **kwargs): + """ + Initialize RequestException with `request` and `response` objects. + """ + response = kwargs.pop('response', None) + self.response = response + self.request = kwargs.pop('request', None) + if (response is not None and not self.request and + hasattr(response, 'request')): + self.request = self.response.request + super(RequestException, self).__init__(*args, **kwargs) + + +class HTTPError(RequestException): + """An HTTP error occurred.""" + + +class ConnectionError(RequestException): + """A Connection error occurred.""" + + +class ProxyError(ConnectionError): + """A proxy error occurred.""" + + +class SSLError(ConnectionError): + """An SSL error occurred.""" + + +class Timeout(RequestException): + """The request timed out. + + Catching this error will catch both + :exc:`~requests.exceptions.ConnectTimeout` and + :exc:`~requests.exceptions.ReadTimeout` errors. + """ + + +class ConnectTimeout(ConnectionError, Timeout): + """The request timed out while trying to connect to the remote server. + + Requests that produced this error are safe to retry. + """ + + +class ReadTimeout(Timeout): + """The server did not send any data in the allotted amount of time.""" + + +class URLRequired(RequestException): + """A valid URL is required to make a request.""" + + +class TooManyRedirects(RequestException): + """Too many redirects.""" + + +class MissingSchema(RequestException, ValueError): + """The URL schema (e.g. http or https) is missing.""" + + +class InvalidSchema(RequestException, ValueError): + """See defaults.py for valid schemas.""" + + +class InvalidURL(RequestException, ValueError): + """ The URL provided was somehow invalid. """ + + +class ChunkedEncodingError(RequestException): + """The server declared chunked encoding but sent an invalid chunk.""" + + +class ContentDecodingError(RequestException, BaseHTTPError): + """Failed to decode response content""" + + +class StreamConsumedError(RequestException, TypeError): + """The content for this response was already consumed""" + + +class RetryError(RequestException): + """Custom retries logic failed""" diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/__init__.py b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/__init__.py new file mode 100644 index 00000000..d62c4b71 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/__init__.py @@ -0,0 +1,3 @@ +from __future__ import absolute_import + +from . import urllib3 diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..57e28e1b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/__init__.py b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/__init__.py new file mode 100644 index 00000000..88697016 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/__init__.py @@ -0,0 +1,10 @@ +""" +urllib3 - Thread-safe connection pooling and re-using. +""" + +__author__ = 'Andrey Petrov (andrey.petrov@shazow.net)' +__license__ = 'MIT' +__version__ = '' + + +from . import exceptions diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..ede4c86b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-38.pyc new file mode 100644 index 00000000..1824d2d7 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/exceptions.py b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/exceptions.py new file mode 100644 index 00000000..31bda1c0 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/vendored/requests/packages/urllib3/exceptions.py @@ -0,0 +1,169 @@ + +## Base Exceptions + +class HTTPError(Exception): + "Base exception used by this module." + pass + +class HTTPWarning(Warning): + "Base warning used by this module." + pass + + + +class PoolError(HTTPError): + "Base exception for errors caused within a pool." + def __init__(self, pool, message): + self.pool = pool + HTTPError.__init__(self, "%s: %s" % (pool, message)) + + def __reduce__(self): + # For pickling purposes. + return self.__class__, (None, None) + + +class RequestError(PoolError): + "Base exception for PoolErrors that have associated URLs." + def __init__(self, pool, url, message): + self.url = url + PoolError.__init__(self, pool, message) + + def __reduce__(self): + # For pickling purposes. + return self.__class__, (None, self.url, None) + + +class SSLError(HTTPError): + "Raised when SSL certificate fails in an HTTPS connection." + pass + + +class ProxyError(HTTPError): + "Raised when the connection to a proxy fails." + pass + + +class DecodeError(HTTPError): + "Raised when automatic decoding based on Content-Type fails." + pass + + +class ProtocolError(HTTPError): + "Raised when something unexpected happens mid-request/response." + pass + + +#: Renamed to ProtocolError but aliased for backwards compatibility. +ConnectionError = ProtocolError + + +## Leaf Exceptions + +class MaxRetryError(RequestError): + """Raised when the maximum number of retries is exceeded. + + :param pool: The connection pool + :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool` + :param string url: The requested Url + :param exceptions.Exception reason: The underlying error + + """ + + def __init__(self, pool, url, reason=None): + self.reason = reason + + message = "Max retries exceeded with url: %s (Caused by %r)" % ( + url, reason) + + RequestError.__init__(self, pool, url, message) + + +class HostChangedError(RequestError): + "Raised when an existing pool gets a request for a foreign host." + + def __init__(self, pool, url, retries=3): + message = "Tried to open a foreign host with url: %s" % url + RequestError.__init__(self, pool, url, message) + self.retries = retries + + +class TimeoutStateError(HTTPError): + """ Raised when passing an invalid state to a timeout """ + pass + + +class TimeoutError(HTTPError): + """ Raised when a socket timeout error occurs. + + Catching this error will catch both :exc:`ReadTimeoutErrors + ` and :exc:`ConnectTimeoutErrors `. + """ + pass + + +class ReadTimeoutError(TimeoutError, RequestError): + "Raised when a socket timeout occurs while receiving data from a server" + pass + + +# This timeout error does not have a URL attached and needs to inherit from the +# base HTTPError +class ConnectTimeoutError(TimeoutError): + "Raised when a socket timeout occurs while connecting to a server" + pass + + +class EmptyPoolError(PoolError): + "Raised when a pool runs out of connections and no more are allowed." + pass + + +class ClosedPoolError(PoolError): + "Raised when a request enters a pool after the pool has been closed." + pass + + +class LocationValueError(ValueError, HTTPError): + "Raised when there is something wrong with a given URL input." + pass + + +class LocationParseError(LocationValueError): + "Raised when get_host or similar fails to parse the URL input." + + def __init__(self, location): + message = "Failed to parse: %s" % location + HTTPError.__init__(self, message) + + self.location = location + + +class ResponseError(HTTPError): + "Used as a container for an error reason supplied in a MaxRetryError." + GENERIC_ERROR = 'too many error responses' + SPECIFIC_ERROR = 'too many {status_code} error responses' + + +class SecurityWarning(HTTPWarning): + "Warned when perfoming security reducing actions" + pass + + +class InsecureRequestWarning(SecurityWarning): + "Warned when making an unverified HTTPS request." + pass + + +class SystemTimeWarning(SecurityWarning): + "Warned when system time is suspected to be wrong" + pass + + +class InsecurePlatformWarning(SecurityWarning): + "Warned when certain SSL configuration is not available on a platform." + pass + + +class ResponseNotChunked(ProtocolError, ValueError): + "Response needs to be chunked in order to read it as chunks." + pass diff --git a/dbtzin/lib/python3.8/site-packages/botocore/vendored/six.py b/dbtzin/lib/python3.8/site-packages/botocore/vendored/six.py new file mode 100644 index 00000000..4e15675d --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/vendored/six.py @@ -0,0 +1,998 @@ +# Copyright (c) 2010-2020 Benjamin Peterson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +"""Utilities for writing code that runs on Python 2 and 3""" + +from __future__ import absolute_import + +import functools +import itertools +import operator +import sys +import types + +__author__ = "Benjamin Peterson " +__version__ = "1.16.0" + + +# Useful for very coarse version differentiation. +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 +PY34 = sys.version_info[0:2] >= (3, 4) + +if PY3: + string_types = str, + integer_types = int, + class_types = type, + text_type = str + binary_type = bytes + + MAXSIZE = sys.maxsize +else: + string_types = basestring, + integer_types = (int, long) + class_types = (type, types.ClassType) + text_type = unicode + binary_type = str + + if sys.platform.startswith("java"): + # Jython always uses 32 bits. + MAXSIZE = int((1 << 31) - 1) + else: + # It's possible to have sizeof(long) != sizeof(Py_ssize_t). + class X(object): + + def __len__(self): + return 1 << 31 + try: + len(X()) + except OverflowError: + # 32-bit + MAXSIZE = int((1 << 31) - 1) + else: + # 64-bit + MAXSIZE = int((1 << 63) - 1) + del X + +if PY34: + from importlib.util import spec_from_loader +else: + spec_from_loader = None + + +def _add_doc(func, doc): + """Add documentation to a function.""" + func.__doc__ = doc + + +def _import_module(name): + """Import module, returning the module after the last dot.""" + __import__(name) + return sys.modules[name] + + +class _LazyDescr(object): + + def __init__(self, name): + self.name = name + + def __get__(self, obj, tp): + result = self._resolve() + setattr(obj, self.name, result) # Invokes __set__. + try: + # This is a bit ugly, but it avoids running this again by + # removing this descriptor. + delattr(obj.__class__, self.name) + except AttributeError: + pass + return result + + +class MovedModule(_LazyDescr): + + def __init__(self, name, old, new=None): + super(MovedModule, self).__init__(name) + if PY3: + if new is None: + new = name + self.mod = new + else: + self.mod = old + + def _resolve(self): + return _import_module(self.mod) + + def __getattr__(self, attr): + _module = self._resolve() + value = getattr(_module, attr) + setattr(self, attr, value) + return value + + +class _LazyModule(types.ModuleType): + + def __init__(self, name): + super(_LazyModule, self).__init__(name) + self.__doc__ = self.__class__.__doc__ + + def __dir__(self): + attrs = ["__doc__", "__name__"] + attrs += [attr.name for attr in self._moved_attributes] + return attrs + + # Subclasses should override this + _moved_attributes = [] + + +class MovedAttribute(_LazyDescr): + + def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): + super(MovedAttribute, self).__init__(name) + if PY3: + if new_mod is None: + new_mod = name + self.mod = new_mod + if new_attr is None: + if old_attr is None: + new_attr = name + else: + new_attr = old_attr + self.attr = new_attr + else: + self.mod = old_mod + if old_attr is None: + old_attr = name + self.attr = old_attr + + def _resolve(self): + module = _import_module(self.mod) + return getattr(module, self.attr) + + +class _SixMetaPathImporter(object): + + """ + A meta path importer to import six.moves and its submodules. + + This class implements a PEP302 finder and loader. It should be compatible + with Python 2.5 and all existing versions of Python3 + """ + + def __init__(self, six_module_name): + self.name = six_module_name + self.known_modules = {} + + def _add_module(self, mod, *fullnames): + for fullname in fullnames: + self.known_modules[self.name + "." + fullname] = mod + + def _get_module(self, fullname): + return self.known_modules[self.name + "." + fullname] + + def find_module(self, fullname, path=None): + if fullname in self.known_modules: + return self + return None + + def find_spec(self, fullname, path, target=None): + if fullname in self.known_modules: + return spec_from_loader(fullname, self) + return None + + def __get_module(self, fullname): + try: + return self.known_modules[fullname] + except KeyError: + raise ImportError("This loader does not know module " + fullname) + + def load_module(self, fullname): + try: + # in case of a reload + return sys.modules[fullname] + except KeyError: + pass + mod = self.__get_module(fullname) + if isinstance(mod, MovedModule): + mod = mod._resolve() + else: + mod.__loader__ = self + sys.modules[fullname] = mod + return mod + + def is_package(self, fullname): + """ + Return true, if the named module is a package. + + We need this method to get correct spec objects with + Python 3.4 (see PEP451) + """ + return hasattr(self.__get_module(fullname), "__path__") + + def get_code(self, fullname): + """Return None + + Required, if is_package is implemented""" + self.__get_module(fullname) # eventually raises ImportError + return None + get_source = get_code # same as get_code + + def create_module(self, spec): + return self.load_module(spec.name) + + def exec_module(self, module): + pass + +_importer = _SixMetaPathImporter(__name__) + + +class _MovedItems(_LazyModule): + + """Lazy loading of moved objects""" + __path__ = [] # mark as package + + +_moved_attributes = [ + MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), + MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), + MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), + MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), + MovedAttribute("intern", "__builtin__", "sys"), + MovedAttribute("map", "itertools", "builtins", "imap", "map"), + MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), + MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), + MovedAttribute("getoutput", "commands", "subprocess"), + MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), + MovedAttribute("reduce", "__builtin__", "functools"), + MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), + MovedAttribute("StringIO", "StringIO", "io"), + MovedAttribute("UserDict", "UserDict", "collections"), + MovedAttribute("UserList", "UserList", "collections"), + MovedAttribute("UserString", "UserString", "collections"), + MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), + MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), + MovedModule("builtins", "__builtin__"), + MovedModule("configparser", "ConfigParser"), + MovedModule("collections_abc", "collections", "collections.abc" if sys.version_info >= (3, 3) else "collections"), + MovedModule("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread" if sys.version_info < (3, 9) else "_thread"), + MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), + MovedModule("http_cookies", "Cookie", "http.cookies"), + MovedModule("html_entities", "htmlentitydefs", "html.entities"), + MovedModule("html_parser", "HTMLParser", "html.parser"), + MovedModule("http_client", "httplib", "http.client"), + MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), + MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), + MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), + MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), + MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), + MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), + MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), + MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), + MovedModule("cPickle", "cPickle", "pickle"), + MovedModule("queue", "Queue"), + MovedModule("reprlib", "repr"), + MovedModule("socketserver", "SocketServer"), + MovedModule("_thread", "thread", "_thread"), + MovedModule("tkinter", "Tkinter"), + MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), + MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), + MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), + MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), + MovedModule("tkinter_tix", "Tix", "tkinter.tix"), + MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), + MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), + MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), + MovedModule("tkinter_colorchooser", "tkColorChooser", + "tkinter.colorchooser"), + MovedModule("tkinter_commondialog", "tkCommonDialog", + "tkinter.commondialog"), + MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), + MovedModule("tkinter_font", "tkFont", "tkinter.font"), + MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), + MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", + "tkinter.simpledialog"), + MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), + MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), + MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), + MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), + MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), + MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), +] +# Add windows specific modules. +if sys.platform == "win32": + _moved_attributes += [ + MovedModule("winreg", "_winreg"), + ] + +for attr in _moved_attributes: + setattr(_MovedItems, attr.name, attr) + if isinstance(attr, MovedModule): + _importer._add_module(attr, "moves." + attr.name) +del attr + +_MovedItems._moved_attributes = _moved_attributes + +moves = _MovedItems(__name__ + ".moves") +_importer._add_module(moves, "moves") + + +class Module_six_moves_urllib_parse(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_parse""" + + +_urllib_parse_moved_attributes = [ + MovedAttribute("ParseResult", "urlparse", "urllib.parse"), + MovedAttribute("SplitResult", "urlparse", "urllib.parse"), + MovedAttribute("parse_qs", "urlparse", "urllib.parse"), + MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), + MovedAttribute("urldefrag", "urlparse", "urllib.parse"), + MovedAttribute("urljoin", "urlparse", "urllib.parse"), + MovedAttribute("urlparse", "urlparse", "urllib.parse"), + MovedAttribute("urlsplit", "urlparse", "urllib.parse"), + MovedAttribute("urlunparse", "urlparse", "urllib.parse"), + MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), + MovedAttribute("quote", "urllib", "urllib.parse"), + MovedAttribute("quote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote", "urllib", "urllib.parse"), + MovedAttribute("unquote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes"), + MovedAttribute("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "urllib", "urllib.parse"), + MovedAttribute("splitvalue", "urllib", "urllib.parse"), + MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), + MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), + MovedAttribute("uses_params", "urlparse", "urllib.parse"), + MovedAttribute("uses_query", "urlparse", "urllib.parse"), + MovedAttribute("uses_relative", "urlparse", "urllib.parse"), +] +for attr in _urllib_parse_moved_attributes: + setattr(Module_six_moves_urllib_parse, attr.name, attr) +del attr + +Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes + +_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), + "moves.urllib_parse", "moves.urllib.parse") + + +class Module_six_moves_urllib_error(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_error""" + + +_urllib_error_moved_attributes = [ + MovedAttribute("URLError", "urllib2", "urllib.error"), + MovedAttribute("HTTPError", "urllib2", "urllib.error"), + MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), +] +for attr in _urllib_error_moved_attributes: + setattr(Module_six_moves_urllib_error, attr.name, attr) +del attr + +Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes + +_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), + "moves.urllib_error", "moves.urllib.error") + + +class Module_six_moves_urllib_request(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_request""" + + +_urllib_request_moved_attributes = [ + MovedAttribute("urlopen", "urllib2", "urllib.request"), + MovedAttribute("install_opener", "urllib2", "urllib.request"), + MovedAttribute("build_opener", "urllib2", "urllib.request"), + MovedAttribute("pathname2url", "urllib", "urllib.request"), + MovedAttribute("url2pathname", "urllib", "urllib.request"), + MovedAttribute("getproxies", "urllib", "urllib.request"), + MovedAttribute("Request", "urllib2", "urllib.request"), + MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), + MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), + MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), + MovedAttribute("BaseHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), + MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), + MovedAttribute("FileHandler", "urllib2", "urllib.request"), + MovedAttribute("FTPHandler", "urllib2", "urllib.request"), + MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), + MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), + MovedAttribute("urlretrieve", "urllib", "urllib.request"), + MovedAttribute("urlcleanup", "urllib", "urllib.request"), + MovedAttribute("URLopener", "urllib", "urllib.request"), + MovedAttribute("FancyURLopener", "urllib", "urllib.request"), + MovedAttribute("proxy_bypass", "urllib", "urllib.request"), + MovedAttribute("parse_http_list", "urllib2", "urllib.request"), + MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), +] +for attr in _urllib_request_moved_attributes: + setattr(Module_six_moves_urllib_request, attr.name, attr) +del attr + +Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes + +_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), + "moves.urllib_request", "moves.urllib.request") + + +class Module_six_moves_urllib_response(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_response""" + + +_urllib_response_moved_attributes = [ + MovedAttribute("addbase", "urllib", "urllib.response"), + MovedAttribute("addclosehook", "urllib", "urllib.response"), + MovedAttribute("addinfo", "urllib", "urllib.response"), + MovedAttribute("addinfourl", "urllib", "urllib.response"), +] +for attr in _urllib_response_moved_attributes: + setattr(Module_six_moves_urllib_response, attr.name, attr) +del attr + +Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes + +_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), + "moves.urllib_response", "moves.urllib.response") + + +class Module_six_moves_urllib_robotparser(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_robotparser""" + + +_urllib_robotparser_moved_attributes = [ + MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), +] +for attr in _urllib_robotparser_moved_attributes: + setattr(Module_six_moves_urllib_robotparser, attr.name, attr) +del attr + +Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes + +_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), + "moves.urllib_robotparser", "moves.urllib.robotparser") + + +class Module_six_moves_urllib(types.ModuleType): + + """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" + __path__ = [] # mark as package + parse = _importer._get_module("moves.urllib_parse") + error = _importer._get_module("moves.urllib_error") + request = _importer._get_module("moves.urllib_request") + response = _importer._get_module("moves.urllib_response") + robotparser = _importer._get_module("moves.urllib_robotparser") + + def __dir__(self): + return ['parse', 'error', 'request', 'response', 'robotparser'] + +_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), + "moves.urllib") + + +def add_move(move): + """Add an item to six.moves.""" + setattr(_MovedItems, move.name, move) + + +def remove_move(name): + """Remove item from six.moves.""" + try: + delattr(_MovedItems, name) + except AttributeError: + try: + del moves.__dict__[name] + except KeyError: + raise AttributeError("no such move, %r" % (name,)) + + +if PY3: + _meth_func = "__func__" + _meth_self = "__self__" + + _func_closure = "__closure__" + _func_code = "__code__" + _func_defaults = "__defaults__" + _func_globals = "__globals__" +else: + _meth_func = "im_func" + _meth_self = "im_self" + + _func_closure = "func_closure" + _func_code = "func_code" + _func_defaults = "func_defaults" + _func_globals = "func_globals" + + +try: + advance_iterator = next +except NameError: + def advance_iterator(it): + return it.next() +next = advance_iterator + + +try: + callable = callable +except NameError: + def callable(obj): + return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) + + +if PY3: + def get_unbound_function(unbound): + return unbound + + create_bound_method = types.MethodType + + def create_unbound_method(func, cls): + return func + + Iterator = object +else: + def get_unbound_function(unbound): + return unbound.im_func + + def create_bound_method(func, obj): + return types.MethodType(func, obj, obj.__class__) + + def create_unbound_method(func, cls): + return types.MethodType(func, None, cls) + + class Iterator(object): + + def next(self): + return type(self).__next__(self) + + callable = callable +_add_doc(get_unbound_function, + """Get the function out of a possibly unbound function""") + + +get_method_function = operator.attrgetter(_meth_func) +get_method_self = operator.attrgetter(_meth_self) +get_function_closure = operator.attrgetter(_func_closure) +get_function_code = operator.attrgetter(_func_code) +get_function_defaults = operator.attrgetter(_func_defaults) +get_function_globals = operator.attrgetter(_func_globals) + + +if PY3: + def iterkeys(d, **kw): + return iter(d.keys(**kw)) + + def itervalues(d, **kw): + return iter(d.values(**kw)) + + def iteritems(d, **kw): + return iter(d.items(**kw)) + + def iterlists(d, **kw): + return iter(d.lists(**kw)) + + viewkeys = operator.methodcaller("keys") + + viewvalues = operator.methodcaller("values") + + viewitems = operator.methodcaller("items") +else: + def iterkeys(d, **kw): + return d.iterkeys(**kw) + + def itervalues(d, **kw): + return d.itervalues(**kw) + + def iteritems(d, **kw): + return d.iteritems(**kw) + + def iterlists(d, **kw): + return d.iterlists(**kw) + + viewkeys = operator.methodcaller("viewkeys") + + viewvalues = operator.methodcaller("viewvalues") + + viewitems = operator.methodcaller("viewitems") + +_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") +_add_doc(itervalues, "Return an iterator over the values of a dictionary.") +_add_doc(iteritems, + "Return an iterator over the (key, value) pairs of a dictionary.") +_add_doc(iterlists, + "Return an iterator over the (key, [values]) pairs of a dictionary.") + + +if PY3: + def b(s): + return s.encode("latin-1") + + def u(s): + return s + unichr = chr + import struct + int2byte = struct.Struct(">B").pack + del struct + byte2int = operator.itemgetter(0) + indexbytes = operator.getitem + iterbytes = iter + import io + StringIO = io.StringIO + BytesIO = io.BytesIO + del io + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + _assertNotRegex = "assertNotRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" + _assertNotRegex = "assertNotRegex" +else: + def b(s): + return s + # Workaround for standalone backslash + + def u(s): + return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") + unichr = unichr + int2byte = chr + + def byte2int(bs): + return ord(bs[0]) + + def indexbytes(buf, i): + return ord(buf[i]) + iterbytes = functools.partial(itertools.imap, ord) + import StringIO + StringIO = BytesIO = StringIO.StringIO + _assertCountEqual = "assertItemsEqual" + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + _assertNotRegex = "assertNotRegexpMatches" +_add_doc(b, """Byte literal""") +_add_doc(u, """Text literal""") + + +def assertCountEqual(self, *args, **kwargs): + return getattr(self, _assertCountEqual)(*args, **kwargs) + + +def assertRaisesRegex(self, *args, **kwargs): + return getattr(self, _assertRaisesRegex)(*args, **kwargs) + + +def assertRegex(self, *args, **kwargs): + return getattr(self, _assertRegex)(*args, **kwargs) + + +def assertNotRegex(self, *args, **kwargs): + return getattr(self, _assertNotRegex)(*args, **kwargs) + + +if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): + try: + if value is None: + value = tp() + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + finally: + value = None + tb = None + +else: + def exec_(_code_, _globs_=None, _locs_=None): + """Execute code in a namespace.""" + if _globs_ is None: + frame = sys._getframe(1) + _globs_ = frame.f_globals + if _locs_ is None: + _locs_ = frame.f_locals + del frame + elif _locs_ is None: + _locs_ = _globs_ + exec("""exec _code_ in _globs_, _locs_""") + + exec_("""def reraise(tp, value, tb=None): + try: + raise tp, value, tb + finally: + tb = None +""") + + +if sys.version_info[:2] > (3,): + exec_("""def raise_from(value, from_value): + try: + raise value from from_value + finally: + value = None +""") +else: + def raise_from(value, from_value): + raise value + + +print_ = getattr(moves.builtins, "print", None) +if print_ is None: + def print_(*args, **kwargs): + """The new-style print function for Python 2.4 and 2.5.""" + fp = kwargs.pop("file", sys.stdout) + if fp is None: + return + + def write(data): + if not isinstance(data, basestring): + data = str(data) + # If the file has an encoding, encode unicode with it. + if (isinstance(fp, file) and + isinstance(data, unicode) and + fp.encoding is not None): + errors = getattr(fp, "errors", None) + if errors is None: + errors = "strict" + data = data.encode(fp.encoding, errors) + fp.write(data) + want_unicode = False + sep = kwargs.pop("sep", None) + if sep is not None: + if isinstance(sep, unicode): + want_unicode = True + elif not isinstance(sep, str): + raise TypeError("sep must be None or a string") + end = kwargs.pop("end", None) + if end is not None: + if isinstance(end, unicode): + want_unicode = True + elif not isinstance(end, str): + raise TypeError("end must be None or a string") + if kwargs: + raise TypeError("invalid keyword arguments to print()") + if not want_unicode: + for arg in args: + if isinstance(arg, unicode): + want_unicode = True + break + if want_unicode: + newline = unicode("\n") + space = unicode(" ") + else: + newline = "\n" + space = " " + if sep is None: + sep = space + if end is None: + end = newline + for i, arg in enumerate(args): + if i: + write(sep) + write(arg) + write(end) +if sys.version_info[:2] < (3, 3): + _print = print_ + + def print_(*args, **kwargs): + fp = kwargs.get("file", sys.stdout) + flush = kwargs.pop("flush", False) + _print(*args, **kwargs) + if flush and fp is not None: + fp.flush() + +_add_doc(reraise, """Reraise an exception.""") + +if sys.version_info[0:2] < (3, 4): + # This does exactly the same what the :func:`py3:functools.update_wrapper` + # function does on Python versions after 3.2. It sets the ``__wrapped__`` + # attribute on ``wrapper`` object and it doesn't raise an error if any of + # the attributes mentioned in ``assigned`` and ``updated`` are missing on + # ``wrapped`` object. + def _update_wrapper(wrapper, wrapped, + assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + for attr in assigned: + try: + value = getattr(wrapped, attr) + except AttributeError: + continue + else: + setattr(wrapper, attr, value) + for attr in updated: + getattr(wrapper, attr).update(getattr(wrapped, attr, {})) + wrapper.__wrapped__ = wrapped + return wrapper + _update_wrapper.__doc__ = functools.update_wrapper.__doc__ + + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + return functools.partial(_update_wrapper, wrapped=wrapped, + assigned=assigned, updated=updated) + wraps.__doc__ = functools.wraps.__doc__ + +else: + wraps = functools.wraps + + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(type): + + def __new__(cls, name, this_bases, d): + if sys.version_info[:2] >= (3, 7): + # This version introduced PEP 560 that requires a bit + # of extra care (we mimic what is done by __build_class__). + resolved_bases = types.resolve_bases(bases) + if resolved_bases is not bases: + d['__orig_bases__'] = bases + else: + resolved_bases = bases + return meta(name, resolved_bases, d) + + @classmethod + def __prepare__(cls, name, this_bases): + return meta.__prepare__(name, bases) + return type.__new__(metaclass, 'temporary_class', (), {}) + + +def add_metaclass(metaclass): + """Class decorator for creating a class with a metaclass.""" + def wrapper(cls): + orig_vars = cls.__dict__.copy() + slots = orig_vars.get('__slots__') + if slots is not None: + if isinstance(slots, str): + slots = [slots] + for slots_var in slots: + orig_vars.pop(slots_var) + orig_vars.pop('__dict__', None) + orig_vars.pop('__weakref__', None) + if hasattr(cls, '__qualname__'): + orig_vars['__qualname__'] = cls.__qualname__ + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + +def ensure_binary(s, encoding='utf-8', errors='strict'): + """Coerce **s** to six.binary_type. + + For Python 2: + - `unicode` -> encoded to `str` + - `str` -> `str` + + For Python 3: + - `str` -> encoded to `bytes` + - `bytes` -> `bytes` + """ + if isinstance(s, binary_type): + return s + if isinstance(s, text_type): + return s.encode(encoding, errors) + raise TypeError("not expecting type '%s'" % type(s)) + + +def ensure_str(s, encoding='utf-8', errors='strict'): + """Coerce *s* to `str`. + + For Python 2: + - `unicode` -> encoded to `str` + - `str` -> `str` + + For Python 3: + - `str` -> `str` + - `bytes` -> decoded to `str` + """ + # Optimization: Fast return for the common case. + if type(s) is str: + return s + if PY2 and isinstance(s, text_type): + return s.encode(encoding, errors) + elif PY3 and isinstance(s, binary_type): + return s.decode(encoding, errors) + elif not isinstance(s, (text_type, binary_type)): + raise TypeError("not expecting type '%s'" % type(s)) + return s + + +def ensure_text(s, encoding='utf-8', errors='strict'): + """Coerce *s* to six.text_type. + + For Python 2: + - `unicode` -> `unicode` + - `str` -> `unicode` + + For Python 3: + - `str` -> `str` + - `bytes` -> decoded to `str` + """ + if isinstance(s, binary_type): + return s.decode(encoding, errors) + elif isinstance(s, text_type): + return s + else: + raise TypeError("not expecting type '%s'" % type(s)) + + +def python_2_unicode_compatible(klass): + """ + A class decorator that defines __unicode__ and __str__ methods under Python 2. + Under Python 3 it does nothing. + + To support Python 2 and 3 with a single code base, define a __str__ method + returning text and apply this decorator to the class. + """ + if PY2: + if '__str__' not in klass.__dict__: + raise ValueError("@python_2_unicode_compatible cannot be applied " + "to %s because it doesn't define __str__()." % + klass.__name__) + klass.__unicode__ = klass.__str__ + klass.__str__ = lambda self: self.__unicode__().encode('utf-8') + return klass + + +# Complete the moves implementation. +# This code is at the end of this module to speed up module loading. +# Turn this module into a package. +__path__ = [] # required for PEP 302 and PEP 451 +__package__ = __name__ # see PEP 366 @ReservedAssignment +if globals().get("__spec__") is not None: + __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable +# Remove other six meta path importers, since they cause problems. This can +# happen if six is removed from sys.modules and then reloaded. (Setuptools does +# this for some reason.) +if sys.meta_path: + for i, importer in enumerate(sys.meta_path): + # Here's some real nastiness: Another "instance" of the six module might + # be floating around. Therefore, we can't use isinstance() to check for + # the six meta path importer, since the other six instance will have + # inserted an importer with different class. + if (type(importer).__name__ == "_SixMetaPathImporter" and + importer.name == __name__): + del sys.meta_path[i] + break + del i, importer +# Finally, add the importer to the meta path import hook. +sys.meta_path.append(_importer) diff --git a/dbtzin/lib/python3.8/site-packages/botocore/waiter.py b/dbtzin/lib/python3.8/site-packages/botocore/waiter.py new file mode 100644 index 00000000..2362eebe --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/botocore/waiter.py @@ -0,0 +1,393 @@ +# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"). You +# may not use this file except in compliance with the License. A copy of +# the License is located at +# +# http://aws.amazon.com/apache2.0/ +# +# or in the "license" file accompanying this file. This file is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific +# language governing permissions and limitations under the License. +import logging +import time + +import jmespath + +from botocore.docs.docstring import WaiterDocstring +from botocore.utils import get_service_module_name + +from . import xform_name +from .exceptions import ClientError, WaiterConfigError, WaiterError + +logger = logging.getLogger(__name__) + + +def create_waiter_with_client(waiter_name, waiter_model, client): + """ + + :type waiter_name: str + :param waiter_name: The name of the waiter. The name should match + the name (including the casing) of the key name in the waiter + model file (typically this is CamelCasing). + + :type waiter_model: botocore.waiter.WaiterModel + :param waiter_model: The model for the waiter configuration. + + :type client: botocore.client.BaseClient + :param client: The botocore client associated with the service. + + :rtype: botocore.waiter.Waiter + :return: The waiter object. + + """ + single_waiter_config = waiter_model.get_waiter(waiter_name) + operation_name = xform_name(single_waiter_config.operation) + operation_method = NormalizedOperationMethod( + getattr(client, operation_name) + ) + + # Create a new wait method that will serve as a proxy to the underlying + # Waiter.wait method. This is needed to attach a docstring to the + # method. + def wait(self, **kwargs): + Waiter.wait(self, **kwargs) + + wait.__doc__ = WaiterDocstring( + waiter_name=waiter_name, + event_emitter=client.meta.events, + service_model=client.meta.service_model, + service_waiter_model=waiter_model, + include_signature=False, + ) + + # Rename the waiter class based on the type of waiter. + waiter_class_name = str( + '%s.Waiter.%s' + % (get_service_module_name(client.meta.service_model), waiter_name) + ) + + # Create the new waiter class + documented_waiter_cls = type(waiter_class_name, (Waiter,), {'wait': wait}) + + # Return an instance of the new waiter class. + return documented_waiter_cls( + waiter_name, single_waiter_config, operation_method + ) + + +def is_valid_waiter_error(response): + error = response.get('Error') + if isinstance(error, dict) and 'Code' in error: + return True + return False + + +class NormalizedOperationMethod: + def __init__(self, client_method): + self._client_method = client_method + + def __call__(self, **kwargs): + try: + return self._client_method(**kwargs) + except ClientError as e: + return e.response + + +class WaiterModel: + SUPPORTED_VERSION = 2 + + def __init__(self, waiter_config): + """ + + Note that the WaiterModel takes ownership of the waiter_config. + It may or may not mutate the waiter_config. If this is a concern, + it is best to make a copy of the waiter config before passing it to + the WaiterModel. + + :type waiter_config: dict + :param waiter_config: The loaded waiter config + from the *.waiters.json file. This can be + obtained from a botocore Loader object as well. + + """ + self._waiter_config = waiter_config['waiters'] + + # These are part of the public API. Changing these + # will result in having to update the consuming code, + # so don't change unless you really need to. + version = waiter_config.get('version', 'unknown') + self._verify_supported_version(version) + self.version = version + self.waiter_names = list(sorted(waiter_config['waiters'].keys())) + + def _verify_supported_version(self, version): + if version != self.SUPPORTED_VERSION: + raise WaiterConfigError( + error_msg=( + "Unsupported waiter version, supported version " + "must be: %s, but version of waiter config " + "is: %s" % (self.SUPPORTED_VERSION, version) + ) + ) + + def get_waiter(self, waiter_name): + try: + single_waiter_config = self._waiter_config[waiter_name] + except KeyError: + raise ValueError("Waiter does not exist: %s" % waiter_name) + return SingleWaiterConfig(single_waiter_config) + + +class SingleWaiterConfig: + """Represents the waiter configuration for a single waiter. + + A single waiter is considered the configuration for a single + value associated with a named waiter (i.e TableExists). + + """ + + def __init__(self, single_waiter_config): + self._config = single_waiter_config + + # These attributes are part of the public API. + self.description = single_waiter_config.get('description', '') + # Per the spec, these three fields are required. + self.operation = single_waiter_config['operation'] + self.delay = single_waiter_config['delay'] + self.max_attempts = single_waiter_config['maxAttempts'] + + @property + def acceptors(self): + acceptors = [] + for acceptor_config in self._config['acceptors']: + acceptor = AcceptorConfig(acceptor_config) + acceptors.append(acceptor) + return acceptors + + +class AcceptorConfig: + def __init__(self, config): + self.state = config['state'] + self.matcher = config['matcher'] + self.expected = config['expected'] + self.argument = config.get('argument') + self.matcher_func = self._create_matcher_func() + + @property + def explanation(self): + if self.matcher == 'path': + return 'For expression "{}" we matched expected path: "{}"'.format( + self.argument, + self.expected, + ) + elif self.matcher == 'pathAll': + return ( + 'For expression "%s" all members matched excepted path: "%s"' + % (self.argument, self.expected) + ) + elif self.matcher == 'pathAny': + return ( + 'For expression "%s" we matched expected path: "%s" at least once' + % (self.argument, self.expected) + ) + elif self.matcher == 'status': + return 'Matched expected HTTP status code: %s' % self.expected + elif self.matcher == 'error': + return 'Matched expected service error code: %s' % self.expected + else: + return ( + 'No explanation for unknown waiter type: "%s"' % self.matcher + ) + + def _create_matcher_func(self): + # An acceptor function is a callable that takes a single value. The + # parsed AWS response. Note that the parsed error response is also + # provided in the case of errors, so it's entirely possible to + # handle all the available matcher capabilities in the future. + # There's only three supported matchers, so for now, this is all + # contained to a single method. If this grows, we can expand this + # out to separate methods or even objects. + + if self.matcher == 'path': + return self._create_path_matcher() + elif self.matcher == 'pathAll': + return self._create_path_all_matcher() + elif self.matcher == 'pathAny': + return self._create_path_any_matcher() + elif self.matcher == 'status': + return self._create_status_matcher() + elif self.matcher == 'error': + return self._create_error_matcher() + else: + raise WaiterConfigError( + error_msg="Unknown acceptor: %s" % self.matcher + ) + + def _create_path_matcher(self): + expression = jmespath.compile(self.argument) + expected = self.expected + + def acceptor_matches(response): + if is_valid_waiter_error(response): + return + return expression.search(response) == expected + + return acceptor_matches + + def _create_path_all_matcher(self): + expression = jmespath.compile(self.argument) + expected = self.expected + + def acceptor_matches(response): + if is_valid_waiter_error(response): + return + result = expression.search(response) + if not isinstance(result, list) or not result: + # pathAll matcher must result in a list. + # Also we require at least one element in the list, + # that is, an empty list should not result in this + # acceptor match. + return False + for element in result: + if element != expected: + return False + return True + + return acceptor_matches + + def _create_path_any_matcher(self): + expression = jmespath.compile(self.argument) + expected = self.expected + + def acceptor_matches(response): + if is_valid_waiter_error(response): + return + result = expression.search(response) + if not isinstance(result, list) or not result: + # pathAny matcher must result in a list. + # Also we require at least one element in the list, + # that is, an empty list should not result in this + # acceptor match. + return False + for element in result: + if element == expected: + return True + return False + + return acceptor_matches + + def _create_status_matcher(self): + expected = self.expected + + def acceptor_matches(response): + # We don't have any requirements on the expected incoming data + # other than it is a dict, so we don't assume there's + # a ResponseMetadata.HTTPStatusCode. + status_code = response.get('ResponseMetadata', {}).get( + 'HTTPStatusCode' + ) + return status_code == expected + + return acceptor_matches + + def _create_error_matcher(self): + expected = self.expected + + def acceptor_matches(response): + # When the client encounters an error, it will normally raise + # an exception. However, the waiter implementation will catch + # this exception, and instead send us the parsed error + # response. So response is still a dictionary, and in the case + # of an error response will contain the "Error" and + # "ResponseMetadata" key. + return response.get("Error", {}).get("Code", "") == expected + + return acceptor_matches + + +class Waiter: + def __init__(self, name, config, operation_method): + """ + + :type name: string + :param name: The name of the waiter + + :type config: botocore.waiter.SingleWaiterConfig + :param config: The configuration for the waiter. + + :type operation_method: callable + :param operation_method: A callable that accepts **kwargs + and returns a response. For example, this can be + a method from a botocore client. + + """ + self._operation_method = operation_method + # The two attributes are exposed to allow for introspection + # and documentation. + self.name = name + self.config = config + + def wait(self, **kwargs): + acceptors = list(self.config.acceptors) + current_state = 'waiting' + # pop the invocation specific config + config = kwargs.pop('WaiterConfig', {}) + sleep_amount = config.get('Delay', self.config.delay) + max_attempts = config.get('MaxAttempts', self.config.max_attempts) + last_matched_acceptor = None + num_attempts = 0 + + while True: + response = self._operation_method(**kwargs) + num_attempts += 1 + for acceptor in acceptors: + if acceptor.matcher_func(response): + last_matched_acceptor = acceptor + current_state = acceptor.state + break + else: + # If none of the acceptors matched, we should + # transition to the failure state if an error + # response was received. + if is_valid_waiter_error(response): + # Transition to a failure state, which we + # can just handle here by raising an exception. + raise WaiterError( + name=self.name, + reason='An error occurred (%s): %s' + % ( + response['Error'].get('Code', 'Unknown'), + response['Error'].get('Message', 'Unknown'), + ), + last_response=response, + ) + if current_state == 'success': + logger.debug( + "Waiting complete, waiter matched the " "success state." + ) + return + if current_state == 'failure': + reason = 'Waiter encountered a terminal failure state: %s' % ( + acceptor.explanation + ) + raise WaiterError( + name=self.name, + reason=reason, + last_response=response, + ) + if num_attempts >= max_attempts: + if last_matched_acceptor is None: + reason = 'Max attempts exceeded' + else: + reason = ( + 'Max attempts exceeded. Previously accepted state: %s' + % (acceptor.explanation) + ) + raise WaiterError( + name=self.name, + reason=reason, + last_response=response, + ) + time.sleep(sleep_amount) diff --git a/dbtzin/lib/python3.8/site-packages/bs4/__init__.py b/dbtzin/lib/python3.8/site-packages/bs4/__init__.py new file mode 100644 index 00000000..3d2ab09a --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/bs4/__init__.py @@ -0,0 +1,840 @@ +"""Beautiful Soup Elixir and Tonic - "The Screen-Scraper's Friend". + +http://www.crummy.com/software/BeautifulSoup/ + +Beautiful Soup uses a pluggable XML or HTML parser to parse a +(possibly invalid) document into a tree representation. Beautiful Soup +provides methods and Pythonic idioms that make it easy to navigate, +search, and modify the parse tree. + +Beautiful Soup works with Python 3.6 and up. It works better if lxml +and/or html5lib is installed. + +For more than you ever wanted to know about Beautiful Soup, see the +documentation: http://www.crummy.com/software/BeautifulSoup/bs4/doc/ +""" + +__author__ = "Leonard Richardson (leonardr@segfault.org)" +__version__ = "4.12.2" +__copyright__ = "Copyright (c) 2004-2023 Leonard Richardson" +# Use of this source code is governed by the MIT license. +__license__ = "MIT" + +__all__ = ['BeautifulSoup'] + +from collections import Counter +import os +import re +import sys +import traceback +import warnings + +# The very first thing we do is give a useful error if someone is +# running this code under Python 2. +if sys.version_info.major < 3: + raise ImportError('You are trying to use a Python 3-specific version of Beautiful Soup under Python 2. This will not work. The final version of Beautiful Soup to support Python 2 was 4.9.3.') + +from .builder import ( + builder_registry, + ParserRejectedMarkup, + XMLParsedAsHTMLWarning, + HTMLParserTreeBuilder +) +from .dammit import UnicodeDammit +from .element import ( + CData, + Comment, + CSS, + DEFAULT_OUTPUT_ENCODING, + Declaration, + Doctype, + NavigableString, + PageElement, + ProcessingInstruction, + PYTHON_SPECIFIC_ENCODINGS, + ResultSet, + Script, + Stylesheet, + SoupStrainer, + Tag, + TemplateString, + ) + +# Define some custom warnings. +class GuessedAtParserWarning(UserWarning): + """The warning issued when BeautifulSoup has to guess what parser to + use -- probably because no parser was specified in the constructor. + """ + +class MarkupResemblesLocatorWarning(UserWarning): + """The warning issued when BeautifulSoup is given 'markup' that + actually looks like a resource locator -- a URL or a path to a file + on disk. + """ + + +class BeautifulSoup(Tag): + """A data structure representing a parsed HTML or XML document. + + Most of the methods you'll call on a BeautifulSoup object are inherited from + PageElement or Tag. + + Internally, this class defines the basic interface called by the + tree builders when converting an HTML/XML document into a data + structure. The interface abstracts away the differences between + parsers. To write a new tree builder, you'll need to understand + these methods as a whole. + + These methods will be called by the BeautifulSoup constructor: + * reset() + * feed(markup) + + The tree builder may call these methods from its feed() implementation: + * handle_starttag(name, attrs) # See note about return value + * handle_endtag(name) + * handle_data(data) # Appends to the current data node + * endData(containerClass) # Ends the current data node + + No matter how complicated the underlying parser is, you should be + able to build a tree using 'start tag' events, 'end tag' events, + 'data' events, and "done with data" events. + + If you encounter an empty-element tag (aka a self-closing tag, + like HTML's
tag), call handle_starttag and then + handle_endtag. + """ + + # Since BeautifulSoup subclasses Tag, it's possible to treat it as + # a Tag with a .name. This name makes it clear the BeautifulSoup + # object isn't a real markup tag. + ROOT_TAG_NAME = '[document]' + + # If the end-user gives no indication which tree builder they + # want, look for one with these features. + DEFAULT_BUILDER_FEATURES = ['html', 'fast'] + + # A string containing all ASCII whitespace characters, used in + # endData() to detect data chunks that seem 'empty'. + ASCII_SPACES = '\x20\x0a\x09\x0c\x0d' + + NO_PARSER_SPECIFIED_WARNING = "No parser was explicitly specified, so I'm using the best available %(markup_type)s parser for this system (\"%(parser)s\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n\nThe code that caused this warning is on line %(line_number)s of the file %(filename)s. To get rid of this warning, pass the additional argument 'features=\"%(parser)s\"' to the BeautifulSoup constructor.\n" + + def __init__(self, markup="", features=None, builder=None, + parse_only=None, from_encoding=None, exclude_encodings=None, + element_classes=None, **kwargs): + """Constructor. + + :param markup: A string or a file-like object representing + markup to be parsed. + + :param features: Desirable features of the parser to be + used. This may be the name of a specific parser ("lxml", + "lxml-xml", "html.parser", or "html5lib") or it may be the + type of markup to be used ("html", "html5", "xml"). It's + recommended that you name a specific parser, so that + Beautiful Soup gives you the same results across platforms + and virtual environments. + + :param builder: A TreeBuilder subclass to instantiate (or + instance to use) instead of looking one up based on + `features`. You only need to use this if you've implemented a + custom TreeBuilder. + + :param parse_only: A SoupStrainer. Only parts of the document + matching the SoupStrainer will be considered. This is useful + when parsing part of a document that would otherwise be too + large to fit into memory. + + :param from_encoding: A string indicating the encoding of the + document to be parsed. Pass this in if Beautiful Soup is + guessing wrongly about the document's encoding. + + :param exclude_encodings: A list of strings indicating + encodings known to be wrong. Pass this in if you don't know + the document's encoding but you know Beautiful Soup's guess is + wrong. + + :param element_classes: A dictionary mapping BeautifulSoup + classes like Tag and NavigableString, to other classes you'd + like to be instantiated instead as the parse tree is + built. This is useful for subclassing Tag or NavigableString + to modify default behavior. + + :param kwargs: For backwards compatibility purposes, the + constructor accepts certain keyword arguments used in + Beautiful Soup 3. None of these arguments do anything in + Beautiful Soup 4; they will result in a warning and then be + ignored. + + Apart from this, any keyword arguments passed into the + BeautifulSoup constructor are propagated to the TreeBuilder + constructor. This makes it possible to configure a + TreeBuilder by passing in arguments, not just by saying which + one to use. + """ + if 'convertEntities' in kwargs: + del kwargs['convertEntities'] + warnings.warn( + "BS4 does not respect the convertEntities argument to the " + "BeautifulSoup constructor. Entities are always converted " + "to Unicode characters.") + + if 'markupMassage' in kwargs: + del kwargs['markupMassage'] + warnings.warn( + "BS4 does not respect the markupMassage argument to the " + "BeautifulSoup constructor. The tree builder is responsible " + "for any necessary markup massage.") + + if 'smartQuotesTo' in kwargs: + del kwargs['smartQuotesTo'] + warnings.warn( + "BS4 does not respect the smartQuotesTo argument to the " + "BeautifulSoup constructor. Smart quotes are always converted " + "to Unicode characters.") + + if 'selfClosingTags' in kwargs: + del kwargs['selfClosingTags'] + warnings.warn( + "BS4 does not respect the selfClosingTags argument to the " + "BeautifulSoup constructor. The tree builder is responsible " + "for understanding self-closing tags.") + + if 'isHTML' in kwargs: + del kwargs['isHTML'] + warnings.warn( + "BS4 does not respect the isHTML argument to the " + "BeautifulSoup constructor. Suggest you use " + "features='lxml' for HTML and features='lxml-xml' for " + "XML.") + + def deprecated_argument(old_name, new_name): + if old_name in kwargs: + warnings.warn( + 'The "%s" argument to the BeautifulSoup constructor ' + 'has been renamed to "%s."' % (old_name, new_name), + DeprecationWarning, stacklevel=3 + ) + return kwargs.pop(old_name) + return None + + parse_only = parse_only or deprecated_argument( + "parseOnlyThese", "parse_only") + + from_encoding = from_encoding or deprecated_argument( + "fromEncoding", "from_encoding") + + if from_encoding and isinstance(markup, str): + warnings.warn("You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored.") + from_encoding = None + + self.element_classes = element_classes or dict() + + # We need this information to track whether or not the builder + # was specified well enough that we can omit the 'you need to + # specify a parser' warning. + original_builder = builder + original_features = features + + if isinstance(builder, type): + # A builder class was passed in; it needs to be instantiated. + builder_class = builder + builder = None + elif builder is None: + if isinstance(features, str): + features = [features] + if features is None or len(features) == 0: + features = self.DEFAULT_BUILDER_FEATURES + builder_class = builder_registry.lookup(*features) + if builder_class is None: + raise FeatureNotFound( + "Couldn't find a tree builder with the features you " + "requested: %s. Do you need to install a parser library?" + % ",".join(features)) + + # At this point either we have a TreeBuilder instance in + # builder, or we have a builder_class that we can instantiate + # with the remaining **kwargs. + if builder is None: + builder = builder_class(**kwargs) + if not original_builder and not ( + original_features == builder.NAME or + original_features in builder.ALTERNATE_NAMES + ) and markup: + # The user did not tell us which TreeBuilder to use, + # and we had to guess. Issue a warning. + if builder.is_xml: + markup_type = "XML" + else: + markup_type = "HTML" + + # This code adapted from warnings.py so that we get the same line + # of code as our warnings.warn() call gets, even if the answer is wrong + # (as it may be in a multithreading situation). + caller = None + try: + caller = sys._getframe(1) + except ValueError: + pass + if caller: + globals = caller.f_globals + line_number = caller.f_lineno + else: + globals = sys.__dict__ + line_number= 1 + filename = globals.get('__file__') + if filename: + fnl = filename.lower() + if fnl.endswith((".pyc", ".pyo")): + filename = filename[:-1] + if filename: + # If there is no filename at all, the user is most likely in a REPL, + # and the warning is not necessary. + values = dict( + filename=filename, + line_number=line_number, + parser=builder.NAME, + markup_type=markup_type + ) + warnings.warn( + self.NO_PARSER_SPECIFIED_WARNING % values, + GuessedAtParserWarning, stacklevel=2 + ) + else: + if kwargs: + warnings.warn("Keyword arguments to the BeautifulSoup constructor will be ignored. These would normally be passed into the TreeBuilder constructor, but a TreeBuilder instance was passed in as `builder`.") + + self.builder = builder + self.is_xml = builder.is_xml + self.known_xml = self.is_xml + self._namespaces = dict() + self.parse_only = parse_only + + if hasattr(markup, 'read'): # It's a file-type object. + markup = markup.read() + elif len(markup) <= 256 and ( + (isinstance(markup, bytes) and not b'<' in markup) + or (isinstance(markup, str) and not '<' in markup) + ): + # Issue warnings for a couple beginner problems + # involving passing non-markup to Beautiful Soup. + # Beautiful Soup will still parse the input as markup, + # since that is sometimes the intended behavior. + if not self._markup_is_url(markup): + self._markup_resembles_filename(markup) + + rejections = [] + success = False + for (self.markup, self.original_encoding, self.declared_html_encoding, + self.contains_replacement_characters) in ( + self.builder.prepare_markup( + markup, from_encoding, exclude_encodings=exclude_encodings)): + self.reset() + self.builder.initialize_soup(self) + try: + self._feed() + success = True + break + except ParserRejectedMarkup as e: + rejections.append(e) + pass + + if not success: + other_exceptions = [str(e) for e in rejections] + raise ParserRejectedMarkup( + "The markup you provided was rejected by the parser. Trying a different parser or a different encoding may help.\n\nOriginal exception(s) from parser:\n " + "\n ".join(other_exceptions) + ) + + # Clear out the markup and remove the builder's circular + # reference to this object. + self.markup = None + self.builder.soup = None + + def _clone(self): + """Create a new BeautifulSoup object with the same TreeBuilder, + but not associated with any markup. + + This is the first step of the deepcopy process. + """ + clone = type(self)("", None, self.builder) + + # Keep track of the encoding of the original document, + # since we won't be parsing it again. + clone.original_encoding = self.original_encoding + return clone + + def __getstate__(self): + # Frequently a tree builder can't be pickled. + d = dict(self.__dict__) + if 'builder' in d and d['builder'] is not None and not self.builder.picklable: + d['builder'] = type(self.builder) + # Store the contents as a Unicode string. + d['contents'] = [] + d['markup'] = self.decode() + + # If _most_recent_element is present, it's a Tag object left + # over from initial parse. It might not be picklable and we + # don't need it. + if '_most_recent_element' in d: + del d['_most_recent_element'] + return d + + def __setstate__(self, state): + # If necessary, restore the TreeBuilder by looking it up. + self.__dict__ = state + if isinstance(self.builder, type): + self.builder = self.builder() + elif not self.builder: + # We don't know which builder was used to build this + # parse tree, so use a default we know is always available. + self.builder = HTMLParserTreeBuilder() + self.builder.soup = self + self.reset() + self._feed() + return state + + + @classmethod + def _decode_markup(cls, markup): + """Ensure `markup` is bytes so it's safe to send into warnings.warn. + + TODO: warnings.warn had this problem back in 2010 but it might not + anymore. + """ + if isinstance(markup, bytes): + decoded = markup.decode('utf-8', 'replace') + else: + decoded = markup + return decoded + + @classmethod + def _markup_is_url(cls, markup): + """Error-handling method to raise a warning if incoming markup looks + like a URL. + + :param markup: A string. + :return: Whether or not the markup resembles a URL + closely enough to justify a warning. + """ + if isinstance(markup, bytes): + space = b' ' + cant_start_with = (b"http:", b"https:") + elif isinstance(markup, str): + space = ' ' + cant_start_with = ("http:", "https:") + else: + return False + + if any(markup.startswith(prefix) for prefix in cant_start_with): + if not space in markup: + warnings.warn( + 'The input looks more like a URL than markup. You may want to use' + ' an HTTP client like requests to get the document behind' + ' the URL, and feed that document to Beautiful Soup.', + MarkupResemblesLocatorWarning, + stacklevel=3 + ) + return True + return False + + @classmethod + def _markup_resembles_filename(cls, markup): + """Error-handling method to raise a warning if incoming markup + resembles a filename. + + :param markup: A bytestring or string. + :return: Whether or not the markup resembles a filename + closely enough to justify a warning. + """ + path_characters = '/\\' + extensions = ['.html', '.htm', '.xml', '.xhtml', '.txt'] + if isinstance(markup, bytes): + path_characters = path_characters.encode("utf8") + extensions = [x.encode('utf8') for x in extensions] + filelike = False + if any(x in markup for x in path_characters): + filelike = True + else: + lower = markup.lower() + if any(lower.endswith(ext) for ext in extensions): + filelike = True + if filelike: + warnings.warn( + 'The input looks more like a filename than markup. You may' + ' want to open this file and pass the filehandle into' + ' Beautiful Soup.', + MarkupResemblesLocatorWarning, stacklevel=3 + ) + return True + return False + + def _feed(self): + """Internal method that parses previously set markup, creating a large + number of Tag and NavigableString objects. + """ + # Convert the document to Unicode. + self.builder.reset() + + self.builder.feed(self.markup) + # Close out any unfinished strings and close all the open tags. + self.endData() + while self.currentTag.name != self.ROOT_TAG_NAME: + self.popTag() + + def reset(self): + """Reset this object to a state as though it had never parsed any + markup. + """ + Tag.__init__(self, self, self.builder, self.ROOT_TAG_NAME) + self.hidden = 1 + self.builder.reset() + self.current_data = [] + self.currentTag = None + self.tagStack = [] + self.open_tag_counter = Counter() + self.preserve_whitespace_tag_stack = [] + self.string_container_stack = [] + self._most_recent_element = None + self.pushTag(self) + + def new_tag(self, name, namespace=None, nsprefix=None, attrs={}, + sourceline=None, sourcepos=None, **kwattrs): + """Create a new Tag associated with this BeautifulSoup object. + + :param name: The name of the new Tag. + :param namespace: The URI of the new Tag's XML namespace, if any. + :param prefix: The prefix for the new Tag's XML namespace, if any. + :param attrs: A dictionary of this Tag's attribute values; can + be used instead of `kwattrs` for attributes like 'class' + that are reserved words in Python. + :param sourceline: The line number where this tag was + (purportedly) found in its source document. + :param sourcepos: The character position within `sourceline` where this + tag was (purportedly) found. + :param kwattrs: Keyword arguments for the new Tag's attribute values. + + """ + kwattrs.update(attrs) + return self.element_classes.get(Tag, Tag)( + None, self.builder, name, namespace, nsprefix, kwattrs, + sourceline=sourceline, sourcepos=sourcepos + ) + + def string_container(self, base_class=None): + container = base_class or NavigableString + + # There may be a general override of NavigableString. + container = self.element_classes.get( + container, container + ) + + # On top of that, we may be inside a tag that needs a special + # container class. + if self.string_container_stack and container is NavigableString: + container = self.builder.string_containers.get( + self.string_container_stack[-1].name, container + ) + return container + + def new_string(self, s, subclass=None): + """Create a new NavigableString associated with this BeautifulSoup + object. + """ + container = self.string_container(subclass) + return container(s) + + def insert_before(self, *args): + """This method is part of the PageElement API, but `BeautifulSoup` doesn't implement + it because there is nothing before or after it in the parse tree. + """ + raise NotImplementedError("BeautifulSoup objects don't support insert_before().") + + def insert_after(self, *args): + """This method is part of the PageElement API, but `BeautifulSoup` doesn't implement + it because there is nothing before or after it in the parse tree. + """ + raise NotImplementedError("BeautifulSoup objects don't support insert_after().") + + def popTag(self): + """Internal method called by _popToTag when a tag is closed.""" + tag = self.tagStack.pop() + if tag.name in self.open_tag_counter: + self.open_tag_counter[tag.name] -= 1 + if self.preserve_whitespace_tag_stack and tag == self.preserve_whitespace_tag_stack[-1]: + self.preserve_whitespace_tag_stack.pop() + if self.string_container_stack and tag == self.string_container_stack[-1]: + self.string_container_stack.pop() + #print("Pop", tag.name) + if self.tagStack: + self.currentTag = self.tagStack[-1] + return self.currentTag + + def pushTag(self, tag): + """Internal method called by handle_starttag when a tag is opened.""" + #print("Push", tag.name) + if self.currentTag is not None: + self.currentTag.contents.append(tag) + self.tagStack.append(tag) + self.currentTag = self.tagStack[-1] + if tag.name != self.ROOT_TAG_NAME: + self.open_tag_counter[tag.name] += 1 + if tag.name in self.builder.preserve_whitespace_tags: + self.preserve_whitespace_tag_stack.append(tag) + if tag.name in self.builder.string_containers: + self.string_container_stack.append(tag) + + def endData(self, containerClass=None): + """Method called by the TreeBuilder when the end of a data segment + occurs. + """ + if self.current_data: + current_data = ''.join(self.current_data) + # If whitespace is not preserved, and this string contains + # nothing but ASCII spaces, replace it with a single space + # or newline. + if not self.preserve_whitespace_tag_stack: + strippable = True + for i in current_data: + if i not in self.ASCII_SPACES: + strippable = False + break + if strippable: + if '\n' in current_data: + current_data = '\n' + else: + current_data = ' ' + + # Reset the data collector. + self.current_data = [] + + # Should we add this string to the tree at all? + if self.parse_only and len(self.tagStack) <= 1 and \ + (not self.parse_only.text or \ + not self.parse_only.search(current_data)): + return + + containerClass = self.string_container(containerClass) + o = containerClass(current_data) + self.object_was_parsed(o) + + def object_was_parsed(self, o, parent=None, most_recent_element=None): + """Method called by the TreeBuilder to integrate an object into the parse tree.""" + if parent is None: + parent = self.currentTag + if most_recent_element is not None: + previous_element = most_recent_element + else: + previous_element = self._most_recent_element + + next_element = previous_sibling = next_sibling = None + if isinstance(o, Tag): + next_element = o.next_element + next_sibling = o.next_sibling + previous_sibling = o.previous_sibling + if previous_element is None: + previous_element = o.previous_element + + fix = parent.next_element is not None + + o.setup(parent, previous_element, next_element, previous_sibling, next_sibling) + + self._most_recent_element = o + parent.contents.append(o) + + # Check if we are inserting into an already parsed node. + if fix: + self._linkage_fixer(parent) + + def _linkage_fixer(self, el): + """Make sure linkage of this fragment is sound.""" + + first = el.contents[0] + child = el.contents[-1] + descendant = child + + if child is first and el.parent is not None: + # Parent should be linked to first child + el.next_element = child + # We are no longer linked to whatever this element is + prev_el = child.previous_element + if prev_el is not None and prev_el is not el: + prev_el.next_element = None + # First child should be linked to the parent, and no previous siblings. + child.previous_element = el + child.previous_sibling = None + + # We have no sibling as we've been appended as the last. + child.next_sibling = None + + # This index is a tag, dig deeper for a "last descendant" + if isinstance(child, Tag) and child.contents: + descendant = child._last_descendant(False) + + # As the final step, link last descendant. It should be linked + # to the parent's next sibling (if found), else walk up the chain + # and find a parent with a sibling. It should have no next sibling. + descendant.next_element = None + descendant.next_sibling = None + target = el + while True: + if target is None: + break + elif target.next_sibling is not None: + descendant.next_element = target.next_sibling + target.next_sibling.previous_element = child + break + target = target.parent + + def _popToTag(self, name, nsprefix=None, inclusivePop=True): + """Pops the tag stack up to and including the most recent + instance of the given tag. + + If there are no open tags with the given name, nothing will be + popped. + + :param name: Pop up to the most recent tag with this name. + :param nsprefix: The namespace prefix that goes with `name`. + :param inclusivePop: It this is false, pops the tag stack up + to but *not* including the most recent instqance of the + given tag. + + """ + #print("Popping to %s" % name) + if name == self.ROOT_TAG_NAME: + # The BeautifulSoup object itself can never be popped. + return + + most_recently_popped = None + + stack_size = len(self.tagStack) + for i in range(stack_size - 1, 0, -1): + if not self.open_tag_counter.get(name): + break + t = self.tagStack[i] + if (name == t.name and nsprefix == t.prefix): + if inclusivePop: + most_recently_popped = self.popTag() + break + most_recently_popped = self.popTag() + + return most_recently_popped + + def handle_starttag(self, name, namespace, nsprefix, attrs, sourceline=None, + sourcepos=None, namespaces=None): + """Called by the tree builder when a new tag is encountered. + + :param name: Name of the tag. + :param nsprefix: Namespace prefix for the tag. + :param attrs: A dictionary of attribute values. + :param sourceline: The line number where this tag was found in its + source document. + :param sourcepos: The character position within `sourceline` where this + tag was found. + :param namespaces: A dictionary of all namespace prefix mappings + currently in scope in the document. + + If this method returns None, the tag was rejected by an active + SoupStrainer. You should proceed as if the tag had not occurred + in the document. For instance, if this was a self-closing tag, + don't call handle_endtag. + """ + # print("Start tag %s: %s" % (name, attrs)) + self.endData() + + if (self.parse_only and len(self.tagStack) <= 1 + and (self.parse_only.text + or not self.parse_only.search_tag(name, attrs))): + return None + + tag = self.element_classes.get(Tag, Tag)( + self, self.builder, name, namespace, nsprefix, attrs, + self.currentTag, self._most_recent_element, + sourceline=sourceline, sourcepos=sourcepos, + namespaces=namespaces + ) + if tag is None: + return tag + if self._most_recent_element is not None: + self._most_recent_element.next_element = tag + self._most_recent_element = tag + self.pushTag(tag) + return tag + + def handle_endtag(self, name, nsprefix=None): + """Called by the tree builder when an ending tag is encountered. + + :param name: Name of the tag. + :param nsprefix: Namespace prefix for the tag. + """ + #print("End tag: " + name) + self.endData() + self._popToTag(name, nsprefix) + + def handle_data(self, data): + """Called by the tree builder when a chunk of textual data is encountered.""" + self.current_data.append(data) + + def decode(self, pretty_print=False, + eventual_encoding=DEFAULT_OUTPUT_ENCODING, + formatter="minimal", iterator=None): + """Returns a string or Unicode representation of the parse tree + as an HTML or XML document. + + :param pretty_print: If this is True, indentation will be used to + make the document more readable. + :param eventual_encoding: The encoding of the final document. + If this is None, the document will be a Unicode string. + """ + if self.is_xml: + # Print the XML declaration + encoding_part = '' + if eventual_encoding in PYTHON_SPECIFIC_ENCODINGS: + # This is a special Python encoding; it can't actually + # go into an XML document because it means nothing + # outside of Python. + eventual_encoding = None + if eventual_encoding != None: + encoding_part = ' encoding="%s"' % eventual_encoding + prefix = '\n' % encoding_part + else: + prefix = '' + if not pretty_print: + indent_level = None + else: + indent_level = 0 + return prefix + super(BeautifulSoup, self).decode( + indent_level, eventual_encoding, formatter, iterator) + +# Aliases to make it easier to get started quickly, e.g. 'from bs4 import _soup' +_s = BeautifulSoup +_soup = BeautifulSoup + +class BeautifulStoneSoup(BeautifulSoup): + """Deprecated interface to an XML parser.""" + + def __init__(self, *args, **kwargs): + kwargs['features'] = 'xml' + warnings.warn( + 'The BeautifulStoneSoup class is deprecated. Instead of using ' + 'it, pass features="xml" into the BeautifulSoup constructor.', + DeprecationWarning, stacklevel=2 + ) + super(BeautifulStoneSoup, self).__init__(*args, **kwargs) + + +class StopParsing(Exception): + """Exception raised by a TreeBuilder if it's unable to continue parsing.""" + pass + +class FeatureNotFound(ValueError): + """Exception raised by the BeautifulSoup constructor if no parser with the + requested features is found. + """ + pass + + +#If this file is run as a script, act as an HTML pretty-printer. +if __name__ == '__main__': + import sys + soup = BeautifulSoup(sys.stdin) + print((soup.prettify())) diff --git a/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..c2d3905c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/css.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/css.cpython-38.pyc new file mode 100644 index 00000000..b9b7e1f8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/css.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/dammit.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/dammit.cpython-38.pyc new file mode 100644 index 00000000..28dc9243 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/dammit.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/diagnose.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/diagnose.cpython-38.pyc new file mode 100644 index 00000000..c43f8900 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/diagnose.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/element.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/element.cpython-38.pyc new file mode 100644 index 00000000..e0724bc8 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/element.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/formatter.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/formatter.cpython-38.pyc new file mode 100644 index 00000000..8c156e51 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/__pycache__/formatter.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/builder/__init__.py b/dbtzin/lib/python3.8/site-packages/bs4/builder/__init__.py new file mode 100644 index 00000000..2e397458 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/bs4/builder/__init__.py @@ -0,0 +1,631 @@ +# Use of this source code is governed by the MIT license. +__license__ = "MIT" + +from collections import defaultdict +import itertools +import re +import warnings +import sys +from bs4.element import ( + CharsetMetaAttributeValue, + ContentMetaAttributeValue, + RubyParenthesisString, + RubyTextString, + Stylesheet, + Script, + TemplateString, + nonwhitespace_re +) + +__all__ = [ + 'HTMLTreeBuilder', + 'SAXTreeBuilder', + 'TreeBuilder', + 'TreeBuilderRegistry', + ] + +# Some useful features for a TreeBuilder to have. +FAST = 'fast' +PERMISSIVE = 'permissive' +STRICT = 'strict' +XML = 'xml' +HTML = 'html' +HTML_5 = 'html5' + +class XMLParsedAsHTMLWarning(UserWarning): + """The warning issued when an HTML parser is used to parse + XML that is not XHTML. + """ + MESSAGE = """It looks like you're parsing an XML document using an HTML parser. If this really is an HTML document (maybe it's XHTML?), you can ignore or filter this warning. If it's XML, you should know that using an XML parser will be more reliable. To parse this document as XML, make sure you have the lxml package installed, and pass the keyword argument `features="xml"` into the BeautifulSoup constructor.""" + + +class TreeBuilderRegistry(object): + """A way of looking up TreeBuilder subclasses by their name or by desired + features. + """ + + def __init__(self): + self.builders_for_feature = defaultdict(list) + self.builders = [] + + def register(self, treebuilder_class): + """Register a treebuilder based on its advertised features. + + :param treebuilder_class: A subclass of Treebuilder. its .features + attribute should list its features. + """ + for feature in treebuilder_class.features: + self.builders_for_feature[feature].insert(0, treebuilder_class) + self.builders.insert(0, treebuilder_class) + + def lookup(self, *features): + """Look up a TreeBuilder subclass with the desired features. + + :param features: A list of features to look for. If none are + provided, the most recently registered TreeBuilder subclass + will be used. + :return: A TreeBuilder subclass, or None if there's no + registered subclass with all the requested features. + """ + if len(self.builders) == 0: + # There are no builders at all. + return None + + if len(features) == 0: + # They didn't ask for any features. Give them the most + # recently registered builder. + return self.builders[0] + + # Go down the list of features in order, and eliminate any builders + # that don't match every feature. + features = list(features) + features.reverse() + candidates = None + candidate_set = None + while len(features) > 0: + feature = features.pop() + we_have_the_feature = self.builders_for_feature.get(feature, []) + if len(we_have_the_feature) > 0: + if candidates is None: + candidates = we_have_the_feature + candidate_set = set(candidates) + else: + # Eliminate any candidates that don't have this feature. + candidate_set = candidate_set.intersection( + set(we_have_the_feature)) + + # The only valid candidates are the ones in candidate_set. + # Go through the original list of candidates and pick the first one + # that's in candidate_set. + if candidate_set is None: + return None + for candidate in candidates: + if candidate in candidate_set: + return candidate + return None + +# The BeautifulSoup class will take feature lists from developers and use them +# to look up builders in this registry. +builder_registry = TreeBuilderRegistry() + +class TreeBuilder(object): + """Turn a textual document into a Beautiful Soup object tree.""" + + NAME = "[Unknown tree builder]" + ALTERNATE_NAMES = [] + features = [] + + is_xml = False + picklable = False + empty_element_tags = None # A tag will be considered an empty-element + # tag when and only when it has no contents. + + # A value for these tag/attribute combinations is a space- or + # comma-separated list of CDATA, rather than a single CDATA. + DEFAULT_CDATA_LIST_ATTRIBUTES = defaultdict(list) + + # Whitespace should be preserved inside these tags. + DEFAULT_PRESERVE_WHITESPACE_TAGS = set() + + # The textual contents of tags with these names should be + # instantiated with some class other than NavigableString. + DEFAULT_STRING_CONTAINERS = {} + + USE_DEFAULT = object() + + # Most parsers don't keep track of line numbers. + TRACKS_LINE_NUMBERS = False + + def __init__(self, multi_valued_attributes=USE_DEFAULT, + preserve_whitespace_tags=USE_DEFAULT, + store_line_numbers=USE_DEFAULT, + string_containers=USE_DEFAULT, + ): + """Constructor. + + :param multi_valued_attributes: If this is set to None, the + TreeBuilder will not turn any values for attributes like + 'class' into lists. Setting this to a dictionary will + customize this behavior; look at DEFAULT_CDATA_LIST_ATTRIBUTES + for an example. + + Internally, these are called "CDATA list attributes", but that + probably doesn't make sense to an end-user, so the argument name + is `multi_valued_attributes`. + + :param preserve_whitespace_tags: A list of tags to treat + the way
 tags are treated in HTML. Tags in this list
+         are immune from pretty-printing; their contents will always be
+         output as-is.
+
+        :param string_containers: A dictionary mapping tag names to
+        the classes that should be instantiated to contain the textual
+        contents of those tags. The default is to use NavigableString
+        for every tag, no matter what the name. You can override the
+        default by changing DEFAULT_STRING_CONTAINERS.
+
+        :param store_line_numbers: If the parser keeps track of the
+         line numbers and positions of the original markup, that
+         information will, by default, be stored in each corresponding
+         `Tag` object. You can turn this off by passing
+         store_line_numbers=False. If the parser you're using doesn't 
+         keep track of this information, then setting store_line_numbers=True
+         will do nothing.
+        """
+        self.soup = None
+        if multi_valued_attributes is self.USE_DEFAULT:
+            multi_valued_attributes = self.DEFAULT_CDATA_LIST_ATTRIBUTES
+        self.cdata_list_attributes = multi_valued_attributes
+        if preserve_whitespace_tags is self.USE_DEFAULT:
+            preserve_whitespace_tags = self.DEFAULT_PRESERVE_WHITESPACE_TAGS
+        self.preserve_whitespace_tags = preserve_whitespace_tags
+        if store_line_numbers == self.USE_DEFAULT:
+            store_line_numbers = self.TRACKS_LINE_NUMBERS
+        self.store_line_numbers = store_line_numbers 
+        if string_containers == self.USE_DEFAULT:
+            string_containers = self.DEFAULT_STRING_CONTAINERS
+        self.string_containers = string_containers
+        
+    def initialize_soup(self, soup):
+        """The BeautifulSoup object has been initialized and is now
+        being associated with the TreeBuilder.
+
+        :param soup: A BeautifulSoup object.
+        """
+        self.soup = soup
+        
+    def reset(self):
+        """Do any work necessary to reset the underlying parser
+        for a new document.
+
+        By default, this does nothing.
+        """
+        pass
+
+    def can_be_empty_element(self, tag_name):
+        """Might a tag with this name be an empty-element tag?
+
+        The final markup may or may not actually present this tag as
+        self-closing.
+
+        For instance: an HTMLBuilder does not consider a 

tag to be + an empty-element tag (it's not in + HTMLBuilder.empty_element_tags). This means an empty

tag + will be presented as "

", not "

" or "

". + + The default implementation has no opinion about which tags are + empty-element tags, so a tag will be presented as an + empty-element tag if and only if it has no children. + "" will become "", and "bar" will + be left alone. + + :param tag_name: The name of a markup tag. + """ + if self.empty_element_tags is None: + return True + return tag_name in self.empty_element_tags + + def feed(self, markup): + """Run some incoming markup through some parsing process, + populating the `BeautifulSoup` object in self.soup. + + This method is not implemented in TreeBuilder; it must be + implemented in subclasses. + + :return: None. + """ + raise NotImplementedError() + + def prepare_markup(self, markup, user_specified_encoding=None, + document_declared_encoding=None, exclude_encodings=None): + """Run any preliminary steps necessary to make incoming markup + acceptable to the parser. + + :param markup: Some markup -- probably a bytestring. + :param user_specified_encoding: The user asked to try this encoding. + :param document_declared_encoding: The markup itself claims to be + in this encoding. NOTE: This argument is not used by the + calling code and can probably be removed. + :param exclude_encodings: The user asked _not_ to try any of + these encodings. + + :yield: A series of 4-tuples: + (markup, encoding, declared encoding, + has undergone character replacement) + + Each 4-tuple represents a strategy for converting the + document to Unicode and parsing it. Each strategy will be tried + in turn. + + By default, the only strategy is to parse the markup + as-is. See `LXMLTreeBuilderForXML` and + `HTMLParserTreeBuilder` for implementations that take into + account the quirks of particular parsers. + """ + yield markup, None, None, False + + def test_fragment_to_document(self, fragment): + """Wrap an HTML fragment to make it look like a document. + + Different parsers do this differently. For instance, lxml + introduces an empty tag, and html5lib + doesn't. Abstracting this away lets us write simple tests + which run HTML fragments through the parser and compare the + results against other HTML fragments. + + This method should not be used outside of tests. + + :param fragment: A string -- fragment of HTML. + :return: A string -- a full HTML document. + """ + return fragment + + def set_up_substitutions(self, tag): + """Set up any substitutions that will need to be performed on + a `Tag` when it's output as a string. + + By default, this does nothing. See `HTMLTreeBuilder` for a + case where this is used. + + :param tag: A `Tag` + :return: Whether or not a substitution was performed. + """ + return False + + def _replace_cdata_list_attribute_values(self, tag_name, attrs): + """When an attribute value is associated with a tag that can + have multiple values for that attribute, convert the string + value to a list of strings. + + Basically, replaces class="foo bar" with class=["foo", "bar"] + + NOTE: This method modifies its input in place. + + :param tag_name: The name of a tag. + :param attrs: A dictionary containing the tag's attributes. + Any appropriate attribute values will be modified in place. + """ + if not attrs: + return attrs + if self.cdata_list_attributes: + universal = self.cdata_list_attributes.get('*', []) + tag_specific = self.cdata_list_attributes.get( + tag_name.lower(), None) + for attr in list(attrs.keys()): + if attr in universal or (tag_specific and attr in tag_specific): + # We have a "class"-type attribute whose string + # value is a whitespace-separated list of + # values. Split it into a list. + value = attrs[attr] + if isinstance(value, str): + values = nonwhitespace_re.findall(value) + else: + # html5lib sometimes calls setAttributes twice + # for the same tag when rearranging the parse + # tree. On the second call the attribute value + # here is already a list. If this happens, + # leave the value alone rather than trying to + # split it again. + values = value + attrs[attr] = values + return attrs + +class SAXTreeBuilder(TreeBuilder): + """A Beautiful Soup treebuilder that listens for SAX events. + + This is not currently used for anything, but it demonstrates + how a simple TreeBuilder would work. + """ + + def feed(self, markup): + raise NotImplementedError() + + def close(self): + pass + + def startElement(self, name, attrs): + attrs = dict((key[1], value) for key, value in list(attrs.items())) + #print("Start %s, %r" % (name, attrs)) + self.soup.handle_starttag(name, attrs) + + def endElement(self, name): + #print("End %s" % name) + self.soup.handle_endtag(name) + + def startElementNS(self, nsTuple, nodeName, attrs): + # Throw away (ns, nodeName) for now. + self.startElement(nodeName, attrs) + + def endElementNS(self, nsTuple, nodeName): + # Throw away (ns, nodeName) for now. + self.endElement(nodeName) + #handler.endElementNS((ns, node.nodeName), node.nodeName) + + def startPrefixMapping(self, prefix, nodeValue): + # Ignore the prefix for now. + pass + + def endPrefixMapping(self, prefix): + # Ignore the prefix for now. + # handler.endPrefixMapping(prefix) + pass + + def characters(self, content): + self.soup.handle_data(content) + + def startDocument(self): + pass + + def endDocument(self): + pass + + +class HTMLTreeBuilder(TreeBuilder): + """This TreeBuilder knows facts about HTML. + + Such as which tags are empty-element tags. + """ + + empty_element_tags = set([ + # These are from HTML5. + 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr', + + # These are from earlier versions of HTML and are removed in HTML5. + 'basefont', 'bgsound', 'command', 'frame', 'image', 'isindex', 'nextid', 'spacer' + ]) + + # The HTML standard defines these as block-level elements. Beautiful + # Soup does not treat these elements differently from other elements, + # but it may do so eventually, and this information is available if + # you need to use it. + block_elements = set(["address", "article", "aside", "blockquote", "canvas", "dd", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hr", "li", "main", "nav", "noscript", "ol", "output", "p", "pre", "section", "table", "tfoot", "ul", "video"]) + + # These HTML tags need special treatment so they can be + # represented by a string class other than NavigableString. + # + # For some of these tags, it's because the HTML standard defines + # an unusual content model for them. I made this list by going + # through the HTML spec + # (https://html.spec.whatwg.org/#metadata-content) and looking for + # "metadata content" elements that can contain strings. + # + # The Ruby tags ( and ) are here despite being normal + # "phrasing content" tags, because the content they contain is + # qualitatively different from other text in the document, and it + # can be useful to be able to distinguish it. + # + # TODO: Arguably

 and
+            # 
+
This numeric entity is missing the final semicolon:
+ +
a
+
This document contains (do you see it?)
+
This document ends with That attribute value was bogus
+The doctype is invalid because it contains extra whitespace +
That boolean attribute had no value
+
Here's a nonexistent entity: &#foo; (do you see it?)
+
This document ends before the entity finishes: > +

Paragraphs shouldn't contain block display elements, but this one does:

you see?

+Multiple values for the same attribute. +
Here's a table
+
+
This tag contains nothing but whitespace:
+

This p tag is cut off by

the end of the blockquote tag
+
Here's a nested table:
foo
This table contains bare markup
+ +
This document contains a surprise doctype
+ +
Tag name contains Unicode characters
+ + +""" + + +class SoupTest(object): + + @property + def default_builder(self): + return default_builder + + def soup(self, markup, **kwargs): + """Build a Beautiful Soup object from markup.""" + builder = kwargs.pop('builder', self.default_builder) + return BeautifulSoup(markup, builder=builder, **kwargs) + + def document_for(self, markup, **kwargs): + """Turn an HTML fragment into a document. + + The details depend on the builder. + """ + return self.default_builder(**kwargs).test_fragment_to_document(markup) + + def assert_soup(self, to_parse, compare_parsed_to=None): + """Parse some markup using Beautiful Soup and verify that + the output markup is as expected. + """ + builder = self.default_builder + obj = BeautifulSoup(to_parse, builder=builder) + if compare_parsed_to is None: + compare_parsed_to = to_parse + + # Verify that the documents come out the same. + assert obj.decode() == self.document_for(compare_parsed_to) + + # Also run some checks on the BeautifulSoup object itself: + + # Verify that every tag that was opened was eventually closed. + + # There are no tags in the open tag counter. + assert all(v==0 for v in list(obj.open_tag_counter.values())) + + # The only tag in the tag stack is the one for the root + # document. + assert [obj.ROOT_TAG_NAME] == [x.name for x in obj.tagStack] + + assertSoupEquals = assert_soup + + def assertConnectedness(self, element): + """Ensure that next_element and previous_element are properly + set for all descendants of the given element. + """ + earlier = None + for e in element.descendants: + if earlier: + assert e == earlier.next_element + assert earlier == e.previous_element + earlier = e + + def linkage_validator(self, el, _recursive_call=False): + """Ensure proper linkage throughout the document.""" + descendant = None + # Document element should have no previous element or previous sibling. + # It also shouldn't have a next sibling. + if el.parent is None: + assert el.previous_element is None,\ + "Bad previous_element\nNODE: {}\nPREV: {}\nEXPECTED: {}".format( + el, el.previous_element, None + ) + assert el.previous_sibling is None,\ + "Bad previous_sibling\nNODE: {}\nPREV: {}\nEXPECTED: {}".format( + el, el.previous_sibling, None + ) + assert el.next_sibling is None,\ + "Bad next_sibling\nNODE: {}\nNEXT: {}\nEXPECTED: {}".format( + el, el.next_sibling, None + ) + + idx = 0 + child = None + last_child = None + last_idx = len(el.contents) - 1 + for child in el.contents: + descendant = None + + # Parent should link next element to their first child + # That child should have no previous sibling + if idx == 0: + if el.parent is not None: + assert el.next_element is child,\ + "Bad next_element\nNODE: {}\nNEXT: {}\nEXPECTED: {}".format( + el, el.next_element, child + ) + assert child.previous_element is el,\ + "Bad previous_element\nNODE: {}\nPREV: {}\nEXPECTED: {}".format( + child, child.previous_element, el + ) + assert child.previous_sibling is None,\ + "Bad previous_sibling\nNODE: {}\nPREV {}\nEXPECTED: {}".format( + child, child.previous_sibling, None + ) + + # If not the first child, previous index should link as sibling to this index + # Previous element should match the last index or the last bubbled up descendant + else: + assert child.previous_sibling is el.contents[idx - 1],\ + "Bad previous_sibling\nNODE: {}\nPREV {}\nEXPECTED {}".format( + child, child.previous_sibling, el.contents[idx - 1] + ) + assert el.contents[idx - 1].next_sibling is child,\ + "Bad next_sibling\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + el.contents[idx - 1], el.contents[idx - 1].next_sibling, child + ) + + if last_child is not None: + assert child.previous_element is last_child,\ + "Bad previous_element\nNODE: {}\nPREV {}\nEXPECTED {}\nCONTENTS {}".format( + child, child.previous_element, last_child, child.parent.contents + ) + assert last_child.next_element is child,\ + "Bad next_element\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + last_child, last_child.next_element, child + ) + + if isinstance(child, Tag) and child.contents: + descendant = self.linkage_validator(child, True) + # A bubbled up descendant should have no next siblings + assert descendant.next_sibling is None,\ + "Bad next_sibling\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + descendant, descendant.next_sibling, None + ) + + # Mark last child as either the bubbled up descendant or the current child + if descendant is not None: + last_child = descendant + else: + last_child = child + + # If last child, there are non next siblings + if idx == last_idx: + assert child.next_sibling is None,\ + "Bad next_sibling\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + child, child.next_sibling, None + ) + idx += 1 + + child = descendant if descendant is not None else child + if child is None: + child = el + + if not _recursive_call and child is not None: + target = el + while True: + if target is None: + assert child.next_element is None, \ + "Bad next_element\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + child, child.next_element, None + ) + break + elif target.next_sibling is not None: + assert child.next_element is target.next_sibling, \ + "Bad next_element\nNODE: {}\nNEXT {}\nEXPECTED {}".format( + child, child.next_element, target.next_sibling + ) + break + target = target.parent + + # We are done, so nothing to return + return None + else: + # Return the child to the recursive caller + return child + + def assert_selects(self, tags, should_match): + """Make sure that the given tags have the correct text. + + This is used in tests that define a bunch of tags, each + containing a single string, and then select certain strings by + some mechanism. + """ + assert [tag.string for tag in tags] == should_match + + def assert_selects_ids(self, tags, should_match): + """Make sure that the given tags have the correct IDs. + + This is used in tests that define a bunch of tags, each + containing a single string, and then select certain strings by + some mechanism. + """ + assert [tag['id'] for tag in tags] == should_match + + +class TreeBuilderSmokeTest(object): + # Tests that are common to HTML and XML tree builders. + + @pytest.mark.parametrize( + "multi_valued_attributes", + [None, {}, dict(b=['class']), {'*': ['notclass']}] + ) + def test_attribute_not_multi_valued(self, multi_valued_attributes): + markup = '' + soup = self.soup(markup, multi_valued_attributes=multi_valued_attributes) + assert soup.a['class'] == 'a b c' + + @pytest.mark.parametrize( + "multi_valued_attributes", [dict(a=['class']), {'*': ['class']}] + ) + def test_attribute_multi_valued(self, multi_valued_attributes): + markup = '' + soup = self.soup( + markup, multi_valued_attributes=multi_valued_attributes + ) + assert soup.a['class'] == ['a', 'b', 'c'] + + def test_invalid_doctype(self): + markup = 'content' + markup = '' + soup = self.soup(markup) + +class HTMLTreeBuilderSmokeTest(TreeBuilderSmokeTest): + + """A basic test of a treebuilder's competence. + + Any HTML treebuilder, present or future, should be able to pass + these tests. With invalid markup, there's room for interpretation, + and different parsers can handle it differently. But with the + markup in these tests, there's not much room for interpretation. + """ + + def test_empty_element_tags(self): + """Verify that all HTML4 and HTML5 empty element (aka void element) tags + are handled correctly. + """ + for name in [ + 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr', + 'spacer', 'frame' + ]: + soup = self.soup("") + new_tag = soup.new_tag(name) + assert new_tag.is_empty_element == True + + def test_special_string_containers(self): + soup = self.soup( + "" + ) + assert isinstance(soup.style.string, Stylesheet) + assert isinstance(soup.script.string, Script) + + soup = self.soup( + "" + ) + assert isinstance(soup.style.string, Stylesheet) + # The contents of the style tag resemble an HTML comment, but + # it's not treated as a comment. + assert soup.style.string == "" + assert isinstance(soup.style.string, Stylesheet) + + def test_pickle_and_unpickle_identity(self): + # Pickling a tree, then unpickling it, yields a tree identical + # to the original. + tree = self.soup("foo") + dumped = pickle.dumps(tree, 2) + loaded = pickle.loads(dumped) + assert loaded.__class__ == BeautifulSoup + assert loaded.decode() == tree.decode() + + def assertDoctypeHandled(self, doctype_fragment): + """Assert that a given doctype string is handled correctly.""" + doctype_str, soup = self._document_with_doctype(doctype_fragment) + + # Make sure a Doctype object was created. + doctype = soup.contents[0] + assert doctype.__class__ == Doctype + assert doctype == doctype_fragment + assert soup.encode("utf8")[:len(doctype_str)] == doctype_str + + # Make sure that the doctype was correctly associated with the + # parse tree and that the rest of the document parsed. + assert soup.p.contents[0] == 'foo' + + def _document_with_doctype(self, doctype_fragment, doctype_string="DOCTYPE"): + """Generate and parse a document with the given doctype.""" + doctype = '' % (doctype_string, doctype_fragment) + markup = doctype + '\n

foo

' + soup = self.soup(markup) + return doctype.encode("utf8"), soup + + def test_normal_doctypes(self): + """Make sure normal, everyday HTML doctypes are handled correctly.""" + self.assertDoctypeHandled("html") + self.assertDoctypeHandled( + 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"') + + def test_empty_doctype(self): + soup = self.soup("") + doctype = soup.contents[0] + assert "" == doctype.strip() + + def test_mixed_case_doctype(self): + # A lowercase or mixed-case doctype becomes a Doctype. + for doctype_fragment in ("doctype", "DocType"): + doctype_str, soup = self._document_with_doctype( + "html", doctype_fragment + ) + + # Make sure a Doctype object was created and that the DOCTYPE + # is uppercase. + doctype = soup.contents[0] + assert doctype.__class__ == Doctype + assert doctype == "html" + assert soup.encode("utf8")[:len(doctype_str)] == b"" + + # Make sure that the doctype was correctly associated with the + # parse tree and that the rest of the document parsed. + assert soup.p.contents[0] == 'foo' + + def test_public_doctype_with_url(self): + doctype = 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' + self.assertDoctypeHandled(doctype) + + def test_system_doctype(self): + self.assertDoctypeHandled('foo SYSTEM "http://www.example.com/"') + + def test_namespaced_system_doctype(self): + # We can handle a namespaced doctype with a system ID. + self.assertDoctypeHandled('xsl:stylesheet SYSTEM "htmlent.dtd"') + + def test_namespaced_public_doctype(self): + # Test a namespaced doctype with a public id. + self.assertDoctypeHandled('xsl:stylesheet PUBLIC "htmlent.dtd"') + + def test_real_xhtml_document(self): + """A real XHTML document should come out more or less the same as it went in.""" + markup = b""" + + +Hello. +Goodbye. +""" + with warnings.catch_warnings(record=True) as w: + soup = self.soup(markup) + assert soup.encode("utf-8").replace(b"\n", b"") == markup.replace(b"\n", b"") + + # No warning was issued about parsing an XML document as HTML, + # because XHTML is both. + assert w == [] + + + def test_namespaced_html(self): + # When a namespaced XML document is parsed as HTML it should + # be treated as HTML with weird tag names. + markup = b"""content""" + with warnings.catch_warnings(record=True) as w: + soup = self.soup(markup) + + assert 2 == len(soup.find_all("ns1:foo")) + + # n.b. no "you're parsing XML as HTML" warning was given + # because there was no XML declaration. + assert [] == w + + def test_detect_xml_parsed_as_html(self): + # A warning is issued when parsing an XML document as HTML, + # but basic stuff should still work. + markup = b"""string""" + with warnings.catch_warnings(record=True) as w: + soup = self.soup(markup) + assert soup.tag.string == 'string' + [warning] = w + assert isinstance(warning.message, XMLParsedAsHTMLWarning) + assert str(warning.message) == XMLParsedAsHTMLWarning.MESSAGE + + # NOTE: the warning is not issued if the document appears to + # be XHTML (tested with test_real_xhtml_document in the + # superclass) or if there is no XML declaration (tested with + # test_namespaced_html in the superclass). + + def test_processing_instruction(self): + # We test both Unicode and bytestring to verify that + # process_markup correctly sets processing_instruction_class + # even when the markup is already Unicode and there is no + # need to process anything. + markup = """""" + soup = self.soup(markup) + assert markup == soup.decode() + + markup = b"""""" + soup = self.soup(markup) + assert markup == soup.encode("utf8") + + def test_deepcopy(self): + """Make sure you can copy the tree builder. + + This is important because the builder is part of a + BeautifulSoup object, and we want to be able to copy that. + """ + copy.deepcopy(self.default_builder) + + def test_p_tag_is_never_empty_element(self): + """A

tag is never designated as an empty-element tag. + + Even if the markup shows it as an empty-element tag, it + shouldn't be presented that way. + """ + soup = self.soup("

") + assert not soup.p.is_empty_element + assert str(soup.p) == "

" + + def test_unclosed_tags_get_closed(self): + """A tag that's not closed by the end of the document should be closed. + + This applies to all tags except empty-element tags. + """ + self.assert_soup("

", "

") + self.assert_soup("", "") + + self.assert_soup("
", "
") + + def test_br_is_always_empty_element_tag(self): + """A
tag is designated as an empty-element tag. + + Some parsers treat

as one
tag, some parsers as + two tags, but it should always be an empty-element tag. + """ + soup = self.soup("

") + assert soup.br.is_empty_element + assert str(soup.br) == "
" + + def test_nested_formatting_elements(self): + self.assert_soup("") + + def test_double_head(self): + html = ''' + + +Ordinary HEAD element test + + + +Hello, world! + + +''' + soup = self.soup(html) + assert "text/javascript" == soup.find('script')['type'] + + def test_comment(self): + # Comments are represented as Comment objects. + markup = "

foobaz

" + self.assert_soup(markup) + + soup = self.soup(markup) + comment = soup.find(string="foobar") + assert comment.__class__ == Comment + + # The comment is properly integrated into the tree. + foo = soup.find(string="foo") + assert comment == foo.next_element + baz = soup.find(string="baz") + assert comment == baz.previous_element + + def test_preserved_whitespace_in_pre_and_textarea(self): + """Whitespace must be preserved in
 and \n"
+        self.assert_soup(pre_markup)
+        self.assert_soup(textarea_markup)
+
+        soup = self.soup(pre_markup)
+        assert soup.pre.prettify() == pre_markup
+
+        soup = self.soup(textarea_markup)
+        assert soup.textarea.prettify() == textarea_markup
+
+        soup = self.soup("")
+        assert soup.textarea.prettify() == "\n"
+
+    def test_nested_inline_elements(self):
+        """Inline elements can be nested indefinitely."""
+        b_tag = "Inside a B tag"
+        self.assert_soup(b_tag)
+
+        nested_b_tag = "

A nested tag

" + self.assert_soup(nested_b_tag) + + double_nested_b_tag = "

A doubly nested tag

" + self.assert_soup(nested_b_tag) + + def test_nested_block_level_elements(self): + """Block elements can be nested.""" + soup = self.soup('

Foo

') + blockquote = soup.blockquote + assert blockquote.p.b.string == 'Foo' + assert blockquote.b.string == 'Foo' + + def test_correctly_nested_tables(self): + """One table can go inside another one.""" + markup = ('' + '' + "') + + self.assert_soup( + markup, + '
Here's another table:" + '' + '' + '
foo
Here\'s another table:' + '
foo
' + '
') + + self.assert_soup( + "" + "" + "
Foo
Bar
Baz
") + + def test_multivalued_attribute_with_whitespace(self): + # Whitespace separating the values of a multi-valued attribute + # should be ignored. + + markup = '
' + soup = self.soup(markup) + assert ['foo', 'bar'] == soup.div['class'] + + # If you search by the literal name of the class it's like the whitespace + # wasn't there. + assert soup.div == soup.find('div', class_="foo bar") + + def test_deeply_nested_multivalued_attribute(self): + # html5lib can set the attributes of the same tag many times + # as it rearranges the tree. This has caused problems with + # multivalued attributes. + markup = '
' + soup = self.soup(markup) + assert ["css"] == soup.div.div['class'] + + def test_multivalued_attribute_on_html(self): + # html5lib uses a different API to set the attributes ot the + # tag. This has caused problems with multivalued + # attributes. + markup = '' + soup = self.soup(markup) + assert ["a", "b"] == soup.html['class'] + + def test_angle_brackets_in_attribute_values_are_escaped(self): + self.assert_soup('', '') + + def test_strings_resembling_character_entity_references(self): + # "&T" and "&p" look like incomplete character entities, but they are + # not. + self.assert_soup( + "

• AT&T is in the s&p 500

", + "

\u2022 AT&T is in the s&p 500

" + ) + + def test_apos_entity(self): + self.assert_soup( + "

Bob's Bar

", + "

Bob's Bar

", + ) + + def test_entities_in_foreign_document_encoding(self): + # “ and ” are invalid numeric entities referencing + # Windows-1252 characters. - references a character common + # to Windows-1252 and Unicode, and ☃ references a + # character only found in Unicode. + # + # All of these entities should be converted to Unicode + # characters. + markup = "

“Hello” -☃

" + soup = self.soup(markup) + assert "“Hello” -☃" == soup.p.string + + def test_entities_in_attributes_converted_to_unicode(self): + expect = '

' + self.assert_soup('

', expect) + self.assert_soup('

', expect) + self.assert_soup('

', expect) + self.assert_soup('

', expect) + + def test_entities_in_text_converted_to_unicode(self): + expect = '

pi\N{LATIN SMALL LETTER N WITH TILDE}ata

' + self.assert_soup("

piñata

", expect) + self.assert_soup("

piñata

", expect) + self.assert_soup("

piñata

", expect) + self.assert_soup("

piñata

", expect) + + def test_quot_entity_converted_to_quotation_mark(self): + self.assert_soup("

I said "good day!"

", + '

I said "good day!"

') + + def test_out_of_range_entity(self): + expect = "\N{REPLACEMENT CHARACTER}" + self.assert_soup("�", expect) + self.assert_soup("�", expect) + self.assert_soup("�", expect) + + def test_multipart_strings(self): + "Mostly to prevent a recurrence of a bug in the html5lib treebuilder." + soup = self.soup("

\nfoo

") + assert "p" == soup.h2.string.next_element.name + assert "p" == soup.p.name + self.assertConnectedness(soup) + + def test_empty_element_tags(self): + """Verify consistent handling of empty-element tags, + no matter how they come in through the markup. + """ + self.assert_soup('


', "


") + self.assert_soup('


', "


") + + def test_head_tag_between_head_and_body(self): + "Prevent recurrence of a bug in the html5lib treebuilder." + content = """ + + foo + +""" + soup = self.soup(content) + assert soup.html.body is not None + self.assertConnectedness(soup) + + def test_multiple_copies_of_a_tag(self): + "Prevent recurrence of a bug in the html5lib treebuilder." + content = """ + + + + + +""" + soup = self.soup(content) + self.assertConnectedness(soup.article) + + def test_basic_namespaces(self): + """Parsers don't need to *understand* namespaces, but at the + very least they should not choke on namespaces or lose + data.""" + + markup = b'4' + soup = self.soup(markup) + assert markup == soup.encode() + html = soup.html + assert 'http://www.w3.org/1999/xhtml' == soup.html['xmlns'] + assert 'http://www.w3.org/1998/Math/MathML' == soup.html['xmlns:mathml'] + assert 'http://www.w3.org/2000/svg' == soup.html['xmlns:svg'] + + def test_multivalued_attribute_value_becomes_list(self): + markup = b'' + soup = self.soup(markup) + assert ['foo', 'bar'] == soup.a['class'] + + # + # Generally speaking, tests below this point are more tests of + # Beautiful Soup than tests of the tree builders. But parsers are + # weird, so we run these tests separately for every tree builder + # to detect any differences between them. + # + + def test_can_parse_unicode_document(self): + # A seemingly innocuous document... but it's in Unicode! And + # it contains characters that can't be represented in the + # encoding found in the declaration! The horror! + markup = 'Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!' + soup = self.soup(markup) + assert 'Sacr\xe9 bleu!' == soup.body.string + + def test_soupstrainer(self): + """Parsers should be able to work with SoupStrainers.""" + strainer = SoupStrainer("b") + soup = self.soup("A bold statement", + parse_only=strainer) + assert soup.decode() == "bold" + + def test_single_quote_attribute_values_become_double_quotes(self): + self.assert_soup("", + '') + + def test_attribute_values_with_nested_quotes_are_left_alone(self): + text = """a""" + self.assert_soup(text) + + def test_attribute_values_with_double_nested_quotes_get_quoted(self): + text = """a""" + soup = self.soup(text) + soup.foo['attr'] = 'Brawls happen at "Bob\'s Bar"' + self.assert_soup( + soup.foo.decode(), + """a""") + + def test_ampersand_in_attribute_value_gets_escaped(self): + self.assert_soup('', + '') + + self.assert_soup( + 'foo', + 'foo') + + def test_escaped_ampersand_in_attribute_value_is_left_alone(self): + self.assert_soup('') + + def test_entities_in_strings_converted_during_parsing(self): + # Both XML and HTML entities are converted to Unicode characters + # during parsing. + text = "

<<sacré bleu!>>

" + expected = "

<<sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!>>

" + self.assert_soup(text, expected) + + def test_smart_quotes_converted_on_the_way_in(self): + # Microsoft smart quotes are converted to Unicode characters during + # parsing. + quote = b"

\x91Foo\x92

" + soup = self.soup(quote) + assert soup.p.string == "\N{LEFT SINGLE QUOTATION MARK}Foo\N{RIGHT SINGLE QUOTATION MARK}" + + def test_non_breaking_spaces_converted_on_the_way_in(self): + soup = self.soup("  ") + assert soup.a.string == "\N{NO-BREAK SPACE}" * 2 + + def test_entities_converted_on_the_way_out(self): + text = "

<<sacré bleu!>>

" + expected = "

<<sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!>>

".encode("utf-8") + soup = self.soup(text) + assert soup.p.encode("utf-8") == expected + + def test_real_iso_8859_document(self): + # Smoke test of interrelated functionality, using an + # easy-to-understand document. + + # Here it is in Unicode. Note that it claims to be in ISO-8859-1. + unicode_html = '

Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!

' + + # That's because we're going to encode it into ISO-8859-1, + # and use that to test. + iso_latin_html = unicode_html.encode("iso-8859-1") + + # Parse the ISO-8859-1 HTML. + soup = self.soup(iso_latin_html) + + # Encode it to UTF-8. + result = soup.encode("utf-8") + + # What do we expect the result to look like? Well, it would + # look like unicode_html, except that the META tag would say + # UTF-8 instead of ISO-8859-1. + expected = unicode_html.replace("ISO-8859-1", "utf-8") + + # And, of course, it would be in UTF-8, not Unicode. + expected = expected.encode("utf-8") + + # Ta-da! + assert result == expected + + def test_real_shift_jis_document(self): + # Smoke test to make sure the parser can handle a document in + # Shift-JIS encoding, without choking. + shift_jis_html = ( + b'
'
+            b'\x82\xb1\x82\xea\x82\xcdShift-JIS\x82\xc5\x83R\x81[\x83f'
+            b'\x83B\x83\x93\x83O\x82\xb3\x82\xea\x82\xbd\x93\xfa\x96{\x8c'
+            b'\xea\x82\xcc\x83t\x83@\x83C\x83\x8b\x82\xc5\x82\xb7\x81B'
+            b'
') + unicode_html = shift_jis_html.decode("shift-jis") + soup = self.soup(unicode_html) + + # Make sure the parse tree is correctly encoded to various + # encodings. + assert soup.encode("utf-8") == unicode_html.encode("utf-8") + assert soup.encode("euc_jp") == unicode_html.encode("euc_jp") + + def test_real_hebrew_document(self): + # A real-world test to make sure we can convert ISO-8859-9 (a + # Hebrew encoding) to UTF-8. + hebrew_document = b'Hebrew (ISO 8859-8) in Visual Directionality

Hebrew (ISO 8859-8) in Visual Directionality

\xed\xe5\xec\xf9' + soup = self.soup( + hebrew_document, from_encoding="iso8859-8") + # Some tree builders call it iso8859-8, others call it iso-8859-9. + # That's not a difference we really care about. + assert soup.original_encoding in ('iso8859-8', 'iso-8859-8') + assert soup.encode('utf-8') == ( + hebrew_document.decode("iso8859-8").encode("utf-8") + ) + + def test_meta_tag_reflects_current_encoding(self): + # Here's the tag saying that a document is + # encoded in Shift-JIS. + meta_tag = ('') + + # Here's a document incorporating that meta tag. + shift_jis_html = ( + '\n%s\n' + '' + 'Shift-JIS markup goes here.') % meta_tag + soup = self.soup(shift_jis_html) + + # Parse the document, and the charset is seemingly unaffected. + parsed_meta = soup.find('meta', {'http-equiv': 'Content-type'}) + content = parsed_meta['content'] + assert 'text/html; charset=x-sjis' == content + + # But that value is actually a ContentMetaAttributeValue object. + assert isinstance(content, ContentMetaAttributeValue) + + # And it will take on a value that reflects its current + # encoding. + assert 'text/html; charset=utf8' == content.encode("utf8") + + # For the rest of the story, see TestSubstitutions in + # test_tree.py. + + def test_html5_style_meta_tag_reflects_current_encoding(self): + # Here's the tag saying that a document is + # encoded in Shift-JIS. + meta_tag = ('') + + # Here's a document incorporating that meta tag. + shift_jis_html = ( + '\n%s\n' + '' + 'Shift-JIS markup goes here.') % meta_tag + soup = self.soup(shift_jis_html) + + # Parse the document, and the charset is seemingly unaffected. + parsed_meta = soup.find('meta', id="encoding") + charset = parsed_meta['charset'] + assert 'x-sjis' == charset + + # But that value is actually a CharsetMetaAttributeValue object. + assert isinstance(charset, CharsetMetaAttributeValue) + + # And it will take on a value that reflects its current + # encoding. + assert 'utf8' == charset.encode("utf8") + + def test_python_specific_encodings_not_used_in_charset(self): + # You can encode an HTML document using a Python-specific + # encoding, but that encoding won't be mentioned _inside_ the + # resulting document. Instead, the document will appear to + # have no encoding. + for markup in [ + b'' + b'' + ]: + soup = self.soup(markup) + for encoding in PYTHON_SPECIFIC_ENCODINGS: + if encoding in ( + 'idna', 'mbcs', 'oem', 'undefined', + 'string_escape', 'string-escape' + ): + # For one reason or another, these will raise an + # exception if we actually try to use them, so don't + # bother. + continue + encoded = soup.encode(encoding) + assert b'meta charset=""' in encoded + assert encoding.encode("ascii") not in encoded + + def test_tag_with_no_attributes_can_have_attributes_added(self): + data = self.soup("text") + data.a['foo'] = 'bar' + assert 'text' == data.a.decode() + + def test_closing_tag_with_no_opening_tag(self): + # Without BeautifulSoup.open_tag_counter, the tag will + # cause _popToTag to be called over and over again as we look + # for a tag that wasn't there. The result is that 'text2' + # will show up outside the body of the document. + soup = self.soup("

text1

text2
") + assert "

text1

text2
" == soup.body.decode() + + def test_worst_case(self): + """Test the worst case (currently) for linking issues.""" + + soup = self.soup(BAD_DOCUMENT) + self.linkage_validator(soup) + + +class XMLTreeBuilderSmokeTest(TreeBuilderSmokeTest): + + def test_pickle_and_unpickle_identity(self): + # Pickling a tree, then unpickling it, yields a tree identical + # to the original. + tree = self.soup("foo") + dumped = pickle.dumps(tree, 2) + loaded = pickle.loads(dumped) + assert loaded.__class__ == BeautifulSoup + assert loaded.decode() == tree.decode() + + def test_docstring_generated(self): + soup = self.soup("") + assert soup.encode() == b'\n' + + def test_xml_declaration(self): + markup = b"""\n""" + soup = self.soup(markup) + assert markup == soup.encode("utf8") + + def test_python_specific_encodings_not_used_in_xml_declaration(self): + # You can encode an XML document using a Python-specific + # encoding, but that encoding won't be mentioned _inside_ the + # resulting document. + markup = b"""\n""" + soup = self.soup(markup) + for encoding in PYTHON_SPECIFIC_ENCODINGS: + if encoding in ( + 'idna', 'mbcs', 'oem', 'undefined', + 'string_escape', 'string-escape' + ): + # For one reason or another, these will raise an + # exception if we actually try to use them, so don't + # bother. + continue + encoded = soup.encode(encoding) + assert b'' in encoded + assert encoding.encode("ascii") not in encoded + + def test_processing_instruction(self): + markup = b"""\n""" + soup = self.soup(markup) + assert markup == soup.encode("utf8") + + def test_real_xhtml_document(self): + """A real XHTML document should come out *exactly* the same as it went in.""" + markup = b""" + + +Hello. +Goodbye. +""" + soup = self.soup(markup) + assert soup.encode("utf-8") == markup + + def test_nested_namespaces(self): + doc = b""" + + + + + +""" + soup = self.soup(doc) + assert doc == soup.encode() + + def test_formatter_processes_script_tag_for_xml_documents(self): + doc = """ + +""" + soup = BeautifulSoup(doc, "lxml-xml") + # lxml would have stripped this while parsing, but we can add + # it later. + soup.script.string = 'console.log("< < hey > > ");' + encoded = soup.encode() + assert b"< < hey > >" in encoded + + def test_can_parse_unicode_document(self): + markup = 'Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!' + soup = self.soup(markup) + assert 'Sacr\xe9 bleu!' == soup.root.string + + def test_can_parse_unicode_document_begining_with_bom(self): + markup = '\N{BYTE ORDER MARK}Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!' + soup = self.soup(markup) + assert 'Sacr\xe9 bleu!' == soup.root.string + + def test_popping_namespaced_tag(self): + markup = 'b2012-07-02T20:33:42Zcd' + soup = self.soup(markup) + assert str(soup.rss) == markup + + def test_docstring_includes_correct_encoding(self): + soup = self.soup("") + assert soup.encode("latin1") == b'\n' + + def test_large_xml_document(self): + """A large XML document should come out the same as it went in.""" + markup = (b'\n' + + b'0' * (2**12) + + b'') + soup = self.soup(markup) + assert soup.encode("utf-8") == markup + + def test_tags_are_empty_element_if_and_only_if_they_are_empty(self): + self.assert_soup("

", "

") + self.assert_soup("

foo

") + + def test_namespaces_are_preserved(self): + markup = 'This tag is in the a namespaceThis tag is in the b namespace' + soup = self.soup(markup) + root = soup.root + assert "http://example.com/" == root['xmlns:a'] + assert "http://example.net/" == root['xmlns:b'] + + def test_closing_namespaced_tag(self): + markup = '

20010504

' + soup = self.soup(markup) + assert str(soup.p) == markup + + def test_namespaced_attributes(self): + markup = '' + soup = self.soup(markup) + assert str(soup.foo) == markup + + def test_namespaced_attributes_xml_namespace(self): + markup = 'bar' + soup = self.soup(markup) + assert str(soup.foo) == markup + + def test_find_by_prefixed_name(self): + doc = """ +foo + bar + baz + +""" + soup = self.soup(doc) + + # There are three tags. + assert 3 == len(soup.find_all('tag')) + + # But two of them are ns1:tag and one of them is ns2:tag. + assert 2 == len(soup.find_all('ns1:tag')) + assert 1 == len(soup.find_all('ns2:tag')) + + assert 1, len(soup.find_all('ns2:tag', key='value')) + assert 3, len(soup.find_all(['ns1:tag', 'ns2:tag'])) + + def test_copy_tag_preserves_namespace(self): + xml = """ +""" + + soup = self.soup(xml) + tag = soup.document + duplicate = copy.copy(tag) + + # The two tags have the same namespace prefix. + assert tag.prefix == duplicate.prefix + + def test_worst_case(self): + """Test the worst case (currently) for linking issues.""" + + soup = self.soup(BAD_DOCUMENT) + self.linkage_validator(soup) + + +class HTML5TreeBuilderSmokeTest(HTMLTreeBuilderSmokeTest): + """Smoke test for a tree builder that supports HTML5.""" + + def test_real_xhtml_document(self): + # Since XHTML is not HTML5, HTML5 parsers are not tested to handle + # XHTML documents in any particular way. + pass + + def test_html_tags_have_namespace(self): + markup = "" + soup = self.soup(markup) + assert "http://www.w3.org/1999/xhtml" == soup.a.namespace + + def test_svg_tags_have_namespace(self): + markup = '' + soup = self.soup(markup) + namespace = "http://www.w3.org/2000/svg" + assert namespace == soup.svg.namespace + assert namespace == soup.circle.namespace + + + def test_mathml_tags_have_namespace(self): + markup = '5' + soup = self.soup(markup) + namespace = 'http://www.w3.org/1998/Math/MathML' + assert namespace == soup.math.namespace + assert namespace == soup.msqrt.namespace + + def test_xml_declaration_becomes_comment(self): + markup = '' + soup = self.soup(markup) + assert isinstance(soup.contents[0], Comment) + assert soup.contents[0] == '?xml version="1.0" encoding="utf-8"?' + assert "html" == soup.contents[0].next_element.name diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/__init__.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..934d0301 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/__init__.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder.cpython-38.pyc new file mode 100644 index 00000000..180c848a Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-38.pyc new file mode 100644 index 00000000..9b160962 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_css.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_css.cpython-38.pyc new file mode 100644 index 00000000..a7166ddd Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_css.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_dammit.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_dammit.cpython-38.pyc new file mode 100644 index 00000000..e2ed06a2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_dammit.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_docs.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_docs.cpython-38.pyc new file mode 100644 index 00000000..cef1f44c Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_docs.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_element.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_element.cpython-38.pyc new file mode 100644 index 00000000..69778193 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_element.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_formatter.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_formatter.cpython-38.pyc new file mode 100644 index 00000000..46ddb603 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_formatter.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_fuzz.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_fuzz.cpython-38.pyc new file mode 100644 index 00000000..50a1aff0 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_fuzz.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-38.pyc new file mode 100644 index 00000000..d7032663 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-38.pyc new file mode 100644 index 00000000..317b43e4 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_lxml.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_lxml.cpython-38.pyc new file mode 100644 index 00000000..f5ee084d Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_lxml.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_navigablestring.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_navigablestring.cpython-38.pyc new file mode 100644 index 00000000..1c8b0052 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_navigablestring.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-38.pyc new file mode 100644 index 00000000..29cfc0cc Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_soup.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_soup.cpython-38.pyc new file mode 100644 index 00000000..9e92012b Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_soup.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tag.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tag.cpython-38.pyc new file mode 100644 index 00000000..f3b3d1f3 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tag.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tree.cpython-38.pyc b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tree.cpython-38.pyc new file mode 100644 index 00000000..cc86156f Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/__pycache__/test_tree.cpython-38.pyc differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase b/dbtzin/lib/python3.8/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase new file mode 100644 index 00000000..b34be8b1 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase @@ -0,0 +1 @@ +

\ No newline at end of file diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase b/dbtzin/lib/python3.8/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase new file mode 100644 index 00000000..0fe66dd2 Binary files /dev/null and b/dbtzin/lib/python3.8/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase differ diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase b/dbtzin/lib/python3.8/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase new file mode 100644 index 00000000..367106c7 --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase @@ -0,0 +1,2 @@ + +' + "clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896", + + # b'ñ' + "clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224", + + #
, some ^@ characters, some tags. + "clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744", + + # Nested table + "crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08" + ] + ) + def test_html5lib_parse_errors(self, filename): + markup = self.__markup(filename) + print(BeautifulSoup(markup, 'html5lib').encode()) + + def __markup(self, filename): + if not filename.endswith(self.TESTCASE_SUFFIX): + filename += self.TESTCASE_SUFFIX + this_dir = os.path.split(__file__)[0] + path = os.path.join(this_dir, 'fuzz', filename) + return open(path, 'rb').read() diff --git a/dbtzin/lib/python3.8/site-packages/bs4/tests/test_html5lib.py b/dbtzin/lib/python3.8/site-packages/bs4/tests/test_html5lib.py new file mode 100644 index 00000000..4197720f --- /dev/null +++ b/dbtzin/lib/python3.8/site-packages/bs4/tests/test_html5lib.py @@ -0,0 +1,224 @@ +"""Tests to ensure that the html5lib tree builder generates good trees.""" + +import pytest +import warnings + +from bs4 import BeautifulSoup +from bs4.element import SoupStrainer +from . import ( + HTML5LIB_PRESENT, + HTML5TreeBuilderSmokeTest, + SoupTest, +) + +@pytest.mark.skipif( + not HTML5LIB_PRESENT, + reason="html5lib seems not to be present, not testing its tree builder." +) +class TestHTML5LibBuilder(SoupTest, HTML5TreeBuilderSmokeTest): + """See ``HTML5TreeBuilderSmokeTest``.""" + + @property + def default_builder(self): + from bs4.builder import HTML5TreeBuilder + return HTML5TreeBuilder + + def test_soupstrainer(self): + # The html5lib tree builder does not support SoupStrainers. + strainer = SoupStrainer("b") + markup = "

A bold statement.

" + with warnings.catch_warnings(record=True) as w: + soup = BeautifulSoup(markup, "html5lib", parse_only=strainer) + assert soup.decode() == self.document_for(markup) + + [warning] = w + assert warning.filename == __file__ + assert "the html5lib tree builder doesn't support parse_only" in str(warning.message) + + def test_correctly_nested_tables(self): + """html5lib inserts tags where other parsers don't.""" + markup = ('
' + '' + "') + + self.assert_soup( + markup, + '
Here's another table:" + '' + '' + '
foo
Here\'s another table:' + '
foo
' + '
') + + self.assert_soup( + "" + "" + "
Foo
Bar
Baz
") + + def test_xml_declaration_followed_by_doctype(self): + markup = ''' + + + + + +

foo

+ +''' + soup = self.soup(markup) + # Verify that we can reach the

tag; this means the tree is connected. + assert b"

foo

" == soup.p.encode() + + def test_reparented_markup(self): + markup = '

foo

\n

bar

' + soup = self.soup(markup) + assert "

foo

\n

bar

" == soup.body.decode() + assert 2 == len(soup.find_all('p')) + + + def test_reparented_markup_ends_with_whitespace(self): + markup = '

foo

\n

bar

\n' + soup = self.soup(markup) + assert "

foo

\n

bar

\n" == soup.body.decode() + assert 2 == len(soup.find_all('p')) + + def test_reparented_markup_containing_identical_whitespace_nodes(self): + """Verify that we keep the two whitespace nodes in this + document distinct when reparenting the adjacent tags. + """ + markup = '
' + soup = self.soup(markup) + space1, space2 = soup.find_all(string=' ') + tbody1, tbody2 = soup.find_all('tbody') + assert space1.next_element is tbody1 + assert tbody2.next_element is space2 + + def test_reparented_markup_containing_children(self): + markup = '' + soup = self.soup(markup) + noscript = soup.noscript + assert "target" == noscript.next_element + target = soup.find(string='target') + + # The 'aftermath' string was duplicated; we want the second one. + final_aftermath = soup.find_all(string='aftermath')[-1] + + # The