Exemplo n.º 1
0
    def slot_openConfig(self, force):
        """
        """
        zpath = self.settings.getSetting("configFile")
        if force or (not os.path.isfile(zpath)):
            dir = os.path.dirname(str(zpath))
            if not os.path.isdir(dir):
                dir = None
            zpath = getFile(_("Choose Configuration File"),
                    startDir=dir, defaultSuffix="zip",
                    filter=(_("zip Files"), ("*.zip",)),
                    create=True)
            if not zpath:
                return False
        if isinstance(zpath, unicode):
            zpath = zpath.encode('utf8')

        self.save()     # If a folder is open, save it and close it

        self.source = CfgZip(zpath)
        if not self.source.isOpen():
            warning(_("The supplied configuration file (%s) could"
                    " not be opened. A completely empty configuration"
                    " will be created.") % zpath)

        self.baseFolder = os.path.dirname(zpath)

        self.gui.setTitle(_("Config Editor: %s") % zpath)
        self.gui.setLabel(_("For database: %s") % self.source.cfgName)

        self.settings.setSetting("configFile", zpath)
        self.buildTree()
        return True
Exemplo n.º 2
0
    def slot_sync(self, arg):
        """Perform a synchronization with a selected database file
        but as adminstrative user.
        This allows even a finalized database to be updated.
        """
        sfile = self.settings.getSetting("syncFile")
        if sfile:
            sdir = os.path.dirname(sfile)
            sfile = os.path.basename(sfile)
        else:
            sdir = None

        syncfile = getFile(_("User database file"),
                startDir=sdir, startFile=sfile,
                defaultSuffix=".zga",
                filter=(_("Report Files"), (u"*.zga",)))
        if not syncfile:
            return
        self.settings.setSetting("syncFile", syncfile)

        dbs = DBs(syncfile)
        if not dbs.isOpen():
            return

        sdbname = dbs.getConfig(u"dbname")
        dbs.close()

        if (self.dbname != sdbname):
            warning(_("%s: Database name does not match current master name") %
                    syncfile)
            return

        self.dlg = Output()
        synchronize(self.master, syncfile, self.dlg)
        self.dlg.done()
Exemplo n.º 3
0
    def slot_printSubject(self, arg):
        """Use class LayoutUnits to format the reports for all pupils
        in the present class taking this subject, then present a
        print dialog.
        """
        # Save current report
        self.slot_pupilChanged(-1)
        # Restore current report
        self.slot_pupilChanged(self.pupilIx)

        asc = autoSpellCheck
        if asc:
            __builtin__.autoSpellCheck = False

        if arg:
            plist = [self.currentPupilId]
        else:
            plist = self.pupils

        lu = LayoutUnits(self.db, self.subject, plist)

        if asc:
            __builtin__.autoSpellCheck = True

        npages = len(lu.pages)
        if not npages:
            warning(_("No pages to print"))
            return
        dlg = printDialog(npages)
        if not dlg: return

        start = dlg.start()
        end = dlg.end()
        if (start > end): return

        even = dlg.even()
        odd = dlg.odd()

        pages = []
        for i in range(start, end+1):
            if (i % 2):
                if odd:
                    pages.append(i)
            elif even:
                pages.append(i)

        if dlg.reverse():
            pages.reverse()

        if dlg.toPdf():
            pdfFile = getFile(_("Print to pdf-file"),
                    startFile=u"print.pdf",
                    defaultSuffix=u"pdf",
                    filter=(_("pdf Files"), (u"*.pdf",)),
                    create=True)
            if pdfFile:
                lu.printout(pdfFile, pages)
        else:
            lu.printout(None, pages)
Exemplo n.º 4
0
 def getBDbPath(self):
     """Select a database backup file.
     Return None if cancelled.
     """
     dir0 = self.settings.getSetting("destDir")
     dbpath = getFile(_("Source File"), dir0,
             filter=(_("Backup Files"), (u"*.zgb",)))
     if dbpath:
         self.settings.setSetting("destDir", os.path.dirname(dbpath))
     return dbpath
