From ce6d01597471db22799fddbf4095fdb82daa8563 Mon Sep 17 00:00:00 2001 From: Andrey Dolgolev Date: Wed, 28 Jul 2021 16:42:50 +0300 Subject: [PATCH] Add init version of subscription cli. --- backend/moonstream/cli.py | 135 +++++++++++++++++++++ backend/moonstream/routes/subscriptions.py | 9 +- backend/moonstream/settings.py | 8 ++ 3 files changed, 149 insertions(+), 3 deletions(-) create mode 100644 backend/moonstream/cli.py diff --git a/backend/moonstream/cli.py b/backend/moonstream/cli.py new file mode 100644 index 00000000..2927d853 --- /dev/null +++ b/backend/moonstream/cli.py @@ -0,0 +1,135 @@ +""" +Moonstream CLI +""" +import argparse +from distutils.util import strtobool +import json +from typing import List +import uuid + +from bugout.data import BugoutResource, BugoutResources +from bugout.exceptions import BugoutResponseException + +from .settings import ( + MOONSTREAM_SUBSCRIPTIONS_USER_TOKEN, + MOONSTREAM_APPLICATION_ID, + bugout_client as bc, +) + + +class BroodResourcesInteractionException(Exception): + pass + + +class UnExpectedException(Exception): + pass + + +def add_subscription_handler(args: argparse.Namespace) -> None: + """ + Handler for "groups subscription add" subcommand. + """ + new_subscription_id = 0 + params = {"type": "subscription_type"} + + try: + + # resolve index + try: + resources: BugoutResources = bc.list_resources( + token=MOONSTREAM_SUBSCRIPTIONS_USER_TOKEN, params=params + ) + new_subscription_id = ( + max( + [ + int(resource.resource_data["id"]) + for resource in resources.resources + ] + ) + + 1 + ) + except BugoutResponseException as e: + if e.detail != "Resources not found": + raise BroodResourcesInteractionException( + f"status_code={e.status_code}, detail={e.detail}" + ) + except Exception as e: + print("Unexpected Exception on request to brood") + + subscription_data = { + "id": str(new_subscription_id), + "name": args.name, + "description": args.description, + "subscription_plan_id": args.subscription_plan_id, + "active": args.active, + } + + # Add subscriptions + + resource_data = {"type": "subscription_type"} + resource_data.update(subscription_data) + + try: + + resource: BugoutResource = bc.create_resource( + token=MOONSTREAM_SUBSCRIPTIONS_USER_TOKEN, + application_id=MOONSTREAM_APPLICATION_ID, + resource_data=resource_data, + ) + except BugoutResponseException as e: + print(f"status_code={e.status_code}, detail={e.detail}") + raise BroodResourcesInteractionException( + f"status_code={e.status_code}, detail={e.detail}" + ) + except Exception as e: + print(f"Exception in create brood resource error:{e}") + raise UnExpectedException("Error in resource creating") + + except Exception as e: + print(e) + + +def main() -> None: + parser = argparse.ArgumentParser(description="Moonstream CLI") + parser.set_defaults(func=lambda _: parser.print_help()) + subcommands = parser.add_subparsers(description="Moonstream commands") + + parser_subscription = subcommands.add_parser( + "subscription", description="Moonstream subscription" + ) + parser_subscription.set_defaults(func=lambda _: parser_subscription.print_help()) + subcommands_subscription = parser_subscription.add_subparsers( + description="Moonstream subscription commands" + ) + + # Subscriptions command parser + parser_subscription_create = subcommands_subscription.add_parser( + "create", description="Create Moonstream subscription" + ) + parser_subscription_create.add_argument( + "-n", + "--name", + required=True, + type=str, + help="Title of that subscription", + ) + parser_subscription_create.add_argument( + "-d", + "--descriptions", + required=True, + type=str, + help="Description for user", + ) + parser_subscription_create.add_argument( + "-s", + "--subscription_plan_id", + required=False, + type=str, + help="Stripe sibscription id", + ) + parser_subscription_create.add_argument( + "--active", + action="store_true", + help="Set this flag to create a verified user", + ) + parser_subscription_create.set_defaults(func=add_subscription_handler) diff --git a/backend/moonstream/routes/subscriptions.py b/backend/moonstream/routes/subscriptions.py index 3c2959ac..c5ae9785 100644 --- a/backend/moonstream/routes/subscriptions.py +++ b/backend/moonstream/routes/subscriptions.py @@ -12,10 +12,11 @@ from fastapi.middleware.cors import CORSMiddleware from .. import data from ..middleware import BroodAuthMiddleware from ..settings import ( - MOONSTREAM_APPLICATION_ID, DOCS_TARGET_PATH, - ORIGINS, DOCS_PATHS, + MOONSTREAM_APPLICATION_ID, + MOONSTREAM_SUBSCRIPTIONS_USER_TOKEN, + ORIGINS, bugout_client as bc, ) from ..version import MOONSTREAM_VERSION @@ -192,7 +193,9 @@ async def get_available_subscriptions_type( token = request.state.token params = {"type": "subscription_type"} try: - resources: BugoutResources = bc.list_resources(token=token, params=params) + resources: BugoutResources = bc.list_resources( + token=MOONSTREAM_SUBSCRIPTIONS_USER_TOKEN, params=params + ) except BugoutResponseException as e: raise HTTPException(status_code=e.status_code, detail=e.detail) except Exception as e: diff --git a/backend/moonstream/settings.py b/backend/moonstream/settings.py index c524be5a..004f4131 100644 --- a/backend/moonstream/settings.py +++ b/backend/moonstream/settings.py @@ -13,6 +13,14 @@ MOONSTREAM_DATA_JOURNAL_ID = os.environ.get("MOONSTREAM_DATA_JOURNAL_ID") if MOONSTREAM_DATA_JOURNAL_ID is None: raise ValueError("MOONSTREAM_DATA_JOURNAL_ID environment variable must be set") +MOONSTREAM_SUBSCRIPTIONS_USER_TOKEN = os.environ.get( + "MOONSTREAM_SUBSCRIPTIONS_USER_TOKEN" +) +if MOONSTREAM_SUBSCRIPTIONS_USER_TOKEN is None: + raise ValueError( + "MOONSTREAM_SUBSCRIPTIONS_USER_TOKEN environment variable must be set" + ) + # Origin RAW_ORIGINS = os.environ.get("MOONSTREAM_CORS_ALLOWED_ORIGINS") if RAW_ORIGINS is None: