From: pin Date: Wed, 7 Jul 2010 11:40:22 +0000 (+0000) Subject: refactoring : ajout d'un décorateur pour lire des données sans chager la position... X-Git-Url: https://scm.cri.ensmp.fr/git/minwii.git/commitdiff_plain/03cc372eac638f066800c45d6929b2b50701f36e?hp=eec2dd4ea183465c2c95546402447303ee6320e4 refactoring : ajout d'un décorateur pour lire des données sans chager la position de lecture dans le fichier. git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@274 fe552daf-6dbe-4428-90eb-1537e0879342 --- diff --git a/src/minwii/logfilereader.py b/src/minwii/logfilereader.py index 29425f7..a08855a 100755 --- a/src/minwii/logfilereader.py +++ b/src/minwii/logfilereader.py @@ -15,6 +15,14 @@ import pygame SUPPORTED_FILE_HEADER = 'ENV winwii log format version : 1.0' +def inplaceread(m) : + def readinplace(self, *args, **kw) : + self.savePos() + ret = m(self, *args, **kw) + self.recallPos() + return ret + return readinplace + class LogFileReader(object) : """ classe utilitaire pour l'accès aux données d'un fichier de log MinWii. @@ -29,93 +37,80 @@ class LogFileReader(object) : else : self.logfile = logfile + self.__pos = 0 + firstline = self.next() assert firstline == SUPPORTED_FILE_HEADER - + def savePos(self) : + self.__pos = self.logfile.tell() + self.logfile.seek(0) + + def recallPos(self) : + self.logfile.seek(self.__pos) + + @inplaceread def getSongFile(self) : "retourne le chemin d'accès au fichier musicxml de la chanson" - f = self.logfile - pos = f.tell() - - f.seek(0) for l in self : if l.startswith('APP chanson :') : break songfile = l.split(':', 1)[1].strip() - f.seek(pos) return songfile + @inplaceread def getSoundFontFile(self) : "retourne le chemin d'accès au fichier de la soundfont (*.sf2)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('ENV soundfont :') : break soundFontFile = l.split(':', 1)[1].strip() - f.seek(pos) return soundFontFile - + + @inplaceread def getBank(self) : "retourne le paramètre bank du synthétiseur (entier)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('APP bank :') : break - f.seek(pos) bank = l.split(':', 1)[1].strip() return int(bank) + @inplaceread def getPreset(self) : "retourne le paramètre preset du synthétiseur (entier)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('APP preset :') : break - f.seek(pos) preset = l.split(':', 1)[1].strip() return int(preset) + @inplaceread def getScreenResolution(self) : "retourne la résolution écran (tuple de deux entiers)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('ENV résolution écran :') : break screenResolution = eval(l.split(':', 1)[1].strip()) - f.seek(pos) return screenResolution + @inplaceread def getMode(self) : "retourne le niveau de difficulté" - f = self.logfile - pos = f.tell() for l in self : if l.startswith('APP mode :') : break mode = l.split(':', 1)[1].strip() - f.geek(pos) return mode + @inplaceread def getFirstEventTicks(self) : "retourne le timecode du premier événement (entier)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('EVT ') : break firstTicks = int(l.split(None, 2)[1]) - f.seek(pos) return firstTicks def __del__(self) :