def getType(self, aPath): osType = UnknownSubstance.getItemByPath(self.mTypes, aPath) if osType is not None: return osType return UnknownSubstance.unknown('UNKNOWN TYPE', aPath)
def getLanguage(self, aPath): language = UnknownSubstance.getItemByPath(self.mLanguages, aPath) if language is not None: return language return UnknownSubstance.unknown('UNKNOWN LANGUAGE', aPath)
def getVersion(self, aPath): version = UnknownSubstance.getItemByPath(self.mVersions, aPath) if version is not None: return version return UnknownSubstance.unknown('UNKNOWN VERSION', aPath)
def getKB(aPath): length = len(aPath) startKB = aPath.find('KB') if startKB != -1 and startKB + 2 < length: startKB += 2 endKB = startKB while endKB < length and aPath[endKB].isdigit(): endKB += 1 if endKB - startKB > 0: return int(aPath[startKB:endKB]) return UnknownSubstance.unknown('UNKNOWN KB', aPath)
def get(self, aQuery, aLimit=-1, aSkip=0, aSort=None): statement = ('SELECT kb_id, Date, Path, Version, Type, Language FROM Updates' ' INNER JOIN KBs ON kb_id LIKE KBs.id' ' INNER JOIN Dates ON date_id LIKE Dates.id' ' INNER JOIN Paths ON path_id LIKE Paths.id' ' INNER JOIN Versions ON version_id LIKE Versions.id' ' INNER JOIN Types ON type_id LIKE Types.id' ' INNER JOIN Languages ON language_id LIKE Languages.id') if aQuery: subStatement = [] for key in Updates.validKeys: if key in aQuery.keys(): if 'Date' == key: aQuery[key] = core.dates.toString(aQuery[key]) value = aQuery[key] if 'KB' == key: key = 'KBs.id' if isinstance(value, int): subStatement.append('{} LIKE {}'.format(key, value)) elif isinstance(value, str): subStatement.append('{} LIKE \'{}\''.format(key, value)) elif isinstance(value, list): value = '{}'.format(value) value = value.replace('[', '') value = value.replace(']', '') subStatement.append('{} IN ({})'.format(key, value)) if subStatement: statement = '{} WHERE {}'.format(statement, subStatement[0]) for i in range(1, len(subStatement)): statement = '{} AND {}'.format(statement, subStatement[i]) statement = statement.replace('\\\\', '\\') if aSort: for key in Updates.validKeys: if key in aSort.keys(): value = aSort[key] if 'KB' == key: key = 'KBs.id' if (isinstance(value, int) and value < 0): value = 'DESC' else: value = 'ASC' statement = '{} ORDER BY {} {}'.format(statement, key, value) break statement = '{} LIMIT {} OFFSET {}'.format(statement, aLimit, aSkip) readResult = db.sqliteDB.readAsync(self.mInit, statement, lambda l: l.fetchall()) if not readResult: return [] kb_num = 0 date_num = 1 path_num = 2 version_num = 3 type_num = 4 language_num = 5 updates = [] for r in readResult: update = {} update['Date'] = core.dates.toDate(r[date_num]) update['Path'] = r[path_num] if -1 != r[kb_num]: update['KB'] = r[kb_num] else: update['KB'] = UnknownSubstance.unknown('UNKNOWN KB', update['Path']) if 'UNKNOWN VERSION' != r[version_num]: update['Version'] = r[version_num] else: update['Version'] = UnknownSubstance.unknown('UNKNOWN VERSION', update['Path']) if 'UNKNOWN TYPE' != r[type_num]: update['Type'] = r[type_num] else: update['Type'] = UnknownSubstance.unknown('UNKNOWN TYPE', update['Path']) if 'UNKNOWN LANGUAGE' != r[language_num]: update['Language'] = r[language_num] else: update['Language'] = UnknownSubstance.unknown('UNKNOWN LANGUAGE', update['Path']) updates.append(update) updates = Updates.separateToKnownAndUnknown(updates) updates['known'].extend(updates['unKnown']) updates = updates['known'] return updates
def getPathKey(self, aValue): return UnknownSubstance.getKeyPathByValue( self.mCalligraphicTypes, aValue)