Example #1
0
 def test_array_of_strings_with_default(self):
     Schema({
         "fruit": {
             'type': Array(basestring),
             "default": ['apple', 'orange']
         }
     })
    def create_transfer(self, params):

        beneficiary_schema = Schema({
            'bank_account_number': {'type': basestring, 'required': True},
            'amount': {'type': numbers.Number, 'required': True},
            'currency': {'type': basestring, 'required': True},
        }, strict=False)

        param_schema = Schema({
            'send_amount': {'type': numbers.Number, 'required': True},
            'send_currency': {'type': basestring, 'required': True},
            'beneficiaries': {'type': Array(beneficiary_schema), 'required': True},
            'purpose': {'type': basestring, 'required': True},
            'memo': {'type': basestring, 'required': False},
        }, strict=False)

        param_schema.validate(params)  # 检测不通过直接抛异常
        param_schema.apply_defaults(params)  # attach 默认值

        # 校验数据
        return KeyVariables(
            params=json.dumps(params),
            url='transfer',
            method='POST',
        )
    def update_invoice(self, params):
        address_schema = Schema({
            'line1': {'type': basestring, 'required': True},
            'city': {'type': basestring, 'required': False},
            'state': {'type': basestring, 'required': False},
            'postal_code': {'type': basestring, 'required': False},
            'country': {'type': basestring, 'required': False},
        })

        recipient_schema = Schema({
            'dob': {'type': basestring, 'required': True},
            'entity_type': {'type': basestring, 'required': True, 'validates': one_of('INDIVIDUAL', 'COMPANY')},
            'first_name': {'type': basestring, 'required': True},
            'last_name': {'type': basestring, 'required': True},
            'document_type': {'type': basestring, 'required': True},
            'document_number': {'type': basestring, 'required': True},
            'email': {'type': basestring, 'required': False},
            'mobile': {'type': basestring, 'required': False},
            'address': {'type': address_schema, 'required': False},
            'bank_account_number': {'type': basestring, 'required': False},
            'bank_name': {'type': basestring, 'required': False},
        }, strict=False)

        unit_price_schema = Schema({
            'currency': {'type': basestring, 'required': True},
            'amount': {'type': numbers.Number, 'required': True},
        })

        products_schema = Schema({
            'name': {'type': basestring, 'required': True},
            'quantity': {'type': int, 'required': True},
            'unit_price': {'type': unit_price_schema, 'required': True}
        })

        param_schema = Schema({
            'recipient': {'type': recipient_schema, 'required': True},
            'products': {'type': Array(products_schema), 'required': True},
            'memo': {'type': basestring, 'required': False},
            'out_trade_id': {'type': basestring, 'required': False},
            'currency': {'type': basestring, 'required': True},
            'amount': {'type': numbers.Number, 'required': True},
            'ex_invoice_no': {'type': basestring, 'required': True},
        }, strict=False)

        param_schema.validate(params)  # 检测不通过直接抛异常
        param_schema.apply_defaults(params)  # attach 默认值

        # 校验数据
        return KeyVariables(
            params=json.dumps(params),
            url='invoice',
            method='PUT',
        )
Example #4
0
 def test_default_array_schema_value_correct_2(self):
     Schema({
         'wheel': {
             'type':
             Array(
                 Schema({
                     'size': {
                         'type': int,
                         'default': 32
                     },
                     'brand': {
                         'type': basestring,
                         'default': 'firestone'
                     }
                 })),
             'default': [{}]
         }
     })
Example #5
0
 def test_default_array_schema_value_of_incorrect_type_2(self):
     self.assert_spec_invalid(
         {
             'wheel': {
                 'type':
                 Array(
                     Schema({
                         'size': {
                             'type': int,
                             'default': 32
                         },
                         'brand': {
                             'type': basestring,
                             'default': 'firestone'
                         }
                     })),
                 'default': {}
             }
         }, 'wheel')
Example #6
0
 def test_array_validation(self):
     Schema(
         {"fruit": {
             'type': Array(basestring),
             "validates": length(1, 2)
         }})
Example #7
0
 def test_invalid_array_with_value_not_type(self):
     self.assert_spec_invalid({"items": {"type": Array(1)}}, 'items')
Example #8
0
 def test_array_of_strings_with_invalid_default_content(self):
     self.assert_spec_invalid(
         {"nums": {
             'type': Array(int),
             "default": ['not an int']
         }}, 'nums')
