def save_model(self, request, obj, form, change): """ Overridden save method so GEO_location field will be updated when address is updated """ restaurant = obj restaurant.GEO_location = geocode(restaurant.address) restaurant.clean() restaurant.clean_fields() restaurant.save()
def signup(cls, subscriber_data): """ Constructs and saves SubscriberProfile to database returning the newly created profile :param subscriber_data: data of the subscriber :subscriber_data: dict :return: SubscriberProfile Object :rtype: :class:`SubscriberProfile` """ SubscriberProfile.field_validate(subscriber_data) if "consent_status" in subscriber_data: subscriber_data.update(handleConsentStatus( subscriber_data['consent_status'])) profile = cls(**subscriber_data) profile.GEO_location = geocode(profile.postalCode) profile = save_and_clean(profile) return profile
def edit(cls, subscriber_data): """ Edits current SubscriberProfile in DB returning the edited profile :param subscriber_data: json data of the subscriber :return: SubscriberProfile Object """ SubscriberProfile.field_validate(subscriber_data) profile = SubscriberProfile.objects.get( user_id=subscriber_data['user_id']) if not profile: raise ObjectDoesNotExist( 'No subscriber profile found with owner user id of this: ' + subscriber_data['user_id']) for field in subscriber_data: setattr(profile, field, subscriber_data[field]) profile.GEO_location = geocode(profile.postalCode) if "consent_status" in subscriber_data: consent_data = handleConsentStatus( subscriber_data["consent_status"]) for field in consent_data: setattr(profile, field, consent_data[field]) profile = save_and_clean(profile) return profile
def test_happy(self): """Test is location dictionary is returned""" actual = geo_controller.geocode(self.query1) expected = {'lat': 43.9048502, 'lng': -79.2828746} self.assertDictEqual(actual, expected)
def update_model_geo(model, address): model.GEO_location = geocode(address) return model
def field_validate(self, fields): """ Validates fields :param fields: Dictionary of fields to validate :type fields: dict :raises: ValidationError when there are invalid(s) :return: None """ invalid = {'Invalid': []} # check if there is script in any field values for attr in fields: value = fields[attr] if value is not None: try: check_script_injections(value) except ValidationError as e: invalid['Invalid'].append(attr) if 'user_id' not in fields: invalid['Invalid'].append( "user_id must be passed and be equal to the user's id") elif User.objects.get(pk=fields['user_id']) == None: invalid['Invalid'].append( "SDUser with this user_id does not exist") if 'first_name' in fields: try: validate_name(fields['first_name']) except ValidationError as e: invalid['Invalid'].append('first_name') if 'last_name' in fields: try: validate_name(fields['last_name']) except ValidationError as e: invalid['Invalid'].append('last_name') if 'expired_at' in fields: try: datetime.datetime.strptime(fields['last_updated'], '%Y-%m-%d') except ValueError: invalid['Invalid'].append( 'expired_at (format should be YYYY-MM-DD)') if 'phone' in fields and fields['phone'] is not None: if len(str(fields['phone'])) != 10 and str(fields['phone']).isnumeric(): invalid['Invalid'].append('phone') if 'postalCode' in fields: if not fields['postalCode']: invalid['Invalid'].append('postalCode') else: try: validate_postal_code(fields['postalCode']) geocode(fields['postalCode']) except ValidationError: invalid['Invalid'].append('postalCode') if invalid['Invalid']: raise ValidationError(message=invalid, code="invalid_input")