This abstract class is used by the various data compilers.
Here is the start of the actual class, and its documentation string that describes the interface.
# - - - - - c l a s s B a s e C o m p i l e r - - - - - class BaseCompiler: '''Abstract base class for raw banding data compilers. Exports: BaseCompiler(fileName, stationSet, speciesSet): [ (fileName is the name of the raw banding data file) and (stationSet is a BaseStationSet object) and (speciesSet is a BaseSpeciesSet object) -> if fileName conforms to the batch file naming scheme and names a readable file -> return a new BaseCompiler object with those values else -> raise ValueError ] .fileName: [ as passed to constructor, read-only ] .stationSet: [ as passed to constructor, read-only ] .speciesSet: [ as passed to constructor, read-only ] .location: [ if fileName represents a multi-station batch -> a Location object representing that batch's location else -> None ] .station: [ if fileName represents a single-station batch -> a Station object representing that station else -> None ] .year: [ the batch year as a four-digit string ] .__iter__(): [ Log() +:= error messages from processing the contents of self.fileName as a batch file, if any generate a sequence of BaseEncounter records representing valid lines from that file, if any, and send any error messages to Log() ]
The class constructor takes three arguments:
This class must know the name of the input file because
the file name itself contains either a location code or a
station number, as well as the field year when the data
were taken. The
fileName argument must be
the path name of the raw input file. It must conform to
the batch file naming rules described in the specification.
stationSet is an object derived
BaseStationSet class. This
object defines the valid location and station codes.
speciesSet is an object derived from
BaseSpeciesSet class that defines
the valid species codes.
The constructor returns a new
object. This object is a Python generator that generates
the output records as a sequence of
BaseEncounter objects. The calling program
iterates over the
BaseCompiler object in a
for-loop, calling the
.flatten() method on each generated
BaseEncounter to object to translate that object
to a flat-file record that can be written to the output file.
So here's the main-sequence pseudocode of a typical compiler:
stationSet = StationSetYYYY(station authority file) speciesSet = SpeciesSetYYYY(species authority file) compiler = Compiler(raw file name, stationSet, speciesSet) for encounter in compiler: write encounter.flatten()
If the named file isn't readable, or contains errors, all
messages are sent to the
Additional exported attributes include:
Two two attributes named
.station track the type of batch
file—multi-station or single-station.
For batch files named for a location, the former is set
to the corresponding
Location object, and
the latter to
For single-station batch files,
None and the
.station attribute is set to a
Station object representing that batch's
.year attribute, a four-character
string of the form
"YYYY, is set from the
name of the file.