示例#1
0
 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()
示例#2
0
    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
示例#3
0
    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)
示例#5
0
def update_model_geo(model, address):
    model.GEO_location = geocode(address)
    return model
示例#6
0
    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")