Example #1
0
    def modelsInit(cls, initPath, initName):
        out = dict()
        zipIndex = initPath[0].find(PyGlassModelUtils._ZIP_FIND)
        if  zipIndex == -1:
            moduleList = os.listdir(initPath[0])
        else:
            splitIndex = zipIndex+len(PyGlassModelUtils._ZIP_FIND)
            zipPath    = initPath[0][:splitIndex-1]
            modulePath = initPath[0][splitIndex:]
            z          = zipfile.ZipFile(zipPath)
            moduleList = []
            for item in z.namelist():
                item = os.sep.join(item.split('/'))
                if item.startswith(modulePath):
                    moduleList.append(item.rsplit(os.sep, 1)[-1])

        items = []
        for module in moduleList:
            if module.startswith('__init__.py') or module.find('_') == -1:
                continue

            parts    = module.rsplit('.', 1)
            parts[0] = parts[0].rsplit(os.sep, 1)[-1]
            if not parts[-1].startswith('py') or parts[0] in items:
                continue
            items.append(parts[0])

            m = None
            n = None
            r = None
            c = None
            try:
                n = module.rsplit('.', 1)[0]
                m = initName + '.' + n
                r = __import__(m, locals(), globals(), [n])
                c = getattr(r, n)
                out[n] = c
                if not c.__table__.exists(c.ENGINE):
                    c.__table__.create(c.ENGINE, True)

                    from pyglass.alembic.AlembicUtils import AlembicUtils
                    if AlembicUtils.hasAlembic:
                        AlembicUtils.stampDatabase(c.DATABASE_URL)
                        cls._logger.write(
                            u'CREATED: ' + unicode(c) + u' ' + unicode(c.__table__)
                            + u' [STAMPED head]'
                        )
            except Exception, err:
                cls._logger.writeError([
                    u'MODEL INITIALIZATION FAILURE:',
                    u'INIT PATH: ' + unicode(initPath),
                    u'INIT NAME: ' + unicode(initName),
                    u'MODULE IMPORT: ' + unicode(m),
                    u'IMPORT CLASS: ' + unicode(n),
                    u'IMPORT RESULT: ' + unicode(r),
                    u'CLASS RESULT: ' + unicode(c)
                ], err)
Example #2
0
    def _handleInitializeAllDatabases(self):
        self.mainWindow.showLoading(self)
        self.refreshGui()

        AlembicUtils.initializeAppDatabases(
            appName=self.currentAppItem.text(),
            resourcesPath=self.currentAppResourcesPath,
            localResourcesPath=self.currentLocalAppResourcesPath)

        self.mainWindow.hideLoading(self)
        self.refreshGui()
Example #3
0
    def _initializeImpl(self, *args, **kwargs):
        # Initialize databases
        import cadence.models.tracks as tracks
        headRevision = AlembicUtils.getHeadDatabaseRevision(databaseUrl=tracks.DATABASE_URL)
        myRevision = AlembicUtils.getCurrentDatabaseRevision(databaseUrl=tracks.DATABASE_URL)
        print('[TRACKS]: %s [HEAD %s]' % (myRevision, headRevision))

        import cadence.models.analysis as analysis
        headRevision = AlembicUtils.getHeadDatabaseRevision(databaseUrl=analysis.DATABASE_URL)
        myRevision = AlembicUtils.getCurrentDatabaseRevision(databaseUrl=analysis.DATABASE_URL)
        print('[ANALYSIS]: %s [HEAD %s]' % (myRevision, headRevision))

        super(CadenceMainWindow, self)._initializeImpl()
Example #4
0
    def upgradeDatabase(cls, databaseUrl):
        """upgradeDatabase doc..."""
        from pyglass.alembic.AlembicUtils import AlembicUtils

        if not AlembicUtils.hasAlembic:
            return False

        AlembicUtils.upgradeDatabase(
            databaseUrl=databaseUrl,
            resourcesPath=PyGlassEnvironment.getRootResourcePath(isDir=True),
            localResourcesPath=PyGlassEnvironment.getRootLocalResourcePath(isDir=True),
        )
        return True
