Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
!precious.toml
ldlite.sqlite
ldlite.db
ldlite.db.wal

Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Please see [MIGRATING.md](./MIGRATING.md) for information on breaking changes.
### Fixed

- Endpoints which return system fields before the record list
- Example python script

### Changed

Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,12 @@ To install LDLite or upgrade to the latest version:
```bash
$ python -m pip install --upgrade ldlite
```

(On some systems it might be `python3` rather than `python`.)

If you encounter the error `ImportError: no pq wrapper available.` you can either
* Run `python -m pip install psycopg[binary]`
* Ensure the libpq package is installed for your operating system

Check out the [migration guide](./MIGRATING.md) for more information about major version upgrades.

To extract and transform data:
Expand Down
39 changes: 24 additions & 15 deletions examples/folio_demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

import sys

import httpx

import ldlite

# Demo sites
Expand All @@ -29,16 +31,17 @@
password="admin",
)

ld.connect_db(filename="ldlite.db")
# For PostgreSQL, use connect_db_postgresql() instead of connect_db():
ld.experimental_connect_db_sqlite(filename="ldlite.sqlite")
# For PostgreSQL, use connect_db_postgresql() instead:
# ld.connect_db_postgresql(dsn='dbname=ldlite host=localhost user=ldlite')

queries: list[tuple[str, ...] | tuple[str, str, object, int]] = [
("folio_agreements.entitlement", "/erm/entitlements"),
("folio_agreements.erm_resource", "/erm/resource"),
("folio_agreements.org", "/erm/org"),
("folio_agreements.refdata_value", "/erm/refdata"),
("folio_agreements.usage_data_provider", "/usage-data-providers"),
# This endpoint doesn't work in EBSCO environments
# ("folio_agreements.usage_data_provider", "/usage-data-providers"),
("folio_audit.circulation_logs", "/audit-data/circulation/logs"),
("folio_circulation.audit_loan", "/loan-storage/loan-history"),
(
Expand Down Expand Up @@ -165,7 +168,7 @@
"/acquisitions-units-storage/memberships",
),
("folio_orders.alert", "/orders-storage/alerts"),
("folio_orders.order_invoice_relationship/orders-storage/order-invoice-relns"),
("folio_orders.order_invoice_relationship", "/orders-storage/order-invoice-relns"),
("folio_orders.order_templates", "/orders-storage/order-templates"),
("folio_orders.pieces", "/orders-storage/pieces"),
("folio_orders.po_line", "/orders-storage/po-lines"),
Expand All @@ -176,36 +179,42 @@
("folio_organizations.contacts", "/organizations-storage/contacts"),
("folio_organizations.emails", "/organizations-storage/emails"),
("folio_organizations.interfaces", "/organizations-storage/interfaces"),
("folio_organizations.organizations", "/organizations-storage/organizations"),
("folio_organizations.organizations", "/organizations/organizations"),
("folio_organizations.phone_numbers", "/organizations-storage/phone-numbers"),
("folio_organizations.urls", "/organizations-storage/urls"),
("folio_source_record.records", "/source-storage/records", {}, 2),
("folio_source_record.records", "/source-storage/records", 2),
("folio_users.addresstype", "/addresstypes"),
("folio_users.departments", "/departments"),
("folio_users.groups", "/groups"),
("folio_users.proxyfor", "/proxiesfor"),
("folio_users.users", "/users"),
]

errors: list[tuple[str, BaseException]] = []
tables: list[str] = []
for q in queries:
try:
if len(q) == 4:
if len(q) == 3:
tables += ld.query(
table=q[0],
path=q[1],
query=str(q[2]),
json_depth=int(q[3]),
json_depth=int(q[2]),
)
else:
tables += ld.query(table=q[0], path=q[1], query=str(q[2]))
except (ValueError, RuntimeError) as e:
print(
'folio_demo.py: error processing "' + str(q[1]) + '": ' + str(e),
file=sys.stderr,
)
tables += ld.query(table=q[0], path=q[1])
except (ValueError, RuntimeError, httpx.HTTPError) as e:
errors += [(q[1], e)]
print()
print("Tables:")
for t in tables:
print(t)
print("(" + str(len(tables)) + " tables)")
if len(errors) > 0:
print()
print("Errors:")
for p, e in errors:
print(
'folio_demo.py: error processing "' + p + '": ' + str(e),
file=sys.stderr,
)
print("(" + str(len(errors)) + " errors)")
Loading