vault.curator_export

Documentation for eth_defi.vault.curator_export Python module.

Build curator metadata and recent feed entries for the vault JSON export.

Resolves curator slugs from vault records to structured metadata (name, website, social URLs, logos) and recent feed entries from the post database. The result is a dict keyed by curator slug, stored at the top level of the vault metrics JSON bundle alongside core3_protocols.

Example:

from eth_defi.feed.database import VaultPostDatabase
from eth_defi.vault.curator_export import build_curators_for_export

feed_db = VaultPostDatabase(Path("vault-post-database.duckdb"))
curators = build_curators_for_export(
    ["gauntlet", "re7-labs", "hyperliquid"],
    feed_db=feed_db,
)
feed_db.close()

# curators["gauntlet"]["recent_posts"] → list of recent feed entries

Functions

build_curators_for_export(curator_slugs[, ...])

Build a curator-slug-keyed dict for the vault metrics JSON export.

Classes

CuratorExportRecord

Serialised curator record for the vault metrics JSON export.

CuratorFeedEntry

A single recent feed entry from a curator's tracked sources.

class CuratorExportRecord

Bases: TypedDict

Serialised curator record for the vault metrics JSON export.

Contains curator identity metadata and recent feed entries. Keyed by curator slug in the top-level curators dict of VaultMetricsExport.

__init__(*args, **kwargs)
__new__(**kwargs)
clear()

Remove all items from the dict.

copy()

Return a shallow copy of the dict.

fromkeys(value=None, /)

Create a new dictionary with keys from iterable and values set to value.

get(key, default=None, /)

Return the value for key if key is in the dictionary, else default.

items()

Return a set-like object providing a view on the dict’s items.

keys()

Return a set-like object providing a view on the dict’s keys.

pop(k[, d]) v, remove specified key and return the corresponding value.

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem()

Remove and return a (key, value) pair as a 2-tuple.

Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.

setdefault(key, default=None, /)

Insert key with a value of default if key is not in the dictionary.

Return the value for key if key is in the dictionary, else default.

update([E, ]**F) None.  Update D from mapping/iterable E and F.

If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]

values()

Return an object providing a view on the dict’s values.

class CuratorFeedEntry

Bases: TypedDict

A single recent feed entry from a curator’s tracked sources.

Used inside CuratorExportRecord to surface recent social media and blog activity in the vault JSON bundle.

__init__(*args, **kwargs)
__new__(**kwargs)
clear()

Remove all items from the dict.

copy()

Return a shallow copy of the dict.

fromkeys(value=None, /)

Create a new dictionary with keys from iterable and values set to value.

get(key, default=None, /)

Return the value for key if key is in the dictionary, else default.

items()

Return a set-like object providing a view on the dict’s items.

keys()

Return a set-like object providing a view on the dict’s keys.

pop(k[, d]) v, remove specified key and return the corresponding value.

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem()

Remove and return a (key, value) pair as a 2-tuple.

Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.

setdefault(key, default=None, /)

Insert key with a value of default if key is not in the dictionary.

Return the value for key if key is in the dictionary, else default.

update([E, ]**F) None.  Update D from mapping/iterable E and F.

If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]

values()

Return an object providing a view on the dict’s values.

build_curators_for_export(curator_slugs, feed_db=None, max_posts_per_curator=10, public_url='')

Build a curator-slug-keyed dict for the vault metrics JSON export.

For each curator slug present in the exported vaults:

  1. Load metadata from curator YAML via build_curator_metadata_json(), or from the protocol YAML for protocol curators without a curator YAML file.

  2. Resolve canonical_feeder_id for alias curators so that feed posts are looked up under the correct feeder.

  3. Batch-query recent posts from the feed database.

  4. Convert timestamps to ISO 8601 strings and assemble the final CuratorExportRecord dicts.

When feed_db is None (e.g. the database file does not exist), all recent_posts lists will be empty.

Parameters
  • curator_slugs (collections.abc.Iterable[str]) – Iterable of curator slugs to include (typically extracted from curator_slug fields in the vault records).

  • feed_db (Optional[eth_defi.feed.database.VaultPostDatabase]) – Open vault post database for querying recent posts. Pass None to skip feed enrichment.

  • max_posts_per_curator (int) – Maximum number of recent posts per curator.

  • public_url (str) – Public base URL for constructing logo URLs.

Returns

Dict mapping curator slug to CuratorExportRecord.

Return type

dict[str, eth_defi.vault.curator_export.CuratorExportRecord]