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
76 lines
2.9 KiB
Python
76 lines
2.9 KiB
Python
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
|