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 )
--
|