Statistics
| Branch: | Tag: | Revision:

root / pithos / backends / lib_alchemy / public.py @ b8b79f76

History | View | Annotate | Download (2.5 kB)

1 4f917833 Sofia Papagiannaki
# Copyright 2011 GRNET S.A. All rights reserved.
2 4f917833 Sofia Papagiannaki
# 
3 4f917833 Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 4f917833 Sofia Papagiannaki
# without modification, are permitted provided that the following
5 4f917833 Sofia Papagiannaki
# conditions are met:
6 4f917833 Sofia Papagiannaki
# 
7 4f917833 Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 4f917833 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 4f917833 Sofia Papagiannaki
#      disclaimer.
10 4f917833 Sofia Papagiannaki
# 
11 4f917833 Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 4f917833 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 4f917833 Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 4f917833 Sofia Papagiannaki
#      provided with the distribution.
15 4f917833 Sofia Papagiannaki
# 
16 4f917833 Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 4f917833 Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 4f917833 Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 4f917833 Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 4f917833 Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 4f917833 Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 4f917833 Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 4f917833 Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 4f917833 Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 4f917833 Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 4f917833 Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 4f917833 Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 4f917833 Sofia Papagiannaki
# 
29 4f917833 Sofia Papagiannaki
# The views and conclusions contained in the software and
30 4f917833 Sofia Papagiannaki
# documentation are those of the authors and should not be
31 4f917833 Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 4f917833 Sofia Papagiannaki
# or implied, of GRNET S.A.
33 4f917833 Sofia Papagiannaki
34 4f917833 Sofia Papagiannaki
from dbworker import DBWorker
35 4f917833 Sofia Papagiannaki
from sqlalchemy import Table, Column, String, MetaData
36 4f917833 Sofia Papagiannaki
from sqlalchemy.sql import select
37 4f917833 Sofia Papagiannaki
38 4f917833 Sofia Papagiannaki
class Public(DBWorker):
39 4f917833 Sofia Papagiannaki
    """Paths can be marked as public."""
40 4f917833 Sofia Papagiannaki
    
41 4f917833 Sofia Papagiannaki
    def __init__(self, **params):
42 4f917833 Sofia Papagiannaki
        DBWorker.__init__(self, **params)
43 4f917833 Sofia Papagiannaki
        metadata = MetaData()
44 4f917833 Sofia Papagiannaki
        columns=[]
45 d3be972a Sofia Papagiannaki
        columns.append(Column('path', String(2048), primary_key=True))
46 4f917833 Sofia Papagiannaki
        self.public = Table('public', metadata, *columns)
47 4f917833 Sofia Papagiannaki
        metadata.create_all(self.engine)
48 4f917833 Sofia Papagiannaki
    
49 4f917833 Sofia Papagiannaki
    
50 4f917833 Sofia Papagiannaki
    def public_set(self, path):
51 4f917833 Sofia Papagiannaki
        s = self.public.insert()
52 4f917833 Sofia Papagiannaki
        r = self.conn.execute(s, path = path)
53 4f917833 Sofia Papagiannaki
        r.close()
54 4f917833 Sofia Papagiannaki
    
55 4f917833 Sofia Papagiannaki
    def public_unset(self, path):
56 4f917833 Sofia Papagiannaki
        s = self.public.delete().where(self.public.c.path == path)
57 4f917833 Sofia Papagiannaki
        r = self.conn.execute(s)
58 4f917833 Sofia Papagiannaki
        r.close()
59 4f917833 Sofia Papagiannaki
    
60 4f917833 Sofia Papagiannaki
    def public_check(self, path):
61 4f917833 Sofia Papagiannaki
        s = select([self.public.c.path], self.public.c.path == path)
62 4f917833 Sofia Papagiannaki
        r = self.conn.execute(s)
63 4f917833 Sofia Papagiannaki
        l = r.fetchone()
64 4f917833 Sofia Papagiannaki
        r.close()
65 4f917833 Sofia Papagiannaki
        return bool(l)