Exemplo n.º 1
0
class BaseSourceSchema(BaseSchema):
    uuid = fields.UUID(dump_only=True)
    tenant_uuid = fields.UUID(dump_only=True)
    name = fields.String(validate=Length(min=1, max=512), required=True)
    first_matched_columns = fields.List(
        fields.String(validate=Length(min=1, max=128)), missing=[])
    searched_columns = fields.List(
        fields.String(validate=Length(min=1, max=128)), missing=[])
    format_columns = fields.Dict(validate=validate_string_dict, missing={})
Exemplo n.º 2
0
class ListRequestSchema(Schema):

    recurse = fields.Boolean(missing=False)
    user_uuid = fields.List(fields.UUID(), missing=[], attribute='uuids')

    @pre_load
    def convert_user_uuid_to_list(self, data, **kwargs):
        result = data.to_dict()
        if data.get('user_uuid'):
            result['user_uuid'] = data['user_uuid'].split(',')
        return result
Exemplo n.º 3
0
class MarketListResultSchema(Schema):

    homepage = fields.String()
    color = fields.String()
    display_name = fields.String()
    name = fields.String(validate=Regexp(_PLUGIN_NAME_REGEXP), required=True)
    namespace = fields.String(validate=Regexp(_PLUGIN_NAMESPACE_REGEXP),
                              required=True)
    tags = fields.List(fields.String)
    author = fields.String()
    versions = fields.Nested(MarketVersionResultSchema,
                             many=True,
                             required=True,
                             unknown=EXCLUDE)
    screenshots = fields.List(fields.String)
    icon = fields.String()
    description = fields.String()
    short_description = fields.String()
    license = fields.String()
    installed_version = fields.String(missing=None)
Exemplo n.º 4
0
class CDRListingBase(Schema):
    from_ = fields.DateTime(data_key='from', attribute='start', missing=None)
    until = fields.DateTime(attribute='end', missing=None)
    search = fields.String(missing=None)
    call_direction = fields.String(
        validate=OneOf(['internal', 'inbound', 'outbound']), missing=None
    )
    number = fields.String(validate=Regexp(NUMBER_REGEX), missing=None)
    tags = fields.List(fields.String(), missing=[])
    user_uuid = fields.List(fields.String(), missing=[], attribute='user_uuids')
    from_id = fields.Integer(validate=Range(min=0), attribute='start_id', missing=None)
    recurse = fields.Boolean(missing=False)

    @pre_load
    def convert_tags_and_user_uuid_to_list(self, data, **kwargs):
        result = data.to_dict()
        if data.get('tags'):
            result['tags'] = data['tags'].split(',')
        if data.get('user_uuid'):
            result['user_uuid'] = data['user_uuid'].split(',')
        return result
Exemplo n.º 5
0
class UserSubscriptionSchema(Schema):
    uuid = fields.UUID(dump_only=True)
    name = fields.String(validate=Length(max=128), required=True)
    service = fields.String(validate=Length(max=128),
                            allow_none=False,
                            required=True)
    events = fields.List(fields.String(validate=Length(max=128),
                                       allow_none=False),
                         allow_none=False,
                         required=True)
    config = ConfigField(allow_none=False, required=True)
    metadata_ = fields.Dict(load_from='metadata')
Exemplo n.º 6
0
class CDRSchema(Schema):
    id = fields.Integer()
    tenant_uuid = fields.UUID()
    start = fields.DateTime(attribute='date')
    end = fields.DateTime(attribute='date_end')
    answered = fields.Boolean(attribute='marshmallow_answered')
    answer = fields.DateTime(attribute='date_answer')
    duration = fields.TimeDelta(default=None, attribute='marshmallow_duration')
    call_direction = fields.String(attribute='direction')
    destination_extension = fields.String(attribute='destination_exten')
    destination_internal_context = fields.String()
    destination_internal_extension = fields.String(
        attribute='destination_internal_exten'
    )
    destination_line_id = fields.Integer()
    destination_name = fields.String()
    destination_user_uuid = fields.UUID()
    requested_name = fields.String()
    requested_context = fields.String()
    requested_extension = fields.String(attribute='requested_exten')
    requested_internal_context = fields.String()
    requested_internal_extension = fields.String(attribute='requested_internal_exten')
    source_extension = fields.String(attribute='source_exten')
    source_internal_context = fields.String()
    source_internal_name = fields.String()
    source_internal_extension = fields.String(attribute='source_internal_exten')
    source_line_id = fields.Integer()
    source_name = fields.String()
    source_user_uuid = fields.UUID()
    tags = fields.List(fields.String(), attribute='marshmallow_tags')
    recordings = fields.Nested('RecordingSchema', many=True, default=[])

    @pre_dump
    def _compute_fields(self, data, **kwargs):
        data.marshmallow_answered = True if data.date_answer else False
        if data.date_answer and data.date_end:
            data.marshmallow_duration = data.date_end - data.date_answer
        return data

    @post_dump
    def fix_negative_duration(self, data, **kwargs):
        if data['duration'] is not None:
            data['duration'] = max(data['duration'], 0)
        return data

    @pre_dump
    def _populate_tags_field(self, data, **kwargs):
        data.marshmallow_tags = set()
        for participant in data.participants:
            data.marshmallow_tags.update(participant.tags)
        return data
