def classify(self):
     "method attempts to classify a Work as either an existing or new work"
     if self.entity_info.has_key('title'):
         # Searches Redis
         redis_title = self.entity_info['title']
         # Returns a label if redis_title is a bf:TitleEntity
         title_label = self.redis_datastore.hget(
             redis_title,
             'label')
         if title_label is None:
             # Sets by retrieving the literal title value
             title_label = redis_title
         if title_label is not None:
             cw_title_keys = search_title(title_label,
                                          self.redis_datastore)
         for creative_wrk_key in cw_title_keys:
             if not creative_wrk_key.startswith(
                 'bf:{0}'.format(self.work_class.name)):
                 continue
             if self.redis_datastore.hexists(creative_wrk_key,
                                             'associatedAgent'):
                 creator_keys = set([
                     self.redis_datastore.hget(creative_wrk_key,
                                                'associatedAgent')])
             else:
                 creator_keys = self.redis_datastore.smembers(
                     "{0}:associatedAgent".format(creative_wrk_key))
             if self.entity_info.has_key('rda:isCreatedBy'):
                 if self.strict is True:
                     existing_keys = creator_keys.intersection(self.entity_info['rda:isCreatedBy'])
                 else:
                     existing_keys = creator_keys.union(self.entity_info['rda:isCreatedBy'])
                 
                 if len(existing_keys) == 1:
                     msg = "{0} MATCHED {1} to {2}".format(
                         datetime.datetime.utcnow().isoformat(),
                         creative_wrk_key,
                         self.entity_info.get('title'))
                     logger.info(msg)
                     self.creative_work = self.work_class(redis_datastore=self.redis_datastore,
                                                          redis_key=creative_wrk_key)
         if not self.creative_work:
             self.creative_work = self.work_class(redis_datastore=self.redis_datastore)
             for key, value in self.entity_info.iteritems():
                 setattr(self.creative_work, key, value)
             self.creative_work.save()
     else:
         print("Entity does not have a title {0}".format(self.entity_info))
         self.redis_datastore.sadd('no-titles',
                                   self.redis_datastore.get('simple-classifier'))
     self.redis_datastore.incr('simple-classifier')
def search(request):
    """
    JSON Ajax view, accepts a query and returns the results
    from searching RDA Title Redis datastore instance.

    :param request: HTTP Request
    :param rtype: JSON encoded string
    """
    results = []
    raw_title = request.REQUEST.get('q')
    if raw_title is not None:
        search_results = redis_helpers.search_title(raw_title,work_redis)
        if len(search_results) > 0:
            for work_key in search_results:
                raw_results = work_redis.hgetall(work_key)
                for k,v in raw_results.iteritems():
                    raw_results[k] = v.encode('utf8','replace')
                raw_results["bibframe_work"] = work_key
                raw_results['search_prefix'] = raw_title
		preferred_title = unicode(work_redis.hget("{0}:rda:Title".format(work_key),
                                                               'rda:preferredTitleForTheWork'),
                                               errors="replace")
		for word in raw_title.split(" "):
		    if preferred_title.count(word) > 0:
                        preferred_title = preferred_title.replace(word,'''<span style="background-color:yellow">{0}</span>'''.format(word))                       
		raw_results['title'] = preferred_title
                raw_results['ils-bib-numbers'] = []
                for instance_key in list(work_redis.smembers("{0}:bibframe:Instances".format(work_key))):
                     raw_results['ils-bib-numbers'].append(instance_redis.hget("{0}:rda:identifierForTheManifestation".format(instance_key),
                                                                               'ils-bib-number'))
                creator_keys = work_redis.smembers("{0}:rda:creator".format(work_key))
                if len(creator_keys) > 0:
                    raw_results['creator'] = []
                    creator_keys = list(creator_keys)
                    for creator_key in creator_keys:
                        creator_name = unicode(authority_redis.hget(creator_key,
                                                                    "rda:preferredNameForThePerson"),
                                               errors="replace")
                        raw_results['creator'].append(creator_name)
                results.append(raw_results)
    return {'q':raw_title,'results':results}
 def title(self):
     # Search using Title App
     found_titles = title_app.search_title(self.query,
                                           self.redis_datastore)
     for title_key in found_titles:
         self.__add_to_query__(title_key)