def list(self): #{ # helper: just print out the values passed in, just direct the forms action to forms/list c.query = {} c.query['type'] = 'normal' c.query['baseurl'] = self.base_url_advanced c.query['request'] = request.params return render('/main/results/list.mako')
def institutions(self): c.current_letter = letter = request.params.get('letter', 'a') # select stuff with no alpha letter # -browse:a* AND -browse:b* -browse:c* AND -browse:d* AND -browse:e* AND -browse:f* AND -browse:g* AND -browse:h* -browse:i* AND -browse:j* AND -browse:k* AND -browse:l* AND -browse:m* AND -browse:n* -browse:o* AND -browse:p* AND -browse:q* AND -browse:r* AND -browse:s* AND -browse:t* -browse:u* AND -browse:v* AND -browse:w* AND -browse:x* AND -browse:y* AND -browse:z* q = "browse:" + letter + "*" c.browse = self.browse(q, 'institutions') c.browsing = "institutions" return render('/main/browse.mako')
def locations(self): c.current_letter = letter = request.params.get('letter', 'a') q = "browse:" + letter + "* AND (" + \ fn.get_total_works_sent_from_place_fieldname() + ":[1 TO *] OR " + \ fn.get_total_works_sent_to_place_fieldname() + ":[1 TO *] OR " + \ fn.get_total_works_mentioning_place_fieldname() + ":[1 TO *])" c.browse = self.browse(q, 'locations') c.browsing = "locations" return render('/main/browse.mako')
def organisations(self): c.current_letter = letter = request.params.get('letter', 'a') is_org_field = escape_colons(fn.get_is_organisation_fieldname()) q = is_org_field + ":true AND browse:" + letter + "* AND (" + \ fn.get_total_works_written_by_agent_fieldname() + ":[1 TO *] OR " + \ fn.get_total_works_recd_by_agent_fieldname() + ":[1 TO *] OR " + \ fn.get_total_works_mentioning_agent_fieldname() + ":[1 TO *])" c.browse = self.browse(q, 'people', real_object='organisations') c.browsing = "organisations" return render('/main/browse.mako')
def works(self): default_year = get_default_year_for_browse() c.current_year = year = request.params.get('year', default_year) q = '(' + escape_colons( fn.get_start_year_fieldname()) + ':(' + year + ')' \ + ' OR ' \ + escape_colons( fn.get_end_year_fieldname()) + ':(' + year + '))' c.browse = self.browse(q, 'works', sortfield='started_date_sort asc') c.browsing = "works" return render('/main/browse.mako')
def document(self): """Render the error document""" icode = 404 code = "404" status = "Not Found" resp = request.environ.get('pylons.original_response') if resp and resp.body: content = literal(resp.body) else: content = request.GET.get('message', '') if content: content = cgi.escape(content) if resp and resp.status_int: icode = resp.status_int code = str(resp.status_int) elif request.GET.get('code', ''): code = request.GET.get('code') if code: code = cgi.escape(code) else: code = 404 if resp and resp.status: status = resp.status c.message = request.GET.get('message', '') if c.message: c.message = cgi.escape(c.message) else: c.message = content print code if code == "404": return render('/main/Four0Four.mako') else: return render('/main/error.mako') """Render the error document""" """
def index(self): requests = request.params if 'id' in requests: c.id = requests['id'] sol = solr.SolrConnection(solrconfig.solr_urls['all']) sol_response = sol.query("id:uuid_" + c.id, score=False, rows=1, start=0) if len(sol_response.results) == 1: obj = sol_response.results[0] if obj: c.record = obj return render('/main/thanks.mako') return redirect(url(controller='home'))
def i(self, id): uuid = self._decodeId(id) if len(uuid) == 36: sol = solr.SolrConnection(solrconfig.solr_urls['all']) sol_response = sol.query("uuid:" + uuid, fields=['object_type'], score=False, rows=1, start=0) if sol_response.numFound > 0: return redirect(url( controller='profile', action=sol_response.results[0]['object_type'], id=uuid), code=301) c.profile = {} return render('/main/profile.mako')
def index(self): iworkid = request.params.get('iwork_id', None) if iworkid: return redirect(url(controller='profile', action='w', iworkid=id)) profile_type = request.params.get('type', None) emlo_edit_id = request.params.get('id', None) if profile_type and emlo_edit_id: if profile_type == "person" or profile_type == "people" or profile_type == "persons": return redirect( url(controller='profile', action='p', ipersonid=emlo_edit_id)) if profile_type == "work" or profile_type == "works": return redirect( url(controller='profile', action='w', iworkid=emlo_edit_id)) if profile_type == "institution" or profile_type == "repository": return redirect( url(controller='profile', action='r', institutionid=emlo_edit_id)) if profile_type == "location" or profile_type == "locations": return redirect( url(controller='profile', action='l', locationid=emlo_edit_id)) c.profile = {} return render('/main/profile.mako')
def index(self): requests = request.params #if len( requests ) > 0: # a form has been submitted # return self.send() c.http_host = "" if 'id' in requests: c.id = requests['id'] sol = solr.SolrConnection(solrconfig.solr_urls['all']) sol_response = sol.query("id:uuid_" + c.id, score=False, rows=1, start=0) if len(sol_response.results) == 1: manuscript = None obj = sol_response.results[0] manuscript = sol_response.results[0] if manuscript: c.record = manuscript c.repository = None c.comment = '' c.messages = {} c.name = '' c.email = '' c.http_host = request.url return render('/main/comment.mako') return redirect(url(controller='home'))
def index(self): c.browse = None c.browsing = 'browse' return render('/main/browse.mako')
def index(self): # # Get main stats # sol_all = solr.SolrConnection(solrconfig.solr_urls["all"]) catalogue_fn = fn.get_catalogue_fieldname() organisation_fn = fn.get_is_organisation_fieldname() facet_fields = ['object_type', catalogue_fn, organisation_fn] sol_response_all = sol_all.query("*:*", rows=0, fl="-", score=False, facet='true', facet_limit=1000, facet_field=facet_fields) sol_all.close() c.stats = { 'works': { 'number': 0 }, 'people': { 'number': 0, 'url': '/browse/people' }, 'locations': { 'number': 0, 'url': '/browse/locations' }, 'organisations': { 'number': 0, 'url': '/browse/organisations' }, 'repositories': { 'number': 0, 'url': '/browse/institutions' }, 'manifestations': { 'number': 0 }, 'images': { 'number': 0 }, 'comments': { 'number': 0 }, 'related resources': { 'number': 0 }, 'catalogues': { 'number': 0, 'url': 'http://emlo-portal.bodleian.ox.ac.uk/collections/?page_id=480' } } for stat, num in sol_response_all.facet_counts['facet_fields'][ 'object_type'].iteritems(): if stat == 'institution': c.stats['repositories']['number'] = max(0, num) elif stat == 'comment': c.stats['comments']['number'] = num elif stat == 'image': c.stats['images']['number'] = num elif stat == 'location': c.stats['locations']['number'] = num elif stat == 'manifestation': c.stats['manifestations']['number'] = num elif stat == 'resource': c.stats['related resources']['number'] = num elif stat == 'work': c.stats['works']['number'] = num if "true" in sol_response_all.facet_counts['facet_fields'][ organisation_fn]: c.stats['organisations']['number'] = sol_response_all.facet_counts[ 'facet_fields'][organisation_fn]['true'] else: c.stats['organisations']['number'] = 0 if 'person' in sol_response_all.facet_counts['facet_fields'][ 'object_type']: c.stats['people']['number'] = sol_response_all.facet_counts[ 'facet_fields']['object_type']['person'] - c.stats[ 'organisations']['number'] catalogue_dict = sol_response_all.facet_counts['facet_fields'][ catalogue_fn] if 'No catalogue specified' not in catalogue_dict.keys(): c.stats['catalogues']['number'] = len(catalogue_dict) else: c.stats['catalogues']['number'] = len(catalogue_dict) - 1 # tweak numbers - none of these numbers will change frequently, if ever. ("Number of everything" minus "Number of ones we want") if config['project'] == "EMLO": if c.stats['people']['number'] >= 21985: c.stats['people']['number'] -= ( 21985 - 20097 ) # Remove people who have no connection to a letter if c.stats['organisations']['number'] >= 948: c.stats['organisations']['number'] -= ( 948 - 806 ) # Remove orginisations who have no connection to a letter if c.stats['images']['number'] >= 48661: c.stats['images']['number'] -= ( 48661) # Remove images of the bodleian card catalogue if c.stats['locations']['number'] > 5931: c.stats['locations']['number'] -= ( 5931 - 5190 ) # Remove locations which have no connection to a letter return render('/main/home.mako')
def advanced(self): #{ global queries queries = [] default_facet_values = { get_author_uri_fieldname(): "aut", get_addressee_uri_fieldname(): "rec", get_origin_uri_fieldname(): "pla_ori_name", get_destination_uri_fieldname(): "pla_des_name", get_catalogue_fieldname(): "col_cat", get_start_year_fieldname(): "dat_sin_year" } facet_values = {} for facname, facval in default_facet_values.iteritems(): #{ # Check if we are querying on a URI field or catalogue via facet. # Don't try further faceting if so (no further drilldown is possible within this field). if facname in request.params.keys(): #{ if facname == get_catalogue_fieldname(): #{ continue #} requestval = request.params[facname] if requestval.startswith( 'http'): #{ # we are already querying on a URI field continue #} #} # Similarly if we are querying on a year or catalogue via dropdown list, # don't try further faceting (no further drilldown possible). elif (facval == 'dat_sin_year' or facval == 'col_cat') and facval in request.params.keys(): #{ continue #} facet_values[facname] = default_facet_values[facname] #} requests = request.params.copy() for name, value in request.params.iteritems(): if value and name in facet_values: requests[facet_values[name]] = value del requests[name] #endif #endfor #highlight = {} c.query = {} c.query['type'] = 'advanced' c.query['baseurl'] = self.base_url_advanced c.query['fields'] = {} c.query['rows'] = str(get_default_rows_per_page()) c.query['start'] = '0' if 'rows' in requests: c.query['rows'] = requests['rows'] #endif if 'start' in requests: c.query['start'] = requests['start'] #endif # # Build query # facet_fields = facet_values.keys() facet_queries = [] query_full = build_advanced_query(requests) ##print '-------------- query_full ----------------------' ##print query_full ##print '------------------------------------------------' c.solr = {} c.solr['numFound'] = 0 c.solr['results'] = [] c.solr['facets'] = {} sol = solr.SolrConnection(solrconfig.solr_urls["works"]) c.query['sort'], sort = get_field_to_sort_by( requests.get("sort", False)) #Query with highlighting sol_response = sol.query( query_full.encode( 'utf-8' ), start=c.query['start'], rows=c.query['rows'], \ sort=sort, facet='true', facet_sort="count", facet_mincount='1', facet_limit=str( self.get_max_number_of_facet_entries() ), facet_query=facet_queries, facet_field=facet_fields, hl="true", hl_fl=get_content_fields(), hl_simple_pre="""<span class="highlight">""", hl_simple_post="</span>" ) #print '-------------- query_response ----------------------' #print sol_response.highlighting #print '----------------------------------------------------' c.solr['highlights'] = sol_response.highlighting for result in sol_response.results: result['uuid'] = uuid_from_id( result['id']) #result['id'].split(":")[1] c.solr['results'].append(result) #endfor c.solr['numFound'] = sol_response.numFound fields = {} for field, value in requests.iteritems(): fields[field] = {'name': field.capitalize(), 'value': value} #endfor if requests.get("sort", False): fields['sort'] = { 'name': 'Sort', 'value': requests['sort'], 'for_current': False } #endif c.query['fields'] = fields c.solr['facets'] = {} if sol_response.facet_counts.get('facet_fields', None): c.solr['facets'] = sol_response.facet_counts['facet_fields'] # Get the objects which the facets point to. facets_relations = [] for facet, counts in c.solr['facets'].iteritems(): for item, count in counts.iteritems(): if item.find("http://") != -1: facets_relations.append(item) #endif #endfor #endfor c.solr['facets_relations'] = get_records_from_solr( facets_relations) #endif return render('/main/results/advanced.mako')
def index(self): # # Get main stats # sol_all = solr.SolrConnection(solrconfig.solr_urls["all"]) catalogue_fn = fn.get_catalogue_fieldname() organisation_fn = fn.get_is_organisation_fieldname() facet_fields = ['object_type', catalogue_fn, organisation_fn] sol_response_all = sol_all.query("*:*", rows=0, fl="-", score=False, facet='true', facet_limit=1000, facet_field=facet_fields) sol_all.close() c.stats = { 'works': 0, 'people and organisations': 0, 'people': 0, 'locations': 0, 'organisations': 0, 'repositories': 0, 'manifestations': 0, 'images': 0, 'comments': 0, 'related resources': 0, 'catalogues': 0 } for stat, num in sol_response_all.facet_counts['facet_fields'][ 'object_type'].iteritems(): if stat == 'institution': c.stats['repositories'] = num elif stat == 'comment': c.stats['comments'] = num elif stat == 'image': c.stats['images'] = num elif stat == 'location': c.stats['locations'] = num elif stat == 'manifestation': c.stats['manifestations'] = num elif stat == 'resource': c.stats['related resources'] = num elif stat == 'work': c.stats['works'] = num elif stat == 'person': c.stats['people and organisations'] = num c.stats['all'] = sol_response_all.numFound if "true" in sol_response_all.facet_counts['facet_fields'][ organisation_fn]: c.stats['organisations'] = sol_response_all.facet_counts[ 'facet_fields'][organisation_fn]['true'] else: c.stats['organisations'] = 0 if 'person' in sol_response_all.facet_counts['facet_fields'][ 'object_type']: c.stats['people'] = sol_response_all.facet_counts['facet_fields'][ 'object_type']['person'] - c.stats['organisations'] catalogue_dict = sol_response_all.facet_counts['facet_fields'][ catalogue_fn] c.stats['catalogues'] = len(catalogue_dict) sol_all = solr.SolrConnection(solrconfig.solr_urls["works"]) sol_response = sol_all.query("*:*", rows=20, fl="*", score=False, sort='ox_internalModified desc') sol_all.close() c.indexedTime = 'unknown' c.changedLast = [] if sol_response.numFound: c.indexedTime = sol_response.results[0]['ox_internalAdded'] for result in sol_response.results: c.changedLast.append({ 'changed': result['ox_internalModified'], 'description': result['dcterms_description'], 'url': result['uri'] }) return render('/main/status.mako')
def resource(self, id='0'): c.profile, c.relations, c.further_relations, template = self.profile( id, 'resources', 'resource') return render(template)
def person(self, id='0'): c.profile, c.relations, c.further_relations, template = self.profile( id, 'people', 'person') return render(template)
def manifestation(self, id='0'): c.profile, c.relations, c.further_relations, template = self.profile( id, 'manifestations', 'manifestation') return render(template)
def work(self, id='0'): c.profile, c.relations, c.further_relations, template = self.profile( id, 'works', 'work') return render(template)
def index(self): return render('/main/rsstest.mako')
def send(self): requests = request.params if 'id' in requests and requests['id'] != '': records = get_records_from_solr([requests['id']]) if len(records) > 0: record = records[requests['id']] name_good = CommentController._name_good(requests) email_good = CommentController._email_good(requests) comment_good = CommentController._comment_good(requests) captcha_good = CommentController._captcha_good(requests) if email_good and comment_good and name_good and captcha_good: email_body = '' email_body += "Email via EMLO website\n" email_body += "======================\n" email_body += "\n" email_body += "Comment on record: " email_body += " http://emlo.bodleian.ox.ac.uk/profile/" + record[ 'object_type'] + "/" + record['id'].replace( "uuid_", '') + '\n' email_body += "\n" email_body += "From: " + requests['name'] + "\n" email_body += "Email: " + requests['email'] + "\n" email_body += "Message follows:\n" + requests[ 'comment'] + "\n\n" #self._sendmail( '*****@*****.**', email_body ) return redirect( url(controller='thanks', action='index') + '?id=' + record['id'].replace("uuid_", '')) else: c.record = record c.comment = requests.get('comment', '') c.name = requests.get('name', '') c.email = requests.get('email', '') messages = {} if not name_good: messages['name'] = 'Please enter your name.' if not email_good: if not CommentController._have("email", requests): messages[ 'email'] = 'Please enter an email address.' elif not CommentController._email_valid(requests): messages[ 'email'] = "Sorry, that doesn't appear to be a valid email address." if not comment_good: messages['comment'] = 'Please enter a comment.' if not captcha_good: if not CommentController._have("g-recaptcha-response", requests): messages[ 'captcha'] = "Sorry, the Captcha input failed to load, Please can you try again later." else: messages[ 'captcha'] = "Please complete the captcha." if len(messages) == 0: messages[ 'general'] = "Sorry, there was unknown error and we couldn't send your comment. Please check your details." c.messages = messages return render('/main/comment.mako' ) #?id=' + record['id'].replace('uuid_','')) return redirect(url(controller='home'))
def index(self): return render('/main/technical.mako')
def geography(self): return render( '/main/vis/map.mako' )
def quick(self): #{ # only single field "everything" # Search in default search field in solr. default_values = {"everything": "all data"} default_facet_fields = ['object_type', get_catalogue_fieldname()] facet_fields = [] for default_facet_field in default_facet_fields: #{ if default_facet_field in request.params: #{ # cannot drill down any further continue #} facet_fields.append(default_facet_field) #} c.query = {'type': 'quick', 'baseurl': self.base_url_quick} rows = request.params.get('rows', get_default_rows_per_page()) start = request.params.get('start', 0) everything = request.params.get('everything', None) object_type = request.params.get('object_type', None) catalogue = request.params.get(get_catalogue_fieldname(), None) highlight = True default_value = default_values.get('everything', None) if default_value and everything and everything.lower( ) == default_value.lower(): highlight = False everything = '*' #endif c.query['fields'] = {} c.query['start'] = start c.query['rows'] = rows query_retvals = build_quick_query(everything, object_type, catalogue) q = query_retvals['the_query'] c.query['fields'] = query_retvals['fields'] sort = "score desc" c.query['sort'] = 'score-d' ##print q sol = solr.SolrConnection(solrconfig.solr_urls["all"]) sol_response = sol.query(q.encode('utf-8'), start=start, sort=sort, rows=rows, facet='true', facet_mincount='1', facet_sort="count", facet_limit=1000, facet_field=facet_fields, hl="true", hl_fl="*", hl_simple_pre='<span class="highlight">', hl_simple_post="</span>") c.solr = {} c.solr['numFound'] = sol_response.numFound c.solr['results'] = [] for result in sol_response.results: uuid_fieldname = get_uuid_fieldname() raw_uuid = result[uuid_fieldname] processed_uuid = uuid_from_id( raw_uuid ) #raw_uuid.split("_")[1] # strip off 'uuid:' prefix from value of field result['uuid'] = processed_uuid c.solr['results'].append(result) #endfor #c.solr['facets'] = {} c.solr['facets'] = sol_response.facet_counts['facet_fields'] if highlight: c.solr['highlights'] = sol_response.highlighting else: c.solr['highlights'] = {} #endif return render('/main/results/quick.mako')
def chronology(self): return render( '/main/vis/chronology.mako' )
def comment(self, id='0'): c.profile, c.relations, c.further_relations, template = self.profile( id, 'comments', 'comment') return render(template)
def institution(self, id='0'): c.profile, c.relations, c.further_relations, template = self.profile( id, 'institutions', 'institution') return render(template)
def image(self, id='0'): c.profile, c.relations, c.further_relations, template = self.profile( id, 'images', 'image') return render(template)
def index(self): return render('/main/search.mako')
def index(self): return render('/main/Four0Four.mako')