Expose low level MOVE operation in storage.BaseCollection
This commit is contained in:
parent
17ff22cae4
commit
23582c8208
@ -496,12 +496,7 @@ class Application:
|
||||
if not to_collection:
|
||||
return client.CONFLICT, {}, None
|
||||
to_href = posixpath.basename(to_path.strip("/"))
|
||||
if path.strip("/") != to_path.strip("/"):
|
||||
if to_item:
|
||||
to_collection.update(to_href, item.item)
|
||||
else:
|
||||
to_collection.upload(to_href, item.item)
|
||||
item.collection.delete(item.href)
|
||||
self.Collection.move(item, to_collection, to_href)
|
||||
return client.CREATED, {}, None
|
||||
|
||||
def do_OPTIONS(self, environ, path, content, user):
|
||||
|
@ -265,6 +265,26 @@ class BaseCollection:
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@classmethod
|
||||
def move(cls, item, to_collection, to_href):
|
||||
"""Move an object.
|
||||
|
||||
``item`` is the item to move.
|
||||
|
||||
``to_collection`` is the target collection.
|
||||
|
||||
``to_href`` is the target name in ``to_collection``. An item with the
|
||||
same name might already exist.
|
||||
|
||||
"""
|
||||
if item.collection.path == to_collection.path and item.href == to_href:
|
||||
return
|
||||
if to_collection.has(to_href):
|
||||
to_collection.update(to_href, item.item)
|
||||
else:
|
||||
to_collection.upload(to_href, item.item)
|
||||
item.collection.delete(item.href)
|
||||
|
||||
@property
|
||||
def etag(self):
|
||||
return get_etag(self.serialize())
|
||||
|
Loading…
x
Reference in New Issue
Block a user