def populate_field_values(self, data):
        """Load resource data and populate field values"""

        if not self._meta.case_sensitive_fields:
            data = {k.lower(): v for k, v in six.iteritems(data)}

        if self._meta.match_fuzzy_keys:
            # String any non-alphanumeric chars from each key
            data = {''.join(x for x in k if x in ALPHANUMERIC).lower(): v for k, v in six.iteritems(data)}

        for field in self._meta.fields:
            name = field.name if self._meta.case_sensitive_fields else field.name.lower()
            value = None

            if self._meta.match_fuzzy_keys:
                name = ''.join(x for x in name if x in ALPHANUMERIC).lower()

            if name in data:
                value = field.to_python(data[name], self)
            elif field.required and field.default is None:
                message = "Response from {0} is missing required field '{1}'".format(self._url, field.name)
                if self._strict:
                    raise MissingFieldException(message)
                else:
                    logger.warn(message)
            elif field.default is not None:
                value = copy.copy(field.default)

            setattr(self, field._attr_name, value)

        self._populated_field_values = True