Example #5
0
    def _handleCreate(self):
        self.mainWindow.showLoading(self)
        self.refreshGui()

        mainWidget = self.mainWindow.getWidgetFromID('main')

        AlembicUtils.createRevision(
            databaseUrl=mainWidget.currentDatabaseUrl,
            message=self.migrationTitle,
            resourcesPath=mainWidget.currentAppResourcesPath,
            localResourcesPath=mainWidget.currentLocalAppResourcesPath,
            info=self.migrationInfo)

        PyGlassBasicDialogManager.openOk(
            parent=self,
            header='New Revision Created',
            message='New migration revision file has been created.')

        self.mainWindow.hideLoading(self)
        mainWidget.refresh()
        self.mainWindow.setActiveWidget('main')
Example #6
0
    def _handleInitializeDatabase(self):
        self.mainWindow.showLoading(self)
        self.refreshGui()
        if AlembicUtils.initializeDatabase(
                databaseUrl=self.currentDatabaseUrl,
                resourcesPath=self.currentAppResourcesPath,
                localResourcesPath=self.currentLocalAppResourcesPath):
            PyGlassBasicDialogManager.openOk(
                self,
                'Initialization Complete',
                'Alembic migration environment created.')
        else:
            PyGlassBasicDialogManager.openOk(
                self,
                'Initialization Aborted',
                'Alembic migration already exists.')

        self.mainWindow.hideLoading(self)
Example #7
0
    def _refreshDatabaseDisplay(self):
        w = self.revisionsListWidget
        w.clear()

        if self.databasesListWidget.count() == 0:
            w.setEnabled(False)
            self.createRevisionBtn.setEnabled(False)
            self.initializeBtn.setEnabled(False)
            return
        else:
            w.setEnabled(True)
            self.createRevisionBtn.setEnabled(True)
            self.initializeBtn.setEnabled(True)

        revisions = AlembicUtils.getRevisionList(
            databaseUrl=self.currentDatabaseUrl,
            resourcesPath=self.currentAppResourcesPath)

        for rev in revisions:
            name = StringUtils.toText(rev.revision) + (' (HEAD)' if rev.is_head else '')
            DataListWidgetItem(name, w, data=rev)
Example #8
0
    def initialize(self, *args, **kwargs):
        if AlembicUtils.hasAlembic:
            self.pyGlassApplication.updateSplashScreen('Conforming internal data')
            AlembicUtils.upgradeAppDatabases(self.appID)

        self._initializeImpl(*args, **kwargs)
Example #9
0
import sqlalchemy as sqla
from pyaid.config.ConfigsDict import ConfigsDict
from pyaid.debug.Logger import Logger
from pyaid.file.FileUtils import FileUtils
from pyaid.string.StringUtils import StringUtils
from pyaid.system.SystemUtils import SystemUtils
from pyaid.time.TimeUtils import TimeUtils
from pyglass.alembic.AlembicUtils import AlembicUtils
from pyglass.app.PyGlassEnvironment import PyGlassEnvironment

from cadence.analysis.shared import DataLoadUtils

PyGlassEnvironment.initializeFromInternalPath(__file__)

import cadence.models.tracks as tracks
headRevision = AlembicUtils.getHeadDatabaseRevision(databaseUrl=tracks.DATABASE_URL)
myRevision = AlembicUtils.getCurrentDatabaseRevision(databaseUrl=tracks.DATABASE_URL)
tracksStamp = '[TRACKS]: %s [HEAD %s]' % (myRevision, headRevision)

import cadence.models.analysis as analysis
headRevision = AlembicUtils.getHeadDatabaseRevision(databaseUrl=analysis.DATABASE_URL)
myRevision = AlembicUtils.getCurrentDatabaseRevision(databaseUrl=analysis.DATABASE_URL)
analysisStamp = '[ANALYSIS]: %s [HEAD %s]' % (myRevision, headRevision)

from cadence.models.tracks.Tracks_SiteMap import Tracks_SiteMap
from cadence.models.analysis.Analysis_Sitemap import Analysis_Sitemap

try:
    # TODO: Working with Matplotlib in Virtual environments' in the Matplotlib FAQ
    from matplotlib import pyplot as plt
except Exception as err: