From 8972c89e7bb45f371d0e3458155a15eb2f332253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=BAlio=20Costa?= Date: Mon, 2 May 2022 13:19:22 -0300 Subject: [PATCH] Adiciona shed como ferramenta de lint (#83) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adiciona shed * Adiciona pre-commit * Formata código --- .github/workflows/pull-request.yaml | 30 +- .pre-commit-config.yaml | 7 + amora/cli.py | 32 +- amora/config.py | 2 +- amora/contracts.py | 4 +- amora/feature_store/__init__.py | 2 +- amora/feature_store/decorators.py | 3 +- amora/feature_store/feature_view.py | 7 +- amora/feature_store/protocols.py | 10 +- amora/feature_store/registry.py | 5 +- amora/feature_store/type_mapping.py | 1 - amora/materialization.py | 44 +- amora/models.py | 23 +- amora/protocols.py | 2 +- amora/providers/bigquery.py | 22 +- amora/storage.py | 2 +- amora/tests/assertions.py | 20 +- amora/tests/audit.py | 11 +- amora/tests/generic_tests.py | 2 +- amora/tests/pytest_plugin.py | 1 + amora/transformations.py | 4 +- amora/utils.py | 2 +- examples/amora_project/models/health.py | 4 +- examples/amora_project/models/heart_agg.py | 5 +- examples/amora_project/models/heart_rate.py | 8 +- .../models/heart_rate_over_100.py | 6 +- .../models/step_count_by_source.py | 67 +- examples/amora_project/models/steps.py | 6 +- examples/amora_project/models/steps_agg.py | 3 +- examples/amora_project/tests/test_health.py | 8 +- .../amora_project/tests/test_heart_agg.py | 4 +- .../amora_project/tests/test_heart_rate.py | 6 +- .../amora_project/tests/test_models_schema.py | 5 +- examples/amora_project/tests/test_steps.py | 6 +- poetry.lock | 626 ++++++++++-------- pyproject.toml | 2 + .../feature_store/test_feature_store_apply.py | 3 +- .../test_feature_store_materialize.py | 3 +- tests/cli/test_compile.py | 3 +- tests/cli/test_materialize.py | 11 +- tests/cli/test_models_import.py | 4 +- tests/feature_store/test_decorators.py | 2 +- tests/feature_store/test_registry.py | 4 +- tests/models/heart_agg.py | 6 +- tests/models/heart_rate.py | 10 +- tests/models/heart_rate_over_100.py | 9 +- tests/models/step_count_by_source.py | 5 +- tests/models/steps.py | 10 +- tests/providers/test_bigquery.py | 9 +- tests/test_assertions.py | 6 +- tests/test_compilation.py | 4 +- tests/test_materialization.py | 12 +- tests/test_models.py | 1 + tests/test_transformations.py | 4 +- 54 files changed, 579 insertions(+), 519 deletions(-) create mode 100644 .pre-commit-config.yaml diff --git a/.github/workflows/pull-request.yaml b/.github/workflows/pull-request.yaml index df47b86b..3fc69c0f 100644 --- a/.github/workflows/pull-request.yaml +++ b/.github/workflows/pull-request.yaml @@ -16,10 +16,10 @@ jobs: strategy: fail-fast: false matrix: - python: ['3.9'] - experimental: [ false ] + python: ["3.9"] + experimental: [false] include: - - python: '3.10' + - python: "3.10" experimental: true steps: - name: 🚧 Install OS dependencies @@ -50,6 +50,24 @@ jobs: env: POETRY_VIRTUALENVS_CREATE: false + - uses: dorny/paths-filter@v2 + name: Get modified files + id: file_changes + with: + list-files: shell + filters: | + python: + - added|modified: '**/*.py' + - added|modified: '**/*.md' + - added|modified: '**/*.rst' + + - name: 🧪 pre-commit + if: ${{ steps.file_changes.outputs.python == 'true' }} + run: pre-commit run --files ${{ steps.file_changes.outputs.python_files }} + + - name: 🧪 Mypy - Static type check + run: mypy --xml-report .mypy_coverage --html-report .mypy_coverage --ignore-missing-imports --install-types --non-interactive --pretty --no-color-output amora + - name: 🚧 GCP Auth uses: "google-github-actions/auth@v0" with: @@ -58,9 +76,6 @@ jobs: - name: 🚧 Set up GCP SDK uses: "google-github-actions/setup-gcloud@v0" - - name: 🎨 Black - Python format check - run: black -v --check amora tests - - name: 🧪 pytest run: py.test --cov=amora --cov-report=term-missing --cov-report=xml ./tests @@ -71,9 +86,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - - name: 🧪 Mypy - Static type check - run: mypy --xml-report .mypy_coverage --html-report .mypy_coverage --ignore-missing-imports --install-types --non-interactive --pretty --no-color-output amora - - name: 📤 Uploading coverage reports as an artifact uses: actions/upload-artifact@v2 with: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..58d8506d --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,7 @@ +minimum_pre_commit_version: "2.9.0" +repos: + - repo: https://github.com/Zac-HD/shed + rev: 0.9.5 + hooks: + - id: shed + types_or: [python, markdown, rst] diff --git a/amora/cli.py b/amora/cli.py index d6c6e8b5..4c54e769 100644 --- a/amora/cli.py +++ b/amora/cli.py @@ -1,33 +1,29 @@ import json +from dataclasses import dataclass from datetime import datetime +from pathlib import Path +from typing import List, Optional import pytest import typer -from dataclasses import dataclass -from pathlib import Path -from typing import Optional, List from jinja2 import Environment, PackageLoader, select_autoescape from rich.console import Console from rich.table import Table from rich.text import Text -from amora.config import settings -from amora.models import ( - AmoraModel, - list_models, - Model, -) -from amora.utils import list_target_files -from amora.compilation import compile_statement from amora import materialization +from amora.compilation import compile_statement +from amora.config import settings +from amora.models import Model, list_models from amora.providers.bigquery import ( - dry_run, - get_schema, BIGQUERY_TYPES_TO_PYTHON_TYPES, DryRunResult, + dry_run, estimated_query_cost_in_usd, estimated_storage_cost_in_usd, + get_schema, ) +from amora.utils import list_target_files app = typer.Typer( help="Amora Data Build Tool enables engineers to transform data in their warehouses " @@ -187,7 +183,7 @@ def has_source(self): @property def depends_on(self) -> List[str]: return sorted( - [dependency.__name__ for dependency in self.model.dependencies()] + dependency.__name__ for dependency in self.model.dependencies() ) @property @@ -305,7 +301,7 @@ def models_import( template = env.get_template("new-model.py.jinja2") project, dataset, table = table_reference.split(".") - model_name = "".join((part.title() for part in table.split("_"))) + model_name = "".join(part.title() for part in table.split("_")) destination_file_path = Path(settings.MODELS_PATH).joinpath( (model_file_path or model_name.replace(".", "/")) + ".py" @@ -403,9 +399,10 @@ def feature_store_apply(): on the provider configuration. For example, setting local as your provider will result in a sqlite online store being created. """ - from amora.feature_store.registry import get_repo_contents from feast.repo_operations import apply_total_with_repo_instance + from amora.feature_store import fs + from amora.feature_store.registry import get_repo_contents apply_total_with_repo_instance( store=fs, @@ -461,10 +458,11 @@ def feature_store_serve(): POST /get-online-features GET /list-feature-views """ + import uvicorn from feast.feature_server import get_app + from amora.feature_store import fs from amora.feature_store.config import settings - import uvicorn app = get_app(store=fs) diff --git a/amora/config.py b/amora/config.py index 29535c81..b20c5cb7 100644 --- a/amora/config.py +++ b/amora/config.py @@ -1,9 +1,9 @@ import logging import os -from uuid import uuid4 from pathlib import Path from tempfile import NamedTemporaryFile from typing import Tuple +from uuid import uuid4 from pydantic import BaseSettings diff --git a/amora/contracts.py b/amora/contracts.py index 8eba012c..b53684a2 100644 --- a/amora/contracts.py +++ b/amora/contracts.py @@ -1,6 +1,6 @@ -from dataclasses import dataclass, field +from dataclasses import dataclass from datetime import datetime -from typing import Optional, List +from typing import List, Optional @dataclass diff --git a/amora/feature_store/__init__.py b/amora/feature_store/__init__.py index 79b5f5da..6e13be00 100644 --- a/amora/feature_store/__init__.py +++ b/amora/feature_store/__init__.py @@ -1,4 +1,4 @@ -from feast import RepoConfig, FeatureStore +from feast import FeatureStore, RepoConfig from amora.feature_store.config import settings diff --git a/amora/feature_store/decorators.py b/amora/feature_store/decorators.py index 48e286c3..8911d5ed 100644 --- a/amora/feature_store/decorators.py +++ b/amora/feature_store/decorators.py @@ -1,5 +1,6 @@ from feast import FeatureService -from amora.feature_store.feature_view import feature_view_for_model, name_for_model + +from amora.feature_store.feature_view import feature_view_for_model from amora.feature_store.registry import FEATURE_REGISTRY from amora.models import Model diff --git a/amora/feature_store/feature_view.py b/amora/feature_store/feature_view.py index 6bdd446b..61de9dac 100644 --- a/amora/feature_store/feature_view.py +++ b/amora/feature_store/feature_view.py @@ -1,14 +1,11 @@ -from typing import Union, NewType - -from feast import FeatureView, Feature, BigQuerySource -from sqlalchemy.orm import DeclarativeMeta +from feast import BigQuerySource, Feature, FeatureView +from google.protobuf.duration_pb2 import Duration from amora.feature_store import settings from amora.feature_store.protocols import FeatureViewSourceProtocol from amora.feature_store.type_mapping import SQLALCHEMY_TYPES_TO_FS_TYPES from amora.models import Model from amora.providers.bigquery import get_fully_qualified_id -from google.protobuf.duration_pb2 import Duration def name_for_model(model: Model) -> str: diff --git a/amora/feature_store/protocols.py b/amora/feature_store/protocols.py index 98183c7d..19ee1a50 100644 --- a/amora/feature_store/protocols.py +++ b/amora/feature_store/protocols.py @@ -1,4 +1,4 @@ -from typing import Protocol, runtime_checkable, List +from typing import List, Protocol, runtime_checkable from amora.models import Column @@ -61,10 +61,7 @@ def feature_view_features(cls) -> List[Column]: ```python @classmethod def feature_view_features(cls) -> List[Column]: - return [ - cls.count_transactions_last_30d, - cls.sum_transactions_last_30d - ] + return [cls.count_transactions_last_30d, cls.sum_transactions_last_30d] ``` """ ... @@ -83,7 +80,8 @@ def feature_view_event_timestamp(cls) -> Column: At your Amora Model, the column should be defined as such: ```python - from sqlalchemy import Column, TIMESTAMP + from sqlalchemy import TIMESTAMP, Column + from amora.models import AmoraModel, Field diff --git a/amora/feature_store/registry.py b/amora/feature_store/registry.py index e801254b..a9ac302a 100644 --- a/amora/feature_store/registry.py +++ b/amora/feature_store/registry.py @@ -1,5 +1,6 @@ -from typing import Dict, Iterable, Tuple, List -from feast import FeatureView, Entity, FeatureService +from typing import Dict, Iterable, List, Tuple + +from feast import Entity, FeatureService, FeatureView from feast.repo_contents import RepoContents from sqlalchemy.orm import InstrumentedAttribute diff --git a/amora/feature_store/type_mapping.py b/amora/feature_store/type_mapping.py index 61ac4267..71ea65ba 100644 --- a/amora/feature_store/type_mapping.py +++ b/amora/feature_store/type_mapping.py @@ -2,7 +2,6 @@ from feast import ValueType from sqlalchemy.sql import sqltypes - SQLALCHEMY_TYPES_TO_FS_TYPES = { sqltypes.Float: ValueType.FLOAT, sqltypes.String: ValueType.STRING, diff --git a/amora/materialization.py b/amora/materialization.py index fdb05869..f516c308 100644 --- a/amora/materialization.py +++ b/amora/materialization.py @@ -1,14 +1,13 @@ from dataclasses import dataclass from pathlib import Path -from typing import Optional +from typing import Iterable, Optional -from google.cloud.bigquery import Table, Client, QueryJobConfig +import matplotlib.pyplot as plt +import networkx as nx +from google.cloud.bigquery import Client, QueryJobConfig, Table -from amora.models import ( - MaterializationTypes, - amora_model_for_target_path, - Model, -) +from amora.config import settings +from amora.models import MaterializationTypes, Model, amora_model_for_target_path @dataclass @@ -29,6 +28,37 @@ def __repr__(self): return f"{self.model.__name__} -> {self.sql_stmt}" +class DependencyDAG(nx.DiGraph): + def __iter__(self): + # todo: validar se podemos substituir por graphlib + return nx.topological_sort(self) + + @classmethod + def from_tasks(cls, tasks: Iterable[Task]) -> "DependencyDAG": + dag = cls() + + for task in tasks: + dag.add_node(task.model.unique_name) + for dependency in getattr(task.model, "__depends_on__", []): + dag.add_edge(dependency.unique_name, task.model.unique_name) + + return dag + + def draw(self) -> None: + plt.figure(1, figsize=settings.CLI_MATERIALIZATION_DAG_FIGURE_SIZE) + nx.draw( + self, + with_labels=True, + font_weight="bold", + font_size="12", + linewidths=4, + node_size=150, + node_color="white", + font_color="green", + ) + plt.show() + + def materialize(sql: str, model: Model) -> Optional[Table]: config = model.__model_config__ materialization = config.materialized diff --git a/amora/models.py b/amora/models.py index 43a6db64..fb24e0d1 100644 --- a/amora/models.py +++ b/amora/models.py @@ -2,20 +2,21 @@ import re from dataclasses import dataclass, field from enum import Enum, auto -from importlib.util import spec_from_file_location, module_from_spec +from importlib.util import module_from_spec, spec_from_file_location from inspect import getfile from pathlib import Path -from typing import Iterable, List, Optional, Union, Dict, Any, Tuple, Type +from typing import Any, Dict, Iterable, List, Optional, Tuple, Type, Union +from sqlalchemy import Column, MetaData, Table, select +from sqlalchemy.orm import declared_attr +from sqlalchemy.sql import ColumnElement +from sqlmodel import Field, Session, SQLModel, create_engine + +from amora.config import settings from amora.logger import logger from amora.protocols import CompilableProtocol -from amora.config import settings -from sqlalchemy import MetaData, Table, select, Column -from sqlmodel import SQLModel, Field, create_engine, Session -from sqlalchemy.sql import ColumnElement -from sqlalchemy.orm import declared_attr from amora.types import Compilable -from amora.utils import model_path_for_target_path, list_files +from amora.utils import list_files, model_path_for_target_path select = select Column = Column @@ -92,9 +93,11 @@ def __tablename__(cls) -> str: # type: ignore By default, `__tablename__` is the `snake_case` class name. ```python - class MyModel(AmoraModel): ... + class MyModel(AmoraModel): + ... + - assert MyModel.__tablename__ == 'my_model + assert MyModel.__tablename__ == "my_model" ``` """ return re.sub(r"(? Compilable: Example: ```python - is_numeric(func.cast(Health.value, String).label('value_as_str')) + is_numeric(func.cast(Health.value, String).label("value_as_str")) ``` """ return select(column).where(func.REGEXP_CONTAINS(column, "[^0-9]")) diff --git a/amora/tests/audit.py b/amora/tests/audit.py index c033e795..faebf55b 100644 --- a/amora/tests/audit.py +++ b/amora/tests/audit.py @@ -1,20 +1,19 @@ import os from datetime import datetime -from typing import Optional, Iterable +from typing import Iterable, Optional from sqlalchemy import func +from amora.config import settings as default_settings from amora.models import ( AmoraModel, Field, - MetaData, - select, - ModelConfig, MaterializationTypes, + ModelConfig, Session, + select, ) from amora.storage import local_engine, local_metadata -from amora.config import settings from amora.types import Compilable from amora.version import VERSION @@ -56,7 +55,7 @@ class AuditLog(AmoraModel, table=True): ) settings: str = Field( description="JSON encoded current`amora.config.settings`", - default=settings.json(), + default=default_settings.json(), ) amora_version: str = Field( description="Current version of the amora package", default=VERSION diff --git a/amora/tests/generic_tests.py b/amora/tests/generic_tests.py index 133d1bca..0e5214bb 100644 --- a/amora/tests/generic_tests.py +++ b/amora/tests/generic_tests.py @@ -1,7 +1,7 @@ """ Tests that can be reused by multiple projects """ -from amora.models import list_models, MaterializationTypes +from amora.models import MaterializationTypes, list_models from amora.providers.bigquery import ( get_schema, get_schema_for_model, diff --git a/amora/tests/pytest_plugin.py b/amora/tests/pytest_plugin.py index b091fb98..63688238 100644 --- a/amora/tests/pytest_plugin.py +++ b/amora/tests/pytest_plugin.py @@ -1,4 +1,5 @@ from typing import Union + from _pytest.config import ExitCode from _pytest.main import Session from rich.console import Console diff --git a/amora/transformations.py b/amora/transformations.py index 95d52471..1e1b36f1 100644 --- a/amora/transformations.py +++ b/amora/transformations.py @@ -1,7 +1,7 @@ -from sqlalchemy import func, String, DateTime, Time, Date -from amora.models import ColumnElement +from sqlalchemy import Date, DateTime, String, Time, func from sqlalchemy.sql.functions import Function +from amora.models import ColumnElement from amora.providers.bigquery import TimePart diff --git a/amora/utils.py b/amora/utils.py index ad2e4999..23082e86 100644 --- a/amora/utils.py +++ b/amora/utils.py @@ -1,6 +1,6 @@ import os from pathlib import Path -from typing import Union, Iterable +from typing import Iterable, Union from amora.config import settings diff --git a/examples/amora_project/models/health.py b/examples/amora_project/models/health.py index 3667b182..9ba262ae 100644 --- a/examples/amora_project/models/health.py +++ b/examples/amora_project/models/health.py @@ -1,10 +1,10 @@ from datetime import datetime from sqlalchemy import TIMESTAMP - -from amora.models import AmoraModel, ModelConfig, MaterializationTypes, Column from sqlmodel import Field +from amora.models import AmoraModel, Column, MaterializationTypes, ModelConfig + class Health(AmoraModel, table=True): __model_config__ = ModelConfig( diff --git a/examples/amora_project/models/heart_agg.py b/examples/amora_project/models/heart_agg.py index 062a12ef..3a98b11c 100644 --- a/examples/amora_project/models/heart_agg.py +++ b/examples/amora_project/models/heart_agg.py @@ -1,7 +1,8 @@ +from sqlmodel import Field, func, select + +from amora.models import AmoraModel, MaterializationTypes, ModelConfig from amora.types import Compilable -from amora.models import AmoraModel, ModelConfig, MaterializationTypes from examples.amora_project.models.heart_rate import HeartRate -from sqlmodel import func, select, Field class HeartRateAgg(AmoraModel, table=True): diff --git a/examples/amora_project/models/heart_rate.py b/examples/amora_project/models/heart_rate.py index 04cb5cc9..a03ebe7d 100644 --- a/examples/amora_project/models/heart_rate.py +++ b/examples/amora_project/models/heart_rate.py @@ -1,17 +1,17 @@ from datetime import datetime from sqlalchemy import TIMESTAMP +from sqlmodel import Field, select -from amora.types import Compilable from amora.models import ( AmoraModel, + Column, + MaterializationTypes, ModelConfig, PartitionConfig, - MaterializationTypes, - Column, ) +from amora.types import Compilable from examples.amora_project.models.health import Health -from sqlmodel import Field, select class HeartRate(AmoraModel, table=True): diff --git a/examples/amora_project/models/heart_rate_over_100.py b/examples/amora_project/models/heart_rate_over_100.py index 9dd49b07..f9d1ab58 100644 --- a/examples/amora_project/models/heart_rate_over_100.py +++ b/examples/amora_project/models/heart_rate_over_100.py @@ -5,11 +5,11 @@ from amora.models import ( AmoraModel, - select, + Column, + Field, MaterializationTypes, ModelConfig, - Field, - Column, + select, ) from amora.types import Compilable from examples.amora_project.models.heart_rate import HeartRate diff --git a/examples/amora_project/models/step_count_by_source.py b/examples/amora_project/models/step_count_by_source.py index 04a0ffae..dba397a3 100644 --- a/examples/amora_project/models/step_count_by_source.py +++ b/examples/amora_project/models/step_count_by_source.py @@ -1,14 +1,12 @@ from datetime import datetime from typing import Optional -from sqlalchemy import func, TIMESTAMP, Column, literal, Integer +from sqlalchemy import TIMESTAMP, Column, func from amora.feature_store.decorators import feature_view -from amora.models import AmoraModel, ModelConfig, MaterializationTypes, select, Field -from amora.questions import QUESTIONS, question +from amora.models import AmoraModel, Field, MaterializationTypes, ModelConfig, select from amora.transformations import datetime_trunc_hour from amora.types import Compilable - from examples.amora_project.models.steps import Steps @@ -52,64 +50,3 @@ def feature_view_features(cls): @classmethod def feature_view_event_timestamp(cls): return cls.event_timestamp - - -# -# - API alternativa -# -# @question(StepCountBySource) -# def how_many_data_points_where_acquired(model): -# return select(func.sum(model.value_count)) -# -# -# -# - Configurar a forma de exibição em um dashboard -# -# @question(render_as=RenderTypes.big_number) -# def how_many_data_points_where_acquired(): -# return select(func.sum(StepCountBySource.value_count)) -# - - -@question -def how_many_data_points_where_acquired(): - return select(func.sum(StepCountBySource.value_count).label("total")) - - -@question -def what_are_the_available_data_sources(): - return select(StepCountBySource.source_name).distinct() - - -@question -def what_is_the_observation_starting_point(): - return select(func.min(StepCountBySource.event_timestamp).label("event_timestamp")) - - -@question -def what_is_the_latest_data_point(): - return select(func.max(StepCountBySource.event_timestamp).label("event_timestamp")) - - -@question -def what_is_the_total_step_count_to_date(): - """ - Qual o total de passos dados até hoje? - """ - return select( - func.sum(StepCountBySource.value_sum).label("total"), - StepCountBySource.source_name, - ).group_by(StepCountBySource.source_name) - - -@question -def what_is_the_current_estimated_walked_distance(): - avg_step_length_in_cm = literal(79, type_=Integer) - estimation_in_cm = func.sum(StepCountBySource.value_sum) * avg_step_length_in_cm - - return select( - estimation_in_cm.label("total_in_centimeters"), - (estimation_in_cm / 100).label("total_in_meters"), - (estimation_in_cm / 100000).label("total_in_kilometers"), - StepCountBySource.source_name, - ).group_by(StepCountBySource.source_name) diff --git a/examples/amora_project/models/steps.py b/examples/amora_project/models/steps.py index 006b55a8..802e564c 100644 --- a/examples/amora_project/models/steps.py +++ b/examples/amora_project/models/steps.py @@ -1,17 +1,17 @@ from datetime import datetime from sqlalchemy import TIMESTAMP +from sqlmodel import Field, select from amora.compilation import Compilable from amora.models import ( AmoraModel, + Column, + MaterializationTypes, ModelConfig, PartitionConfig, - MaterializationTypes, - Column, ) from examples.amora_project.models.health import Health -from sqlmodel import Field, select class Steps(AmoraModel, table=True): diff --git a/examples/amora_project/models/steps_agg.py b/examples/amora_project/models/steps_agg.py index 13ff8f3e..a4010383 100644 --- a/examples/amora_project/models/steps_agg.py +++ b/examples/amora_project/models/steps_agg.py @@ -1,7 +1,8 @@ +from sqlmodel import Field, func, select + from amora.compilation import Compilable from amora.models import AmoraModel, MaterializationTypes, ModelConfig from examples.amora_project.models.steps import Steps -from sqlmodel import func, select, Field class StepsAgg(AmoraModel, table=True): diff --git a/examples/amora_project/tests/test_health.py b/examples/amora_project/tests/test_health.py index 167a1ebf..89849cd5 100644 --- a/examples/amora_project/tests/test_health.py +++ b/examples/amora_project/tests/test_health.py @@ -1,10 +1,10 @@ from amora.tests.assertions import ( - is_not_null, - that, - is_non_negative, - has_accepted_values, expression_is_true, + has_accepted_values, + is_non_negative, + is_not_null, is_unique, + that, ) from examples.amora_project.models.health import Health diff --git a/examples/amora_project/tests/test_heart_agg.py b/examples/amora_project/tests/test_heart_agg.py index 63093cc0..e6959258 100644 --- a/examples/amora_project/tests/test_heart_agg.py +++ b/examples/amora_project/tests/test_heart_agg.py @@ -1,9 +1,9 @@ from amora.tests.assertions import ( + are_unique_together, expression_is_true, + has_at_least_one_not_null_value, is_non_negative, that, - are_unique_together, - has_at_least_one_not_null_value, ) from examples.amora_project.models.heart_agg import HeartRateAgg diff --git a/examples/amora_project/tests/test_heart_rate.py b/examples/amora_project/tests/test_heart_rate.py index 3d8c780b..b41f293f 100644 --- a/examples/amora_project/tests/test_heart_rate.py +++ b/examples/amora_project/tests/test_heart_rate.py @@ -1,9 +1,9 @@ from amora.tests.assertions import ( + expression_is_true, + has_accepted_values, + is_non_negative, relationship, that, - is_non_negative, - has_accepted_values, - expression_is_true, ) from examples.amora_project.models.health import Health from examples.amora_project.models.heart_rate import HeartRate diff --git a/examples/amora_project/tests/test_models_schema.py b/examples/amora_project/tests/test_models_schema.py index aa37cda6..8b137891 100644 --- a/examples/amora_project/tests/test_models_schema.py +++ b/examples/amora_project/tests/test_models_schema.py @@ -1,4 +1 @@ -from amora.tests.generic_tests import ( - test_models_schema_equal_its_source_schema, - test_materialized_schema_equal_local_schema, -) + diff --git a/examples/amora_project/tests/test_steps.py b/examples/amora_project/tests/test_steps.py index 2523df61..1d360eba 100644 --- a/examples/amora_project/tests/test_steps.py +++ b/examples/amora_project/tests/test_steps.py @@ -1,9 +1,9 @@ from amora.tests.assertions import ( + expression_is_true, + has_accepted_values, + is_non_negative, relationship, that, - is_non_negative, - has_accepted_values, - expression_is_true, ) from examples.amora_project.models.health import Health from examples.amora_project.models.steps import Steps diff --git a/poetry.lock b/poetry.lock index 2a0562f8..ee625c6a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -112,6 +112,17 @@ docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +[[package]] +name = "autoflake" +version = "1.4" +description = "Removes unused imports and unused variables" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +pyflakes = ">=1.1.0" + [[package]] name = "backcall" version = "0.2.0" @@ -173,14 +184,6 @@ webencodings = "*" css = ["tinycss2 (>=1.1.0)"] dev = ["pip-tools (==6.5.1)", "pytest (==7.1.1)", "flake8 (==4.0.1)", "tox (==3.24.5)", "sphinx (==4.3.2)", "twine (==4.0.0)", "wheel (==0.37.1)", "hashin (==0.17.0)", "black (==22.3.0)", "mypy (==0.942)"] -[[package]] -name = "brotli" -version = "1.0.9" -description = "Python bindings for the Brotli compression library" -category = "main" -optional = true -python-versions = "*" - [[package]] name = "cachetools" version = "5.0.0" @@ -208,6 +211,14 @@ python-versions = "*" [package.dependencies] pycparser = "*" +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "dev" +optional = false +python-versions = ">=3.6.1" + [[package]] name = "charset-normalizer" version = "2.0.12" @@ -238,6 +249,14 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "com2ann" +version = "0.3.0" +description = "Tool to translate type comments to annotations." +category = "dev" +optional = false +python-versions = ">=3.8" + [[package]] name = "commonmark" version = "0.9.1" @@ -279,64 +298,6 @@ category = "main" optional = false python-versions = ">=3.6" -[[package]] -name = "dash" -version = "2.1.0" -description = "A Python framework for building reactive web-apps. Developed by Plotly." -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -dash-core-components = "2.0.0" -dash-html-components = "2.0.0" -dash-table = "5.0.0" -Flask = ">=1.0.4" -flask-compress = "*" -plotly = ">=5.0.0" - -[package.extras] -celery = ["redis (>=3.5.3)", "celery[redis] (>=5.1.2)"] -ci = ["black (==21.6b0)", "dash-flow-example (==0.0.5)", "dash-dangerously-set-inner-html", "flake8 (==3.9.2)", "flaky (==3.7.0)", "flask-talisman (==0.8.1)", "mimesis", "mock (==4.0.3)", "numpy", "preconditions", "pylint (==2.10.2)", "pytest-mock (==3.2.0)", "pytest-sugar (==0.9.4)", "isort (==4.3.21)", "orjson (==3.5.4)", "pyarrow (<3)", "pandas (==1.1.5)", "xlrd (<2)", "orjson (==3.6.3)", "pyarrow", "openpyxl", "pandas (>=1.4.0)", "xlrd (>=2.0.1)"] -dev = ["coloredlogs (>=15.0.1)", "fire (>=0.4.0)", "PyYAML (>=5.4.1)"] -diskcache = ["diskcache (>=5.2.1)", "multiprocess (>=0.70.12)", "psutil (>=5.8.0)"] -testing = ["beautifulsoup4 (>=4.8.2)", "lxml (>=4.6.2)", "percy (>=2.0.2)", "pytest (>=6.0.2)", "requests[security] (>=2.21.0)", "selenium (>=3.141.0)", "waitress (>=1.4.4)", "webdriver-manager (>=3.5.1)", "cryptography (<3.4)"] - -[[package]] -name = "dash-core-components" -version = "2.0.0" -description = "Core component suite for Dash" -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "dash-cytoscape" -version = "0.2.0" -description = "A Component Library for Dash aimed at facilitating network visualization in Python, wrapped around Cytoscape.js" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -dash = "*" - -[[package]] -name = "dash-html-components" -version = "2.0.0" -description = "Vanilla HTML components for Dash" -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "dash-table" -version = "5.0.0" -description = "Dash table" -category = "main" -optional = true -python-versions = "*" - [[package]] name = "debugpy" version = "1.6.0" @@ -372,6 +333,14 @@ python-versions = ">=2.7, !=3.0.*" [package.extras] graph = ["objgraph (>=1.7.2)"] +[[package]] +name = "distlib" +version = "0.3.4" +description = "Distribution utilities" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "entrypoints" version = "0.4" @@ -487,52 +456,32 @@ redis = ["redis (>=4.1.0)", "hiredis (>=2.0.0)"] snowflake = ["snowflake-connector-python[pandas] (>=2.7.3)"] [[package]] -name = "flask" -version = "2.1.1" -description = "A simple framework for building complex web applications." -category = "main" -optional = true +name = "filelock" +version = "3.6.0" +description = "A platform independent file lock." +category = "dev" +optional = false python-versions = ">=3.7" -[package.dependencies] -click = ">=8.0" -importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} -itsdangerous = ">=2.0" -Jinja2 = ">=3.0" -Werkzeug = ">=2.0" - [package.extras] -async = ["asgiref (>=3.2)"] -dotenv = ["python-dotenv"] - -[[package]] -name = "flask-compress" -version = "1.11" -description = "Compress responses in your Flask app with gzip, deflate or brotli." -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -brotli = "*" -flask = "*" +docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] +testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] [[package]] name = "fonttools" -version = "4.33.2" +version = "4.32.0" description = "Tools to manipulate font files" category = "main" optional = false python-versions = ">=3.7" [package.extras] -all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "uharfbuzz (>=0.23.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=14.0.0)", "xattr"] +all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=14.0.0)", "xattr"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["scipy", "munkres"] lxml = ["lxml (>=4.0,<5)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] @@ -606,7 +555,7 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2)"] [[package]] name = "google-auth" -version = "2.6.6" +version = "2.6.5" description = "Google Authentication Library" category = "main" optional = false @@ -720,7 +669,7 @@ docs = ["sphinx"] [[package]] name = "griffe" -version = "0.18.0" +version = "0.17.0" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." category = "dev" optional = false @@ -795,6 +744,17 @@ python-versions = ">=3.5.0" [package.extras] test = ["Cython (>=0.29.24,<0.30.0)"] +[[package]] +name = "identify" +version = "2.5.0" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +license = ["ukkonen"] + [[package]] name = "idna" version = "3.3" @@ -807,7 +767,7 @@ python-versions = ">=3.5" name = "importlib-metadata" version = "4.11.3" description = "Read metadata from Python packages" -category = "main" +category = "dev" optional = false python-versions = ">=3.7" @@ -914,12 +874,18 @@ widgetsnbextension = ">=3.6.0,<3.7.0" test = ["pytest (>=3.6.0)", "pytest-cov", "mock"] [[package]] -name = "itsdangerous" -version = "2.1.2" -description = "Safely pass data to untrusted environments and back." -category = "main" -optional = true -python-versions = ">=3.7" +name = "isort" +version = "5.10.1" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.6.1,<4.0" + +[package.extras] +pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +requirements_deprecated_finder = ["pipreqs", "pip-api"] +colors = ["colorama (>=0.4.3,<0.5.0)"] +plugins = ["setuptools"] [[package]] name = "jedi" @@ -1068,6 +1034,22 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "libcst" +version = "0.4.1" +description = "A concrete syntax tree with AST-like properties for Python 3.5, 3.6, 3.7 and 3.8 programs." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyyaml = ">=5.2" +typing-extensions = ">=3.7.4.2" +typing-inspect = ">=0.4.0" + +[package.extras] +dev = ["black (==21.10b0)", "coverage (>=4.5.4)", "fixit (==0.1.1)", "flake8 (>=3.7.8)", "hypothesis (>=4.36.0)", "hypothesmith (>=0.0.4)", "jupyter (>=1.0.0)", "maturin (>=0.8.3,<0.9)", "nbsphinx (>=0.4.2)", "prompt-toolkit (>=2.0.9)", "setuptools-scm (>=6.0.1)", "sphinx-rtd-theme (>=0.4.3)", "ufmt (==1.3)", "usort (==1.0.0rc1)", "setuptools-rust (>=0.12.1)", "slotscheck (>=0.7.1)", "pyre-check (==0.9.9)"] + [[package]] name = "lxml" version = "4.8.0" @@ -1436,13 +1418,21 @@ doc = ["sphinx (>=4.5)", "pydata-sphinx-theme (>=0.8.1)", "sphinx-gallery (>=0.1 extra = ["lxml (>=4.6)", "pygraphviz (>=1.9)", "pydot (>=1.4.2)", "sympy (>=1.10)"] test = ["pytest (>=7.1)", "pytest-cov (>=3.0)", "codecov (>=2.1)"] +[[package]] +name = "nodeenv" +version = "1.6.0" +description = "Node.js virtual environment builder" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "notebook" -version = "6.4.11" +version = "6.4.10" description = "A web-based notebook environment for interactive computing" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.6" [package.dependencies] argon2-cffi = "*" @@ -1464,7 +1454,7 @@ traitlets = ">=4.2.1" [package.extras] docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] json-logging = ["json-logging"] -test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] +test = ["pytest", "coverage", "requests", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] [[package]] name = "numpy" @@ -1593,18 +1583,6 @@ python-versions = ">=3.7" docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] -[[package]] -name = "plotly" -version = "5.7.0" -description = "An open-source, interactive data visualization library for Python" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -six = "*" -tenacity = ">=6.2.0" - [[package]] name = "pluggy" version = "1.0.0" @@ -1617,6 +1595,22 @@ python-versions = ">=3.6" dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "pre-commit" +version = "2.18.1" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +toml = "*" +virtualenv = ">=20.0.8" + [[package]] name = "prometheus-client" version = "0.14.1" @@ -1655,7 +1649,7 @@ testing = ["google-api-core[grpc] (>=1.22.2)"] [[package]] name = "protobuf" -version = "3.20.1" +version = "3.20.0" description = "Protocol Buffers" category = "main" optional = false @@ -1752,6 +1746,14 @@ typing-extensions = ">=3.7.4.3" dotenv = ["python-dotenv (>=0.10.4)"] email = ["email-validator (>=1.0.3)"] +[[package]] +name = "pyflakes" +version = "2.4.0" +description = "passive checker of Python programs" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "pygments" version = "2.11.2" @@ -1909,6 +1911,17 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "pyupgrade" +version = "2.32.0" +description = "A tool to automatically upgrade syntax for newer versions." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +tokenize-rt = ">=3.2.0" + [[package]] name = "pywin32" version = "303" @@ -1992,6 +2005,14 @@ packaging = "*" [package.extras] test = ["pytest (>=6.0.0)", "pytest-cov (>=3.0.0)", "pytest-qt"] +[[package]] +name = "refactor" +version = "0.4.1" +description = "AST-based fragmental source code refactoring toolkit" +category = "dev" +optional = false +python-versions = ">=3.9" + [[package]] name = "requests" version = "2.27.1" @@ -2066,6 +2087,23 @@ tomli = ">=1.0.0" test = ["pytest (>=6.2)", "virtualenv (>20)"] toml = ["setuptools (>=42)"] +[[package]] +name = "shed" +version = "0.9.5" +description = "`shed` canonicalises Python code." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +autoflake = ">=1.4" +black = ">=22.3.0" +com2ann = {version = ">=0.3.0", markers = "python_version >= \"3.8\""} +isort = ">=5.10.1" +libcst = ">=0.4.0" +pyupgrade = ">=2.32.0" +teyit = {version = ">=0.4.1", markers = "python_version >= \"3.9\""} + [[package]] name = "shellingham" version = "1.4.0" @@ -2163,7 +2201,7 @@ tests = ["packaging", "pytz"] [[package]] name = "sqlalchemy2-stubs" -version = "0.0.2a22" +version = "0.0.2a21" description = "Typing Stubs for SQLAlchemy 1.4" category = "main" optional = false @@ -2274,6 +2312,17 @@ tornado = ">=4" [package.extras] test = ["pytest"] +[[package]] +name = "teyit" +version = "0.4.1" +description = "Unittest assertion formatter" +category = "dev" +optional = false +python-versions = ">=3.9" + +[package.dependencies] +refactor = "0.4.1" + [[package]] name = "tinycss2" version = "1.1.1" @@ -2289,6 +2338,14 @@ webencodings = ">=0.4" doc = ["sphinx", "sphinx-rtd-theme"] test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"] +[[package]] +name = "tokenize-rt" +version = "4.2.1" +description = "A wrapper around the stdlib `tokenize` which roundtrips." +category = "dev" +optional = false +python-versions = ">=3.6.1" + [[package]] name = "toml" version = "0.10.2" @@ -2368,6 +2425,18 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "typing-inspect" +version = "0.7.1" +description = "Runtime inspection utilities for typing module." +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +mypy-extensions = ">=0.3.0" +typing-extensions = ">=3.7.4" + [[package]] name = "urllib3" version = "1.26.9" @@ -2417,6 +2486,24 @@ dev = ["Cython (>=0.29.24,<0.30.0)", "pytest (>=3.6.0)", "Sphinx (>=4.1.2,<4.2.0 docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)"] test = ["aiohttp", "flake8 (>=3.9.2,<3.10.0)", "psutil", "pycodestyle (>=2.7.0,<2.8.0)", "pyOpenSSL (>=19.0.0,<19.1.0)", "mypy (>=0.800)"] +[[package]] +name = "virtualenv" +version = "20.14.1" +description = "Virtual Python Environment builder" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.dependencies] +distlib = ">=0.3.1,<1" +filelock = ">=3.2,<4" +platformdirs = ">=2,<3" +six = ">=1.9.0,<2" + +[package.extras] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] + [[package]] name = "watchdog" version = "2.1.7" @@ -2463,17 +2550,6 @@ category = "main" optional = true python-versions = ">=3.7" -[[package]] -name = "werkzeug" -version = "2.0.0" -description = "The comprehensive WSGI web application library." -category = "main" -optional = true -python-versions = ">=3.6" - -[package.extras] -watchdog = ["watchdog"] - [[package]] name = "widgetsnbextension" version = "3.6.0" @@ -2489,7 +2565,7 @@ notebook = ">=4.4.1" name = "zipp" version = "3.8.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" +category = "dev" optional = false python-versions = ">=3.7" @@ -2498,13 +2574,12 @@ docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [extras] -dash = ["dash", "dash-cytoscape", "Werkzeug"] feature-store = ["feast"] [metadata] lock-version = "1.1" python-versions = ">=3.9.6,<3.10" -content-hash = "746afdc2440f5ecebc5128183368150ebabdbbc975e26fa38ce89f45758a7546" +content-hash = "c85b4c31a42c053b01b2c1f3eee4111eb613749bab5263d6127ef42cd54fe0ee" [metadata.files] absl-py = [ @@ -2562,6 +2637,9 @@ attrs = [ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, ] +autoflake = [ + {file = "autoflake-1.4.tar.gz", hash = "sha256:61a353012cff6ab94ca062823d1fb2f692c4acda51c76ff83a8d77915fba51ea"}, +] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, @@ -2599,70 +2677,6 @@ bleach = [ {file = "bleach-5.0.0-py3-none-any.whl", hash = "sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1"}, {file = "bleach-5.0.0.tar.gz", hash = "sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"}, ] -brotli = [ - {file = "Brotli-1.0.9-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:268fe94547ba25b58ebc724680609c8ee3e5a843202e9a381f6f9c5e8bdb5c70"}, - {file = "Brotli-1.0.9-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:c2415d9d082152460f2bd4e382a1e85aed233abc92db5a3880da2257dc7daf7b"}, - {file = "Brotli-1.0.9-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5913a1177fc36e30fcf6dc868ce23b0453952c78c04c266d3149b3d39e1410d6"}, - {file = "Brotli-1.0.9-cp27-cp27m-win32.whl", hash = "sha256:afde17ae04d90fbe53afb628f7f2d4ca022797aa093e809de5c3cf276f61bbfa"}, - {file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7cb81373984cc0e4682f31bc3d6be9026006d96eecd07ea49aafb06897746452"}, - {file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:db844eb158a87ccab83e868a762ea8024ae27337fc7ddcbfcddd157f841fdfe7"}, - {file = "Brotli-1.0.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9744a863b489c79a73aba014df554b0e7a0fc44ef3f8a0ef2a52919c7d155031"}, - {file = "Brotli-1.0.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a72661af47119a80d82fa583b554095308d6a4c356b2a554fdc2799bc19f2a43"}, - {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ee83d3e3a024a9618e5be64648d6d11c37047ac48adff25f12fa4226cf23d1c"}, - {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:19598ecddd8a212aedb1ffa15763dd52a388518c4550e615aed88dc3753c0f0c"}, - {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:44bb8ff420c1d19d91d79d8c3574b8954288bdff0273bf788954064d260d7ab0"}, - {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e23281b9a08ec338469268f98f194658abfb13658ee98e2b7f85ee9dd06caa91"}, - {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3496fc835370da351d37cada4cf744039616a6db7d13c430035e901443a34daa"}, - {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83bb06a0192cccf1eb8d0a28672a1b79c74c3a8a5f2619625aeb6f28b3a82bb"}, - {file = "Brotli-1.0.9-cp310-cp310-win32.whl", hash = "sha256:26d168aac4aaec9a4394221240e8a5436b5634adc3cd1cdf637f6645cecbf181"}, - {file = "Brotli-1.0.9-cp310-cp310-win_amd64.whl", hash = "sha256:622a231b08899c864eb87e85f81c75e7b9ce05b001e59bbfbf43d4a71f5f32b2"}, - {file = "Brotli-1.0.9-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4"}, - {file = "Brotli-1.0.9-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:6b2ae9f5f67f89aade1fab0f7fd8f2832501311c363a21579d02defa844d9296"}, - {file = "Brotli-1.0.9-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:68715970f16b6e92c574c30747c95cf8cf62804569647386ff032195dc89a430"}, - {file = "Brotli-1.0.9-cp35-cp35m-win32.whl", hash = "sha256:defed7ea5f218a9f2336301e6fd379f55c655bea65ba2476346340a0ce6f74a1"}, - {file = "Brotli-1.0.9-cp35-cp35m-win_amd64.whl", hash = "sha256:88c63a1b55f352b02c6ffd24b15ead9fc0e8bf781dbe070213039324922a2eea"}, - {file = "Brotli-1.0.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:503fa6af7da9f4b5780bb7e4cbe0c639b010f12be85d02c99452825dd0feef3f"}, - {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4"}, - {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:93130612b837103e15ac3f9cbacb4613f9e348b58b3aad53721d92e57f96d46a"}, - {file = "Brotli-1.0.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87fdccbb6bb589095f413b1e05734ba492c962b4a45a13ff3408fa44ffe6479b"}, - {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:6d847b14f7ea89f6ad3c9e3901d1bc4835f6b390a9c71df999b0162d9bb1e20f"}, - {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:495ba7e49c2db22b046a53b469bbecea802efce200dffb69b93dd47397edc9b6"}, - {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4688c1e42968ba52e57d8670ad2306fe92e0169c6f3af0089be75bbac0c64a3b"}, - {file = "Brotli-1.0.9-cp36-cp36m-win32.whl", hash = "sha256:61a7ee1f13ab913897dac7da44a73c6d44d48a4adff42a5701e3239791c96e14"}, - {file = "Brotli-1.0.9-cp36-cp36m-win_amd64.whl", hash = "sha256:1c48472a6ba3b113452355b9af0a60da5c2ae60477f8feda8346f8fd48e3e87c"}, - {file = "Brotli-1.0.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126"}, - {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d"}, - {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12"}, - {file = "Brotli-1.0.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29d1d350178e5225397e28ea1b7aca3648fcbab546d20e7475805437bfb0a130"}, - {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7bbff90b63328013e1e8cb50650ae0b9bac54ffb4be6104378490193cd60f85a"}, - {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ec1947eabbaf8e0531e8e899fc1d9876c179fc518989461f5d24e2223395a9e3"}, - {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12effe280b8ebfd389022aa65114e30407540ccb89b177d3fbc9a4f177c4bd5d"}, - {file = "Brotli-1.0.9-cp37-cp37m-win32.whl", hash = "sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"}, - {file = "Brotli-1.0.9-cp37-cp37m-win_amd64.whl", hash = "sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5"}, - {file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e16eb9541f3dd1a3e92b89005e37b1257b157b7256df0e36bd7b33b50be73bcb"}, - {file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:160c78292e98d21e73a4cc7f76a234390e516afcd982fa17e1422f7c6a9ce9c8"}, - {file = "Brotli-1.0.9-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb"}, - {file = "Brotli-1.0.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5b6ef7d9f9c38292df3690fe3e302b5b530999fa90014853dcd0d6902fb59f26"}, - {file = "Brotli-1.0.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a674ac10e0a87b683f4fa2b6fa41090edfd686a6524bd8dedbd6138b309175c"}, - {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e2d9e1cbc1b25e22000328702b014227737756f4b5bf5c485ac1d8091ada078b"}, - {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b336c5e9cf03c7be40c47b5fd694c43c9f1358a80ba384a21969e0b4e66a9b17"}, - {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:85f7912459c67eaab2fb854ed2bc1cc25772b300545fe7ed2dc03954da638649"}, - {file = "Brotli-1.0.9-cp38-cp38-win32.whl", hash = "sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429"}, - {file = "Brotli-1.0.9-cp38-cp38-win_amd64.whl", hash = "sha256:269a5743a393c65db46a7bb982644c67ecba4b8d91b392403ad8a861ba6f495f"}, - {file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2aad0e0baa04517741c9bb5b07586c642302e5fb3e75319cb62087bd0995ab19"}, - {file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5cb1e18167792d7d21e21365d7650b72d5081ed476123ff7b8cac7f45189c0c7"}, - {file = "Brotli-1.0.9-cp39-cp39-manylinux1_i686.whl", hash = "sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b"}, - {file = "Brotli-1.0.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389"}, - {file = "Brotli-1.0.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bf919756d25e4114ace16a8ce91eb340eb57a08e2c6950c3cebcbe3dff2a5e7"}, - {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e4c4e92c14a57c9bd4cb4be678c25369bf7a092d55fd0866f759e425b9660806"}, - {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e48f4234f2469ed012a98f4b7874e7f7e173c167bed4934912a29e03167cf6b1"}, - {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ed4c92a0665002ff8ea852353aeb60d9141eb04109e88928026d3c8a9e5433c"}, - {file = "Brotli-1.0.9-cp39-cp39-win32.whl", hash = "sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3"}, - {file = "Brotli-1.0.9-cp39-cp39-win_amd64.whl", hash = "sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761"}, - {file = "Brotli-1.0.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9749a124280a0ada4187a6cfd1ffd35c350fb3af79c706589d98e088c5044267"}, - {file = "Brotli-1.0.9-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:76ffebb907bec09ff511bb3acc077695e2c32bc2142819491579a695f77ffd4d"}, - {file = "Brotli-1.0.9.zip", hash = "sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438"}, -] cachetools = [ {file = "cachetools-5.0.0-py3-none-any.whl", hash = "sha256:8fecd4203a38af17928be7b90689d8083603073622229ca7077b72d8e5a976e4"}, {file = "cachetools-5.0.0.tar.gz", hash = "sha256:486471dfa8799eb7ec503a8059e263db000cdda20075ce5e48903087f79d5fd6"}, @@ -2723,6 +2737,10 @@ cffi = [ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, ] +cfgv = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] charset-normalizer = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, @@ -2735,6 +2753,10 @@ colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] +com2ann = [ + {file = "com2ann-0.3.0-py3-none-any.whl", hash = "sha256:bb0994c7ea9e6f847c98b20d0cc056aa90c256937d3aede504026663d7f36bb6"}, + {file = "com2ann-0.3.0.tar.gz", hash = "sha256:0da5e3900292057e5c4a5e33b21fe48817b4923437a095e6a677dff94b3d4e10"}, +] commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, @@ -2789,25 +2811,6 @@ cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, ] -dash = [ - {file = "dash-2.1.0-py3-none-any.whl", hash = "sha256:5c19cddad8dcf473ce0cc9a8aa40f7fc8f2b7856f7daad1f8bcd992a8203b8c0"}, - {file = "dash-2.1.0.tar.gz", hash = "sha256:b5b29a3e2862a6700cf50582d81bda4edfe57d47e1c71c519a6c87f9187587e5"}, -] -dash-core-components = [ - {file = "dash_core_components-2.0.0-py3-none-any.whl", hash = "sha256:52b8e8cce13b18d0802ee3acbc5e888cb1248a04968f962d63d070400af2e346"}, - {file = "dash_core_components-2.0.0.tar.gz", hash = "sha256:c6733874af975e552f95a1398a16c2ee7df14ce43fa60bb3718a3c6e0b63ffee"}, -] -dash-cytoscape = [ - {file = "dash_cytoscape-0.2.0.tar.gz", hash = "sha256:0669c79c197e4b150a5db7a278d1c7acebc947f3f5cbad5274835ebb44f712cd"}, -] -dash-html-components = [ - {file = "dash_html_components-2.0.0-py3-none-any.whl", hash = "sha256:b42cc903713c9706af03b3f2548bda4be7307a7cf89b7d6eae3da872717d1b63"}, - {file = "dash_html_components-2.0.0.tar.gz", hash = "sha256:8703a601080f02619a6390998e0b3da4a5daabe97a1fd7a9cebc09d015f26e50"}, -] -dash-table = [ - {file = "dash_table-5.0.0-py3-none-any.whl", hash = "sha256:19036fa352bb1c11baf38068ec62d172f0515f73ca3276c79dee49b95ddc16c9"}, - {file = "dash_table-5.0.0.tar.gz", hash = "sha256:18624d693d4c8ef2ddec99a6f167593437a7ea0bf153aa20f318c170c5bc7308"}, -] debugpy = [ {file = "debugpy-1.6.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad"}, {file = "debugpy-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f"}, @@ -2840,6 +2843,10 @@ dill = [ {file = "dill-0.3.4-py2.py3-none-any.whl", hash = "sha256:7e40e4a70304fd9ceab3535d36e58791d9c4a776b38ec7f7ec9afc8d3dca4d4f"}, {file = "dill-0.3.4.zip", hash = "sha256:9f9734205146b2b353ab3fec9af0070237b6ddae78452af83d2fca84d739e675"}, ] +distlib = [ + {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, + {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, +] entrypoints = [ {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, @@ -2882,17 +2889,13 @@ feast = [ {file = "feast-0.18.0-py3-none-any.whl", hash = "sha256:0d93ed2a4e30cf737bc3c250f14d34939b58014e62033eaa1a3ed6c3b4ccec13"}, {file = "feast-0.18.0.tar.gz", hash = "sha256:b7cbaae32cc6f3b7e585bbdc538b8062bc979e59e401fa3a2619ef445910f55f"}, ] -flask = [ - {file = "Flask-2.1.1-py3-none-any.whl", hash = "sha256:8a4cf32d904cf5621db9f0c9fbcd7efabf3003f22a04e4d0ce790c7137ec5264"}, - {file = "Flask-2.1.1.tar.gz", hash = "sha256:a8c9bd3e558ec99646d177a9739c41df1ded0629480b4c8d2975412f3c9519c8"}, -] -flask-compress = [ - {file = "Flask-Compress-1.11.tar.gz", hash = "sha256:f569f32c446d6b25ca8e347d5003a0531811ef732678005b0036fc1c9eb1c21c"}, - {file = "Flask_Compress-1.11-py3-none-any.whl", hash = "sha256:7ccc4102104a63e6207f39eb307f99aebbfbaf4e70992d727440cff29119a0a0"}, +filelock = [ + {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"}, + {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"}, ] fonttools = [ - {file = "fonttools-4.33.2-py3-none-any.whl", hash = "sha256:b4da40696829845ea8c1cb33ce51c552179754cbee7ab4e8b96a6bcf421f437a"}, - {file = "fonttools-4.33.2.zip", hash = "sha256:696fe922a271584c3ec8325ba31d4001a4fd6c4953b22900b767f1cb53ce1044"}, + {file = "fonttools-4.32.0-py3-none-any.whl", hash = "sha256:b038d1a0dee0079de7ade57071e2e2aced6e35bd697de244ac62938b2b1628c1"}, + {file = "fonttools-4.32.0.zip", hash = "sha256:59a90de72149893167e3d552ae2402c6874e006b9adc3feaf5f6d706fe20d392"}, ] future = [ {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, @@ -2914,8 +2917,8 @@ google-api-core = [ {file = "google_api_core-2.7.2-py3-none-any.whl", hash = "sha256:8fcbe52dc129fd83dca4e638a76f22b3a11579c493e643134e50e9870b233302"}, ] google-auth = [ - {file = "google-auth-2.6.6.tar.gz", hash = "sha256:1ba4938e032b73deb51e59c4656a00e0939cf0b1112575099f136babb4563312"}, - {file = "google_auth-2.6.6-py2.py3-none-any.whl", hash = "sha256:349ac49b18b01019453cc99c11c92ed772739778c92f184002b7ab3a5b7ac77d"}, + {file = "google-auth-2.6.5.tar.gz", hash = "sha256:04e224f241c0566477bb35a8a93be8c635210de743bde454d49393cfb605266d"}, + {file = "google_auth-2.6.5-py2.py3-none-any.whl", hash = "sha256:9a88ee548f6fd49467e2e443dfbfe10344e5a270629a137a3a0b3437ec6b02a6"}, ] google-cloud-bigquery = [ {file = "google-cloud-bigquery-2.34.3.tar.gz", hash = "sha256:0ab6362a86a29f17e379e886b49544bc0b75626902a48d12c13a0b47f821bf4a"}, @@ -2990,6 +2993,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497"}, {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1"}, {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58"}, + {file = "greenlet-1.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965"}, {file = "greenlet-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708"}, {file = "greenlet-1.1.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23"}, {file = "greenlet-1.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee"}, @@ -3002,6 +3006,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce"}, {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08"}, {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168"}, + {file = "greenlet-1.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f"}, {file = "greenlet-1.1.2-cp36-cp36m-win32.whl", hash = "sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa"}, {file = "greenlet-1.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d"}, {file = "greenlet-1.1.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4"}, @@ -3010,6 +3015,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1"}, {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28"}, {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5"}, + {file = "greenlet-1.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe"}, {file = "greenlet-1.1.2-cp37-cp37m-win32.whl", hash = "sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc"}, {file = "greenlet-1.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06"}, {file = "greenlet-1.1.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0"}, @@ -3018,6 +3024,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43"}, {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711"}, {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b"}, + {file = "greenlet-1.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2"}, {file = "greenlet-1.1.2-cp38-cp38-win32.whl", hash = "sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd"}, {file = "greenlet-1.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3"}, {file = "greenlet-1.1.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67"}, @@ -3026,13 +3033,14 @@ greenlet = [ {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88"}, {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b"}, {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3"}, + {file = "greenlet-1.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3"}, {file = "greenlet-1.1.2-cp39-cp39-win32.whl", hash = "sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf"}, {file = "greenlet-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd"}, {file = "greenlet-1.1.2.tar.gz", hash = "sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a"}, ] griffe = [ - {file = "griffe-0.18.0-py3-none-any.whl", hash = "sha256:578e52513851f4652eb57543364df1675a755536b0ba8548cbb96dd07962b115"}, - {file = "griffe-0.18.0.tar.gz", hash = "sha256:b6231f80a002322ac3fcfc2e1cb02a016666b7caba1da9468fe52a5ef8710dec"}, + {file = "griffe-0.17.0-py3-none-any.whl", hash = "sha256:5f3e5fff41f04b754dd77b6cea1040b2d3ecb6cb900c592f4f3b41879aaaecfd"}, + {file = "griffe-0.17.0.tar.gz", hash = "sha256:a445b3f64662d29584f1691e5d5573ed64d6ee7a1cac86be7d6807b1ac0c51e5"}, ] grpcio = [ {file = "grpcio-1.45.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:0d74a159df9401747e57960f0772f4371486e3281919004efa9df8a82985abee"}, @@ -3141,6 +3149,10 @@ httptools = [ {file = "httptools-0.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:34d2903dd2a3dd85d33705b6fde40bf91fc44411661283763fd0746723963c83"}, {file = "httptools-0.4.0.tar.gz", hash = "sha256:2c9a930c378b3d15d6b695fb95ebcff81a7395b4f9775c4f10a076beb0b2c1ff"}, ] +identify = [ + {file = "identify-2.5.0-py2.py3-none-any.whl", hash = "sha256:3acfe15a96e4272b4ec5662ee3e231ceba976ef63fd9980ed2ce9cc415df393f"}, + {file = "identify-2.5.0.tar.gz", hash = "sha256:c83af514ea50bf2be2c4a3f2fb349442b59dc87284558ae9ff54191bff3541d2"}, +] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, @@ -3169,9 +3181,9 @@ ipywidgets = [ {file = "ipywidgets-7.7.0-py2.py3-none-any.whl", hash = "sha256:e58ff58bc94d481e91ecb6e13a5cb96a87b6b8ade135e055603d0ca24593df38"}, {file = "ipywidgets-7.7.0.tar.gz", hash = "sha256:ab4a5596855a88b83761921c768707d65e5847068139bc1729ddfe834703542a"}, ] -itsdangerous = [ - {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, - {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, +isort = [ + {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, + {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, ] jedi = [ {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, @@ -3258,6 +3270,37 @@ kiwisolver = [ {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42f6ef9b640deb6f7d438e0a371aedd8bef6ddfde30683491b2e6f568b4e884e"}, {file = "kiwisolver-1.4.2.tar.gz", hash = "sha256:7f606d91b8a8816be476513a77fd30abe66227039bd6f8b406c348cb0247dcc9"}, ] +libcst = [ + {file = "libcst-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46bc765dccd9741951b3716ce8ead0d7014fe5fe04927a5920188aedf786133e"}, + {file = "libcst-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:af9526ecc53a515cb5a1761536d6cc6dce7b2ccd958a01d1f185fa580d844afa"}, + {file = "libcst-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2473609db1218ee3a3d69d39f97e97b65f6fdb90b2bfce0af7680448578ed6eb"}, + {file = "libcst-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:640256354d7183bc801a78a5b05238ccdc46b3646c7a7bee288f8cc046ed0b25"}, + {file = "libcst-0.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8f75ed9981ec9a96835f78809360847661cc9c8033d404dcc65c346ce480f4d"}, + {file = "libcst-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce228e20216bce09ddb4eceed9a669f7fb52568ff300edf99a8850a4d6ab9e86"}, + {file = "libcst-0.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7aacd83126cf932c38cd58be3f8dd9b9aaa88feaf8aa42418156873a5f5ded70"}, + {file = "libcst-0.4.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4a6bc639bf9f7991e6850329264657448c6516a3d07fe2e0df692ae0bfdac83"}, + {file = "libcst-0.4.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac37e00960d1ebffbad1b8723d11eaa69371ba49cbcb5680c4da3d50c0536dc3"}, + {file = "libcst-0.4.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6bdb278244d35cc5a14275ac1c0c11de79c6df46031f537c7b707b5841dd518"}, + {file = "libcst-0.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:427c88ca77d0c7beb71a0c7f0ea9dccaafad5fc86bb384f381cd8c56412bd0db"}, + {file = "libcst-0.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e02d3141ce6960f8df5b3c2615ea112a7a5065a60e81e56ca65a498c2c7f2490"}, + {file = "libcst-0.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f2a2d70f14628eaa2870b94f2c8094048af980754433ac1195af14be3f06e27"}, + {file = "libcst-0.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef99c15d0ea671bc1ba914d9f11634748479b1476fd389de9647c918c729d042"}, + {file = "libcst-0.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:407e419f8f69663509e37c9ebad88ca6ea4904d09a2293f47bbfc7597f82e7db"}, + {file = "libcst-0.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:05f97c0f56da7bf8a348d63603a04cdf8f9cc18b9880be62540788e968e4b6fa"}, + {file = "libcst-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:35194a24918b7386310b3ce02456dc8259a2fdb8ef5c6620132047fb014b4e8e"}, + {file = "libcst-0.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3f61d3be41946d4ed921afb5914e40027d639130771e89d6846c0cc5bee967ec"}, + {file = "libcst-0.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eab2755d4796ac0b89e705133547677eaaacb3a913f6b7761f4dc964cca2886"}, + {file = "libcst-0.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5076d07d4f556d82a04654b72ac80c1b38eea4590189c40880202de40ac4237"}, + {file = "libcst-0.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe162be926af39bf307dd69b1ceb89af5ccdbfe21e1d92ba24ef7faa9d62be7b"}, + {file = "libcst-0.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:43f698ee4eeb0fde410a369a4c51c7a5e61974307039ab8ef5c2da83f21b061d"}, + {file = "libcst-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9880a360d9a07283825844d415dc89aee00f13977a571e68f7c168b39a5b7f59"}, + {file = "libcst-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2bd72ce428ac4123c075cbbacb66ae62ed0c166e248cc81b504779c27e263bb7"}, + {file = "libcst-0.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:753ada0471c666befb33ccb73258161bd6493ba3bbb5931abce9d02e71cc673f"}, + {file = "libcst-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b2a6be4d8eace4670af9e596b8dd364d74072235e5a17cc7cff1509483a97c8"}, + {file = "libcst-0.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:06de1bc753d789f928f19f5bba5bc83b1b4b304a1b95f537b87c8d5d5cb4b9ce"}, + {file = "libcst-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:ab268eae8a1fdbc23d510f598d0d5b1efe98d7e4f79045fd565c305adebe3a2d"}, + {file = "libcst-0.4.1.tar.gz", hash = "sha256:961ab38c0ef318c384a287f1e4f877bb61ce93945f352b14b5dbbe7a317882b1"}, +] lxml = [ {file = "lxml-4.8.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:e1ab2fac607842ac36864e358c42feb0960ae62c34aa4caaf12ada0a1fb5d99b"}, {file = "lxml-4.8.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28d1af847786f68bec57961f31221125c29d6f52d9187c01cd34dc14e2b29430"}, @@ -3535,9 +3578,13 @@ networkx = [ {file = "networkx-2.8-py3-none-any.whl", hash = "sha256:1a1e8fe052cc1b4e0339b998f6795099562a264a13a5af7a32cad45ab9d4e126"}, {file = "networkx-2.8.tar.gz", hash = "sha256:4a52cf66aed221955420e11b3e2e05ca44196b4829aab9576d4d439212b0a14f"}, ] +nodeenv = [ + {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, + {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, +] notebook = [ - {file = "notebook-6.4.11-py3-none-any.whl", hash = "sha256:b4a6baf2eba21ce67a0ca11a793d1781b06b8078f34d06c710742e55f3eee505"}, - {file = "notebook-6.4.11.tar.gz", hash = "sha256:709b1856a564fe53054796c80e17a67262071c86bfbdfa6b96aaa346113c555a"}, + {file = "notebook-6.4.10-py3-none-any.whl", hash = "sha256:49cead814bff0945fcb2ee07579259418672ac175d3dc3d8102a4b0a656ed4df"}, + {file = "notebook-6.4.10.tar.gz", hash = "sha256:2408a76bc6289283a8eecfca67e298ec83c67db51a4c2e1b713dd180bb39e90e"}, ] numpy = [ {file = "numpy-1.22.3-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:92bfa69cfbdf7dfc3040978ad09a48091143cffb778ec3b03fa170c494118d75"}, @@ -3655,14 +3702,14 @@ platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, ] -plotly = [ - {file = "plotly-5.7.0-py2.py3-none-any.whl", hash = "sha256:3a35131762c6567813012462e1d496e1d3898f56ab3d386b32f103f7f0c79cf1"}, - {file = "plotly-5.7.0.tar.gz", hash = "sha256:15ab20e9ed8b55f669b3d35e186eb48f9e1fe07321a1337b8b7df8d3573d265a"}, -] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] +pre-commit = [ + {file = "pre_commit-2.18.1-py2.py3-none-any.whl", hash = "sha256:02226e69564ebca1a070bd1f046af866aa1c318dbc430027c50ab832ed2b73f2"}, + {file = "pre_commit-2.18.1.tar.gz", hash = "sha256:5d445ee1fa8738d506881c5d84f83c62bb5be6b2838e32207433647e8e5ebe10"}, +] prometheus-client = [ {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, @@ -3676,30 +3723,30 @@ proto-plus = [ {file = "proto_plus-1.19.6-py3-none-any.whl", hash = "sha256:4445815a550e61bf071a46be900cb4c53491c915c11fba5eb93a20c4998f8aab"}, ] protobuf = [ - {file = "protobuf-3.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996"}, - {file = "protobuf-3.20.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"}, - {file = "protobuf-3.20.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cd68be2559e2a3b84f517fb029ee611546f7812b1fdd0aa2ecc9bc6ec0e4fdde"}, - {file = "protobuf-3.20.1-cp310-cp310-win32.whl", hash = "sha256:9016d01c91e8e625141d24ec1b20fed584703e527d28512aa8c8707f105a683c"}, - {file = "protobuf-3.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:32ca378605b41fd180dfe4e14d3226386d8d1b002ab31c969c366549e66a2bb7"}, - {file = "protobuf-3.20.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9be73ad47579abc26c12024239d3540e6b765182a91dbc88e23658ab71767153"}, - {file = "protobuf-3.20.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:097c5d8a9808302fb0da7e20edf0b8d4703274d140fd25c5edabddcde43e081f"}, - {file = "protobuf-3.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20"}, - {file = "protobuf-3.20.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cdee09140e1cd184ba9324ec1df410e7147242b94b5f8b0c64fc89e38a8ba531"}, - {file = "protobuf-3.20.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:af0ebadc74e281a517141daad9d0f2c5d93ab78e9d455113719a45a49da9db4e"}, - {file = "protobuf-3.20.1-cp37-cp37m-win32.whl", hash = "sha256:755f3aee41354ae395e104d62119cb223339a8f3276a0cd009ffabfcdd46bb0c"}, - {file = "protobuf-3.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:62f1b5c4cd6c5402b4e2d63804ba49a327e0c386c99b1675c8a0fefda23b2067"}, - {file = "protobuf-3.20.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:06059eb6953ff01e56a25cd02cca1a9649a75a7e65397b5b9b4e929ed71d10cf"}, - {file = "protobuf-3.20.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:cb29edb9eab15742d791e1025dd7b6a8f6fcb53802ad2f6e3adcb102051063ab"}, - {file = "protobuf-3.20.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:69ccfdf3657ba59569c64295b7d51325f91af586f8d5793b734260dfe2e94e2c"}, - {file = "protobuf-3.20.1-cp38-cp38-win32.whl", hash = "sha256:dd5789b2948ca702c17027c84c2accb552fc30f4622a98ab5c51fcfe8c50d3e7"}, - {file = "protobuf-3.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:77053d28427a29987ca9caf7b72ccafee011257561259faba8dd308fda9a8739"}, - {file = "protobuf-3.20.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f50601512a3d23625d8a85b1638d914a0970f17920ff39cec63aaef80a93fb7"}, - {file = "protobuf-3.20.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:284f86a6207c897542d7e956eb243a36bb8f9564c1742b253462386e96c6b78f"}, - {file = "protobuf-3.20.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7403941f6d0992d40161aa8bb23e12575637008a5a02283a930addc0508982f9"}, - {file = "protobuf-3.20.1-cp39-cp39-win32.whl", hash = "sha256:db977c4ca738dd9ce508557d4fce0f5aebd105e158c725beec86feb1f6bc20d8"}, - {file = "protobuf-3.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:7e371f10abe57cee5021797126c93479f59fccc9693dafd6bd5633ab67808a91"}, - {file = "protobuf-3.20.1-py2.py3-none-any.whl", hash = "sha256:adfc6cf69c7f8c50fd24c793964eef18f0ac321315439d94945820612849c388"}, - {file = "protobuf-3.20.1.tar.gz", hash = "sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9"}, + {file = "protobuf-3.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9d0f3aca8ca51c8b5e204ab92bd8afdb2a8e3df46bd0ce0bd39065d79aabcaa4"}, + {file = "protobuf-3.20.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:001c2160c03b6349c04de39cf1a58e342750da3632f6978a1634a3dcca1ec10e"}, + {file = "protobuf-3.20.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b5860b790498f233cdc8d635a17fc08de62e59d4dcd8cdb6c6c0d38a31edf2b"}, + {file = "protobuf-3.20.0-cp310-cp310-win32.whl", hash = "sha256:0b250c60256c8824219352dc2a228a6b49987e5bf94d3ffcf4c46585efcbd499"}, + {file = "protobuf-3.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:a1eebb6eb0653e594cb86cd8e536b9b083373fca9aba761ade6cd412d46fb2ab"}, + {file = "protobuf-3.20.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:bc14037281db66aa60856cd4ce4541a942040686d290e3f3224dd3978f88f554"}, + {file = "protobuf-3.20.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:47257d932de14a7b6c4ae1b7dbf592388153ee35ec7cae216b87ae6490ed39a3"}, + {file = "protobuf-3.20.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fbcbb068ebe67c4ff6483d2e2aa87079c325f8470b24b098d6bf7d4d21d57a69"}, + {file = "protobuf-3.20.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:542f25a4adf3691a306dcc00bf9a73176554938ec9b98f20f929a044f80acf1b"}, + {file = "protobuf-3.20.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd7133b885e356fa4920ead8289bb45dc6f185a164e99e10279f33732ed5ce15"}, + {file = "protobuf-3.20.0-cp37-cp37m-win32.whl", hash = "sha256:8d84453422312f8275455d1cb52d850d6a4d7d714b784e41b573c6f5bfc2a029"}, + {file = "protobuf-3.20.0-cp37-cp37m-win_amd64.whl", hash = "sha256:52bae32a147c375522ce09bd6af4d2949aca32a0415bc62df1456b3ad17c6001"}, + {file = "protobuf-3.20.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25d2fcd6eef340082718ec9ad2c58d734429f2b1f7335d989523852f2bba220b"}, + {file = "protobuf-3.20.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:88c8be0558bdfc35e68c42ae5bf785eb9390d25915d4863bbc7583d23da77074"}, + {file = "protobuf-3.20.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:38fd9eb74b852e4ee14b16e9670cd401d147ee3f3ec0d4f7652e0c921d6227f8"}, + {file = "protobuf-3.20.0-cp38-cp38-win32.whl", hash = "sha256:7dcd84dc31ebb35ade755e06d1561d1bd3b85e85dbdbf6278011fc97b22810db"}, + {file = "protobuf-3.20.0-cp38-cp38-win_amd64.whl", hash = "sha256:1eb13f5a5a59ca4973bcfa2fc8fff644bd39f2109c3f7a60bd5860cb6a49b679"}, + {file = "protobuf-3.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d24c81c2310f0063b8fc1c20c8ed01f3331be9374b4b5c2de846f69e11e21fb"}, + {file = "protobuf-3.20.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:8be43a91ab66fe995e85ccdbdd1046d9f0443d59e060c0840319290de25b7d33"}, + {file = "protobuf-3.20.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7a53d4035427b9dbfbb397f46642754d294f131e93c661d056366f2a31438263"}, + {file = "protobuf-3.20.0-cp39-cp39-win32.whl", hash = "sha256:32bf4a90c207a0b4e70ca6dd09d43de3cb9898f7d5b69c2e9e3b966a7f342820"}, + {file = "protobuf-3.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:6efe066a7135233f97ce51a1aa007d4fb0be28ef093b4f88dac4ad1b3a2b7b6f"}, + {file = "protobuf-3.20.0-py2.py3-none-any.whl", hash = "sha256:4eda68bd9e2a4879385e6b1ea528c976f59cd9728382005cc54c28bcce8db983"}, + {file = "protobuf-3.20.0.tar.gz", hash = "sha256:71b2c3d1cd26ed1ec7c8196834143258b2ad7f444efff26fdc366c6f5e752702"}, ] psutil = [ {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b"}, @@ -3850,6 +3897,10 @@ pydantic = [ {file = "pydantic-1.9.0-py3-none-any.whl", hash = "sha256:085ca1de245782e9b46cefcf99deecc67d418737a1fd3f6a4f511344b613a5b3"}, {file = "pydantic-1.9.0.tar.gz", hash = "sha256:742645059757a56ecd886faf4ed2441b9c0cd406079c2b4bee51bcc3fbcd510a"}, ] +pyflakes = [ + {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, + {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, +] pygments = [ {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, @@ -3920,6 +3971,10 @@ pytz = [ {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, ] +pyupgrade = [ + {file = "pyupgrade-2.32.0-py2.py3-none-any.whl", hash = "sha256:f45d4afb6ccdf7b0cea757958d0a11306324052668d9ff99d2bcb06bda46c00d"}, + {file = "pyupgrade-2.32.0.tar.gz", hash = "sha256:6878116d364b72f0c0011dd62dfe96425041a5f753da298b6eacde0f9fd9c004"}, +] pywin32 = [ {file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"}, {file = "pywin32-303-cp310-cp310-win_amd64.whl", hash = "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51"}, @@ -3986,24 +4041,32 @@ pyzmq = [ {file = "pyzmq-22.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f89468059ebc519a7acde1ee50b779019535db8dcf9b8c162ef669257fef7a93"}, {file = "pyzmq-22.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea12133df25e3a6918718fbb9a510c6ee5d3fdd5a346320421aac3882f4feeea"}, {file = "pyzmq-22.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c532fd68b93998aab92356be280deec5de8f8fe59cd28763d2cc8a58747b7f"}, + {file = "pyzmq-22.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f907c7359ce8bf7f7e63c82f75ad0223384105f5126f313400b7e8004d9b33c3"}, + {file = "pyzmq-22.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:902319cfe23366595d3fa769b5b751e6ee6750a0a64c5d9f757d624b2ac3519e"}, {file = "pyzmq-22.3.0-cp310-cp310-win32.whl", hash = "sha256:67db33bea0a29d03e6eeec55a8190e033318cee3cbc732ba8fd939617cbf762d"}, {file = "pyzmq-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:7661fc1d5cb73481cf710a1418a4e1e301ed7d5d924f91c67ba84b2a1b89defd"}, {file = "pyzmq-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79244b9e97948eaf38695f4b8e6fc63b14b78cc37f403c6642ba555517ac1268"}, {file = "pyzmq-22.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab888624ed68930442a3f3b0b921ad7439c51ba122dbc8c386e6487a658e4a4e"}, {file = "pyzmq-22.3.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18cd854b423fce44951c3a4d3e686bac8f1243d954f579e120a1714096637cc0"}, {file = "pyzmq-22.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:de8df0684398bd74ad160afdc2a118ca28384ac6f5e234eb0508858d8d2d9364"}, + {file = "pyzmq-22.3.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:62bcade20813796c426409a3e7423862d50ff0639f5a2a95be4b85b09a618666"}, + {file = "pyzmq-22.3.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ea5a79e808baef98c48c884effce05c31a0698c1057de8fc1c688891043c1ce1"}, {file = "pyzmq-22.3.0-cp36-cp36m-win32.whl", hash = "sha256:3c1895c95be92600233e476fe283f042e71cf8f0b938aabf21b7aafa62a8dac9"}, {file = "pyzmq-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:851977788b9caa8ed011f5f643d3ee8653af02c5fc723fa350db5125abf2be7b"}, {file = "pyzmq-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b4ebed0977f92320f6686c96e9e8dd29eed199eb8d066936bac991afc37cbb70"}, {file = "pyzmq-22.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42abddebe2c6a35180ca549fadc7228d23c1e1f76167c5ebc8a936b5804ea2df"}, {file = "pyzmq-22.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1e41b32d6f7f9c26bc731a8b529ff592f31fc8b6ef2be9fa74abd05c8a342d7"}, {file = "pyzmq-22.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:be4e0f229cf3a71f9ecd633566bd6f80d9fa6afaaff5489492be63fe459ef98c"}, + {file = "pyzmq-22.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:08c4e315a76ef26eb833511ebf3fa87d182152adf43dedee8d79f998a2162a0b"}, + {file = "pyzmq-22.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:badb868fff14cfd0e200eaa845887b1011146a7d26d579aaa7f966c203736b92"}, {file = "pyzmq-22.3.0-cp37-cp37m-win32.whl", hash = "sha256:7c58f598d9fcc52772b89a92d72bf8829c12d09746a6d2c724c5b30076c1f11d"}, {file = "pyzmq-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2b97502c16a5ec611cd52410bdfaab264997c627a46b0f98d3f666227fd1ea2d"}, {file = "pyzmq-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d728b08448e5ac3e4d886b165385a262883c34b84a7fe1166277fe675e1c197a"}, {file = "pyzmq-22.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:480b9931bfb08bf8b094edd4836271d4d6b44150da051547d8c7113bf947a8b0"}, {file = "pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7dc09198e4073e6015d9a8ea093fc348d4e59de49382476940c3dd9ae156fba8"}, {file = "pyzmq-22.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ca6cd58f62a2751728016d40082008d3b3412a7f28ddfb4a2f0d3c130f69e74"}, + {file = "pyzmq-22.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:468bd59a588e276961a918a3060948ae68f6ff5a7fa10bb2f9160c18fe341067"}, + {file = "pyzmq-22.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c88fa7410e9fc471e0858638f403739ee869924dd8e4ae26748496466e27ac59"}, {file = "pyzmq-22.3.0-cp38-cp38-win32.whl", hash = "sha256:c0f84360dcca3481e8674393bdf931f9f10470988f87311b19d23cda869bb6b7"}, {file = "pyzmq-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:f762442bab706fd874064ca218b33a1d8e40d4938e96c24dafd9b12e28017f45"}, {file = "pyzmq-22.3.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:954e73c9cd4d6ae319f1c936ad159072b6d356a92dcbbabfd6e6204b9a79d356"}, @@ -4011,6 +4074,8 @@ pyzmq = [ {file = "pyzmq-22.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:acebba1a23fb9d72b42471c3771b6f2f18dcd46df77482612054bd45c07dfa36"}, {file = "pyzmq-22.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cf98fd7a6c8aaa08dbc699ffae33fd71175696d78028281bc7b832b26f00ca57"}, {file = "pyzmq-22.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d072f7dfbdb184f0786d63bda26e8a0882041b1e393fbe98940395f7fab4c5e2"}, + {file = "pyzmq-22.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:53f4fd13976789ffafedd4d46f954c7bb01146121812b72b4ddca286034df966"}, + {file = "pyzmq-22.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1b5d457acbadcf8b27561deeaa386b0217f47626b29672fa7bd31deb6e91e1b"}, {file = "pyzmq-22.3.0-cp39-cp39-win32.whl", hash = "sha256:e6a02cf7271ee94674a44f4e62aa061d2d049001c844657740e156596298b70b"}, {file = "pyzmq-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d3dcb5548ead4f1123851a5ced467791f6986d68c656bc63bfff1bf9e36671e2"}, {file = "pyzmq-22.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3a4c9886d61d386b2b493377d980f502186cd71d501fffdba52bd2a0880cef4f"}, @@ -4027,6 +4092,10 @@ qtpy = [ {file = "QtPy-2.0.1-py3-none-any.whl", hash = "sha256:d93f2c98e97387fcc9d623d509772af5b6c15ab9d8f9f4c5dfbad9a73ad34812"}, {file = "QtPy-2.0.1.tar.gz", hash = "sha256:adfd073ffbd2de81dc7aaa0b983499ef5c59c96adcfdcc9dea60d42ca885eb8f"}, ] +refactor = [ + {file = "refactor-0.4.1-py3-none-any.whl", hash = "sha256:5d27a81a6441e8f3eaf0d9ff508d7fc1dd96d00631f154e030a598f982835630"}, + {file = "refactor-0.4.1.tar.gz", hash = "sha256:23627d7862fb392c9fb47d64f60cb611d3eb2708eb9e858e076e8cf8026e38ef"}, +] requests = [ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, @@ -4047,6 +4116,10 @@ setuptools-scm = [ {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, ] +shed = [ + {file = "shed-0.9.5-py3-none-any.whl", hash = "sha256:af8e146a8ef9605be1408302f539db88b5b641d619dd64c194dfa891bdb69bfa"}, + {file = "shed-0.9.5.tar.gz", hash = "sha256:03f39cea77c442e88384386d470aca79c3ed421af1c83113724dec9ec253116b"}, +] shellingham = [ {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, @@ -4110,8 +4183,8 @@ sqlalchemy-bigquery = [ {file = "sqlalchemy_bigquery-1.2.2-py2.py3-none-any.whl", hash = "sha256:d76e8fc61a906c5817234d9fbe88659342a6886256906951dd2837cbb302ee98"}, ] sqlalchemy2-stubs = [ - {file = "sqlalchemy2-stubs-0.0.2a22.tar.gz", hash = "sha256:31288db647bbdd411ad1e22da39a10ebe211bdcfe2efef24bcebea05abc28dd4"}, - {file = "sqlalchemy2_stubs-0.0.2a22-py3-none-any.whl", hash = "sha256:b9b907c3555d0b11bb8d738b788be478ce3871174839171d0d49aba5d0785016"}, + {file = "sqlalchemy2-stubs-0.0.2a21.tar.gz", hash = "sha256:207e3d8a36fc032d325f4eec89e0c6760efe81d07e978513d8c9b14f108dcd0c"}, + {file = "sqlalchemy2_stubs-0.0.2a21-py3-none-any.whl", hash = "sha256:bd4a3d5ca7ff9d01b2245e1b26304d6b2ec4daf43a01faf40db9e09245679433"}, ] sqlmodel = [ {file = "sqlmodel-0.0.4-py3-none-any.whl", hash = "sha256:441224eea75ea3799661dad0f9599bbd70322ce7d083f30f6741ebc807bc3ee6"}, @@ -4144,10 +4217,18 @@ terminado = [ {file = "terminado-0.13.3-py3-none-any.whl", hash = "sha256:874d4ea3183536c1782d13c7c91342ef0cf4e5ee1d53633029cbc972c8760bd8"}, {file = "terminado-0.13.3.tar.gz", hash = "sha256:94d1cfab63525993f7d5c9b469a50a18d0cdf39435b59785715539dd41e36c0d"}, ] +teyit = [ + {file = "teyit-0.4.1-py3-none-any.whl", hash = "sha256:ce04df4071188d6a7a7dbc0291aa2d2c1657a81acd3e32460fb446ce7afea6ef"}, + {file = "teyit-0.4.1.tar.gz", hash = "sha256:b676dd4dfffc0d3cf492eaaa5ada4d47cebf886cfc460836d0c9c9089d1b7d0b"}, +] tinycss2 = [ {file = "tinycss2-1.1.1-py3-none-any.whl", hash = "sha256:fe794ceaadfe3cf3e686b22155d0da5780dd0e273471a51846d0a02bc204fec8"}, {file = "tinycss2-1.1.1.tar.gz", hash = "sha256:b2e44dd8883c360c35dd0d1b5aad0b610e5156c2cb3b33434634e539ead9d8bf"}, ] +tokenize-rt = [ + {file = "tokenize_rt-4.2.1-py2.py3-none-any.whl", hash = "sha256:08a27fa032a81cf45e8858d0ac706004fcd523e8463415ddf1442be38e204ea8"}, + {file = "tokenize_rt-4.2.1.tar.gz", hash = "sha256:0d4f69026fed520f8a1e0103aa36c406ef4661417f20ca643f913e33531b3b94"}, +] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -4215,6 +4296,11 @@ typing-extensions = [ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, ] +typing-inspect = [ + {file = "typing_inspect-0.7.1-py2-none-any.whl", hash = "sha256:b1f56c0783ef0f25fb064a01be6e5407e54cf4a4bf4f3ba3fe51e0bd6dcea9e5"}, + {file = "typing_inspect-0.7.1-py3-none-any.whl", hash = "sha256:3cd7d4563e997719a710a3bfe7ffb544c6b72069b6812a02e9b414a8fa3aaa6b"}, + {file = "typing_inspect-0.7.1.tar.gz", hash = "sha256:047d4097d9b17f46531bf6f014356111a1b6fb821a24fe7ac909853ca2a782aa"}, +] urllib3 = [ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, @@ -4241,6 +4327,10 @@ uvloop = [ {file = "uvloop-0.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e5f2e2ff51aefe6c19ee98af12b4ae61f5be456cd24396953244a30880ad861"}, {file = "uvloop-0.16.0.tar.gz", hash = "sha256:f74bc20c7b67d1c27c72601c78cf95be99d5c2cdd4514502b4f3eb0933ff1228"}, ] +virtualenv = [ + {file = "virtualenv-20.14.1-py2.py3-none-any.whl", hash = "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a"}, + {file = "virtualenv-20.14.1.tar.gz", hash = "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5"}, +] watchdog = [ {file = "watchdog-2.1.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:177bae28ca723bc00846466016d34f8c1d6a621383b6caca86745918d55c7383"}, {file = "watchdog-2.1.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d1cf7dfd747dec519486a98ef16097e6c480934ef115b16f18adb341df747a4"}, @@ -4329,10 +4419,6 @@ websockets = [ {file = "websockets-10.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55"}, {file = "websockets-10.3.tar.gz", hash = "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"}, ] -werkzeug = [ - {file = "Werkzeug-2.0.0-py3-none-any.whl", hash = "sha256:64c02f6495ba01eddd6625b3675f357cd358a73f1e38458a56ad86c5baa30b53"}, - {file = "Werkzeug-2.0.0.tar.gz", hash = "sha256:3389bbfe6d40c6dd25e6d3f974155163c8b3de5bbda6a89342d4ab93fae80ba0"}, -] widgetsnbextension = [ {file = "widgetsnbextension-3.6.0-py2.py3-none-any.whl", hash = "sha256:4fd321cad39fdcf8a8e248a657202d42917ada8e8ed5dd3f60f073e0d54ceabd"}, {file = "widgetsnbextension-3.6.0.tar.gz", hash = "sha256:e84a7a9fcb9baf3d57106e184a7389a8f8eb935bf741a5eb9d60aa18cc029a80"}, diff --git a/pyproject.toml b/pyproject.toml index be807d4a..66ea2985 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,6 +48,8 @@ mkdocs-git-revision-date-plugin = "^0.3.1" mkdocs-include-markdown-plugin = "^3.2.3" mkdocs-autorefs = "^0.4.1" mkdocstrings = {version="^0.18.0", extras=["python"]} +shed = "^0.9.5" +pre-commit = "^2.18.1" [tool.poetry.extras] feature-store = ["feast"] diff --git a/tests/cli/feature_store/test_feature_store_apply.py b/tests/cli/feature_store/test_feature_store_apply.py index e39c35ff..0ad44c6e 100644 --- a/tests/cli/feature_store/test_feature_store_apply.py +++ b/tests/cli/feature_store/test_feature_store_apply.py @@ -1,7 +1,8 @@ -from unittest.mock import patch, MagicMock +from unittest.mock import MagicMock, patch from feast import FeatureStore from typer.testing import CliRunner + from amora.cli import app runner = CliRunner() diff --git a/tests/cli/feature_store/test_feature_store_materialize.py b/tests/cli/feature_store/test_feature_store_materialize.py index f3a7b372..1b2646f5 100644 --- a/tests/cli/feature_store/test_feature_store_materialize.py +++ b/tests/cli/feature_store/test_feature_store_materialize.py @@ -1,8 +1,9 @@ from datetime import datetime -from unittest.mock import patch, MagicMock, Mock +from unittest.mock import MagicMock, Mock, patch from feast import FeatureStore from typer.testing import CliRunner + from amora.cli import app runner = CliRunner() diff --git a/tests/cli/test_compile.py b/tests/cli/test_compile.py index 365aacb1..b221ec46 100644 --- a/tests/cli/test_compile.py +++ b/tests/cli/test_compile.py @@ -2,11 +2,10 @@ from typing import List import pytest -from amora.utils import clean_compiled_files, list_target_files from typer.testing import CliRunner from amora.cli import app - +from amora.utils import clean_compiled_files, list_target_files runner = CliRunner() diff --git a/tests/cli/test_materialize.py b/tests/cli/test_materialize.py index 510eef87..331c88f1 100644 --- a/tests/cli/test_materialize.py +++ b/tests/cli/test_materialize.py @@ -1,12 +1,13 @@ import inspect -from unittest.mock import patch, MagicMock +from unittest.mock import MagicMock, patch -from amora.utils import clean_compiled_files from typer.testing import CliRunner -from tests.models.heart_rate import HeartRate -from tests.models.steps import Steps from amora.cli import app +from amora.utils import clean_compiled_files + +from tests.models.heart_rate import HeartRate +from tests.models.steps import Steps runner = CliRunner() @@ -34,7 +35,7 @@ def test_materialize_without_arguments_and_options(materialize: MagicMock): assert result.exit_code == 0 tables = sorted( - [str(call[1]["model"].__table__) for call in materialize.call_args_list] + str(call[1]["model"].__table__) for call in materialize.call_args_list ) assert tables == sorted([str(Steps.__table__), str(HeartRate.__table__)]) diff --git a/tests/cli/test_models_import.py b/tests/cli/test_models_import.py index 0d521362..36b25102 100644 --- a/tests/cli/test_models_import.py +++ b/tests/cli/test_models_import.py @@ -1,11 +1,11 @@ from pathlib import Path from tempfile import NamedTemporaryFile -from unittest.mock import patch, MagicMock -from uuid import uuid4 +from unittest.mock import MagicMock, patch from google.api_core.exceptions import NotFound from google.cloud.bigquery import SchemaField from typer.testing import CliRunner + from amora.cli import app from amora.models import AmoraModel, amora_model_for_path diff --git a/tests/feature_store/test_decorators.py b/tests/feature_store/test_decorators.py index 039da93e..de704c9a 100644 --- a/tests/feature_store/test_decorators.py +++ b/tests/feature_store/test_decorators.py @@ -1,7 +1,7 @@ from datetime import datetime import pytest -from feast import FeatureView, Feature, ValueType +from feast import Feature, FeatureView, ValueType from amora.feature_store.decorators import feature_view from amora.feature_store.feature_view import name_for_model diff --git a/tests/feature_store/test_registry.py b/tests/feature_store/test_registry.py index f9ed316b..6d5144a9 100644 --- a/tests/feature_store/test_registry.py +++ b/tests/feature_store/test_registry.py @@ -1,11 +1,13 @@ from datetime import datetime import pytest -from feast import Feature, ValueType, FeatureView, Entity, FeatureService +from feast import Entity, FeatureService, FeatureView + from amora.feature_store import registry from amora.feature_store.decorators import feature_view from amora.feature_store.feature_view import name_for_model from amora.models import AmoraModel, Field + from tests.models.step_count_by_source import StepCountBySource diff --git a/tests/models/heart_agg.py b/tests/models/heart_agg.py index 7e8fde7d..dd7b8796 100644 --- a/tests/models/heart_agg.py +++ b/tests/models/heart_agg.py @@ -1,7 +1,9 @@ -from amora.types import Compilable +from sqlmodel import Field, func, select + from amora.models import AmoraModel +from amora.types import Compilable + from tests.models.heart_rate import HeartRate -from sqlmodel import func, select, Field class HeartRateAgg(AmoraModel, table=True): diff --git a/tests/models/heart_rate.py b/tests/models/heart_rate.py index 89277d62..e24e8fb5 100644 --- a/tests/models/heart_rate.py +++ b/tests/models/heart_rate.py @@ -1,14 +1,10 @@ from datetime import datetime -from sqlmodel import select, Field +from sqlmodel import Field, select +from amora.models import AmoraModel, MaterializationTypes, ModelConfig, PartitionConfig from amora.types import Compilable -from amora.models import ( - ModelConfig, - PartitionConfig, - AmoraModel, - MaterializationTypes, -) + from tests.models.health import Health diff --git a/tests/models/heart_rate_over_100.py b/tests/models/heart_rate_over_100.py index 254821a8..0451c968 100644 --- a/tests/models/heart_rate_over_100.py +++ b/tests/models/heart_rate_over_100.py @@ -2,13 +2,8 @@ from sqlalchemy import TIMESTAMP -from amora.models import ( - AmoraModel, - MaterializationTypes, - ModelConfig, - Field, - Column, -) +from amora.models import AmoraModel, Column, Field, MaterializationTypes, ModelConfig + from tests.models.heart_rate import HeartRate diff --git a/tests/models/step_count_by_source.py b/tests/models/step_count_by_source.py index ce78f0a8..17427beb 100644 --- a/tests/models/step_count_by_source.py +++ b/tests/models/step_count_by_source.py @@ -1,12 +1,13 @@ from datetime import datetime from typing import Optional -from sqlalchemy import func, TIMESTAMP, Column +from sqlalchemy import TIMESTAMP, Column, func from amora.feature_store.decorators import feature_view -from amora.models import AmoraModel, ModelConfig, MaterializationTypes, select, Field +from amora.models import AmoraModel, Field, MaterializationTypes, ModelConfig, select from amora.transformations import datetime_trunc_hour from amora.types import Compilable + from tests.models.steps import Steps diff --git a/tests/models/steps.py b/tests/models/steps.py index 837bb75a..23ee0708 100644 --- a/tests/models/steps.py +++ b/tests/models/steps.py @@ -1,14 +1,10 @@ from datetime import datetime -from sqlmodel import select, Field +from sqlmodel import Field, select from amora.compilation import Compilable -from amora.models import ( - ModelConfig, - PartitionConfig, - AmoraModel, - MaterializationTypes, -) +from amora.models import AmoraModel, MaterializationTypes, ModelConfig, PartitionConfig + from tests.models.health import Health diff --git a/tests/providers/test_bigquery.py b/tests/providers/test_bigquery.py index 40e2728d..d7a8f5dd 100644 --- a/tests/providers/test_bigquery.py +++ b/tests/providers/test_bigquery.py @@ -1,4 +1,4 @@ -from datetime import datetime, date, time +from datetime import date, datetime, time from typing import Optional import pytest @@ -9,19 +9,20 @@ from sqlalchemy.sql.selectable import CTE from amora.compilation import compile_statement +from amora.config import settings from amora.models import AmoraModel, Field from amora.providers.bigquery import ( + DryRunResult, cte_from_rows, + dry_run, estimated_query_cost_in_usd, estimated_storage_cost_in_usd, - dry_run, - DryRunResult, get_fully_qualified_id, get_schema_for_model, get_schema_for_source, ) -from amora.config import settings from amora.types import Compilable + from tests.models.health import Health from tests.models.heart_rate import HeartRate from tests.models.heart_rate_over_100 import HeartRateOver100 diff --git a/tests/test_assertions.py b/tests/test_assertions.py index 08e440d9..bcb483d2 100644 --- a/tests/test_assertions.py +++ b/tests/test_assertions.py @@ -2,11 +2,11 @@ from amora.providers.bigquery import cte_from_rows from amora.tests.assertions import ( - is_numeric, - that, + expression_is_true, has_at_least_one_not_null_value, is_a_non_empty_string, - expression_is_true, + is_numeric, + that, ) diff --git a/tests/test_compilation.py b/tests/test_compilation.py index 31a96688..c8f5c147 100644 --- a/tests/test_compilation.py +++ b/tests/test_compilation.py @@ -2,11 +2,11 @@ from tempfile import NamedTemporaryFile import pytest -from sqlalchemy import func, String, Integer +from sqlalchemy import Integer, String, func from sqlalchemy_bigquery.base import BQArray from amora.compilation import compile_statement -from amora.models import AmoraModel, select, amora_model_for_path +from amora.models import AmoraModel, amora_model_for_path, select def test_amora_model_for_path_with_invalid_file_path_type(): diff --git a/tests/test_materialization.py b/tests/test_materialization.py index 3d7ec49a..68bf256e 100644 --- a/tests/test_materialization.py +++ b/tests/test_materialization.py @@ -1,18 +1,18 @@ from datetime import datetime -from unittest.mock import patch, MagicMock +from unittest.mock import MagicMock, patch from uuid import uuid4 -from amora.utils import clean_compiled_files -from amora.materialization import Task, DependencyDAG, materialize +from amora.config import settings +from amora.materialization import DependencyDAG, Task, materialize from amora.models import ( AmoraModel, + Field, + MaterializationTypes, ModelConfig, PartitionConfig, - MaterializationTypes, - Field, ) -from amora.config import settings from amora.providers.bigquery import Client, QueryJobConfig, Table +from amora.utils import clean_compiled_files from tests.models.heart_agg import HeartRateAgg from tests.models.heart_rate import HeartRate diff --git a/tests/test_models.py b/tests/test_models.py index 14f47e9d..d5194328 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -1,6 +1,7 @@ import inspect from amora.compilation import compile_statement + from tests.models.health import Health from tests.models.steps import Steps diff --git a/tests/test_transformations.py b/tests/test_transformations.py index f261dce2..8d754d5f 100644 --- a/tests/test_transformations.py +++ b/tests/test_transformations.py @@ -2,9 +2,9 @@ from amora.providers.bigquery import cte_from_rows, run from amora.tests.assertions import is_numeric, that from amora.transformations import ( - remove_non_numbers, - remove_leading_zeros, parse_numbers, + remove_leading_zeros, + remove_non_numbers, )