示例#1
0
    def __prop_to_dict(self, value, property_name, transform, export_dict,
                       bulkload_state):
        """Transform a single export-side field value to dict property.

    Args:
      value: Value from the entity or model instance.
      property_name: Name of the value in the entity or model instance.
      transform: Transform property, either an ExportEntry or PropertyEntry
      export_dict: output dictionary.
      bulkload_state: Passed bulkload state.

    Raises:
      ErrorOnTransform, encapsulating an error encountered during the transform.
    """
        if transform.export_transform:
            try:
                if transform.export_transform.supports_bulkload_state:
                    transformed_value = transform.export_transform(
                        value, bulkload_state=bulkload_state)
                else:
                    transformed_value = transform.export_transform(value)
            except Exception, err:
                raise bulkloader_errors.ErrorOnTransform(
                    'Error on transform. '
                    'Property: %s External Name: %s. Code: %s Details: %s' %
                    (property_name, transform.external_name,
                     transform.export_transform, err))
示例#2
0
    def __create_instance(self, input_dict, bulkload_state):
        """Return a model instance or entity from an input_dict.

    Args:
      input_dict: Neutral input dictionary describing a single input record.
      bulkload_state: bulkload_state object describing the global state.

    Returns:
      Entity or model instance, or collection of entity or model instances,
      to be uploaded.
    """
        key = None
        parent = None
        if self._create_key:
            key = self.__dict_to_prop(self._create_key, input_dict,
                                      bulkload_state)
            if isinstance(key, datastore.Key):
                if not key.name():
                    raise bulkloader_errors.ErrorOnTransform(
                        'Numeric keys are not supported on input at this time.'
                    )
                parent = key.parent()
                key = key.name()

        if self._transformer_spec.model:
            instance = self._transformer_spec.model(key_name=key,
                                                    parent=parent)
        else:
            instance = datastore.Entity(self._transformer_spec.kind,
                                        parent=parent,
                                        name=key)
        return instance