def _from_reference(reference, app, namespace): """Convert Reference protobuf to :class:`~google.cloud.datastore.key.Key`. This is intended to work with the "legacy" representation of a datastore "Key" used within Google App Engine (a so-called "Reference"). This assumes that ``serialized`` was created within an App Engine app via something like ``ndb.Key(...).reference()``. However, the actual type used here is different since this code will not run in the App Engine standard environment where the type was ``google.appengine.datastore.entity_pb.Reference``. Args: serialized (bytes): A reference protobuf serialized to bytes. app (Optional[str]): The application ID / project ID for the constructed key. namespace (Optional[str]): The namespace for the constructed key. Returns: google.cloud.datastore.key.Key: The key corresponding to ``serialized``. Raises: RuntimeError: If ``app`` is not :data:`None`, but not the same as ``reference.app``. RuntimeError: If ``namespace`` is not :data:`None`, but not the same as ``reference.name_space``. """ project = _project_from_app(reference.app) if app is not None: if _project_from_app(app) != project: raise RuntimeError( _REFERENCE_APP_MISMATCH.format(reference.app, app) ) parsed_namespace = _key_module._get_empty(reference.name_space, "") if namespace is not None: if namespace != parsed_namespace: raise RuntimeError( _REFERENCE_NAMESPACE_MISMATCH.format( reference.name_space, namespace ) ) _key_module._check_database_id(reference.database_id) flat_path = _key_module._get_flat_path(reference.path) return google.cloud.datastore.Key( *flat_path, project=project, namespace=parsed_namespace )
def _call_fut(path_pb): from google.cloud.datastore.key import _get_flat_path return _get_flat_path(path_pb)