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', )
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': [{}] } })
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')
def test_array_validation(self): Schema( {"fruit": { 'type': Array(basestring), "validates": length(1, 2) }})
def test_invalid_array_with_value_not_type(self): self.assert_spec_invalid({"items": {"type": Array(1)}}, 'items')
def test_array_of_strings_with_invalid_default_content(self): self.assert_spec_invalid( {"nums": { 'type': Array(int), "default": ['not an int'] }}, 'nums')
def test_array_of_strings_with_invalid_default(self): self.assert_spec_invalid( {"fruit": { 'type': Array(basestring), "default": 'not a list' }}, 'fruit')
def test_array_of_ints(self): Schema({"numbers": {"type": Array(int)}})
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,
def get_website_schema(document): if isinstance(document, list): return Array(website_schema) elif isinstance(document, dict): return website_schema return basestring
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()])
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': {
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),
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()])