markup: add autosave dir for accidental my cats writes
This commit is contained in:
@ -58,6 +58,8 @@ def resource_factory(**kwargs):
|
|||||||
return MarkupResource(**kwargs)
|
return MarkupResource(**kwargs)
|
||||||
elif path == ReadmeResource.PATH:
|
elif path == ReadmeResource.PATH:
|
||||||
return ReadmeResource(**kwargs)
|
return ReadmeResource(**kwargs)
|
||||||
|
elif is_autosave_path(path):
|
||||||
|
return AutosaveResource(**kwargs)
|
||||||
else:
|
else:
|
||||||
return NonsensicalResource(**kwargs)
|
return NonsensicalResource(**kwargs)
|
||||||
|
|
||||||
@ -67,6 +69,9 @@ def is_my_cats_catalog(path):
|
|||||||
def is_markup_catalog(path):
|
def is_markup_catalog(path):
|
||||||
return re.search(fr'^{MarkupResource.PATH}', path, re.I)
|
return re.search(fr'^{MarkupResource.PATH}', path, re.I)
|
||||||
|
|
||||||
|
def is_autosave_path(path):
|
||||||
|
return re.search(fr'^{AutosaveResource.PATH}', path, re.I)
|
||||||
|
|
||||||
|
|
||||||
class MarkupDavResource(MetaEtagMixIn, BaseDavResource):
|
class MarkupDavResource(MetaEtagMixIn, BaseDavResource):
|
||||||
|
|
||||||
@ -91,7 +96,8 @@ class RootFolderResource(MarkupDavResource):
|
|||||||
def get_children(self):
|
def get_children(self):
|
||||||
children = [CatalogFolderResource(user=self.user),
|
children = [CatalogFolderResource(user=self.user),
|
||||||
MarkupResource(user=self.user),
|
MarkupResource(user=self.user),
|
||||||
ReadmeResource(user=self.user)
|
ReadmeResource(user=self.user),
|
||||||
|
AutosaveResource(user=self.user)
|
||||||
]
|
]
|
||||||
for child in children:
|
for child in children:
|
||||||
yield child
|
yield child
|
||||||
@ -226,10 +232,9 @@ class CatalogResource(MarkupDavResource):
|
|||||||
os.rename(self.get_abs_path(), destination.get_abs_path())
|
os.rename(self.get_abs_path(), destination.get_abs_path())
|
||||||
|
|
||||||
def write(self, request, temp_file=None, range_start=None):
|
def write(self, request, temp_file=None, range_start=None):
|
||||||
autosave_path = url_join(MarkupResource.PATH, 'Autosave', self.path[-1])
|
autosave_path = url_join(AutosaveResource.PATH, self.path[-1])
|
||||||
autosave = MarkupResource(path=autosave_path, user=self.user)
|
autosave = AutosaveResource(path=autosave_path, user=self.user)
|
||||||
autosave_dir = autosave.get_abs_path()
|
autosave_dir = autosave.get_abs_path()
|
||||||
log.debug(f'autosave_dir: {autosave_dir}')
|
|
||||||
ensure_dir(dirname(autosave_dir))
|
ensure_dir(dirname(autosave_dir))
|
||||||
return autosave.write(request, temp_file=None, range_start=None)
|
return autosave.write(request, temp_file=None, range_start=None)
|
||||||
|
|
||||||
@ -269,7 +274,6 @@ class MarkupResource(MarkupDavResource, DummyFSDAVResource):
|
|||||||
base_dir = os.path.join(get_markup_user_path(self.user), self.SUBDIR)
|
base_dir = os.path.join(get_markup_user_path(self.user), self.SUBDIR)
|
||||||
ensure_dir(base_dir)
|
ensure_dir(base_dir)
|
||||||
path = os.path.join(base_dir, *self.path[1:])
|
path = os.path.join(base_dir, *self.path[1:])
|
||||||
# log.debug(f'markup: get abs path for {self.path}: base {base_dir}')
|
|
||||||
return path
|
return path
|
||||||
|
|
||||||
def write(self, request, temp_file=None, range_start=None):
|
def write(self, request, temp_file=None, range_start=None):
|
||||||
@ -349,3 +353,40 @@ class ReadmeResource(MarkupDavResource, DummyFSDAVResource):
|
|||||||
def get_abs_path(self):
|
def get_abs_path(self):
|
||||||
return os.path.join(BASE_DIR, 'markup', self.NAME)
|
return os.path.join(BASE_DIR, 'markup', self.NAME)
|
||||||
|
|
||||||
|
|
||||||
|
class AutosaveResource(MarkupDavResource, DummyFSDAVResource):
|
||||||
|
NAME = 'Autosave'
|
||||||
|
PATH = f'/{NAME}/'
|
||||||
|
SUBDIR = 'autosave'
|
||||||
|
|
||||||
|
def __init__(self, path=PATH, user=None):
|
||||||
|
super().__init__(path=path, user=user)
|
||||||
|
|
||||||
|
def get_parent(self):
|
||||||
|
parent_path = self.path[:-1]
|
||||||
|
if len(parent_path):
|
||||||
|
return AutosaveResource(path=self.construct_path(parent_path, True), user=self.user)
|
||||||
|
else:
|
||||||
|
return RootFolderResource(user=self.user)
|
||||||
|
|
||||||
|
def get_children(self):
|
||||||
|
path = self.get_abs_path()
|
||||||
|
if os.path.isdir(path):
|
||||||
|
for child in os.listdir(path):
|
||||||
|
is_unicode = isinstance(child, str)
|
||||||
|
if not is_unicode:
|
||||||
|
child = child.decode(fs_encoding)
|
||||||
|
yield AutosaveResource(path=url_join(*(self.path + [child])), user=self.user)
|
||||||
|
|
||||||
|
def get_abs_path(self):
|
||||||
|
base_dir = os.path.join(get_markup_user_path(self.user), self.SUBDIR)
|
||||||
|
ensure_dir(base_dir)
|
||||||
|
path = os.path.join(base_dir, *self.path[1:])
|
||||||
|
return path
|
||||||
|
|
||||||
|
def write(self, request, temp_file=None, range_start=None):
|
||||||
|
super().write(request, temp_file=temp_file, range_start=range_start)
|
||||||
|
process_markup_pdf.delay(self.get_abs_path(), self.user.username)
|
||||||
|
|
||||||
|
def get_acl(self):
|
||||||
|
return FullAcl()
|
||||||
|
|||||||
Reference in New Issue
Block a user