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