86 lines
1.9 KiB
Python
86 lines
1.9 KiB
Python
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
|