Exemplo n.º 1
0
    def test_query(self):
        storage.insert(Age("mouse", 22))
        storage.insert(Person("mouse", "mickey", 23, 22.2))
        storage.insert(Person("mouse", "minnie", 23, 22.2))

        q = (
            Query(Person, alias="p")
            .select(["p.age", "a.age", "p.lastname"])
            .join(Age, alias="a", on="a.name = p.name")
            .where({"p.lastname": "mickey", "a.age": 22})
        )

        r = (
            "SELECT p.age,a.age,p.lastname FROM tb_Person p "
            "JOIN tb_Age a ON a.name = p.name WHERE 1=1 AND "
            "p.lastname=%s AND a.age=%s LIMIT 1000",
            ["mickey", 22],
        )
        self.assertEqual(r, q.query())

        objects = storage.query(q)
        self.assertEqual(len(objects), 2)
        age, person = objects["Age"][0], objects["Person"][0]

        self.assertEqual(person.age, 23)
        self.assertEqual(person.lastname, "mickey")
        self.assertEqual(age.age, 22)

        q = (
            Query(Person, alias="p")
            .select(["p.*"])
            .join(Age, alias="a", on="a.name = p.name")
            .where({"p.lastname": "mickey", "a.age": 22})
        )

        r = (
            "SELECT p.* FROM tb_Person p JOIN tb_Age a ON a.name = "
            "p.name WHERE 1=1 AND p.lastname=%s AND "
            "a.age=%s LIMIT 1000",
            ["mickey", 22],
        )
        self.assertEqual(r, q.query())

        objects = storage.query(q)
        self.assertEqual(len(objects), 1)
        person = objects["Person"][0]

        self.assertEqual(person.age, 23)
        self.assertEqual(person.lastname, "mickey")
Exemplo n.º 2
0
    def test_query_in(self):
        storage.insert(Age("mouse", 22))
        storage.insert(Person("mouse", "mickey", 23, 22.2))
        storage.insert(Person("mouse", "minnie", 23, 22.2))

        q = Query(Person).select(["*"]).where({"lastname": ("mickey", "minnie")}, Query.IN)
        a = storage.query(q)
        self.assertEqual(len(a[Person.__name__]), 2)
Exemplo n.º 3
0
    def test_join(self):
        storage.put(Age(name="alabama"))
        storage.put(Person(name="alabama", lastname="felipe"))
        storage.put(Person(name="alabama", lastname="alabama"))

        query = (
            Query(Person, alias="p")
            .select(["p.*"])
            .join(Age, alias="a", on="p.name = a.name")
            .where({"p.name": "alabama"})
            .order("p.lastname DESC")
        )

        results = storage.query(query)
        self.assertEqual(1, len(results))
        self.assertEqual("felipe", results["Person"][0].lastname)
        self.assertTrue("Person" in results)
        self.assertIsNotNone(results["Person"])
 def test_default(self):
     self.assertTrue(storage.insert(Person('mouse', 'optico', 20, 21)))
     q = Query(Person, alias='u').select(['u.name', 'u.age'])
     p = storage.query(q)['Person'][0]
     self.assertEqual(p.weight, None)
     self.assertEqual(p.lastname, None)
