one sqlalchemy session per thread
This commit is contained in:
parent
0c08d37c56
commit
8b46a85d56
15 changed files with 140 additions and 102 deletions
|
|
@ -17,6 +17,7 @@ from utils import resize_image
|
|||
|
||||
|
||||
from settings import icons_db_path
|
||||
import db
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger('oml.item.icons')
|
||||
|
|
@ -120,7 +121,7 @@ def get_icon(app, id, type_, size, callback):
|
|||
|
||||
@run_async
|
||||
def get_icon_app(app, id, type_, size, callback):
|
||||
with app.app_context():
|
||||
with db.session():
|
||||
from item.models import Item
|
||||
item = Item.get(id)
|
||||
if not item:
|
||||
|
|
|
|||
|
|
@ -41,8 +41,7 @@ from utils import remove_empty_folders
|
|||
|
||||
logger = logging.getLogger('oml.item.model')
|
||||
|
||||
metadata = sa.MetaData()
|
||||
user_items = sa.Table('useritem', metadata,
|
||||
user_items = sa.Table('useritem', db.metadata,
|
||||
sa.Column('user_id', sa.String(43), sa.ForeignKey('user.id')),
|
||||
sa.Column('item_id', sa.String(32), sa.ForeignKey('item.id'))
|
||||
)
|
||||
|
|
@ -97,8 +96,8 @@ class Item(db.Model):
|
|||
item = cls(id=id)
|
||||
if info:
|
||||
item.info = info
|
||||
db.session.add(item)
|
||||
db.session.commit()
|
||||
state.db.session.add(item)
|
||||
state.db.session.commit()
|
||||
return item
|
||||
|
||||
def json(self, keys=None):
|
||||
|
|
@ -166,7 +165,7 @@ class Item(db.Model):
|
|||
elif isinstance(value, list): #empty list
|
||||
value = ''
|
||||
setattr(s, key['id'], value)
|
||||
db.session.add(s)
|
||||
state.db.session.add(s)
|
||||
|
||||
def update_find(self):
|
||||
|
||||
|
|
@ -176,7 +175,7 @@ class Item(db.Model):
|
|||
v = v.decode('utf-8')
|
||||
f.findvalue = unicodedata.normalize('NFKD', v).lower()
|
||||
f.value = v
|
||||
db.session.add(f)
|
||||
state.db.session.add(f)
|
||||
|
||||
for key in config['itemKeys']:
|
||||
if key.get('find') or key.get('filter') or key.get('type') in [['string'], 'string']:
|
||||
|
|
@ -195,7 +194,7 @@ class Item(db.Model):
|
|||
else:
|
||||
f = Find.get(self.id, key['id'])
|
||||
if f:
|
||||
db.session.delete(f)
|
||||
state.db.session.delete(f)
|
||||
|
||||
def update(self):
|
||||
for key in ('mediastate', 'coverRatio', 'previewRatio'):
|
||||
|
|
@ -218,15 +217,15 @@ class Item(db.Model):
|
|||
self.save()
|
||||
|
||||
def save(self):
|
||||
db.session.add(self)
|
||||
db.session.commit()
|
||||
state.db.session.add(self)
|
||||
state.db.session.commit()
|
||||
|
||||
def delete(self, commit=True):
|
||||
db.session.delete(self)
|
||||
state.db.session.delete(self)
|
||||
Sort.query.filter_by(item_id=self.id).delete()
|
||||
Transfer.query.filter_by(item_id=self.id).delete()
|
||||
if commit:
|
||||
db.session.commit()
|
||||
state.db.session.commit()
|
||||
|
||||
meta_keys = ('title', 'author', 'date', 'publisher', 'edition', 'language')
|
||||
|
||||
|
|
@ -392,13 +391,13 @@ class Item(db.Model):
|
|||
if os.path.exists(path):
|
||||
os.unlink(path)
|
||||
remove_empty_folders(os.path.dirname(path))
|
||||
db.session.delete(f)
|
||||
state.db.session.delete(f)
|
||||
user = state.user()
|
||||
if user in self.users:
|
||||
self.users.remove(user)
|
||||
for l in self.lists.filter_by(user_id=user.id):
|
||||
l.items.remove(self)
|
||||
db.session.commit()
|
||||
state.db.session.commit()
|
||||
if not self.users:
|
||||
self.delete()
|
||||
else:
|
||||
|
|
@ -424,8 +423,8 @@ class Sort(db.Model):
|
|||
f = cls.get(item_id)
|
||||
if not f:
|
||||
f = cls(item_id=item_id)
|
||||
db.session.add(f)
|
||||
db.session.commit()
|
||||
state.db.session.add(f)
|
||||
state.db.session.commit()
|
||||
return f
|
||||
|
||||
for key in config['itemKeys']:
|
||||
|
|
@ -467,8 +466,8 @@ class Find(db.Model):
|
|||
f = cls.get(item, key)
|
||||
if not f:
|
||||
f = cls(item_id=item, key=key)
|
||||
db.session.add(f)
|
||||
db.session.commit()
|
||||
state.db.session.add(f)
|
||||
state.db.session.commit()
|
||||
return f
|
||||
|
||||
class File(db.Model):
|
||||
|
|
@ -499,8 +498,8 @@ class File(db.Model):
|
|||
if path:
|
||||
f.path = path
|
||||
f.item_id = Item.get_or_create(id=sha1, info=info).id
|
||||
db.session.add(f)
|
||||
db.session.commit()
|
||||
state.db.session.add(f)
|
||||
state.db.session.commit()
|
||||
return f
|
||||
|
||||
def __repr__(self):
|
||||
|
|
@ -556,8 +555,8 @@ class File(db.Model):
|
|||
self.save()
|
||||
|
||||
def save(self):
|
||||
db.session.add(self)
|
||||
db.session.commit()
|
||||
state.db.session.add(self)
|
||||
state.db.session.commit()
|
||||
|
||||
|
||||
class Transfer(db.Model):
|
||||
|
|
@ -587,8 +586,8 @@ class Transfer(db.Model):
|
|||
return t
|
||||
|
||||
def save(self):
|
||||
db.session.add(self)
|
||||
db.session.commit()
|
||||
state.db.session.add(self)
|
||||
state.db.session.commit()
|
||||
|
||||
class Metadata(db.Model):
|
||||
__tablename__ = 'metadata'
|
||||
|
|
@ -626,14 +625,14 @@ class Metadata(db.Model):
|
|||
|
||||
def save(self):
|
||||
self.modified = datetime.utcnow()
|
||||
db.session.add(self)
|
||||
db.session.commit()
|
||||
state.db.session.add(self)
|
||||
state.db.session.commit()
|
||||
|
||||
def reset(self):
|
||||
user = state.user()
|
||||
Changelog.record(user, 'resetmeta', self.key, self.value)
|
||||
db.session.delete(self)
|
||||
db.session.commit()
|
||||
state.db.session.delete(self)
|
||||
state.db.session.commit()
|
||||
self.update_items()
|
||||
|
||||
def edit(self, data):
|
||||
|
|
|
|||
|
|
@ -41,6 +41,6 @@ class Person(db.Model):
|
|||
self.sortname = unicodedata.normalize('NFKD', self.sortname)
|
||||
self.sortsortname = ox.sort_string(self.sortname)
|
||||
self.numberofnames = len(self.name.split(' '))
|
||||
db.session.add(self)
|
||||
db.session.commit()
|
||||
state.db.session.add(self)
|
||||
state.db.session.commit()
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import ox
|
|||
|
||||
from app import app
|
||||
import settings
|
||||
from settings import db
|
||||
import db
|
||||
from item.models import File
|
||||
from user.models import User, List
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ extensions = ['epub', 'pdf', 'txt']
|
|||
|
||||
def remove_missing():
|
||||
dirty = False
|
||||
with app.app_context():
|
||||
with db.session():
|
||||
prefs = settings.preferences
|
||||
prefix = os.path.join(os.path.expanduser(prefs['libraryPath']), 'Books/')
|
||||
if os.path.exists(prefix):
|
||||
|
|
@ -39,7 +39,7 @@ def remove_missing():
|
|||
dirty = True
|
||||
f.item.remove_file()
|
||||
if dirty:
|
||||
db.session.commit()
|
||||
state.db.session.commit()
|
||||
|
||||
def add_file(id, f, prefix, from_=None):
|
||||
user = state.user()
|
||||
|
|
@ -49,10 +49,10 @@ def add_file(id, f, prefix, from_=None):
|
|||
item = file.item
|
||||
if 'primaryid' in file.info:
|
||||
del file.info['primaryid']
|
||||
db.session.add(file)
|
||||
state.db.session.add(file)
|
||||
if 'primaryid' in item.info:
|
||||
item.meta['primaryid'] = item.info.pop('primaryid')
|
||||
db.session.add(item)
|
||||
state.db.session.add(item)
|
||||
item.users.append(user)
|
||||
Changelog.record(user, 'additem', item.id, file.info)
|
||||
if item.meta.get('primaryid'):
|
||||
|
|
@ -65,7 +65,7 @@ def add_file(id, f, prefix, from_=None):
|
|||
|
||||
def run_scan():
|
||||
remove_missing()
|
||||
with app.app_context():
|
||||
with db.session():
|
||||
prefs = settings.preferences
|
||||
prefix = os.path.join(os.path.expanduser(prefs['libraryPath']), 'Books/')
|
||||
if not prefix[-1] == '/':
|
||||
|
|
@ -96,7 +96,7 @@ def run_scan():
|
|||
def run_import(options=None):
|
||||
options = options or {}
|
||||
|
||||
with app.app_context():
|
||||
with db.session():
|
||||
prefs = settings.preferences
|
||||
prefix = os.path.expanduser(options.get('path', prefs['importPath']))
|
||||
if os.path.islink(prefix):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue