def get_fields(self): required_details = OrderedDict() non_required_details = OrderedDict() for k, f in sorted(get_fields(self.model_type).iteritems()): if is_required(f): required_details[k] = f else: non_required_details[k] = f details = OrderedDict() for k, f in required_details.iteritems(): details[k] = f for k, f in non_required_details.iteritems(): details[k] = f return details
def test_should_return_model_instance_fields_dict(self): result = get_fields(User()) expect(result).to(have_keys(name=User.name, email=User.email))
def test_non_model_object_should_raise_type_error(self): expect(lambda: get_fields(object)).to(raise_error(TypeError))
def test_should_return_a_copy_of_internal_fields_dict(self): expect(get_fields(User)).not_to(be(get_fields(User)))
def test_should_return_a_copy_of_internal_fields_dict(self): result = get_fields(User) expect(result).not_to.be(get_fields(User))
def test_should_return_model_class_fields_dict(self): result = get_fields(User) expect(result).to.have.keys(name=User.name, email=User.email)
def ask_details_for_type(model_type, ask_only_required=True, help_map={}): ''' Asks for user input to create an object of a specified type. If the type is registered in a model/builder map, the function associated with this type is used to create the object instead of the auto-generated query. ''' if MODEL_MAP.get(model_type, None): func = MODEL_MAP[model_type] return func() required_details = OrderedDict() non_required_details = OrderedDict() values = {} for k, f in sorted(get_fields(model_type).iteritems()): if is_required(f): required_details[k] = f else: non_required_details[k] = f print print "Enter values for fields below. Enter '?' or '? arg1 [arg2]' for help for each field." print print "Required fields:" print "----------------" print for k, f in required_details.iteritems(): while True: value = ask_detail_for_field(k, f, ask_only_required, help_map) if value: values[k] = value break else: print print "This is a required field, please enter value for {}.".format( k) print if not ask_only_required: print print "Optional fields, press 'Enter' to ignore a field." print "-------------------------------------------------" print for k, f in non_required_details.iteritems(): value = ask_detail_for_field(k, f, ask_only_required, help_map) if value: values[k] = value print obj = model_type(**values) return obj