Exemplo n.º 1
0
 def congratulate_sales_rep(row: Order, old_row: Order,
                            logic_row: LogicRow):
     if logic_row.ins_upd_dlt == "ins" or True:  # logic engine fills parents for insert
         sales_rep = row.SalesRep  # type : Employee
         if sales_rep is None:
             logic_row.log("no salesrep for this order")
         else:
             logic_row.log(
                 f'Hi, {sales_rep.Manager.FirstName}, congratulate {sales_rep.FirstName} on their new order'
             )
Exemplo n.º 2
0
def toggle_order_shipped():
    """ toggle Shipped Date, to trigger balance adjustment """
    """ also test join.
    session.query(Customer).join(Invoice).filter(Invoice.amount == 8500).all()
    """

    pre_cust = session.query(
        models.Customer).filter(models.Customer.Id == "ALFKI").one()
    session.expunge(pre_cust)

    print("")
    test_order = session.query(models.Order).filter(
        models.Order.Id == 11011).join(models.Employee).one()
    if test_order.ShippedDate is None or test_order.ShippedDate == "":
        test_order.ShippedDate = str(datetime.now())
        print(
            prt("Shipping order - ShippedDate: ['' -> " +
                test_order.ShippedDate + "]"))
    else:
        test_order.ShippedDate = None
        print(prt("Returning order - ShippedDate: [ -> None]"))
    insp = inspect(test_order)
    # session.commit()

    print("")
    post_cust = session.query(
        models.Customer).filter(models.Customer.Id == "ALFKI").one()
    logic_row = LogicRow(row=pre_cust,
                         old_row=post_cust,
                         ins_upd_dlt="*",
                         nest_level=0,
                         a_session=session,
                         row_cache=None)

    if abs(post_cust.Balance - pre_cust.Balance) == 960:
        logic_row.log("Correct adjusted Customer Result")
        assert True
    else:
        row_prt(post_cust, "\nERROR - incorrect adjusted Customer Result")
        print("\n--> probable cause: Order customer update not written")
        row_prt(pre_cust, "\npre_alfki")
        assert False
Exemplo n.º 3
0
def before_flush(a_session: session, a_flush_context, an_instances):
    """
    Logic Execution processes LogicRows: row and old_row

    Note old_row is critical for:
        * user logic (did the value change?  by how much?)
        * performance / pruning (skip rules iff no dependent values change)
        * performance / optimization (1 row adjustments, not expensive select sum/count)
    """
    logic_engine.logic_logger.debug(
        "\nLogic Phase (sqlalchemy before_flush)\t\t\t")
    # print("\n***************** sqlalchemy calls logic_engine\n")
    row_cache = RowCache()
    what_is = a_session.dirty
    for each_instance in a_session.dirty:
        table_name = each_instance.__tablename__
        old_row = get_old_row(each_instance)
        logic_row = LogicRow(row=each_instance,
                             old_row=old_row,
                             ins_upd_dlt="upd",
                             nest_level=0,
                             a_session=a_session,
                             row_cache=row_cache)
        logic_row.update(reason="client")

    for each_instance in a_session.new:
        table_name = each_instance.__tablename__
        logic_row = LogicRow(row=each_instance,
                             old_row=None,
                             ins_upd_dlt="ins",
                             nest_level=0,
                             a_session=a_session,
                             row_cache=row_cache)
        logic_row.insert(reason="client")

    logic_engine.logic_logger.debug("Commit Logic Phase   \t\t\t")
    for each_logic_row_key in row_cache.row_list:
        each_logic_row = row_cache.row_list[each_logic_row_key]
        logic_engine.engine_logger.debug("visit: " + each_logic_row.__str__())
        commit_row_events = rule_bank_withdraw.rules_of_class(
            each_logic_row, CommitRowEvent)
        for each_row_event in commit_row_events:
            each_logic_row.log("Commit Event")
            each_row_event.execute(each_logic_row)

    logic_engine.logic_logger.debug("Flush Phase          \t\t\t")
Exemplo n.º 4
0
def before_flush(a_session: session, a_flush_context, an_instances):
    print("logic.logic_exec.listeners>before_flush BEGIN")
    for each_instance in a_session.dirty:
        table_name = each_instance.__tablename__
        print("logic.logic_exec.listeners>before_flush flushing Dirty! "
              + str(table_name) + "]--> " + str(each_instance))

    for each_instance in a_session.new:
        table_name = each_instance.__tablename__
        print("logic.logic_exec.listeners>before_flush flushing New! "
              + str(table_name) + "]--> " + str(each_instance))
        logic_row = LogicRow(row=each_instance, old_row=None, nest_level=0, ins_upd_dlt="ins")
        row_logic_exec = RowLogicExec(logic_row=logic_row)
        row_logic_exec.insert()

    # print("logic.logic_exec.listeners>before_flush  RuleBank: " + rb.__str__())
    print("logic.logic_exec.listeners>before_flush  END")
Exemplo n.º 5
0
    models.Order).filter(models.Order.Id == 11011).one()  # type : Order
amount_total = test_order.AmountTotal
if test_order.CustomerId == "ALFKI":
    test_order.CustomerId = "ANATR"
else:
    test_order.CustomerId = "ALFKI"
print(prt("Reparenting order - new CustomerId: " + test_order.CustomerId))
insp = inspect(test_order)
session.commit()

print("")
post_alfki = session.query(
    models.Customer).filter(models.Customer.Id == "ALFKI").one()
logic_row = LogicRow(row=pre_alfki,
                     old_row=post_alfki,
                     ins_upd_dlt="*",
                     nest_level=0,
                     a_session=session,
                     row_cache=None)

if abs(post_alfki.Balance - pre_alfki.Balance) == 960:
    logic_row.log("Correct non-adjusted Customer Result")
    assert True
else:
    row_prt(post_alfki, "\nERROR - incorrect adjusted Customer Result")
    print("\n--> probable cause: Order customer update not written")
    row_prt(pre_alfki, "\npre_alfki")
    assert False

post_anatr = session.query(
    models.Customer).filter(models.Customer.Id == "ANATR").one()
logic_row = LogicRow(row=pre_anatr,
Exemplo n.º 6
0
from logic_engine.exec_row_logic.logic_row import LogicRow
from nw.nw_logic import session  # opens db, activates logic listener <--


""" toggle Shipped Date, to trigger balance adjustment """
""" also test join.
session.query(Customer).join(Invoice).filter(Invoice.amount == 8500).all()
"""
pre_cust = session.query(models.Customer).filter(models.Customer.Id == "ALFKI").one()
session.expunge(pre_cust)

test_order = session.query(models.Order).filter(models.Order.Id == 11011).join(models.Employee).one()
if test_order.ShippedDate is None or test_order.ShippedDate == "":
    test_order.ShippedDate = str(datetime.now())
    print("shipping: ['' -> " + test_order.ShippedDate + "]")
else:
    test_order.ShippedDate = ""
    print("returning ['xxx' -> " + test_order.ShippedDate + "]")
# ship this unshipped order (dates are like 2014-03-24)
# a_session.query(models.Order).update(test_order)  # Order not iterable
insp = inspect(test_order)
session.commit()

post_cust = session.query(models.Customer).filter(models.Customer.Id == "ALFKI").one()
logic_row = LogicRow(row=pre_cust, old_row=post_cust, nest_level=0, ins_upd_dlt="*")
debug = logic_row.__str__()
print("Customer LogicRow: " + debug)
print("\nupd_order, completed\n\n")
# TODO check Customer Balance correctly adjusted