def get_result(result): try: verify_key = nacl.signing.VerifyKey(node_to_ask.pubkey) verify_key.verify(result[1][0], result[1][1]) l = objects.Listings() l.ParseFromString(result[1][0]) return l except Exception: return None
def get_result(result): try: verify_key = nacl.signing.VerifyKey(node_to_ask.pubkey) verify_key.verify(result[1][0], result[1][1]) l = objects.Listings().ListingMetadata() l.ParseFromString(result[1][0]) if l.HasField("thumbnail_hash"): if not os.path.isfile(DATA_FOLDER + 'cache/' + l.thumbnail_hash.encode("hex")): self.get_image(node_to_ask, l.thumbnail_hash) return l except Exception: return None
def get_listings(self, request): def parse_listings(listings): if listings is not None: response = {"listings": []} for l in listings.listing: listing_json = { "title": l.title, "contract_hash": l.contract_hash.encode("hex"), "thumbnail_hash": l.thumbnail_hash.encode("hex"), "category": l.category, "price": l.price, "currency_code": l.currency_code, "nsfw": l.nsfw, "origin": str(CountryCode.Name(l.origin)), "ships_to": [] } for country in l.ships_to: listing_json["ships_to"].append( str(CountryCode.Name(country))) response["listings"].append(listing_json) request.setHeader('content-type', "application/json") request.write(json.dumps(response, indent=4)) request.finish() else: request.write(json.dumps({})) request.finish() if "guid" in request.args: def get_node(node): if node is not None: self.mserver.get_listings(node).addCallback(parse_listings) else: request.write(json.dumps({})) request.finish() self.kserver.resolve(unhexlify( request.args["guid"][0])).addCallback(get_node) else: ser = self.db.ListingsStore().get_proto() if ser is not None: l = objects.Listings() l.ParseFromString(ser) parse_listings(l) else: parse_listings(None) return server.NOT_DONE_YET
def migratev2(db): ser = db.listings.get_proto() if ser is not None: path = os.path.join(DATA_FOLDER, "listings.csv") with open(path, 'w') as csvfile: fieldnames = [ "contract_type", "pricing_currency", "language", "title", "description", "processing_time", "price", "nsfw", "image_urls", "categories", "condition", "quantity", "sku_number", "shipping_option1_name", "shipping_option1_countries", "shipping_option1_service1_name", "shipping_option1_service1_estimated_delivery", "shipping_option1_service1_estimated_price", "shipping_option2_name", "shipping_option2_countries", "shipping_option2_service1_name", "shipping_option2_service1_estimated_delivery", "shipping_option2_service1_estimated_price" ] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() l = objects.Listings() l.ParseFromString(ser) for listing in l.listing: with open( db.filemap.get_file( listing.contract_hash.encode("hex")), "r") as filename: contract = json.loads(filename.read(), object_pairs_hook=OrderedDict) price = "" if listing.currency_code.lower() == "btc": price = contract["vendor_offer"]["listing"]["item"][ "price_per_unit"]["bitcoin"] price = int(price * 100000000) else: price = contract["vendor_offer"]["listing"]["item"][ "price_per_unit"]["fiat"]["price"] sku = "" if "sku" in contract["vendor_offer"]["listing"]["item"]: sku = contract["vendor_offer"]["listing"]["item"]["sku"] condition = "" if "condition" in contract["vendor_offer"]["listing"]["item"]: condition = contract["vendor_offer"]["listing"]["item"][ "condition"] category = "" if "category" in contract["vendor_offer"]["listing"]["item"]: category = contract["vendor_offer"]["listing"]["item"][ "category"] contract_type = "PHYSICAL_GOOD" if contract["vendor_offer"]["listing"]["metadata"][ "category"] == "digital good": contract_type = "DIGITAL_GOOD" row = { 'contract_type': contract_type, 'pricing_currency': listing.currency_code, 'language': 'english', 'title': listing.title, 'description': contract["vendor_offer"]["listing"]["item"]["description"], 'processing_time': contract["vendor_offer"]["listing"]["item"] ["process_time"], 'price': price, 'nsfw': str(listing.nsfw), 'image_urls': '', 'categories': category, 'condition': condition, 'quantity': '-1', 'sku_number': sku } img64 = [] for img_hash in contract["vendor_offer"]["listing"]["item"][ "image_hashes"]: image_path = db.filemap.get_file(img_hash) with open(image_path, "rb") as image_file: encoded_string = base64.b64encode(image_file.read()) img64.append(encoded_string) if len(img64) == 1: row["image_urls"] = img64[0] else: img_csv = '' r = 0 for img in img64: r += 1 img_csv += img if r != len(img64): img_csv += "," row["image_urls"] = img_csv if contract_type == "PHYSICAL_GOOD": if "free" in contract["vendor_offer"]["listing"][ "shipping"]: row["shipping_option1_name"] = "Free Shipping" countries = [] for country in listing.ships_to: countries.append(str(CountryCode.Name(country))) if len(countries) == 1: row["shipping_option1_countries"] = countries[0] else: country_csv = '' r = 0 for c in countries: r += 1 country_csv += c if r != len(countries): country_csv += "," row["shipping_option1_countries"] = country_csv row["shipping_option1_service1_name"] = "default service" ed = "standard shipping time" row["shipping_option1_service1_estimated_delivery"] = ed row["shipping_option1_service1_estimated_price"] = "0" elif "flat_fee" in contract["vendor_offer"]["listing"][ "shipping"]: cc = "bitcoin" if listing.currency_code.lower() != "btc": cc = "fiat" if "domestic" in contract["vendor_offer"]["listing"][ "shipping"]["flat_fee"][cc]["price"]: row["shipping_option1_name"] = "Domestic Shipping" row["shipping_option1_countries"] = contract[ "vendor_offer"]["listing"]["shipping"][ "shipping_origin"] row["shipping_option1_service1_name"] = "default service" ed = contract["vendor_offer"]["listing"][ "shipping"]["est_delivery"]["domestic"] if ed == "": ed = "standard shipping time" row["shipping_option1_service1_estimated_delivery"] = ed ship_price = contract["vendor_offer"]["listing"][ "shipping"]["flat_fee"][cc]["price"][ "domestic"] if cc == "bitcoin": ship_price = int(ship_price * 100000000) row["shipping_option1_service1_estimated_price"] = ship_price if "international" in contract["vendor_offer"][ "listing"]["shipping"]["flat_fee"][cc][ "price"]: row["shipping_option2_name"] = "International Shipping" countries = [] for country in listing.ships_to: countries.append(str( CountryCode.Name(country))) if len(countries) == 1: row["shipping_option2_countries"] = countries[ 0] else: country_csv = '' r = 0 for c in countries: r += 1 country_csv += c if r != len(countries): country_csv += "," row["shipping_option2_countries"] = country_csv row["shipping_option2_service1_name"] = "default service" ed = contract["vendor_offer"]["listing"][ "shipping"]["est_delivery"]["international"] if ed == "": ed = "standard shipping time" row["shipping_option2_service1_estimated_delivery"] = ed row["shipping_option2_service1_estimated_price"] = contract[ "vendor_offer"]["listing"]["shipping"][ "flat_fee"][cc]["price"]["domestic"] writer.writerow(row) return path else: raise Exception("failed to deserialize listings")