def allocate(event: commands.Allocate, uow: unit_of_work.AbstractUnitOfWork): line = model.OrderLine(event.orderid, event.sku, event.qty) with uow: product = uow.products.get(sku=line.sku) if product is None: raise exceptions.InvalidSku(f'Invalid sku {line.sku}') product.allocate(line) uow.commit()
def try_to_allocate(orderid, sku, exceptions, session_factory): line = model.OrderLine(orderid, sku, 10) try: with unit_of_work.SqlAlchemyUnitOfWork(session_factory) as uow: product = uow.products.get(sku=sku) product.allocate(line) time.sleep(0.2) uow.commit() except Exception as e: # pylint: disable=broad-except print(traceback.format_exc()) exceptions.append(e)
def test_uow_can_retrieve_a_batch_and_allocate_to_it(sqlite_session_factory): session = sqlite_session_factory() insert_batch(session, 'batch1', 'HIPSTER-WORKBENCH', 100, None) session.commit() uow = unit_of_work.SqlAlchemyUnitOfWork(sqlite_session_factory) with uow: product = uow.products.get(sku='HIPSTER-WORKBENCH') line = model.OrderLine('o1', 'HIPSTER-WORKBENCH', 10) product.allocate(line) uow.commit() batchref = get_allocated_batch_ref(session, 'o1', 'HIPSTER-WORKBENCH') assert batchref == 'batch1'