import json import click from boltons.typeutils import classproperty from ereuse_devicehub.db import db from ereuse_devicehub.resources.agent import models, schemas from ereuse_devicehub.teal.resource import Converters, Resource class AgentDef(Resource): SCHEMA = schemas.Agent VIEW = None AUTH = True ID_CONVERTER = Converters.uuid class OrganizationDef(AgentDef): SCHEMA = schemas.Organization VIEW = None def __init__( self, app, import_name=__name__.split('.')[0], static_folder=None, static_url_path=None, template_folder=None, url_prefix=None, subdomain=None, url_defaults=None, root_path=None, ): cli_commands = ((self.create_org, 'add'),) super().__init__( app, import_name, static_folder, static_url_path, template_folder, url_prefix, subdomain, url_defaults, root_path, cli_commands, ) @click.argument('name') @click.option('--tax_id', '-t') @click.option('--country', '-c') def create_org(self, name: str, tax_id: str = None, country: str = None) -> dict: """Creates an organization.""" org = models.Organization( **self.schema.load({'name': name, 'taxId': tax_id, 'country': country}) ) db.session.add(org) db.session.commit() o = self.schema.dump(org) print(json.dumps(o, indent=2)) return o @classproperty def cli_name(cls): return 'org' class Membership(Resource): SCHEMA = schemas.Membership VIEW = None ID_CONVERTER = Converters.string class IndividualDef(AgentDef): SCHEMA = schemas.Individual VIEW = None class PersonDef(IndividualDef): SCHEMA = schemas.Person VIEW = None class SystemDef(IndividualDef): SCHEMA = schemas.System VIEW = None