示例#1
0
def start():
    global ui
    ui.show()
    api = API()

    endtime = datetime.now()
    delta = endtime - starttime
    api.info('Initialization time: %s' % delta)
示例#2
0
def start():
    global ui
    ui.show()
    api = API()

    endtime = datetime.now()
    delta = endtime - starttime
    api.info('Initialization time: %s' % delta)
示例#3
0
def main():
    qtapp = QApplication(sys.argv)
    api = API()
    ui = UI(qtapp)

    ui.show()

    endtime = datetime.now()
    delta = endtime - starttime
    api.info('Initialization time: %s' % delta)
    qtapp.exec_()
示例#4
0
文件: raven.py 项目: averrin/demesne
def main():
    qtapp = QApplication(sys.argv)
    api = API()
    ui = UI(qtapp)

    ui.show()

    endtime = datetime.now()
    delta = endtime - starttime
    api.info('Initialization time: %s' % delta)
    qtapp.exec_()
示例#5
0
def start():
    global ui
    if ui.config.options.maximized:
        ui.showMaximized()
    else:
        ui.show()
    api = API()

    endtime = datetime.now()
    delta = endtime - starttime
    api.info('Initialization time: %s' % delta)

    ui.mainWidget.view.js('$.ajax("/settings")')
示例#6
0
def start():
    global ui
    if ui.config.options.maximized:
        ui.showMaximized()
    else:
        ui.show()
    api = API()

    endtime = datetime.now()
    delta = endtime - starttime
    api.info('Initialization time: %s' % delta)

    ui.mainWidget.view.js('$.ajax("/settings")')
示例#7
0
def main():
    qtapp = QApplication(sys.argv)
    qtTranslator = QTranslator()
    if qtTranslator.load(CWD+"lang/%s.qm" % QLocale.system().name()):
        qtapp.installTranslator(qtTranslator)
        print QLocale.system().name(), qtapp.tr('Translate loaded')
    ui = UI(qtapp)

    ui.showMaximized()
    api = API()

    endtime = datetime.now()
    delta = endtime - starttime
    api.info('Initialization time: %s' % delta)

    print 'Started'
    qtapp.exec_()
示例#8
0
文件: core.py 项目: averrin/demesne
class Core(QObject):                   #TODO: Split for CoreUI and Core (without using self.app)
    """
        Store all your app logic here
    """

    SetProgress = pyqtSignal(int)

    def __init__(self):
        QObject.__init__(self)
        self.app = None
        self.collection_desc = None

    def _afterInit(self):
        """
            when application totally init
        """
        self.api = API()
        self.api.ex = self.app.getMethod
        self.api.config = self.app.config
        self.main()
        # self.api.info('Core loaded.')


    def main(self):
        """
            dummy for main core method.
        """
        url = 'http://%s:%s/orlangur/_authenticate' % (
        self.api.config.options.app.orlangur_server, self.api.config.options.app.orlangur_port)
        data = {'username': self.api.config.options.app.orlangur_user,
                'password': self.api.config.options.app.orlangur_password}
        from urllib.error import URLError

        try:
            r = req.Request(url, parse.urlencode(data).encode('utf8'))
            req.urlopen(r).read()
            connection = Connection(self.api.config.options.app.orlangur_server,
                self.api.config.options.app.orlangur_port)
            db = connection.orlangur
            self.db = db
        except URLError:
            QMessageBox.warning(self.app, 'Error',
                'Orlangur server seems down')
            return


        self.compiler = pystache

        self.app.async(self.getConfig, self.assignConfig)


    def getConfig(self):
        """
            Fetch cloud config
        """
        return self.getCollection('en_clients', title='Orlangur')[0]


    def assignConfig(self, config):
        """
            Callback after getConfig
        """
        self.orlangur_config = config


    def fillList(self):
        """
            Refresh collections list. See fillList_callback as callback
        """
        self.app.list.clear()
        self.app.statusBar.showMessage('Fetching meta collection...')
        self.app.async(lambda: self.getCollection('__meta__'), self.fillList_callback)

    def fillList_callback(self, meta):
        """
            See fillList
        """
        meta = sorted(meta, key=lambda x: x['desc'])
        for collection_meta in meta:
            item = QListWidgetItem('%s' % collection_meta['desc'])
            self.app.list.addItem(item)
            item.collection = collection_meta['name']
        self.app.statusBar.showMessage('Collection list filled.')


    def onClick(self, item):
        """
            Collection mouse click handler #Yoda style comment
        """
        self.editCollection(item.collection, item.text())


    def editCollection(self, collection_name, collection_desc=None, callback=None):
        self.collection_name = collection_name
        if collection_desc is not None:
            self.collection_desc = collection_desc
        else:
            self.collection_desc = collection_name

        if callback is None:
            callback = self.editCollection_callback

        self.app.async(lambda: self.getCollection(collection_name, meta=True), callback)
        self.app.statusBar.showMessage('Fetching collection...')


    def editCollection_callback(self, collection):

        editor = self.app.addEditorTab(self.collection_desc)

        self.app.selectTab(self.collection_desc)
#        self.app.viewer.setHtml('')
#        self.app.item_list.clear()
        try:
            meta, collection = collection
        except ValueError:
            meta = ''

        if 'sort_field' in meta:
            collection = sorted(collection, key=lambda x: x[meta['sort_field']])

