| import os, sys
DIR = os.path.dirname(os.path.abspath(__file__))
def import_module(name, path):
    import imp
    try:
        mod_fp, mod_path, mod_desc  = imp.find_module(name, [path])
        mod = getattr( imp.load_module(name, mod_fp, mod_path, mod_desc), name )
    except ImportError as exc:
        mod = None
        sys.stderr.write("Error: failed to import module ({})".format(exc))
    finally:
        if mod_fp: mod_fp.close()
    return mod
# import the Formal.py (as a) module, probably you will want to place this in another dir/package
Formal = import_module('Formal', os.path.join(DIR, '../../src/python/'))
if not Formal:
    print ('Could not load the Formal Module')
    sys.exit(1)
else:
    pass
def test():
    import json
    formal = Formal().option('WILDCARD', '*').option('SEPARATOR', '.').option('break_on_first_error', False)
    formdata = {
        'foo' : '',
        'moo' : [
                {'choo' : 1},
                {'choo' : 2},
                {'choo' : 3},
        ],
        'soo' : [
                {
                    'boo' : 1,
                    'xoo' : 'a'
                },
                {
                    'boo' : 2,
                    'xoo' : 'b'
                },
                {
                    'boo' : 3,
                    'xoo' : 'c'
                },
        ],
        'koo' : [
            '',
            '',
            '',
        ],
        'num' : [
            '0.1',
            '1.2',
        ],
        'date' : [
            '2012-11-02',
            '20-11-02',
        ]
    }
    data = formal.option('defaults', {
            'foo' : 'bar',
            'moo.*.foo' : 'bar',
            'koo.*' : 'bar'
        }).option('typecasters', {
            'koo.*.foo' : Formal.typecast('str'),
            'num.*' : Formal.typecast('composite', [Formal.typecast('float'), Formal.typecast('clamp', [0.0, 1.0])
        ])}).option('validators', {
            'foo.*' : Formal.validate('required'),
            'foo.*.foo' : Formal.validate('required'),
            'moo.*.foo' : Formal.validate('required'),
            'koo.*.foo' : Formal.validate('optional', Formal.validate('required')),
            'date.*' : Formal.validate('match', Formal.datetime('Y-m-d'), '"{key}" should match {args} !'),
            'date.0' : Formal.validate('eq', Formal.field('date.1'))
        }).process(formdata)
    err = formal.getErrors()
    print(json.dumps(formdata, indent=4))
    print(json.dumps(data, indent=4))
    print("\n".join(map(str, err)))
    print(json.dumps(formal.get('soo.1.boo', 'default', formdata), indent=4))
    print(json.dumps(formal.get('soo.*.boo', 'default', formdata), indent=4))
    print(json.dumps(formal.get('soo.*.*', 'default', formdata), indent=4))
    print(json.dumps(formal.get('soo.1.koo', 'default', formdata), indent=4))
    print(json.dumps(formal.get('soo.*.koo', 'default', formdata), indent=4))
    print(json.dumps(formal.get('soo.koo.1', 'default', formdata), indent=4))
    print(json.dumps(formal.get('soo.koo.*', 'default', formdata), indent=4))
print('Formal.VERSION ' + Formal.VERSION)
test()
 |