# $URL$ # $Id$ #logger=logging.getLogger('meresco.gui') #logging.config.fileConfig('/home/anton/server/lib/python/bzv/logging.conf') #pp=pprint.PrettyPrinter(indent=2) drilldownFieldNames = { 'drilldown.norm.date.year': {'en':'Year', 'nl':'Jaar'}, 'drilldown.norm.date.decennium': {'en':'Decennium', 'nl':'Decennium'}, 'drilldown.norm.date.centennium': {'en':'Century', 'nl':'Eeuw'}, 'drilldown.norm.name.oneinitial': {'en':'Name', 'nl':'Naam'}, 'drilldown.norm.name.lastname': {'en':'Top 10 Names', 'nl':'Top 10 Namen'}, 'drilldown.meta.repository.id': {'en':'Repository', 'nl':'Repository'}, 'drilldown.meta.repository.repositoryGroupId': {'en':'Source', 'nl':'Bron'}, 'drilldown.mods.classification': {'en':'Classification', 'nl':'Classificatie'}, 'drilldown.mods.genre': {'en':'Genre', 'nl':'Genre'}, 'drilldown.mods.language.languageTerm': {'en':'Language', 'nl':'Taal'}, 'drilldown.mods.relatedItem.titleInfo.title': {'en':'Journal/series', 'nl':'Tijdschrift/reeks'}, 'drilldown.mods.subject.topic': {'en':'Subject', 'nl':'Onderwerp'} } drilldownFields = [ ##### ##### TP: (field, number, sorted) ##### number == 0: all items? ('drilldown.mods.genre', 0, True), ##### #('drilldown.mods.name.namePart', 20, False), #('drilldown.norm.name.oneinitial', 20, False), #('drilldown.meta.repository.id', 10, False), ('drilldown.meta.repository.repositoryGroupId', 10, True), ('drilldown.mods.language.languageTerm', 10, True), ('drilldown.mods.relatedItem.titleInfo.title', 10, True), ('drilldown.mods.subject.topic', 10, True), ('drilldown.mods.classification', 10, True), ] drilldownFieldsNoMultiLevel = [] drilldownFieldsNoMultiLevel.extend(drilldownFields) drilldownFieldsNoMultiLevel.insert(0, ('drilldown.norm.name.lastname', 10, False)) drilldownFieldsNoMultiLevel.insert(0, ('drilldown.norm.date.centennium', 10, False)) groupName = { 'ir-uvt-nl' : {'en': 'Tilburg University Repository', 'nl': 'Tilburg University Repository'}, 'kuleuven-be' : {'en': 'EO: KU Leuven', 'nl': 'EO: KU Leuven'}, 'lse-ac-uk' : {'en': 'EO: London School of Economics', 'nl': 'EO: London School of Economics'}, 'opc-uvt-nl' : {'en': 'Catalogue', 'nl': 'Catalogus'}, 'repec-org' : {'en': 'RePEc', 'nl': 'RePEc'}, 'repub-eur-nl' : {'en': 'EO: Erasmus University Rotterdam', 'nl': 'EO: Erasmus Universiteit Rotterdam'}, 'tilburguniversity-nl': {'en': 'EO: Tilburg University', 'nl': 'EO: Universiteit van Tilburg'}, 'ulb-ac-be' : {'en': 'EO: Universite Libre de Bruxelles', 'nl': 'EO: Universite Libre de Bruxelles'}, 'unimaas-nl' : {'en': 'EO: Maastricht University', 'nl': 'EO: Universiteit Maastricht'}, } space = " " def fieldAndTermSplit(fieldAndTerm): return fieldAndTerm.split(':', 1) def fieldAndTermJoin(field, term): return '%s:%s' % (field, term) def shrink(aString, maxLength=160): if len(aString) > maxLength: return aString[:maxLength] + '...' return aString def createDrilldownQuery(drilldownArgs, httpQuery, sortKeys): newArguments = []; #[('query', httpQuery)] if sortKeys: newArguments.append(('sortKeys', sortKeys)) for existing in drilldownArgs: newArguments.append(('drilldown', existing)) return urlencode(newArguments) def displayLabel(label): return '
%s
' % label def displayTerm(term, fieldName, language, maxLength=25): if fieldName == 'drilldown.mods.genre': term = term.replace('info:eu-repo/semantics/', '') elif fieldName == 'drilldown.meta.repository.repositoryGroupId': term = groupName.get(term, {'en':term, 'nl':term})[language] elif fieldName == 'drilldown.norm.date.decennium': to = int(term) + 9 term = term + '-' + str(to) elif fieldName == 'drilldown.norm.date.centennium': to = int(term) + 99 term = term + '-' + str(to) return shrink(term, maxLength) def displayItem(query, term, selected, field, language, count): s = '\n' + space + ' ' s = s + escapeHtml(displayTerm(term, field, language)) + ' (' + str(count) + ')' s = s + '
' return s def displayFilter(query, value, label, term): s = '\n' + space + ' ' # s = s + label+ ': ' s = s + escapeHtml(term) s = s + '
' return s def displayDrilldownFields(total, bitMatrixRow, httpQuery, arguments, language): selectedFacets = arguments.get('drilldown', []) selectedFieldNames = {} if selectedFacets: for drilldownItem in selectedFacets: fieldName, value = fieldAndTermSplit(drilldownItem) if not fieldName in selectedFieldNames: selectedFieldNames[fieldName] = [] selectedFieldNames[fieldName].append(value) yield '\n' + space + '
' sortKeys = arguments.get('sortKeys', [''])[0] if total < 500000: ####### TP: result set is not too large, multilevel results will be calculated multilevelResults = any.multiLevelDrilldown(bitMatrixRow, ['date', 'author']) previousUpField = "" for (fieldName, levelField), termCounts in multilevelResults: upField = "" if levelField == "drilldown.norm.date.decennium" and "drilldown.norm.date.centennium" in selectedFieldNames: upField = "drilldown.norm.date.centennium" elif levelField == "drilldown.norm.date.year" and "drilldown.norm.date.centennium" in selectedFieldNames: upField = "drilldown.norm.date.centennium" elif levelField == "drilldown.norm.date.year" and "drilldown.norm.date.decennium" in selectedFieldNames: upField = "drilldown.norm.date.decennium" elif levelField == "drilldown.norm.name.oneinitial" and "drilldown.norm.name.lastname" in selectedFieldNames: upField = "drilldown.norm.name.lastname" if upField: for term in selectedFieldNames[upField]: if not (upField == previousUpField): label = drilldownFieldNames.get(upField, {'en':upField, 'nl':upField})[language] yield '\n' + space + ' %s' % displayLabel(label) yield '\n' + space + ' ' previousUpField = "" label = drilldownFieldNames.get(levelField, {'en':levelField, 'nl':levelField})[language] yield '\n' + space + ' %s' % displayLabel(label) yield '\n' + space + ' ' fields = drilldownFields else: ####### TP: result set is too large, only one level of the multilevel facests will be calculated. fields = drilldownFieldsNoMultiLevel # fields = drilldownFields drilldownResults = any.drilldown(bitMatrixRow, fields) drilldownResultsAsDict = dict(drilldownResults) for fieldName, number, sorted in fields: termCounts = drilldownResultsAsDict.get(fieldName,[]) label = drilldownFieldNames.get(fieldName, {'en':fieldName, 'nl':fieldName})[language] if termCounts == []: continue yield '\n' + space + ' %s' % displayLabel(label) yield '\n' + space + ' ' yield """ %(space)s
%(space)s """ % {'space': space} #def main(hits, httpQuery, arguments, path='', *args, **kwargs): def main(total, bitMatrixRow, httpQuery, arguments, path='', *args, **kwargs): language = path.startswith('/en/') and 'en' or 'nl' yield '\n' + space + '
' selectedFacets = arguments.get('drilldown', []) sortKeys = arguments.get('sortKeys', [''])[0] if selectedFacets: yield '\n' + space + '
' yield '\n' + space + '

%s

' % {'nl':'Beperkt tot', 'en':'Limited to'}[language] yield '\n %(space)s
%(space)s """ % {'space': space} if total > 0: yield displayDrilldownFields(total, bitMatrixRow, httpQuery, arguments, language)