Exemplo n.º 5
0
def bunq_callback_mutation():
    """ Handle bunq callbacks of type MUTATION """
    try:
        data = request.get_json()
        print("[bunqcb_mutation] input: {}".format(json.dumps(data)))
        payment = data["NotificationUrl"]["object"]["Payment"]
        metaid = payment["id"]
        if storage.seen("seen_mutation", metaid):
            print("[bunqcb_mutation] duplicate transaction")
            return ""

        iban = payment["alias"]["iban"]
        item = {
            "created_at": payment["created"],
            "date": arrow.get(payment["created"]).format("YYYY-MM-DD"),
            "type": mutation_type(payment),
            "amount": payment["amount"]["value"],
            "balance": payment["balance_after_mutation"]["value"],
            "account": iban,
            "counterparty_account": counterparty_account(payment),
            "counterparty_name": payment["counterparty_alias"]["display_name"],
            "description": payment["description"],
            "payment_id": metaid,
            "meta": {
                "id": metaid,
                "timestamp": arrow.get(payment["created"]).timestamp
            }
        }

        print("[bunqcb_mutation] translated: {}".format(json.dumps(item)))
        triggerids_1 = []
        triggerids_2 = []
        for account in ["ANY", iban]:
            for trigger in storage.query("trigger_mutation", "account", "=",
                                         account):
                ident = trigger["identity"]
                if check_fields("mutation", ident, item, trigger["fields"]):
                    triggerids_1.append(ident)
                    storage.store("mutation_" + ident, metaid, {"value": item})
            for trigger in storage.query("trigger_balance", "account", "=",
                                         account):
                ident = trigger["identity"]
                if check_fields("balance", ident, item, trigger["fields"]):
                    if not trigger["last"]:
                        triggerids_2.append(ident)
                        storage.store("balance_" + ident, metaid,
                                      {"value": item})
                        trigger["last"] = True
                        storage.store("trigger_balance", ident, trigger)
                elif trigger["last"]:
                    trigger["last"] = False
                    storage.store("trigger_balance", ident, trigger)
        print("Matched mutation triggers:", json.dumps(triggerids_1))
        print("Matched balance triggers:", json.dumps(triggerids_2))
        data = {"data": []}
        for triggerids in [triggerids_1, triggerids_2]:
            for triggerid in triggerids:
                data["data"].append({"trigger_identity": triggerid})
        if data["data"]:
            headers = {
                "IFTTT-Channel-Key": util.get_ifttt_service_key(),
                "IFTTT-Service-Key": util.get_ifttt_service_key(),
                "X-Request-ID": uuid.uuid4().hex,
                "Content-Type": "application/json"
            }
            print("[bunqcb_mutation] to ifttt: {}".format(json.dumps(data)))
            res = requests.post("https://realtime.ifttt.com/v1/notifications",
                                headers=headers,
                                data=json.dumps(data))
            print("[bunqcb_mutation] result: {} {}".format(
                res.status_code, res.text))

    except Exception:
        traceback.print_exc()
        print("[bunqcb_mutation] ERROR during handling bunq callback")

    return ""
Exemplo n.º 6
0
def bunq_callback_request():
    """ Handle bunq callbacks of type REQUEST """
    try:
        data = request.get_json()
        print("[bunqcb_request] input: {}".format(json.dumps(data)))
        if data["NotificationUrl"]["event_type"] != "REQUEST_RESPONSE_CREATED":
            print("[bunqcb_request] ignoring {} event".format(
                data["NotificationUrl"]["event_type"]))
            return ""

        obj = data["NotificationUrl"]["object"]["RequestResponse"]
        metaid = obj["id"]
        if storage.seen("seen_request", metaid):
            print("[bunqcb_request] duplicate transaction")
            return ""

        iban = obj["alias"]["iban"]
        item = {
            "created_at": obj["created"],
            "date": arrow.get(obj["created"]).format("YYYY-MM-DD"),
            "amount": obj["amount_inquired"]["value"],
            "account": iban,
            "counterparty_account": counterparty_account(obj),
            "counterparty_name": obj["counterparty_alias"]["display_name"],
            "description": obj["description"],
            "request_id": metaid,
            "meta": {
                "id": metaid,
                "timestamp": arrow.get(obj["created"]).timestamp
            }
        }

        print("[bunqcb_request] translated: {}".format(json.dumps(item)))

        triggerids = []
        for account in ["ANY", iban]:
            for trigger in storage.query("trigger_request", "account", "=",
                                         account):
                ident = trigger["identity"]
                if check_fields("request", ident, item, trigger["fields"]):
                    triggerids.append(ident)
                    storage.store("request_" + ident, metaid, {"value": item})
        print("[bunqcb_request] Matched triggers:", json.dumps(triggerids))
        if triggerids:
            data = {"data": []}
            for triggerid in triggerids:
                data["data"].append({"trigger_identity": triggerid})
            headers = {
                "IFTTT-Channel-Key": util.get_ifttt_service_key(),
                "IFTTT-Service-Key": util.get_ifttt_service_key(),
                "X-Request-ID": uuid.uuid4().hex,
                "Content-Type": "application/json"
            }
            print("[bunqcb_request] to ifttt: {}".format(json.dumps(data)))
            res = requests.post("https://realtime.ifttt.com/v1/notifications",
                                headers=headers,
                                data=json.dumps(data))
            print("[bunqcb_request] result: {} {}".format(
                res.status_code, res.text))

    except Exception:
        traceback.print_exc()
        print("[bunqcb_request] ERROR during handling bunq callback")
    return ""