Пример #1
0
    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
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
 def setUp(self):
     ourl = 'id=pmid:19282400&sid=Entrez:PubMed'
     data = get_sersol_data(ourl, key=KEY)
     self.sersol = Resolved(data)
Пример #6
0
 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)
Пример #7
0
 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()