Пример #1
0
from models import Metric, Source, Plugin, PluginData, PluginModel
from core.plugins.lib.proxies import MetricProxy, SourceProxy, PluginProxy, PluginModelProxy
from core.util import InvalidObjectException, get_cls
from core.database.permissions import DatabasePermissionsManager
from core.manager import BaseManager
from sqlalchemy.exc import IntegrityError
from core.plugins.lib.models import DuplicateRecord
from realize.log import logging

log = logging.getLogger(__name__)

class DatabaseManager(BaseManager):
    id_vals = ["id", "hashkey"]
    modify_vals = ["date"]
    get_vals = ["created", "updated"]
    vals = id_vals + modify_vals + get_vals

    def __init__(self, context, session=None):
        super(DatabaseManager, self).__init__(context)
        self.session = session

        if self.plugin is not None:
            self.perm_manager = DatabasePermissionsManager(self.context)

    def get_or_create(self, obj, query_data=False):
        new_obj = self.get(obj, query_data=query_data)
        if new_obj is None:
            new_obj = self.add(obj)
        else:
            new_obj = self.translate_object(new_obj)
        return new_obj
Пример #2
0
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm.exc import FlushError
from factory.alchemy import SQLAlchemyModelFactory
from core.tests.base import db
import factory
from datetime import datetime
from core.database.models import User, Plugin, Metric, Source, PluginData, PluginModel,  UserItem, PluginView
from realize.log import logging

log = logging.getLogger(__name__)

class BaseFactory(SQLAlchemyModelFactory):
    FACTORY_SESSION = db.session

    @classmethod
    def _setup_next_sequence(cls, *args, **kwargs):
        """Compute the next available PK, based on the 'pk' database field."""
        session = cls.FACTORY_SESSION
        model = cls.FACTORY_FOR

        check_cls = model
        if model in [Plugin, Source, PluginModel, Metric]:
            check_cls = UserItem

        pk = getattr(check_cls, "id")
        pks = session.query(pk).all()

        if len(pks) > 0:
            max_pk = max(pks)[0]
        else:
            max_pk = None