Exemplo n.º 7
0
class SubscriptionSchema(Schema):
    uuid = fields.UUID(dump_only=True)
    name = fields.String(validate=Length(max=128), required=True)
    service = fields.String(validate=Length(max=128),
                            allow_none=False,
                            required=True)
    events = fields.List(fields.String(validate=Length(max=128),
                                       allow_none=False),
                         allow_none=False,
                         required=True)
    events_user_uuid = fields.String(validate=Length(equal=36), missing=None)
    events_wazo_uuid = fields.String(validate=Length(equal=36), missing=None)
    config = ConfigField(allow_none=False, required=True)
    owner_user_uuid = fields.String(validate=Length(equal=36), missing=None)
    metadata = fields.Dict()
Exemplo n.º 8
0
class UserSubscriptionSchema(Schema):
    class Meta:
        unknown = EXCLUDE

    uuid = fields.UUID(dump_only=True)
    name = fields.String(validate=Length(max=128), required=True)
    service = fields.String(validate=Length(max=128),
                            allow_none=False,
                            required=True)
    events = fields.List(
        fields.String(validate=Length(max=128), allow_none=False),
        allow_none=False,
        required=True,
    )
    config = ConfigField(allow_none=False, required=True)
    metadata_ = fields.Dict(data_key='metadata')
Exemplo n.º 9
0
class TenantFullSchema(BaseSchema):

    uuid = fields.UUID(missing=None)
    parent_uuid = fields.UUID(dump_only=True)
    name = fields.String(
        validate=validate.Length(min=1, max=128), default=None, missing=None
    )
    slug = fields.String(
        validate=[validate.Length(min=1, max=10), validate.Regexp(r'^[a-zA-Z0-9_]+$')],
        missing=None,
    )
    contact_uuid = fields.UUID(data_key='contact', missing=None, default=None)
    phone = fields.String(
        validate=validate.Length(min=1, max=32), default=None, missing=None
    )
    domain_names = fields.List(
        fields.String(
            validate=validate.Regexp(
                r'^(?=.{1,253}\.?$)(?:(?!(-|_)|[^.]+_)[A-Za-z0-9-_]{1,}(?<!-)(?:\.|$)){2,63}$'
            ),
        ),
        missing=[],
        default=[],
        allow_none=False,
    )
    address = fields.Nested(
        TenantAddress,
        missing=empty_tenant_address,
        default=empty_tenant_address,
        allow_none=False,
    )

    @post_dump
    def add_empty_address(self, data, **kwargs):
        data['address'] = data['address'] or empty_tenant_address
        return data

    @post_load
    def ensure_domain_names_are_unique(self, data, **kwargs):
        data['domain_names'] = sorted(list(set(data['domain_names'])))
        return data
Exemplo n.º 10
0
class PolicyFullSchema(BaseSchema):

    uuid = fields.String(dump_only=True)
    tenant_uuid = fields.String(dump_only=True,
                                attribute='tenant_uuid_exposed')
    name = fields.String(validate=validate.Length(min=1, max=80),
                         required=True)
    slug = fields.String(
        validate=[validate.Length(min=1, max=80),
                  validate.Regexp(SLUG_REGEX)],
        missing=None,
    )
    description = fields.String(allow_none=True, missing=None)
    acl = fields.List(fields.String(), missing=[], attribute='acl')
    read_only = fields.Boolean(dump_only=True)
    shared = fields.Boolean(missing=False)

    @post_dump(pass_original=True)
    def set_shared_exposed_only_for_dump(self, data, original, **kwargs):
        data['shared'] = original.shared_exposed
        return data
Exemplo n.º 11
0
class QueueStatisticsQoSRequestSchema(_StatisticsListRequestSchema):
    interval = fields.String(validate=OneOf(['hour', 'day', 'month']))
    qos_thresholds = fields.List(fields.Integer(validate=Range(min=0)),
                                 missing=[])

    @pre_load
    def convert_qos_thresholds_to_list(self, data, **kwargs):
        result = data.copy()
        if not isinstance(result, dict):
            result = result.to_dict()
        if data.get('qos_thresholds'):
            result['qos_thresholds'] = list(
                set(data['qos_thresholds'].split(',')))
        return result

    @post_load
    def sort_qos_thresholds(self, data, **kwargs):
        result = data.copy()
        if data.get('qos_thresholds'):
            result['qos_thresholds'] = sorted(data['qos_thresholds'])
        return result
