From: Karol L. <kar...@kn...> - 2007-04-25 22:14:01
|
Hi, I've already started, but I'd like to shortly summarize the changes I'm about to do in the trunk related to refactoring the parser, in the order they will proceed. Ideally, these changes won't break anything, but you never know, so be on the lookout! The goal is to get certain things working automatically and to move as many elements of the parsing process to the generic class LogFile, which in turn is supposed to make writing and modifying the child parsers easier in the future. 1) Move all calls to logger.infio() for newly created attributes to the method LogFile.__setattr__() - which is called automatically when an attibute is set. Prints the log message only if the attribute is new and present in LogFile.attrlist. 2) Up till now, we refrained from setting temporary attributes while parsing in order to keep things tidy. By utilizing an additional list attribute ("__nodelete"), these can be used (alot, if neede), and will be deleted after parsing (so the user does not see that they existed). Interestingly, this also requires that we keep LogFile.attrlist up-to-date :-) 3) THE MAJOR CHANGE - moving the "for line in inputfile" loop to LogFile.parse(). This may seem like just moving one line, but there are some extra things to change in order to keep things parsing (like using temporary attributes), and a number of things to consider. Note a paradigm shift in the way the parsers work: the method extract() will be now called many times instead of once. In my opinion, this is a natural step that makes the parsers more flexible and opens interesting possibilities for further enhacements, 4) Making fupdate and cupdate attributes of the class - this is reasonable, as then they won't have to be passed around to extract() in each call. 5) Numeric->numpy transition. This isn't strictly related to the refactoring, but it might as well be done at once. The related changes seem to be trivial. 6) A few other minor changes I might not remember at the moment, but will comment on. Any further changes to the parser structure really need to be discussed thouroughly so as not to waste development time. For example, as mentioned by Noel, we could choose to use a dictionary of functions that parse separate blocks of output (best if the keys are regexps). I like the idea, and the present changes are a step in that direction. It would be pretty, optimal, and well-structured, which all makes writing new parses easier and more fun. Then main question is - where would all these functions be defined? If they are to be class methods, things can get messy, since there will be quite a lot of them. But first things first. Hope this clears up the up-coming commits, Karol -- written by Karol Langner Thu Apr 26 01:24:12 CEST 2007 |