import logging import re logger = logging.getLogger(__name__) # Form and Model Field Config COMMON_CHAR_FIELD_LENGTH = 250 NUMBER_MAX_LENGTH = 12 TITLE_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH TRAINER_NAME_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH PHONE_NUMBER_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH LOCATION_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH TRANSPORT_OTHER_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH DEPARTURE_RIDE_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH MEETING_POINT_OTHER_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH BASECAMP_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH ACCOMMODATION_OTHER_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH MEALS_OTHER_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH ADDITIONAL_COSTS_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH class FieldInitial(object): _constraint_re = re.compile(r'^(?P[a-z_]+)(?P[=]+)(?P.*)$') def __init__(self, *args): self._tuples = [] if len(args) == 1: self._tuples = [(None, args[0])] else: constraint = None for arg in args: if constraint is None: constraint = arg else: self._tuples.append((constraint, arg)) constraint = None def get_value(self, session_data): parameters = { 'mode': session_data.get('mode', None), 'sport': session_data.get('sport', None), 'level': session_data.get('level', None), 'overnight': str(bool(session_data.get('last_day', None))), 'country': session_data.get('country', None), 'terrain': session_data.get('terrain', None), 'transport': session_data.get('transport', None), } for tuple in self._tuples: constraint, result = tuple if not constraint: return result match = False constraint_parts = constraint.split(',') for sub_constraint in constraint_parts: c = self._constraint_re.match(sub_constraint) if c is not None: c_field = c.group('field') if c_field not in parameters: logger.error('FieldInitial: Invalid field: \'%s\'', sub_constraint) continue c_op = c.group('op') c_value = c.group('value') if c_op == '==': if parameters[c_field] == c_value: match = True continue else: match = False break else: logger.error('FieldInitial: Invalid operator: \'%s\'', sub_constraint) continue else: logger.error('FieldInitial: Invalid constraint: \'%s\'', constraint) break if match: return result return None