overlay.language 0.2.0.post24.dev0__tar.gz → 0.2.0.post29.dev0__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.
- {overlay_language-0.2.0.post24.dev0 → overlay_language-0.2.0.post29.dev0}/.gitignore +1 -1
- {overlay_language-0.2.0.post24.dev0 → overlay_language-0.2.0.post29.dev0}/PKG-INFO +3 -6
- {overlay_language-0.2.0.post24.dev0 → overlay_language-0.2.0.post29.dev0}/README.md +1 -1
- {overlay_language-0.2.0.post24.dev0 → overlay_language-0.2.0.post29.dev0}/pyproject.toml +7 -8
- overlay_language-0.2.0.post29.dev0/src/overlay/language/__init__.py +3 -0
- overlay_language-0.2.0.post24.dev0/docs/Makefile +0 -24
- overlay_language-0.2.0.post24.dev0/docs/_static/favicon.svg +0 -189
- overlay_language-0.2.0.post24.dev0/docs/_static/logo.svg +0 -198
- overlay_language-0.2.0.post24.dev0/docs/conf.py +0 -74
- overlay_language-0.2.0.post24.dev0/docs/index.rst +0 -61
- overlay_language-0.2.0.post24.dev0/docs/installation.rst +0 -8
- overlay_language-0.2.0.post24.dev0/docs/overlay-language-tutorial.rst +0 -346
- overlay_language-0.2.0.post24.dev0/docs/specification.md +0 -1007
- overlay_language-0.2.0.post24.dev0/docs/tutorial.rst +0 -336
- overlay_language-0.2.0.post24.dev0/src/overlay/language/__init__.py +0 -100
- overlay_language-0.2.0.post24.dev0/src/overlay/language/_config.py +0 -56
- overlay_language-0.2.0.post24.dev0/src/overlay/language/_core.py +0 -2904
- overlay_language-0.2.0.post24.dev0/src/overlay/language/_interned_linked_list.py +0 -147
- overlay_language-0.2.0.post24.dev0/src/overlay/language/_mixin_directory.py +0 -141
- overlay_language-0.2.0.post24.dev0/src/overlay/language/_mixin_parser.py +0 -482
- overlay_language-0.2.0.post24.dev0/src/overlay/language/_runtime.py +0 -710
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: overlay.language
|
|
3
|
-
Version: 0.2.0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.2.0.post29.dev0
|
|
4
|
+
Summary: Backward compatibility wrapper — overlay.language is now mixinv2
|
|
5
5
|
Project-URL: Repository, https://github.com/Atry/overlay
|
|
6
6
|
Author-email: "Yang, Bo" <yang-bo@yang-bo.com>
|
|
7
7
|
License-Expression: MIT
|
|
@@ -10,7 +10,4 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.13
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.14
|
|
12
12
|
Requires-Python: >=3.13
|
|
13
|
-
Requires-Dist:
|
|
14
|
-
Provides-Extra: docs
|
|
15
|
-
Requires-Dist: sphinx-mdinclude>=0.6.2; extra == 'docs'
|
|
16
|
-
Requires-Dist: sphinx>=9.1.0; extra == 'docs'
|
|
13
|
+
Requires-Dist: mixinv2==0.2.0.post29.dev0
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A dependency injection framework with pytest-fixture syntax, plus a
|
|
4
4
|
configuration language for declarative programming, based on
|
|
5
|
-
[
|
|
5
|
+
[inheritance-calculus](https://arxiv.org/abs/2602.16291).
|
|
6
6
|
|
|
7
7
|
## Documentation
|
|
8
8
|
|
|
@@ -14,8 +14,8 @@ metadata = false
|
|
|
14
14
|
|
|
15
15
|
[project]
|
|
16
16
|
name = "overlay.language"
|
|
17
|
-
dynamic = ["version"]
|
|
18
|
-
description = "
|
|
17
|
+
dynamic = ["version", "dependencies"]
|
|
18
|
+
description = "Backward compatibility wrapper — overlay.language is now mixinv2"
|
|
19
19
|
license = "MIT"
|
|
20
20
|
requires-python = ">=3.13"
|
|
21
21
|
authors = [
|
|
@@ -27,15 +27,14 @@ classifiers = [
|
|
|
27
27
|
"Programming Language :: Python :: 3.13",
|
|
28
28
|
"Programming Language :: Python :: 3.14",
|
|
29
29
|
]
|
|
30
|
+
|
|
31
|
+
[tool.hatch.metadata.hooks.uv-dynamic-versioning]
|
|
30
32
|
dependencies = [
|
|
31
|
-
"
|
|
33
|
+
"mixinv2=={{ version }}",
|
|
32
34
|
]
|
|
33
35
|
|
|
34
|
-
[
|
|
35
|
-
|
|
36
|
-
"sphinx>=9.1.0",
|
|
37
|
-
"sphinx-mdinclude>=0.6.2",
|
|
38
|
-
]
|
|
36
|
+
[tool.uv]
|
|
37
|
+
sources = {mixinv2 = {workspace = true}}
|
|
39
38
|
|
|
40
39
|
[tool.hatch.build.targets.wheel]
|
|
41
40
|
packages = ["src/overlay"]
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Minimal makefile for Sphinx documentation
|
|
2
|
-
#
|
|
3
|
-
|
|
4
|
-
# You can set these variables from the command line, and also
|
|
5
|
-
# from the environment for the first two.
|
|
6
|
-
SPHINXOPTS ?=
|
|
7
|
-
SPHINXBUILD ?= sphinx-build
|
|
8
|
-
SOURCEDIR = .
|
|
9
|
-
BUILDDIR = _build
|
|
10
|
-
|
|
11
|
-
# Put it first so that "make" without argument is like "make help".
|
|
12
|
-
help:
|
|
13
|
-
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
|
14
|
-
|
|
15
|
-
.PHONY: help Makefile
|
|
16
|
-
|
|
17
|
-
# Catch-all target: route all unknown targets to Sphinx using the new
|
|
18
|
-
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
|
19
|
-
%: Makefile api-docs
|
|
20
|
-
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
|
21
|
-
|
|
22
|
-
.PHONY: api-docs
|
|
23
|
-
api-docs:
|
|
24
|
-
sphinx-apidoc --implicit-namespaces -o api ../src/overlay
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400">
|
|
2
|
-
<defs>
|
|
3
|
-
<!-- Lab-harmonized: RGB L*=50 max chroma, CMY L*=85 max chroma -->
|
|
4
|
-
<!-- Main sectors: 56° each, interpolation sectors: 4° each (Lab 1/2 midpoint) -->
|
|
5
|
-
|
|
6
|
-
<radialGradient id="gradient-0" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
7
|
-
<stop offset="0%" stop-color="#F00000" stop-opacity="0"/>
|
|
8
|
-
<stop offset="32%" stop-color="#F00000" stop-opacity="0"/>
|
|
9
|
-
<stop offset="32%" stop-color="#F00000" stop-opacity="0.5"/>
|
|
10
|
-
<stop offset="37%" stop-color="#F00000" stop-opacity="0.5"/>
|
|
11
|
-
<stop offset="37%" stop-color="#F00000" stop-opacity="1"/>
|
|
12
|
-
<stop offset="95%" stop-color="#F00000" stop-opacity="1"/>
|
|
13
|
-
<stop offset="95%" stop-color="#F00000" stop-opacity="0.5"/>
|
|
14
|
-
<stop offset="100%" stop-color="#F00000" stop-opacity="0.5"/>
|
|
15
|
-
</radialGradient>
|
|
16
|
-
<clipPath id="sector-0">
|
|
17
|
-
<path d="M 200,200 L 115.495,41.069 A 180,180 0 0,1 284.505,41.069 Z"/>
|
|
18
|
-
</clipPath>
|
|
19
|
-
|
|
20
|
-
<radialGradient id="gradient-1" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
21
|
-
<stop offset="0%" stop-color="#F59500" stop-opacity="0"/>
|
|
22
|
-
<stop offset="32%" stop-color="#F59500" stop-opacity="0"/>
|
|
23
|
-
<stop offset="32%" stop-color="#F59500" stop-opacity="0.5"/>
|
|
24
|
-
<stop offset="37%" stop-color="#F59500" stop-opacity="0.5"/>
|
|
25
|
-
<stop offset="37%" stop-color="#F59500" stop-opacity="1"/>
|
|
26
|
-
<stop offset="95%" stop-color="#F59500" stop-opacity="1"/>
|
|
27
|
-
<stop offset="95%" stop-color="#F59500" stop-opacity="0.5"/>
|
|
28
|
-
<stop offset="100%" stop-color="#F59500" stop-opacity="0.5"/>
|
|
29
|
-
</radialGradient>
|
|
30
|
-
<clipPath id="sector-1">
|
|
31
|
-
<path d="M 200,200 L 284.505,41.069 A 180,180 0 0,1 295.385,47.351 Z"/>
|
|
32
|
-
</clipPath>
|
|
33
|
-
|
|
34
|
-
<radialGradient id="gradient-2" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
35
|
-
<stop offset="0%" stop-color="#ECE901" stop-opacity="0"/>
|
|
36
|
-
<stop offset="32%" stop-color="#ECE901" stop-opacity="0"/>
|
|
37
|
-
<stop offset="32%" stop-color="#ECE901" stop-opacity="0.5"/>
|
|
38
|
-
<stop offset="37%" stop-color="#ECE901" stop-opacity="0.5"/>
|
|
39
|
-
<stop offset="37%" stop-color="#ECE901" stop-opacity="1"/>
|
|
40
|
-
<stop offset="95%" stop-color="#ECE901" stop-opacity="1"/>
|
|
41
|
-
<stop offset="95%" stop-color="#ECE901" stop-opacity="0.5"/>
|
|
42
|
-
<stop offset="100%" stop-color="#ECE901" stop-opacity="0.5"/>
|
|
43
|
-
</radialGradient>
|
|
44
|
-
<clipPath id="sector-2">
|
|
45
|
-
<path d="M 200,200 L 295.385,47.351 A 180,180 0 0,1 379.890,193.718 Z"/>
|
|
46
|
-
</clipPath>
|
|
47
|
-
|
|
48
|
-
<radialGradient id="gradient-3" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
49
|
-
<stop offset="0%" stop-color="#8BBA00" stop-opacity="0"/>
|
|
50
|
-
<stop offset="32%" stop-color="#8BBA00" stop-opacity="0"/>
|
|
51
|
-
<stop offset="32%" stop-color="#8BBA00" stop-opacity="0.5"/>
|
|
52
|
-
<stop offset="37%" stop-color="#8BBA00" stop-opacity="0.5"/>
|
|
53
|
-
<stop offset="37%" stop-color="#8BBA00" stop-opacity="1"/>
|
|
54
|
-
<stop offset="95%" stop-color="#8BBA00" stop-opacity="1"/>
|
|
55
|
-
<stop offset="95%" stop-color="#8BBA00" stop-opacity="0.5"/>
|
|
56
|
-
<stop offset="100%" stop-color="#8BBA00" stop-opacity="0.5"/>
|
|
57
|
-
</radialGradient>
|
|
58
|
-
<clipPath id="sector-3">
|
|
59
|
-
<path d="M 200,200 L 379.890,193.718 A 180,180 0 0,1 379.890,206.282 Z"/>
|
|
60
|
-
</clipPath>
|
|
61
|
-
|
|
62
|
-
<radialGradient id="gradient-4" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
63
|
-
<stop offset="0%" stop-color="#008B00" stop-opacity="0"/>
|
|
64
|
-
<stop offset="32%" stop-color="#008B00" stop-opacity="0"/>
|
|
65
|
-
<stop offset="32%" stop-color="#008B00" stop-opacity="0.5"/>
|
|
66
|
-
<stop offset="37%" stop-color="#008B00" stop-opacity="0.5"/>
|
|
67
|
-
<stop offset="37%" stop-color="#008B00" stop-opacity="1"/>
|
|
68
|
-
<stop offset="95%" stop-color="#008B00" stop-opacity="1"/>
|
|
69
|
-
<stop offset="95%" stop-color="#008B00" stop-opacity="0.5"/>
|
|
70
|
-
<stop offset="100%" stop-color="#008B00" stop-opacity="0.5"/>
|
|
71
|
-
</radialGradient>
|
|
72
|
-
<clipPath id="sector-4">
|
|
73
|
-
<path d="M 200,200 L 379.890,206.282 A 180,180 0 0,1 295.385,352.649 Z"/>
|
|
74
|
-
</clipPath>
|
|
75
|
-
|
|
76
|
-
<radialGradient id="gradient-5" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
77
|
-
<stop offset="0%" stop-color="#30BA7F" stop-opacity="0"/>
|
|
78
|
-
<stop offset="32%" stop-color="#30BA7F" stop-opacity="0"/>
|
|
79
|
-
<stop offset="32%" stop-color="#30BA7F" stop-opacity="0.5"/>
|
|
80
|
-
<stop offset="37%" stop-color="#30BA7F" stop-opacity="0.5"/>
|
|
81
|
-
<stop offset="37%" stop-color="#30BA7F" stop-opacity="1"/>
|
|
82
|
-
<stop offset="95%" stop-color="#30BA7F" stop-opacity="1"/>
|
|
83
|
-
<stop offset="95%" stop-color="#30BA7F" stop-opacity="0.5"/>
|
|
84
|
-
<stop offset="100%" stop-color="#30BA7F" stop-opacity="0.5"/>
|
|
85
|
-
</radialGradient>
|
|
86
|
-
<clipPath id="sector-5">
|
|
87
|
-
<path d="M 200,200 L 295.385,352.649 A 180,180 0 0,1 284.505,358.931 Z"/>
|
|
88
|
-
</clipPath>
|
|
89
|
-
|
|
90
|
-
<radialGradient id="gradient-6" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
91
|
-
<stop offset="0%" stop-color="#04ECEB" stop-opacity="0"/>
|
|
92
|
-
<stop offset="32%" stop-color="#04ECEB" stop-opacity="0"/>
|
|
93
|
-
<stop offset="32%" stop-color="#04ECEB" stop-opacity="0.5"/>
|
|
94
|
-
<stop offset="37%" stop-color="#04ECEB" stop-opacity="0.5"/>
|
|
95
|
-
<stop offset="37%" stop-color="#04ECEB" stop-opacity="1"/>
|
|
96
|
-
<stop offset="95%" stop-color="#04ECEB" stop-opacity="1"/>
|
|
97
|
-
<stop offset="95%" stop-color="#04ECEB" stop-opacity="0.5"/>
|
|
98
|
-
<stop offset="100%" stop-color="#04ECEB" stop-opacity="0.5"/>
|
|
99
|
-
</radialGradient>
|
|
100
|
-
<clipPath id="sector-6">
|
|
101
|
-
<path d="M 200,200 L 284.505,358.931 A 180,180 0 0,1 115.495,358.931 Z"/>
|
|
102
|
-
</clipPath>
|
|
103
|
-
|
|
104
|
-
<radialGradient id="gradient-7" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
105
|
-
<stop offset="0%" stop-color="#36ADF5" stop-opacity="0"/>
|
|
106
|
-
<stop offset="32%" stop-color="#36ADF5" stop-opacity="0"/>
|
|
107
|
-
<stop offset="32%" stop-color="#36ADF5" stop-opacity="0.5"/>
|
|
108
|
-
<stop offset="37%" stop-color="#36ADF5" stop-opacity="0.5"/>
|
|
109
|
-
<stop offset="37%" stop-color="#36ADF5" stop-opacity="1"/>
|
|
110
|
-
<stop offset="95%" stop-color="#36ADF5" stop-opacity="1"/>
|
|
111
|
-
<stop offset="95%" stop-color="#36ADF5" stop-opacity="0.5"/>
|
|
112
|
-
<stop offset="100%" stop-color="#36ADF5" stop-opacity="0.5"/>
|
|
113
|
-
</radialGradient>
|
|
114
|
-
<clipPath id="sector-7">
|
|
115
|
-
<path d="M 200,200 L 115.495,358.931 A 180,180 0 0,1 104.615,352.649 Z"/>
|
|
116
|
-
</clipPath>
|
|
117
|
-
|
|
118
|
-
<radialGradient id="gradient-8" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
119
|
-
<stop offset="0%" stop-color="#006FFC" stop-opacity="0"/>
|
|
120
|
-
<stop offset="32%" stop-color="#006FFC" stop-opacity="0"/>
|
|
121
|
-
<stop offset="32%" stop-color="#006FFC" stop-opacity="0.5"/>
|
|
122
|
-
<stop offset="37%" stop-color="#006FFC" stop-opacity="0.5"/>
|
|
123
|
-
<stop offset="37%" stop-color="#006FFC" stop-opacity="1"/>
|
|
124
|
-
<stop offset="95%" stop-color="#006FFC" stop-opacity="1"/>
|
|
125
|
-
<stop offset="95%" stop-color="#006FFC" stop-opacity="0.5"/>
|
|
126
|
-
<stop offset="100%" stop-color="#006FFC" stop-opacity="0.5"/>
|
|
127
|
-
</radialGradient>
|
|
128
|
-
<clipPath id="sector-8">
|
|
129
|
-
<path d="M 200,200 L 104.615,352.649 A 180,180 0 0,1 20.110,206.282 Z"/>
|
|
130
|
-
</clipPath>
|
|
131
|
-
|
|
132
|
-
<radialGradient id="gradient-9" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
133
|
-
<stop offset="0%" stop-color="#AA96FC" stop-opacity="0"/>
|
|
134
|
-
<stop offset="32%" stop-color="#AA96FC" stop-opacity="0"/>
|
|
135
|
-
<stop offset="32%" stop-color="#AA96FC" stop-opacity="0.5"/>
|
|
136
|
-
<stop offset="37%" stop-color="#AA96FC" stop-opacity="0.5"/>
|
|
137
|
-
<stop offset="37%" stop-color="#AA96FC" stop-opacity="1"/>
|
|
138
|
-
<stop offset="95%" stop-color="#AA96FC" stop-opacity="1"/>
|
|
139
|
-
<stop offset="95%" stop-color="#AA96FC" stop-opacity="0.5"/>
|
|
140
|
-
<stop offset="100%" stop-color="#AA96FC" stop-opacity="0.5"/>
|
|
141
|
-
</radialGradient>
|
|
142
|
-
<clipPath id="sector-9">
|
|
143
|
-
<path d="M 200,200 L 20.110,206.282 A 180,180 0 0,1 20.110,193.718 Z"/>
|
|
144
|
-
</clipPath>
|
|
145
|
-
|
|
146
|
-
<radialGradient id="gradient-10" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
147
|
-
<stop offset="0%" stop-color="#FFC0FA" stop-opacity="0"/>
|
|
148
|
-
<stop offset="32%" stop-color="#FFC0FA" stop-opacity="0"/>
|
|
149
|
-
<stop offset="32%" stop-color="#FFC0FA" stop-opacity="0.5"/>
|
|
150
|
-
<stop offset="37%" stop-color="#FFC0FA" stop-opacity="0.5"/>
|
|
151
|
-
<stop offset="37%" stop-color="#FFC0FA" stop-opacity="1"/>
|
|
152
|
-
<stop offset="95%" stop-color="#FFC0FA" stop-opacity="1"/>
|
|
153
|
-
<stop offset="95%" stop-color="#FFC0FA" stop-opacity="0.5"/>
|
|
154
|
-
<stop offset="100%" stop-color="#FFC0FA" stop-opacity="0.5"/>
|
|
155
|
-
</radialGradient>
|
|
156
|
-
<clipPath id="sector-10">
|
|
157
|
-
<path d="M 200,200 L 20.110,193.718 A 180,180 0 0,1 104.615,47.351 Z"/>
|
|
158
|
-
</clipPath>
|
|
159
|
-
|
|
160
|
-
<radialGradient id="gradient-11" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
|
|
161
|
-
<stop offset="0%" stop-color="#FF7C82" stop-opacity="0"/>
|
|
162
|
-
<stop offset="32%" stop-color="#FF7C82" stop-opacity="0"/>
|
|
163
|
-
<stop offset="32%" stop-color="#FF7C82" stop-opacity="0.5"/>
|
|
164
|
-
<stop offset="37%" stop-color="#FF7C82" stop-opacity="0.5"/>
|
|
165
|
-
<stop offset="37%" stop-color="#FF7C82" stop-opacity="1"/>
|
|
166
|
-
<stop offset="95%" stop-color="#FF7C82" stop-opacity="1"/>
|
|
167
|
-
<stop offset="95%" stop-color="#FF7C82" stop-opacity="0.5"/>
|
|
168
|
-
<stop offset="100%" stop-color="#FF7C82" stop-opacity="0.5"/>
|
|
169
|
-
</radialGradient>
|
|
170
|
-
<clipPath id="sector-11">
|
|
171
|
-
<path d="M 200,200 L 104.615,47.351 A 180,180 0 0,1 115.495,41.069 Z"/>
|
|
172
|
-
</clipPath>
|
|
173
|
-
</defs>
|
|
174
|
-
|
|
175
|
-
<g>
|
|
176
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-0)" clip-path="url(#sector-0)"/>
|
|
177
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-1)" clip-path="url(#sector-1)"/>
|
|
178
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-2)" clip-path="url(#sector-2)"/>
|
|
179
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-3)" clip-path="url(#sector-3)"/>
|
|
180
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-4)" clip-path="url(#sector-4)"/>
|
|
181
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-5)" clip-path="url(#sector-5)"/>
|
|
182
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-6)" clip-path="url(#sector-6)"/>
|
|
183
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-7)" clip-path="url(#sector-7)"/>
|
|
184
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-8)" clip-path="url(#sector-8)"/>
|
|
185
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-9)" clip-path="url(#sector-9)"/>
|
|
186
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-10)" clip-path="url(#sector-10)"/>
|
|
187
|
-
<circle cx="200" cy="200" r="180" fill="url(#gradient-11)" clip-path="url(#sector-11)"/>
|
|
188
|
-
</g>
|
|
189
|
-
</svg>
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 480">
|
|
2
|
-
<defs>
|
|
3
|
-
<style>
|
|
4
|
-
@import url('https://fonts.googleapis.com/css2?family=Varela+Round&display=swap');
|
|
5
|
-
</style>
|
|
6
|
-
<!-- Lab-harmonized: RGB L*=50 max chroma, CMY L*=85 max chroma -->
|
|
7
|
-
<!-- Main sectors: 56° each, interpolation sectors: 4° each (Lab 1/2 midpoint) -->
|
|
8
|
-
|
|
9
|
-
<radialGradient id="gradient-0" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
10
|
-
<stop offset="0%" stop-color="#F00000" stop-opacity="0"/>
|
|
11
|
-
<stop offset="32%" stop-color="#F00000" stop-opacity="0"/>
|
|
12
|
-
<stop offset="32%" stop-color="#F00000" stop-opacity="0.5"/>
|
|
13
|
-
<stop offset="37%" stop-color="#F00000" stop-opacity="0.5"/>
|
|
14
|
-
<stop offset="37%" stop-color="#F00000" stop-opacity="1"/>
|
|
15
|
-
<stop offset="95%" stop-color="#F00000" stop-opacity="1"/>
|
|
16
|
-
<stop offset="95%" stop-color="#F00000" stop-opacity="0.5"/>
|
|
17
|
-
<stop offset="100%" stop-color="#F00000" stop-opacity="0.5"/>
|
|
18
|
-
</radialGradient>
|
|
19
|
-
<clipPath id="sector-0">
|
|
20
|
-
<path d="M 240,190 L 160.190,39.899 A 170,170 0 0,1 319.810,39.899 Z"/>
|
|
21
|
-
</clipPath>
|
|
22
|
-
|
|
23
|
-
<radialGradient id="gradient-1" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
24
|
-
<stop offset="0%" stop-color="#F59500" stop-opacity="0"/>
|
|
25
|
-
<stop offset="32%" stop-color="#F59500" stop-opacity="0"/>
|
|
26
|
-
<stop offset="32%" stop-color="#F59500" stop-opacity="0.5"/>
|
|
27
|
-
<stop offset="37%" stop-color="#F59500" stop-opacity="0.5"/>
|
|
28
|
-
<stop offset="37%" stop-color="#F59500" stop-opacity="1"/>
|
|
29
|
-
<stop offset="95%" stop-color="#F59500" stop-opacity="1"/>
|
|
30
|
-
<stop offset="95%" stop-color="#F59500" stop-opacity="0.5"/>
|
|
31
|
-
<stop offset="100%" stop-color="#F59500" stop-opacity="0.5"/>
|
|
32
|
-
</radialGradient>
|
|
33
|
-
<clipPath id="sector-1">
|
|
34
|
-
<path d="M 240,190 L 319.810,39.899 A 170,170 0 0,1 330.086,45.832 Z"/>
|
|
35
|
-
</clipPath>
|
|
36
|
-
|
|
37
|
-
<radialGradient id="gradient-2" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
38
|
-
<stop offset="0%" stop-color="#ECE901" stop-opacity="0"/>
|
|
39
|
-
<stop offset="32%" stop-color="#ECE901" stop-opacity="0"/>
|
|
40
|
-
<stop offset="32%" stop-color="#ECE901" stop-opacity="0.5"/>
|
|
41
|
-
<stop offset="37%" stop-color="#ECE901" stop-opacity="0.5"/>
|
|
42
|
-
<stop offset="37%" stop-color="#ECE901" stop-opacity="1"/>
|
|
43
|
-
<stop offset="95%" stop-color="#ECE901" stop-opacity="1"/>
|
|
44
|
-
<stop offset="95%" stop-color="#ECE901" stop-opacity="0.5"/>
|
|
45
|
-
<stop offset="100%" stop-color="#ECE901" stop-opacity="0.5"/>
|
|
46
|
-
</radialGradient>
|
|
47
|
-
<clipPath id="sector-2">
|
|
48
|
-
<path d="M 240,190 L 330.086,45.832 A 170,170 0 0,1 409.896,184.067 Z"/>
|
|
49
|
-
</clipPath>
|
|
50
|
-
|
|
51
|
-
<radialGradient id="gradient-3" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
52
|
-
<stop offset="0%" stop-color="#8BBA00" stop-opacity="0"/>
|
|
53
|
-
<stop offset="32%" stop-color="#8BBA00" stop-opacity="0"/>
|
|
54
|
-
<stop offset="32%" stop-color="#8BBA00" stop-opacity="0.5"/>
|
|
55
|
-
<stop offset="37%" stop-color="#8BBA00" stop-opacity="0.5"/>
|
|
56
|
-
<stop offset="37%" stop-color="#8BBA00" stop-opacity="1"/>
|
|
57
|
-
<stop offset="95%" stop-color="#8BBA00" stop-opacity="1"/>
|
|
58
|
-
<stop offset="95%" stop-color="#8BBA00" stop-opacity="0.5"/>
|
|
59
|
-
<stop offset="100%" stop-color="#8BBA00" stop-opacity="0.5"/>
|
|
60
|
-
</radialGradient>
|
|
61
|
-
<clipPath id="sector-3">
|
|
62
|
-
<path d="M 240,190 L 409.896,184.067 A 170,170 0 0,1 409.896,195.933 Z"/>
|
|
63
|
-
</clipPath>
|
|
64
|
-
|
|
65
|
-
<radialGradient id="gradient-4" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
66
|
-
<stop offset="0%" stop-color="#008B00" stop-opacity="0"/>
|
|
67
|
-
<stop offset="32%" stop-color="#008B00" stop-opacity="0"/>
|
|
68
|
-
<stop offset="32%" stop-color="#008B00" stop-opacity="0.5"/>
|
|
69
|
-
<stop offset="37%" stop-color="#008B00" stop-opacity="0.5"/>
|
|
70
|
-
<stop offset="37%" stop-color="#008B00" stop-opacity="1"/>
|
|
71
|
-
<stop offset="95%" stop-color="#008B00" stop-opacity="1"/>
|
|
72
|
-
<stop offset="95%" stop-color="#008B00" stop-opacity="0.5"/>
|
|
73
|
-
<stop offset="100%" stop-color="#008B00" stop-opacity="0.5"/>
|
|
74
|
-
</radialGradient>
|
|
75
|
-
<clipPath id="sector-4">
|
|
76
|
-
<path d="M 240,190 L 409.896,195.933 A 170,170 0 0,1 330.086,334.168 Z"/>
|
|
77
|
-
</clipPath>
|
|
78
|
-
|
|
79
|
-
<radialGradient id="gradient-5" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
80
|
-
<stop offset="0%" stop-color="#30BA7F" stop-opacity="0"/>
|
|
81
|
-
<stop offset="32%" stop-color="#30BA7F" stop-opacity="0"/>
|
|
82
|
-
<stop offset="32%" stop-color="#30BA7F" stop-opacity="0.5"/>
|
|
83
|
-
<stop offset="37%" stop-color="#30BA7F" stop-opacity="0.5"/>
|
|
84
|
-
<stop offset="37%" stop-color="#30BA7F" stop-opacity="1"/>
|
|
85
|
-
<stop offset="95%" stop-color="#30BA7F" stop-opacity="1"/>
|
|
86
|
-
<stop offset="95%" stop-color="#30BA7F" stop-opacity="0.5"/>
|
|
87
|
-
<stop offset="100%" stop-color="#30BA7F" stop-opacity="0.5"/>
|
|
88
|
-
</radialGradient>
|
|
89
|
-
<clipPath id="sector-5">
|
|
90
|
-
<path d="M 240,190 L 330.086,334.168 A 170,170 0 0,1 319.810,340.101 Z"/>
|
|
91
|
-
</clipPath>
|
|
92
|
-
|
|
93
|
-
<radialGradient id="gradient-6" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
94
|
-
<stop offset="0%" stop-color="#04ECEB" stop-opacity="0"/>
|
|
95
|
-
<stop offset="32%" stop-color="#04ECEB" stop-opacity="0"/>
|
|
96
|
-
<stop offset="32%" stop-color="#04ECEB" stop-opacity="0.5"/>
|
|
97
|
-
<stop offset="37%" stop-color="#04ECEB" stop-opacity="0.5"/>
|
|
98
|
-
<stop offset="37%" stop-color="#04ECEB" stop-opacity="1"/>
|
|
99
|
-
<stop offset="95%" stop-color="#04ECEB" stop-opacity="1"/>
|
|
100
|
-
<stop offset="95%" stop-color="#04ECEB" stop-opacity="0.5"/>
|
|
101
|
-
<stop offset="100%" stop-color="#04ECEB" stop-opacity="0.5"/>
|
|
102
|
-
</radialGradient>
|
|
103
|
-
<clipPath id="sector-6">
|
|
104
|
-
<path d="M 240,190 L 319.810,340.101 A 170,170 0 0,1 160.190,340.101 Z"/>
|
|
105
|
-
</clipPath>
|
|
106
|
-
|
|
107
|
-
<radialGradient id="gradient-7" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
108
|
-
<stop offset="0%" stop-color="#36ADF5" stop-opacity="0"/>
|
|
109
|
-
<stop offset="32%" stop-color="#36ADF5" stop-opacity="0"/>
|
|
110
|
-
<stop offset="32%" stop-color="#36ADF5" stop-opacity="0.5"/>
|
|
111
|
-
<stop offset="37%" stop-color="#36ADF5" stop-opacity="0.5"/>
|
|
112
|
-
<stop offset="37%" stop-color="#36ADF5" stop-opacity="1"/>
|
|
113
|
-
<stop offset="95%" stop-color="#36ADF5" stop-opacity="1"/>
|
|
114
|
-
<stop offset="95%" stop-color="#36ADF5" stop-opacity="0.5"/>
|
|
115
|
-
<stop offset="100%" stop-color="#36ADF5" stop-opacity="0.5"/>
|
|
116
|
-
</radialGradient>
|
|
117
|
-
<clipPath id="sector-7">
|
|
118
|
-
<path d="M 240,190 L 160.190,340.101 A 170,170 0 0,1 149.914,334.168 Z"/>
|
|
119
|
-
</clipPath>
|
|
120
|
-
|
|
121
|
-
<radialGradient id="gradient-8" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
122
|
-
<stop offset="0%" stop-color="#006FFC" stop-opacity="0"/>
|
|
123
|
-
<stop offset="32%" stop-color="#006FFC" stop-opacity="0"/>
|
|
124
|
-
<stop offset="32%" stop-color="#006FFC" stop-opacity="0.5"/>
|
|
125
|
-
<stop offset="37%" stop-color="#006FFC" stop-opacity="0.5"/>
|
|
126
|
-
<stop offset="37%" stop-color="#006FFC" stop-opacity="1"/>
|
|
127
|
-
<stop offset="95%" stop-color="#006FFC" stop-opacity="1"/>
|
|
128
|
-
<stop offset="95%" stop-color="#006FFC" stop-opacity="0.5"/>
|
|
129
|
-
<stop offset="100%" stop-color="#006FFC" stop-opacity="0.5"/>
|
|
130
|
-
</radialGradient>
|
|
131
|
-
<clipPath id="sector-8">
|
|
132
|
-
<path d="M 240,190 L 149.914,334.168 A 170,170 0 0,1 70.104,195.933 Z"/>
|
|
133
|
-
</clipPath>
|
|
134
|
-
|
|
135
|
-
<radialGradient id="gradient-9" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
136
|
-
<stop offset="0%" stop-color="#AA96FC" stop-opacity="0"/>
|
|
137
|
-
<stop offset="32%" stop-color="#AA96FC" stop-opacity="0"/>
|
|
138
|
-
<stop offset="32%" stop-color="#AA96FC" stop-opacity="0.5"/>
|
|
139
|
-
<stop offset="37%" stop-color="#AA96FC" stop-opacity="0.5"/>
|
|
140
|
-
<stop offset="37%" stop-color="#AA96FC" stop-opacity="1"/>
|
|
141
|
-
<stop offset="95%" stop-color="#AA96FC" stop-opacity="1"/>
|
|
142
|
-
<stop offset="95%" stop-color="#AA96FC" stop-opacity="0.5"/>
|
|
143
|
-
<stop offset="100%" stop-color="#AA96FC" stop-opacity="0.5"/>
|
|
144
|
-
</radialGradient>
|
|
145
|
-
<clipPath id="sector-9">
|
|
146
|
-
<path d="M 240,190 L 70.104,195.933 A 170,170 0 0,1 70.104,184.067 Z"/>
|
|
147
|
-
</clipPath>
|
|
148
|
-
|
|
149
|
-
<radialGradient id="gradient-10" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
150
|
-
<stop offset="0%" stop-color="#FFC0FA" stop-opacity="0"/>
|
|
151
|
-
<stop offset="32%" stop-color="#FFC0FA" stop-opacity="0"/>
|
|
152
|
-
<stop offset="32%" stop-color="#FFC0FA" stop-opacity="0.5"/>
|
|
153
|
-
<stop offset="37%" stop-color="#FFC0FA" stop-opacity="0.5"/>
|
|
154
|
-
<stop offset="37%" stop-color="#FFC0FA" stop-opacity="1"/>
|
|
155
|
-
<stop offset="95%" stop-color="#FFC0FA" stop-opacity="1"/>
|
|
156
|
-
<stop offset="95%" stop-color="#FFC0FA" stop-opacity="0.5"/>
|
|
157
|
-
<stop offset="100%" stop-color="#FFC0FA" stop-opacity="0.5"/>
|
|
158
|
-
</radialGradient>
|
|
159
|
-
<clipPath id="sector-10">
|
|
160
|
-
<path d="M 240,190 L 70.104,184.067 A 170,170 0 0,1 149.914,45.832 Z"/>
|
|
161
|
-
</clipPath>
|
|
162
|
-
|
|
163
|
-
<radialGradient id="gradient-11" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
|
|
164
|
-
<stop offset="0%" stop-color="#FF7C82" stop-opacity="0"/>
|
|
165
|
-
<stop offset="32%" stop-color="#FF7C82" stop-opacity="0"/>
|
|
166
|
-
<stop offset="32%" stop-color="#FF7C82" stop-opacity="0.5"/>
|
|
167
|
-
<stop offset="37%" stop-color="#FF7C82" stop-opacity="0.5"/>
|
|
168
|
-
<stop offset="37%" stop-color="#FF7C82" stop-opacity="1"/>
|
|
169
|
-
<stop offset="95%" stop-color="#FF7C82" stop-opacity="1"/>
|
|
170
|
-
<stop offset="95%" stop-color="#FF7C82" stop-opacity="0.5"/>
|
|
171
|
-
<stop offset="100%" stop-color="#FF7C82" stop-opacity="0.5"/>
|
|
172
|
-
</radialGradient>
|
|
173
|
-
<clipPath id="sector-11">
|
|
174
|
-
<path d="M 240,190 L 149.914,45.832 A 170,170 0 0,1 160.190,39.899 Z"/>
|
|
175
|
-
</clipPath>
|
|
176
|
-
</defs>
|
|
177
|
-
|
|
178
|
-
<g>
|
|
179
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-0)" clip-path="url(#sector-0)"/>
|
|
180
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-1)" clip-path="url(#sector-1)"/>
|
|
181
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-2)" clip-path="url(#sector-2)"/>
|
|
182
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-3)" clip-path="url(#sector-3)"/>
|
|
183
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-4)" clip-path="url(#sector-4)"/>
|
|
184
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-5)" clip-path="url(#sector-5)"/>
|
|
185
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-6)" clip-path="url(#sector-6)"/>
|
|
186
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-7)" clip-path="url(#sector-7)"/>
|
|
187
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-8)" clip-path="url(#sector-8)"/>
|
|
188
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-9)" clip-path="url(#sector-9)"/>
|
|
189
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-10)" clip-path="url(#sector-10)"/>
|
|
190
|
-
<circle cx="240" cy="190" r="170" fill="url(#gradient-11)" clip-path="url(#sector-11)"/>
|
|
191
|
-
</g>
|
|
192
|
-
|
|
193
|
-
<!-- "Overlay" text: 6 colors cycling, O and y both red -->
|
|
194
|
-
<!-- Stroke is 50% opacity of each letter's fill color, rendered behind fill via paint-order -->
|
|
195
|
-
<text y="445" font-family="'Varela Round', sans-serif" font-size="100" font-weight="normal" text-anchor="middle" stroke-width="10" stroke-linejoin="round" paint-order="stroke fill">
|
|
196
|
-
<tspan x="240"><tspan fill="#F00000" stroke="#F00000" stroke-opacity="0.5">O</tspan><tspan fill="#ECE901" stroke="#ECE901" stroke-opacity="0.5">v</tspan><tspan fill="#008B00" stroke="#008B00" stroke-opacity="0.5">e</tspan><tspan fill="#04ECEB" stroke="#04ECEB" stroke-opacity="0.5">r</tspan><tspan fill="#006FFC" stroke="#006FFC" stroke-opacity="0.5">l</tspan><tspan fill="#FFC0FA" stroke="#FFC0FA" stroke-opacity="0.5">a</tspan><tspan fill="#F00000" stroke="#F00000" stroke-opacity="0.5">y</tspan></tspan>
|
|
197
|
-
</text>
|
|
198
|
-
</svg>
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# Configuration file for the Sphinx documentation builder.
|
|
2
|
-
#
|
|
3
|
-
# For the full list of built-in configuration values, see the documentation:
|
|
4
|
-
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
|
5
|
-
|
|
6
|
-
import subprocess
|
|
7
|
-
import sys
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
# -- Path setup --------------------------------------------------------------
|
|
11
|
-
# Add overlay-language/src to sys.path so autodoc can import the modules.
|
|
12
|
-
sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "src"))
|
|
13
|
-
|
|
14
|
-
# -- Project information -----------------------------------------------------
|
|
15
|
-
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
|
16
|
-
|
|
17
|
-
project = 'Overlay Language'
|
|
18
|
-
copyright = '2025, Bo Yang'
|
|
19
|
-
author = 'Bo Yang'
|
|
20
|
-
|
|
21
|
-
# -- General configuration ---------------------------------------------------
|
|
22
|
-
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
|
23
|
-
|
|
24
|
-
extensions = [
|
|
25
|
-
'sphinx.ext.autodoc',
|
|
26
|
-
'sphinx.ext.extlinks',
|
|
27
|
-
'sphinx_mdinclude',
|
|
28
|
-
]
|
|
29
|
-
|
|
30
|
-
source_suffix = {
|
|
31
|
-
'.rst': 'restructuredtext',
|
|
32
|
-
'.md': 'markdown',
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
autodoc_default_options = {
|
|
36
|
-
'imported-members': True,
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
templates_path = ['_templates']
|
|
40
|
-
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'api/modules.rst', 'api/overlay.rst']
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
# -- Options for HTML output -------------------------------------------------
|
|
45
|
-
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
|
|
46
|
-
|
|
47
|
-
html_static_path = ['_static']
|
|
48
|
-
html_theme = 'alabaster'
|
|
49
|
-
html_favicon = '_static/favicon.svg'
|
|
50
|
-
html_theme_options = {
|
|
51
|
-
'description': 'A dependency injection framework with pytest-fixture syntax, '
|
|
52
|
-
'plus a configuration language for declarative programming.',
|
|
53
|
-
'logo': 'logo.svg',
|
|
54
|
-
'fixed_sidebar': True,
|
|
55
|
-
'github_user': 'Atry',
|
|
56
|
-
'github_repo': 'overlay',
|
|
57
|
-
'github_banner': True,
|
|
58
|
-
'github_button': True,
|
|
59
|
-
'github_type': 'watch',
|
|
60
|
-
'github_count': True,
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
# -- GitHub source links (pinned to git commit) --------------------------------
|
|
64
|
-
|
|
65
|
-
_git_commit = subprocess.check_output(
|
|
66
|
-
["git", "rev-parse", "HEAD"], text=True
|
|
67
|
-
).strip()
|
|
68
|
-
|
|
69
|
-
extlinks = {
|
|
70
|
-
'github': (
|
|
71
|
-
f'https://github.com/Atry/overlay/tree/{_git_commit}/%s',
|
|
72
|
-
'%s',
|
|
73
|
-
),
|
|
74
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
Overlay Language
|
|
2
|
-
================
|
|
3
|
-
|
|
4
|
-
``overlay.language`` is a dependency injection framework with pytest-fixture
|
|
5
|
-
syntax, plus a configuration language for declarative programming. The package
|
|
6
|
-
has two parts:
|
|
7
|
-
|
|
8
|
-
The **Python decorator API** (``@scope``, ``@extern``, ``@resource``) gives you
|
|
9
|
-
dependency injection with pytest-fixture syntax — declare what a function needs
|
|
10
|
-
and the framework wires it up. Each module owns only its own concern; cross-
|
|
11
|
-
cutting behaviour layers on via ``@patch`` without touching the original code.
|
|
12
|
-
App-scoped singletons and per-request resources coexist naturally.
|
|
13
|
-
See :doc:`tutorial`.
|
|
14
|
-
|
|
15
|
-
The **Overlay language** is a configuration language written in ``.oyaml`` /
|
|
16
|
-
``.ojson`` / ``.otoml`` files. SQL queries, format strings, URL patterns — all
|
|
17
|
-
the business decisions that clutter Python code — live in the Overlay language
|
|
18
|
-
instead, where independent modules deep-merge by name without glue code —
|
|
19
|
-
dissolving the
|
|
20
|
-
`Expression Problem <https://en.wikipedia.org/wiki/Expression_problem>`_.
|
|
21
|
-
|
|
22
|
-
If you have ever struggled to mock a service that tangles I/O with business
|
|
23
|
-
logic, or dreaded porting an application from sync to async, or needed to swap
|
|
24
|
-
between providers without rewriting half your Python — the Overlay language can
|
|
25
|
-
help. Despite looking like a configuration format, it is also a statically typed
|
|
26
|
-
modern programming language based on
|
|
27
|
-
`overlay-calculus <https://arxiv.org/abs/2602.16291>`_, which is provably more
|
|
28
|
-
expressive than λ-calculus, so it can express your entire business logic — not
|
|
29
|
-
just configuration. Move that logic into the Overlay language and Python reduces
|
|
30
|
-
to thin I/O adapters that are trivial to mock or replace. The same Overlay code runs against any set of adapters and the business logic
|
|
31
|
-
never changes, even when you
|
|
32
|
-
port your synchronous program to async — the problem known as
|
|
33
|
-
`function color <https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/>`_.
|
|
34
|
-
See :doc:`overlay-language-tutorial`.
|
|
35
|
-
|
|
36
|
-
:doc:`installation`
|
|
37
|
-
Install the package from PyPI.
|
|
38
|
-
|
|
39
|
-
:doc:`tutorial`
|
|
40
|
-
Getting started with the Python decorator API — build a web application
|
|
41
|
-
step by step using ``@scope``, ``@extern``, and ``@resource``.
|
|
42
|
-
|
|
43
|
-
:doc:`overlay-language-tutorial`
|
|
44
|
-
Getting started with the Overlay language — rewrite the same application
|
|
45
|
-
in ``.oyaml``, separating business logic from I/O, then switch the
|
|
46
|
-
underlying framework to asyncio without changing your code.
|
|
47
|
-
|
|
48
|
-
:doc:`specification`
|
|
49
|
-
Full language specification for the Overlay language.
|
|
50
|
-
|
|
51
|
-
`API Reference <api/overlay.language.html>`__
|
|
52
|
-
Python API reference (auto-generated).
|
|
53
|
-
|
|
54
|
-
.. toctree::
|
|
55
|
-
:hidden:
|
|
56
|
-
|
|
57
|
-
installation
|
|
58
|
-
tutorial
|
|
59
|
-
overlay-language-tutorial
|
|
60
|
-
specification
|
|
61
|
-
API Reference <api/overlay.language>
|