From a23bcf1497c56a8c0b3fc4d5cd46961d69e2c326 Mon Sep 17 00:00:00 2001 From: Rok Garbas Date: Wed, 7 Oct 2020 08:58:17 +0200 Subject: [PATCH] `channel-diff` script (#206) --- import-scripts/default.nix | 1 + import-scripts/import_scripts/channel.py | 137 ++++- import-scripts/poetry.lock | 715 ++++++++++++----------- import-scripts/pyproject.toml | 4 +- 4 files changed, 482 insertions(+), 375 deletions(-) diff --git a/import-scripts/default.nix b/import-scripts/default.nix index 111b275..fd5fae4 100644 --- a/import-scripts/default.nix +++ b/import-scripts/default.nix @@ -25,6 +25,7 @@ mkPoetryApplication { ''; postInstall = '' wrapProgram $out/bin/import-channel --set INDEX_SCHEMA_VERSION "${version}" + wrapProgram $out/bin/channel-diff --set INDEX_SCHEMA_VERSION "${version}" ''; shellHook = '' cd import-scripts/ diff --git a/import-scripts/import_scripts/channel.py b/import-scripts/import_scripts/channel.py index 549e8b7..70359ad 100644 --- a/import-scripts/import_scripts/channel.py +++ b/import-scripts/import_scripts/channel.py @@ -3,6 +3,7 @@ import botocore # type: ignore import botocore.client # type: ignore import click import click_log # type: ignore +import dictdiffer # type: ignore import elasticsearch # type: ignore import elasticsearch.helpers # type: ignore import json @@ -25,6 +26,7 @@ click_log.basic_config(logger) S3_BUCKET = "nix-releases" CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) INDEX_SCHEMA_VERSION = os.environ.get("INDEX_SCHEMA_VERSION", 0) +DIFF_OUTPUT = ["json", "stats"] CHANNELS = { "unstable": "nixos/unstable/nixos-21.03pre", "19.09": "nixos/19.09/nixos-19.09.", @@ -389,7 +391,7 @@ def remove_attr_set(name): return name -def get_packages(evaluation, evaluation_builds): +def get_packages_raw(evaluation): logger.debug( f"get_packages: Retriving list of packages for '{evaluation['git_revision']}' revision" ) @@ -401,15 +403,14 @@ def get_packages(evaluation, evaluation_builds): check=True, ) packages = json.loads(result.stdout).items() - packages = list(packages) + return list(packages) + + +def get_packages(evaluation, evaluation_builds): + packages = list(get_packages_raw(evaluation)) def gen(): for attr_name, data in packages: - - position = data["meta"].get("position") - if position and position.startswith("/nix/store"): - position = position[44:] - licenses = data["meta"].get("license") if licenses: if type(licenses) == str: @@ -462,6 +463,10 @@ def get_packages(evaluation, evaluation_builds): } ) + position = data["meta"].get("position") + if position and position.startswith("/nix/store"): + position = position[44:] + package_attr_name_query = list(parse_query(attr_name)) package_pname = remove_attr_set(data["pname"]) package_description = data["meta"].get("description") @@ -495,7 +500,10 @@ def get_packages(evaluation, evaluation_builds): return len(packages), gen -def get_options(evaluation): +def get_options_raw(evaluation): + logger.debug( + f"get_packages: Retriving list of options for '{evaluation['git_revision']}' revision" + ) result = subprocess.run( shlex.split( f"nix-build --no-out-link -A options -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/{evaluation['git_revision']}.tar.gz" @@ -509,7 +517,11 @@ def get_options(evaluation): if os.path.exists(options_file): with open(options_file) as f: options = json.load(f).items() - options = list(options) + return list(options) + + +def get_options(evaluation): + options = get_options_raw(evaluation) def gen(): for name, option in options: @@ -632,13 +644,7 @@ def write(unit, es, index_name, number_of_items, item_generator): click.echo(f"Indexed {successes}/{number_of_items} {unit}") -@click.command() -@click.option("-u", "--es-url", help="Elasticsearch connection url.") -@click.option("-c", "--channel", type=click.Choice(CHANNELS.keys()), help="Channel.") -@click.option("-f", "--force", is_flag=True, help="Force channel recreation.") -@click.option("-v", "--verbose", count=True) -def run(es_url, channel, force, verbose): - +def setup_logging(verbose): logging_level = "CRITICAL" if verbose == 1: logging_level = "WARNING" @@ -649,6 +655,15 @@ def run(es_url, channel, force, verbose): logger.debug(f"Verbosity is {verbose}") logger.debug(f"Logging set to {logging_level}") + +@click.command() +@click.option("-u", "--es-url", help="Elasticsearch connection url.") +@click.option("-c", "--channel", type=click.Choice(CHANNELS.keys()), help="Channel.") +@click.option("-f", "--force", is_flag=True, help="Force channel recreation.") +@click.option("-v", "--verbose", count=True) +def run_import(es_url, channel, force, verbose): + setup_logging(verbose) + evaluation_packages = get_last_evaluation(CHANNELS[channel]) evaluation_options = get_last_evaluation(CHANNELS[channel]) evaluation_packages_builds = ( @@ -674,5 +689,93 @@ def run(es_url, channel, force, verbose): update_alias(es, alias_name, index_name) +def prepare_items(key, total, func): + logger.info(f"Preparing items ({key})...") + return {item[key]: item for item in func()} + + +def get_packages_diff(evaluation): + for attr_name, data in get_packages_raw(evaluation): + data_cmp = dict(attr_name=attr_name, version=data.get("version"),) + yield attr_name, data_cmp, data + + +def get_options_diff(evaluation): + for name, data in get_options_raw(evaluation): + data_cmp = dict(name=name, type=data.get("type"), default=data.get("default"),) + yield name, data_cmp, data + + +def create_diff(type_, items_from, items_to): + logger.debug(f"Starting to diff {type_}...") + return dict( + added=[item for key, item in items_to.items() if key not in items_from.keys()], + removed=[ + item for key, item in items_from.items() if key not in items_to.keys() + ], + updated=[ + ( + list(dictdiffer.diff(items_from[key][0], items_to[key][0])), + items_from[key], + items_to[key], + ) + for key in set(items_from.keys()).intersection(set(items_to.keys())) + if items_from[key][0] != items_to[key][0] + ], + ) + + +@click.command() +@click.option("-v", "--verbose", count=True) +@click.option("-o", "--output", default="stats", type=click.Choice(DIFF_OUTPUT)) +@click.argument("channel_from", type=click.Choice(CHANNELS.keys())) +@click.argument("channel_to", type=click.Choice(CHANNELS.keys())) +def run_diff(channel_from, channel_to, output, verbose): + setup_logging(verbose) + + # TODO: channel_from and channel_to should not be the same + + evaluation_from = get_last_evaluation(CHANNELS[channel_from]) + evaluation_to = get_last_evaluation(CHANNELS[channel_to]) + + packages_from = { + key: (item, item_raw) + for key, item, item_raw in get_packages_diff(evaluation_from) + } + packages_to = { + key: (item, item_raw) + for key, item, item_raw in get_packages_diff(evaluation_to) + } + + options_from = { + key: (item, item_raw) + for key, item, item_raw in get_options_diff(evaluation_from) + } + options_to = { + key: (item, item_raw) for key, item, item_raw in get_options_diff(evaluation_to) + } + + packages_diff = create_diff("packages", packages_from, packages_to) + options_diff = create_diff("options", options_from, options_to) + + if output == "stats": + click.echo("Packages:") + click.echo(f" All in {channel_from}: {len(packages_from)}") + click.echo(f" All in {channel_to}: {len(packages_to)}") + click.echo(f" Added: {len(packages_diff['added'])}") + click.echo(f" Removed: {len(packages_diff['removed'])}") + click.echo(f" Updated: {len(packages_diff['updated'])}") + click.echo("Options:") + click.echo(f" All in {channel_from}: {len(options_from)}") + click.echo(f" All in {channel_to}: {len(options_to)}") + click.echo(f" Added: {len(options_diff['added'])}") + click.echo(f" Removed: {len(options_diff['removed'])}") + click.echo(f" Updated: {len(options_diff['updated'])}") + elif output == "json": + click.echo(json.dumps(dict(packages=packages_diff, options=options_diff,))) + else: + click.echo(f"ERROR: unknown output {output}") + + if __name__ == "__main__": - run() + run_diff() diff --git a/import-scripts/poetry.lock b/import-scripts/poetry.lock index 166623f..394078f 100644 --- a/import-scripts/poetry.lock +++ b/import-scripts/poetry.lock @@ -30,13 +30,13 @@ description = "Classes Without Boilerplate" name = "attrs" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "19.3.0" +version = "20.2.0" [package.extras] -azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] -dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] -docs = ["sphinx", "zope.interface"] -tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "sphinx-rtd-theme", "pre-commit"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +tests_no_zope = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] [[package]] category = "dev" @@ -73,250 +73,257 @@ description = "The AWS SDK for Python" name = "boto3" optional = false python-versions = "*" -version = "1.14.5" +version = "1.15.12" [package.dependencies] -botocore = ">=1.17.5,<1.18.0" +botocore = ">=1.18.12,<1.19.0" jmespath = ">=0.7.1,<1.0.0" s3transfer = ">=0.3.0,<0.4.0" [[package]] category = "dev" -description = "Type annotations for boto3 1.14.6, generated by mypy-boto3-buider 2.2.0" +description = "Type annotations for boto3 1.15.12, generated by mypy-boto3-buider 3.1.0" name = "boto3-stubs" optional = false python-versions = ">=3.6" -version = "1.14.6.0" - -[package.dependencies] -mypy-boto3 = "1.14.6.0" +version = "1.15.12.0" [package.extras] -accessanalyzer = ["mypy-boto3-accessanalyzer (1.14.6.0)"] -acm = ["mypy-boto3-acm (1.14.6.0)"] -acm-pca = ["mypy-boto3-acm-pca (1.14.6.0)"] -alexaforbusiness = ["mypy-boto3-alexaforbusiness (1.14.6.0)"] -all = ["mypy-boto3-accessanalyzer (1.14.6.0)", "mypy-boto3-acm (1.14.6.0)", "mypy-boto3-acm-pca (1.14.6.0)", "mypy-boto3-alexaforbusiness (1.14.6.0)", "mypy-boto3-amplify (1.14.6.0)", "mypy-boto3-apigateway (1.14.6.0)", "mypy-boto3-apigatewaymanagementapi (1.14.6.0)", "mypy-boto3-apigatewayv2 (1.14.6.0)", "mypy-boto3-appconfig (1.14.6.0)", "mypy-boto3-application-autoscaling (1.14.6.0)", "mypy-boto3-application-insights (1.14.6.0)", "mypy-boto3-appmesh (1.14.6.0)", "mypy-boto3-appstream (1.14.6.0)", "mypy-boto3-appsync (1.14.6.0)", "mypy-boto3-athena (1.14.6.0)", "mypy-boto3-autoscaling (1.14.6.0)", "mypy-boto3-autoscaling-plans (1.14.6.0)", "mypy-boto3-backup (1.14.6.0)", "mypy-boto3-batch (1.14.6.0)", "mypy-boto3-budgets (1.14.6.0)", "mypy-boto3-ce (1.14.6.0)", "mypy-boto3-chime (1.14.6.0)", "mypy-boto3-cloud9 (1.14.6.0)", "mypy-boto3-clouddirectory (1.14.6.0)", "mypy-boto3-cloudformation (1.14.6.0)", "mypy-boto3-cloudfront (1.14.6.0)", "mypy-boto3-cloudhsm (1.14.6.0)", "mypy-boto3-cloudhsmv2 (1.14.6.0)", "mypy-boto3-cloudsearch (1.14.6.0)", "mypy-boto3-cloudsearchdomain (1.14.6.0)", "mypy-boto3-cloudtrail (1.14.6.0)", "mypy-boto3-cloudwatch (1.14.6.0)", "mypy-boto3-codeartifact (1.14.6.0)", "mypy-boto3-codebuild (1.14.6.0)", "mypy-boto3-codecommit (1.14.6.0)", "mypy-boto3-codedeploy (1.14.6.0)", "mypy-boto3-codeguru-reviewer (1.14.6.0)", "mypy-boto3-codeguruprofiler (1.14.6.0)", "mypy-boto3-codepipeline (1.14.6.0)", "mypy-boto3-codestar (1.14.6.0)", "mypy-boto3-codestar-connections (1.14.6.0)", "mypy-boto3-codestar-notifications (1.14.6.0)", "mypy-boto3-cognito-identity (1.14.6.0)", "mypy-boto3-cognito-idp (1.14.6.0)", "mypy-boto3-cognito-sync (1.14.6.0)", "mypy-boto3-comprehend (1.14.6.0)", "mypy-boto3-comprehendmedical (1.14.6.0)", "mypy-boto3-compute-optimizer (1.14.6.0)", "mypy-boto3-config (1.14.6.0)", "mypy-boto3-connect (1.14.6.0)", "mypy-boto3-connectparticipant (1.14.6.0)", "mypy-boto3-cur (1.14.6.0)", "mypy-boto3-dataexchange (1.14.6.0)", "mypy-boto3-datapipeline (1.14.6.0)", "mypy-boto3-datasync (1.14.6.0)", "mypy-boto3-dax (1.14.6.0)", "mypy-boto3-detective (1.14.6.0)", "mypy-boto3-devicefarm (1.14.6.0)", "mypy-boto3-directconnect (1.14.6.0)", "mypy-boto3-discovery (1.14.6.0)", "mypy-boto3-dlm (1.14.6.0)", "mypy-boto3-dms (1.14.6.0)", "mypy-boto3-docdb (1.14.6.0)", "mypy-boto3-ds (1.14.6.0)", "mypy-boto3-dynamodb (1.14.6.0)", "mypy-boto3-dynamodbstreams (1.14.6.0)", "mypy-boto3-ebs (1.14.6.0)", "mypy-boto3-ec2 (1.14.6.0)", "mypy-boto3-ec2-instance-connect (1.14.6.0)", "mypy-boto3-ecr (1.14.6.0)", "mypy-boto3-ecs (1.14.6.0)", "mypy-boto3-efs (1.14.6.0)", "mypy-boto3-eks (1.14.6.0)", "mypy-boto3-elastic-inference (1.14.6.0)", "mypy-boto3-elasticache (1.14.6.0)", "mypy-boto3-elasticbeanstalk (1.14.6.0)", "mypy-boto3-elastictranscoder (1.14.6.0)", "mypy-boto3-elb (1.14.6.0)", "mypy-boto3-elbv2 (1.14.6.0)", "mypy-boto3-emr (1.14.6.0)", "mypy-boto3-es (1.14.6.0)", "mypy-boto3-events (1.14.6.0)", "mypy-boto3-firehose (1.14.6.0)", "mypy-boto3-fms (1.14.6.0)", "mypy-boto3-forecast (1.14.6.0)", "mypy-boto3-forecastquery (1.14.6.0)", "mypy-boto3-frauddetector (1.14.6.0)", "mypy-boto3-fsx (1.14.6.0)", "mypy-boto3-gamelift (1.14.6.0)", "mypy-boto3-glacier (1.14.6.0)", "mypy-boto3-globalaccelerator (1.14.6.0)", "mypy-boto3-glue (1.14.6.0)", "mypy-boto3-greengrass (1.14.6.0)", "mypy-boto3-groundstation (1.14.6.0)", "mypy-boto3-guardduty (1.14.6.0)", "mypy-boto3-health (1.14.6.0)", "mypy-boto3-iam (1.14.6.0)", "mypy-boto3-imagebuilder (1.14.6.0)", "mypy-boto3-importexport (1.14.6.0)", "mypy-boto3-inspector (1.14.6.0)", "mypy-boto3-iot (1.14.6.0)", "mypy-boto3-iot-data (1.14.6.0)", "mypy-boto3-iot-jobs-data (1.14.6.0)", "mypy-boto3-iot1click-devices (1.14.6.0)", "mypy-boto3-iot1click-projects (1.14.6.0)", "mypy-boto3-iotanalytics (1.14.6.0)", "mypy-boto3-iotevents (1.14.6.0)", "mypy-boto3-iotevents-data (1.14.6.0)", "mypy-boto3-iotsecuretunneling (1.14.6.0)", "mypy-boto3-iotsitewise (1.14.6.0)", "mypy-boto3-iotthingsgraph (1.14.6.0)", "mypy-boto3-kafka (1.14.6.0)", "mypy-boto3-kendra (1.14.6.0)", "mypy-boto3-kinesis (1.14.6.0)", "mypy-boto3-kinesis-video-archived-media (1.14.6.0)", "mypy-boto3-kinesis-video-media (1.14.6.0)", "mypy-boto3-kinesis-video-signaling (1.14.6.0)", "mypy-boto3-kinesisanalytics (1.14.6.0)", "mypy-boto3-kinesisanalyticsv2 (1.14.6.0)", "mypy-boto3-kinesisvideo (1.14.6.0)", "mypy-boto3-kms (1.14.6.0)", "mypy-boto3-lakeformation (1.14.6.0)", "mypy-boto3-lambda (1.14.6.0)", "mypy-boto3-lex-models (1.14.6.0)", "mypy-boto3-lex-runtime (1.14.6.0)", "mypy-boto3-license-manager (1.14.6.0)", "mypy-boto3-lightsail (1.14.6.0)", "mypy-boto3-logs (1.14.6.0)", "mypy-boto3-machinelearning (1.14.6.0)", "mypy-boto3-macie (1.14.6.0)", "mypy-boto3-macie2 (1.14.6.0)", "mypy-boto3-managedblockchain (1.14.6.0)", "mypy-boto3-marketplace-catalog (1.14.6.0)", "mypy-boto3-marketplace-entitlement (1.14.6.0)", "mypy-boto3-marketplacecommerceanalytics (1.14.6.0)", "mypy-boto3-mediaconnect (1.14.6.0)", "mypy-boto3-mediaconvert (1.14.6.0)", "mypy-boto3-medialive (1.14.6.0)", "mypy-boto3-mediapackage (1.14.6.0)", "mypy-boto3-mediapackage-vod (1.14.6.0)", "mypy-boto3-mediastore (1.14.6.0)", "mypy-boto3-mediastore-data (1.14.6.0)", "mypy-boto3-mediatailor (1.14.6.0)", "mypy-boto3-meteringmarketplace (1.14.6.0)", "mypy-boto3-mgh (1.14.6.0)", "mypy-boto3-migrationhub-config (1.14.6.0)", "mypy-boto3-mobile (1.14.6.0)", "mypy-boto3-mq (1.14.6.0)", "mypy-boto3-mturk (1.14.6.0)", "mypy-boto3-neptune (1.14.6.0)", "mypy-boto3-networkmanager (1.14.6.0)", "mypy-boto3-opsworks (1.14.6.0)", "mypy-boto3-opsworkscm (1.14.6.0)", "mypy-boto3-organizations (1.14.6.0)", "mypy-boto3-outposts (1.14.6.0)", "mypy-boto3-personalize (1.14.6.0)", "mypy-boto3-personalize-events (1.14.6.0)", "mypy-boto3-personalize-runtime (1.14.6.0)", "mypy-boto3-pi (1.14.6.0)", "mypy-boto3-pinpoint (1.14.6.0)", "mypy-boto3-pinpoint-email (1.14.6.0)", "mypy-boto3-pinpoint-sms-voice (1.14.6.0)", "mypy-boto3-polly (1.14.6.0)", "mypy-boto3-pricing (1.14.6.0)", "mypy-boto3-qldb (1.14.6.0)", "mypy-boto3-qldb-session (1.14.6.0)", "mypy-boto3-quicksight (1.14.6.0)", "mypy-boto3-ram (1.14.6.0)", "mypy-boto3-rds (1.14.6.0)", "mypy-boto3-rds-data (1.14.6.0)", "mypy-boto3-redshift (1.14.6.0)", "mypy-boto3-rekognition (1.14.6.0)", "mypy-boto3-resource-groups (1.14.6.0)", "mypy-boto3-resourcegroupstaggingapi (1.14.6.0)", "mypy-boto3-robomaker (1.14.6.0)", "mypy-boto3-route53 (1.14.6.0)", "mypy-boto3-route53domains (1.14.6.0)", "mypy-boto3-route53resolver (1.14.6.0)", "mypy-boto3-s3 (1.14.6.0)", "mypy-boto3-s3control (1.14.6.0)", "mypy-boto3-sagemaker (1.14.6.0)", "mypy-boto3-sagemaker-a2i-runtime (1.14.6.0)", "mypy-boto3-sagemaker-runtime (1.14.6.0)", "mypy-boto3-savingsplans (1.14.6.0)", "mypy-boto3-schemas (1.14.6.0)", "mypy-boto3-sdb (1.14.6.0)", "mypy-boto3-secretsmanager (1.14.6.0)", "mypy-boto3-securityhub (1.14.6.0)", "mypy-boto3-serverlessrepo (1.14.6.0)", "mypy-boto3-service-quotas (1.14.6.0)", "mypy-boto3-servicecatalog (1.14.6.0)", "mypy-boto3-servicediscovery (1.14.6.0)", "mypy-boto3-ses (1.14.6.0)", "mypy-boto3-sesv2 (1.14.6.0)", "mypy-boto3-shield (1.14.6.0)", "mypy-boto3-signer (1.14.6.0)", "mypy-boto3-sms (1.14.6.0)", "mypy-boto3-sms-voice (1.14.6.0)", "mypy-boto3-snowball (1.14.6.0)", "mypy-boto3-sns (1.14.6.0)", "mypy-boto3-sqs (1.14.6.0)", "mypy-boto3-ssm (1.14.6.0)", "mypy-boto3-sso (1.14.6.0)", "mypy-boto3-sso-oidc (1.14.6.0)", "mypy-boto3-stepfunctions (1.14.6.0)", "mypy-boto3-storagegateway (1.14.6.0)", "mypy-boto3-sts (1.14.6.0)", "mypy-boto3-support (1.14.6.0)", "mypy-boto3-swf (1.14.6.0)", "mypy-boto3-synthetics (1.14.6.0)", "mypy-boto3-textract (1.14.6.0)", "mypy-boto3-transcribe (1.14.6.0)", "mypy-boto3-transfer (1.14.6.0)", "mypy-boto3-translate (1.14.6.0)", "mypy-boto3-waf (1.14.6.0)", "mypy-boto3-waf-regional (1.14.6.0)", "mypy-boto3-wafv2 (1.14.6.0)", "mypy-boto3-workdocs (1.14.6.0)", "mypy-boto3-worklink (1.14.6.0)", "mypy-boto3-workmail (1.14.6.0)", "mypy-boto3-workmailmessageflow (1.14.6.0)", "mypy-boto3-workspaces (1.14.6.0)", "mypy-boto3-xray (1.14.6.0)"] -amplify = ["mypy-boto3-amplify (1.14.6.0)"] -apigateway = ["mypy-boto3-apigateway (1.14.6.0)"] -apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (1.14.6.0)"] -apigatewayv2 = ["mypy-boto3-apigatewayv2 (1.14.6.0)"] -appconfig = ["mypy-boto3-appconfig (1.14.6.0)"] -application-autoscaling = ["mypy-boto3-application-autoscaling (1.14.6.0)"] -application-insights = ["mypy-boto3-application-insights (1.14.6.0)"] -appmesh = ["mypy-boto3-appmesh (1.14.6.0)"] -appstream = ["mypy-boto3-appstream (1.14.6.0)"] -appsync = ["mypy-boto3-appsync (1.14.6.0)"] -athena = ["mypy-boto3-athena (1.14.6.0)"] -autoscaling = ["mypy-boto3-autoscaling (1.14.6.0)"] -autoscaling-plans = ["mypy-boto3-autoscaling-plans (1.14.6.0)"] -backup = ["mypy-boto3-backup (1.14.6.0)"] -batch = ["mypy-boto3-batch (1.14.6.0)"] -budgets = ["mypy-boto3-budgets (1.14.6.0)"] -ce = ["mypy-boto3-ce (1.14.6.0)"] -chime = ["mypy-boto3-chime (1.14.6.0)"] -cloud9 = ["mypy-boto3-cloud9 (1.14.6.0)"] -clouddirectory = ["mypy-boto3-clouddirectory (1.14.6.0)"] -cloudformation = ["mypy-boto3-cloudformation (1.14.6.0)"] -cloudfront = ["mypy-boto3-cloudfront (1.14.6.0)"] -cloudhsm = ["mypy-boto3-cloudhsm (1.14.6.0)"] -cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (1.14.6.0)"] -cloudsearch = ["mypy-boto3-cloudsearch (1.14.6.0)"] -cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (1.14.6.0)"] -cloudtrail = ["mypy-boto3-cloudtrail (1.14.6.0)"] -cloudwatch = ["mypy-boto3-cloudwatch (1.14.6.0)"] -codeartifact = ["mypy-boto3-codeartifact (1.14.6.0)"] -codebuild = ["mypy-boto3-codebuild (1.14.6.0)"] -codecommit = ["mypy-boto3-codecommit (1.14.6.0)"] -codedeploy = ["mypy-boto3-codedeploy (1.14.6.0)"] -codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (1.14.6.0)"] -codeguruprofiler = ["mypy-boto3-codeguruprofiler (1.14.6.0)"] -codepipeline = ["mypy-boto3-codepipeline (1.14.6.0)"] -codestar = ["mypy-boto3-codestar (1.14.6.0)"] -codestar-connections = ["mypy-boto3-codestar-connections (1.14.6.0)"] -codestar-notifications = ["mypy-boto3-codestar-notifications (1.14.6.0)"] -cognito-identity = ["mypy-boto3-cognito-identity (1.14.6.0)"] -cognito-idp = ["mypy-boto3-cognito-idp (1.14.6.0)"] -cognito-sync = ["mypy-boto3-cognito-sync (1.14.6.0)"] -comprehend = ["mypy-boto3-comprehend (1.14.6.0)"] -comprehendmedical = ["mypy-boto3-comprehendmedical (1.14.6.0)"] -compute-optimizer = ["mypy-boto3-compute-optimizer (1.14.6.0)"] -config = ["mypy-boto3-config (1.14.6.0)"] -connect = ["mypy-boto3-connect (1.14.6.0)"] -connectparticipant = ["mypy-boto3-connectparticipant (1.14.6.0)"] -cur = ["mypy-boto3-cur (1.14.6.0)"] -dataexchange = ["mypy-boto3-dataexchange (1.14.6.0)"] -datapipeline = ["mypy-boto3-datapipeline (1.14.6.0)"] -datasync = ["mypy-boto3-datasync (1.14.6.0)"] -dax = ["mypy-boto3-dax (1.14.6.0)"] -detective = ["mypy-boto3-detective (1.14.6.0)"] -devicefarm = ["mypy-boto3-devicefarm (1.14.6.0)"] -directconnect = ["mypy-boto3-directconnect (1.14.6.0)"] -discovery = ["mypy-boto3-discovery (1.14.6.0)"] -dlm = ["mypy-boto3-dlm (1.14.6.0)"] -dms = ["mypy-boto3-dms (1.14.6.0)"] -docdb = ["mypy-boto3-docdb (1.14.6.0)"] -ds = ["mypy-boto3-ds (1.14.6.0)"] -dynamodb = ["mypy-boto3-dynamodb (1.14.6.0)"] -dynamodbstreams = ["mypy-boto3-dynamodbstreams (1.14.6.0)"] -ebs = ["mypy-boto3-ebs (1.14.6.0)"] -ec2 = ["mypy-boto3-ec2 (1.14.6.0)"] -ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (1.14.6.0)"] -ecr = ["mypy-boto3-ecr (1.14.6.0)"] -ecs = ["mypy-boto3-ecs (1.14.6.0)"] -efs = ["mypy-boto3-efs (1.14.6.0)"] -eks = ["mypy-boto3-eks (1.14.6.0)"] -elastic-inference = ["mypy-boto3-elastic-inference (1.14.6.0)"] -elasticache = ["mypy-boto3-elasticache (1.14.6.0)"] -elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (1.14.6.0)"] -elastictranscoder = ["mypy-boto3-elastictranscoder (1.14.6.0)"] -elb = ["mypy-boto3-elb (1.14.6.0)"] -elbv2 = ["mypy-boto3-elbv2 (1.14.6.0)"] -emr = ["mypy-boto3-emr (1.14.6.0)"] -es = ["mypy-boto3-es (1.14.6.0)"] -essential = ["mypy-boto3-cloudformation (1.14.6.0)", "mypy-boto3-dynamodb (1.14.6.0)", "mypy-boto3-ec2 (1.14.6.0)", "mypy-boto3-lambda (1.14.6.0)", "mypy-boto3-rds (1.14.6.0)", "mypy-boto3-s3 (1.14.6.0)", "mypy-boto3-sqs (1.14.6.0)"] -events = ["mypy-boto3-events (1.14.6.0)"] -firehose = ["mypy-boto3-firehose (1.14.6.0)"] -fms = ["mypy-boto3-fms (1.14.6.0)"] -forecast = ["mypy-boto3-forecast (1.14.6.0)"] -forecastquery = ["mypy-boto3-forecastquery (1.14.6.0)"] -frauddetector = ["mypy-boto3-frauddetector (1.14.6.0)"] -fsx = ["mypy-boto3-fsx (1.14.6.0)"] -gamelift = ["mypy-boto3-gamelift (1.14.6.0)"] -glacier = ["mypy-boto3-glacier (1.14.6.0)"] -globalaccelerator = ["mypy-boto3-globalaccelerator (1.14.6.0)"] -glue = ["mypy-boto3-glue (1.14.6.0)"] -greengrass = ["mypy-boto3-greengrass (1.14.6.0)"] -groundstation = ["mypy-boto3-groundstation (1.14.6.0)"] -guardduty = ["mypy-boto3-guardduty (1.14.6.0)"] -health = ["mypy-boto3-health (1.14.6.0)"] -iam = ["mypy-boto3-iam (1.14.6.0)"] -imagebuilder = ["mypy-boto3-imagebuilder (1.14.6.0)"] -importexport = ["mypy-boto3-importexport (1.14.6.0)"] -inspector = ["mypy-boto3-inspector (1.14.6.0)"] -iot = ["mypy-boto3-iot (1.14.6.0)"] -iot-data = ["mypy-boto3-iot-data (1.14.6.0)"] -iot-jobs-data = ["mypy-boto3-iot-jobs-data (1.14.6.0)"] -iot1click-devices = ["mypy-boto3-iot1click-devices (1.14.6.0)"] -iot1click-projects = ["mypy-boto3-iot1click-projects (1.14.6.0)"] -iotanalytics = ["mypy-boto3-iotanalytics (1.14.6.0)"] -iotevents = ["mypy-boto3-iotevents (1.14.6.0)"] -iotevents-data = ["mypy-boto3-iotevents-data (1.14.6.0)"] -iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (1.14.6.0)"] -iotsitewise = ["mypy-boto3-iotsitewise (1.14.6.0)"] -iotthingsgraph = ["mypy-boto3-iotthingsgraph (1.14.6.0)"] -kafka = ["mypy-boto3-kafka (1.14.6.0)"] -kendra = ["mypy-boto3-kendra (1.14.6.0)"] -kinesis = ["mypy-boto3-kinesis (1.14.6.0)"] -kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (1.14.6.0)"] -kinesis-video-media = ["mypy-boto3-kinesis-video-media (1.14.6.0)"] -kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (1.14.6.0)"] -kinesisanalytics = ["mypy-boto3-kinesisanalytics (1.14.6.0)"] -kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (1.14.6.0)"] -kinesisvideo = ["mypy-boto3-kinesisvideo (1.14.6.0)"] -kms = ["mypy-boto3-kms (1.14.6.0)"] -lakeformation = ["mypy-boto3-lakeformation (1.14.6.0)"] -lambda = ["mypy-boto3-lambda (1.14.6.0)"] -lex-models = ["mypy-boto3-lex-models (1.14.6.0)"] -lex-runtime = ["mypy-boto3-lex-runtime (1.14.6.0)"] -license-manager = ["mypy-boto3-license-manager (1.14.6.0)"] -lightsail = ["mypy-boto3-lightsail (1.14.6.0)"] -logs = ["mypy-boto3-logs (1.14.6.0)"] -machinelearning = ["mypy-boto3-machinelearning (1.14.6.0)"] -macie = ["mypy-boto3-macie (1.14.6.0)"] -macie2 = ["mypy-boto3-macie2 (1.14.6.0)"] -managedblockchain = ["mypy-boto3-managedblockchain (1.14.6.0)"] -marketplace-catalog = ["mypy-boto3-marketplace-catalog (1.14.6.0)"] -marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (1.14.6.0)"] -marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (1.14.6.0)"] -mediaconnect = ["mypy-boto3-mediaconnect (1.14.6.0)"] -mediaconvert = ["mypy-boto3-mediaconvert (1.14.6.0)"] -medialive = ["mypy-boto3-medialive (1.14.6.0)"] -mediapackage = ["mypy-boto3-mediapackage (1.14.6.0)"] -mediapackage-vod = ["mypy-boto3-mediapackage-vod (1.14.6.0)"] -mediastore = ["mypy-boto3-mediastore (1.14.6.0)"] -mediastore-data = ["mypy-boto3-mediastore-data (1.14.6.0)"] -mediatailor = ["mypy-boto3-mediatailor (1.14.6.0)"] -meteringmarketplace = ["mypy-boto3-meteringmarketplace (1.14.6.0)"] -mgh = ["mypy-boto3-mgh (1.14.6.0)"] -migrationhub-config = ["mypy-boto3-migrationhub-config (1.14.6.0)"] -mobile = ["mypy-boto3-mobile (1.14.6.0)"] -mq = ["mypy-boto3-mq (1.14.6.0)"] -mturk = ["mypy-boto3-mturk (1.14.6.0)"] -neptune = ["mypy-boto3-neptune (1.14.6.0)"] -networkmanager = ["mypy-boto3-networkmanager (1.14.6.0)"] -opsworks = ["mypy-boto3-opsworks (1.14.6.0)"] -opsworkscm = ["mypy-boto3-opsworkscm (1.14.6.0)"] -organizations = ["mypy-boto3-organizations (1.14.6.0)"] -outposts = ["mypy-boto3-outposts (1.14.6.0)"] -personalize = ["mypy-boto3-personalize (1.14.6.0)"] -personalize-events = ["mypy-boto3-personalize-events (1.14.6.0)"] -personalize-runtime = ["mypy-boto3-personalize-runtime (1.14.6.0)"] -pi = ["mypy-boto3-pi (1.14.6.0)"] -pinpoint = ["mypy-boto3-pinpoint (1.14.6.0)"] -pinpoint-email = ["mypy-boto3-pinpoint-email (1.14.6.0)"] -pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (1.14.6.0)"] -polly = ["mypy-boto3-polly (1.14.6.0)"] -pricing = ["mypy-boto3-pricing (1.14.6.0)"] -qldb = ["mypy-boto3-qldb (1.14.6.0)"] -qldb-session = ["mypy-boto3-qldb-session (1.14.6.0)"] -quicksight = ["mypy-boto3-quicksight (1.14.6.0)"] -ram = ["mypy-boto3-ram (1.14.6.0)"] -rds = ["mypy-boto3-rds (1.14.6.0)"] -rds-data = ["mypy-boto3-rds-data (1.14.6.0)"] -redshift = ["mypy-boto3-redshift (1.14.6.0)"] -rekognition = ["mypy-boto3-rekognition (1.14.6.0)"] -resource-groups = ["mypy-boto3-resource-groups (1.14.6.0)"] -resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (1.14.6.0)"] -robomaker = ["mypy-boto3-robomaker (1.14.6.0)"] -route53 = ["mypy-boto3-route53 (1.14.6.0)"] -route53domains = ["mypy-boto3-route53domains (1.14.6.0)"] -route53resolver = ["mypy-boto3-route53resolver (1.14.6.0)"] -s3 = ["mypy-boto3-s3 (1.14.6.0)"] -s3control = ["mypy-boto3-s3control (1.14.6.0)"] -sagemaker = ["mypy-boto3-sagemaker (1.14.6.0)"] -sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (1.14.6.0)"] -sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (1.14.6.0)"] -savingsplans = ["mypy-boto3-savingsplans (1.14.6.0)"] -schemas = ["mypy-boto3-schemas (1.14.6.0)"] -sdb = ["mypy-boto3-sdb (1.14.6.0)"] -secretsmanager = ["mypy-boto3-secretsmanager (1.14.6.0)"] -securityhub = ["mypy-boto3-securityhub (1.14.6.0)"] -serverlessrepo = ["mypy-boto3-serverlessrepo (1.14.6.0)"] -service-quotas = ["mypy-boto3-service-quotas (1.14.6.0)"] -servicecatalog = ["mypy-boto3-servicecatalog (1.14.6.0)"] -servicediscovery = ["mypy-boto3-servicediscovery (1.14.6.0)"] -ses = ["mypy-boto3-ses (1.14.6.0)"] -sesv2 = ["mypy-boto3-sesv2 (1.14.6.0)"] -shield = ["mypy-boto3-shield (1.14.6.0)"] -signer = ["mypy-boto3-signer (1.14.6.0)"] -sms = ["mypy-boto3-sms (1.14.6.0)"] -sms-voice = ["mypy-boto3-sms-voice (1.14.6.0)"] -snowball = ["mypy-boto3-snowball (1.14.6.0)"] -sns = ["mypy-boto3-sns (1.14.6.0)"] -sqs = ["mypy-boto3-sqs (1.14.6.0)"] -ssm = ["mypy-boto3-ssm (1.14.6.0)"] -sso = ["mypy-boto3-sso (1.14.6.0)"] -sso-oidc = ["mypy-boto3-sso-oidc (1.14.6.0)"] -stepfunctions = ["mypy-boto3-stepfunctions (1.14.6.0)"] -storagegateway = ["mypy-boto3-storagegateway (1.14.6.0)"] -sts = ["mypy-boto3-sts (1.14.6.0)"] -support = ["mypy-boto3-support (1.14.6.0)"] -swf = ["mypy-boto3-swf (1.14.6.0)"] -synthetics = ["mypy-boto3-synthetics (1.14.6.0)"] -textract = ["mypy-boto3-textract (1.14.6.0)"] -transcribe = ["mypy-boto3-transcribe (1.14.6.0)"] -transfer = ["mypy-boto3-transfer (1.14.6.0)"] -translate = ["mypy-boto3-translate (1.14.6.0)"] -waf = ["mypy-boto3-waf (1.14.6.0)"] -waf-regional = ["mypy-boto3-waf-regional (1.14.6.0)"] -wafv2 = ["mypy-boto3-wafv2 (1.14.6.0)"] -workdocs = ["mypy-boto3-workdocs (1.14.6.0)"] -worklink = ["mypy-boto3-worklink (1.14.6.0)"] -workmail = ["mypy-boto3-workmail (1.14.6.0)"] -workmailmessageflow = ["mypy-boto3-workmailmessageflow (1.14.6.0)"] -workspaces = ["mypy-boto3-workspaces (1.14.6.0)"] -xray = ["mypy-boto3-xray (1.14.6.0)"] +accessanalyzer = ["mypy-boto3-accessanalyzer (1.15.12.0)"] +acm = ["mypy-boto3-acm (1.15.12.0)"] +acm-pca = ["mypy-boto3-acm-pca (1.15.12.0)"] +alexaforbusiness = ["mypy-boto3-alexaforbusiness (1.15.12.0)"] +all = ["mypy-boto3-accessanalyzer (1.15.12.0)", "mypy-boto3-acm (1.15.12.0)", "mypy-boto3-acm-pca (1.15.12.0)", "mypy-boto3-alexaforbusiness (1.15.12.0)", "mypy-boto3-amplify (1.15.12.0)", "mypy-boto3-apigateway (1.15.12.0)", "mypy-boto3-apigatewaymanagementapi (1.15.12.0)", "mypy-boto3-apigatewayv2 (1.15.12.0)", "mypy-boto3-appconfig (1.15.12.0)", "mypy-boto3-appflow (1.15.12.0)", "mypy-boto3-application-autoscaling (1.15.12.0)", "mypy-boto3-application-insights (1.15.12.0)", "mypy-boto3-appmesh (1.15.12.0)", "mypy-boto3-appstream (1.15.12.0)", "mypy-boto3-appsync (1.15.12.0)", "mypy-boto3-athena (1.15.12.0)", "mypy-boto3-autoscaling (1.15.12.0)", "mypy-boto3-autoscaling-plans (1.15.12.0)", "mypy-boto3-backup (1.15.12.0)", "mypy-boto3-batch (1.15.12.0)", "mypy-boto3-braket (1.15.12.0)", "mypy-boto3-budgets (1.15.12.0)", "mypy-boto3-ce (1.15.12.0)", "mypy-boto3-chime (1.15.12.0)", "mypy-boto3-cloud9 (1.15.12.0)", "mypy-boto3-clouddirectory (1.15.12.0)", "mypy-boto3-cloudformation (1.15.12.0)", "mypy-boto3-cloudfront (1.15.12.0)", "mypy-boto3-cloudhsm (1.15.12.0)", "mypy-boto3-cloudhsmv2 (1.15.12.0)", "mypy-boto3-cloudsearch (1.15.12.0)", "mypy-boto3-cloudsearchdomain (1.15.12.0)", "mypy-boto3-cloudtrail (1.15.12.0)", "mypy-boto3-cloudwatch (1.15.12.0)", "mypy-boto3-codeartifact (1.15.12.0)", "mypy-boto3-codebuild (1.15.12.0)", "mypy-boto3-codecommit (1.15.12.0)", "mypy-boto3-codedeploy (1.15.12.0)", "mypy-boto3-codeguru-reviewer (1.15.12.0)", "mypy-boto3-codeguruprofiler (1.15.12.0)", "mypy-boto3-codepipeline (1.15.12.0)", "mypy-boto3-codestar (1.15.12.0)", "mypy-boto3-codestar-connections (1.15.12.0)", "mypy-boto3-codestar-notifications (1.15.12.0)", "mypy-boto3-cognito-identity (1.15.12.0)", "mypy-boto3-cognito-idp (1.15.12.0)", "mypy-boto3-cognito-sync (1.15.12.0)", "mypy-boto3-comprehend (1.15.12.0)", "mypy-boto3-comprehendmedical (1.15.12.0)", "mypy-boto3-compute-optimizer (1.15.12.0)", "mypy-boto3-config (1.15.12.0)", "mypy-boto3-connect (1.15.12.0)", "mypy-boto3-connectparticipant (1.15.12.0)", "mypy-boto3-cur (1.15.12.0)", "mypy-boto3-dataexchange (1.15.12.0)", "mypy-boto3-datapipeline (1.15.12.0)", "mypy-boto3-datasync (1.15.12.0)", "mypy-boto3-dax (1.15.12.0)", "mypy-boto3-detective (1.15.12.0)", "mypy-boto3-devicefarm (1.15.12.0)", "mypy-boto3-directconnect (1.15.12.0)", "mypy-boto3-discovery (1.15.12.0)", "mypy-boto3-dlm (1.15.12.0)", "mypy-boto3-dms (1.15.12.0)", "mypy-boto3-docdb (1.15.12.0)", "mypy-boto3-ds (1.15.12.0)", "mypy-boto3-dynamodb (1.15.12.0)", "mypy-boto3-dynamodbstreams (1.15.12.0)", "mypy-boto3-ebs (1.15.12.0)", "mypy-boto3-ec2 (1.15.12.0)", "mypy-boto3-ec2-instance-connect (1.15.12.0)", "mypy-boto3-ecr (1.15.12.0)", "mypy-boto3-ecs (1.15.12.0)", "mypy-boto3-efs (1.15.12.0)", "mypy-boto3-eks (1.15.12.0)", "mypy-boto3-elastic-inference (1.15.12.0)", "mypy-boto3-elasticache (1.15.12.0)", "mypy-boto3-elasticbeanstalk (1.15.12.0)", "mypy-boto3-elastictranscoder (1.15.12.0)", "mypy-boto3-elb (1.15.12.0)", "mypy-boto3-elbv2 (1.15.12.0)", "mypy-boto3-emr (1.15.12.0)", "mypy-boto3-es (1.15.12.0)", "mypy-boto3-events (1.15.12.0)", "mypy-boto3-firehose (1.15.12.0)", "mypy-boto3-fms (1.15.12.0)", "mypy-boto3-forecast (1.15.12.0)", "mypy-boto3-forecastquery (1.15.12.0)", "mypy-boto3-frauddetector (1.15.12.0)", "mypy-boto3-fsx (1.15.12.0)", "mypy-boto3-gamelift (1.15.12.0)", "mypy-boto3-glacier (1.15.12.0)", "mypy-boto3-globalaccelerator (1.15.12.0)", "mypy-boto3-glue (1.15.12.0)", "mypy-boto3-greengrass (1.15.12.0)", "mypy-boto3-groundstation (1.15.12.0)", "mypy-boto3-guardduty (1.15.12.0)", "mypy-boto3-health (1.15.12.0)", "mypy-boto3-honeycode (1.15.12.0)", "mypy-boto3-iam (1.15.12.0)", "mypy-boto3-identitystore (1.15.12.0)", "mypy-boto3-imagebuilder (1.15.12.0)", "mypy-boto3-importexport (1.15.12.0)", "mypy-boto3-inspector (1.15.12.0)", "mypy-boto3-iot (1.15.12.0)", "mypy-boto3-iot-data (1.15.12.0)", "mypy-boto3-iot-jobs-data (1.15.12.0)", "mypy-boto3-iot1click-devices (1.15.12.0)", "mypy-boto3-iot1click-projects (1.15.12.0)", "mypy-boto3-iotanalytics (1.15.12.0)", "mypy-boto3-iotevents (1.15.12.0)", "mypy-boto3-iotevents-data (1.15.12.0)", "mypy-boto3-iotsecuretunneling (1.15.12.0)", "mypy-boto3-iotsitewise (1.15.12.0)", "mypy-boto3-iotthingsgraph (1.15.12.0)", "mypy-boto3-ivs (1.15.12.0)", "mypy-boto3-kafka (1.15.12.0)", "mypy-boto3-kendra (1.15.12.0)", "mypy-boto3-kinesis (1.15.12.0)", "mypy-boto3-kinesis-video-archived-media (1.15.12.0)", "mypy-boto3-kinesis-video-media (1.15.12.0)", "mypy-boto3-kinesis-video-signaling (1.15.12.0)", "mypy-boto3-kinesisanalytics (1.15.12.0)", "mypy-boto3-kinesisanalyticsv2 (1.15.12.0)", "mypy-boto3-kinesisvideo (1.15.12.0)", "mypy-boto3-kms (1.15.12.0)", "mypy-boto3-lakeformation (1.15.12.0)", "mypy-boto3-lambda (1.15.12.0)", "mypy-boto3-lex-models (1.15.12.0)", "mypy-boto3-lex-runtime (1.15.12.0)", "mypy-boto3-license-manager (1.15.12.0)", "mypy-boto3-lightsail (1.15.12.0)", "mypy-boto3-logs (1.15.12.0)", "mypy-boto3-machinelearning (1.15.12.0)", "mypy-boto3-macie (1.15.12.0)", "mypy-boto3-macie2 (1.15.12.0)", "mypy-boto3-managedblockchain (1.15.12.0)", "mypy-boto3-marketplace-catalog (1.15.12.0)", "mypy-boto3-marketplace-entitlement (1.15.12.0)", "mypy-boto3-marketplacecommerceanalytics (1.15.12.0)", "mypy-boto3-mediaconnect (1.15.12.0)", "mypy-boto3-mediaconvert (1.15.12.0)", "mypy-boto3-medialive (1.15.12.0)", "mypy-boto3-mediapackage (1.15.12.0)", "mypy-boto3-mediapackage-vod (1.15.12.0)", "mypy-boto3-mediastore (1.15.12.0)", "mypy-boto3-mediastore-data (1.15.12.0)", "mypy-boto3-mediatailor (1.15.12.0)", "mypy-boto3-meteringmarketplace (1.15.12.0)", "mypy-boto3-mgh (1.15.12.0)", "mypy-boto3-migrationhub-config (1.15.12.0)", "mypy-boto3-mobile (1.15.12.0)", "mypy-boto3-mq (1.15.12.0)", "mypy-boto3-mturk (1.15.12.0)", "mypy-boto3-neptune (1.15.12.0)", "mypy-boto3-networkmanager (1.15.12.0)", "mypy-boto3-opsworks (1.15.12.0)", "mypy-boto3-opsworkscm (1.15.12.0)", "mypy-boto3-organizations (1.15.12.0)", "mypy-boto3-outposts (1.15.12.0)", "mypy-boto3-personalize (1.15.12.0)", "mypy-boto3-personalize-events (1.15.12.0)", "mypy-boto3-personalize-runtime (1.15.12.0)", "mypy-boto3-pi (1.15.12.0)", "mypy-boto3-pinpoint (1.15.12.0)", "mypy-boto3-pinpoint-email (1.15.12.0)", "mypy-boto3-pinpoint-sms-voice (1.15.12.0)", "mypy-boto3-polly (1.15.12.0)", "mypy-boto3-pricing (1.15.12.0)", "mypy-boto3-qldb (1.15.12.0)", "mypy-boto3-qldb-session (1.15.12.0)", "mypy-boto3-quicksight (1.15.12.0)", "mypy-boto3-ram (1.15.12.0)", "mypy-boto3-rds (1.15.12.0)", "mypy-boto3-rds-data (1.15.12.0)", "mypy-boto3-redshift (1.15.12.0)", "mypy-boto3-redshift-data (1.15.12.0)", "mypy-boto3-rekognition (1.15.12.0)", "mypy-boto3-resource-groups (1.15.12.0)", "mypy-boto3-resourcegroupstaggingapi (1.15.12.0)", "mypy-boto3-robomaker (1.15.12.0)", "mypy-boto3-route53 (1.15.12.0)", "mypy-boto3-route53domains (1.15.12.0)", "mypy-boto3-route53resolver (1.15.12.0)", "mypy-boto3-s3 (1.15.12.0)", "mypy-boto3-s3control (1.15.12.0)", "mypy-boto3-s3outposts (1.15.12.0)", "mypy-boto3-sagemaker (1.15.12.0)", "mypy-boto3-sagemaker-a2i-runtime (1.15.12.0)", "mypy-boto3-sagemaker-runtime (1.15.12.0)", "mypy-boto3-savingsplans (1.15.12.0)", "mypy-boto3-schemas (1.15.12.0)", "mypy-boto3-sdb (1.15.12.0)", "mypy-boto3-secretsmanager (1.15.12.0)", "mypy-boto3-securityhub (1.15.12.0)", "mypy-boto3-serverlessrepo (1.15.12.0)", "mypy-boto3-service-quotas (1.15.12.0)", "mypy-boto3-servicecatalog (1.15.12.0)", "mypy-boto3-servicediscovery (1.15.12.0)", "mypy-boto3-ses (1.15.12.0)", "mypy-boto3-sesv2 (1.15.12.0)", "mypy-boto3-shield (1.15.12.0)", "mypy-boto3-signer (1.15.12.0)", "mypy-boto3-sms (1.15.12.0)", "mypy-boto3-sms-voice (1.15.12.0)", "mypy-boto3-snowball (1.15.12.0)", "mypy-boto3-sns (1.15.12.0)", "mypy-boto3-sqs (1.15.12.0)", "mypy-boto3-ssm (1.15.12.0)", "mypy-boto3-sso (1.15.12.0)", "mypy-boto3-sso-admin (1.15.12.0)", "mypy-boto3-sso-oidc (1.15.12.0)", "mypy-boto3-stepfunctions (1.15.12.0)", "mypy-boto3-storagegateway (1.15.12.0)", "mypy-boto3-sts (1.15.12.0)", "mypy-boto3-support (1.15.12.0)", "mypy-boto3-swf (1.15.12.0)", "mypy-boto3-synthetics (1.15.12.0)", "mypy-boto3-textract (1.15.12.0)", "mypy-boto3-timestream-query (1.15.12.0)", "mypy-boto3-timestream-write (1.15.12.0)", "mypy-boto3-transcribe (1.15.12.0)", "mypy-boto3-transfer (1.15.12.0)", "mypy-boto3-translate (1.15.12.0)", "mypy-boto3-waf (1.15.12.0)", "mypy-boto3-waf-regional (1.15.12.0)", "mypy-boto3-wafv2 (1.15.12.0)", "mypy-boto3-workdocs (1.15.12.0)", "mypy-boto3-worklink (1.15.12.0)", "mypy-boto3-workmail (1.15.12.0)", "mypy-boto3-workmailmessageflow (1.15.12.0)", "mypy-boto3-workspaces (1.15.12.0)", "mypy-boto3-xray (1.15.12.0)"] +amplify = ["mypy-boto3-amplify (1.15.12.0)"] +apigateway = ["mypy-boto3-apigateway (1.15.12.0)"] +apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (1.15.12.0)"] +apigatewayv2 = ["mypy-boto3-apigatewayv2 (1.15.12.0)"] +appconfig = ["mypy-boto3-appconfig (1.15.12.0)"] +appflow = ["mypy-boto3-appflow (1.15.12.0)"] +application-autoscaling = ["mypy-boto3-application-autoscaling (1.15.12.0)"] +application-insights = ["mypy-boto3-application-insights (1.15.12.0)"] +appmesh = ["mypy-boto3-appmesh (1.15.12.0)"] +appstream = ["mypy-boto3-appstream (1.15.12.0)"] +appsync = ["mypy-boto3-appsync (1.15.12.0)"] +athena = ["mypy-boto3-athena (1.15.12.0)"] +autoscaling = ["mypy-boto3-autoscaling (1.15.12.0)"] +autoscaling-plans = ["mypy-boto3-autoscaling-plans (1.15.12.0)"] +backup = ["mypy-boto3-backup (1.15.12.0)"] +batch = ["mypy-boto3-batch (1.15.12.0)"] +braket = ["mypy-boto3-braket (1.15.12.0)"] +budgets = ["mypy-boto3-budgets (1.15.12.0)"] +ce = ["mypy-boto3-ce (1.15.12.0)"] +chime = ["mypy-boto3-chime (1.15.12.0)"] +cloud9 = ["mypy-boto3-cloud9 (1.15.12.0)"] +clouddirectory = ["mypy-boto3-clouddirectory (1.15.12.0)"] +cloudformation = ["mypy-boto3-cloudformation (1.15.12.0)"] +cloudfront = ["mypy-boto3-cloudfront (1.15.12.0)"] +cloudhsm = ["mypy-boto3-cloudhsm (1.15.12.0)"] +cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (1.15.12.0)"] +cloudsearch = ["mypy-boto3-cloudsearch (1.15.12.0)"] +cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (1.15.12.0)"] +cloudtrail = ["mypy-boto3-cloudtrail (1.15.12.0)"] +cloudwatch = ["mypy-boto3-cloudwatch (1.15.12.0)"] +codeartifact = ["mypy-boto3-codeartifact (1.15.12.0)"] +codebuild = ["mypy-boto3-codebuild (1.15.12.0)"] +codecommit = ["mypy-boto3-codecommit (1.15.12.0)"] +codedeploy = ["mypy-boto3-codedeploy (1.15.12.0)"] +codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (1.15.12.0)"] +codeguruprofiler = ["mypy-boto3-codeguruprofiler (1.15.12.0)"] +codepipeline = ["mypy-boto3-codepipeline (1.15.12.0)"] +codestar = ["mypy-boto3-codestar (1.15.12.0)"] +codestar-connections = ["mypy-boto3-codestar-connections (1.15.12.0)"] +codestar-notifications = ["mypy-boto3-codestar-notifications (1.15.12.0)"] +cognito-identity = ["mypy-boto3-cognito-identity (1.15.12.0)"] +cognito-idp = ["mypy-boto3-cognito-idp (1.15.12.0)"] +cognito-sync = ["mypy-boto3-cognito-sync (1.15.12.0)"] +comprehend = ["mypy-boto3-comprehend (1.15.12.0)"] +comprehendmedical = ["mypy-boto3-comprehendmedical (1.15.12.0)"] +compute-optimizer = ["mypy-boto3-compute-optimizer (1.15.12.0)"] +config = ["mypy-boto3-config (1.15.12.0)"] +connect = ["mypy-boto3-connect (1.15.12.0)"] +connectparticipant = ["mypy-boto3-connectparticipant (1.15.12.0)"] +cur = ["mypy-boto3-cur (1.15.12.0)"] +dataexchange = ["mypy-boto3-dataexchange (1.15.12.0)"] +datapipeline = ["mypy-boto3-datapipeline (1.15.12.0)"] +datasync = ["mypy-boto3-datasync (1.15.12.0)"] +dax = ["mypy-boto3-dax (1.15.12.0)"] +detective = ["mypy-boto3-detective (1.15.12.0)"] +devicefarm = ["mypy-boto3-devicefarm (1.15.12.0)"] +directconnect = ["mypy-boto3-directconnect (1.15.12.0)"] +discovery = ["mypy-boto3-discovery (1.15.12.0)"] +dlm = ["mypy-boto3-dlm (1.15.12.0)"] +dms = ["mypy-boto3-dms (1.15.12.0)"] +docdb = ["mypy-boto3-docdb (1.15.12.0)"] +ds = ["mypy-boto3-ds (1.15.12.0)"] +dynamodb = ["mypy-boto3-dynamodb (1.15.12.0)"] +dynamodbstreams = ["mypy-boto3-dynamodbstreams (1.15.12.0)"] +ebs = ["mypy-boto3-ebs (1.15.12.0)"] +ec2 = ["mypy-boto3-ec2 (1.15.12.0)"] +ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (1.15.12.0)"] +ecr = ["mypy-boto3-ecr (1.15.12.0)"] +ecs = ["mypy-boto3-ecs (1.15.12.0)"] +efs = ["mypy-boto3-efs (1.15.12.0)"] +eks = ["mypy-boto3-eks (1.15.12.0)"] +elastic-inference = ["mypy-boto3-elastic-inference (1.15.12.0)"] +elasticache = ["mypy-boto3-elasticache (1.15.12.0)"] +elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (1.15.12.0)"] +elastictranscoder = ["mypy-boto3-elastictranscoder (1.15.12.0)"] +elb = ["mypy-boto3-elb (1.15.12.0)"] +elbv2 = ["mypy-boto3-elbv2 (1.15.12.0)"] +emr = ["mypy-boto3-emr (1.15.12.0)"] +es = ["mypy-boto3-es (1.15.12.0)"] +essential = ["mypy-boto3-cloudformation (1.15.12.0)", "mypy-boto3-dynamodb (1.15.12.0)", "mypy-boto3-ec2 (1.15.12.0)", "mypy-boto3-lambda (1.15.12.0)", "mypy-boto3-rds (1.15.12.0)", "mypy-boto3-s3 (1.15.12.0)", "mypy-boto3-sqs (1.15.12.0)"] +events = ["mypy-boto3-events (1.15.12.0)"] +firehose = ["mypy-boto3-firehose (1.15.12.0)"] +fms = ["mypy-boto3-fms (1.15.12.0)"] +forecast = ["mypy-boto3-forecast (1.15.12.0)"] +forecastquery = ["mypy-boto3-forecastquery (1.15.12.0)"] +frauddetector = ["mypy-boto3-frauddetector (1.15.12.0)"] +fsx = ["mypy-boto3-fsx (1.15.12.0)"] +gamelift = ["mypy-boto3-gamelift (1.15.12.0)"] +glacier = ["mypy-boto3-glacier (1.15.12.0)"] +globalaccelerator = ["mypy-boto3-globalaccelerator (1.15.12.0)"] +glue = ["mypy-boto3-glue (1.15.12.0)"] +greengrass = ["mypy-boto3-greengrass (1.15.12.0)"] +groundstation = ["mypy-boto3-groundstation (1.15.12.0)"] +guardduty = ["mypy-boto3-guardduty (1.15.12.0)"] +health = ["mypy-boto3-health (1.15.12.0)"] +honeycode = ["mypy-boto3-honeycode (1.15.12.0)"] +iam = ["mypy-boto3-iam (1.15.12.0)"] +identitystore = ["mypy-boto3-identitystore (1.15.12.0)"] +imagebuilder = ["mypy-boto3-imagebuilder (1.15.12.0)"] +importexport = ["mypy-boto3-importexport (1.15.12.0)"] +inspector = ["mypy-boto3-inspector (1.15.12.0)"] +iot = ["mypy-boto3-iot (1.15.12.0)"] +iot-data = ["mypy-boto3-iot-data (1.15.12.0)"] +iot-jobs-data = ["mypy-boto3-iot-jobs-data (1.15.12.0)"] +iot1click-devices = ["mypy-boto3-iot1click-devices (1.15.12.0)"] +iot1click-projects = ["mypy-boto3-iot1click-projects (1.15.12.0)"] +iotanalytics = ["mypy-boto3-iotanalytics (1.15.12.0)"] +iotevents = ["mypy-boto3-iotevents (1.15.12.0)"] +iotevents-data = ["mypy-boto3-iotevents-data (1.15.12.0)"] +iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (1.15.12.0)"] +iotsitewise = ["mypy-boto3-iotsitewise (1.15.12.0)"] +iotthingsgraph = ["mypy-boto3-iotthingsgraph (1.15.12.0)"] +ivs = ["mypy-boto3-ivs (1.15.12.0)"] +kafka = ["mypy-boto3-kafka (1.15.12.0)"] +kendra = ["mypy-boto3-kendra (1.15.12.0)"] +kinesis = ["mypy-boto3-kinesis (1.15.12.0)"] +kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (1.15.12.0)"] +kinesis-video-media = ["mypy-boto3-kinesis-video-media (1.15.12.0)"] +kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (1.15.12.0)"] +kinesisanalytics = ["mypy-boto3-kinesisanalytics (1.15.12.0)"] +kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (1.15.12.0)"] +kinesisvideo = ["mypy-boto3-kinesisvideo (1.15.12.0)"] +kms = ["mypy-boto3-kms (1.15.12.0)"] +lakeformation = ["mypy-boto3-lakeformation (1.15.12.0)"] +lambda = ["mypy-boto3-lambda (1.15.12.0)"] +lex-models = ["mypy-boto3-lex-models (1.15.12.0)"] +lex-runtime = ["mypy-boto3-lex-runtime (1.15.12.0)"] +license-manager = ["mypy-boto3-license-manager (1.15.12.0)"] +lightsail = ["mypy-boto3-lightsail (1.15.12.0)"] +logs = ["mypy-boto3-logs (1.15.12.0)"] +machinelearning = ["mypy-boto3-machinelearning (1.15.12.0)"] +macie = ["mypy-boto3-macie (1.15.12.0)"] +macie2 = ["mypy-boto3-macie2 (1.15.12.0)"] +managedblockchain = ["mypy-boto3-managedblockchain (1.15.12.0)"] +marketplace-catalog = ["mypy-boto3-marketplace-catalog (1.15.12.0)"] +marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (1.15.12.0)"] +marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (1.15.12.0)"] +mediaconnect = ["mypy-boto3-mediaconnect (1.15.12.0)"] +mediaconvert = ["mypy-boto3-mediaconvert (1.15.12.0)"] +medialive = ["mypy-boto3-medialive (1.15.12.0)"] +mediapackage = ["mypy-boto3-mediapackage (1.15.12.0)"] +mediapackage-vod = ["mypy-boto3-mediapackage-vod (1.15.12.0)"] +mediastore = ["mypy-boto3-mediastore (1.15.12.0)"] +mediastore-data = ["mypy-boto3-mediastore-data (1.15.12.0)"] +mediatailor = ["mypy-boto3-mediatailor (1.15.12.0)"] +meteringmarketplace = ["mypy-boto3-meteringmarketplace (1.15.12.0)"] +mgh = ["mypy-boto3-mgh (1.15.12.0)"] +migrationhub-config = ["mypy-boto3-migrationhub-config (1.15.12.0)"] +mobile = ["mypy-boto3-mobile (1.15.12.0)"] +mq = ["mypy-boto3-mq (1.15.12.0)"] +mturk = ["mypy-boto3-mturk (1.15.12.0)"] +neptune = ["mypy-boto3-neptune (1.15.12.0)"] +networkmanager = ["mypy-boto3-networkmanager (1.15.12.0)"] +opsworks = ["mypy-boto3-opsworks (1.15.12.0)"] +opsworkscm = ["mypy-boto3-opsworkscm (1.15.12.0)"] +organizations = ["mypy-boto3-organizations (1.15.12.0)"] +outposts = ["mypy-boto3-outposts (1.15.12.0)"] +personalize = ["mypy-boto3-personalize (1.15.12.0)"] +personalize-events = ["mypy-boto3-personalize-events (1.15.12.0)"] +personalize-runtime = ["mypy-boto3-personalize-runtime (1.15.12.0)"] +pi = ["mypy-boto3-pi (1.15.12.0)"] +pinpoint = ["mypy-boto3-pinpoint (1.15.12.0)"] +pinpoint-email = ["mypy-boto3-pinpoint-email (1.15.12.0)"] +pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (1.15.12.0)"] +polly = ["mypy-boto3-polly (1.15.12.0)"] +pricing = ["mypy-boto3-pricing (1.15.12.0)"] +qldb = ["mypy-boto3-qldb (1.15.12.0)"] +qldb-session = ["mypy-boto3-qldb-session (1.15.12.0)"] +quicksight = ["mypy-boto3-quicksight (1.15.12.0)"] +ram = ["mypy-boto3-ram (1.15.12.0)"] +rds = ["mypy-boto3-rds (1.15.12.0)"] +rds-data = ["mypy-boto3-rds-data (1.15.12.0)"] +redshift = ["mypy-boto3-redshift (1.15.12.0)"] +redshift-data = ["mypy-boto3-redshift-data (1.15.12.0)"] +rekognition = ["mypy-boto3-rekognition (1.15.12.0)"] +resource-groups = ["mypy-boto3-resource-groups (1.15.12.0)"] +resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (1.15.12.0)"] +robomaker = ["mypy-boto3-robomaker (1.15.12.0)"] +route53 = ["mypy-boto3-route53 (1.15.12.0)"] +route53domains = ["mypy-boto3-route53domains (1.15.12.0)"] +route53resolver = ["mypy-boto3-route53resolver (1.15.12.0)"] +s3 = ["mypy-boto3-s3 (1.15.12.0)"] +s3control = ["mypy-boto3-s3control (1.15.12.0)"] +s3outposts = ["mypy-boto3-s3outposts (1.15.12.0)"] +sagemaker = ["mypy-boto3-sagemaker (1.15.12.0)"] +sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (1.15.12.0)"] +sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (1.15.12.0)"] +savingsplans = ["mypy-boto3-savingsplans (1.15.12.0)"] +schemas = ["mypy-boto3-schemas (1.15.12.0)"] +sdb = ["mypy-boto3-sdb (1.15.12.0)"] +secretsmanager = ["mypy-boto3-secretsmanager (1.15.12.0)"] +securityhub = ["mypy-boto3-securityhub (1.15.12.0)"] +serverlessrepo = ["mypy-boto3-serverlessrepo (1.15.12.0)"] +service-quotas = ["mypy-boto3-service-quotas (1.15.12.0)"] +servicecatalog = ["mypy-boto3-servicecatalog (1.15.12.0)"] +servicediscovery = ["mypy-boto3-servicediscovery (1.15.12.0)"] +ses = ["mypy-boto3-ses (1.15.12.0)"] +sesv2 = ["mypy-boto3-sesv2 (1.15.12.0)"] +shield = ["mypy-boto3-shield (1.15.12.0)"] +signer = ["mypy-boto3-signer (1.15.12.0)"] +sms = ["mypy-boto3-sms (1.15.12.0)"] +sms-voice = ["mypy-boto3-sms-voice (1.15.12.0)"] +snowball = ["mypy-boto3-snowball (1.15.12.0)"] +sns = ["mypy-boto3-sns (1.15.12.0)"] +sqs = ["mypy-boto3-sqs (1.15.12.0)"] +ssm = ["mypy-boto3-ssm (1.15.12.0)"] +sso = ["mypy-boto3-sso (1.15.12.0)"] +sso-admin = ["mypy-boto3-sso-admin (1.15.12.0)"] +sso-oidc = ["mypy-boto3-sso-oidc (1.15.12.0)"] +stepfunctions = ["mypy-boto3-stepfunctions (1.15.12.0)"] +storagegateway = ["mypy-boto3-storagegateway (1.15.12.0)"] +sts = ["mypy-boto3-sts (1.15.12.0)"] +support = ["mypy-boto3-support (1.15.12.0)"] +swf = ["mypy-boto3-swf (1.15.12.0)"] +synthetics = ["mypy-boto3-synthetics (1.15.12.0)"] +textract = ["mypy-boto3-textract (1.15.12.0)"] +timestream-query = ["mypy-boto3-timestream-query (1.15.12.0)"] +timestream-write = ["mypy-boto3-timestream-write (1.15.12.0)"] +transcribe = ["mypy-boto3-transcribe (1.15.12.0)"] +transfer = ["mypy-boto3-transfer (1.15.12.0)"] +translate = ["mypy-boto3-translate (1.15.12.0)"] +waf = ["mypy-boto3-waf (1.15.12.0)"] +waf-regional = ["mypy-boto3-waf-regional (1.15.12.0)"] +wafv2 = ["mypy-boto3-wafv2 (1.15.12.0)"] +workdocs = ["mypy-boto3-workdocs (1.15.12.0)"] +worklink = ["mypy-boto3-worklink (1.15.12.0)"] +workmail = ["mypy-boto3-workmail (1.15.12.0)"] +workmailmessageflow = ["mypy-boto3-workmailmessageflow (1.15.12.0)"] +workspaces = ["mypy-boto3-workspaces (1.15.12.0)"] +xray = ["mypy-boto3-xray (1.15.12.0)"] [[package]] category = "main" @@ -324,10 +331,9 @@ description = "Low-level, data-driven core of boto 3." name = "botocore" optional = false python-versions = "*" -version = "1.17.5" +version = "1.18.12" [package.dependencies] -docutils = ">=0.10,<0.16" jmespath = ">=0.7.1,<1.0.0" python-dateutil = ">=2.1,<3.0.0" @@ -341,7 +347,7 @@ description = "Python package for providing Mozilla's CA Bundle." name = "certifi" optional = false python-versions = "*" -version = "2020.4.5.2" +version = "2020.6.20" [[package]] category = "main" @@ -390,11 +396,17 @@ version = "4.4.2" [[package]] category = "main" -description = "Docutils -- Python Documentation Utilities" -name = "docutils" +description = "Dictdiffer is a library that helps you to diff and patch dictionaries." +name = "dictdiffer" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "0.15.2" +python-versions = "*" +version = "0.8.1" + +[package.extras] +all = ["Sphinx (>=1.4.4)", "sphinx-rtd-theme (>=0.1.9)", "check-manifest (>=0.25)", "coverage (>=4.0)", "isort (>=4.2.2)", "mock (>=1.3.0)", "pydocstyle (>=1.0.0)", "pytest-cov (>=1.8.0)", "pytest-pep8 (>=1.0.6)", "pytest (>=2.8.0)", "tox (>=3.7.0)", "numpy (>=1.11.0)"] +docs = ["Sphinx (>=1.4.4)", "sphinx-rtd-theme (>=0.1.9)"] +numpy = ["numpy (>=1.11.0)"] +tests = ["check-manifest (>=0.25)", "coverage (>=4.0)", "isort (>=4.2.2)", "mock (>=1.3.0)", "pydocstyle (>=1.0.0)", "pytest-cov (>=1.8.0)", "pytest-pep8 (>=1.0.6)", "pytest (>=2.8.0)", "tox (>=3.7.0)"] [[package]] category = "main" @@ -402,7 +414,7 @@ description = "Python client for Elasticsearch" name = "elasticsearch" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" -version = "7.8.0" +version = "7.9.1" [package.dependencies] certifi = "*" @@ -420,7 +432,7 @@ description = "the modular source code checker: pep8 pyflakes and co" name = "flake8" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -version = "3.8.3" +version = "3.8.4" [package.dependencies] mccabe = ">=0.6.0,<0.7.0" @@ -433,7 +445,7 @@ description = "Internationalized Domain Names in Applications (IDNA)" name = "idna" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.9" +version = "2.10" [[package]] category = "dev" @@ -441,7 +453,7 @@ description = "IPython-enabled pdb" name = "ipdb" optional = false python-versions = ">=2.7" -version = "0.13.2" +version = "0.13.4" [package.dependencies] setuptools = "*" @@ -456,8 +468,8 @@ description = "IPython: Productive Interactive Computing" marker = "python_version >= \"3.4\"" name = "ipython" optional = false -python-versions = ">=3.6" -version = "7.15.0" +python-versions = ">=3.7" +version = "7.18.1" [package.dependencies] appnope = "*" @@ -465,7 +477,7 @@ backcall = "*" colorama = "*" decorator = "*" jedi = ">=0.10" -pexpect = "*" +pexpect = ">4.3" pickleshare = "*" prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" pygments = "*" @@ -499,14 +511,14 @@ marker = "python_version >= \"3.4\"" name = "jedi" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.17.0" +version = "0.17.2" [package.dependencies] -parso = ">=0.7.0" +parso = ">=0.7.0,<0.8.0" [package.extras] qa = ["flake8 (3.7.9)"] -testing = ["colorama", "docopt", "pytest (>=3.9.0,<5.0.0)"] +testing = ["Django (<3.1)", "colorama", "docopt", "pytest (>=3.9.0,<5.0.0)"] [[package]] category = "main" @@ -530,7 +542,7 @@ description = "More routines for operating on iterables, beyond itertools" name = "more-itertools" optional = false python-versions = ">=3.5" -version = "8.4.0" +version = "8.5.0" [[package]] category = "dev" @@ -548,17 +560,6 @@ typing-extensions = ">=3.7.4" [package.extras] dmypy = ["psutil (>=4.0)"] -[[package]] -category = "dev" -description = "Type annotations for boto3 1.14.6 master module, generated by mypy-boto3-buider 2.2.0" -name = "mypy-boto3" -optional = false -python-versions = ">=3.6" -version = "1.14.6.0" - -[package.dependencies] -boto3 = "*" - [[package]] category = "dev" description = "Experimental type system extensions for programs checked with the mypy typechecker." @@ -586,7 +587,7 @@ marker = "python_version >= \"3.4\"" name = "parso" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.7.0" +version = "0.7.1" [package.extras] testing = ["docopt", "pytest (>=3.0.7)"] @@ -638,7 +639,7 @@ marker = "python_version >= \"3.4\"" name = "prompt-toolkit" optional = false python-versions = ">=3.6.1" -version = "3.0.5" +version = "3.0.7" [package.dependencies] wcwidth = "*" @@ -658,7 +659,7 @@ description = "library with cross-python path, ini-parsing, io, code, log facili name = "py" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.8.2" +version = "1.9.0" [[package]] category = "dev" @@ -683,7 +684,7 @@ marker = "python_version >= \"3.4\"" name = "pygments" optional = false python-versions = ">=3.5" -version = "2.6.1" +version = "2.7.1" [[package]] category = "main" @@ -745,7 +746,7 @@ description = "Alternative regular expression module, to replace re." name = "regex" optional = false python-versions = "*" -version = "2020.6.8" +version = "2020.9.27" [[package]] category = "main" @@ -798,27 +799,25 @@ description = "Fast, Extensible Progress Meter" name = "tqdm" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "4.46.1" +version = "4.50.0" [package.extras] dev = ["py-make (>=0.1.0)", "twine", "argopt", "pydoc-markdown"] [[package]] category = "dev" -description = "Traitlets Python config system" +description = "Traitlets Python configuration system" marker = "python_version >= \"3.4\"" name = "traitlets" optional = false -python-versions = "*" -version = "4.3.3" +python-versions = ">=3.7" +version = "5.0.4" [package.dependencies] -decorator = "*" ipython-genutils = "*" -six = "*" [package.extras] -test = ["pytest", "mock"] +test = ["pytest"] [[package]] category = "dev" @@ -834,7 +833,7 @@ description = "Backported and Experimental Type Hints for Python 3.5+" name = "typing-extensions" optional = false python-versions = "*" -version = "3.7.4.2" +version = "3.7.4.3" [[package]] category = "main" @@ -842,7 +841,7 @@ description = "HTTP library with thread-safe connection pooling, file post, and name = "urllib3" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -version = "1.25.9" +version = "1.25.10" [package.extras] brotli = ["brotlipy (>=0.6.0)"] @@ -855,21 +854,22 @@ description = "Measures the displayed width of unicode strings in a terminal" name = "wcwidth" optional = false python-versions = "*" -version = "0.2.4" +version = "0.2.5" [[package]] category = "main" description = "A built-package format for Python" name = "wheel" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.34.2" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +version = "0.35.1" [package.extras] test = ["pytest (>=3.0.0)", "pytest-cov"] [metadata] -content-hash = "86c9444e6f5b2b6c3b41e4ae84bb0c03c42cee762683fed5b735cf92d92e74c1" +content-hash = "60240c730440563a56cdef8cc567b54ba34a5a819442c6e2c8da09af56c9231b" +lock-version = "1.0" python-versions = "^3.8" [metadata.files] @@ -886,8 +886,8 @@ atomicwrites = [ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, - {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, + {file = "attrs-20.2.0-py2.py3-none-any.whl", hash = "sha256:fce7fc47dfc976152e82d53ff92fa0407700c21acd20886a13777a0d20e655dc"}, + {file = "attrs-20.2.0.tar.gz", hash = "sha256:26b54ddbbb9ee1d34d5d3668dd37d6cf74990ab23c828c2888dccdceee395594"}, ] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, @@ -898,20 +898,20 @@ black = [ {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, ] boto3 = [ - {file = "boto3-1.14.5-py2.py3-none-any.whl", hash = "sha256:ed9b0852c0dc8ca88f5f851357acf238b954d1cced44f48e0d930d306150de7c"}, - {file = "boto3-1.14.5.tar.gz", hash = "sha256:7098937f6432e3ae4e5fe9b93f561b06117c5df736effb8cc166f6fb2bb41ab8"}, + {file = "boto3-1.15.12-py2.py3-none-any.whl", hash = "sha256:cb3becf1b2f2cb5f58030fe947a6abd26f27c01df0403097ae2a52bfadefcf19"}, + {file = "boto3-1.15.12.tar.gz", hash = "sha256:de2bdcd9a8d638c2ef391ffc6d4b692ad701a6d8ad6e9d77d016059cf89b481a"}, ] boto3-stubs = [ - {file = "boto3-stubs-1.14.6.0.tar.gz", hash = "sha256:28112a2a22d7f8d1191690372160f218b84f087797e3e2c24b12f937e3ec8865"}, - {file = "boto3_stubs-1.14.6.0-py3-none-any.whl", hash = "sha256:a8b1d9ffb47deb10d9b0ea3c6c0737689e29facf553ca38c2ea99e9b8d0ba3d2"}, + {file = "boto3-stubs-1.15.12.0.tar.gz", hash = "sha256:4b2e56da82cf04e5de720e9b00c57beb669c4e50533a98e2b477e91c160bec7e"}, + {file = "boto3_stubs-1.15.12.0-py3-none-any.whl", hash = "sha256:292ae46227b3129bcdce9397059506228d675ef1eb93c5e0ebfff438d8714e34"}, ] botocore = [ - {file = "botocore-1.17.5-py2.py3-none-any.whl", hash = "sha256:072c82c64906996f1d7953da1a61d8e6debf0ee5acaa267ec777f05b30755b66"}, - {file = "botocore-1.17.5.tar.gz", hash = "sha256:fcfc3762472aa1d758583d818faaa59b933d839a87f372688836d49d66ad9a7a"}, + {file = "botocore-1.18.12-py2.py3-none-any.whl", hash = "sha256:12b2381ee82ff32d5135c0887eadec18d38c8ff7fac06405ba6a8584f2159c3c"}, + {file = "botocore-1.18.12.tar.gz", hash = "sha256:368f85992b0c7fda95b216776d475791c59e4c4415325fda683a02c5c110cf35"}, ] certifi = [ - {file = "certifi-2020.4.5.2-py2.py3-none-any.whl", hash = "sha256:9cd41137dc19af6a5e03b630eefe7d1f458d964d406342dd3edf625839b944cc"}, - {file = "certifi-2020.4.5.2.tar.gz", hash = "sha256:5ad7e9a056d25ffa5082862e36f119f7f7cec6457fa07ee2f8c339814b80c9b1"}, + {file = "certifi-2020.6.20-py2.py3-none-any.whl", hash = "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"}, + {file = "certifi-2020.6.20.tar.gz", hash = "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3"}, ] chardet = [ {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, @@ -933,37 +933,36 @@ decorator = [ {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, ] -docutils = [ - {file = "docutils-0.15.2-py2-none-any.whl", hash = "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827"}, - {file = "docutils-0.15.2-py3-none-any.whl", hash = "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0"}, - {file = "docutils-0.15.2.tar.gz", hash = "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"}, +dictdiffer = [ + {file = "dictdiffer-0.8.1-py2.py3-none-any.whl", hash = "sha256:d79d9a39e459fe33497c858470ca0d2e93cb96621751de06d631856adfd9c390"}, + {file = "dictdiffer-0.8.1.tar.gz", hash = "sha256:1adec0d67cdf6166bda96ae2934ddb5e54433998ceab63c984574d187cc563d2"}, ] elasticsearch = [ - {file = "elasticsearch-7.8.0-py2.py3-none-any.whl", hash = "sha256:6fb566dd23b91b5871ce12212888674b4cf33374e92b71b1080916c931e44dcb"}, - {file = "elasticsearch-7.8.0.tar.gz", hash = "sha256:e637d8cf4e27e279b5ff8ca8edc0c086f4b5df4bf2b48e2f950b7833aca3a792"}, + {file = "elasticsearch-7.9.1-py2.py3-none-any.whl", hash = "sha256:8c7e2374f53ee1b891ff2804116e0c7fb517585d6d5788ba668686bbc9d82e2d"}, + {file = "elasticsearch-7.9.1.tar.gz", hash = "sha256:5e08776fbb30c6e92408c7fa8c37d939210d291475ae2f364f0497975918b6fe"}, ] flake8 = [ - {file = "flake8-3.8.3-py2.py3-none-any.whl", hash = "sha256:15e351d19611c887e482fb960eae4d44845013cc142d42896e9862f775d8cf5c"}, - {file = "flake8-3.8.3.tar.gz", hash = "sha256:f04b9fcbac03b0a3e58c0ab3a0ecc462e023a9faf046d57794184028123aa208"}, + {file = "flake8-3.8.4-py2.py3-none-any.whl", hash = "sha256:749dbbd6bfd0cf1318af27bf97a14e28e5ff548ef8e5b1566ccfb25a11e7c839"}, + {file = "flake8-3.8.4.tar.gz", hash = "sha256:aadae8761ec651813c24be05c6f7b4680857ef6afaae4651a4eccaef97ce6c3b"}, ] idna = [ - {file = "idna-2.9-py2.py3-none-any.whl", hash = "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"}, - {file = "idna-2.9.tar.gz", hash = "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb"}, + {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, + {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] ipdb = [ - {file = "ipdb-0.13.2.tar.gz", hash = "sha256:77fb1c2a6fccdfee0136078c9ed6fe547ab00db00bebff181f1e8c9e13418d49"}, + {file = "ipdb-0.13.4.tar.gz", hash = "sha256:c85398b5fb82f82399fc38c44fe3532c0dde1754abee727d8f5cfcc74547b334"}, ] ipython = [ - {file = "ipython-7.15.0-py3-none-any.whl", hash = "sha256:1b85d65632211bf5d3e6f1406f3393c8c429a47d7b947b9a87812aa5bce6595c"}, - {file = "ipython-7.15.0.tar.gz", hash = "sha256:0ef1433879816a960cd3ae1ae1dc82c64732ca75cec8dab5a4e29783fb571d0e"}, + {file = "ipython-7.18.1-py3-none-any.whl", hash = "sha256:2e22c1f74477b5106a6fb301c342ab8c64bb75d702e350f05a649e8cb40a0fb8"}, + {file = "ipython-7.18.1.tar.gz", hash = "sha256:a331e78086001931de9424940699691ad49dfb457cea31f5471eae7b78222d5e"}, ] ipython-genutils = [ {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, ] jedi = [ - {file = "jedi-0.17.0-py2.py3-none-any.whl", hash = "sha256:cd60c93b71944d628ccac47df9a60fec53150de53d42dc10a7fc4b5ba6aae798"}, - {file = "jedi-0.17.0.tar.gz", hash = "sha256:df40c97641cb943661d2db4c33c2e1ff75d491189423249e989bcea4464f3030"}, + {file = "jedi-0.17.2-py2.py3-none-any.whl", hash = "sha256:98cc583fa0f2f8304968199b01b6b4b94f469a1f4a74c1560506ca2a211378b5"}, + {file = "jedi-0.17.2.tar.gz", hash = "sha256:86ed7d9b750603e4ba582ea8edc678657fb4007894a12bcf6f4bb97892f31d20"}, ] jmespath = [ {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"}, @@ -974,8 +973,8 @@ mccabe = [ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] more-itertools = [ - {file = "more-itertools-8.4.0.tar.gz", hash = "sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5"}, - {file = "more_itertools-8.4.0-py3-none-any.whl", hash = "sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2"}, + {file = "more-itertools-8.5.0.tar.gz", hash = "sha256:6f83822ae94818eae2612063a5101a7311e68ae8002005b5e05f03fd74a86a20"}, + {file = "more_itertools-8.5.0-py3-none-any.whl", hash = "sha256:9b30f12df9393f0d28af9210ff8efe48d10c94f73e5daf886f10c4b0b0b4f03c"}, ] mypy = [ {file = "mypy-0.780-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:d3b4941de44341227ece1caaf5b08b23e42ad4eeb8b603219afb11e9d4cfb437"}, @@ -993,10 +992,6 @@ mypy = [ {file = "mypy-0.780-py3-none-any.whl", hash = "sha256:127de5a9b817a03a98c5ae8a0c46a20dc44442af6dcfa2ae7f96cb519b312efa"}, {file = "mypy-0.780.tar.gz", hash = "sha256:4ef13b619a289aa025f2273e05e755f8049bb4eaba6d703a425de37d495d178d"}, ] -mypy-boto3 = [ - {file = "mypy-boto3-1.14.6.0.tar.gz", hash = "sha256:f4c6ba46dfca27f8b2d30ed46889e204f355ec2c1332bb7934be13b6df7fae32"}, - {file = "mypy_boto3-1.14.6.0-py3-none-any.whl", hash = "sha256:e9744bdce6891ee07c9db75d782dd158fdc5d6ec218f1cb61553f78aa2f79e56"}, -] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, @@ -1006,8 +1001,8 @@ packaging = [ {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, ] parso = [ - {file = "parso-0.7.0-py2.py3-none-any.whl", hash = "sha256:158c140fc04112dc45bca311633ae5033c2c2a7b732fa33d0955bad8152a8dd0"}, - {file = "parso-0.7.0.tar.gz", hash = "sha256:908e9fae2144a076d72ae4e25539143d40b8e3eafbaeae03c1bfe226f4cdf12c"}, + {file = "parso-0.7.1-py2.py3-none-any.whl", hash = "sha256:97218d9159b2520ff45eb78028ba8b50d2bc61dcc062a9682666f2dc4bd331ea"}, + {file = "parso-0.7.1.tar.gz", hash = "sha256:caba44724b994a8a5e086460bb212abc5a8bc46951bf4a9a1210745953622eb9"}, ] pathspec = [ {file = "pathspec-0.8.0-py2.py3-none-any.whl", hash = "sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0"}, @@ -1026,16 +1021,16 @@ pluggy = [ {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.5-py3-none-any.whl", hash = "sha256:df7e9e63aea609b1da3a65641ceaf5bc7d05e0a04de5bd45d05dbeffbabf9e04"}, - {file = "prompt_toolkit-3.0.5.tar.gz", hash = "sha256:563d1a4140b63ff9dd587bda9557cffb2fe73650205ab6f4383092fb882e7dc8"}, + {file = "prompt_toolkit-3.0.7-py3-none-any.whl", hash = "sha256:83074ee28ad4ba6af190593d4d4c607ff525272a504eb159199b6dd9f950c950"}, + {file = "prompt_toolkit-3.0.7.tar.gz", hash = "sha256:822f4605f28f7d2ba6b0b09a31e25e140871e96364d1d377667b547bb3bf4489"}, ] ptyprocess = [ {file = "ptyprocess-0.6.0-py2.py3-none-any.whl", hash = "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"}, {file = "ptyprocess-0.6.0.tar.gz", hash = "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0"}, ] py = [ - {file = "py-1.8.2-py2.py3-none-any.whl", hash = "sha256:a673fa23d7000440cc885c17dbd34fafcb7d7a6e230b29f6766400de36a33c44"}, - {file = "py-1.8.2.tar.gz", hash = "sha256:f3b3a4c36512a4c4f024041ab51866f11761cc169670204b235f6b20523d4e6b"}, + {file = "py-1.9.0-py2.py3-none-any.whl", hash = "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2"}, + {file = "py-1.9.0.tar.gz", hash = "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"}, ] pycodestyle = [ {file = "pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367"}, @@ -1046,8 +1041,8 @@ pyflakes = [ {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"}, ] pygments = [ - {file = "Pygments-2.6.1-py3-none-any.whl", hash = "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324"}, - {file = "Pygments-2.6.1.tar.gz", hash = "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44"}, + {file = "Pygments-2.7.1-py3-none-any.whl", hash = "sha256:307543fe65c0947b126e83dd5a61bd8acbd84abec11f43caebaf5534cbc17998"}, + {file = "Pygments-2.7.1.tar.gz", hash = "sha256:926c3f319eda178d1bd90851e4317e6d8cdb5e292a3386aac9bd75eca29cf9c7"}, ] pypandoc = [ {file = "pypandoc-1.5.tar.gz", hash = "sha256:14a49977ab1fbc9b14ef3087dcb101f336851837fca55ca79cf33846cc4976ff"}, @@ -1065,27 +1060,33 @@ python-dateutil = [ {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, ] regex = [ - {file = "regex-2020.6.8-cp27-cp27m-win32.whl", hash = "sha256:fbff901c54c22425a5b809b914a3bfaf4b9570eee0e5ce8186ac71eb2025191c"}, - {file = "regex-2020.6.8-cp27-cp27m-win_amd64.whl", hash = "sha256:112e34adf95e45158c597feea65d06a8124898bdeac975c9087fe71b572bd938"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:92d8a043a4241a710c1cf7593f5577fbb832cf6c3a00ff3fc1ff2052aff5dd89"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bae83f2a56ab30d5353b47f9b2a33e4aac4de9401fb582b55c42b132a8ac3868"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:b2ba0f78b3ef375114856cbdaa30559914d081c416b431f2437f83ce4f8b7f2f"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:95fa7726d073c87141f7bbfb04c284901f8328e2d430eeb71b8ffdd5742a5ded"}, - {file = "regex-2020.6.8-cp36-cp36m-win32.whl", hash = "sha256:e3cdc9423808f7e1bb9c2e0bdb1c9dc37b0607b30d646ff6faf0d4e41ee8fee3"}, - {file = "regex-2020.6.8-cp36-cp36m-win_amd64.whl", hash = "sha256:c78e66a922de1c95a208e4ec02e2e5cf0bb83a36ceececc10a72841e53fbf2bd"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:08997a37b221a3e27d68ffb601e45abfb0093d39ee770e4257bd2f5115e8cb0a"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2f6f211633ee8d3f7706953e9d3edc7ce63a1d6aad0be5dcee1ece127eea13ae"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:55b4c25cbb3b29f8d5e63aeed27b49fa0f8476b0d4e1b3171d85db891938cc3a"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:89cda1a5d3e33ec9e231ece7307afc101b5217523d55ef4dc7fb2abd6de71ba3"}, - {file = "regex-2020.6.8-cp37-cp37m-win32.whl", hash = "sha256:690f858d9a94d903cf5cada62ce069b5d93b313d7d05456dbcd99420856562d9"}, - {file = "regex-2020.6.8-cp37-cp37m-win_amd64.whl", hash = "sha256:1700419d8a18c26ff396b3b06ace315b5f2a6e780dad387e4c48717a12a22c29"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux1_i686.whl", hash = "sha256:654cb773b2792e50151f0e22be0f2b6e1c3a04c5328ff1d9d59c0398d37ef610"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:52e1b4bef02f4040b2fd547357a170fc1146e60ab310cdbdd098db86e929b387"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:cf59bbf282b627130f5ba68b7fa3abdb96372b24b66bdf72a4920e8153fc7910"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:5aaa5928b039ae440d775acea11d01e42ff26e1561c0ffcd3d805750973c6baf"}, - {file = "regex-2020.6.8-cp38-cp38-win32.whl", hash = "sha256:97712e0d0af05febd8ab63d2ef0ab2d0cd9deddf4476f7aa153f76feef4b2754"}, - {file = "regex-2020.6.8-cp38-cp38-win_amd64.whl", hash = "sha256:6ad8663c17db4c5ef438141f99e291c4d4edfeaacc0ce28b5bba2b0bf273d9b5"}, - {file = "regex-2020.6.8.tar.gz", hash = "sha256:e9b64e609d37438f7d6e68c2546d2cb8062f3adb27e6336bc129b51be20773ac"}, + {file = "regex-2020.9.27-cp27-cp27m-win32.whl", hash = "sha256:d23a18037313714fb3bb5a94434d3151ee4300bae631894b1ac08111abeaa4a3"}, + {file = "regex-2020.9.27-cp27-cp27m-win_amd64.whl", hash = "sha256:84e9407db1b2eb368b7ecc283121b5e592c9aaedbe8c78b1a2f1102eb2e21d19"}, + {file = "regex-2020.9.27-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5f18875ac23d9aa2f060838e8b79093e8bb2313dbaaa9f54c6d8e52a5df097be"}, + {file = "regex-2020.9.27-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ae91972f8ac958039920ef6e8769277c084971a142ce2b660691793ae44aae6b"}, + {file = "regex-2020.9.27-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:9a02d0ae31d35e1ec12a4ea4d4cca990800f66a917d0fb997b20fbc13f5321fc"}, + {file = "regex-2020.9.27-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:ebbe29186a3d9b0c591e71b7393f1ae08c83cb2d8e517d2a822b8f7ec99dfd8b"}, + {file = "regex-2020.9.27-cp36-cp36m-win32.whl", hash = "sha256:4707f3695b34335afdfb09be3802c87fa0bc27030471dbc082f815f23688bc63"}, + {file = "regex-2020.9.27-cp36-cp36m-win_amd64.whl", hash = "sha256:9bc13e0d20b97ffb07821aa3e113f9998e84994fe4d159ffa3d3a9d1b805043b"}, + {file = "regex-2020.9.27-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f1b3afc574a3db3b25c89161059d857bd4909a1269b0b3cb3c904677c8c4a3f7"}, + {file = "regex-2020.9.27-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5533a959a1748a5c042a6da71fe9267a908e21eded7a4f373efd23a2cbdb0ecc"}, + {file = "regex-2020.9.27-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:1fe0a41437bbd06063aa184c34804efa886bcc128222e9916310c92cd54c3b4c"}, + {file = "regex-2020.9.27-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:c570f6fa14b9c4c8a4924aaad354652366577b4f98213cf76305067144f7b100"}, + {file = "regex-2020.9.27-cp37-cp37m-win32.whl", hash = "sha256:eda4771e0ace7f67f58bc5b560e27fb20f32a148cbc993b0c3835970935c2707"}, + {file = "regex-2020.9.27-cp37-cp37m-win_amd64.whl", hash = "sha256:60b0e9e6dc45683e569ec37c55ac20c582973841927a85f2d8a7d20ee80216ab"}, + {file = "regex-2020.9.27-cp38-cp38-manylinux1_i686.whl", hash = "sha256:088afc8c63e7bd187a3c70a94b9e50ab3f17e1d3f52a32750b5b77dbe99ef5ef"}, + {file = "regex-2020.9.27-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:eaf548d117b6737df379fdd53bdde4f08870e66d7ea653e230477f071f861121"}, + {file = "regex-2020.9.27-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:41bb65f54bba392643557e617316d0d899ed5b4946dccee1cb6696152b29844b"}, + {file = "regex-2020.9.27-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:8d69cef61fa50c8133382e61fd97439de1ae623fe943578e477e76a9d9471637"}, + {file = "regex-2020.9.27-cp38-cp38-win32.whl", hash = "sha256:f2388013e68e750eaa16ccbea62d4130180c26abb1d8e5d584b9baf69672b30f"}, + {file = "regex-2020.9.27-cp38-cp38-win_amd64.whl", hash = "sha256:4318d56bccfe7d43e5addb272406ade7a2274da4b70eb15922a071c58ab0108c"}, + {file = "regex-2020.9.27-cp39-cp39-manylinux1_i686.whl", hash = "sha256:84cada8effefe9a9f53f9b0d2ba9b7b6f5edf8d2155f9fdbe34616e06ececf81"}, + {file = "regex-2020.9.27-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:816064fc915796ea1f26966163f6845de5af78923dfcecf6551e095f00983650"}, + {file = "regex-2020.9.27-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:5d892a4f1c999834eaa3c32bc9e8b976c5825116cde553928c4c8e7e48ebda67"}, + {file = "regex-2020.9.27-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c9443124c67b1515e4fe0bb0aa18df640965e1030f468a2a5dc2589b26d130ad"}, + {file = "regex-2020.9.27-cp39-cp39-win32.whl", hash = "sha256:49f23ebd5ac073765ecbcf046edc10d63dcab2f4ae2bce160982cb30df0c0302"}, + {file = "regex-2020.9.27-cp39-cp39-win_amd64.whl", hash = "sha256:3d20024a70b97b4f9546696cbf2fd30bae5f42229fbddf8661261b1eaff0deb7"}, + {file = "regex-2020.9.27.tar.gz", hash = "sha256:a6f32aea4260dfe0e55dc9733ea162ea38f0ea86aa7d0f77b15beac5bf7b369d"}, ] requests = [ {file = "requests-2.24.0-py2.py3-none-any.whl", hash = "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"}, @@ -1104,12 +1105,12 @@ toml = [ {file = "toml-0.10.1.tar.gz", hash = "sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f"}, ] tqdm = [ - {file = "tqdm-4.46.1-py2.py3-none-any.whl", hash = "sha256:07c06493f1403c1380b630ae3dcbe5ae62abcf369a93bbc052502279f189ab8c"}, - {file = "tqdm-4.46.1.tar.gz", hash = "sha256:cd140979c2bebd2311dfb14781d8f19bd5a9debb92dcab9f6ef899c987fcf71f"}, + {file = "tqdm-4.50.0-py2.py3-none-any.whl", hash = "sha256:2dd75fdb764f673b8187643496fcfbeac38348015b665878e582b152f3391cdb"}, + {file = "tqdm-4.50.0.tar.gz", hash = "sha256:93b7a6a9129fce904f6df4cf3ae7ff431d779be681a95c3344c26f3e6c09abfa"}, ] traitlets = [ - {file = "traitlets-4.3.3-py2.py3-none-any.whl", hash = "sha256:70b4c6a1d9019d7b4f6846832288f86998aa3b9207c6821f3578a6a6a467fe44"}, - {file = "traitlets-4.3.3.tar.gz", hash = "sha256:d023ee369ddd2763310e4c3eae1ff649689440d4ae59d7485eb4cfbbe3e359f7"}, + {file = "traitlets-5.0.4-py3-none-any.whl", hash = "sha256:9664ec0c526e48e7b47b7d14cd6b252efa03e0129011de0a9c1d70315d4309c3"}, + {file = "traitlets-5.0.4.tar.gz", hash = "sha256:86c9351f94f95de9db8a04ad8e892da299a088a64fd283f9f6f18770ae5eae1b"}, ] typed-ast = [ {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, @@ -1135,19 +1136,19 @@ typed-ast = [ {file = "typed_ast-1.4.1.tar.gz", hash = "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b"}, ] typing-extensions = [ - {file = "typing_extensions-3.7.4.2-py2-none-any.whl", hash = "sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392"}, - {file = "typing_extensions-3.7.4.2-py3-none-any.whl", hash = "sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5"}, - {file = "typing_extensions-3.7.4.2.tar.gz", hash = "sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae"}, + {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, + {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, + {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, ] urllib3 = [ - {file = "urllib3-1.25.9-py2.py3-none-any.whl", hash = "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"}, - {file = "urllib3-1.25.9.tar.gz", hash = "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527"}, + {file = "urllib3-1.25.10-py2.py3-none-any.whl", hash = "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461"}, + {file = "urllib3-1.25.10.tar.gz", hash = "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a"}, ] wcwidth = [ - {file = "wcwidth-0.2.4-py2.py3-none-any.whl", hash = "sha256:79375666b9954d4a1a10739315816324c3e73110af9d0e102d906fdb0aec009f"}, - {file = "wcwidth-0.2.4.tar.gz", hash = "sha256:8c6b5b6ee1360b842645f336d9e5d68c55817c26d3050f46b235ef2bc650e48f"}, + {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, + {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, ] wheel = [ - {file = "wheel-0.34.2-py2.py3-none-any.whl", hash = "sha256:df277cb51e61359aba502208d680f90c0493adec6f0e848af94948778aed386e"}, - {file = "wheel-0.34.2.tar.gz", hash = "sha256:8788e9155fe14f54164c1b9eb0a319d98ef02c160725587ad60f14ddc57b6f96"}, + {file = "wheel-0.35.1-py2.py3-none-any.whl", hash = "sha256:497add53525d16c173c2c1c733b8f655510e909ea78cc0e29d374243544b77a2"}, + {file = "wheel-0.35.1.tar.gz", hash = "sha256:99a22d87add3f634ff917310a3d87e499f19e663413a52eb9232c447aa646c9f"}, ] diff --git a/import-scripts/pyproject.toml b/import-scripts/pyproject.toml index 5e76057..26c6379 100644 --- a/import-scripts/pyproject.toml +++ b/import-scripts/pyproject.toml @@ -8,7 +8,8 @@ include = [ ] [tool.poetry.scripts] -import-channel = 'import_scripts.channel:run' +import-channel = 'import_scripts.channel:run_import' +channel-diff = 'import_scripts.channel:run_diff' [tool.poetry.dependencies] python = "^3.8" @@ -19,6 +20,7 @@ elasticsearch = "^7.8.0" boto3 = "^1.14.5" tqdm = "^4.46.1" pypandoc = "^1.5" +dictdiffer = "^0.8.1" [tool.poetry.dev-dependencies] ipdb = "^0.13.2"