#        self.app.rp.setTabText(self.app.rp.tab_list['Editor'], self.collection_desc)
        self.app.statusBar.showMessage('Collection fetched successfully')
        editor.collection = self.collection_name

        content = json.dumps(collection, sort_keys=True, indent=4, ensure_ascii=False)

        editor.setText(content)
        editor.editor.setModified(False)
        editor.editor.setReadOnly(False)

        #TODO: make good html view

#        if 'item_template' in meta:
#            for item in collection:
#                self.app.addListItem(self.compiler.render(meta['item_template'], item))
#
#        if 'item_template_html' in meta:
#            html = '<div id="meta">'
#            for item in collection:
#                html += self.compiler.render('<div>%s</div>' % meta['item_template_html'], item)
#            html += '</div>'
#
#            self.app.viewer.setHtml(html)


    def getCollection(self, col_name, fetch=True, meta=False, order_by="", **kwargs):
        collection = self.db.__getattr__(col_name)
        if fetch:
            if not order_by:
                items = collection.find(criteria=kwargs)
            else:
                crit = kwargs
                crit['$sort'] = {'order_by': 1}
                items = collection.find(criteria=crit)
            if not meta or col_name == '__meta__':
                return items
            else:
                return [self.getCollection('__meta__', name=col_name)[0], items]
        else:
            if not meta or col_name == '__meta__':
                return collection
            else:
                return [self.getCollection('__meta__', name=col_name)[0], collection]


    def saveCollection(self, name, content, callback=None):
        edited = self.app.editors[name].editor.isModified()
        edited = True      #TODO: fix
        if edited:
            self.app.pb.setMaximum(len(content))
            self.SetProgress.connect(self.app.pb.setValue)
            self.app.async(lambda: self._saveCollection(name, content),
                lambda: self.saveCollection_callback(name, callback))
        else:
            self.app.statusBar.showMessage('Collection not modified')

    def saveCollection_callback(self, name, callback=None):
        self.api.info('Collection %s saved' % name)
        self.app.editors[name].setText(json.dumps(self.getCollection(name), sort_keys=True, indent=4, ensure_ascii=False))
        if callback is not None:
            callback()

    def _saveCollection(self, name, content):
        collection = self.getCollection(name, fetch=False)
        col_content = self.getCollection(name)
        items = [i['_id'] for i in col_content]
        new_ids = []
        for i in content:
            if '_id' in i:
                new_ids.append(i['_id'])
        for i in items:
            if i not in new_ids:
                collection.remove({'_id': i})

        for i, item in enumerate(content):
            self.SetProgress.emit(i)
            if '_id' in item:
                orig = ''
                for it in col_content:
                    if it['_id'] == item['_id']:
                        orig = it
                        break
                if orig and item != orig:
                    mods = {'$set': {}, '$unset': {}}
                    for key in item:
                        if key != '_id':
                            mods['$set'][key] = item[key]
                    for key in orig:
                        if key not in item:
                            mods['$unset'][key] = ""

                    print(mods)
                    collection.update({'_id': item['_id']}, mods)

            else:
                collection.insert(item)


    def editMeta(self):
        self.collection_name = '__meta__'
        self.collection_desc = 'Meta'
        self.app.async(lambda: self.getCollection('__meta__'), self.editCollection)


    def addCollection(self):
        name, status = QInputDialog.getText(self.app, 'Add collection', 'Collection name')
        if status:
            self.app.async(lambda: self._addCollection(name), self.fillList)


    def _addCollection(self, name):
        collection = self.getCollection('__meta__', fetch=False)
        collection.save({
            "desc": name,
            "name": name,
            "template": self.api.config.options.app.default_template})
        return True

    def delCollection(self):
        if self.app.list.currentItem():
            name = self.app.list.currentItem().collection
            msgBox = QMessageBox()
            msgBox.setText("Delete collection")
            msgBox.setInformativeText("Do you want to delete %s collection?" % name)
            msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
            msgBox.setDefaultButton(QMessageBox.No)
            msgBox.setDetailedText(json.dumps(self.getCollection(name), sort_keys=True, indent=4))
            ret = msgBox.exec_()
            if ret == QMessageBox.Yes:
#                self.app.editor.editor.setReadOnly(True)
                self.app.async(lambda: self._delCollection(name), self.fillList)

    def _delCollection(self, name):
        meta = self.getCollection('__meta__', fetch=False)
        meta.remove({'name': name})
        return True

    def backUp(self):
        self.app.pb.setVisible(True)
        self.app.async(self._backUp, lambda: self.app.statusBar.showMessage('Backuped successfully'))

    def _backUp(self):
        backup = {'__meta__': self.getCollection('__meta__')}
        self.app.pb.setMaximum(len(backup['__meta__']))
        for i, collection in enumerate(backup['__meta__']):
            print('Fetching %s' % collection['name'])
            backup[collection['name']] = self.getCollection(collection['name'])
            self.app.pb.setValue(i)

        json.dump(
            backup,
            open(os.path.join(self.api.CWD, 'backups', str(int(time())) + '.json'), 'w', encoding="utf8"),
            indent=4
        )