File: 0003-demo-in-tmp-dir.patch

package info (click to toggle)
sqlkit 0.9.5-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 8,184 kB
  • sloc: python: 17,477; sql: 166; makefile: 95; xml: 23; sh: 11
file content (77 lines) | stat: -rw-r--r-- 2,723 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
From: Pietro Battiston <me@pietrobattiston.it>
Date: Sat, 11 Feb 2012 02:42:25 +0100
Subject: demo in tmp dir

 The demo creates a temporary database, as well as temporary files such as
 thumbnails: this is impossible if it is ran from within the system directory
 containing it. So a temporary directory, symlinking required files, is created
 and used.

Forwarded: yes
Last-Update: <2012-02-18>
---
 demo/sql/demo.py         |   16 ++++++++++++++++
 demo/sql/model/movies.py |   12 +++++++++---
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/demo/sql/demo.py b/demo/sql/demo.py
index 27d004c..0eea22a 100755
--- a/demo/sql/demo.py
+++ b/demo/sql/demo.py
@@ -55,6 +55,22 @@ class MissingExampleError(Exception): pass
 
 def init_db():
 
+    if not os.access( model.DB_FILE, os.O_WRONLY ):
+        # No write access - work in a temporary directory
+        curdir = os.path.realpath( os.curdir )
+        tempdir = model.DB_DIR
+        os.chdir( tempdir )
+        dirs = ['model', 'images']
+        for a_dir in ['model', 'images']:
+            os.mkdir( a_dir )
+            for something in os.listdir( os.path.join( curdir, a_dir ) ):
+                real_path = os.path.join (curdir, a_dir, something )
+                os.symlink( real_path, os.path.join( a_dir, something ) )
+        for something in os.listdir( curdir ):
+            if something in dirs:
+                continue
+            real_path = os.path.join( curdir, something )
+            os.symlink( real_path, something )
     with closing(sqlite3.connect(model.DB_FILE)) as db:
         with open('model/schema.sql', 'r') as schema:
             db.cursor().executescript(schema.read())
diff --git a/demo/sql/model/movies.py b/demo/sql/model/movies.py
index 6975ea4..84a1cf9 100644
--- a/demo/sql/model/movies.py
+++ b/demo/sql/model/movies.py
@@ -1,5 +1,7 @@
 import os
 import tempfile
+import atexit
+import shutil
 
 from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy import Table, Column, ForeignKey
@@ -10,7 +12,8 @@ from sqlkit.db.utils import Descr
 from sqlkit.db import proxy
 
 Base = declarative_base()
-DB_FILE = os.path.join(tempfile.gettempdir(), 'db-%s.sqlite' % os.environ.get('USERNAME'))
+DB_DIR = tempfile.mkdtemp()
+DB_FILE = os.path.join(DB_DIR, 'db-%s.sqlite' % os.environ.get('USERNAME'))
 engine = "sqlite:///%s" % DB_FILE
 db = proxy.DbProxy(engine=engine, metadata=Base.metadata)
 
@@ -116,5 +119,8 @@ class AllTypes(Base):
     bool           = Column(Boolean, nullable=False)
     bool_null      = Column(Boolean, nullable=True)
 #    pickle         = Column(PickleType())
-    
-    
+
+def rm_tmpdir():
+    shutil.rmtree( DB_DIR )
+
+atexit.register( rm_tmpdir )
--