# or implied, of GRNET S.A.
from dbwrapper import DBWrapper
-from node import Node, ROOTNODE, SERIAL, HASH, SIZE, TYPE, MTIME, MUSER, UUID, CLUSTER
+from node import Node, ROOTNODE, SERIAL, HASH, SIZE, TYPE, MTIME, MUSER, UUID, CLUSTER, MATCH_PREFIX, MATCH_EXACT
from permissions import Permissions, READ, WRITE
__all__ = ["DBWrapper",
- "Node", "ROOTNODE", "SERIAL", "HASH", "SIZE", "TYPE", "MTIME", "MUSER", "UUID", "CLUSTER",
+ "Node", "ROOTNODE", "SERIAL", "HASH", "SIZE", "TYPE", "MTIME", "MUSER", "UUID", "CLUSTER", "MATCH_PREFIX", "MATCH_EXACT",
"Permissions", "READ", "WRITE"]
( SERIAL, NODE, HASH, SIZE, TYPE, SOURCE, MTIME, MUSER, UUID, CLUSTER ) = range(10)
+( MATCH_PREFIX, MATCH_EXACT ) = range(2)
+
inf = float('inf')
if not pathq:
return None, None
- subq = " and ("
- subq += ' or '.join(("n.path like ? escape '\\'" for x in pathq))
- subq += ")"
- args = tuple([self.escape_like(x) + '%' for x in pathq])
+ subqlist = []
+ args = []
+ print pathq
+ for path, match in pathq:
+ if match == MATCH_PREFIX:
+ subqlist.append("n.path like ? escape '\\'")
+ args.append(self.escape_like(path) + '%')
+ elif match == MATCH_EXACT:
+ subqlist.append("n.path = ?")
+ args.append(path)
+
+ subq = ' and (' + ' or '.join(subqlist) + ')'
+ args = tuple(args)
return subq, args
for x in ['READ', 'WRITE']:
setattr(self, x, getattr(self.db_module, x))
self.node = self.db_module.Node(**params)
- for x in ['ROOTNODE', 'SERIAL', 'HASH', 'SIZE', 'TYPE', 'MTIME', 'MUSER', 'UUID', 'CLUSTER']:
+ for x in ['ROOTNODE', 'SERIAL', 'HASH', 'SIZE', 'TYPE', 'MTIME', 'MUSER', 'UUID', 'CLUSTER', 'MATCH_PREFIX', 'MATCH_EXACT']:
setattr(self, x, getattr(self.db_module, x))
self.block_module = load_module(block_module)
if not allowed:
return []
path, node = self._lookup_container(account, container)
- # XXX: Format allowed...
+ allowed = self._get_formatted_paths(allowed)
return self._list_objects(node, path, prefix, delimiter, marker, limit, virtual, domain, keys, until, size_range, allowed)
@backend_method
raise NotAllowedError
path, node = self._lookup_container(account, container)
before = until if until is not None else inf
- # XXX: Format allowed...
+ allowed = self._get_formatted_paths(allowed)
return self.node.latest_attribute_keys(node, domain, before, CLUSTER_DELETED, allowed)
@backend_method
props = self.node.version_lookup(node, inf, CLUSTER_NORMAL)
if props is not None:
if props[self.TYPE] in ('application/directory', 'application/folder'):
- formatted.append((p.rstrip('/') + '/', 'prefix'))
- else:
- formatted.append((p, 'exact'))
+ formatted.append((p.rstrip('/') + '/', self.MATCH_PREFIX))
+ formatted.append((p, self.MATCH_EXACT))
return formatted
def _get_permissions_path(self, account, container, name):