georest
Stdlib-only Python clients for geospatial REST APIs — ArcGIS Image, Map and Feature Services, the USFS Enterprise Data Warehouse (EDW), and ArcGIS Portal search.
Zero dependencies. Everything is urllib and json from the standard library.
Nothing to resolve, nothing to pin, nothing to break — it installs cleanly into an
ArcGIS Pro arcgispro-py3 clone, a locked-down agency environment, or a bare
python:slim container.
pip install georest
Quick start
from georest.restesri import edw, portal, services
# Search the USFS EDW catalog by keyword or theme
hits = edw.search_edw_services("fire")
# Pull features as GeoJSON (layer 63 = "Burned Area Boundaries (All Years)")
geojson = edw.query_features(
"EDW_MTBS_01", 63,
where="fire_name LIKE '%CAMERON PEAK%'",
out_fields="fire_name,acres,year",
)
# Search any ArcGIS Portal — IIPP, ArcGIS Online, USGS, NOAA, USFS, NASA,
# or any ArcGIS Enterprise install
results = portal.searchPortal("naip 2023", portal="agol")
# Generic ArcGIS service operations
tile_url = services.getImageServiceTileUrl("https://.../ImageServer")
The three modules are also re-exported at the top level, so from georest import edw
works too. They load lazily, so import georest costs almost nothing.
Layout
| Import path | What it covers |
|---|---|
georest.restesri.edw |
USFS EDW: catalog search, layer-role tagging, FGDC/ISO metadata, feature and analytic queries |
georest.restesri.portal |
ArcGIS Portal search and service metadata |
georest.restesri.services |
Generic Image/Map/Feature Service queries and raster operations |
restesri is the Esri/ArcGIS provider. It sits under georest as a subpackage so
other REST providers can be added alongside it without a namespace collision.
Full per-function reference: docs/api.md. Runnable notebooks: examples/.
Maintenance tool
georest-check-themes # report drift vs. the live EDW catalog
georest-check-themes --emit # + paste-ready _SERVICE_THEMES entries
edw._SERVICE_THEMES is hand-curated and powers theme filtering and description
matching. EDW publishes and retires services without notice, so the table rots
quietly — an untyped service still appears in search results, but as theme
uncategorized with no description for keyword matching to reach. Exit status is
0 in sync, 1 drifted, 2 unreachable.
Migrating from RESTesri
This package was previously a loose RESTesri/ directory that worked only when the
repository root happened to be on sys.path. Update imports:
from RESTesri import edw # before
from georest.restesri import edw # after
from RESTesri._http import fetch_json # before
from georest.restesri._http import fetch_json # after
Then delete any sys.path.insert(...) bootstrap — pip install georest (or
pip install -e . from a clone) makes it unnecessary.
Development
git clone https://github.com/redcastle-resources/georest
cd georest
pip install -e ".[dev]"
python -m pytest # or: python -m unittest discover -s tests -t .
EDW_LIVE=1 SERVICES_LIVE=1 python -m pytest # include the network tests
This is a src/ layout, so pip install -e . is required before the tests can
import the package — that is deliberate. It makes the suite import the installed
artifact rather than the source directory, so a packaging mistake fails loudly
instead of being masked by the working directory.
Live tests skip rather than fail when the servers are unreachable; EDW
intermittently answers 404, 500, Layer not found, or 200-with-no-layers for
services that work moments later. See tests/README.md and
CONTRIBUTING.md.
Requirements
Python 3.9 or newer. The 3.9 floor is deliberate: ArcGIS Pro 3.0–3.2 ships Python 3.9, and that is squarely this library's audience.
License
Apache License 2.0 — see LICENSE.
portal.py and services.py were ported from
geeViz's esriLib.py, with the
viewer-rendering functions removed; these modules fetch data rather than render it.
Release files for georest 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| georest-0.1.0.tar.gz | 183.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| georest-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 242.0 kB
Release files / georest-0.1.0.tar.gz
| Download URL | georest-0.1.0.tar.gz |
|---|---|
| Size | 183.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0fdd6022892502e2c81b7231ac5acf5370d6d0b8eaffea838842bdcc6ff2590f
|
|
BLAKE2b-256 checksum How to use checksums |
42cf64e93972b5e3dda0fe3e589dd24fc3ed7edabbe878bf6ea8beba21df0f09
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency logRelease files / georest-0.1.0-py3-none-any.whl
| Download URL | georest-0.1.0-py3-none-any.whl |
|---|---|
| Size | 58.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b643de110fd37483d9a862558786db3febe4bcc370cee7e25aa88f92ee4b62ee
|
|
BLAKE2b-256 checksum How to use checksums |
868e2f3607a1a128b6a773680897261df60b9ac06da0a473d1fa34d5f5e6e00f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency log