Blog drafting section (dev-only): - BlogDraftGenerator gathers project data (gaps, proposals, stats) as context and calls Claude to produce Medium-style blog posts - DB schema: blog_drafts table with title, content, tags, cost tracking - Web UI: list, generate (async with live preview), detail (rendered + source toggle), edit, and export routes - 6 writing styles: deep-dive, overview, opinion, listicle, comparison, series-post - Nav link added to sidebar under Proposals Bug fixes found via route testing (scripts/test_all_routes.py): - /authors/<id>: Draft.status → Draft.states (correct attribute name) - /false-positives: add missing `import re` in ratings.py Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
107 lines
2.3 KiB
Python
107 lines
2.3 KiB
Python
"""Data access layer for the web dashboard.
|
|
|
|
Thin wrapper around ietf_analyzer.db.Database that returns plain dicts
|
|
ready for JSON serialization or Jinja2 template rendering.
|
|
|
|
All public functions are re-exported here for backward compatibility:
|
|
from webui.data import get_overview_stats
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
# Shared utilities
|
|
from webui.data._shared import get_db, _cached, _extract_month # noqa: F401
|
|
|
|
# Drafts
|
|
from webui.data.drafts import ( # noqa: F401
|
|
OverviewStats,
|
|
DraftListItem,
|
|
DraftsPage,
|
|
get_overview_stats,
|
|
get_category_counts,
|
|
get_category_summary,
|
|
get_drafts_page,
|
|
get_draft_detail,
|
|
get_generated_drafts,
|
|
read_generated_draft,
|
|
)
|
|
|
|
# Authors
|
|
from webui.data.authors import ( # noqa: F401
|
|
AuthorInfo,
|
|
AuthorNetworkNode,
|
|
AuthorNetworkEdge,
|
|
AuthorCluster,
|
|
AuthorNetwork,
|
|
get_top_authors,
|
|
get_org_data,
|
|
get_coauthor_network,
|
|
get_cross_org_data,
|
|
get_author_network_full,
|
|
get_author_detail,
|
|
)
|
|
|
|
# Ratings
|
|
from webui.data.ratings import ( # noqa: F401
|
|
get_rating_distributions,
|
|
get_category_radar_data,
|
|
get_score_histogram,
|
|
get_false_positive_profile,
|
|
)
|
|
|
|
# Gaps
|
|
from webui.data.gaps import ( # noqa: F401
|
|
get_all_gaps,
|
|
get_gap_detail,
|
|
get_drafts_for_gap,
|
|
)
|
|
|
|
# Analysis & Visualization
|
|
from webui.data.analysis import ( # noqa: F401
|
|
TimelineData,
|
|
SimilarityGraphStats,
|
|
SimilarityGraph,
|
|
CitationGraphStats,
|
|
CitationGraph,
|
|
MonitorCost,
|
|
MonitorPipeline,
|
|
MonitorStatus,
|
|
get_ideas_by_type,
|
|
get_timeline_data,
|
|
get_similarity_graph,
|
|
get_idea_clusters,
|
|
get_timeline_animation_data,
|
|
get_monitor_status,
|
|
get_citation_graph,
|
|
get_landscape_tsne,
|
|
get_comparison_data,
|
|
get_architecture,
|
|
get_idea_analysis,
|
|
get_idea_detail,
|
|
get_trends_data,
|
|
get_complexity_data,
|
|
get_source_comparison,
|
|
get_citation_influence,
|
|
get_bcp_analysis,
|
|
)
|
|
|
|
# Search
|
|
from webui.data.search import ( # noqa: F401
|
|
SearchResults,
|
|
global_search,
|
|
get_ask_search,
|
|
get_ask_synthesize,
|
|
)
|
|
|
|
# Proposals
|
|
from webui.data.proposals import ( # noqa: F401
|
|
get_all_proposals,
|
|
get_proposal_detail,
|
|
get_proposals_for_gap,
|
|
)
|
|
|
|
# Blog Drafts
|
|
from webui.data.blog import ( # noqa: F401
|
|
get_all_blog_drafts,
|
|
get_blog_draft_detail,
|
|
)
|