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
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/.
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).

Minimal example to start an uData dev server.

import os
from udata.app import create_app

app = create_app()
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=7000)