Skip to main content

Simple client for fetching data from mofdb

Project description

mofdb-client

ci status badge

A typed, fast, lightweight, client wrapping the mofdb api. This client is the fastest way to access mofdb since it utilizes the streaming bulk API. Using the regular paginated API will be slow for large page numbers.

Installation

python3 -m pip install mofdb_client==0.9.0

Example

Example of mofdb-client IDE autocompletion

from mofdb_client import fetch
for mof in fetch(vf_min=0.5, vf_max=0.99):
    print(f"Mof {mof.name} has {len(mof.isotherms)} isotherms and elements {[str(e) for e in mof.elements]}")
    print(f"This mof's cif file starts with: '{mof.cif.splitlines()[1]}'")
Mof UTEWUM_clean has 2 isotherms and elements ['Cu', 'H', 'C', 'N']
This mof's cif file starts with: '_audit_creation_date              2014-07-02'
Mof ZECKID_clean has 1 isotherms and elements ['Cu', 'H', 'C', 'N', 'O']
This mof's cif file starts with: '_audit_creation_date              2014-07-02'
Mof AQOMAW_clean has 2 isotherms and elements ['N', 'C', 'H', 'Co', 'Cl', 'O']
This mof's cif file starts with: '_cell_length_a       18.8345'
Mof AQOLOJ_clean has 2 isotherms and elements ['N', 'C', 'H', 'Co', 'Cl']
This mof's cif file starts with: '_cell_length_a       18.794'
Mof SENWOZ_clean has 2 isotherms and elements ['Zn', 'H', 'C', 'O']
This mof's cif file starts with: '_audit_creation_date              2014-07-02'
Mof IYUCIQ_clean has 2 isotherms and elements ['Dy', 'O', 'N', 'C', 'H']
This mof's cif file starts with: '_cell_length_a       29.162'
Mof ORUKET_clean has 2 isotherms and elements ['P', 'O', 'N', 'C', 'H', 'Mg']
This mof's cif file starts with: '_cell_length_a       18.571'
...

Parameters

fetch supports a number of arguments

  • name: str
  • pressure_unit: str
  • loading_unit: str
  • mofid: str
  • mofkey: str
  • vf_min: float
  • vf_max: float
  • lcd_min: float
  • lcd_max: float
  • pld_min: float
  • pld_max: float
  • sa_m2g_min: float
  • sa_m2g_max: float
  • sa_m2cm3_min: float
  • sa_m2cm3_max: float
  • database: str
  • limit: int
  • telemetry: bool default true (see telemetry section)

For valid values of pressure_units go here mof.tech.northwestern.edu/classifications.json. The mofdb_client will reject invalid units/pressures and throw InvalidUnit exception.

Design Note

fetch is lazy because mofDB is large. Be sure to loop over it with for mof in fetch() and NOT for mof in list(fetch()) since building the list will download all the mofs before it starts processing and this will be very slow and may well run out of memory.

Compatibility

Tested on Python 3.7 to 3.11.

Future Enhancements:

  • Retries for transient network failures with exponential backoff
  • Support for unit conversions
  • Only download some columns to save time/bandwidth?

Telemetry

This package may phone home crash reports that happen in library code when the telemetry arg is true. This is done using sentry. Nothing in addition to fetch params and data captured by default by sentry is ever captured.

For example this could include:

  • a stack trace including your code
  • operating system version
  • time
  • python runtime version
  • hostname
  • anything else sentry captures by default

Publishing a new version

Update pyproject.toml version

python3 -m build -n
python3 -m twine upload dist/*

Change log

0.9.0

Do not report mofdb exceptions like "InvalidUnit" to sentry error monitoring. These indicate user error.

0.8.0

Fix for crashes on queries returning no mofs. Required a change to mofdb repo as well. Add a 204.response file to zip stream to signal empty response.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mofdb_client-0.10.0.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mofdb_client-0.10.0-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file mofdb_client-0.10.0.tar.gz.

File metadata

  • Download URL: mofdb_client-0.10.0.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.9

File hashes

Hashes for mofdb_client-0.10.0.tar.gz
Algorithm Hash digest
SHA256 46c52b41ab514390577d92c7d0c9bdb0f3fcd3be129db7f8415a7b94f7397772
MD5 0562a23b109ab650785583f93c9181aa
BLAKE2b-256 ebe75fe09c82535bbb6fc4fd94cab167dd66fdd05e8ea0300cc671765b7b23b0

See more details on using hashes here.

File details

Details for the file mofdb_client-0.10.0-py3-none-any.whl.

File metadata

  • Download URL: mofdb_client-0.10.0-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.9

File hashes

Hashes for mofdb_client-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 295671f873d4f78e82e77d152110a95a765d6f4f1fd4c14bac59296d2e70c85f
MD5 fac5fe1afdbd4e135a39aa3d41939954
BLAKE2b-256 00ac2e96216f903a5c9905cd1126b705df57800b4de2efc2c1e6bed62d5e2410

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page