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 a curator-slug-keyed dict for the vault metrics JSON export. |
Classes
Serialised curator record for the vault metrics JSON export. |
|
A single recent feed entry from a curator's tracked sources. |
- class CuratorFeedEntry
Bases:
TypedDictA single recent feed entry from a curator’s tracked sources.
Used inside
CuratorExportRecordto surface recent social media and blog activity in the vault JSON bundle.- snippet: str
Short preview text (first 200 chars), suitable for compact listings.
Derived from
short_description. For the complete post body seefull_text.
- full_text: str
Full untruncated post body.
For X/Twitter this includes the complete note tweet text for tweets longer than 280 characters, not just the preview — see
eth_defi.feed.twitter_api._extract_full_tweet_text(). Derived fromfull_text. For the 200-character preview seesnippet.
- published_at: str
ISO 8601 UTC timestamp when the post was published. Always set — falls back to fetch time when the source does not provide a publication timestamp.
- __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 CuratorExportRecord
Bases:
TypedDictSerialised curator record for the vault metrics JSON export.
Contains curator identity metadata and recent feed entries. Keyed by curator slug in the top-level
curatorsdict ofVaultMetricsExport.- protocol_curator: bool
Whether this is a protocol-native curator (the protocol itself acts as curator) rather than a third-party risk manager.
- canonical_feeder_id: Optional[str]
When this curator is an alias, the slug of the canonical feeder whose posts should be used.
Nonefor non-alias curators.
- logos: eth_defi.vault.curator.CuratorLogos
Logo URLs for available 256x256 PNG variants.
- recent_posts: list[eth_defi.vault.curator_export.CuratorFeedEntry]
Most recent feed entries, ordered newest first.
- __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:
Load metadata from curator YAML via
build_curator_metadata_json(), or from the protocol YAML for protocol curators without a curator YAML file.Resolve
canonical_feeder_idfor alias curators so that feed posts are looked up under the correct feeder.Batch-query recent posts from the feed database.
Convert timestamps to ISO 8601 strings and assemble the final
CuratorExportRecorddicts.
When feed_db is
None(e.g. the database file does not exist), allrecent_postslists will be empty.- Parameters
curator_slugs (collections.abc.Iterable[str]) – Iterable of curator slugs to include (typically extracted from
curator_slugfields in the vault records).feed_db (Optional[eth_defi.feed.database.VaultPostDatabase]) – Open vault post database for querying recent posts. Pass
Noneto 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]