Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move exports for more modules #1153

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Adjust imports, linters, tests
  • Loading branch information
pakrym-stripe committed Dec 7, 2023
commit 0c7ad9613c43f90350fbe7e05bdcf0e84b4f75c8
14 changes: 12 additions & 2 deletions .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,26 @@ ignore = E501, W503
per-file-ignores =
*/__init__.py: E402, F401
# we test various import patterns
tests/test_exports.py: IMP100, IMP101
tests/*: IMP101
tests/test_exports.py: IMP100, IMP101, IMP102
tests/*: IMP101, IMP102, IMP102
# backcompat with outdated import patterns
stripe/api_resources/*: IMP100, E402, F401

# IMP101: Do not import stripe
# breaking circular dependencies in overrides
stripe/_file.py: IMP101
stripe/_account.py: IMP101
stripe/_person.py: IMP101
stripe/_quote.py: IMP101

# IMP102: Do not create public modules
# contains a single deprecated class
stripe/api_resources/recipient_transfer.py: IMP102
# type names conflict with existing error names in stripe
stripe/oauth_error.py: IMP102
# setup.py is required for tooling
setup.py: IMP102

[flake8:local-plugins]
extension =
SPY = flake8_stripe:TypingImportsChecker
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ clean:

update-version:
@echo "$(VERSION)" > VERSION
@perl -pi -e 's|VERSION = "[.\d\w]+"|VERSION = "$(VERSION)"|' stripe/version.py
@perl -pi -e 's|VERSION = "[.\d\w]+"|VERSION = "$(VERSION)"|' stripe/_version.py

codegen-format: fmt

Expand Down
36 changes: 21 additions & 15 deletions flake8_stripe/flake8_stripe.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,23 +121,30 @@ class StripeImportsChecker:
name = __name__
version = "0.1.0"

def __init__(self, tree: ast.AST):
def __init__(self, tree: ast.AST, filename: str):
self.tree = tree

allowed_non_private_imports = [
# These have not been converted yet
"stripe.util",
"stripe.oauth",
"stripe.webhook",
"stripe.multipart_data_generator",
"stripe.request_metrics",
"stripe.object_classes",
"stripe.app_info",
"stripe.api_version",
"stripe.http_client",
]
self.filename = filename

def run(self) -> Iterator[Tuple[int, int, str, type]]:
if not self.filename.split("/")[-1].startswith("_"):
backcompat = False
for node in ast.walk(self.tree):
# check node is a constant string that contains package is deprecated
if (
isinstance(node, ast.Constant)
and isinstance(node.value, str)
and "is deprecated" in node.value
):
backcompat = True

if not backcompat:
yield (
0,
0,
"IMP102 Do not create non-private modules",
type(self),
)

for node in ast.walk(self.tree):
if isinstance(node, ast.Import):
# Forbid: import stripe
Expand All @@ -154,7 +161,6 @@ def run(self) -> Iterator[Tuple[int, int, str, type]]:
parts = node.module.split(".")
if (
len(parts) > 1
and node.module not in self.allowed_non_private_imports
and parts[0] == "stripe"
and not parts[-1].startswith("_")
):
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
long_description = fp.read()

version_contents = {}
with open(os.path.join(here, "stripe", "version.py"), encoding="utf-8") as f:
with open(os.path.join(here, "stripe", "_version.py"), encoding="utf-8") as f:
exec(f.read(), version_contents)

setup(
Expand Down
33 changes: 26 additions & 7 deletions stripe/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@
# Andrew Metcalf <andrew@stripe.com>

# Configuration variables
from stripe.api_version import _ApiVersion
from stripe._api_version import _ApiVersion

from stripe.app_info import AppInfo

if TYPE_CHECKING:
from stripe.http_client import HTTPClient
# We must import the app_info module eagerly before defining the app_info global
# otherwise the late import will overwrite the global
import stripe.app_info
from stripe._app_info import AppInfo
from stripe._version import VERSION as VERSION

api_key: Optional[str] = None
client_id: Optional[str] = None
Expand All @@ -38,10 +39,10 @@
log: Optional[Literal["debug", "info"]] = None

# OAuth
from stripe.oauth import OAuth
from stripe._oauth import OAuth

# Webhooks
from stripe.webhook import Webhook, WebhookSignature
from stripe._webhook import Webhook, WebhookSignature


# Sets some basic information about the running application that's sent along
Expand Down Expand Up @@ -130,13 +131,31 @@ def set_app_info(
SignatureVerificationError as SignatureVerificationError,
)

# HttpClient
from stripe._http_client import (
HTTPClient as HTTPClient,
PycurlClient as PycurlClient,
RequestsClient as RequestsClient,
UrlFetchClient as UrlFetchClient,
new_default_http_client as new_default_http_client,
)

# Util
from stripe._util import convert_to_stripe_object as convert_to_stripe_object

# Backwards compatibility re-exports
if not TYPE_CHECKING:
from stripe import _api_requestor as api_requestor
from stripe import _stripe_response as stripe_response
from stripe import _stripe_object as stripe_object
from stripe import _error_object as error_object
from stripe import _error as error
from stripe import _http_client as http_client
from stripe import _util as util
from stripe import _oauth as oauth
from stripe import _webhook as webhook
from stripe import _multipart_data_generator as multipart_data_generator
from stripe import _request_metrics as request_metrics
from stripe._file import File as FileUpload

import warnings
Expand Down
56 changes: 30 additions & 26 deletions stripe/_account.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
# -*- coding: utf-8 -*-
# File generated from our OpenAPI spec
from stripe import oauth, util
from stripe import _util
from stripe._createable_api_resource import CreateableAPIResource
from stripe._deletable_api_resource import DeletableAPIResource
from stripe._expandable_field import ExpandableField
from stripe._list_object import ListObject
from stripe._listable_api_resource import ListableAPIResource
from stripe._nested_resource_class_methods import nested_resource_class_methods
from stripe._oauth import OAuth
from stripe._person import Person
from stripe._request_options import RequestOptions
from stripe._stripe_object import StripeObject
from stripe._updateable_api_resource import UpdateableAPIResource
from stripe.util import class_method_variant
from stripe._util import class_method_variant
from typing import ClassVar, Dict, List, Optional, Union, cast, overload
from typing_extensions import (
Literal,
Expand Down Expand Up @@ -3609,7 +3610,7 @@ def _cls_persons(
cls._static_request(
"get",
"/v1/accounts/{account}/persons".format(
account=util.sanitize_id(account)
account=_util.sanitize_id(account)
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -3663,7 +3664,7 @@ def persons( # pyright: ignore[reportGeneralTypeIssues]
self._request(
"get",
"/v1/accounts/{account}/persons".format(
account=util.sanitize_id(self.get("id"))
account=_util.sanitize_id(self.get("id"))
),
idempotency_key=idempotency_key,
params=params,
Expand Down Expand Up @@ -3691,7 +3692,7 @@ def _cls_reject(
cls._static_request(
"post",
"/v1/accounts/{account}/reject".format(
account=util.sanitize_id(account)
account=_util.sanitize_id(account)
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -3751,7 +3752,7 @@ def reject( # pyright: ignore[reportGeneralTypeIssues]
self._request(
"post",
"/v1/accounts/{account}/reject".format(
account=util.sanitize_id(self.get("id"))
account=_util.sanitize_id(self.get("id"))
),
idempotency_key=idempotency_key,
params=params,
Expand Down Expand Up @@ -3785,7 +3786,7 @@ def instance_url(self):

def deauthorize(self, **params):
params["stripe_user_id"] = self.id
return oauth.OAuth.deauthorize(**params)
return OAuth.deauthorize(**params)

def serialize(self, previous):
params = super(Account, self).serialize(previous)
Expand Down Expand Up @@ -3817,8 +3818,8 @@ def retrieve_capability(
cls._static_request(
"get",
"/v1/accounts/{account}/capabilities/{capability}".format(
account=util.sanitize_id(account),
capability=util.sanitize_id(capability),
account=_util.sanitize_id(account),
capability=_util.sanitize_id(capability),
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -3847,8 +3848,8 @@ def modify_capability(
cls._static_request(
"post",
"/v1/accounts/{account}/capabilities/{capability}".format(
account=util.sanitize_id(account),
capability=util.sanitize_id(capability),
account=_util.sanitize_id(account),
capability=_util.sanitize_id(capability),
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -3876,7 +3877,7 @@ def list_capabilities(
cls._static_request(
"get",
"/v1/accounts/{account}/capabilities".format(
account=util.sanitize_id(account)
account=_util.sanitize_id(account)
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -3904,7 +3905,7 @@ def create_external_account(
cls._static_request(
"post",
"/v1/accounts/{account}/external_accounts".format(
account=util.sanitize_id(account)
account=_util.sanitize_id(account)
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -3933,7 +3934,8 @@ def retrieve_external_account(
cls._static_request(
"get",
"/v1/accounts/{account}/external_accounts/{id}".format(
account=util.sanitize_id(account), id=util.sanitize_id(id)
account=_util.sanitize_id(account),
id=_util.sanitize_id(id),
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -3964,7 +3966,8 @@ def modify_external_account(
cls._static_request(
"post",
"/v1/accounts/{account}/external_accounts/{id}".format(
account=util.sanitize_id(account), id=util.sanitize_id(id)
account=_util.sanitize_id(account),
id=_util.sanitize_id(id),
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -3993,7 +3996,8 @@ def delete_external_account(
cls._static_request(
"delete",
"/v1/accounts/{account}/external_accounts/{id}".format(
account=util.sanitize_id(account), id=util.sanitize_id(id)
account=_util.sanitize_id(account),
id=_util.sanitize_id(id),
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -4021,7 +4025,7 @@ def list_external_accounts(
cls._static_request(
"get",
"/v1/accounts/{account}/external_accounts".format(
account=util.sanitize_id(account)
account=_util.sanitize_id(account)
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -4051,7 +4055,7 @@ def create_login_link(
cls._static_request(
"post",
"/v1/accounts/{account}/login_links".format(
account=util.sanitize_id(account)
account=_util.sanitize_id(account)
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -4079,7 +4083,7 @@ def create_person(
cls._static_request(
"post",
"/v1/accounts/{account}/persons".format(
account=util.sanitize_id(account)
account=_util.sanitize_id(account)
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -4108,8 +4112,8 @@ def retrieve_person(
cls._static_request(
"get",
"/v1/accounts/{account}/persons/{person}".format(
account=util.sanitize_id(account),
person=util.sanitize_id(person),
account=_util.sanitize_id(account),
person=_util.sanitize_id(person),
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -4138,8 +4142,8 @@ def modify_person(
cls._static_request(
"post",
"/v1/accounts/{account}/persons/{person}".format(
account=util.sanitize_id(account),
person=util.sanitize_id(person),
account=_util.sanitize_id(account),
person=_util.sanitize_id(person),
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -4168,8 +4172,8 @@ def delete_person(
cls._static_request(
"delete",
"/v1/accounts/{account}/persons/{person}".format(
account=util.sanitize_id(account),
person=util.sanitize_id(person),
account=_util.sanitize_id(account),
person=_util.sanitize_id(person),
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down Expand Up @@ -4197,7 +4201,7 @@ def list_persons(
cls._static_request(
"get",
"/v1/accounts/{account}/persons".format(
account=util.sanitize_id(account)
account=_util.sanitize_id(account)
),
api_key=api_key,
stripe_version=stripe_version,
Expand Down
Loading