uData
raw JSON → 16.4.0 verified Sat May 09 auth: no python
uData is an open-source data portal platform for managing and publishing open data. It provides a comprehensive API, harvesting capabilities, and a customizable frontend. Current version is 16.4.0, requires Python <3.14, >=3.11. The project releases regularly (every few weeks) with active maintenance.
pip install udata Common errors
error pymongo.errors.ServerSelectionTimeoutError: No servers found ↓
cause MongoDB is not running or not reachable at the configured host.
fix
Start MongoDB on localhost:27017 or set MONGODB_HOST environment variable to the correct URI.
error elasticsearch.exceptions.ConnectionError: ConnectionError(<urllib3.connection.HTTPConnection object at 0x...>: Failed to establish a new connection: [Errno 111] Connection refused) ↓
cause Elasticsearch service is not running or not reachable.
fix
Start Elasticsearch on localhost:9200 or configure ELASTICSEARCH_URL.
error AttributeError: 'User' object has no attribute 'apikey' ↓
cause Code uses the old User.apikey field which was removed in uData 16.0.0.
fix
Use the new ApiToken model and endpoints. For authentication, use the token from POST /api/1/me/api_tokens/.
Warnings
breaking uData 16.0.0 replaced the single User.apikey with a new API token system. Old apikey field is removed. API endpoints changed. ↓
fix Migrate to the new ApiToken endpoints: POST /api/1/me/api_tokens/ to create, DELETE to revoke.
breaking Pages feature removed in 16.2.0 in favor of editorial blocks. The 'pages' model and related endpoints are gone. ↓
fix Replace pages with editorial blocks (see migration guide).
gotcha uData requires a running Elasticsearch instance and a MongoDB. Common footgun: starting the app without these services leads to cryptic connection errors. ↓
fix Ensure Elasticsearch and MongoDB are running and configured via environment variables (ELASTICSEARCH_URL, MONGODB_HOST).
Imports
- udata
import udata
Quickstart
import os
from udata.app import create_app
app = create_app()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7000)