diff --git a/src/repdav/textgrid_dav_provider.py b/src/repdav/textgrid_dav_provider.py index 5f4ad4a14b5069451e5c94b16816fc52fd8fa6c9..557e849e83560ce583fa017e7ecb230c44b46a36 100644 --- a/src/repdav/textgrid_dav_provider.py +++ b/src/repdav/textgrid_dav_provider.py @@ -3,11 +3,16 @@ import io import logging +from pprint import pformat + +from tgclients.crud import TextgridCRUD +from tgclients.config import TextgridConfig +from tgclients.metadata import TextgridMetadata from wsgidav.dav_provider import DAVCollection, DAVNonCollection, DAVProvider +from wsgidav.stream_tools import FileLikeQueue from wsgidav.util import join_uri, pop_path - -from .tgapi import TextgridAuth, TextgridCRUD, TextgridSearch +from .tgapi import TextgridAuth, TextgridSearch _logger = logging.getLogger(__name__) @@ -23,7 +28,6 @@ class TextgridRoot(DAVCollection): def __init__(self, path, environ): DAVCollection.__init__(self, path, environ) self._sid = environ["wsgidav.auth.user_name"] - _logger.debug("MY SID: %s", self._sid) def get_display_info(self): return {"type": "Textgrid root collection"} @@ -85,7 +89,7 @@ class TextgridProject(DAVCollection): # path resolution has to be rewritten before we can work with resource titles resources = TextgridSearch().get_project_contents( self._sid, self.path.split("/")[-1]) - _logger.debug("RESOURCES: %s", resources) + #_logger.debug("RESOURCES: %s", resources) return resources.keys() def get_member(self, name): @@ -192,19 +196,48 @@ class TextgridResource(DAVNonCollection): def get_content_length(self): _logger.debug("Called TextgridResource.get_content_length(self).") - # return TextgridCRUD().get_metadata(self._sid, self.path.split("/")[-1])["content-length"] return self._info[self.name]["extent"] def get_content_type(self): _logger.debug("Called TextgridResource.get_content_type(self).") - # return TextgridCRUD().get_metadata(self._sid, self.path.split("/")[-1])["content-type"] return self._info[self.name]["format"] def get_content(self): - return io.BytesIO(TextgridCRUD().get_data(self._sid, self.path.split("/")[-1])) + config = TextgridConfig() + crud = TextgridCRUD(config.crud) + return io.BytesIO(crud.read_data(self.path.split("/")[-1], self._sid).content) + + def get_content_title(self): + _logger.debug("Called TextgridResource.get_content_title(self).") + return self._info[self.name]["title"] def begin_write(self, content_type=None): - pass + _logger.debug( + "Called TextgridResource.begin_write(self, content_type=%s).", content_type) + config = TextgridConfig() + crud = TextgridCRUD(config.crud) + queue = FileLikeQueue(max_size=1) + # create metadata or update? + metadata = TextgridMetadata.create( + self.get_content_title(), self.get_content_type()) + crud.update_resource( + self._sid, self.path.split("/")[-1], queue, metadata) + return queue + + def end_write(self, with_errors): + _logger.debug( + "Called TextgridResource.end_write(self, with_errors=%s)", with_errors) + + # temporary override for debugging + def resolve(self, script_name, path_info): + """Return a _DAVResource object for the path (None, if not found). + `path_info`: is a URL relative to this object. + """ + _logger.debug( + "Called TextgridResource.resolve(self, %s, %s).", script_name, path_info) + if path_info in ("", "/"): + return self + return None # ============================================================================ @@ -214,12 +247,9 @@ class TextgridResourceProvider(DAVProvider): """DAV provider that serves Textgrid resources. """ - def __init__(self): - super(TextgridResourceProvider, self).__init__() - def get_resource_inst(self, path, environ): _logger.debug( - "Called TextgridResourceProvider.get_resource_inst(self, %s, %s).", path, environ) + "Called TextgridResourceProvider.get_resource_inst(self, %s, %s).", path, pformat(environ)) self._count_get_resource_inst += 1 root = TextgridRoot("/", environ) # an instance of _DAVResource (i.e. either DAVCollection or DAVNonCollection)