{"id":23636,"library":"drms","title":"DRMS","description":"A Python client for accessing HMI, AIA and MDI data from the Stanford JSOC DRMS (Data Record Management System). Version 0.9.0 requires Python >=3.10.","status":"active","version":"0.9.0","language":"python","source_language":"en","source_url":"https://github.com/sunpy/drms","tags":["solar","heliophysics","jsoc","drms","data-access"],"install":[{"cmd":"pip install drms","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Core dependency for data array handling","package":"numpy","optional":false},{"reason":"Optional but commonly used with DRMS for metadata","package":"pandas","optional":true},{"reason":"Optional integration for solar physics data","package":"sunpy","optional":true}],"imports":[{"note":"Client is exported at package level since early versions","wrong":"from drms.client import Client","symbol":"Client","correct":"from drms import Client"},{"note":"Exception classes are part of the public top-level API","wrong":"from drms.exceptions import DrmsOperationError","symbol":"DrmsOperationError","correct":"from drms import DrmsOperationError"}],"quickstart":{"code":"import os\nfrom drms import Client\n\nc = Client()\nts = c.query('hmi.v_45s', key='T_OBS', count=5)\nprint(ts)","lang":"python","description":"Creates a DRMS Client and queries the HMI series for 5 records' observation times."},"warnings":[{"fix":"Update your code to use the new `ExportRequest` API: call `.wait()` or `.download()` on the returned object.","message":"In version 0.7.0, the `Client` class removed support for Python 3.7 and below. The `export` method now returns a `ExportRequest` object instead of a dict.","severity":"breaking","affected_versions":">=0.7.0"},{"fix":"If you relied on list indexing, use DataFrame column selection or convert with `.values.tolist()`.","message":"The `query` method changed its return type from a list of strings to a pandas DataFrame in version 0.6.0.","severity":"breaking","affected_versions":">=0.6.0"},{"fix":"Wrap calls in try/except blocks: try: ... except drms.DrmsOperationError as e: print(e)","message":"DRMS requires an internet connection and the JSOC server may be unreachable during maintenance. Always handle `ConnectionError` or `drms.DrmsOperationError`.","severity":"gotcha","affected_versions":"all"},{"fix":"Use `Client(email='your.email@example.com')` instead of the default anonymous client.","message":"When accessing private data or making many queries, you must set the `jsoc_email` parameter in the Client constructor, otherwise the server may throttle or reject requests.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Run `pip install drms` in your active Python environment (check Python version >=3.10).","cause":"Library not installed or installed in wrong environment.","error":"ImportError: No module named 'drms'"},{"fix":"Check the series name on JSOC website. For valid series, use `c.series()` to list available series.","cause":"Typo in series name; series names are case-sensitive and must match JSOC exactly.","error":"drms.exceptions.DrmsOperationError: No such series: hmi.v_45s"},{"fix":"Wait and retry. Use exponential backoff. Check status at http://jsoc.stanford.edu/.","cause":"JSOC server is down or network issue.","error":"ConnectionError: HTTPSConnectionPool ... Max retries exceeded"},{"fix":"Use new API: `req = c.export(hdu_list, protocol='as-is')` then `req.wait()` and `req.download()`.","cause":"The `export` method signature changed in drms 0.7.0.","error":"TypeError: export() missing required argument 'request'"},{"fix":"Use `c.series('hmi.v_45s').keys()` to get available keywords.","cause":"Trying to index a Series object returned by `c.series('hmi.v_45s')` incorrectly.","error":"'Series' object is not subscriptable"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}