113 lines
4 KiB
Python
113 lines
4 KiB
Python
# -*- coding: utf-8 -*-
|
|
"default plugin for setting: set it in a simple dictionary"
|
|
# Copyright (C) 2014 Team tiramisu (see AUTHORS for all contributors)
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify it
|
|
# under the terms of the GNU Lesser General Public License as published by the
|
|
# Free Software Foundation, either version 3 of the License, or (at your
|
|
# option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
|
# details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
# ____________________________________________________________
|
|
from ..util import Cache
|
|
from .util import SqlAlchemyBase
|
|
import util
|
|
from sqlalchemy import Column, Integer, String, PickleType, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.ext.associationproxy import association_proxy
|
|
from sqlalchemy.orm.collections import attribute_mapped_collection
|
|
|
|
|
|
#____________________________________________________________
|
|
#
|
|
# properties|permissives
|
|
class _Property(SqlAlchemyBase):
|
|
__tablename__ = 'property'
|
|
id = Column(Integer, primary_key=True)
|
|
setting = Column(Integer, ForeignKey('settings.id'), nullable=False)
|
|
path = Column(String)
|
|
properties = Column(PickleType)
|
|
|
|
def __init__(self, path, properties):
|
|
self.path = path
|
|
self.properties = properties
|
|
|
|
|
|
class _Permissive (SqlAlchemyBase):
|
|
__tablename__ = 'permissive'
|
|
id = Column(Integer, primary_key=True)
|
|
setting = Column(Integer, ForeignKey('settings.id'), nullable=False)
|
|
path = Column(String)
|
|
permissives = Column(PickleType)
|
|
|
|
def __init__(self, path, permissives):
|
|
self.path = path
|
|
self.permissives = permissives
|
|
|
|
|
|
#____________________________________________________________
|
|
#FIXME marche pas le cache ... de toute facon je vais faire un storage separe !
|
|
class Settings(Cache, SqlAlchemyBase):
|
|
__tablename__ = 'settings'
|
|
id = Column(Integer, primary_key=True)
|
|
_props = relationship("_Property",
|
|
collection_class=attribute_mapped_collection('path'),
|
|
cascade="all, delete-orphan")
|
|
_properties = association_proxy("_props", "properties")
|
|
_perms = relationship("_Permissive",
|
|
collection_class=attribute_mapped_collection('path'),
|
|
cascade="all, delete-orphan")
|
|
_permissives = association_proxy("_perms", "permissives")
|
|
|
|
#def __init__(self, storage):
|
|
# super(Settings, self).__init__(storage)
|
|
|
|
# properties
|
|
def setproperties(self, path, properties):
|
|
self._properties[path] = properties
|
|
util.session.commit()
|
|
|
|
def getproperties(self, path, default_properties):
|
|
return self._properties.get(path, set(default_properties))
|
|
|
|
def hasproperties(self, path):
|
|
return path in self._properties
|
|
|
|
def reset_all_properties(self):
|
|
self._properties.clear()
|
|
util.session.commit()
|
|
|
|
def delproperties(self, path):
|
|
try:
|
|
del(self._properties[path])
|
|
util.session.commit()
|
|
except KeyError:
|
|
pass
|
|
|
|
# permissive
|
|
def setpermissive(self, path, permissive):
|
|
self._permissives[path] = frozenset(permissive)
|
|
util.session.commit()
|
|
|
|
def getpermissive(self, path=None):
|
|
ret = self._permissives.get(path, frozenset())
|
|
#replace None by a frozenset()
|
|
return {None: frozenset()}.get(ret, ret)
|
|
|
|
def get_modified_properties(self):
|
|
"""return all modified settings in a dictionary
|
|
example: {'path1': set(['prop1', 'prop2'])}
|
|
"""
|
|
return self._properties
|
|
|
|
def get_modified_permissives(self):
|
|
"""return all modified permissives in a dictionary
|
|
example: {'path1': set(['perm1', 'perm2'])}
|
|
"""
|
|
return self._permissives
|