Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
    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")