An instance of this class represents the complete history detail report.
You pass a list of EffortKey instances and it
pulls the corresponding data from the database.
It uses an xnomo3.Txny instance to sort
records into phylogenetic order.
You pass in a LayoutFactory instance that
implements either the split-column or lumped-column
organization for cases where multiple selected circles are
worked in the same year.
You can specify a census filter (see Section 14.1, “census-filter”) that can select
census records, modify bird names, or both.
# - - - - - c l a s s C b c H i s t
class CbcHist(object):
'''Represents the history of a set of efforts.
Exports:
CbcHist(db, effKeyList, txny, layoutFactory, cenFilter=None):
[ (db is a pycbc.CBCData instance) and
(effKeyList is an iterable containing EffortKey
instances) and
(txny is a taxonomy of birds as an xnomo3.Txny instance) and
(layoutFactory is a subclass of ColumnLayout) and
(cenFilter is a census-filter, defaulting to no filtering) ->
if (resulting number of columns) < COLUMN_COUNT_LIMIT ->
return a new CbcHist instance representing those values,
with census records for the effort keys in effKeyList
extracted from db and filtered by cenFilter
else -> raise ScriptError ]
.db: [ as passed to constructor ]
.effKeyList: [ as passed to constructor ]
.txny: [ as passed to constructor ]
.cenFilter: [ as passed to constructor ]
.nCols: [ number of logical columns in self's layout ]
.keyRow: [ a KeyRow instance ]
.partyHoursRow: [ a PartyHoursRow instance ]
.nPhysRows(maxPhysRows):
.nCensusRows(): [ return the number of census rows in self ]
.genCensusRows():
[ generate the census rows of self as a sequence of CensusRow
instances in order by (taxonomic key number, English name) ]
.findColumn(effKey):
[ effKey is an EffortKey instance ->
if effKey matches an effort in self's column layout ->
return the logical column index of the column that
displays data for effort with key (effKey)
else -> raise KeyError ]
.colLabel(k):
[ if 0 <= k < (number of logical columns in self) ->
return the label for logical column [k]
else -> raise KeyError ]
.genColLabels():
[ generate the column labels in self's column layout as a
sequence of strings ]
Internally we manage these values.
State/Invariants:
._columnLayout:
[ the result of calling layoutFactory, an instance of a
ColumnLayout concrete class ]
._rowMap:
[ a dictionary whose keys are the row keys in self, and each
related value is the CensusRow with data for the
corresponding kind of bird ]
'''