<s> import re <EOL> import logging <EOL> import summoner <EOL> from urllib import urlencode <EOL> from datetime import datetime <EOL> from django . core . urlresolvers import reverse <EOL> class Summon ( ) : <EOL> """<STR_LIT>""" <EOL> def __init__ ( self , summon_id , summon_key ) : <EOL> self . _summon = summoner . Summon ( summon_id , summon_key ) <EOL> def search ( self , q , * args , ** kwargs ) : <EOL> """<STR_LIT>""" <EOL> t = datetime . now ( ) <EOL> summon_response = self . _summon . search ( q , * args , ** kwargs ) <EOL> elapsed = datetime . now ( ) - t <EOL> logging . debug ( "<STR_LIT>" , q , args , kwargs , elapsed ) <EOL> total_results = summon_response [ '<STR_LIT>' ] <EOL> page = kwargs . get ( "<STR_LIT>" , <NUM_LIT:1> ) <EOL> items_per_page = kwargs . get ( "<STR_LIT>" , <NUM_LIT:10> ) <EOL> start_index = ( page * items_per_page ) - items_per_page <EOL> if kwargs . get ( "<STR_LIT>" , False ) : <EOL> return summon_response <EOL> for_template = kwargs . get ( '<STR_LIT>' , False ) <EOL> response = { <EOL> "<STR_LIT>" : q , <EOL> "<STR_LIT>" : total_results , <EOL> "<STR_LIT>" : items_per_page , <EOL> "<STR_LIT>" : start_index , <EOL> "<STR_LIT>" : [ ] <EOL> } <EOL> if '<STR_LIT>' in summon_response : <EOL> response [ '<STR_LIT>' ] = [ ] <EOL> for ff in summon_response [ '<STR_LIT>' ] : <EOL> facet = { '<STR_LIT:name>' : ff [ '<STR_LIT>' ] , '<STR_LIT>' : [ ] } <EOL> for c in ff [ '<STR_LIT>' ] : <EOL> facet [ '<STR_LIT>' ] . append ( { <EOL> '<STR_LIT:name>' : c [ '<STR_LIT:value>' ] , <EOL> '<STR_LIT:count>' : c [ '<STR_LIT:count>' ] <EOL> } ) <EOL> response [ '<STR_LIT>' ] . append ( facet ) <EOL> seen = { } <EOL> for doc in summon_response [ '<STR_LIT>' ] : <EOL> item = self . _convert ( doc ) <EOL> if item : <EOL> if len ( item [ '<STR_LIT>' ] ) == <NUM_LIT:0> : <EOL> continue <EOL> if item [ '<STR_LIT>' ] in seen : <EOL> continue <EOL> seen [ item [ '<STR_LIT>' ] ] = True <EOL> if for_template : <EOL> item [ '<STR_LIT:id>' ] = item . pop ( '<STR_LIT>' ) <EOL> item [ '<STR_LIT:type>' ] = item . pop ( '<STR_LIT>' ) <EOL> response [ '<STR_LIT>' ] . append ( item ) <EOL> return response <EOL> def _convert ( self , doc ) : <EOL> i = { } <EOL> id = self . _id ( doc ) <EOL> if id is None or '<STR_LIT>' not in doc : <EOL> return None <EOL> i [ '<STR_LIT>' ] = id <EOL> i [ '<STR_LIT>' ] = '<STR_LIT>' + id <EOL> i [ '<STR_LIT>' ] = self . _get_type ( doc ) <EOL> if doc . get ( '<STR_LIT>' ) : <EOL> i [ '<STR_LIT:name>' ] = doc [ '<STR_LIT>' ] [ <NUM_LIT:0> ] <EOL> if doc . get ( '<STR_LIT>' ) : <EOL> i [ '<STR_LIT:name>' ] += "<STR_LIT>" + doc [ '<STR_LIT>' ] [ <NUM_LIT:0> ] <EOL> if '<STR_LIT>' in doc : <EOL> i [ '<STR_LIT>' ] = [ ] <EOL> for name in doc . get ( '<STR_LIT>' , [ ] ) : <EOL> if '<STR_LIT>' in name : <EOL> q = ( '<STR_LIT>' % name [ '<STR_LIT>' ] ) . encode ( '<STR_LIT:utf8>' ) <EOL> i [ '<STR_LIT>' ] . append ( { <EOL> '<STR_LIT:name>' : name [ '<STR_LIT>' ] , <EOL> '<STR_LIT:url>' : reverse ( '<STR_LIT>' ) + '<STR_LIT:?>' + urlencode ( { '<STR_LIT:q>' : q } ) <EOL> } ) <EOL> for alt_name in doc . get ( '<STR_LIT>' , [ ] ) : <EOL> if '<STR_LIT>' in alt_name : <EOL> p = int ( alt_name [ '<STR_LIT>' ] ) - <NUM_LIT:1> <EOL> if p < len ( i [ '<STR_LIT>' ] ) : <EOL> i [ '<STR_LIT>' ] [ p ] [ '<STR_LIT>' ] = alt_name [ '<STR_LIT>' ] <EOL> if '<STR_LIT>' in doc : <EOL> i [ '<STR_LIT>' ] = [ ] <EOL> for subject in doc . get ( '<STR_LIT>' , [ ] ) : <EOL> subject = subject . strip ( '<STR_LIT:.>' ) <EOL> q = ( '<STR_LIT>' % subject ) . encode ( '<STR_LIT:utf8>' ) <EOL> i [ '<STR_LIT>' ] . append ( { <EOL> '<STR_LIT:name>' : subject , <EOL> '<STR_LIT:url>' : reverse ( '<STR_LIT>' ) + '<STR_LIT:?>' + urlencode ( { '<STR_LIT:q>' : q } ) <EOL> } ) <EOL> if doc . get ( '<STR_LIT>' ) : <EOL> i [ '<STR_LIT>' ] = doc [ '<STR_LIT>' ] [ <NUM_LIT:0> ] <EOL> if doc . get ( '<STR_LIT>' ) : <EOL> i [ '<STR_LIT>' ] = { '<STR_LIT:name>' : doc [ '<STR_LIT>' ] [ <NUM_LIT:0> ] } <EOL> if '<STR_LIT>' in doc : <EOL> i [ '<STR_LIT>' ] [ '<STR_LIT:address>' ] = doc [ '<STR_LIT>' ] [ <NUM_LIT:0> ] <EOL> if doc . get ( '<STR_LIT>' , [ ] ) : <EOL> i [ '<STR_LIT>' ] = doc [ '<STR_LIT>' ] [ <NUM_LIT:0> ] <EOL> if doc . get ( '<STR_LIT>' ) : <EOL> i [ '<STR_LIT>' ] = doc [ '<STR_LIT>' ] <EOL> if doc . get ( '<STR_LIT>' ) : <EOL> i [ '<STR_LIT>' ] = doc [ '<STR_LIT>' ] <EOL> if doc . get ( '<STR_LIT>' ) : <EOL> i [ '<STR_LIT>' ] = doc [ '<STR_LIT>' ] [ <NUM_LIT:0> ] . strip ( '<STR_LIT:.>' ) <EOL> if doc . get ( '<STR_LIT>' ) : <EOL> i [ '<STR_LIT>' ] = doc . get ( '<STR_LIT>' ) [ <NUM_LIT:0> ] <EOL> i [ '<STR_LIT>' ] = [ ] <EOL> offer = self . _get_offer ( doc ) <EOL> if offer : <EOL> i [ '<STR_LIT>' ] . append ( offer ) <EOL> for peer_doc in doc . get ( '<STR_LIT>' , [ ] ) : <EOL> offer = self . _get_offer ( peer_doc ) <EOL> if offer : <EOL> i [ '<STR_LIT>' ] . append ( offer ) <EOL> i = self . _rewrite_ids ( i ) <EOL> return i <EOL> def _get_offer ( self , doc ) : <EOL> offer = None <EOL> id = self . _id ( doc ) <EOL> if doc . get ( '<STR_LIT>' ) : <EOL> inst = doc . get ( '<STR_LIT>' ) [ <NUM_LIT:0> ] <EOL> inst = re . sub ( '<STR_LIT>' , '<STR_LIT>' , inst ) <EOL> offer = { <EOL> '<STR_LIT>' : inst , <EOL> '<STR_LIT>' : id <EOL> } <EOL> elif doc . get ( '<STR_LIT>' ) == [ '<STR_LIT>' ] : <EOL> offer = { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : id <EOL> } <EOL> return offer <EOL> def _rewrite_ids ( self , item ) : <EOL> if len ( item [ '<STR_LIT>' ] ) == <NUM_LIT:0> : <EOL> return item <EOL> offer = item [ '<STR_LIT>' ] [ <NUM_LIT:0> ] <EOL> if offer [ '<STR_LIT>' ] == '<STR_LIT>' : <EOL> if not item [ '<STR_LIT>' ] . startswith ( '<STR_LIT:m>' ) : <EOL> item [ '<STR_LIT>' ] = '<STR_LIT:m>' + item [ '<STR_LIT>' ] <EOL> item [ '<STR_LIT>' ] = '<STR_LIT>' + item [ '<STR_LIT>' ] <EOL> elif offer [ '<STR_LIT>' ] == '<STR_LIT>' : <EOL> if not item [ '<STR_LIT>' ] . startswith ( '<STR_LIT:b>' ) : <EOL> item [ '<STR_LIT>' ] = '<STR_LIT>' + item [ '<STR_LIT>' ] <EOL> for offer in item [ '<STR_LIT>' ] : <EOL> seller = offer . get ( '<STR_LIT>' ) <EOL> sn = offer . get ( '<STR_LIT>' ) <EOL> if seller == '<STR_LIT>' and not sn . startswith ( '<STR_LIT:m>' ) : <EOL> offer [ '<STR_LIT>' ] = '<STR_LIT:m>' + sn <EOL> elif seller == '<STR_LIT>' and not sn . startswith ( '<STR_LIT:b>' ) : <EOL> offer [ '<STR_LIT>' ] = '<STR_LIT:b>' + sn <EOL> return item <EOL> def _get_type ( self , doc ) : <EOL> content_type = doc [ '<STR_LIT>' ] [ <NUM_LIT:0> ] <EOL> if content_type == "<STR_LIT>" : <EOL> return '<STR_LIT>' <EOL> elif content_type == "<STR_LIT>" : <EOL> return '<STR_LIT>' <EOL> elif content_type == '<STR_LIT>' or content_type == '<STR_LIT>' : <EOL> return '<STR_LIT>' <EOL> elif content_type == '<STR_LIT>' : <EOL> return '<STR_LIT>' <EOL> elif content_type == '<STR_LIT>' : <EOL> return '<STR_LIT>' <EOL> elif content_type == '<STR_LIT>' : <EOL> return '<STR_LIT>' <EOL> else : <EOL> return content_type <EOL> def _id ( self , doc ) : <EOL> """<STR_LIT>""" <EOL> parts = doc . get ( '<STR_LIT>' , '<STR_LIT>' ) . split ( '<STR_LIT:U+0020>' ) <EOL> if len ( parts ) == <NUM_LIT:2> : <EOL> return parts [ <NUM_LIT:1> ] <EOL> if '<STR_LIT>' in doc and len ( doc [ '<STR_LIT>' ] ) > <NUM_LIT:0> : <EOL> return self . _id ( doc [ '<STR_LIT>' ] [ <NUM_LIT:0> ] ) <EOL> return None </s>
