snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
This commit is contained in:
75
corporate/lib/billing_management.py
Normal file
75
corporate/lib/billing_management.py
Normal file
@@ -0,0 +1,75 @@
|
||||
from argparse import ArgumentParser
|
||||
from typing import Any
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.management.base import CommandError
|
||||
|
||||
from zerver.lib.management import ZulipBaseCommand
|
||||
from zerver.models.realms import Realm
|
||||
from zilencer.models import RemoteRealm, RemoteZulipServer
|
||||
|
||||
if settings.BILLING_ENABLED:
|
||||
from corporate.lib.stripe import (
|
||||
BillingSession,
|
||||
RealmBillingSession,
|
||||
RemoteRealmBillingSession,
|
||||
RemoteServerBillingSession,
|
||||
)
|
||||
|
||||
|
||||
class BillingSessionCommand(ZulipBaseCommand):
|
||||
def add_billing_entity_args(self, parser: ArgumentParser) -> None:
|
||||
parser.add_argument(
|
||||
"--remote-server",
|
||||
dest="remote_server_uuid",
|
||||
required=False,
|
||||
help="The UUID of the registered remote Zulip server to modify.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--remote-realm",
|
||||
dest="remote_realm_uuid",
|
||||
required=False,
|
||||
help="The UUID of the remote realm to modify.",
|
||||
)
|
||||
self.add_realm_args(parser)
|
||||
|
||||
def get_billing_session_from_args(self, options: dict[str, Any]) -> BillingSession:
|
||||
realm: Realm | None = None
|
||||
remote_realm: RemoteRealm | None = None
|
||||
remote_server: RemoteZulipServer | None = None
|
||||
billing_session: BillingSession | None = None
|
||||
if options["realm_id"]:
|
||||
realm = self.get_realm(options)
|
||||
if realm is None:
|
||||
raise CommandError("No realm found.")
|
||||
billing_session = RealmBillingSession(user=None, realm=realm)
|
||||
elif options["remote_realm_uuid"]:
|
||||
remote_realm_uuid = options["remote_realm_uuid"]
|
||||
try:
|
||||
remote_realm = RemoteRealm.objects.get(uuid=remote_realm_uuid)
|
||||
billing_session = RemoteRealmBillingSession(remote_realm=remote_realm)
|
||||
except RemoteRealm.DoesNotExist:
|
||||
raise CommandError(
|
||||
"There is no remote realm with uuid '{}'. Aborting.".format(
|
||||
options["remote_realm_uuid"]
|
||||
)
|
||||
)
|
||||
elif options["remote_server_uuid"]:
|
||||
remote_server_uuid = options["remote_server_uuid"]
|
||||
try:
|
||||
remote_server = RemoteZulipServer.objects.get(uuid=remote_server_uuid)
|
||||
billing_session = RemoteServerBillingSession(remote_server=remote_server)
|
||||
except RemoteZulipServer.DoesNotExist:
|
||||
raise CommandError(
|
||||
"There is no remote server with uuid '{}'. Aborting.".format(
|
||||
options["remote_server_uuid"]
|
||||
)
|
||||
)
|
||||
|
||||
if realm is None and remote_realm is None and remote_server is None:
|
||||
raise CommandError(
|
||||
"No billing entity (Realm, RemoteRealm or RemoteZulipServer) specified."
|
||||
)
|
||||
|
||||
assert billing_session is not None
|
||||
return billing_session
|
||||
Reference in New Issue
Block a user