diff --git a/.github/workflows/kentik-api.yml b/.github/workflows/kentik-api.yml index 3c3cc52f..87999941 100644 --- a/.github/workflows/kentik-api.yml +++ b/.github/workflows/kentik-api.yml @@ -39,23 +39,26 @@ jobs: with: python-version: ${{ matrix.python-version }} architecture: x64 - - name: Install requirements + - name: Install dependencies working-directory: ./kentik_api_library - run: pip3 install -r requirements.txt - - name: PyTest + run: | + set -xe + python -VV + python -m site + python -m pip install --upgrade -r requirements.txt + python -m pip install --upgrade -r requirements-dev.txt + - name: Code formatting working-directory: ./kentik_api_library - run: python3 setup.py pytest - - name: Black - uses: piotrpawlaczek/python-blacken@release/stable - with: - path: './kentik_api_library' - line-length: '120' + run: python3 setup.py format --check + - name: Mypy + working-directory: ./kentik_api_library + run: python3 setup.py mypy - name: PyLint working-directory: ./kentik_api_library run: python3 setup.py pylint - - name: Mypy + - name: PyTest working-directory: ./kentik_api_library - run: python3 setup.py mypy + run: python3 setup.py pytest build: needs: python-versions-setup diff --git a/kentik_api_library/.pylintrc b/kentik_api_library/.pylintrc deleted file mode 100644 index abc0be4c..00000000 --- a/kentik_api_library/.pylintrc +++ /dev/null @@ -1,8 +0,0 @@ -[MASTER] - -disable= - missing-docstring - -ignore=examples - -init-hook='import sys; sys.path.append("./src");' diff --git a/kentik_api_library/examples/alerting_example.py b/kentik_api_library/examples/alerting_example.py index 6b084d46..4a6c1bb1 100644 --- a/kentik_api_library/examples/alerting_example.py +++ b/kentik_api_library/examples/alerting_example.py @@ -6,7 +6,7 @@ import logging from datetime import datetime -from kentik_api import KentikAPI, ManualMitigation, AlertFilter +from kentik_api import AlertFilter, KentikAPI, ManualMitigation from kentik_api.utils import get_credentials logging.basicConfig(level=logging.INFO) diff --git a/kentik_api_library/examples/applications_example.py b/kentik_api_library/examples/applications_example.py index fff3c8b0..d355e58c 100644 --- a/kentik_api_library/examples/applications_example.py +++ b/kentik_api_library/examples/applications_example.py @@ -4,7 +4,8 @@ """ import logging -from kentik_api import KentikAPI, CustomApplication + +from kentik_api import CustomApplication, KentikAPI from kentik_api.utils import get_credentials logging.basicConfig(level=logging.INFO) diff --git a/kentik_api_library/examples/batch_example.py b/kentik_api_library/examples/batch_example.py index b7f7742c..ce3595be 100644 --- a/kentik_api_library/examples/batch_example.py +++ b/kentik_api_library/examples/batch_example.py @@ -3,7 +3,8 @@ """ import logging -from kentik_api import KentikAPI, Criterion, Upsert, Deletion, BatchOperationPart + +from kentik_api import BatchOperationPart, Criterion, Deletion, KentikAPI, Upsert from kentik_api.utils import get_credentials logging.basicConfig(level=logging.INFO) diff --git a/kentik_api_library/examples/bulk_user_create.py b/kentik_api_library/examples/bulk_user_create.py index 274168e5..1fca1819 100644 --- a/kentik_api_library/examples/bulk_user_create.py +++ b/kentik_api_library/examples/bulk_user_create.py @@ -2,6 +2,7 @@ import os import yaml + import kentik_api diff --git a/kentik_api_library/examples/devices_example.py b/kentik_api_library/examples/devices_example.py index c04b0576..415e85c1 100644 --- a/kentik_api_library/examples/devices_example.py +++ b/kentik_api_library/examples/devices_example.py @@ -5,17 +5,17 @@ import logging -from kentik_api.public.types import ID from kentik_api import ( - KentikAPI, - Device, - SNMPv3Conf, AuthenticationProtocol, - PrivacyProtocol, - DeviceSubtype, CDNAttribute, + Device, + DeviceSubtype, Interface, + KentikAPI, + PrivacyProtocol, + SNMPv3Conf, ) +from kentik_api.public.types import ID from kentik_api.utils import get_credentials logging.basicConfig(level=logging.INFO) diff --git a/kentik_api_library/examples/dimensions_example.py b/kentik_api_library/examples/dimensions_example.py index 99cd1726..3ff1dd81 100644 --- a/kentik_api_library/examples/dimensions_example.py +++ b/kentik_api_library/examples/dimensions_example.py @@ -6,7 +6,8 @@ import logging import random import string -from kentik_api import KentikAPI, CustomDimension, Populator + +from kentik_api import CustomDimension, KentikAPI, Populator from kentik_api.utils import get_credentials logging.basicConfig(level=logging.INFO) diff --git a/kentik_api_library/examples/error_handling_example.py b/kentik_api_library/examples/error_handling_example.py index acfe8641..97eae426 100644 --- a/kentik_api_library/examples/error_handling_example.py +++ b/kentik_api_library/examples/error_handling_example.py @@ -2,7 +2,7 @@ import logging -from kentik_api import KentikAPI, AuthError, NotFoundError, IncompleteObjectError, Device, RateLimitExceededError +from kentik_api import AuthError, Device, IncompleteObjectError, KentikAPI, NotFoundError, RateLimitExceededError from kentik_api.public.types import ID from kentik_api.utils import get_credentials diff --git a/kentik_api_library/examples/labels_example.py b/kentik_api_library/examples/labels_example.py index 119f082a..bc864267 100644 --- a/kentik_api_library/examples/labels_example.py +++ b/kentik_api_library/examples/labels_example.py @@ -4,7 +4,8 @@ """ import logging -from kentik_api import KentikAPI, DeviceLabel + +from kentik_api import DeviceLabel, KentikAPI from kentik_api.public.types import ID from kentik_api.utils import get_credentials diff --git a/kentik_api_library/examples/my_kentik_portal_example.py b/kentik_api_library/examples/my_kentik_portal_example.py index 047f8cab..603c6f9d 100644 --- a/kentik_api_library/examples/my_kentik_portal_example.py +++ b/kentik_api_library/examples/my_kentik_portal_example.py @@ -4,6 +4,7 @@ """ import logging + from kentik_api import KentikAPI from kentik_api.utils import get_credentials diff --git a/kentik_api_library/examples/plans_example.py b/kentik_api_library/examples/plans_example.py index a4d5cdd7..88465222 100644 --- a/kentik_api_library/examples/plans_example.py +++ b/kentik_api_library/examples/plans_example.py @@ -4,6 +4,7 @@ """ import logging + from kentik_api import KentikAPI from kentik_api.utils import get_credentials diff --git a/kentik_api_library/examples/queries_example.py b/kentik_api_library/examples/queries_example.py index aaca8566..a7d227c8 100644 --- a/kentik_api_library/examples/queries_example.py +++ b/kentik_api_library/examples/queries_example.py @@ -5,20 +5,22 @@ import logging from io import BytesIO + from PIL import Image # type: ignore + from kentik_api import ( - KentikAPI, - QuerySQL, - QueryObject, - QueryArrayItem, - Query, Aggregate, AggregateFunctionType, - FastDataType, - MetricType, + ChartViewType, DimensionType, + FastDataType, ImageType, - ChartViewType, + KentikAPI, + MetricType, + Query, + QueryArrayItem, + QueryObject, + QuerySQL, ) from kentik_api.utils import get_credentials diff --git a/kentik_api_library/examples/saved_filters_example.py b/kentik_api_library/examples/saved_filters_example.py index 6f809e1a..3bc6bd25 100644 --- a/kentik_api_library/examples/saved_filters_example.py +++ b/kentik_api_library/examples/saved_filters_example.py @@ -4,7 +4,8 @@ """ import logging -from kentik_api import KentikAPI, SavedFilter, Filters, FilterGroups, Filter + +from kentik_api import Filter, FilterGroups, Filters, KentikAPI, SavedFilter from kentik_api.utils import get_credentials logging.basicConfig(level=logging.INFO) diff --git a/kentik_api_library/examples/sites_example.py b/kentik_api_library/examples/sites_example.py index f555a27b..03cea132 100644 --- a/kentik_api_library/examples/sites_example.py +++ b/kentik_api_library/examples/sites_example.py @@ -4,6 +4,7 @@ """ import logging + from kentik_api import KentikAPI, Site from kentik_api.utils import get_credentials diff --git a/kentik_api_library/examples/tags_example.py b/kentik_api_library/examples/tags_example.py index 75766b2c..d1bc8ddd 100644 --- a/kentik_api_library/examples/tags_example.py +++ b/kentik_api_library/examples/tags_example.py @@ -4,6 +4,7 @@ """ import logging + from kentik_api import KentikAPI, Tag from kentik_api.utils import get_credentials diff --git a/kentik_api_library/examples/users_example.py b/kentik_api_library/examples/users_example.py index b9cdf25e..4a2310cd 100644 --- a/kentik_api_library/examples/users_example.py +++ b/kentik_api_library/examples/users_example.py @@ -4,6 +4,7 @@ """ import logging + from kentik_api import KentikAPI, User from kentik_api.utils import get_credentials diff --git a/kentik_api_library/kentik_api/__init__.py b/kentik_api_library/kentik_api/__init__.py index 99f2f3b7..795d3313 100644 --- a/kentik_api_library/kentik_api/__init__.py +++ b/kentik_api_library/kentik_api/__init__.py @@ -1,3 +1,4 @@ +from requests.packages.urllib3.util.retry import Retry + from .kentik_api import KentikAPI from .public import * -from requests.packages.urllib3.util.retry import Retry diff --git a/kentik_api_library/kentik_api/analytics/mapped_query.py b/kentik_api_library/kentik_api/analytics/mapped_query.py index ef0f119e..bec4e0d3 100644 --- a/kentik_api_library/kentik_api/analytics/mapped_query.py +++ b/kentik_api_library/kentik_api/analytics/mapped_query.py @@ -3,18 +3,7 @@ import re from collections import defaultdict from dataclasses import dataclass -from typing import ( - Any, - Callable, - Dict, - Generator, - List, - Optional, - Tuple, - Type, - TypeVar, - Union, -) +from typing import Any, Callable, Dict, Generator, List, Optional, Tuple, Type, TypeVar, Union import yaml from pandas import DataFrame, to_datetime diff --git a/kentik_api_library/kentik_api/api_calls/active_alerts.py b/kentik_api_library/kentik_api/api_calls/active_alerts.py index 6802a05b..7d3bc9a1 100644 --- a/kentik_api_library/kentik_api/api_calls/active_alerts.py +++ b/kentik_api_library/kentik_api/api_calls/active_alerts.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import get, payload_type from kentik_api.api_calls.api_call import APICall +from kentik_api.api_calls.api_call_decorators import get, payload_type @get diff --git a/kentik_api_library/kentik_api/api_calls/alerts.py b/kentik_api_library/kentik_api/api_calls/alerts.py index 98573a5f..aee350c6 100644 --- a/kentik_api_library/kentik_api/api_calls/alerts.py +++ b/kentik_api_library/kentik_api/api_calls/alerts.py @@ -1,7 +1,7 @@ from typing import Optional -from kentik_api.api_calls.api_call_decorators import get, post, payload_type from kentik_api.api_calls.api_call import APICall +from kentik_api.api_calls.api_call_decorators import get, payload_type, post @post diff --git a/kentik_api_library/kentik_api/api_calls/batch.py b/kentik_api_library/kentik_api/api_calls/batch.py index 08ba0917..88fe6d27 100644 --- a/kentik_api_library/kentik_api/api_calls/batch.py +++ b/kentik_api_library/kentik_api/api_calls/batch.py @@ -1,5 +1,5 @@ -from kentik_api.api_calls.api_call_decorators import get, post, payload_type from kentik_api.api_calls.api_call import APICall +from kentik_api.api_calls.api_call_decorators import get, payload_type, post @post diff --git a/kentik_api_library/kentik_api/api_calls/custom_applications.py b/kentik_api_library/kentik_api/api_calls/custom_applications.py index b3c81f5b..f7bd550d 100644 --- a/kentik_api_library/kentik_api/api_calls/custom_applications.py +++ b/kentik_api_library/kentik_api/api_calls/custom_applications.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import get, post, put, delete, payload_type from kentik_api.api_calls.api_call import APICall, ResourceID +from kentik_api.api_calls.api_call_decorators import delete, get, payload_type, post, put @get diff --git a/kentik_api_library/kentik_api/api_calls/custom_dimensions.py b/kentik_api_library/kentik_api/api_calls/custom_dimensions.py index 67f37cd3..ad745285 100644 --- a/kentik_api_library/kentik_api/api_calls/custom_dimensions.py +++ b/kentik_api_library/kentik_api/api_calls/custom_dimensions.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import get, post, put, delete, payload_type from kentik_api.api_calls.api_call import APICall, ResourceID +from kentik_api.api_calls.api_call_decorators import delete, get, payload_type, post, put @get diff --git a/kentik_api_library/kentik_api/api_calls/device_labels.py b/kentik_api_library/kentik_api/api_calls/device_labels.py index 973daefc..33c14bb1 100644 --- a/kentik_api_library/kentik_api/api_calls/device_labels.py +++ b/kentik_api_library/kentik_api/api_calls/device_labels.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import get, post, put, delete, payload_type from kentik_api.api_calls.api_call import APICall, ResourceID +from kentik_api.api_calls.api_call_decorators import delete, get, payload_type, post, put @get diff --git a/kentik_api_library/kentik_api/api_calls/devices.py b/kentik_api_library/kentik_api/api_calls/devices.py index 7db6579c..55931c81 100644 --- a/kentik_api_library/kentik_api/api_calls/devices.py +++ b/kentik_api_library/kentik_api/api_calls/devices.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import get, post, put, delete, payload_type from kentik_api.api_calls.api_call import APICall, ResourceID +from kentik_api.api_calls.api_call_decorators import delete, get, payload_type, post, put @get diff --git a/kentik_api_library/kentik_api/api_calls/my_kentik_portal.py b/kentik_api_library/kentik_api/api_calls/my_kentik_portal.py index 28856802..e8a45dbc 100644 --- a/kentik_api_library/kentik_api/api_calls/my_kentik_portal.py +++ b/kentik_api_library/kentik_api/api_calls/my_kentik_portal.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import get, post, delete, payload_type from kentik_api.api_calls.api_call import APICall, ResourceID +from kentik_api.api_calls.api_call_decorators import delete, get, payload_type, post @get diff --git a/kentik_api_library/kentik_api/api_calls/plans.py b/kentik_api_library/kentik_api/api_calls/plans.py index 6d6c27f9..a9814973 100644 --- a/kentik_api_library/kentik_api/api_calls/plans.py +++ b/kentik_api_library/kentik_api/api_calls/plans.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import get from kentik_api.api_calls.api_call import APICall +from kentik_api.api_calls.api_call_decorators import get @get diff --git a/kentik_api_library/kentik_api/api_calls/query_methods.py b/kentik_api_library/kentik_api/api_calls/query_methods.py index 31b2829c..3783caa2 100644 --- a/kentik_api_library/kentik_api/api_calls/query_methods.py +++ b/kentik_api_library/kentik_api/api_calls/query_methods.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import post, payload_type from kentik_api.api_calls.api_call import APICall +from kentik_api.api_calls.api_call_decorators import payload_type, post @post diff --git a/kentik_api_library/kentik_api/api_calls/saved_filters.py b/kentik_api_library/kentik_api/api_calls/saved_filters.py index bb710b9c..e783c8bd 100644 --- a/kentik_api_library/kentik_api/api_calls/saved_filters.py +++ b/kentik_api_library/kentik_api/api_calls/saved_filters.py @@ -1,5 +1,5 @@ -from kentik_api.api_calls.api_call_decorators import get, post, put, delete, payload_type from kentik_api.api_calls.api_call import APICall, ResourceID +from kentik_api.api_calls.api_call_decorators import delete, get, payload_type, post, put @get diff --git a/kentik_api_library/kentik_api/api_calls/sites.py b/kentik_api_library/kentik_api/api_calls/sites.py index b6feebe3..4697f6d0 100644 --- a/kentik_api_library/kentik_api/api_calls/sites.py +++ b/kentik_api_library/kentik_api/api_calls/sites.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import get, post, put, delete, payload_type from kentik_api.api_calls.api_call import APICall, ResourceID +from kentik_api.api_calls.api_call_decorators import delete, get, payload_type, post, put @get diff --git a/kentik_api_library/kentik_api/api_calls/tags.py b/kentik_api_library/kentik_api/api_calls/tags.py index 5d0783bb..f8db9ac4 100644 --- a/kentik_api_library/kentik_api/api_calls/tags.py +++ b/kentik_api_library/kentik_api/api_calls/tags.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import get, post, put, delete, payload_type from kentik_api.api_calls.api_call import APICall, ResourceID +from kentik_api.api_calls.api_call_decorators import delete, get, payload_type, post, put @get diff --git a/kentik_api_library/kentik_api/api_calls/users.py b/kentik_api_library/kentik_api/api_calls/users.py index e831641d..bc1ccbe4 100644 --- a/kentik_api_library/kentik_api/api_calls/users.py +++ b/kentik_api_library/kentik_api/api_calls/users.py @@ -1,6 +1,6 @@ # Local application imports -from kentik_api.api_calls.api_call_decorators import get, post, put, delete, payload_type from kentik_api.api_calls.api_call import APICall, ResourceID +from kentik_api.api_calls.api_call_decorators import delete, get, payload_type, post, put @get diff --git a/kentik_api_library/kentik_api/api_connection/api_connector.py b/kentik_api_library/kentik_api/api_connection/api_connector.py index 1c7b7a09..e786da59 100644 --- a/kentik_api_library/kentik_api/api_connection/api_connector.py +++ b/kentik_api_library/kentik_api/api_connection/api_connector.py @@ -1,10 +1,10 @@ # Standard library imports import logging from http import HTTPStatus -from typing import Union, Tuple, Optional, Dict, Any +from typing import Any, Dict, Optional, Tuple, Union # Third party imports -from requests import Timeout, RequestException, Response +from requests import RequestException, Response, Timeout # Local application imports from kentik_api.api_calls.api_call import APICall, APICallMethods @@ -20,7 +20,8 @@ TimedOutError, UnavailabilityError, ) -from .retryable_session import RetryableSession, Retry + +from .retryable_session import Retry, RetryableSession PROTOCOL_HTTP = "HTTP" diff --git a/kentik_api_library/kentik_api/api_connection/api_connector_protocol.py b/kentik_api_library/kentik_api/api_connection/api_connector_protocol.py index 8bfbb1a2..13e48a42 100644 --- a/kentik_api_library/kentik_api/api_connection/api_connector_protocol.py +++ b/kentik_api_library/kentik_api/api_connection/api_connector_protocol.py @@ -1,4 +1,5 @@ -from typing import Optional, Dict, Any +from typing import Any, Dict, Optional + from typing_extensions import Protocol from kentik_api.api_calls.api_call import APICall diff --git a/kentik_api_library/kentik_api/api_connection/retryable_session.py b/kentik_api_library/kentik_api/api_connection/retryable_session.py index 0c542592..794714c4 100755 --- a/kentik_api_library/kentik_api/api_connection/retryable_session.py +++ b/kentik_api_library/kentik_api/api_connection/retryable_session.py @@ -1,8 +1,9 @@ import logging +from typing import Optional + from requests import Session from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry -from typing import Optional log = logging.getLogger(__name__) diff --git a/kentik_api_library/kentik_api/api_resources/alerting_api.py b/kentik_api_library/kentik_api/api_resources/alerting_api.py index c119aeb8..f87561dd 100644 --- a/kentik_api_library/kentik_api/api_resources/alerting_api.py +++ b/kentik_api_library/kentik_api/api_resources/alerting_api.py @@ -1,9 +1,9 @@ -from typing import Optional, List from datetime import datetime +from typing import List, Optional from kentik_api.api_calls import alerts from kentik_api.api_resources.base_api import BaseAPI -from kentik_api.public.manual_mitigation import ManualMitigation, Alarm, HistoricalAlert, AlertFilter +from kentik_api.public.manual_mitigation import Alarm, AlertFilter, HistoricalAlert, ManualMitigation from kentik_api.requests_payload import manual_mitigations_payload from kentik_api.requests_payload.conversions import convert, convert_or_none, enum_to_str diff --git a/kentik_api_library/kentik_api/api_resources/base_api.py b/kentik_api_library/kentik_api/api_resources/base_api.py index 31098a14..b4d95c3d 100644 --- a/kentik_api_library/kentik_api/api_resources/base_api.py +++ b/kentik_api_library/kentik_api/api_resources/base_api.py @@ -1,4 +1,4 @@ -from typing import Optional, Any +from typing import Any, Optional from kentik_api.api_calls.api_call import APICall from kentik_api.api_connection.api_call_response import APICallResponse diff --git a/kentik_api_library/kentik_api/api_resources/custom_applications_api.py b/kentik_api_library/kentik_api/api_resources/custom_applications_api.py index 2ba7d868..ace366c2 100644 --- a/kentik_api_library/kentik_api/api_resources/custom_applications_api.py +++ b/kentik_api_library/kentik_api/api_resources/custom_applications_api.py @@ -1,10 +1,10 @@ -from typing import List from http import HTTPStatus +from typing import List from kentik_api.api_calls import custom_applications from kentik_api.api_resources.base_api import BaseAPI -from kentik_api.public.types import ID from kentik_api.public.custom_application import CustomApplication +from kentik_api.public.types import ID from kentik_api.requests_payload import custom_applications_payload diff --git a/kentik_api_library/kentik_api/api_resources/custom_dimensions_api.py b/kentik_api_library/kentik_api/api_resources/custom_dimensions_api.py index 8e220273..b2a241fb 100644 --- a/kentik_api_library/kentik_api/api_resources/custom_dimensions_api.py +++ b/kentik_api_library/kentik_api/api_resources/custom_dimensions_api.py @@ -1,12 +1,12 @@ -from typing import List from http import HTTPStatus +from typing import List from kentik_api.api_calls import custom_dimensions +from kentik_api.api_connection.api_connector_protocol import APIConnectorProtocol from kentik_api.api_resources.base_api import BaseAPI -from kentik_api.public.types import ID from kentik_api.public.custom_dimension import CustomDimension, Populator +from kentik_api.public.types import ID from kentik_api.requests_payload import custom_dimensions_payload, populators_payload -from kentik_api.api_connection.api_connector_protocol import APIConnectorProtocol from kentik_api.requests_payload.conversions import convert, permissive_enum_to_str diff --git a/kentik_api_library/kentik_api/api_resources/device_labels_api.py b/kentik_api_library/kentik_api/api_resources/device_labels_api.py index 7c2bf1c7..b23a4291 100644 --- a/kentik_api_library/kentik_api/api_resources/device_labels_api.py +++ b/kentik_api_library/kentik_api/api_resources/device_labels_api.py @@ -2,8 +2,8 @@ from kentik_api.api_calls import device_labels from kentik_api.api_resources.base_api import BaseAPI -from kentik_api.public.types import ID from kentik_api.public.device_label import DeviceLabel +from kentik_api.public.types import ID from kentik_api.requests_payload import labels_payload diff --git a/kentik_api_library/kentik_api/api_resources/devices_api.py b/kentik_api_library/kentik_api/api_resources/devices_api.py index 57020dcb..7344b296 100644 --- a/kentik_api_library/kentik_api/api_resources/devices_api.py +++ b/kentik_api_library/kentik_api/api_resources/devices_api.py @@ -1,11 +1,12 @@ -from typing import List from http import HTTPStatus -from kentik_api.api_resources.base_api import BaseAPI +from typing import List + from kentik_api.api_calls import devices +from kentik_api.api_connection.api_connector_protocol import APIConnectorProtocol +from kentik_api.api_resources.base_api import BaseAPI +from kentik_api.public.device import AppliedLabels, Device, Interface from kentik_api.public.types import ID -from kentik_api.public.device import Device, AppliedLabels, Interface from kentik_api.requests_payload import devices_payload, interfaces_payload -from kentik_api.api_connection.api_connector_protocol import APIConnectorProtocol class InterfacesAPI(BaseAPI): diff --git a/kentik_api_library/kentik_api/api_resources/plans_api.py b/kentik_api_library/kentik_api/api_resources/plans_api.py index 986d29ee..0ac148f6 100644 --- a/kentik_api_library/kentik_api/api_resources/plans_api.py +++ b/kentik_api_library/kentik_api/api_resources/plans_api.py @@ -1,7 +1,7 @@ from typing import List -from kentik_api.api_resources.base_api import BaseAPI from kentik_api.api_calls import plans +from kentik_api.api_resources.base_api import BaseAPI from kentik_api.public.plan import Plan from kentik_api.requests_payload import plans_payload diff --git a/kentik_api_library/kentik_api/api_resources/query_api.py b/kentik_api_library/kentik_api/api_resources/query_api.py index 1bbb8087..0d3c9bf3 100644 --- a/kentik_api_library/kentik_api/api_resources/query_api.py +++ b/kentik_api_library/kentik_api/api_resources/query_api.py @@ -1,8 +1,8 @@ from kentik_api.api_calls import query_methods from kentik_api.api_resources.base_api import BaseAPI -from kentik_api.requests_payload.queries_payload import QueryDataResponse, QueryChartResponse, QueryURLResponse +from kentik_api.public.query_object import QueryChartResult, QueryDataResult, QueryObject, QueryURLResult from kentik_api.public.query_sql import QuerySQL, QuerySQLResult -from kentik_api.public.query_object import QueryObject, QueryDataResult, QueryChartResult, QueryURLResult +from kentik_api.requests_payload.queries_payload import QueryChartResponse, QueryDataResponse, QueryURLResponse class QueryAPI(BaseAPI): diff --git a/kentik_api_library/kentik_api/api_resources/saved_filters_api.py b/kentik_api_library/kentik_api/api_resources/saved_filters_api.py index 0da1c528..c9400e5f 100644 --- a/kentik_api_library/kentik_api/api_resources/saved_filters_api.py +++ b/kentik_api_library/kentik_api/api_resources/saved_filters_api.py @@ -1,7 +1,8 @@ from http import HTTPStatus from typing import List -from kentik_api.api_resources.base_api import BaseAPI + from kentik_api.api_calls import saved_filters +from kentik_api.api_resources.base_api import BaseAPI from kentik_api.public.saved_filter import SavedFilter from kentik_api.public.types import ID from kentik_api.requests_payload import saved_filters_payload diff --git a/kentik_api_library/kentik_api/api_resources/sites_api.py b/kentik_api_library/kentik_api/api_resources/sites_api.py index 6f380620..75a996ce 100644 --- a/kentik_api_library/kentik_api/api_resources/sites_api.py +++ b/kentik_api_library/kentik_api/api_resources/sites_api.py @@ -1,5 +1,5 @@ -from typing import List from http import HTTPStatus +from typing import List from kentik_api.api_calls import sites from kentik_api.api_resources.base_api import BaseAPI diff --git a/kentik_api_library/kentik_api/api_resources/tags_api.py b/kentik_api_library/kentik_api/api_resources/tags_api.py index ec6b78d7..00901f7f 100644 --- a/kentik_api_library/kentik_api/api_resources/tags_api.py +++ b/kentik_api_library/kentik_api/api_resources/tags_api.py @@ -1,10 +1,10 @@ -from typing import List from http import HTTPStatus +from typing import List from kentik_api.api_calls import tags from kentik_api.api_resources.base_api import BaseAPI -from kentik_api.public.types import ID from kentik_api.public.tag import Tag +from kentik_api.public.types import ID from kentik_api.requests_payload import tags_payload diff --git a/kentik_api_library/kentik_api/api_resources/tenants_api.py b/kentik_api_library/kentik_api/api_resources/tenants_api.py index 0a434334..6f770128 100644 --- a/kentik_api_library/kentik_api/api_resources/tenants_api.py +++ b/kentik_api_library/kentik_api/api_resources/tenants_api.py @@ -3,7 +3,7 @@ from kentik_api.api_calls import my_kentik_portal from kentik_api.api_resources.base_api import BaseAPI -from kentik_api.public.tenant import TenantUser, Tenant +from kentik_api.public.tenant import Tenant, TenantUser from kentik_api.public.types import ID from kentik_api.requests_payload import tenants_payload diff --git a/kentik_api_library/kentik_api/api_resources/users_api.py b/kentik_api_library/kentik_api/api_resources/users_api.py index 129928de..7575a482 100644 --- a/kentik_api_library/kentik_api/api_resources/users_api.py +++ b/kentik_api_library/kentik_api/api_resources/users_api.py @@ -3,8 +3,8 @@ from kentik_api.api_calls import users from kentik_api.api_resources.base_api import BaseAPI -from kentik_api.public.user import User from kentik_api.public.types import ID +from kentik_api.public.user import User from kentik_api.requests_payload import users_payload diff --git a/kentik_api_library/kentik_api/kentik_api.py b/kentik_api_library/kentik_api/kentik_api.py index 0e9b99c9..1f1702b9 100644 --- a/kentik_api_library/kentik_api/kentik_api.py +++ b/kentik_api_library/kentik_api/kentik_api.py @@ -1,4 +1,7 @@ +from typing import Optional, Tuple, Union + from .api_connection.api_connector import APIConnector +from .api_connection.retryable_session import Retry from .api_resources.alerting_api import AlertingAPI from .api_resources.batch_api import BatchAPI from .api_resources.custom_applications_api import CustomApplicationsAPI @@ -12,8 +15,6 @@ from .api_resources.tags_api import TagsAPI from .api_resources.tenants_api import MyKentikPortalAPI from .api_resources.users_api import UsersAPI -from typing import Optional, Tuple, Union -from .api_connection.retryable_session import Retry class KentikAPI: diff --git a/kentik_api_library/kentik_api/public/__init__.py b/kentik_api_library/kentik_api/public/__init__.py index e7ac4d23..ca9c8bbe 100644 --- a/kentik_api_library/kentik_api/public/__init__.py +++ b/kentik_api_library/kentik_api/public/__init__.py @@ -1,29 +1,6 @@ -from .device_label import DeviceLabel -from .site import Site -from .user import User -from .tag import Tag -from .saved_filter import SavedFilter, Filters, FilterGroups, Filter -from .tenant import Tenant, TenantUser -from .custom_dimension import CustomDimension, Populator +from .batch_operation import BatchOperationPart, Criterion, Deletion, Upsert from .custom_application import CustomApplication -from .plan import Plan, PlanDevice, PlanDeviceType -from .batch_operation import BatchOperationPart, Upsert, Criterion, Deletion -from .manual_mitigation import ManualMitigation, Alarm, HistoricalAlert, AlertFilter -from .query_sql import QuerySQL, QuerySQLResult -from .query_object import ( - Aggregate, - AggregateFunctionType, - ChartViewType, - DimensionType, - FastDataType, - ImageType, - MetricType, - Query, - QueryArrayItem, - QueryDataResult, - QueryObject, - TimeFormat, -) +from .custom_dimension import CustomDimension, Populator from .device import ( AppliedLabels, AuthenticationProtocol, @@ -35,11 +12,12 @@ DeviceType, Interface, PrivacyProtocol, - SNMPv3Conf, SecondaryIP, + SNMPv3Conf, TopNextHopASN, VRFAttributes, ) +from .device_label import DeviceLabel from .errors import ( AuthError, BadRequestError, @@ -54,3 +32,25 @@ TimedOutError, UnavailabilityError, ) +from .manual_mitigation import Alarm, AlertFilter, HistoricalAlert, ManualMitigation +from .plan import Plan, PlanDevice, PlanDeviceType +from .query_object import ( + Aggregate, + AggregateFunctionType, + ChartViewType, + DimensionType, + FastDataType, + ImageType, + MetricType, + Query, + QueryArrayItem, + QueryDataResult, + QueryObject, + TimeFormat, +) +from .query_sql import QuerySQL, QuerySQLResult +from .saved_filter import Filter, FilterGroups, Filters, SavedFilter +from .site import Site +from .tag import Tag +from .tenant import Tenant, TenantUser +from .user import User diff --git a/kentik_api_library/kentik_api/public/batch_operation.py b/kentik_api_library/kentik_api/public/batch_operation.py index bd65fb31..ba55a1b6 100644 --- a/kentik_api_library/kentik_api/public/batch_operation.py +++ b/kentik_api_library/kentik_api/public/batch_operation.py @@ -1,6 +1,6 @@ from dataclasses import dataclass -from typing import List, Optional from enum import Enum +from typing import List, Optional @dataclass() diff --git a/kentik_api_library/kentik_api/public/custom_dimension.py b/kentik_api_library/kentik_api/public/custom_dimension.py index 2c1481e2..0bc71d81 100644 --- a/kentik_api_library/kentik_api/public/custom_dimension.py +++ b/kentik_api_library/kentik_api/public/custom_dimension.py @@ -3,7 +3,6 @@ from kentik_api.public.types import ID, PermissiveEnumMeta - # pylint: disable=too-many-instance-attributes diff --git a/kentik_api_library/kentik_api/public/device_label.py b/kentik_api_library/kentik_api/public/device_label.py index 855bd7c9..c440f31e 100644 --- a/kentik_api_library/kentik_api/public/device_label.py +++ b/kentik_api_library/kentik_api/public/device_label.py @@ -1,8 +1,8 @@ -from typing import List, Optional from dataclasses import dataclass, field +from typing import List, Optional +from kentik_api.public.defaults import DEFAULT_DATE, DEFAULT_ID from kentik_api.public.types import ID -from kentik_api.public.defaults import DEFAULT_ID, DEFAULT_DATE @dataclass(frozen=True) diff --git a/kentik_api_library/kentik_api/public/manual_mitigation.py b/kentik_api_library/kentik_api/public/manual_mitigation.py index a84e827f..ceaf0bd2 100644 --- a/kentik_api_library/kentik_api/public/manual_mitigation.py +++ b/kentik_api_library/kentik_api/public/manual_mitigation.py @@ -1,7 +1,7 @@ -from typing import Optional, List from dataclasses import dataclass from datetime import datetime from enum import Enum +from typing import List, Optional @dataclass() diff --git a/kentik_api_library/kentik_api/public/plan.py b/kentik_api_library/kentik_api/public/plan.py index 91500c86..7ab85efe 100644 --- a/kentik_api_library/kentik_api/public/plan.py +++ b/kentik_api_library/kentik_api/public/plan.py @@ -1,5 +1,5 @@ -from typing import Any, Dict, List, Optional from dataclasses import dataclass +from typing import Any, Dict, List, Optional from kentik_api.public.types import ID diff --git a/kentik_api_library/kentik_api/public/query_object.py b/kentik_api_library/kentik_api/public/query_object.py index d7f21aea..1527c1d7 100644 --- a/kentik_api_library/kentik_api/public/query_object.py +++ b/kentik_api_library/kentik_api/public/query_object.py @@ -1,11 +1,11 @@ +import json from dataclasses import dataclass, field -from typing import List, Optional, Dict, Type, TypeVar from enum import Enum -import json +from typing import Dict, List, Optional, Type, TypeVar from kentik_api.internal import mandatory_dataclass_attributes -from kentik_api.public.types import PermissiveEnumMeta from kentik_api.public.saved_filter import Filters, SavedFilter +from kentik_api.public.types import PermissiveEnumMeta class ImageType(Enum): diff --git a/kentik_api_library/kentik_api/public/query_sql.py b/kentik_api_library/kentik_api/public/query_sql.py index 8c41340b..36bd07b7 100644 --- a/kentik_api_library/kentik_api/public/query_sql.py +++ b/kentik_api_library/kentik_api/public/query_sql.py @@ -1,6 +1,6 @@ import json from dataclasses import dataclass -from typing import List, Dict +from typing import Dict, List @dataclass diff --git a/kentik_api_library/kentik_api/public/saved_filter.py b/kentik_api_library/kentik_api/public/saved_filter.py index e0118069..e50f5260 100644 --- a/kentik_api_library/kentik_api/public/saved_filter.py +++ b/kentik_api_library/kentik_api/public/saved_filter.py @@ -1,9 +1,8 @@ from dataclasses import dataclass -from typing import TypeVar, Type, Optional, List, Dict +from typing import Dict, List, Optional, Type, TypeVar -from kentik_api.public.types import ID from kentik_api.internal.dataclass import mandatory_dataclass_attributes - +from kentik_api.public.types import ID FilterGroupsType = TypeVar("FilterGroupsType", bound="FilterGroups") FiltersType = TypeVar("FiltersType", bound="Filters") diff --git a/kentik_api_library/kentik_api/public/user.py b/kentik_api_library/kentik_api/public/user.py index ef40c8b8..530ae101 100644 --- a/kentik_api_library/kentik_api/public/user.py +++ b/kentik_api_library/kentik_api/public/user.py @@ -1,8 +1,8 @@ -from typing import List, Dict from dataclasses import dataclass, field +from typing import Dict, List +from kentik_api.public.defaults import DEFAULT_DATE, DEFAULT_ID from kentik_api.public.types import ID -from kentik_api.public.defaults import DEFAULT_ID, DEFAULT_DATE # pylint: disable=too-many-instance-attributes diff --git a/kentik_api_library/kentik_api/requests_payload/batch_operations_payload.py b/kentik_api_library/kentik_api/requests_payload/batch_operations_payload.py index f6759bfb..ac7c0c5b 100644 --- a/kentik_api_library/kentik_api/requests_payload/batch_operations_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/batch_operations_payload.py @@ -1,6 +1,7 @@ -from typing import Optional, List from dataclasses import dataclass -from kentik_api.requests_payload.conversions import from_dict, dict_from_json +from typing import List, Optional + +from kentik_api.requests_payload.conversions import dict_from_json, from_dict @dataclass() diff --git a/kentik_api_library/kentik_api/requests_payload/custom_applications_payload.py b/kentik_api_library/kentik_api/requests_payload/custom_applications_payload.py index 614ac07b..db0aed73 100644 --- a/kentik_api_library/kentik_api/requests_payload/custom_applications_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/custom_applications_payload.py @@ -1,9 +1,9 @@ -from typing import Optional, List from dataclasses import dataclass +from typing import List, Optional -from kentik_api.requests_payload.conversions import convert, convert_or_none, from_dict, dict_from_json, list_from_json -from kentik_api.public.types import ID from kentik_api.public.custom_application import CustomApplication +from kentik_api.public.types import ID +from kentik_api.requests_payload.conversions import convert, convert_or_none, dict_from_json, from_dict, list_from_json # pylint: disable=too-many-instance-attributes diff --git a/kentik_api_library/kentik_api/requests_payload/custom_dimensions_payload.py b/kentik_api_library/kentik_api/requests_payload/custom_dimensions_payload.py index ae0d1aec..3759ff9e 100644 --- a/kentik_api_library/kentik_api/requests_payload/custom_dimensions_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/custom_dimensions_payload.py @@ -1,9 +1,9 @@ -from typing import List, Dict, Any from dataclasses import dataclass +from typing import Any, Dict, List -from kentik_api.public.types import ID from kentik_api.public.custom_dimension import CustomDimension -from kentik_api.requests_payload.conversions import convert, from_dict, dict_from_json, list_from_json +from kentik_api.public.types import ID +from kentik_api.requests_payload.conversions import convert, dict_from_json, from_dict, list_from_json from kentik_api.requests_payload.populators_payload import PopulatorArray diff --git a/kentik_api_library/kentik_api/requests_payload/devices_payload.py b/kentik_api_library/kentik_api/requests_payload/devices_payload.py index 582b43b0..534896bc 100644 --- a/kentik_api_library/kentik_api/requests_payload/devices_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/devices_payload.py @@ -2,12 +2,12 @@ from typing import Any, Dict, List, Optional from kentik_api.public.device import ( - DeviceInterface, AppliedLabels, AuthenticationProtocol, CDNAttribute, Device, DeviceBGPType, + DeviceInterface, DeviceSubtype, DeviceType, PrivacyProtocol, @@ -30,7 +30,6 @@ from kentik_api.requests_payload.plans_payload import GetResponse as PlanGetResponse from kentik_api.requests_payload.validation import validate_fields - # pylint: disable=too-many-instance-attributes diff --git a/kentik_api_library/kentik_api/requests_payload/interfaces_payload.py b/kentik_api_library/kentik_api/requests_payload/interfaces_payload.py index d972c0e0..4a7eeac3 100644 --- a/kentik_api_library/kentik_api/requests_payload/interfaces_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/interfaces_payload.py @@ -1,17 +1,18 @@ -from typing import List, Dict, Optional, Any from dataclasses import dataclass -from kentik_api.public.types import ID +from typing import Any, Dict, List, Optional + from kentik_api.public.device import Interface, SecondaryIP, TopNextHopASN, VRFAttributes from kentik_api.public.errors import IncompleteObjectError -from kentik_api.requests_payload.validation import validate_fields +from kentik_api.public.types import ID from kentik_api.requests_payload.conversions import ( - from_dict, - dict_from_json, - list_from_json, convert, - convert_or_none, convert_list_or_none, + convert_or_none, + dict_from_json, + from_dict, + list_from_json, ) +from kentik_api.requests_payload.validation import validate_fields @dataclass diff --git a/kentik_api_library/kentik_api/requests_payload/labels_payload.py b/kentik_api_library/kentik_api/requests_payload/labels_payload.py index 8d09b177..7713d23d 100644 --- a/kentik_api_library/kentik_api/requests_payload/labels_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/labels_payload.py @@ -1,11 +1,12 @@ # Standard library imports -from typing import Optional, Dict, List, Any from dataclasses import dataclass +from typing import Any, Dict, List, Optional -# Local imports -from kentik_api.requests_payload.conversions import convert, convert_or_none, from_dict, dict_from_json, list_from_json +from kentik_api.public.device_label import DeviceItem, DeviceLabel from kentik_api.public.types import ID -from kentik_api.public.device_label import DeviceLabel, DeviceItem + +# Local imports +from kentik_api.requests_payload.conversions import convert, convert_or_none, dict_from_json, from_dict, list_from_json @dataclass() diff --git a/kentik_api_library/kentik_api/requests_payload/manual_mitigations_payload.py b/kentik_api_library/kentik_api/requests_payload/manual_mitigations_payload.py index 27a64100..eb1364d0 100644 --- a/kentik_api_library/kentik_api/requests_payload/manual_mitigations_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/manual_mitigations_payload.py @@ -1,12 +1,11 @@ from copy import deepcopy from dataclasses import dataclass -from typing import Optional, List from datetime import datetime +from typing import List, Optional -from kentik_api.public.manual_mitigation import ManualMitigation, Alarm, HistoricalAlert from kentik_api.public.errors import DataFormatError -from kentik_api.requests_payload.conversions import convert, from_dict, dict_from_json, list_from_json - +from kentik_api.public.manual_mitigation import Alarm, HistoricalAlert, ManualMitigation +from kentik_api.requests_payload.conversions import convert, dict_from_json, from_dict, list_from_json CreateRequest = ManualMitigation diff --git a/kentik_api_library/kentik_api/requests_payload/plans_payload.py b/kentik_api_library/kentik_api/requests_payload/plans_payload.py index f6a3d31e..ac6c727d 100644 --- a/kentik_api_library/kentik_api/requests_payload/plans_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/plans_payload.py @@ -1,10 +1,10 @@ -from dataclasses import dataclass from copy import deepcopy -from typing import Dict, List, Any +from dataclasses import dataclass +from typing import Any, Dict, List -from kentik_api.requests_payload.conversions import convert, convert_or_none, from_dict, dict_from_json +from kentik_api.public.plan import Plan, PlanDevice, PlanDeviceType from kentik_api.public.types import ID -from kentik_api.public.plan import Plan, PlanDeviceType, PlanDevice +from kentik_api.requests_payload.conversions import convert, convert_or_none, dict_from_json, from_dict @dataclass() diff --git a/kentik_api_library/kentik_api/requests_payload/populators_payload.py b/kentik_api_library/kentik_api/requests_payload/populators_payload.py index f02be91a..02f73086 100644 --- a/kentik_api_library/kentik_api/requests_payload/populators_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/populators_payload.py @@ -1,10 +1,9 @@ -from typing import List, Dict, Any, Optional from dataclasses import dataclass +from typing import Any, Dict, List, Optional -from kentik_api.public.types import ID from kentik_api.public.custom_dimension import Populator -from kentik_api.requests_payload.conversions import convert, from_dict, dict_from_json - +from kentik_api.public.types import ID +from kentik_api.requests_payload.conversions import convert, dict_from_json, from_dict # pylint: disable=too-many-instance-attributes diff --git a/kentik_api_library/kentik_api/requests_payload/queries_payload.py b/kentik_api_library/kentik_api/requests_payload/queries_payload.py index 3a6dc307..f7184f5b 100644 --- a/kentik_api_library/kentik_api/requests_payload/queries_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/queries_payload.py @@ -1,9 +1,9 @@ -from typing import List, Dict, Tuple -from dataclasses import dataclass from base64 import b64decode +from dataclasses import dataclass +from typing import Dict, List, Tuple -from kentik_api.public.query_object import QueryDataResult, QueryChartResult, ImageType, QueryURLResult -from kentik_api.requests_payload.conversions import from_dict, dict_from_json +from kentik_api.public.query_object import ImageType, QueryChartResult, QueryDataResult, QueryURLResult +from kentik_api.requests_payload.conversions import dict_from_json, from_dict @dataclass diff --git a/kentik_api_library/kentik_api/requests_payload/saved_filters_payload.py b/kentik_api_library/kentik_api/requests_payload/saved_filters_payload.py index fca567c2..de9fed15 100644 --- a/kentik_api_library/kentik_api/requests_payload/saved_filters_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/saved_filters_payload.py @@ -1,10 +1,10 @@ -from dataclasses import dataclass from copy import deepcopy -from typing import Optional, Dict, List, Any +from dataclasses import dataclass +from typing import Any, Dict, List, Optional -from kentik_api.requests_payload.conversions import convert, convert_or_none, from_dict, dict_from_json, list_from_json +from kentik_api.public.saved_filter import Filter, FilterGroups, Filters, SavedFilter from kentik_api.public.types import ID -from kentik_api.public.saved_filter import SavedFilter, Filters, FilterGroups, Filter +from kentik_api.requests_payload.conversions import convert, convert_or_none, dict_from_json, from_dict, list_from_json # pylint: disable=too-many-instance-attributes diff --git a/kentik_api_library/kentik_api/requests_payload/sites_payload.py b/kentik_api_library/kentik_api/requests_payload/sites_payload.py index 665bf847..42d58dd2 100644 --- a/kentik_api_library/kentik_api/requests_payload/sites_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/sites_payload.py @@ -1,9 +1,9 @@ -from typing import Optional, Any, List, Dict from dataclasses import dataclass +from typing import Any, Dict, List, Optional -from kentik_api.requests_payload.conversions import dict_from_json, list_from_json, from_dict, convert -from kentik_api.public.types import ID from kentik_api.public.site import Site +from kentik_api.public.types import ID +from kentik_api.requests_payload.conversions import convert, dict_from_json, from_dict, list_from_json @dataclass() diff --git a/kentik_api_library/kentik_api/requests_payload/tags_payload.py b/kentik_api_library/kentik_api/requests_payload/tags_payload.py index 9e26fc7e..2363e1fd 100644 --- a/kentik_api_library/kentik_api/requests_payload/tags_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/tags_payload.py @@ -1,11 +1,11 @@ -from typing import Optional, Any, List, Dict from dataclasses import dataclass +from typing import Any, Dict, List, Optional -from kentik_api.requests_payload.conversions import convert, from_dict, dict_from_json, list_from_json -from kentik_api.requests_payload.validation import validate_fields -from kentik_api.public.types import ID -from kentik_api.public.tag import Tag from kentik_api.public.errors import IncompleteObjectError +from kentik_api.public.tag import Tag +from kentik_api.public.types import ID +from kentik_api.requests_payload.conversions import convert, dict_from_json, from_dict, list_from_json +from kentik_api.requests_payload.validation import validate_fields # pylint: disable=too-many-instance-attributes diff --git a/kentik_api_library/kentik_api/requests_payload/tenants_payload.py b/kentik_api_library/kentik_api/requests_payload/tenants_payload.py index 3c074340..d4c1c7a5 100644 --- a/kentik_api_library/kentik_api/requests_payload/tenants_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/tenants_payload.py @@ -1,9 +1,9 @@ from dataclasses import dataclass -from typing import Optional, Any, Dict, List +from typing import Any, Dict, List, Optional -from kentik_api.requests_payload.conversions import convert, from_dict, dict_from_json, list_from_json -from kentik_api.public.types import ID from kentik_api.public.tenant import Tenant, TenantUser +from kentik_api.public.types import ID +from kentik_api.requests_payload.conversions import convert, dict_from_json, from_dict, list_from_json def tenant_user_from_dict(dic: Dict[str, Any]) -> TenantUser: diff --git a/kentik_api_library/kentik_api/requests_payload/users_payload.py b/kentik_api_library/kentik_api/requests_payload/users_payload.py index 2cece35b..f804c8d2 100644 --- a/kentik_api_library/kentik_api/requests_payload/users_payload.py +++ b/kentik_api_library/kentik_api/requests_payload/users_payload.py @@ -1,9 +1,9 @@ from dataclasses import dataclass -from typing import Optional, Dict, List +from typing import Dict, List, Optional -from kentik_api.requests_payload.conversions import convert, from_dict, dict_from_json, list_from_json from kentik_api.public.types import ID from kentik_api.public.user import User +from kentik_api.requests_payload.conversions import convert, dict_from_json, from_dict, list_from_json # pylint: disable=too-many-instance-attributes diff --git a/kentik_api_library/kentik_api/requests_payload/validation.py b/kentik_api_library/kentik_api/requests_payload/validation.py index 630a9836..1b515ac4 100644 --- a/kentik_api_library/kentik_api/requests_payload/validation.py +++ b/kentik_api_library/kentik_api/requests_payload/validation.py @@ -1,4 +1,5 @@ -from typing import Iterable, Mapping, Any +from typing import Any, Iterable, Mapping + from kentik_api.public.errors import DeserializationError diff --git a/kentik_api_library/kentik_api/throttling/active_wait_retry.py b/kentik_api_library/kentik_api/throttling/active_wait_retry.py index 3c44ea8f..baa10a9e 100644 --- a/kentik_api_library/kentik_api/throttling/active_wait_retry.py +++ b/kentik_api_library/kentik_api/throttling/active_wait_retry.py @@ -1,5 +1,5 @@ -import time import logging +import time from typing import Any from kentik_api.public.errors import IntermittentError diff --git a/kentik_api_library/kentik_api/throttling/background_queue.py b/kentik_api_library/kentik_api/throttling/background_queue.py index f08245d0..2e275033 100644 --- a/kentik_api_library/kentik_api/throttling/background_queue.py +++ b/kentik_api_library/kentik_api/throttling/background_queue.py @@ -1,14 +1,13 @@ -import time import logging +import time +from dataclasses import dataclass from queue import Queue from threading import Thread -from typing import Callable, Any -from dataclasses import dataclass +from typing import Any, Callable from kentik_api.public.errors import IntermittentError from kentik_api.throttling.cmd import Cmd - SuccessFunc = Callable[[Any], None] # input: successful cmd execution result, output: none AbortFunc = Callable[[Exception], None] # input: exception thrown by cmd, output: none diff --git a/kentik_api_library/kentik_api/utils/__init__.py b/kentik_api_library/kentik_api/utils/__init__.py index 0f6db37c..8f9531fa 100644 --- a/kentik_api_library/kentik_api/utils/__init__.py +++ b/kentik_api_library/kentik_api/utils/__init__.py @@ -1,3 +1,3 @@ -from .auth import get_credentials, get_url, get_proxy +from .auth import get_credentials, get_proxy, get_url from .device_cache import DeviceCache from .time_sequence import time_seq diff --git a/kentik_api_library/kentik_api/utils/device_cache.py b/kentik_api_library/kentik_api/utils/device_cache.py index 54f35c49..44456e23 100644 --- a/kentik_api_library/kentik_api/utils/device_cache.py +++ b/kentik_api_library/kentik_api/utils/device_cache.py @@ -60,7 +60,7 @@ def __init__(self, devices: List[Device], labels: Optional[List[str]] = None) -> else: self._devices_by_name[device.device_name] = device if device.id in self._devices_by_id: - log.critical("Duplicate device id: %%d", device.id) + log.critical("Duplicate device id: %d", device.id) else: self._devices_by_id[device.id] = device log.debug("Got %d devices (%d duplicate names)", len(self._devices_by_name), self.duplicate_names) diff --git a/kentik_api_library/mypy.ini b/kentik_api_library/mypy.ini deleted file mode 100644 index c697fece..00000000 --- a/kentik_api_library/mypy.ini +++ /dev/null @@ -1,3 +0,0 @@ -[mypy] -ignore_missing_imports = True -mypy_path = ./kentik_api diff --git a/kentik_api_library/pylintrc b/kentik_api_library/pylintrc deleted file mode 100644 index 834ab934..00000000 --- a/kentik_api_library/pylintrc +++ /dev/null @@ -1,591 +0,0 @@ -[MASTER] - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. -extension-pkg-whitelist= - -# Specify a score threshold to be exceeded before program exits with error. -fail-under=10.0 - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=examples - -# Add files or directories matching the regex patterns to the blacklist. The -# regex matches against base names, not paths. -ignore-patterns= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the -# number of processors available to use. -jobs=1 - -# Control the amount of potential inferred values when inferring a single -# object. This can help the performance when dealing with large functions or -# complex, nested conditions. -limit-inference-results=100 - -# List of plugins (as comma separated values of python module names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=yes - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. -confidence= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once). You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use "--disable=all --enable=classes -# --disable=W". -disable=missing-module-docstring, - missing-class-docstring, - missing-function-docstring, - print-statement, - parameter-unpacking, - unpacking-in-except, - old-raise-syntax, - backtick, - long-suffix, - old-ne-operator, - old-octal-literal, - import-star-module-level, - non-ascii-bytes-literal, - raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - useless-suppression, - deprecated-pragma, - use-symbolic-message-instead, - apply-builtin, - basestring-builtin, - buffer-builtin, - cmp-builtin, - coerce-builtin, - execfile-builtin, - file-builtin, - long-builtin, - raw_input-builtin, - reduce-builtin, - standarderror-builtin, - unicode-builtin, - xrange-builtin, - coerce-method, - delslice-method, - getslice-method, - setslice-method, - no-absolute-import, - old-division, - dict-iter-method, - dict-view-method, - next-method-called, - metaclass-assignment, - indexing-exception, - raising-string, - reload-builtin, - oct-method, - hex-method, - nonzero-method, - cmp-method, - input-builtin, - round-builtin, - intern-builtin, - unichr-builtin, - map-builtin-not-iterating, - zip-builtin-not-iterating, - range-builtin-not-iterating, - filter-builtin-not-iterating, - using-cmp-argument, - eq-without-hash, - div-method, - idiv-method, - rdiv-method, - exception-message-attribute, - invalid-str-codec, - sys-max-int, - bad-python3-import, - deprecated-string-function, - deprecated-str-translate-call, - deprecated-itertools-function, - deprecated-types-field, - next-method-defined, - dict-items-not-iterating, - dict-keys-not-iterating, - dict-values-not-iterating, - deprecated-operator-function, - deprecated-urllib-function, - xreadlines-attribute, - deprecated-sys-function, - exception-escape, - comprehension-escape - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable=c-extension-no-member - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'error', 'warning', 'refactor', and 'convention' -# which contain the number of messages in each category, as well as 'statement' -# which is the total number of statements analyzed. This score is used by the -# global evaluation report (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details. -#msg-template= - -# Set the output format. Available formats are text, parseable, colorized, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - -# Complete name of functions that never returns. When checking for -# inconsistent-return-statements if a never returning function is called then -# it will be considered as an explicit return statement and no message will be -# printed. -never-returning-functions=sys.exit - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=120 - -# Maximum number of lines in a module. -max-module-lines=1000 - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis). It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - -# Regular expression of note tags to take in consideration. -#notes-rgx= - - -[SIMILARITIES] - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io - - -[STRING] - -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=no - -# This flag controls whether the implicit-str-concat should generate a warning -# on implicit string concatenation in sequences defined over several lines. -check-str-concat-over-line-jumps=no - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=snake_case - -# Regular expression matching correct argument names. Overrides argument- -# naming-style. -#argument-rgx= - -# Naming style matching correct attribute names. -attr-naming-style=snake_case - -# Regular expression matching correct attribute names. Overrides attr-naming- -# style. -#attr-rgx= - -# Bad variable names which should always be refused, separated by a comma. -bad-names=foo, - bar, - baz, - toto, - tutu, - tata - -# Bad variable names regexes, separated by a comma. If names match any regex, -# they will always be refused -bad-names-rgxs= - -# Naming style matching correct class attribute names. -class-attribute-naming-style=any - -# Regular expression matching correct class attribute names. Overrides class- -# attribute-naming-style. -#class-attribute-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-naming- -# style. -#class-rgx= - -# Naming style matching correct constant names. -const-naming-style=UPPER_CASE - -# Regular expression matching correct constant names. Overrides const-naming- -# style. -#const-rgx= - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming style matching correct function names. -function-naming-style=snake_case - -# Regular expression matching correct function names. Overrides function- -# naming-style. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - ex, - Run, - _ - -# Good variable names regexes, separated by a comma. If names match any regex, -# they will always be accepted -good-names-rgxs= - -# Include a hint for the correct naming format with invalid-name. -include-naming-hint=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. -#inlinevar-rgx= - -# Naming style matching correct method names. -method-naming-style=snake_case - -# Regular expression matching correct method names. Overrides method-naming- -# style. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=snake_case - -# Regular expression matching correct module names. Overrides module-naming- -# style. -#module-rgx= - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -# These decorators are taken in consideration only for invalid-name. -property-classes=abc.abstractproperty - -# Naming style matching correct variable names. -variable-naming-style=snake_case - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. -#variable-rgx= - - -[LOGGING] - -# The type of string formatting that logging methods do. `old` means using % -# formatting, `new` is for `{}` formatting. -logging-format-style=old - -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: none. To make it work, -# install the python-enchant package. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains the private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to the private dictionary (see the -# --spelling-private-dict-file option) instead of raising a message. -spelling-store-unknown-words=no - - -[DESIGN] - -# Maximum number of arguments for function / method. -max-args=5 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Maximum number of boolean expressions in an if statement (see R0916). -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=12 - -# Maximum number of locals for function / method body. -max-locals=15 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body. -max-returns=6 - -# Maximum number of statements in function / method body. -max-statements=50 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=cls - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Deprecated modules which should not be used, separated by a comma. -deprecated-modules=optparse,tkinter.tix - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled). -ext-import-graph= - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled). -import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled). -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - -# Couples of modules and preferred modules, separated by a comma. -preferred-modules= - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception diff --git a/kentik_api_library/pyproject.toml b/kentik_api_library/pyproject.toml new file mode 100644 index 00000000..d6bebb2f --- /dev/null +++ b/kentik_api_library/pyproject.toml @@ -0,0 +1,108 @@ +[build-system] +requires = ["setuptools", "wheel", "setuptools_scm", "gitpython"] +build-backend = "setuptools.build_meta" + +[tool.black] +line-length = 120 +target-version = ['py39'] + +[tool.isort] +line_length = 120 +profile = "black" + +[tool.mypy] +ignore_missing_imports = true +exclude = "(generated|build)/" + +[tool.pytest.ini_options] +testpaths = ["tests/integration", "tests/unit"] + +[tool.pylint.master] +fail-under=8.5 + +[tool.pylint.message_control] +max-line-length = 120 +disable = [ + "missing-module-docstring", + "missing-class-docstring", + "missing-function-docstring", + "print-statement", + "parameter-unpacking", + "unpacking-in-except", + "old-raise-syntax", + "backtick", + "long-suffix", + "old-ne-operator", + "old-octal-literal", + "import-star-module-level", + "non-ascii-bytes-literal", + "raw-checker-failed", + "bad-inline-option", + "locally-disabled", + "file-ignored", + "suppressed-message", + "useless-suppression", + "deprecated-pragma", + "use-symbolic-message-instead", + "apply-builtin", + "basestring-builtin", + "buffer-builtin", + "cmp-builtin", + "coerce-builtin", + "execfile-builtin", + "file-builtin", + "long-builtin", + "raw_input-builtin", + "reduce-builtin", + "standarderror-builtin", + "unicode-builtin", + "xrange-builtin", + "coerce-method", + "delslice-method", + "getslice-method", + "setslice-method", + "no-absolute-import", + "old-division", + "dict-iter-method", + "dict-view-method", + "next-method-called", + "metaclass-assignment", + "indexing-exception", + "raising-string", + "reload-builtin", + "oct-method", + "hex-method", + "nonzero-method", + "cmp-method", + "input-builtin", + "round-builtin", + "intern-builtin", + "unichr-builtin", + "map-builtin-not-iterating", + "zip-builtin-not-iterating", + "range-builtin-not-iterating", + "filter-builtin-not-iterating", + "using-cmp-argument", + "eq-without-hash", + "div-method", + "idiv-method", + "rdiv-method", + "exception-message-attribute", + "invalid-str-codec", + "sys-max-int", + "bad-python3-import", + "deprecated-string-function", + "deprecated-str-translate-call", + "deprecated-itertools-function", + "deprecated-types-field", + "next-method-defined", + "dict-items-not-iterating", + "dict-keys-not-iterating", + "dict-values-not-iterating", + "deprecated-operator-function", + "deprecated-urllib-function", + "xreadlines-attribute", + "deprecated-sys-function", + "exception-escape", + "comprehension-escape" +] diff --git a/kentik_api_library/requirements-dev.txt b/kentik_api_library/requirements-dev.txt new file mode 100644 index 00000000..3fcab7a1 --- /dev/null +++ b/kentik_api_library/requirements-dev.txt @@ -0,0 +1,11 @@ +black>=21.11b1 +isort>=5.8.0 +mypy-extensions>=0.4.3 +mypy>=0.902 +Pillow>=8.4.0 +pylint>=2.8.3 +pytest-pylint>=0.18.0 +pytest>=6.2.4 +PyYAML>=6.0 +types-PyYAML>=5.4.1 +types-requests>=2.26.0 \ No newline at end of file diff --git a/kentik_api_library/requirements.txt b/kentik_api_library/requirements.txt index a690a923..ce8a6087 100644 --- a/kentik_api_library/requirements.txt +++ b/kentik_api_library/requirements.txt @@ -1,32 +1,25 @@ -astroid==2.5.6 -attrs==21.2.0 -certifi==2020.12.5 -chardet==4.0.0 -dacite==1.6.0 -fastparquet==0.6.3 -httpretty==1.1.3 -idna==2.10 -iniconfig==1.1.1 -isort==5.8.0 -lazy-object-proxy==1.6.0 -mccabe==0.6.1 -mypy-extensions==0.4.3 -mypy==0.902 -packaging==20.9 -pluggy==0.13.1 -py==1.10.0 -pylint==2.8.3 -pyparsing==2.4.7 -pytest-pylint==0.18.0 -pytest==6.2.4 -python-http-client==3.3.2 -requests[socks]==2.25.1 -six==1.16.0 -toml==0.10.2 -traitlets==5.0.5 -typed-ast==1.4.3 -types-PyYAML==5.4.1 -typing-extensions==3.10.0.0 -urllib3==1.26.4 -wheel==0.36.2 -wrapt==1.12.1 +astroid>=2.5.6 +attrs>=21.2.0 +certifi>=2020.12.5 +chardet>=4.0.0 +dacite>=1.6.0 +fastparquet>=0.6.3 +httpretty>=1.1.3 +idna>=2.10 +iniconfig>=1.1.1 +lazy-object-proxy>=1.6.0 +mccabe>=0.6.1 +packaging>=20.9 +pluggy>=0.13.1 +py>=1.10.0 +pyparsing>=2.4.7 +python-http-client>=3.3.2 +requests[socks]>=2.25.1 +six>=1.16.0 +toml>=0.10.2 +traitlets>=5.0.5 +typed-ast>=1.4.3 +typing-extensions>=3.10.0.0 +urllib3>=1.26.4 +wheel>=0.36.2 +wrapt>=1.12.1 diff --git a/kentik_api_library/setup.cfg b/kentik_api_library/setup.cfg deleted file mode 100644 index a7a71f96..00000000 --- a/kentik_api_library/setup.cfg +++ /dev/null @@ -1,8 +0,0 @@ -[aliases] -test = pytest - -[tool:pytest] -log_level = DEBUG -testpaths = - tests/integration - tests/unit diff --git a/kentik_api_library/setup.py b/kentik_api_library/setup.py index ce380c64..b66fa8d7 100644 --- a/kentik_api_library/setup.py +++ b/kentik_api_library/setup.py @@ -1,5 +1,5 @@ -import distutils.cmd -import distutils.log +from distutils.cmd import Command +from distutils import log import os import pathlib import subprocess @@ -19,50 +19,48 @@ "kentik_api.api_calls", "kentik_api.api_connection", "kentik_api.api_resources", - "kentik_api.requests_payload", + "kentik_api.internal", "kentik_api.public", + "kentik_api.requests_payload", "kentik_api.utils", ] -class PylintCmd(distutils.cmd.Command): +def run_cmd(cmd, reporter) -> None: + """Run arbitrary command as subprocess""" + reporter("Run command: {}".format(str(cmd)), level=log.DEBUG) + try: + subprocess.check_call(cmd) + except subprocess.CalledProcessError as ex: + reporter(str(ex), level=log.ERROR) + exit(1) + + +class Pylint(Command): """Custom command to run Pylint""" - description = "run Pylint on src, tests and examples dir" - user_options = [ - ("pylint-rcfile=", None, "path to Pylint config file"), - ] + description = "run Pylint on kentik_api, tests and examples directories; read configuration from pyproject.toml" + user_options = [] def initialize_options(self): - """Set default values for options.""" - self.pylint_rcfile = "" + pass def finalize_options(self): - """Post-process options.""" - if self.pylint_rcfile: - assert os.path.exists(self.pylint_rcfile), "Pylint config file {} does not exist.".format( - self.pylint_rcfile - ) + pass def run(self): """Run command.""" cmd = ["pylint"] - paths = ["./kentik_api", "./tests", "./examples"] - if self.pylint_rcfile: - cmd.append("--rcfile={}".format(self.pylint_rcfile)) + paths = ["kentik_api", "tests", "examples"] for path in paths: cmd.append(path) - self.announce("Running command: %s" % str(cmd), level=distutils.log.INFO) - try: - subprocess.check_call(cmd) - except subprocess.CalledProcessError: - pass + run_cmd(cmd, self.announce) -class MypyCmd(distutils.cmd.Command): +class Mypy(Command): """Custom command to run Mypy""" - description = "run Mypy on kentik_api directory" + description = "run Mypy on kentik_api, tests and examples directories; read configuration from pyproject.toml" user_options = [("packages=", None, "Packages to check with mypy")] def initialize_options(self): @@ -79,21 +77,68 @@ def run(self): cmd = ["mypy"] for package in self.packages: cmd.append(package) - self.announce("Run command: {}".format(str(cmd)), level=distutils.log.INFO) - try: - subprocess.check_call(cmd) - except subprocess.CalledProcessError: - self.announce( - "Command: {} returned error. Check if tests are not failing.".format(str(cmd)), level=distutils.log.INFO - ) + run_cmd(cmd, self.announce) + + +class Pytest(Command): + """Custom command to run pytest""" + + description = "run pytest on all relevant code; read configuration from pyproject.toml" + user_options = [] + + def initialize_options(self) -> None: + pass + + def finalize_options(self): + pass + + def run(self): + """Run command""" + cmd = ["pytest"] + run_cmd(cmd, self.announce) + + +class Format(Command): + """Custom command to run black + isort""" + + description = "run black and isort on all relevant code; read configuration from pyproject.toml" + user_options = [("dirs=", None, "Directories to check"), ("check", None, "Run in check mode")] + + def initialize_options(self) -> None: + self.dirs = ["kentik_api", "tests", "examples"] + self.check = False + + def finalize_options(self): + """Post-process options.""" + for d in self.dirs: + assert os.path.exists(d), "Path {} does not exist.".format(d) + + def run(self): + """Run command""" + self._black() + self._isort() + + def _black(self) -> None: + print("Tool: black") + cmd = ["black"] + if self.check: + cmd.append("--check") + for d in self.dirs: + cmd.append(d) + run_cmd(cmd, self.announce) + + def _isort(self) -> None: + print("Tool: isort") + cmd = ["isort"] + if self.check: + cmd.append("--check") + for d in self.dirs: + cmd.append(d) + run_cmd(cmd, self.announce) setup( name="kentik-api", - use_scm_version={ - "root": "..", - "relative_to": __file__, - }, description="SDK library for Kentik API", maintainer="Martin Machacek", maintainer_email="martin.machacek@kentik.com", @@ -102,15 +147,13 @@ def run(self): url="https://github.com/kentik/community_sdk_python/tree/main/kentik_api_library", license="Apache-2.0", include_package_data=True, + python_requires=">=3.8, <4", install_requires=["dacite>=1.6.0", "requests[socks]>=2.25.0", "typing-extensions>=3.7.4.3", "urllib3>=1.26.0"], - setup_requires=["pytest-runner", "pylint-runner", "setuptools_scm", "wheel"], tests_require=["httpretty", "pytest", "pylint"], - extras_require={ - "analytics": ["pandas>=1.2.4", "pyyaml>=5.4.1", "fastparquet>=0.6.3"], - }, + extras_require={"analytics": ["pandas>=1.2.4", "pyyaml>=5.4.1", "fastparquet>=0.6.3"]}, packages=PACKAGES, package_dir={pkg: os.path.join(*pkg.split(".")) for pkg in PACKAGES}, - cmdclass={"pylint": PylintCmd, "mypy": MypyCmd}, + cmdclass={"mypy": Mypy, "pylint": Pylint, "pytest": Pytest, "format": Format}, classifiers=[ "License :: OSI Approved :: Apache Software License", ], diff --git a/kentik_api_library/tests/library/test_imports.py b/kentik_api_library/tests/library/test_imports.py index dd0feb1a..29987626 100644 --- a/kentik_api_library/tests/library/test_imports.py +++ b/kentik_api_library/tests/library/test_imports.py @@ -1,20 +1,15 @@ -# pylint: skip-file -import sys import importlib +import sys -def test_import(library=""): - - library_found = False - +def test_import(library: str) -> None: + error = None try: - imported_library = importlib.import_module(library) - except ImportError: - pass - else: - library_found = True + _ = importlib.import_module(library) + except ImportError as err: + error = err - assert library_found, "Can't import '" + library + "'" + assert error is None, f"Can't import '{library}': {error}" if __name__ == "__main__": diff --git a/kentik_api_library/tests/unit/api_calls/test_active_alerts.py b/kentik_api_library/tests/unit/api_calls/test_active_alerts.py index 1e68d385..a7f2add0 100644 --- a/kentik_api_library/tests/unit/api_calls/test_active_alerts.py +++ b/kentik_api_library/tests/unit/api_calls/test_active_alerts.py @@ -1,6 +1,5 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods from kentik_api.api_calls.active_alerts import * +from kentik_api.api_calls.api_call import APICall, APICallMethods DUMMY_API_URL = "/alerts-active" diff --git a/kentik_api_library/tests/unit/api_calls/test_alerts.py b/kentik_api_library/tests/unit/api_calls/test_alerts.py index 5ba6aeb0..a24818e2 100644 --- a/kentik_api_library/tests/unit/api_calls/test_alerts.py +++ b/kentik_api_library/tests/unit/api_calls/test_alerts.py @@ -1,7 +1,5 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods from kentik_api.api_calls.alerts import * - +from kentik_api.api_calls.api_call import APICall, APICallMethods DUMMY_API_URL = "/alerts" DUMMY_START_DATE = "2018-10-15T22:15:00" diff --git a/kentik_api_library/tests/unit/api_calls/test_batch.py b/kentik_api_library/tests/unit/api_calls/test_batch.py index 517e1119..bbac8791 100644 --- a/kentik_api_library/tests/unit/api_calls/test_batch.py +++ b/kentik_api_library/tests/unit/api_calls/test_batch.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.batch import * diff --git a/kentik_api_library/tests/unit/api_calls/test_custom_application.py b/kentik_api_library/tests/unit/api_calls/test_custom_application.py index 5a7a940e..9da1e98b 100644 --- a/kentik_api_library/tests/unit/api_calls/test_custom_application.py +++ b/kentik_api_library/tests/unit/api_calls/test_custom_application.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.custom_applications import * DUMMY_API_URL = "/customApplications" diff --git a/kentik_api_library/tests/unit/api_calls/test_custom_dimension.py b/kentik_api_library/tests/unit/api_calls/test_custom_dimension.py index ad566952..7703c714 100644 --- a/kentik_api_library/tests/unit/api_calls/test_custom_dimension.py +++ b/kentik_api_library/tests/unit/api_calls/test_custom_dimension.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.custom_dimensions import * DUMMY_API_URL = "/customdimension" diff --git a/kentik_api_library/tests/unit/api_calls/test_device.py b/kentik_api_library/tests/unit/api_calls/test_device.py index 6b63219e..57e86676 100644 --- a/kentik_api_library/tests/unit/api_calls/test_device.py +++ b/kentik_api_library/tests/unit/api_calls/test_device.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.devices import * DUMMY_API_URL = "/device" diff --git a/kentik_api_library/tests/unit/api_calls/test_device_label.py b/kentik_api_library/tests/unit/api_calls/test_device_label.py index 9684c778..1e5a9935 100644 --- a/kentik_api_library/tests/unit/api_calls/test_device_label.py +++ b/kentik_api_library/tests/unit/api_calls/test_device_label.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.device_labels import * DUMMY_API_URL = "/deviceLabels" diff --git a/kentik_api_library/tests/unit/api_calls/test_my_kentik.py b/kentik_api_library/tests/unit/api_calls/test_my_kentik.py index c3aa3a96..be4398bb 100644 --- a/kentik_api_library/tests/unit/api_calls/test_my_kentik.py +++ b/kentik_api_library/tests/unit/api_calls/test_my_kentik.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.my_kentik_portal import * DUMMY_API_URL = "/mykentik/tenant" diff --git a/kentik_api_library/tests/unit/api_calls/test_query_methods.py b/kentik_api_library/tests/unit/api_calls/test_query_methods.py index 5b4a2490..19be2206 100644 --- a/kentik_api_library/tests/unit/api_calls/test_query_methods.py +++ b/kentik_api_library/tests/unit/api_calls/test_query_methods.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.query_methods import * DUMMY_API_URL = "/query" diff --git a/kentik_api_library/tests/unit/api_calls/test_saved_filter.py b/kentik_api_library/tests/unit/api_calls/test_saved_filter.py index dca88819..ef4d25dd 100644 --- a/kentik_api_library/tests/unit/api_calls/test_saved_filter.py +++ b/kentik_api_library/tests/unit/api_calls/test_saved_filter.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.saved_filters import * DUMMY_API_URL = "/saved-filter/custom" diff --git a/kentik_api_library/tests/unit/api_calls/test_site.py b/kentik_api_library/tests/unit/api_calls/test_site.py index 7933941b..e1a7c6c8 100644 --- a/kentik_api_library/tests/unit/api_calls/test_site.py +++ b/kentik_api_library/tests/unit/api_calls/test_site.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.sites import * DUMMY_API_URL = "/site" diff --git a/kentik_api_library/tests/unit/api_calls/test_tag.py b/kentik_api_library/tests/unit/api_calls/test_tag.py index 75294baa..88210ed5 100644 --- a/kentik_api_library/tests/unit/api_calls/test_tag.py +++ b/kentik_api_library/tests/unit/api_calls/test_tag.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.tags import * DUMMY_API_URL = "/tag" diff --git a/kentik_api_library/tests/unit/api_calls/test_user.py b/kentik_api_library/tests/unit/api_calls/test_user.py index 55ec9e91..335bbf18 100644 --- a/kentik_api_library/tests/unit/api_calls/test_user.py +++ b/kentik_api_library/tests/unit/api_calls/test_user.py @@ -1,5 +1,4 @@ -from kentik_api.api_calls.api_call import APICall -from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_calls.api_call import APICall, APICallMethods from kentik_api.api_calls.users import * DUMMY_API_URL = "/user" diff --git a/kentik_api_library/tests/unit/api_resources/test_alerting.py b/kentik_api_library/tests/unit/api_resources/test_alerting.py index c65a879c..03dfdb37 100644 --- a/kentik_api_library/tests/unit/api_resources/test_alerting.py +++ b/kentik_api_library/tests/unit/api_resources/test_alerting.py @@ -1,9 +1,9 @@ -from http import HTTPStatus from datetime import datetime +from http import HTTPStatus -from kentik_api.api_resources.alerting_api import AlertingAPI from kentik_api.api_calls.api_call import APICallMethods -from kentik_api.public.manual_mitigation import ManualMitigation, AlertFilter +from kentik_api.api_resources.alerting_api import AlertingAPI +from kentik_api.public.manual_mitigation import AlertFilter, ManualMitigation from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/api_resources/test_batch_operations.py b/kentik_api_library/tests/unit/api_resources/test_batch_operations.py index 4cad36dd..48d2a8c0 100644 --- a/kentik_api_library/tests/unit/api_resources/test_batch_operations.py +++ b/kentik_api_library/tests/unit/api_resources/test_batch_operations.py @@ -2,7 +2,7 @@ from kentik_api.api_calls.api_call import APICallMethods from kentik_api.api_resources.batch_api import BatchAPI -from kentik_api.public.batch_operation import BatchOperationPart, Upsert, Criterion, Deletion +from kentik_api.public.batch_operation import BatchOperationPart, Criterion, Deletion, Upsert from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/api_resources/test_custom_applications.py b/kentik_api_library/tests/unit/api_resources/test_custom_applications.py index 51a3eb2f..32966914 100644 --- a/kentik_api_library/tests/unit/api_resources/test_custom_applications.py +++ b/kentik_api_library/tests/unit/api_resources/test_custom_applications.py @@ -1,9 +1,9 @@ from http import HTTPStatus -from kentik_api.api_resources.custom_applications_api import CustomApplicationsAPI from kentik_api.api_calls.api_call import APICallMethods -from kentik_api.public.types import ID +from kentik_api.api_resources.custom_applications_api import CustomApplicationsAPI from kentik_api.public.custom_application import CustomApplication +from kentik_api.public.types import ID from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/api_resources/test_device_labels.py b/kentik_api_library/tests/unit/api_resources/test_device_labels.py index 1d23edf9..4316885f 100644 --- a/kentik_api_library/tests/unit/api_resources/test_device_labels.py +++ b/kentik_api_library/tests/unit/api_resources/test_device_labels.py @@ -1,9 +1,9 @@ from http import HTTPStatus from kentik_api.api_calls.api_call import APICallMethods -from kentik_api.public.types import ID -from kentik_api.public.device_label import DeviceLabel from kentik_api.api_resources.device_labels_api import DeviceLabelsAPI +from kentik_api.public.device_label import DeviceLabel +from kentik_api.public.types import ID from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/api_resources/test_devices.py b/kentik_api_library/tests/unit/api_resources/test_devices.py index 386b90e1..263e4b47 100644 --- a/kentik_api_library/tests/unit/api_resources/test_devices.py +++ b/kentik_api_library/tests/unit/api_resources/test_devices.py @@ -11,8 +11,8 @@ DeviceType, Interface, PrivacyProtocol, - SNMPv3Conf, SecondaryIP, + SNMPv3Conf, VRFAttributes, ) from kentik_api.public.types import ID diff --git a/kentik_api_library/tests/unit/api_resources/test_my_kentik_portal.py b/kentik_api_library/tests/unit/api_resources/test_my_kentik_portal.py index 766503d6..7bb4fa3b 100644 --- a/kentik_api_library/tests/unit/api_resources/test_my_kentik_portal.py +++ b/kentik_api_library/tests/unit/api_resources/test_my_kentik_portal.py @@ -1,8 +1,8 @@ from http import HTTPStatus from kentik_api.api_calls.api_call import APICallMethods -from kentik_api.public.types import ID from kentik_api.api_resources.tenants_api import MyKentikPortalAPI +from kentik_api.public.types import ID from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/api_resources/test_plans.py b/kentik_api_library/tests/unit/api_resources/test_plans.py index 1781bb5a..fd01cf54 100644 --- a/kentik_api_library/tests/unit/api_resources/test_plans.py +++ b/kentik_api_library/tests/unit/api_resources/test_plans.py @@ -1,8 +1,8 @@ from http import HTTPStatus from kentik_api.api_calls.api_call import APICallMethods -from kentik_api.public.types import ID from kentik_api.api_resources.plans_api import PlansAPI +from kentik_api.public.types import ID from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/api_resources/test_queries.py b/kentik_api_library/tests/unit/api_resources/test_queries.py index c0cc8ae9..8b8d9714 100644 --- a/kentik_api_library/tests/unit/api_resources/test_queries.py +++ b/kentik_api_library/tests/unit/api_resources/test_queries.py @@ -1,22 +1,22 @@ from http import HTTPStatus -from kentik_api.api_resources.query_api import QueryAPI from kentik_api.api_calls.api_call import APICallMethods -from kentik_api.public.saved_filter import Filters, FilterGroups, Filter +from kentik_api.api_resources.query_api import QueryAPI from kentik_api.public.query_object import ( - QueryObject, - QueryArrayItem, - Query, - ImageType, Aggregate, AggregateFunctionType, + ChartViewType, + DimensionType, FastDataType, + ImageType, MetricType, - DimensionType, - ChartViewType, + Query, + QueryArrayItem, + QueryObject, TimeFormat, ) from kentik_api.public.query_sql import QuerySQL +from kentik_api.public.saved_filter import Filter, FilterGroups, Filters from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/api_resources/test_saved_filters.py b/kentik_api_library/tests/unit/api_resources/test_saved_filters.py index b740ebc0..1ee10432 100644 --- a/kentik_api_library/tests/unit/api_resources/test_saved_filters.py +++ b/kentik_api_library/tests/unit/api_resources/test_saved_filters.py @@ -1,9 +1,9 @@ from http import HTTPStatus from kentik_api.api_calls.api_call import APICallMethods -from kentik_api.public.types import ID -from kentik_api.public.saved_filter import SavedFilter, Filters, FilterGroups, Filter from kentik_api.api_resources.saved_filters_api import SavedFiltersAPI +from kentik_api.public.saved_filter import Filter, FilterGroups, Filters, SavedFilter +from kentik_api.public.types import ID from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/api_resources/test_sites.py b/kentik_api_library/tests/unit/api_resources/test_sites.py index 589ae370..868dc4e6 100644 --- a/kentik_api_library/tests/unit/api_resources/test_sites.py +++ b/kentik_api_library/tests/unit/api_resources/test_sites.py @@ -1,9 +1,9 @@ from http import HTTPStatus from kentik_api.api_calls.api_call import APICallMethods -from kentik_api.public.types import ID -from kentik_api.public.site import Site from kentik_api.api_resources.sites_api import SitesAPI +from kentik_api.public.site import Site +from kentik_api.public.types import ID from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/api_resources/test_tags.py b/kentik_api_library/tests/unit/api_resources/test_tags.py index 10e84b8f..e86ed004 100644 --- a/kentik_api_library/tests/unit/api_resources/test_tags.py +++ b/kentik_api_library/tests/unit/api_resources/test_tags.py @@ -1,9 +1,9 @@ from http import HTTPStatus -from kentik_api.api_resources.tags_api import TagsAPI from kentik_api.api_calls.api_call import APICallMethods -from kentik_api.public.types import ID +from kentik_api.api_resources.tags_api import TagsAPI from kentik_api.public.tag import Tag +from kentik_api.public.types import ID from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/api_resources/test_users.py b/kentik_api_library/tests/unit/api_resources/test_users.py index 3fb121f7..00d82ee6 100644 --- a/kentik_api_library/tests/unit/api_resources/test_users.py +++ b/kentik_api_library/tests/unit/api_resources/test_users.py @@ -1,9 +1,9 @@ from http import HTTPStatus from kentik_api.api_calls.api_call import APICallMethods +from kentik_api.api_resources.users_api import UsersAPI from kentik_api.public.types import ID from kentik_api.public.user import User -from kentik_api.api_resources.users_api import UsersAPI from tests.unit.stub_api_connector import StubAPIConnector diff --git a/kentik_api_library/tests/unit/requests_payload/test_conversions.py b/kentik_api_library/tests/unit/requests_payload/test_conversions.py index 66f0bed3..27dac934 100644 --- a/kentik_api_library/tests/unit/requests_payload/test_conversions.py +++ b/kentik_api_library/tests/unit/requests_payload/test_conversions.py @@ -1,18 +1,19 @@ -from enum import Enum -from typing import Optional, Any, Dict from dataclasses import dataclass +from enum import Enum +from typing import Any, Dict, Optional + import pytest +from kentik_api.public.errors import DataFormatError, DeserializationError from kentik_api.requests_payload.conversions import ( - from_dict, - dict_from_json, - list_from_json, convert, - convert_or_none, convert_list_or_none, + convert_or_none, + dict_from_json, enum_to_str, + from_dict, + list_from_json, ) -from kentik_api.public.errors import DeserializationError, DataFormatError @dataclass diff --git a/kentik_api_library/tests/unit/throttling/test_active_wait_retry.py b/kentik_api_library/tests/unit/throttling/test_active_wait_retry.py index bb36554f..b2849d6c 100644 --- a/kentik_api_library/tests/unit/throttling/test_active_wait_retry.py +++ b/kentik_api_library/tests/unit/throttling/test_active_wait_retry.py @@ -1,10 +1,10 @@ from unittest.mock import create_autospec + import pytest from kentik_api.public.errors import IntermittentError -from kentik_api.throttling.cmd import Cmd from kentik_api.throttling.active_wait_retry import active_wait_retry - +from kentik_api.throttling.cmd import Cmd FAIL = IntermittentError("fail, try again") SUCCESS = "expected_cmd_call_result" diff --git a/kentik_api_library/tests/unit/throttling/test_background_queue.py b/kentik_api_library/tests/unit/throttling/test_background_queue.py index c4710e5e..734f923c 100644 --- a/kentik_api_library/tests/unit/throttling/test_background_queue.py +++ b/kentik_api_library/tests/unit/throttling/test_background_queue.py @@ -1,8 +1,8 @@ -from unittest.mock import create_autospec, Mock +from unittest.mock import Mock, create_autospec from kentik_api.public.errors import IntermittentError -from kentik_api.throttling.cmd import Cmd from kentik_api.throttling.background_queue import BackgroundCmdQueue +from kentik_api.throttling.cmd import Cmd FAIL = IntermittentError("fail, try again") SUCCESS = "expected_cmd_call_result"