Exemplo n.º 5
0
 def getBDbPath(self):
     """Select a database backup file.
     Return None if cancelled.
     """
     dir0 = self.settings.getSetting("destDir")
     dbpath = getFile(_("Source File"),
                      dir0,
                      filter=(_("Backup Files"), (u"*.zgb", )))
     if dbpath:
         self.settings.setSetting("destDir", os.path.dirname(dbpath))
     return dbpath
Exemplo n.º 6
0
    def init(self, gui, filepath, forceDialog=False):
        self.gui = gui
        self.filepath = filepath

        # Get the path to the user database file
        self.dbs = None
        dbDir = None
        dbPath = self.settings.getSetting("dbFile")
        while True:
            if not self.filepath:
                if dbPath:
                    dbd = os.path.dirname(dbPath)
                    if os.path.isdir(dbd):
                        dbDir = dbd
                    if os.path.isfile(dbPath):
                        self.filepath = dbPath
                    dbPath = None

                if forceDialog or not self.filepath:
                    self.filepath = getFile(_("User Database File"),
                            startDir=dbDir,
                            defaultSuffix=u".zga",
                            filter=(_("Database Files"), (u"*.zga",)))
                    if not self.filepath: return

            self.dbs = DBs(self.filepath)
            if self.dbs.isOpen():
                break
            dbDir = os.path.dirname(self.filepath)
            self.filepath = None

        self.settings.setSetting("dbFile", self.filepath)

        # Set window title
        self.gui.setTitle(_("Synchronize %s") % self.filepath)

        self.dbm = None
        # Get the default host name from the 'base' data
        self.dbhost = self.dbs.baseDict[u"masterHost"]

        # Get information from the 'config' table
        self.dbname = self.dbs.getConfig(u"dbname")
        teacher = self.dbs.getConfig(u"me")
        if not teacher:
            error(_("'%s' is not a teacher's database file") % self.filepath)
        self.dbuser = teacher2user(teacher)

        # Close user database file
        self.closeFile()

        # set gui lineEdits
        self.gui.setDBinfo(self.dbhost, self.dbname, self.dbuser,
                self.filepath)
Exemplo n.º 7
0
def selectDBFile(settings=None, force=True, dbSuffix=u"zga"):
    """Open a db file. Also do extended initialization (call self.init).
    force=True => always put up a selection dialog, else try
    getting the file from the 'settings' facility first.
    If it puts up a dialog the start directory will be that of
    the remembered file, or - if that doesn't exist - the user's
    home directory.
     -> DB object, or 'None' if 'cancel' selected
    """
    dbDir = None
    if settings:
        dbFile = settings.getSetting("dbFile")
    else:
        dbFile = None
    while True:
        if force:
            if dbFile:
                dbd = os.path.dirname(dbFile)
                if os.path.isdir(dbd):
                    dbDir = dbd

            dbFile = getFile(
                _("Select database file"),
                startDir=dbDir,
                defaultSuffix=dbSuffix,
                filter=(_("Database Files"), (u"*.%s" % dbSuffix,)),
            )

            if not dbFile:
                return None
            if settings:
                settings.setSetting("dbFile", dbFile)

        db = DB(dbFile)
        if db.isOpen():
            db.init()
            return db
        force = True
