PK!{eBCCpyfield/__init__.py# -*- coding: utf-8 -*- """ Field collection for you form """ from pkg_resources import get_distribution, DistributionNotFound from pyfield.field.boolean import Boolean from pyfield.field.integer import Integer from pyfield.field.real_number import RealNumber from pyfield.field.text import Text __all__ = ('Boolean', 'Integer', 'RealNumber', 'Text') try: DIST_NAME = __name__ __version__ = get_distribution(DIST_NAME).version except DistributionNotFound: # pragma: no cover __version__ = 'unknown' finally: del get_distribution del DistributionNotFound PK!<7pyfield/error.py""" Module to store all error use by pyfield """ class InvalidError(ValueError): """ Raised when validator fails """ pass PK!nO0pyfield/field/__init__.py""" All field are stored here """ from pyfield.validator import valid_type class Field(object): """ Base of all Field """ def __init__(self, name, **kwargs): self.name = name self.hold = object() self.base = kwargs.pop('base', object()) self.transformator = kwargs.pop('transformator', []) self.validator = kwargs.pop('validator', []) try: # __call__ self.default = self(kwargs.pop('default')) except KeyError: self.default = None def set_up(self, **kwargs): """ get all transformator and validator from kwargs """ self.transformator = [self.base] + kwargs.pop('transformator', []) self.validator = [valid_type(self.base)] + kwargs.pop('validator', []) try: # __call__ self.default = self(kwargs.pop('default')) except KeyError: self.default = None def __call__(self, _input): """ Inject value ex: email('alice@gmail.com') """ # Apply transformation for transf_call in self.transformator: _input = transf_call(_input) # check validity for valida_call in self.validator: valida_call(_input) self.hold = _input return _input def prompt_input(self): """ Build prompt for input ex: Would you like to exit [yes|no]: """ if self.default is None: return ' {}: '.format(self.name) else: return ' {} [{}]: '.format(self.name, self.default) @property def get(self): """ Get holded value """ return self.hold PK! jpyfield/field/boolean.py""" Module to hold boolean field """ from pyfield.field import Field class Boolean(Field): """ Boolean field >>> from pyfield import Boolean >>> stay = Boolean('stay connected') >>> stay(True) >>> print(stay.get) True """ def __init__(self, name, **kwargs): super(Boolean, self).__init__(name, **kwargs) self.name = name self.hold = bool() self.base = kwargs.pop('base', bool) self.set_up(**kwargs) PK!R.pyfield/field/integer.py""" Module to hold integer field """ from pyfield.field import Field class Integer(Field): """ Integer field >>> from pyfield import Integer >>> age = Integer('age') >>> age('18') >>> print(age.get) 18 """ def __init__(self, name, **kwargs): super(Integer, self).__init__(name, **kwargs) self.name = name self.hold = int() self.base = kwargs.pop('base', int) self.set_up(**kwargs) PK!k]Fpyfield/field/real_number.py""" Module to hold real number field """ from pyfield.field import Field class RealNumber(Field): """ Real number field >>> from pyfield import RealNumber >>> heigth = RealNumber('heigth') >>> heigth('1.85') >>> print(heigth.get) 1.85 """ def __init__(self, name, **kwargs): super(RealNumber, self).__init__(name, **kwargs) self.name = name self.hold = float() self.base = kwargs.pop('base', float) self.set_up(**kwargs) PK! Vpyfield/field/text.py""" Module to hold text field """ from pyfield.field import Field class Text(Field): """ Text field >>> from pyfield import Text >>> text = Text('First name') >>> text('Jonatana') >>> print(text.get) Jonatana """ def __init__(self, name, **kwargs): super(Text, self).__init__(name, **kwargs) self.name = name self.hold = str() self.base = kwargs.pop('base', str) self.set_up(**kwargs) PK!X `pyfield/validator/__init__.py""" Builtin validator """ from pyfield.error import InvalidError def valid_type(check_type=object): """ Builtin type validator """ def warped(to_valid): """ This isn't a decorator but a function returned and executed in validator """ if not isinstance(to_valid, check_type): typebase = type(check_type) typearg = type(to_valid) raise InvalidError('Input must be {} not {}'.format( typebase, typearg)) return warped PK!%!Ŗpyfield/validator/text.py""" Builtin validator for Text field """ import re from pyfield.error import InvalidError def is_credit_card(arg): """ Check if arg is an credit card """ credit_card_pattern = r'^(\d{4}[-\s]?){3}\d{4}$' if not re.match(credit_card_pattern, arg): raise InvalidError('Invalid Credit card') def is_credit_card_strict(arg): """ Strict check if arg is an credit card """ credit_card_strict_pattern = r'^((\d{4}){3}|(\d{4}-){3}|(\d{4}\s)\ {3})\d{4}$' if not re.match(credit_card_strict_pattern, arg): raise InvalidError('Invalid Credit card') def is_email_addr(arg): """ Check if arg is an email """ email_pattern = r"([A-Za-z0-9!#$%&'*+\/=?^_`{|.}~-]+@(?:[\ a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)" if not re.match(email_pattern, arg): raise InvalidError('Invalid Email') def is_ipv4(arg): """ Check if arg is an ipv4 """ bit = r"([01]?\d{1,2}|2(5[0-5]|[0-4]\d))" ipv4_pattern = r"^{0}\.{0}\.{0}\.{0}$".format(bit) if not re.match(ipv4_pattern, arg): raise InvalidError('Invalid ipv4') def is_mac_addr(arg): """ Check if arg is an mac address """ mac_address_pattern = r'^([0-9A-Fa-f]{2}[:-]){5}' \ r'([0-9A-Fa-f]{2})$' if not re.match(mac_address_pattern, arg): raise InvalidError('Invalid mac address') PK!{00#pyfield-0.1.3.dist-info/LICENSE.txtThe MIT License (MIT) Copyright (c) 2018 Ublim Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK!H WXpyfield-0.1.3.dist-info/WHEEL A н#Z."jm)Afb~ڠO68oF04UhoAf f4=4h0k::wXPK!H|ny pyfield-0.1.3.dist-info/METADATATO0~_qoՒ؆nPiO$ۑ}i;' $V?ݝ3$K-:I`/Rcjx7׵ҭ۲Č XY+[Uds'ah^qf&-~îΩx=LQMshVZ2~.Rq)W4$pq=rvy9qwtpRke 8&Do~kć}T!4MWKDçy]cEA3ECN.2[W/O&j ^ IW g!^U3 `k,1m!^޸G{`aʃU$ ĝ@sc!sxеA ,m5 T%JֺCtr|3yG7LK۱ E_˓\f14{L?F̜L/2#33 A P.니bbx󗃍D^Lq¼Fl[W0Ƌ0vl+ׅbTCkس7eL,8=c$C<_>~V6>S<+^ܛþq4_@ٚg1%:TgV5#OHKpԛjkci aLaON\8Lm & v,7K#5 XxW:^rOl H"t?ҁww^!)|JVЕŭ ci-M\"b5us屮W898 "=A5Gi&