Exemplo n.º 12
0
class SubscriptionSchema(Schema):
    class Meta:
        unknown = EXCLUDE

    uuid = fields.UUID(dump_only=True)
    name = fields.String(validate=Length(max=128), required=True)
    service = fields.String(validate=Length(max=128),
                            allow_none=False,
                            required=True)
    events = fields.List(
        fields.String(validate=Length(max=128), allow_none=False),
        allow_none=False,
        required=True,
    )
    events_user_uuid = fields.String(validate=Length(equal=36), missing=None)
    events_wazo_uuid = fields.String(validate=Length(equal=36), missing=None)
    config = ConfigField(allow_none=False, required=True)
    owner_user_uuid = fields.String(validate=Length(equal=36), missing=None)
    owner_tenant_uuid = fields.UUID(dump_only=True)
    # TODO(sileht): We should also add an events_tenant_uuid to filter
    # event on tenant_uuid. Currently if I have the
    # "webhookd.subscriptions.create" I can receive event of all tenants...
    metadata_ = fields.Dict(data_key="metadata")
Exemplo n.º 13
0
    class Auth1SafeFields(BaseSchema):

        scope = fields.List(fields.String)
Exemplo n.º 14
0
class MicrosoftSchema(schemas.BaseSchema):

    scope = fields.List(fields.String(validate=Length(min=1, max=512)))
    access_token = fields.String(dump_only=True)
    token_expiration = fields.Integer(dump_only=True)
Exemplo n.º 15
0
class PolicySchema(BaseSchema):

    name = fields.String(validate=validate.Length(min=1, max=80),
                         required=True)
    description = fields.String(allow_none=True, missing=None)
    acl_templates = fields.List(fields.String(), missing=[])
Exemplo n.º 16
0
class TokenScopesRequestSchema(BaseSchema):
    scopes = fields.List(fields.String())
    tenant_uuid = fields.String(missing=None)
Exemplo n.º 17
0
class RecordingMediaDeleteRequestSchema(Schema):
    cdr_ids = fields.List(fields.Integer(), validate=Length(min=1), required=True)
Exemplo n.º 18
0
class RecordingMediaExportBodySchema(Schema):
    cdr_ids = fields.List(fields.Integer(), missing=None)
Exemplo n.º 19
0
class _StatisticsListRequestSchema(Schema):
    from_ = fields.DateTime(data_key='from', missing=None)
    until = fields.DateTime(missing=None)
    day_start_time = fields.String(attribute='start_time',
                                   validate=Regexp(HOUR_REGEX))
    day_end_time = fields.String(attribute='end_time',
                                 validate=Regexp(HOUR_REGEX))
    week_days = fields.List(
        fields.Integer(),
        missing=[1, 2, 3, 4, 5, 6, 7],
        validate=ContainsOnly([1, 2, 3, 4, 5, 6, 7]),
    )
    timezone = fields.String(validate=OneOf(pytz.all_timezones), missing='UTC')

    def _normalize_datetime(self, dt, timezone):
        if not dt.tzinfo:
            return timezone.normalize(timezone.localize(dt))
        else:
            utc_dt = pytz.utc.normalize(dt)
            return timezone.normalize(utc_dt)

    @pre_load
    def convert_week_days_to_list(self, data, **kwargs):
        result = data.copy()
        if not isinstance(data, dict):
            result = data.to_dict()
        if data.get('week_days'):
            result['week_days'] = list(set(data['week_days'].split(',')))
        return result

    @post_load
    def convert_time_to_hour(self, data, **kwargs):
        if data.get('start_time'):
            start_time = time.fromisoformat(data['start_time'])
            data['start_time'] = start_time.hour
        if data.get('end_time'):
            end_time = time.fromisoformat(data['end_time'])
            data['end_time'] = end_time.hour
        return data

    @post_load
    def default_timezone_on_datetime(self, data, **kwargs):
        timezone = pytz.timezone(data.get('timezone'))
        from_ = data.get('from_')
        until = data.get('until')
        if from_:
            data['from_'] = self._normalize_datetime(from_, timezone)
        if until:
            data['until'] = self._normalize_datetime(until, timezone)
        return data

    @validates_schema
    def validate_dates(self, data, **kwargs):
        from_ = data.get('from_', None)
        until = data.get('until', None)
        timezone = pytz.timezone(data.get('timezone'))
        if from_:
            from_ = self._normalize_datetime(from_, timezone)
        if until:
            until = self._normalize_datetime(until, timezone)
        if from_ and until and until <= from_:
            raise ValidationError({'until': 'Field must be greater than from'})

    @validates_schema
    def validate_start_end_times(self, data, **kwargs):
        if data.get('start_time') and data.get('end_time'):
            if data['start_time'] >= data['end_time']:
                raise ValidationError({
                    'day_start_time':
                    'Field must be lower than day_end_time'
                })
Exemplo n.º 20
0
class QueueStatisticsQoSSchema(_StatisticsPeriodSchema):
    queue_id = fields.Integer(default=None)
    queue_name = fields.String(default=None)
    quality_of_service = fields.List(fields.Nested(_QoSSchema))