def get_data(self, query=None, cache_timeout=CACHE_TIMEOUT): """ Get and process the data from the API and store in Python dictionary. This data is where any caching should take place. """ alog.debug( 'starting bul_link.views.BulLinkBase.get_data()' ) #See if this view has created a resource already. try: alog.debug( 'trying self.resource.query' ) query = self.resource.query except: alog.debug( 'exception on self.resource.query' ) #If no query is passed in, use the self.scrubbed_query property if query is None: alog.debug( 'gonna self.scrub_query()' ) query = self.scrub_query() #Get or make resource alog.debug( 'gonna make_resource(query)' ) resource = self.make_resource(query) self.resource = resource cache_key = "resolved-%s" % self.resource.id data = cache.get(cache_key, None) alog.debug( 'got data' ) alog.debug( 'data, ```%s```' % pprint.pformat(data) ) if not data: alog.debug( 'gonna get_sersol_data() ' ) data = get_sersol_data(query, key=SERSOL_KEY, timeout=SERSOL_TIMEOUT) cache.set(cache_key, data, cache_timeout) alog.debug( 'data after sersol lookup, ```%s```' % pprint.pformat(data) ) alog.debug( 'gonna return data' ) return data
def get_sersol_dct( self, scheme, host, querystring ): """ Builds initial data-dict. Called by views.findit_base_resolver() Error note: Occational ```XMLSyntaxError(u'Opening and ending tag mismatch: hr line 1 and body, line 1, column 922',)``` caused by unknown blip. Result: eventual redirect to citation form for confirmation -- always seems to work second time. """ try: sersol_dct = get_sersol_data( querystring, key=app_settings.SERSOL_KEY ) # get_sersol_data() is a function of pylink3602 except Exception as e: log.debug( '`{id}` problem grabbing sersol data, ```{val}```'.format(id=self.log_id, val=unicode(repr(e))) ) sersol_dct = {} log.debug( '`{id}` sersol_dct, ```{val}```'.format(id=self.log_id, val=pprint.pformat(sersol_dct)) ) return sersol_dct
def setUp(self): ourl = 'title=Organic%20Letters&date=2008&issn=1523-7060&issue=19&spage=4155' self.data = get_sersol_data(ourl, key=KEY) self.sersol = Resolved(self.data)
def setUp(self): ourl = 'rft_id=info:doi/10.1016/j.neuroimage.2009.12.024' data = get_sersol_data(ourl, key=KEY) self.sersol = Resolved(data)
def setUp(self): ourl = 'id=pmid:19282400&sid=Entrez:PubMed' data = get_sersol_data(ourl, key=KEY) self.sersol = Resolved(data)
def setUp(self): #Sample passed from OCLC ourl = 'sid=FirstSearch%3AMEDLINE&genre=article&issn=0037-9727&atitle=Serum+and+urine+chromium+as+indices+of+chromium+status+in+tannery+workers.&title=Proceedings+of+the+Society+for+Experimental+Biology+and+Medicine.+Society+for+Experimental+Biology+and+Medicine+%28New+York%2C+N.Y.%29&volume=185&issue=1&spage=16&epage=23&date=1987&aulast=Randall&aufirst=JA&sici=0037-9727%28198705%29185%3A1%3C16%3ASAUCAI%3E2.0.TX%3B2-3&id=doi%3A&pid=%3Caccession+number%3E114380499%3C%2Faccession+number%3E%3Cfssessid%3E0%3C%2Ffssessid%3E&url_ver=Z39.88-2004&rfr_id=info%3Asid%2Ffirstsearch.oclc.org%3AMEDLINE&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&req_dat=%3Csessionid%3E0%3C%2Fsessionid%3E&rfe_dat=%3Caccessionnumber%3E114380499%3C%2Faccessionnumber%3E&rft_id=urn%3AISSN%3A0037-9727&rft.aulast=Randall&rft.aufirst=JA&rft.atitle=Serum+and+urine+chromium+as+indices+of+chromium+status+in+tannery+workers.&rft.jtitle=Proceedings+of+the+Society+for+Experimental+Biology+and+Medicine.+Society+for+Experimental+Biology+and+Medicine+%28New+York%2C+N.Y.%29&rft.date=1987&rft.volume=185&rft.issue=1&rft.spage=16&rft.epage=23&rft.issn=0037-9727&rft.genre=article&rft.sici=0037-9727%28198705%29185%3A1%3C16%3ASAUCAI%3E2.0.TX%3B2-3&checksum=2a13709e5b9664e62d31e421f6f77c94&title=Brown University&linktype=openurl&detail=RBN' self.data = get_sersol_data(ourl, key=KEY) self.sersol = Resolved(self.data)
def setUp(self): #Sample passed from OCLC ourl = 'sid=FirstSearch%3AWorldCat&genre=book&isbn=9780394565279&title=The+risk+pool&date=1988&aulast=Russo&aufirst=Richard&id=doi%3A&pid=%3Caccession+number%3E17803510%3C%2Faccession+number%3E%3Cfssessid%3E0%3C%2Ffssessid%3E%3Cedition%3E1st+ed.%3C%2Fedition%3E&url_ver=Z39.88-2004&rfr_id=info%3Asid%2Ffirstsearch.oclc.org%3AWorldCat&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&req_dat=%3Csessionid%3E0%3C%2Fsessionid%3E&rfe_dat=%3Caccessionnumber%3E17803510%3C%2Faccessionnumber%3E&rft_id=info%3Aoclcnum%2F17803510&rft_id=urn%3AISBN%3A9780394565279&rft.aulast=Russo&rft.aufirst=Richard&rft.btitle=The+risk+pool&rft.date=1988&rft.isbn=9780394565279&rft.place=New+York&rft.pub=Random+House&rft.edition=1st+ed.&rft.genre=book&checksum=d6c1576188e0f87ac13f4c4582382b4f&title=Brown University&linktype=openurl&detail=RBN' self.data = get_sersol_data(ourl, key=KEY) self.sersol = Resolved(self.data)
def handle(self, **options): from findit.models import Request count = 0 new_requests = Request.objects.filter(illiad_tn='new') for request in new_requests: user = request.user profile = user.libraryprofile illiad_profile = profile.illiad() tries = 0 while tries < 3: try: sersol = get_sersol_data(request.item.query, key=sersol_key) break except urllib2.URLError: print>>sys.stderr, "360Link timeout. Trying again." tries += 1 resolved = Resolved(sersol) illiad_request_url = "%s&sid=%s" % (make_illiad_url(resolved.openurl), request.item.referrer) #print bib #print illiad_request_url #print illiad_request_url ill_username = illiad_profile['username'] #Get the OpenURL we will submit. ill_url = illiad_request_url ilog.info('User %s posted %s for request.' % (ill_username, ill_url)) out = {} #Get an illiad instance illiad = IlliadSession(ILLIAD_REMOTE_AUTH_URL, ILLIAD_REMOTE_AUTH_HEADER, ill_username) illiad_session = illiad.login() ilog.info('User %s established Illiad session: %s.' % (ill_username, illiad_session['session_id'])) out['session'] = illiad_session if not illiad_session['authenticated']: out['session_error'] = 'Failed login.' ilog.error("Illiad login failed for %s" % ill_username) else: #Register users if neccessary. if not illiad.registered: ilog.info('Will register %s with illiad.' % (ill_username)) ilog.info('Registering %s with Illiad as %s.' % (ill_username, illiad_profile['status']) ) reg = illiad.register_user(illiad_profile) ilog.info('%s registration response: %s' % (ill_username, reg)) illiad_post_key = illiad.get_request_key(ill_url) #If blocked comes back in the post key, stop here with appropriate status. blocked = illiad_post_key.get('blocked', None) errors = illiad_post_key.get('errors', None) if blocked: out['blocked'] = blocked ilog.info("%s is blocked in Illiad." % ill_username) self.send_message('blocked', resource=resource) elif errors: out['errors'] = True msg = illiad_post_key['message'] ilog.info("Request errors during Illiad submission: %s %s" %\ (ill_username, self.msg)) out['message'] = msg else: #Submit this submit_status = illiad.make_request(illiad_post_key) out['submit_status'] = submit_status #Write the request to the requests table. if submit_status['submitted']: illiad_tn = submit_status['transaction_number'] request.illiad_tn = illiad_tn print request.user, request.id, request.item.id, illiad_tn request.save() count += 1 else: ilog.error("%s request failed with message %s." %\ (ill_username, submit_status['message'])) illiad.logout()