Exemplo n.º 8
0
    def slot_sync(self, arg):
        """Perform a synchronization with a selected database file
        but as adminstrative user.
        This allows even a finalized database to be updated.
        """
        sfile = self.settings.getSetting("syncFile")
        if sfile:
            sdir = os.path.dirname(sfile)
            sfile = os.path.basename(sfile)
        else:
            sdir = None

        syncfile = getFile(_("User database file"),
                           startDir=sdir,
                           startFile=sfile,
                           defaultSuffix=".zga",
                           filter=(_("Report Files"), (u"*.zga", )))
        if not syncfile:
            return
        self.settings.setSetting("syncFile", syncfile)

        dbs = DBs(syncfile)
        if not dbs.isOpen():
            return

        sdbname = dbs.getConfig(u"dbname")
        dbs.close()

        if (self.dbname != sdbname):
            warning(
                _("%s: Database name does not match current master name") %
                syncfile)
            return

        self.dlg = Output()
        synchronize(self.master, syncfile, self.dlg)
        self.dlg.done()
Exemplo n.º 9
0
def selectDBFile(settings=None, force=True, dbSuffix=u"zga"):
    """Open a db file. Also do extended initialization (call self.init).
    force=True => always put up a selection dialog, else try
    getting the file from the 'settings' facility first.
    If it puts up a dialog the start directory will be that of
    the remembered file, or - if that doesn't exist - the user's
    home directory.
     -> DB object, or 'None' if 'cancel' selected
    """
    dbDir = None
    if settings:
        dbFile = settings.getSetting("dbFile")
    else:
        dbFile = None
    while True:
        if force:
            if dbFile:
                dbd = os.path.dirname(dbFile)
                if os.path.isdir(dbd):
                    dbDir = dbd

            dbFile = getFile(_("Select database file"),
                             startDir=dbDir,
                             defaultSuffix=dbSuffix,
                             filter=(_("Database Files"),
                                     (u"*.%s" % dbSuffix, )))

            if not dbFile:
                return None
            if settings:
                settings.setSetting("dbFile", dbFile)

        db = DB(dbFile)
        if db.isOpen():
            db.init()
            return db
        force = True
Exemplo n.º 10
0
    def save(self, onlytemp=False, force=False, imageX=None):
        """Save the data to a temporary file, close it and then ask if
        the original file should be replaced by it.
        If onlytemp is True, stop after saving the data to the
        temporary file, leaving the source file open, and fail if that
        didn't work first time. Otherwise the possibility of entering
        an alternative save path will be given.
        If force is True, don't ask, just do everything.
        If imageX is a directory path, get the images from there
        instead of from the source file
        """
        if not self.baseFolder:
            return
        cfgFile = os.path.join(self.baseFolder, self.source.cfgName + '.zip')
        tmpsave = cfgFile + '_'
        backup = cfgFile + '~'

        while True:
            try:
                if os.path.exists(tmpsave):
                    os.remove(tmpsave)
                self.saveData(tmpsave, imageX)
                if onlytemp:
                    messageDialog(_("Information"),
                            _("Saved as '%s'") % tmpsave)
                    return
                self.source.close()
                break

            except:
                traceback.print_exc()
                warning(_("Could not save data to '%s'") % tmpsave)
                if onlytemp:
                    return
                tmpsave = getFile(_("Save file to"),
                        startDir=os.path.dirname(tmpsave),
                        defaultSuffix="zip",
                        filter=(_("zip Files"), ("*.zip",)),
                        create=True)
                if isinstance(tmpsave, unicode):
                    tmpsave = tmpsave.encode('utf8')
            if not tmpsave:
                return


        if (not force) and (not confirmationDialog(_("Replace existing file?"),
                _("The changes have been saved to '%s'.\n"
                "Should this now replace the previous data?") % tmpsave)):
            return

        try:
            if os.path.exists(backup):
                os.remove(backup)
            if os.path.exists(cfgFile):
                os.rename(cfgFile, backup)
            os.rename(tmpsave, cfgFile)
            if imageX:
                self.baseFolder = None
                self.slot_openConfig(False)
            else:
                # For the control panel, to indicate that the file has
                # been saved:
                self.sourcePath = cfgFile
                self.validationObject.validateAll()
                self.errorCount = self.validationObject.errorCount
        except:
            traceback.print_exc()
            warning(_("Couldn't update configuration file '%s'") % cfgFile)