limelight-app 0.0.1__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.
- limelight_app-0.0.1/.gitattributes +36 -0
- limelight_app-0.0.1/.github/workflows/build-installers.yml +144 -0
- limelight_app-0.0.1/.github/workflows/publish.yml +54 -0
- limelight_app-0.0.1/.gitignore +8 -0
- limelight_app-0.0.1/.vscode/launch.json +29 -0
- limelight_app-0.0.1/CHANGELOG.md +33 -0
- limelight_app-0.0.1/LICENSE +21 -0
- limelight_app-0.0.1/PKG-INFO +89 -0
- limelight_app-0.0.1/README.md +55 -0
- limelight_app-0.0.1/examples/create_example00_simple_physicalmeasurements.py +321 -0
- limelight_app-0.0.1/examples/create_example01_lotka_volterra.py +748 -0
- limelight_app-0.0.1/examples/create_example02_signal_filters.py +344 -0
- limelight_app-0.0.1/examples/create_example03_story_images.py +60 -0
- limelight_app-0.0.1/examples/create_example10_ukhprhp_timeseries.py +558 -0
- limelight_app-0.0.1/examples/create_example20_wiki.py +237 -0
- limelight_app-0.0.1/examples/create_example30_largedataset.py +106 -0
- limelight_app-0.0.1/examples/create_example31_style_gallery.py +323 -0
- limelight_app-0.0.1/examples/create_example90_performance_test.py +322 -0
- limelight_app-0.0.1/examples/example01_lotka_volterra/images/fox.png +0 -0
- limelight_app-0.0.1/examples/example01_lotka_volterra/images/rabbit.png +0 -0
- limelight_app-0.0.1/examples/example03_story_images/story/images/bench-rig.jpg +0 -0
- limelight_app-0.0.1/examples/example03_story_images/story/images/signal-path.png +0 -0
- limelight_app-0.0.1/examples/example03_story_images/story/index.md +68 -0
- limelight_app-0.0.1/examples/example10_ukhprhp_data/bank of england interest rates/Bank Rate history and data Bank of England Database.csv +260 -0
- limelight_app-0.0.1/examples/example10_ukhprhp_data/bank of england interest rates/data.csv +870 -0
- limelight_app-0.0.1/examples/example10_ukhprhp_data/gov.uk - Private rent and house prices/Figure_2__Annual_house_price_inflation_is_highest_in_the_North_East_.csv +17 -0
- limelight_app-0.0.1/examples/example10_ukhprhp_data/gov.uk - Private rent and house prices/Figure_5__The_North_East_was_the_English_region_with_the_highest_annual_rent_inflation_.csv +17 -0
- house prices, UK July 2026.pdf +0 -0
- house prices/datadownload (1).xlsx +0 -0
- house prices/datadownload (2).xlsx +0 -0
- house prices/datadownload (3).xlsx +0 -0
- house prices/datadownload (4).xlsx +0 -0
- house prices/datadownload.xlsx +0 -0
- limelight_app-0.0.1/examples/example10_ukhprhp_data/gov.uk - Private rent and house prices/fig1_hp.csv +134 -0
- limelight_app-0.0.1/examples/example10_ukhprhp_data/rpi/series-110826.csv +1183 -0
- limelight_app-0.0.1/examples/example10_ukhprhp_data/rpi/src.txt +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia.html +4513 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/enwiki-25.svg +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/load(1).php +23 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/load(2).php +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/load.php +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/mediawiki_compact.svg +30 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/wikimedia.svg +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/wikipedia-tagline-en-25.svg +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of World War I - Wikipedia_files/wikipedia-wordmark-en-25.svg +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia.html +1088 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/Unemployed_men_queued_outside_a_depression_soup_kitchen_opened_in_Chicago_by_Al_Capone,_02-1931_-_NARA_-_541927.jpg +0 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/enwiki-25.svg +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/load(1).php +23 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/load(2).php +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/load.php +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/mediawiki_compact.svg +30 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/wikimedia.svg +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/wikipedia-tagline-en-25.svg +1 -0
- limelight_app-0.0.1/examples/example20_wiki/srcs/Timeline of the Great Depression - Wikipedia_files/wikipedia-wordmark-en-25.svg +1 -0
- limelight_app-0.0.1/examples/largeseries_demo.py +77 -0
- limelight_app-0.0.1/key.txt +0 -0
- limelight_app-0.0.1/packaging/README.md +106 -0
- limelight_app-0.0.1/packaging/limelight.spec +148 -0
- limelight_app-0.0.1/packaging/limelight_entry.py +55 -0
- limelight_app-0.0.1/packaging/linux/build_linux_packages.sh +152 -0
- limelight_app-0.0.1/packaging/linux/limelight-mime.xml +20 -0
- limelight_app-0.0.1/packaging/linux/limelight.desktop +12 -0
- limelight_app-0.0.1/packaging/linux/limelight.png +0 -0
- limelight_app-0.0.1/packaging/macos/build_dmg.sh +60 -0
- limelight_app-0.0.1/packaging/make_icons.py +124 -0
- limelight_app-0.0.1/packaging/windows/limelight.ico +0 -0
- limelight_app-0.0.1/packaging/windows/limelight.iss +64 -0
- limelight_app-0.0.1/pyproject.toml +77 -0
- limelight_app-0.0.1/setup.cfg +4 -0
- limelight_app-0.0.1/src/limelight/__init__.py +119 -0
- limelight_app-0.0.1/src/limelight/__main__.py +13 -0
- limelight_app-0.0.1/src/limelight/app.py +1192 -0
- limelight_app-0.0.1/src/limelight/assets/limelight-icon.svg +16 -0
- limelight_app-0.0.1/src/limelight/cli.py +237 -0
- limelight_app-0.0.1/src/limelight/dhall_subset.py +878 -0
- limelight_app-0.0.1/src/limelight/gui_cli.py +59 -0
- limelight_app-0.0.1/src/limelight/images.py +175 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-00-core.dhall +86 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-01-document.dhall +84 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-02-coredata.dhall +93 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-02-datasets.dhall +136 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-03-datasets.dhall +75 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-04-transform.dhall +15 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-00-types.dhall +39 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-10-figurespec.dhall +28 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-11-figurespec-axes.dhall +79 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-12-figurespec-plotartists.dhall +81 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-20-figureview.dhall +36 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-25-map.dhall +57 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-26-tableview.dhall +61 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure-30-form.dhall +27 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-05-figure.dhall +69 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1-06-assets.dhall +75 -0
- limelight_app-0.0.1/src/limelight/language-reference/limelight-v1.dhall +55 -0
- limelight_app-0.0.1/src/limelight/largeseries/__init__.py +37 -0
- limelight_app-0.0.1/src/limelight/largeseries/arraysource.py +77 -0
- limelight_app-0.0.1/src/limelight/largeseries/cache.py +274 -0
- limelight_app-0.0.1/src/limelight/largeseries/cachedir.py +29 -0
- limelight_app-0.0.1/src/limelight/largeseries/constants.py +21 -0
- limelight_app-0.0.1/src/limelight/largeseries/exceptions.py +14 -0
- limelight_app-0.0.1/src/limelight/largeseries/hashing.py +20 -0
- limelight_app-0.0.1/src/limelight/largeseries/memo.py +104 -0
- limelight_app-0.0.1/src/limelight/largeseries/mpl.py +126 -0
- limelight_app-0.0.1/src/limelight/largeseries/pyramid.py +161 -0
- limelight_app-0.0.1/src/limelight/largeseries/query.py +180 -0
- limelight_app-0.0.1/src/limelight/largeseries/timing.py +33 -0
- limelight_app-0.0.1/src/limelight/largeseries_bridge.py +109 -0
- limelight_app-0.0.1/src/limelight/ll.py +50 -0
- limelight_app-0.0.1/src/limelight/logging_config.py +91 -0
- limelight_app-0.0.1/src/limelight/pdf_export.py +681 -0
- limelight_app-0.0.1/src/limelight/qt_app.py +4676 -0
- limelight_app-0.0.1/src/limelight/reader.py +211 -0
- limelight_app-0.0.1/src/limelight/refs.py +149 -0
- limelight_app-0.0.1/src/limelight/semantic.py +647 -0
- limelight_app-0.0.1/src/limelight/settings.py +31 -0
- limelight_app-0.0.1/src/limelight/signing.py +145 -0
- limelight_app-0.0.1/src/limelight/story_markdown.py +518 -0
- limelight_app-0.0.1/src/limelight/util.py +0 -0
- limelight_app-0.0.1/src/limelight/writer.py +2608 -0
- limelight_app-0.0.1/src/limelight_app.egg-info/PKG-INFO +89 -0
- limelight_app-0.0.1/src/limelight_app.egg-info/SOURCES.txt +148 -0
- limelight_app-0.0.1/src/limelight_app.egg-info/dependency_links.txt +1 -0
- limelight_app-0.0.1/src/limelight_app.egg-info/entry_points.txt +6 -0
- limelight_app-0.0.1/src/limelight_app.egg-info/requires.txt +9 -0
- limelight_app-0.0.1/src/limelight_app.egg-info/scm_file_list.json +144 -0
- limelight_app-0.0.1/src/limelight_app.egg-info/scm_version.json +8 -0
- limelight_app-0.0.1/src/limelight_app.egg-info/top_level.txt +1 -0
- limelight_app-0.0.1/tests/largeseries/test_cache.py +167 -0
- limelight_app-0.0.1/tests/largeseries/test_cachedir.py +61 -0
- limelight_app-0.0.1/tests/largeseries/test_hashing.py +40 -0
- limelight_app-0.0.1/tests/largeseries/test_memo.py +76 -0
- limelight_app-0.0.1/tests/largeseries/test_mpl.py +97 -0
- limelight_app-0.0.1/tests/largeseries/test_pyramid.py +99 -0
- limelight_app-0.0.1/tests/largeseries/test_query.py +108 -0
- limelight_app-0.0.1/tests/test_archive_roundtrip.py +79 -0
- limelight_app-0.0.1/tests/test_dhall_subset.py +329 -0
- limelight_app-0.0.1/tests/test_examples_build.py +59 -0
- limelight_app-0.0.1/tests/test_figure_numbering.py +161 -0
- limelight_app-0.0.1/tests/test_images.py +104 -0
- limelight_app-0.0.1/tests/test_largeseries_integration.py +115 -0
- limelight_app-0.0.1/tests/test_ll.py +34 -0
- limelight_app-0.0.1/tests/test_page_geometry.py +229 -0
- limelight_app-0.0.1/tests/test_pdf_export.py +283 -0
- limelight_app-0.0.1/tests/test_rect_decorator.py +114 -0
- limelight_app-0.0.1/tests/test_signing.py +74 -0
- limelight_app-0.0.1/tests/test_story_images.py +226 -0
- limelight_app-0.0.1/tests/test_story_markdown.py +299 -0
- limelight_app-0.0.1/tests/test_writer_text.py +43 -0
- limelight_app-0.0.1/uv.lock +1472 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Line endings.
|
|
2
|
+
#
|
|
3
|
+
# This repository was carried between a Windows machine and a Linux one without
|
|
4
|
+
# its history, and arrived with roughly two thirds of its text files stored as
|
|
5
|
+
# CRLF and the rest as LF. Nothing enforced either, so any tool that rewrote a
|
|
6
|
+
# file could silently convert one to the other and turn a small edit into a
|
|
7
|
+
# whole-file diff.
|
|
8
|
+
#
|
|
9
|
+
# `text=auto` settles it: Git stores every text file with LF, and checks it out
|
|
10
|
+
# with whatever the platform expects - CRLF on Windows where core.autocrlf is
|
|
11
|
+
# set, LF here. The two working copies can now disagree about endings on disk
|
|
12
|
+
# without disagreeing about the file.
|
|
13
|
+
* text=auto
|
|
14
|
+
|
|
15
|
+
# Formats where a byte that looks like a line ending is data, not formatting.
|
|
16
|
+
*.png binary
|
|
17
|
+
*.jpg binary
|
|
18
|
+
*.jpeg binary
|
|
19
|
+
*.ico binary
|
|
20
|
+
*.icns binary
|
|
21
|
+
*.h5 binary
|
|
22
|
+
*.pdf binary
|
|
23
|
+
*.limelight binary
|
|
24
|
+
|
|
25
|
+
# Stated explicitly rather than left to autodetection, so the intent survives a
|
|
26
|
+
# file that happens to start with something that looks binary.
|
|
27
|
+
*.py text
|
|
28
|
+
*.dhall text
|
|
29
|
+
*.md text
|
|
30
|
+
*.txt text
|
|
31
|
+
*.toml text
|
|
32
|
+
*.yml text
|
|
33
|
+
*.json text
|
|
34
|
+
*.csv text
|
|
35
|
+
*.html text
|
|
36
|
+
*.hs text
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
name: Build installers
|
|
2
|
+
|
|
3
|
+
# Installers cannot be cross-compiled: PyInstaller freezes the interpreter and
|
|
4
|
+
# shared libraries of the machine it runs on, so each target needs its own
|
|
5
|
+
# runner.
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
tags:
|
|
10
|
+
- "v*"
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
inputs:
|
|
13
|
+
version:
|
|
14
|
+
description: "Version string for the artifact names"
|
|
15
|
+
required: false
|
|
16
|
+
default: "0.0.1"
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: read
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
version:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
outputs:
|
|
25
|
+
value: ${{ steps.resolve.outputs.value }}
|
|
26
|
+
steps:
|
|
27
|
+
- id: resolve
|
|
28
|
+
shell: bash
|
|
29
|
+
run: |
|
|
30
|
+
if [ "${GITHUB_REF_TYPE}" = "tag" ]; then
|
|
31
|
+
echo "value=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
|
32
|
+
else
|
|
33
|
+
echo "value=${{ inputs.version || '0.0.1' }}" >> "$GITHUB_OUTPUT"
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
build:
|
|
37
|
+
needs: version
|
|
38
|
+
strategy:
|
|
39
|
+
fail-fast: false
|
|
40
|
+
matrix:
|
|
41
|
+
include:
|
|
42
|
+
- os: ubuntu-22.04
|
|
43
|
+
target: linux
|
|
44
|
+
- os: windows-latest
|
|
45
|
+
target: windows
|
|
46
|
+
- os: macos-14
|
|
47
|
+
target: macos
|
|
48
|
+
runs-on: ${{ matrix.os }}
|
|
49
|
+
steps:
|
|
50
|
+
- uses: actions/checkout@v7
|
|
51
|
+
with:
|
|
52
|
+
# setuptools-scm reads the version from the tags.
|
|
53
|
+
fetch-depth: 0
|
|
54
|
+
|
|
55
|
+
- uses: actions/setup-python@v7
|
|
56
|
+
with:
|
|
57
|
+
python-version: "3.12"
|
|
58
|
+
|
|
59
|
+
- name: Install project and build tools
|
|
60
|
+
shell: bash
|
|
61
|
+
run: |
|
|
62
|
+
python -m pip install --upgrade pip
|
|
63
|
+
python -m pip install -e .
|
|
64
|
+
python -m pip install pyinstaller
|
|
65
|
+
|
|
66
|
+
# Qt's GUI library links libEGL and libGL even for offscreen rendering,
|
|
67
|
+
# and the runner image has neither; libfuse2 is for the AppImage.
|
|
68
|
+
- name: Install Linux packaging dependencies
|
|
69
|
+
if: matrix.target == 'linux'
|
|
70
|
+
run: |
|
|
71
|
+
sudo apt-get update
|
|
72
|
+
sudo apt-get install -y --no-install-recommends \
|
|
73
|
+
libegl1 libgl1 libxkbcommon0 libfontconfig1 libdbus-1-3 libfuse2
|
|
74
|
+
|
|
75
|
+
# Renders with Qt and Pillow, so no runner needs extra tools. Only macOS
|
|
76
|
+
# has iconutil, so only there does it also produce the .icns.
|
|
77
|
+
- name: Build icons
|
|
78
|
+
run: python packaging/make_icons.py
|
|
79
|
+
|
|
80
|
+
- name: Build the application bundle
|
|
81
|
+
env:
|
|
82
|
+
LIMELIGHT_VERSION: ${{ needs.version.outputs.value }}
|
|
83
|
+
run: pyinstaller packaging/limelight.spec --noconfirm
|
|
84
|
+
|
|
85
|
+
# --------------------------------------------------------------- Linux
|
|
86
|
+
- name: Build .deb and AppImage
|
|
87
|
+
if: matrix.target == 'linux'
|
|
88
|
+
run: packaging/linux/build_linux_packages.sh "${{ needs.version.outputs.value }}"
|
|
89
|
+
|
|
90
|
+
# ------------------------------------------------------------- Windows
|
|
91
|
+
- name: Install Inno Setup
|
|
92
|
+
if: matrix.target == 'windows'
|
|
93
|
+
run: choco install innosetup --no-progress -y
|
|
94
|
+
|
|
95
|
+
- name: Build the Windows installer
|
|
96
|
+
if: matrix.target == 'windows'
|
|
97
|
+
shell: cmd
|
|
98
|
+
run: iscc /DAppVersion=${{ needs.version.outputs.value }} packaging\windows\limelight.iss
|
|
99
|
+
|
|
100
|
+
# --------------------------------------------------------------- macOS
|
|
101
|
+
- name: Build the disk image
|
|
102
|
+
if: matrix.target == 'macos'
|
|
103
|
+
run: packaging/macos/build_dmg.sh "${{ needs.version.outputs.value }}"
|
|
104
|
+
|
|
105
|
+
- uses: actions/upload-artifact@v7
|
|
106
|
+
with:
|
|
107
|
+
name: limelight-${{ matrix.target }}
|
|
108
|
+
path: dist/installer/*
|
|
109
|
+
if-no-files-found: error
|
|
110
|
+
|
|
111
|
+
# A tag push also publishes the three installers as a GitHub Release, with
|
|
112
|
+
# the matching section of CHANGELOG.md as its notes. Manual runs only leave
|
|
113
|
+
# workflow artifacts, so a test build never creates a release.
|
|
114
|
+
release:
|
|
115
|
+
needs: [version, build]
|
|
116
|
+
if: github.ref_type == 'tag'
|
|
117
|
+
runs-on: ubuntu-latest
|
|
118
|
+
permissions:
|
|
119
|
+
contents: write
|
|
120
|
+
steps:
|
|
121
|
+
- uses: actions/checkout@v7
|
|
122
|
+
|
|
123
|
+
- uses: actions/download-artifact@v8
|
|
124
|
+
with:
|
|
125
|
+
pattern: limelight-*
|
|
126
|
+
path: dist/installer
|
|
127
|
+
merge-multiple: true
|
|
128
|
+
|
|
129
|
+
- name: Extract the release notes from the changelog
|
|
130
|
+
shell: bash
|
|
131
|
+
run: |
|
|
132
|
+
version="${{ needs.version.outputs.value }}"
|
|
133
|
+
awk -v v="$version" '/^## \[/ { p = index($0, "[" v "]") > 0 } p' CHANGELOG.md > notes.md
|
|
134
|
+
if [ ! -s notes.md ]; then
|
|
135
|
+
echo "Limelight $version" > notes.md
|
|
136
|
+
fi
|
|
137
|
+
cat notes.md
|
|
138
|
+
|
|
139
|
+
- uses: softprops/action-gh-release@v3
|
|
140
|
+
with:
|
|
141
|
+
name: Limelight ${{ needs.version.outputs.value }}
|
|
142
|
+
body_path: notes.md
|
|
143
|
+
files: dist/installer/*
|
|
144
|
+
fail_on_unmatched_files: true
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
# A pushed v* tag uploads the sdist and wheel to PyPI through Trusted
|
|
4
|
+
# Publishing: PyPI accepts this workflow's OIDC token in place of an API
|
|
5
|
+
# token, so there is no secret to store. The workflow file name and the
|
|
6
|
+
# environment name below are what the publisher on PyPI is registered
|
|
7
|
+
# against; change either and the upload is refused.
|
|
8
|
+
#
|
|
9
|
+
# There is deliberately no manual trigger. A release on PyPI cannot be
|
|
10
|
+
# replaced, so the only way to publish is the tag that names the version.
|
|
11
|
+
|
|
12
|
+
on:
|
|
13
|
+
push:
|
|
14
|
+
tags:
|
|
15
|
+
- "v*"
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
publish:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
environment: pypi
|
|
24
|
+
# A job-level permissions block replaces the workflow's, so contents has
|
|
25
|
+
# to be repeated here or the checkout cannot read the repository.
|
|
26
|
+
permissions:
|
|
27
|
+
contents: read
|
|
28
|
+
id-token: write
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v7
|
|
31
|
+
with:
|
|
32
|
+
# setuptools-scm reads the version from the tags.
|
|
33
|
+
fetch-depth: 0
|
|
34
|
+
|
|
35
|
+
- uses: astral-sh/setup-uv@v10.1.0
|
|
36
|
+
|
|
37
|
+
- name: Build the sdist and wheel
|
|
38
|
+
run: uv build
|
|
39
|
+
|
|
40
|
+
# The version comes from the tag, so a mismatch here means the tag is
|
|
41
|
+
# not on a clean release commit. Better to stop than to upload a
|
|
42
|
+
# 0.0.2.dev0 that can never be removed.
|
|
43
|
+
- name: Check the built version matches the tag
|
|
44
|
+
run: |
|
|
45
|
+
expected="limelight_app-${GITHUB_REF_NAME#v}"
|
|
46
|
+
ls dist
|
|
47
|
+
for file in dist/*; do
|
|
48
|
+
case "$(basename "$file")" in
|
|
49
|
+
"$expected".tar.gz | "$expected"-py3-none-any.whl) ;;
|
|
50
|
+
*) echo "::error::$file does not match tag $GITHUB_REF_NAME"; exit 1 ;;
|
|
51
|
+
esac
|
|
52
|
+
done
|
|
53
|
+
|
|
54
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
// Use IntelliSense to learn about possible attributes.
|
|
3
|
+
// Hover to view descriptions of existing attributes.
|
|
4
|
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
5
|
+
"version": "0.2.0",
|
|
6
|
+
"configurations": [
|
|
7
|
+
|
|
8
|
+
{
|
|
9
|
+
"name": "limelight: example20-wiki.limelight",
|
|
10
|
+
"type": "debugpy",
|
|
11
|
+
"request": "launch",
|
|
12
|
+
"program": "src/limelight/__main__.py",
|
|
13
|
+
"cwd": "${workspaceFolder}",
|
|
14
|
+
"console": "integratedTerminal",
|
|
15
|
+
"args": [
|
|
16
|
+
//"_build/examples/example20-wiki.limelight"
|
|
17
|
+
"_build/examples/example30-largedataset.limelight"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
{
|
|
22
|
+
"name": "Python Debugger: Current File",
|
|
23
|
+
"type": "debugpy",
|
|
24
|
+
"request": "launch",
|
|
25
|
+
"program": "${file}",
|
|
26
|
+
"console": "integratedTerminal"
|
|
27
|
+
},
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Notable changes to Limelight. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow
|
|
5
|
+
[Semantic Versioning](https://semver.org/) once past 1.0; before that, minor
|
|
6
|
+
versions may break things.
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.0.1] - 2026-09-11
|
|
11
|
+
|
|
12
|
+
First release on PyPI, as `limelight-app`.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- The `.limelight` package format: a folder or archive holding a Dhall
|
|
17
|
+
manifest, CSV and HDF5 datasets, figure specs, image assets, and a Markdown
|
|
18
|
+
story that walks a reader through the analysis. The language reference in
|
|
19
|
+
`src/limelight/language-reference/` defines it.
|
|
20
|
+
- `limelight.writer`, the Python library that builds packages, and
|
|
21
|
+
`limelight.reader`, which opens them without the app.
|
|
22
|
+
- The desktop app (`limelight-gui`): story, figures, datasets and control
|
|
23
|
+
parameters, with PDF export of the story.
|
|
24
|
+
- `limelight-cli` with `summary`, `verify`, `json` and `pdf` subcommands, and
|
|
25
|
+
`LL` as a short form of both commands.
|
|
26
|
+
- A built-in evaluator for the subset of Dhall that manifests use, so reading
|
|
27
|
+
a package needs no `dhall-to-json`; the tool is only consulted for
|
|
28
|
+
hand-written manifests that go beyond that subset.
|
|
29
|
+
- Native installers for Windows, macOS and Linux under `packaging/`, with
|
|
30
|
+
`.limelight` file associations.
|
|
31
|
+
|
|
32
|
+
[Unreleased]: https://github.com/mikehulluk/limelight/compare/v0.0.1...HEAD
|
|
33
|
+
[0.0.1]: https://github.com/mikehulluk/limelight/releases/tag/v0.0.1
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Mike Hull
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: limelight-app
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: A portable package format for data-driven figures and analysis stories, and a desktop app for reading them.
|
|
5
|
+
Author-email: Mike Hull <mikehulluk@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/mikehulluk/limelight
|
|
8
|
+
Project-URL: Source, https://github.com/mikehulluk/limelight
|
|
9
|
+
Project-URL: Issues, https://github.com/mikehulluk/limelight/issues
|
|
10
|
+
Keywords: data,visualization,figures,plots,story,report,dhall,matplotlib,qt
|
|
11
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
12
|
+
Classifier: Environment :: X11 Applications :: Qt
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Intended Audience :: Education
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: cryptography>=42.0
|
|
25
|
+
Requires-Dist: h5py>=3.10
|
|
26
|
+
Requires-Dist: linkify-it-py>=2.0
|
|
27
|
+
Requires-Dist: markdown-it-py[linkify]>=4.0
|
|
28
|
+
Requires-Dist: matplotlib>=3.8
|
|
29
|
+
Requires-Dist: mdit-py-plugins>=0.6
|
|
30
|
+
Requires-Dist: numpy>=1.26
|
|
31
|
+
Requires-Dist: pillow>=10.0
|
|
32
|
+
Requires-Dist: PySide6>=6.6
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+
# Limelight
|
|
36
|
+
|
|
37
|
+
Limelight is a portable package format for data-driven figures and analysis
|
|
38
|
+
stories, and a desktop app for reading them.
|
|
39
|
+
|
|
40
|
+
A Limelight package is a folder, or a `.limelight` archive with the same
|
|
41
|
+
layout, holding a `project.dhall` manifest alongside the datasets it
|
|
42
|
+
describes, the figure specs drawn from them, and a story that walks a reader
|
|
43
|
+
through the analysis. The app opens either form, validates the manifest,
|
|
44
|
+
resolves the data, renders the figures, and follows the story.
|
|
45
|
+
|
|
46
|
+
Packages are meant to be produced by libraries and tools rather than by hand;
|
|
47
|
+
`limelight.writer` is the Python library for building them, and
|
|
48
|
+
`limelight.reader` for opening them without the app.
|
|
49
|
+
|
|
50
|
+
## Installing
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pip install limelight-app
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The distribution is `limelight-app` (PyPI would not allow plain `limelight`),
|
|
57
|
+
but the package imports as `limelight` and the commands are named as below.
|
|
58
|
+
|
|
59
|
+
A package's `project.dhall` manifest is read by a built-in evaluator, so
|
|
60
|
+
nothing beyond the Python dependencies is needed. A hand-written manifest
|
|
61
|
+
that uses Dhall features beyond what the writer emits (functions, `if`,
|
|
62
|
+
`merge`, interpolation) is handed to `dhall-to-json` instead, if one is on
|
|
63
|
+
`PATH` or named by `LIMELIGHT_DHALL_TO_JSON`.
|
|
64
|
+
|
|
65
|
+
Native installers for Windows, macOS and Linux are built by `packaging/`;
|
|
66
|
+
see `packaging/README.md`.
|
|
67
|
+
|
|
68
|
+
## Using it
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
limelight-gui example.limelight # open a package in the desktop app
|
|
72
|
+
limelight-cli summary example.limelight # print a summary of a package
|
|
73
|
+
limelight-cli verify example.limelight # validate one or more packages
|
|
74
|
+
limelight-cli pdf example.limelight # render a package's story to PDF
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`LL` is the short form of both: `LL example.limelight` opens the app, and
|
|
78
|
+
`LL verify example.limelight` (or `summary`, `json`, `pdf`) runs the CLI.
|
|
79
|
+
|
|
80
|
+
The scripts in `examples/` build sample packages into `_build/examples/`, and
|
|
81
|
+
`src/limelight/language-reference/` holds the Dhall types a manifest is
|
|
82
|
+
written against; the writer copies them into every package it builds.
|
|
83
|
+
|
|
84
|
+
## Developing
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
uv sync --all-groups
|
|
88
|
+
uv run pytest
|
|
89
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Limelight
|
|
2
|
+
|
|
3
|
+
Limelight is a portable package format for data-driven figures and analysis
|
|
4
|
+
stories, and a desktop app for reading them.
|
|
5
|
+
|
|
6
|
+
A Limelight package is a folder, or a `.limelight` archive with the same
|
|
7
|
+
layout, holding a `project.dhall` manifest alongside the datasets it
|
|
8
|
+
describes, the figure specs drawn from them, and a story that walks a reader
|
|
9
|
+
through the analysis. The app opens either form, validates the manifest,
|
|
10
|
+
resolves the data, renders the figures, and follows the story.
|
|
11
|
+
|
|
12
|
+
Packages are meant to be produced by libraries and tools rather than by hand;
|
|
13
|
+
`limelight.writer` is the Python library for building them, and
|
|
14
|
+
`limelight.reader` for opening them without the app.
|
|
15
|
+
|
|
16
|
+
## Installing
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pip install limelight-app
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The distribution is `limelight-app` (PyPI would not allow plain `limelight`),
|
|
23
|
+
but the package imports as `limelight` and the commands are named as below.
|
|
24
|
+
|
|
25
|
+
A package's `project.dhall` manifest is read by a built-in evaluator, so
|
|
26
|
+
nothing beyond the Python dependencies is needed. A hand-written manifest
|
|
27
|
+
that uses Dhall features beyond what the writer emits (functions, `if`,
|
|
28
|
+
`merge`, interpolation) is handed to `dhall-to-json` instead, if one is on
|
|
29
|
+
`PATH` or named by `LIMELIGHT_DHALL_TO_JSON`.
|
|
30
|
+
|
|
31
|
+
Native installers for Windows, macOS and Linux are built by `packaging/`;
|
|
32
|
+
see `packaging/README.md`.
|
|
33
|
+
|
|
34
|
+
## Using it
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
limelight-gui example.limelight # open a package in the desktop app
|
|
38
|
+
limelight-cli summary example.limelight # print a summary of a package
|
|
39
|
+
limelight-cli verify example.limelight # validate one or more packages
|
|
40
|
+
limelight-cli pdf example.limelight # render a package's story to PDF
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`LL` is the short form of both: `LL example.limelight` opens the app, and
|
|
44
|
+
`LL verify example.limelight` (or `summary`, `json`, `pdf`) runs the CLI.
|
|
45
|
+
|
|
46
|
+
The scripts in `examples/` build sample packages into `_build/examples/`, and
|
|
47
|
+
`src/limelight/language-reference/` holds the Dhall types a manifest is
|
|
48
|
+
written against; the writer copies them into every package it builds.
|
|
49
|
+
|
|
50
|
+
## Developing
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
uv sync --all-groups
|
|
54
|
+
uv run pytest
|
|
55
|
+
```
|