Replace uniq with userid.
[pithos] / other / migrate.py
1 #!/usr/bin/env python
2
3 # Copyright 2011-2012 GRNET S.A. All rights reserved.
4
5 # Redistribution and use in source and binary forms, with or
6 # without modification, are permitted provided that the following
7 # conditions are met:
8
9 #   1. Redistributions of source code must retain the above
10 #      copyright notice, this list of conditions and the following
11 #      disclaimer.
12
13 #   2. Redistributions in binary form must reproduce the above
14 #      copyright notice, this list of conditions and the following
15 #      disclaimer in the documentation and/or other materials
16 #      provided with the distribution.
17
18 # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19 # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25 # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 # POSSIBILITY OF SUCH DAMAGE.
30
31 # The views and conclusions contained in the software and
32 # documentation are those of the authors and should not be
33 # interpreted as representing official policies, either expressed
34 # or implied, of GRNET S.A.
35
36 from sqlalchemy import create_engine
37 from sqlalchemy import Table, Column, String, MetaData
38 from sqlalchemy.sql import select
39
40 from django.conf import settings
41
42 from pithos.backends.modular import ModularBackend
43
44 class Migration(object):
45     def __init__(self, db):
46         self.engine = create_engine(db)
47         self.metadata = MetaData(self.engine)
48         #self.engine.echo = True
49         self.conn = self.engine.connect()
50         
51         options = getattr(settings, 'BACKEND', None)[1]
52         self.backend = ModularBackend(*options)
53     
54     def execute(self):
55         pass
56
57 class Cache():
58     def __init__(self, db):
59         self.engine = create_engine(db)
60         metadata = MetaData(self.engine)
61         
62         columns=[]
63         columns.append(Column('path', String(2048), primary_key=True))
64         columns.append(Column('hash', String(255)))
65         self.files = Table('files', metadata, *columns)
66         self.conn = self.engine.connect()
67         self.engine.echo = True
68         metadata.create_all(self.engine)
69     
70     def put(self, path, hash):
71         # Insert or replace.
72         s = self.files.delete().where(self.files.c.path==path)
73         r = self.conn.execute(s)
74         r.close()
75         s = self.files.insert()
76         r = self.conn.execute(s, {'path': path, 'hash': hash})
77         r.close()
78     
79     def get(self, path):
80         s = select([self.files.c.hash], self.files.c.path == path)
81         r = self.conn.execute(s)
82         l = r.fetchone()
83         r.close()
84         if not l:
85             return l
86         return l[0]