Example #9
0
 def test_array_of_strings_with_invalid_default(self):
     self.assert_spec_invalid(
         {"fruit": {
             'type': Array(basestring),
             "default": 'not a list'
         }}, 'fruit')
Example #10
0
 def test_array_of_ints(self):
     Schema({"numbers": {"type": Array(int)}})
Example #11
0
from schemer import Schema, Array

from .test_schema import test_schema
from .asset_schema import asset_schema

depends_schema = Schema({'libs': {'type': Array(basestring), 'default': list}})

lib_schema = Schema({
    'repo': {
        'type': basestring,
        'required': True
    },
    'mount': {
        'type': basestring,
        'default': '',
        'required': True
    },
    'install': {
        'type': Array(basestring),
        'default': list
    },
    'depends': {
        'type': depends_schema,
        'default': dict
    },
    'assets': {
        'type': Array(asset_schema),
        'default': list
    },
    'test': {
        'type': test_schema,
Example #12
0
def get_website_schema(document):
    if isinstance(document, list):
        return Array(website_schema)
    elif isinstance(document, dict):
        return website_schema
    return basestring
Example #13
0
        if 'modification_date'in value and not value['modification_date'] <= value['final_date']:
            return 'modification_date must be less than or equal to final_date'
    return validate

blog_post_schema = Schema({
    "author":               {"type": get_author_schema, "required": True},
    "content":              {"type": Schema({
        "title":            {"type": basestring, "required": True},
        "text":             {"type": basestring, "required": True},
        "page_views":       {"type": int, "default": 1}
    }), "required": True},
    "meta":                 {"type": Schema({
        "last_edited":      {"type": datetime}
    }), "required": True, "nullable": True},
    "category":             {"type": basestring, "validates": one_of("cooking", "politics")},
    "comments":             {"type": Array(comment_schema), "required": True},
    "likes":                {"type": int, "default": 0},
    "creation_date":        {"type": datetime, "default": stubnow},
    "tags":                 {"type": Array(basestring), "default": ["blog"], "validates": length(1)},
    "misc":                 {"type": Mixed(basestring, int)},
    "linked_id":            {"type": Mixed(int, basestring)},
    "external_code":        {"type": basestring, "nullable": False},
    "website":              {"type": get_website_schema},
    "editors":              {"type": Array(lambda document: name_schema if isinstance(document, dict) else basestring)},
    "latest_comment":       {"type": comment_schema, "default": {}},
    "most_popular_comments":{"type": Array(comment_schema), "default": [{}, {}, {}]},
    "modification_date":    {"type": datetime},
    "final_date":           {"type": datetime}
}, validates=[mod_date_gt_creation_date(), mod_date_lte_final_date()])

Example #14
0
def no_all_suite_validator():
    def validator(document):
        for suite in document.get('suites', []):
            if suite['name'].upper() == 'ALL':
                return 'all is a reserved suite name. It cannot be used in a spec.'

    return validator


test_suite_schema = Schema({
    'name': {
        'type': basestring,
        'required': True
    },
    'command': {
        'type': Array(basestring),
        'required': True
    },
    'default_args': {
        'type': basestring,
        'default': ''
    },
    'description': {
        'type': basestring,
        'default': ''
    },
    'compose': {
        'type': dict,
        'default': dict
    },
    'services': {
Example #15
0
def repo_mount_validator():
    """If either repo or mount are provided, they must both be provided."""
    def validator(document):
        if 'repo' in document and 'mount' in document:
            return
        elif 'repo' not in document and 'mount' not in document:
            return
        return 'If either `repo` or `mount` are provided, they must both be provided.'

    return validator


app_depends_schema = Schema({
    'services': {
        'type': Array(basestring),
        'default': list
    },
    'apps': {
        'type': Array(basestring),
        'default': list
    },
    'libs': {
        'type': Array(basestring),
        'default': list
    }
})

conditional_links_schema = Schema({
    'services': {
        'type': Array(basestring),
Example #16
0
from schemer import Schema, Array


def app_or_service_required_validator():
    def validator(document):
        if 'apps' not in document and 'services' not in document:
            return 'Bundles must specify `apps` or `services`'

    return validator


bundle_schema = Schema(
    {
        'description': {
            'type': basestring,
            'default': ''
        },
        'apps': {
            'type': Array(basestring),
            'default': list
        },
        'services': {
            'type': Array(basestring),
            'default': list
        },
    },
    validates=[app_or_service_required_validator()])