Revision d1e7d2b4 snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py

b/snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py
449 449
        self.conn.execute(s).close()
450 450
        return True
451 451

  
452
    def node_accounts(self):
453
        s = select([self.nodes.c.path])
454
        s = s.where(and_(self.nodes.c.node != 0, self.nodes.c.parent == 0))
455
        account_nodes = self.conn.execute(s).fetchall()
456
        return sorted(i[0] for i in account_nodes)
452
    def node_accounts(self, accounts=()):
453
        s = select([self.nodes.c.path, self.nodes.c.node])
454
        s = s.where(and_(self.nodes.c.node != 0,
455
                         self.nodes.c.parent == 0))
456
        if accounts:
457
            s = s.where(self.nodes.c.path.in_(accounts))
458
        r = self.conn.execute(s)
459
        rows = r.fetchall()
460
        r.close()
461
        return rows
462

  
463
    def node_account_usage(self, account_node, cluster):
464
        select_children = select(
465
            [self.nodes.c.node]).where(self.nodes.c.parent == account_node)
466
        select_descendants = select([self.nodes.c.node]).where(
467
            or_(self.nodes.c.parent.in_(select_children),
468
                self.nodes.c.node.in_(select_children)))
469
        s = select([func.sum(self.versions.c.size)])
470
        s = s.group_by(self.versions.c.cluster)
471
        s = s.where(self.nodes.c.node == self.versions.c.node)
472
        s = s.where(self.nodes.c.node.in_(select_descendants))
473
        s = s.where(self.versions.c.cluster == cluster)
474
        r = self.conn.execute(s)
475
        usage = r.fetchone()[0]
476
        r.close()
477
        return usage
457 478

  
458 479
    def policy_get(self, node):
459 480
        s = select([self.policy.c.key, self.policy.c.value],

Also available in: Unified diff