Source code for brewtils.schema_parser

# -*- coding: utf-8 -*-

import logging
import warnings

import six

from brewtils.models import (
    System, Instance, Command, Parameter, Request, PatchOperation, Choices,
    LoggingConfig, Event, Queue, Principal, Role, RefreshToken, Job,
    RequestTemplate, DateTrigger, CronTrigger, IntervalTrigger
)
from brewtils.schemas import (
    SystemSchema, InstanceSchema, CommandSchema, ParameterSchema, RequestSchema,
    PatchSchema, LoggingConfigSchema, EventSchema, QueueSchema, PrincipalSchema,
    RoleSchema, RefreshTokenSchema, JobSchema
)


[docs]class SchemaParser(object): """Serialize and deserialize Brewtils models""" _models = { 'SystemSchema': System, 'InstanceSchema': Instance, 'CommandSchema': Command, 'ParameterSchema': Parameter, 'RequestTemplateSchema': RequestTemplate, 'RequestSchema': Request, 'PatchSchema': PatchOperation, 'ChoicesSchema': Choices, 'LoggingConfigSchema': LoggingConfig, 'EventSchema': Event, 'QueueSchema': Queue, 'PrincipalSchema': Principal, 'RoleSchema': Role, 'RefreshTokenSchema': RefreshToken, 'JobSchema': Job, 'DateTriggerSchema': DateTrigger, 'IntervalTriggerSchema': IntervalTrigger, 'CronTriggerSchema': CronTrigger, } logger = logging.getLogger(__name__) # Deserialization methods
[docs] @classmethod def parse_system(cls, system, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a system model object :param system: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: A System object """ return cls._do_parse(system, SystemSchema(**kwargs), from_string=from_string)
[docs] @classmethod def parse_instance(cls, instance, from_string=False, **kwargs): """Convert raw JSON string or dictionary to an instance model object :param instance: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: An Instance object """ return cls._do_parse(instance, InstanceSchema(**kwargs), from_string=from_string)
[docs] @classmethod def parse_command(cls, command, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a command model object :param command: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: A Command object """ return cls._do_parse(command, CommandSchema(**kwargs), from_string=from_string)
[docs] @classmethod def parse_parameter(cls, parameter, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a parameter model object :param parameter: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: An Parameter object """ return cls._do_parse(parameter, ParameterSchema(**kwargs), from_string=from_string)
[docs] @classmethod def parse_request(cls, request, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a request model object :param request: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: A Request object """ return cls._do_parse(request, RequestSchema(**kwargs), from_string=from_string)
[docs] @classmethod def parse_patch(cls, patch, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a patch model object Note: for our patches, many is _always_ set to True. We will always return a list from this method. :param patch: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: A PatchOperation object """ if not kwargs.pop('many', True): cls.logger.warning("A patch object should always be wrapped as a list of objects. " "Thus, parsing will always return a list. You specified many as " "False, this is being ignored and a list " "will be returned anyway.") return cls._do_parse(patch, PatchSchema(many=True, **kwargs), from_string=from_string)
[docs] @classmethod def parse_logging_config(cls, logging_config, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a logging config model object Note: for our logging_config, many is _always_ set to False. We will always return a dict from this method. :param logging_config: The raw input :param from_string: True if 'input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: A LoggingConfig object """ if kwargs.pop('many', False): cls.logger.warning("A logging config object should never be wrapped as a list of " "objects. Thus, parsing will always return a dict. You specified " "many as True, this is being ignored and a dict will be returned " "anyway.") return cls._do_parse(logging_config, LoggingConfigSchema(many=False, **kwargs), from_string=from_string)
[docs] @classmethod def parse_event(cls, event, from_string=False, **kwargs): """Convert raw JSON string or dictionary to an event model object :param event: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: An Event object """ return cls._do_parse(event, EventSchema(**kwargs), from_string=from_string)
[docs] @classmethod def parse_queue(cls, queue, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a queue model object :param queue: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: A Queue object """ return cls._do_parse(queue, QueueSchema(**kwargs), from_string=from_string)
[docs] @classmethod def parse_principal(cls, principal, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a principal model object :param principal: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: A Principal object """ return cls._do_parse(principal, PrincipalSchema(**kwargs), from_string=from_string)
[docs] @classmethod def parse_role(cls, role, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a role model object :param role: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: A Role object """ return cls._do_parse(role, RoleSchema(**kwargs), from_string=from_string)
[docs] @classmethod def parse_refresh_token(cls, refresh_token, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a refresh token object :param refresh_token: The raw input :param from_string: True if input is a JSON string, False if a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: A RefreshToken object """ return cls._do_parse(refresh_token, RefreshTokenSchema(**kwargs), from_string=from_string)
[docs] @classmethod def parse_job(cls, job, from_string=False, **kwargs): """Convert raw JSON string or dictionary to a job model object Args: job: Raw input from_string: True if input is a JSON string, False if a dictionary **kwargs: Additional parameters to be passed to the Schema (e.g. many=True) Returns: A Job object. """ return cls._do_parse(job, JobSchema(**kwargs), from_string=from_string)
@classmethod def _do_parse(cls, data, schema, from_string=False): if from_string and not isinstance(data, six.string_types): raise TypeError("When from_string=True data must be a string-type") schema.context['models'] = cls._models return schema.loads(data).data if from_string else schema.load(data).data # Serialization methods
[docs] @classmethod def serialize_system(cls, system, to_string=True, include_commands=True, **kwargs): """Convert a system model into serialized form :param system: The system object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param include_commands: True if the system's command list should be included :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation of system """ if not include_commands: if 'exclude' in kwargs: kwargs['exclude'] += ('commands', ) else: kwargs['exclude'] = ('commands', ) return cls._do_serialize(SystemSchema(**kwargs), system, to_string)
[docs] @classmethod def serialize_instance(cls, instance, to_string=True, **kwargs): """Convert an instance model into serialized form :param instance: The instance object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation of instance """ return cls._do_serialize(InstanceSchema(**kwargs), instance, to_string)
[docs] @classmethod def serialize_command(cls, command, to_string=True, **kwargs): """Convert a command model into serialized form :param command: The command object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation of command """ return cls._do_serialize(CommandSchema(**kwargs), command, to_string)
[docs] @classmethod def serialize_parameter(cls, parameter, to_string=True, **kwargs): """Convert a parameter model into serialized form :param parameter: The parameter object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation of parameter """ return cls._do_serialize(ParameterSchema(**kwargs), parameter, to_string)
[docs] @classmethod def serialize_request(cls, request, to_string=True, **kwargs): """Convert a request model into serialized form :param request: The request object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation of request """ return cls._do_serialize(RequestSchema(**kwargs), request, to_string)
[docs] @classmethod def serialize_patch(cls, patch, to_string=True, **kwargs): """Convert a patch model into serialized form :param patch: The patch object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation of patch """ return cls._do_serialize(PatchSchema(**kwargs), patch, to_string)
[docs] @classmethod def serialize_logging_config(cls, logging_config, to_string=True, **kwargs): """Convert a logging config model into serialize form :param logging_config: The logging config object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation of logging config """ return cls._do_serialize(LoggingConfigSchema(**kwargs), logging_config, to_string)
[docs] @classmethod def serialize_event(cls, event, to_string=True, **kwargs): """Convert a logging config model into serialized form :param event: The event object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation of event """ return cls._do_serialize(EventSchema(**kwargs), event, to_string)
[docs] @classmethod def serialize_queue(cls, queue, to_string=True, **kwargs): """Convert a queue model into serialized form :param queue: The queue object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation of queue """ return cls._do_serialize(QueueSchema(**kwargs), queue, to_string)
[docs] @classmethod def serialize_principal(cls, principal, to_string=True, **kwargs): """Convert a principal model into serialized form :param principal: The principal object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation """ return cls._do_serialize(PrincipalSchema(**kwargs), principal, to_string)
[docs] @classmethod def serialize_role(cls, role, to_string=True, **kwargs): """Convert a role model into serialized form :param role: The role object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation """ return cls._do_serialize(RoleSchema(**kwargs), role, to_string)
[docs] @classmethod def serialize_refresh_token(cls, refresh_token, to_string=True, **kwargs): """Convert a role model into serialized form :param refresh_token: The token object(s) to be serialized :param to_string: True to generate a JSON-formatted string, False to generate a dictionary :param kwargs: Additional parameters to be passed to the Schema (e.g. many=True) :return: Serialized representation """ return cls._do_serialize(RefreshTokenSchema(**kwargs), refresh_token, to_string)
[docs] @classmethod def serialize_job(cls, job, to_string=True, **kwargs): """Convert a job model into serialized form. Args: job: The job object(s) to be serialized. to_string: True to generate a JSON-formatted string, False to generate a dictionary. **kwargs: Additional parameters to be passed to the shcema (e.g. many=True) Returns: Serialize representation of job. """ return cls._do_serialize(JobSchema(**kwargs), job, to_string)
@staticmethod def _do_serialize(schema, data, to_string): return schema.dumps(data).data if to_string else schema.dump(data).data
[docs]class BrewmasterSchemaParser(SchemaParser): def __init__(self): warnings.warn("Reference made to 'BrewmasterSchemaParser'. This name will be removed in " "version 3.0, please use 'SchemaParser' instead.", DeprecationWarning, stacklevel=2) super(BrewmasterSchemaParser, self).__init__()