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