def pull_platform_edition_presences(): """ Returns product presences, organized in dict (keys are pe_id; values are listing_id) """ cur = conn.cursor() cur.execute( """SELECT listing_id, platform_edition_id, is_matched_via_body_text, index_start, index_end, score FROM listings_platform_editions;""" ) raw_pe_presences = cur.fetchall() cur.close() pe_presences = [] for presence in raw_pe_presences: pe_presences.append({ 'listing_id': presence[0], 'platform_edition_id': presence[1], 'is_matched_via_body_text': presence[2], 'index_start': presence[3], 'index_end': presence[4], 'score': presence[5] }) del raw_pe_presences pe_presences_per_pe = {} for presence in pe_presences: if presence['platform_edition_id'] not in pe_presences_per_pe: pe_presences_per_pe[presence['platform_edition_id']] = list() pe_presences_per_pe[presence['platform_edition_id']].append( presence['listing_id']) match = Match( score=presence['score'], is_matched_via_body_text=presence['is_matched_via_body_text'], start=presence['index_start'], end=presence['index_end'], item=PlatformEdition.get_by_id( presence['platform_edition_id']), listing=Listing.get_by_id(presence['listing_id'])) match.add_to_registry() print('inner Match') print(Match) del pe_presences return pe_presences_per_pe
def generate_message_text(self): message_text_matches = '' message_text_matches = message_text_matches + 'PLATFORMS & EDITIONS\n\n' pp.pprint(Listing.registry) for platform in Platform.get_all(): if platform.id in self.platform_editions or ( self.platforms and platform.id in self.platforms): message_text_per_platform = '' # ----- Platform Name ----- message_text_per_platform = message_text_per_platform + '----- ' + platform.name + ' -----\n' if self.platform_editions.get(platform.id): for edition_id in self.platform_editions.get(platform.id): edition = PlatformEdition.get_by_id(edition_id) edition_referencial_name = edition.referencial_name() message_text_per_platform = message_text_per_platform + edition_referencial_name + '\n' if Mailer.pe_presences_per_pe.get(edition.id): for listing_id in Mailer.pe_presences_per_pe.get( edition.id): listing = Listing.get_by_id(listing_id) # listing title message_text_per_platform = message_text_per_platform + '\t' + listing.title + '\n' # listing price if listing.price is None: message_text_per_platform = message_text_per_platform + '\t' + '(price not listed)' + '\n' else: message_text_per_platform = message_text_per_platform + '\t' + listing.price + '\n' # listing link message_text_per_platform = message_text_per_platform + '\t' + listing.url + '\n' # listing datetime message_text_per_platform = message_text_per_platform + '\t' + str( listing.date_posted) + '\n' # blank line message_text_per_platform = message_text_per_platform + '\t' + '\n' message_text_per_platform = message_text_per_platform + '\n' message_text_matches = message_text_matches + message_text_per_platform return message_text_matches
def generate_message_html(self): message_text_matches = '' products_matched_ct = 0 platforms_and_editions_category_title = '<h2>PLATFORMS & EDITIONS</h2>\n\n' message_text_all_platforms = '' for platform in Platform.get_all(): message_text_this_platform = '' if platform.id in self.platform_editions or ( self.platforms and platform.id in self.platforms): # Platform Name this_platform_name = f'\n<h3>{platform.name}</h3>' message_text_this_platform_general = '' message_text_this_platform_list = '' platform_general_list_start = '\n<ul style="padding: 0; list-style: none;">' if self.platform_presences_per_platform.get(platform.id): listing_ct = 0 for listing_id in self.platform_presences_per_platform.get( platform.id): listing = Listing.get_by_id(listing_id) if listing is not None: listing_ct += 1 match = Match.get_by_info(listing, platform) message_text_this_platform_list = message_text_this_platform_list + Mailer.create_listing_html( match, listing_ct) platform_general_list_end = '\n</ul>' if len(message_text_this_platform_list) > 0: message_text_this_platform_general = message_text_this_platform_general + f"""{platform_general_list_start}\n{message_text_this_platform_list}\n{platform_general_list_end}""" message_text_all_editions = '' if self.platform_editions.get(platform.id): for edition_id in self.platform_editions.get(platform.id): edition = PlatformEdition.get_by_id(edition_id) edition_referencial_name = edition.referencial_name() message_text_this_edition = '' this_edition_name = f'\n<h4>{edition_referencial_name}</h4>' message_text_this_edition_listings = '' if Mailer.pe_presences_per_pe.get(edition.id): listing_ct = 0 editions_list_start = '\n<ul style="padding: 0; list-style: none;">' for listing_id in Mailer.pe_presences_per_pe.get( edition.id): listing = Listing.get_by_id(listing_id) if listing is not None: listing_ct += 1 match = Match.get_by_info(listing, edition) message_text_this_edition_listings = message_text_this_edition_listings + Mailer.create_listing_html( match, listing_ct) editions_list_end = '\n</ul>' if len(message_text_this_edition_listings) > 0: products_matched_ct += 1 # add edition title message_text_this_edition = message_text_this_edition + this_edition_name # add edition listings message_text_this_edition = message_text_this_edition + editions_list_start + message_text_this_edition_listings + editions_list_end if len(message_text_this_edition) > 0: # add edition message text message_text_all_editions = message_text_all_editions + message_text_this_edition if len(message_text_all_editions) > 0 or len( message_text_this_platform_general) > 0: # add platform title message_text_this_platform = message_text_this_platform + this_platform_name if len(message_text_this_platform_general) > 0: products_matched_ct += 1 general_platform_matches_title = f'\n<h4>General</h4>' # add platform generic message text message_text_this_platform = message_text_this_platform + general_platform_matches_title + message_text_this_platform_general if len(message_text_all_editions) > 0: # add platform editions message text message_text_this_platform = message_text_this_platform + message_text_all_editions if len(message_text_this_platform) > 0: # add platform editions message text message_text_all_platforms = message_text_all_platforms + message_text_this_platform if len(message_text_all_platforms) > 0: # add platform & edition category title to mail message message_text_matches = message_text_matches + platforms_and_editions_category_title # add platform & edition category content to mail message message_text_matches = message_text_matches + message_text_all_platforms return message_text_matches, products_matched_ct