def savedConditions(self): """Return a dictionary with saved Conditonals from all type formats. """ savedConditions = {} # all-type conditions for name, text in self.savedConditionText.items(): cond = conditional.Conditional(text) savedConditions[name] = cond # specific type conditions for typeFormat in self.values(): for name, text in typeFormat.savedConditionText.items(): cond = conditional.Conditional(text, typeFormat.name) savedConditions[name] = cond return savedConditions
def readFormat(self, formatData=None): """Read JSON format data into this format. Arguments: formatData -- JSON dict for this format (None for default settings) """ self.fieldDict = collections.OrderedDict() if formatData: for fieldData in formatData.get('fields', []): fieldName = fieldData['fieldname'] self.addField(fieldName, fieldData) else: formatData = {} self.titleLine = [formatData.get('titleline', '')] self.outputLines = [[line] for line in formatData.get('outputlines', [])] self.spaceBetween = formatData.get('spacebetween', True) self.formatHtml = formatData.get('formathtml', False) self.useBullets = formatData.get('bullets', False) self.useTables = formatData.get('tables', False) self.childType = formatData.get('childtype', '') self.genericType = formatData.get('generic', '') if 'condition' in formatData: self.conditional = conditional.Conditional(formatData['condition']) if 'childTypeLimit' in formatData: self.childTypeLimit = set(formatData['childTypeLimit']) self.iconName = formatData.get('icon', '') self.outputSeparator = formatData.get('outputsep', _defaultOutputSeparator) for key in formatData.keys(): if key.startswith('cond-'): self.savedConditionText[key[5:]] = formatData[key]
def __init__(self, name, parentFormats, attrs=None, addDefaultField=False): """Initialize a tree node. Arguments: name -- the type name string parentFormats -- a ref to TreeFormats class for outside field refs attrs -- the attributes that define this type's format addDefaultField -- if true, adds a default initial field """ self.name = name self.parentFormats = parentFormats self.idField = None if not attrs: attrs = {} self.spaceBetween = attrs.get('spacebetween', 'y').startswith('y') self.formatHtml = attrs.get('formathtml', '').startswith('y') self.useBullets = attrs.get('bullets', '').startswith('y') self.useTables = attrs.get('tables', '').startswith('y') self.childType = attrs.get('childtype', '') self.genericType = attrs.get('generic', '') self.conditional = conditional.Conditional(attrs.get('condition', '')) self.iconName = attrs.get('icon', '') self.outputSeparator = attrs.get('outputsep', _defaultOutputSeparator) self.savedConditionText = {} for key in attrs.keys(): if key.startswith('cond-'): self.savedConditionText[key[5:]] = attrs[key] self.fieldDict = collections.OrderedDict() self.derivedTypes = [] self.siblingPrefix = '' self.siblingSuffix = '' self.sortFields = [] # temporary storage while sorting if addDefaultField: self.addFieldIfNew(defaultFieldName) attrs['line0'] = '{{*{0}*}}'.format(defaultFieldName) attrs['line1'] = '{{*{0}*}}'.format(defaultFieldName) self.lineList = [['']] self.origLineList = [] # lines without bullet or table modifications lineNums = sorted( [int(key[4:]) for key in attrs.keys() if _lineAttrRe.match(key)]) if lineNums: self.lineList = [[attrs['line{0}'.format(keyNum)]] for keyNum in lineNums] if addDefaultField: self.updateLineParsing() if self.useBullets: self.addBullets() if self.useTables: self.addTables()
def updateDerivedRefs(self): """Update derived type lists (in generics) & the conditional type set. """ self.conditionalTypes = set() for typeFormat in self.values(): typeFormat.derivedTypes = [] if typeFormat.conditional: self.conditionalTypes.add(typeFormat) if typeFormat.genericType: self.conditionalTypes.add(self[typeFormat.genericType]) for typeFormat in self.values(): if typeFormat.genericType: genericType = self[typeFormat.genericType] genericType.derivedTypes.append(typeFormat) if genericType in self.conditionalTypes: self.conditionalTypes.add(typeFormat) for typeFormat in self.values(): if not typeFormat.genericType and not typeFormat.derivedTypes: typeFormat.conditional = conditional.Conditional() self.conditionalTypes.discard(typeFormat)
def removeField(self, field): """Remove all occurances of field from output lines. Arguments: field -- the field to be removed """ for lineData in self.lineList: while field in lineData: lineData.remove(field) self.lineList = [line for line in self.lineList if line] while len(self.lineList) < 2: self.lineList.append(['']) self.conditional.removeField(field.name) savedConditions = {} for name, text in self.savedConditionText.items(): condition = conditional.Conditional(text, self.name) condition.removeField(field.name) if condition: savedConditions[name] = condition.conditionStr() self.savedConditionText = savedConditions
def __init__(self, name, formatAttrs={}, defaultField=''): self.name = name self.fieldList = [] self.lineList = [] self.numEmptyFields = 0 self.numFullFields = 0 self.uniqueIDFields = [] self.childType = formatAttrs.get(u'childtype', '') self.genericType = formatAttrs.get(u'generic', '') self.conditional = conditional.Conditional( formatAttrs.get(u'condition', '')) self.sibPrefix = formatAttrs.get(u'sibprefix', '') self.sibSuffix = formatAttrs.get(u'sibsuffix', '') self.iconName = formatAttrs.get(u'icon', '') self.refField = None for key in formatAttrs.keys(): if NodeFormat.lineAttrRe.match(key): self.insertLine(formatAttrs.get(key, ''), int(key[4:])) if defaultField: htmlAttrs = globalref.options.boolData('HtmlNewFields') and \ {'html': 'y'} or {} self.addNewField(defaultField, htmlAttrs) self.addLine(u'{*%s*}' % defaultField) self.addLine(u'{*%s*}' % defaultField)