def create_invoice(account_id, client_id, invoice): if not invoice.get('number'): invoice['number'] = next_invoice_num(account_id) invoice_id = str(ULID.from_datetime(invoice['issued_on'])) invoice['invoice_id'] = invoice_id invoice['client_id'] = client_id invoice_item = { **make_indexes( 'Invoice', PK=f'CLIENT#{client_id}', SK=f'#INVOICE#{invoice_id}', GSI1PK=f'INVOICE#{invoice_id}', GSI1SK=f'INVOICE#{invoice_id}', ), **dict_to_item(invoice) } ddb_client.transact_write_items(TransactItems=[ make_put_unique(invoice_item), make_put_unique( dict_to_item( { 'PK': f'ACCOUNT#{account_id}#INVOICENUMBER#{invoice["number"]}', 'SK': f'ACCOUNT#{account_id}#INVOICENUMBER#{invoice["number"]}', }, False)), ]) return invoice_id
def test_ulid_from_time(): ulid1 = ULID.from_timestamp(time.time()) ulid2 = ULID.from_datetime(utcnow()) now = utcnow() t = time.time() assert ulid1.timestamp == pytest.approx(t) datetimes_almost_equal(ulid1.datetime, now) assert ulid2.timestamp == pytest.approx(t) datetimes_almost_equal(ulid2.datetime, now)