streamtex 0.7.76__tar.gz → 0.7.77__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {streamtex-0.7.76/streamtex.egg-info → streamtex-0.7.77}/PKG-INFO +1 -1
- {streamtex-0.7.76 → streamtex-0.7.77}/pyproject.toml +1 -1
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/release_cmd.py +4 -2
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/deploy/stx_auth.py +1 -1
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/media.py +14 -1
- {streamtex-0.7.76 → streamtex-0.7.77/streamtex.egg-info}/PKG-INFO +1 -1
- {streamtex-0.7.76 → streamtex-0.7.77}/LICENSE +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/MANIFEST.in +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/README.md +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/setup.cfg +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/__main__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/config.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/generate.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/history.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/metadata.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/providers/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/providers/base.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/providers/fal.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/providers/google.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/providers/openai.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/ai/providers/registry.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/auth.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/banner.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/bib.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/bib_preview.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/block_helpers.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/blocks.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/book.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/browser.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/_claude_files.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/_divergence.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/_install_local_packs.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/_shared.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/_stx_toml.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/_toml_helpers.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/artifact_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/bib_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/build_check.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/cache_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/claude_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/claude_global.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/claude_project.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/commands.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/component_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/console.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/coolify.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/deploy_auth_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/deploy_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/dev_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/dev_config.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/ds_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/export_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/install_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/kit_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/main.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/migrations/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/migrations/base.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/migrations/compat.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/migrations/registry.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/migrations/v0_4_0.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/migrations/v0_4_6.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/pack_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/project_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/project_rules.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/publish_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/published_check.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/run_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/run_set.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/screenshot_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/shortcuts.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/status_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/sync_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/upgrade_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/validate_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/cli/workspace_cmd.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/code.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/collection.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/constants.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/container.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/_frontmatter.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/agent.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/ai_prompt.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/archetype.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/asset.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/discovery.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/guideline.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/install.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/integration.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/loaders.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/palette.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/skill.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/spec.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/artifacts/validation.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/contracts.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/discovery.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/core/validation.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/countdown.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/deeplink.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/deploy/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/enums.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/export.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/export_enrich.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/export_paginate.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/export_widgets.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/facts.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/grid.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/gsheet.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/hover_tooltip.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/i18n.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/image.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/image_crop.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/image_editor.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/image_utils.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/inspector.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/kept.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/latex.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/latex_utils.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/link_config.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/link_preview.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/list.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/loading.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/markdown.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/marker.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/marker_runtime.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/media_overlay.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/mermaid.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/overlay.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/pagewalk.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/pdf_export.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/plantuml.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/presentation.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/presentation_profile.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/printing.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/build.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/config.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/coolify.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/levels.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/ops.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/passwords.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/state.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/target.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/live/Dockerfile +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/live/entrypoint.sh +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/live/nginx.conf +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/live/stx-http.conf +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/live/supervisord.conf +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/static/10-stx-init.sh +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/static/20-stx-auth.sh +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/static/Dockerfile +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/static/closed.html +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/static/nginx.conf +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/static/stx-http.conf +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/release/templates/static/stx_auth.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/runtime_flags.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/scripts/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/scripts/migrate_curves_to_relative.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/search.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/slide.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/slide_note.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/space.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/spacing.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/static/css/stx_global.css +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/static/default.css +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/static/js/stx_countdown.js +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/static/js/stx_marker_observer.js +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/static/js/stx_scroll_spy.js +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/static/js/stx_video.js +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/static/logo-stx-tiny.png +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/static/logo-stx.png +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/styles/__init__.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/styles/base.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/styles/container.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/styles/core.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/styles/scale.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/styles/scale_curves.toml +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/styles/text.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/styles/visibility.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/tikz.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/toc.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/utils.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/watch.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/write.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex/zoom.py +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex.egg-info/SOURCES.txt +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex.egg-info/dependency_links.txt +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex.egg-info/entry_points.txt +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex.egg-info/requires.txt +0 -0
- {streamtex-0.7.76 → streamtex-0.7.77}/streamtex.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: streamtex
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.77
|
|
4
4
|
Summary: AI-powered content framework for Streamlit — create presentations, courses, and web-books with Claude or Cursor, no coding required.
|
|
5
5
|
Author-email: Nicolas Guelfi <nicolas.guelfi@laposte.net>
|
|
6
6
|
License-Expression: BUSL-1.1
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "streamtex"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.77"
|
|
8
8
|
description = "AI-powered content framework for Streamlit — create presentations, courses, and web-books with Claude or Cursor, no coding required."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -296,7 +296,8 @@ def media_report_cmd(site, show, html_env):
|
|
|
296
296
|
"""What SITE's live face would serve with `[release] media_per_site = true` (#142), on this machine.
|
|
297
297
|
|
|
298
298
|
Exports SITE's HTML from the commit, as publish does, then sorts its static folder: the files the
|
|
299
|
-
export shows and those media_keep names are kept, the others would no
|
|
299
|
+
export shows or links to under app/static/ and those media_keep names are kept, the others would no
|
|
300
|
+
longer be served. Nothing is
|
|
300
301
|
sent: the server is not read nor changed."""
|
|
301
302
|
import tempfile
|
|
302
303
|
from pathlib import Path
|
|
@@ -316,9 +317,10 @@ def media_report_cmd(site, show, html_env):
|
|
|
316
317
|
raise ReleaseError(f"{site}: {s.doc_dir}/static is not a folder — the live face serves no media")
|
|
317
318
|
kept, dropped = sorted(mp.kept), mp.dropped
|
|
318
319
|
by_export = sum(1 for why in mp.kept.values() if why == "export")
|
|
320
|
+
by_link = sum(1 for why in mp.kept.values() if why == "export link")
|
|
319
321
|
click.echo(f"{site} — static folder {mp.static} ({len(mp.files)} files, {md.human(mp.size(mp.files))})")
|
|
320
322
|
click.echo(f" kept: {len(kept)} file(s), {md.human(mp.size(kept))} — {by_export} shown by the HTML "
|
|
321
|
-
f"export, {len(kept) - by_export} named by media_keep")
|
|
323
|
+
f"export, {by_link} linked by it, {len(kept) - by_export - by_link} named by media_keep")
|
|
322
324
|
click.echo(f" no longer served: {len(dropped)} file(s), {md.human(mp.size(dropped))}")
|
|
323
325
|
if mp.unmatched:
|
|
324
326
|
click.echo(f" {mp.unmatched} export file(s) match no static file (inlined or generated: nothing to keep)")
|
|
@@ -107,7 +107,7 @@ from pathlib import Path
|
|
|
107
107
|
from urllib.parse import parse_qs, urlsplit
|
|
108
108
|
|
|
109
109
|
#: The library release this file ships with, and its interface number (#135).
|
|
110
|
-
STX_VERSION = "0.7.
|
|
110
|
+
STX_VERSION = "0.7.77"
|
|
111
111
|
AUTH_INTERFACE = 3
|
|
112
112
|
|
|
113
113
|
DEFAULT_ROOT = "/var/lib/stx-auth"
|
|
@@ -7,6 +7,9 @@ document. With ``[release] media_per_site = true``, each release of the code hol
|
|
|
7
7
|
|
|
8
8
|
* the files its HTML export shows: each file of the export's ``data/`` folders, found again in the
|
|
9
9
|
static folder by its content (size, then SHA-256) — the export copies a served file unchanged;
|
|
10
|
+
* the files its HTML export links to under ``app/static/`` — a download offered by a link, at the
|
|
11
|
+
site's address or another's (``href='https://<site>…/app/static/downloads/x.zip'``): the export
|
|
12
|
+
leaves such a link as it is, and the live face must serve its file;
|
|
10
13
|
* the files ``media_keep`` names (``[release]`` and the site's table): glob patterns relative to the
|
|
11
14
|
static folder, as in ``/app/static/<path>``; ``*`` also crosses ``/``.
|
|
12
15
|
|
|
@@ -24,6 +27,7 @@ from collections import defaultdict
|
|
|
24
27
|
from dataclasses import dataclass, field
|
|
25
28
|
from fnmatch import fnmatchcase
|
|
26
29
|
from pathlib import Path
|
|
30
|
+
from urllib.parse import unquote
|
|
27
31
|
|
|
28
32
|
from .config import ReleaseConfig, Site
|
|
29
33
|
|
|
@@ -31,6 +35,8 @@ SERVED = ".stx-served"
|
|
|
31
35
|
|
|
32
36
|
#: A path under the static folder named in a site's own files: ``static/…`` or ``app/static/…``.
|
|
33
37
|
_NAMED_RE = re.compile(r"""(?:app/)?static/([\w.~/-]+)""")
|
|
38
|
+
#: A link of the export to a served file, absolute or not: the path after ``app/static/``.
|
|
39
|
+
_LINKED_RE = re.compile(r"""app/static/([^"'\s()<>?#\\]+)""")
|
|
34
40
|
_TEXT = {".py", ".md", ".html", ".css", ".js", ".toml", ".json", ".txt", ".yaml", ".yml"}
|
|
35
41
|
|
|
36
42
|
|
|
@@ -40,7 +46,8 @@ class MediaPlan:
|
|
|
40
46
|
|
|
41
47
|
static: Path | None # the site's static folder, resolved (None: it has none)
|
|
42
48
|
files: dict[str, int] = field(default_factory=dict) # every file of it → its size
|
|
43
|
-
kept: dict[str, str] = field(default_factory=dict) # served → why: "export"
|
|
49
|
+
kept: dict[str, str] = field(default_factory=dict) # served → why: "export", "export link",
|
|
50
|
+
# or the media_keep pattern
|
|
44
51
|
unmatched: int = 0 # export files found in no static file (inlined, generated)
|
|
45
52
|
named: list[str] = field(default_factory=list) # named in the site's files, not kept
|
|
46
53
|
|
|
@@ -117,6 +124,12 @@ def _plan(cfg: ReleaseConfig, site: Site, code: Path, html: Path) -> MediaPlan:
|
|
|
117
124
|
mp.kept.setdefault(rel, "export")
|
|
118
125
|
found = True
|
|
119
126
|
mp.unmatched += not found
|
|
127
|
+
for f in sorted(html.rglob("*")):
|
|
128
|
+
if f.is_file() and f.suffix in (".html", ".css", ".js"):
|
|
129
|
+
for m in _LINKED_RE.findall(f.read_text(encoding="utf-8", errors="replace")):
|
|
130
|
+
rel = unquote(m.replace("&", "&")).rstrip("/")
|
|
131
|
+
if rel in mp.files:
|
|
132
|
+
mp.kept.setdefault(rel, "export link")
|
|
120
133
|
for pat in keep_patterns(cfg, site):
|
|
121
134
|
for rel in mp.files:
|
|
122
135
|
if fnmatchcase(rel, pat):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: streamtex
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.77
|
|
4
4
|
Summary: AI-powered content framework for Streamlit — create presentations, courses, and web-books with Claude or Cursor, no coding required.
|
|
5
5
|
Author-email: Nicolas Guelfi <nicolas.guelfi@laposte.net>
|
|
6
6
|
License-Expression: BUSL-1.1
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|