linked-data-python 0.2.0__tar.gz → 0.2.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.
Files changed (65) hide show
  1. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/PKG-INFO +23 -23
  2. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/README.md +22 -22
  3. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/__init__.py +13 -1
  4. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/debug.py +6 -2
  5. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/linked_data_python.egg-info/PKG-INFO +23 -23
  6. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/pyproject.toml +1 -1
  7. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_debug.py +4 -0
  8. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_docstrings.py +15 -0
  9. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/LICENSE.md +0 -0
  10. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/__main__.py +0 -0
  11. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/build.py +0 -0
  12. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/console.py +0 -0
  13. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/formatter.py +0 -0
  14. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/importer.py +0 -0
  15. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/lsp/__init__.py +0 -0
  16. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/lsp/__main__.py +0 -0
  17. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/lsp/backend.py +0 -0
  18. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/lsp/rpc.py +0 -0
  19. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/lsp/server.py +0 -0
  20. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/lsp/translate.py +0 -0
  21. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/pygments_lexer.py +0 -0
  22. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/runtime.py +0 -0
  23. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/sparql.py +0 -0
  24. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/transpiler/__init__.py +0 -0
  25. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/transpiler/core.py +0 -0
  26. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/transpiler/errors.py +0 -0
  27. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/ldpy/transpiler/linemap.py +0 -0
  28. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/linked_data_python.egg-info/SOURCES.txt +0 -0
  29. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/linked_data_python.egg-info/dependency_links.txt +0 -0
  30. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/linked_data_python.egg-info/entry_points.txt +0 -0
  31. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/linked_data_python.egg-info/requires.txt +0 -0
  32. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/linked_data_python.egg-info/top_level.txt +0 -0
  33. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/setup.cfg +0 -0
  34. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_bench.py +0 -0
  35. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_bindings.py +0 -0
  36. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_build.py +0 -0
  37. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_call_suffix.py +0 -0
  38. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_charsets.py +0 -0
  39. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_coercion.py +0 -0
  40. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_console.py +0 -0
  41. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_current_graph.py +0 -0
  42. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_debug_stepping.py +0 -0
  43. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_disambiguation.py +0 -0
  44. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_docs.py +0 -0
  45. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_examples.py +0 -0
  46. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_formatter.py +0 -0
  47. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_generator.py +0 -0
  48. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_graphs.py +0 -0
  49. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_identity.py +0 -0
  50. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_import_hook.py +0 -0
  51. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_islands_terms.py +0 -0
  52. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_linemap.py +0 -0
  53. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_lsp_rpc.py +0 -0
  54. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_lsp_server.py +0 -0
  55. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_lsp_translate.py +0 -0
  56. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_match_island.py +0 -0
  57. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_micropython_subset.py +0 -0
  58. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_prefix_import.py +0 -0
  59. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_prefix_scoping.py +0 -0
  60. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_pygments_lexer.py +0 -0
  61. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_scope_modifiers.py +0 -0
  62. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_semantics.py +0 -0
  63. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_sourcemap_v3.py +0 -0
  64. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_sparql_expr.py +0 -0
  65. {linked_data_python-0.2.0 → linked_data_python-0.2.1}/tests/test_sparql_island.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: linked-data-python
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Python extended with Semantic Web primitives: IRIs, RDF literals and Turtle-notation graphs as expressions, transpiled by island parsing.
5
5
  Author-email: Maxime Lefrançois <maxime.lefrancois@emse.fr>
6
6
  License: MIT
@@ -96,31 +96,31 @@ From Python: `import ldpy; ldpy.install()` then `import yourmodule` finds
96
96
 
97
97
  ## Documentation
98
98
 
99
- Read it at [`docs/`](docs/README.md) — start with the
100
- [home page](docs/README.md) for an overview, then:
99
+ Read it at **<https://linked-data-python.readthedocs.io/>** — start with the
100
+ home page for an overview, then:
101
101
 
102
- - **Tutorials** — [first steps](docs/tutorials/getting-started.md), then
103
- [build a knowledge graph](docs/tutorials/build-a-knowledge-graph.md) from
102
+ - **Tutorials** — [first steps](https://linked-data-python.readthedocs.io/en/latest/tutorials/getting-started/), then
103
+ [build a knowledge graph](https://linked-data-python.readthedocs.io/en/latest/tutorials/build-a-knowledge-graph/) from
104
104
  tabular data.
105
- - **How-to guides** — [run & import](docs/how-to/run-and-import.md),
106
- [build graphs from tables](docs/how-to/build-graphs-from-tables.md),
107
- [read and query](docs/how-to/query-a-graph.md),
108
- [migrate from rdflib](docs/how-to/migrate-from-rdflib.md),
109
- [VS Code](docs/how-to/use-vscode.md), [debugging](docs/how-to/debug.md),
110
- [language server](docs/how-to/language-server.md),
111
- [highlighting](docs/how-to/highlight-ldpy.md).
112
- - **Reference** — [the language](docs/reference/language/index.md), one page
113
- per island family; [SPARQL expressions](docs/reference/sparql-expressions.md);
114
- [CLI](docs/reference/cli.md); [Python API](docs/reference/api.md);
115
- [language map formats](docs/reference/language-map.md).
116
- - **Explanation** — [why](docs/explanation/why.md),
117
- [what real RDF code does](docs/explanation/what-real-code-does.md) (the
105
+ - **How-to guides** — [run & import](https://linked-data-python.readthedocs.io/en/latest/how-to/run-and-import/),
106
+ [build graphs from tables](https://linked-data-python.readthedocs.io/en/latest/how-to/build-graphs-from-tables/),
107
+ [read and query](https://linked-data-python.readthedocs.io/en/latest/how-to/query-a-graph/),
108
+ [migrate from rdflib](https://linked-data-python.readthedocs.io/en/latest/how-to/migrate-from-rdflib/),
109
+ [VS Code](https://linked-data-python.readthedocs.io/en/latest/how-to/use-vscode/), [debugging](https://linked-data-python.readthedocs.io/en/latest/how-to/debug/),
110
+ [language server](https://linked-data-python.readthedocs.io/en/latest/how-to/language-server/),
111
+ [highlighting](https://linked-data-python.readthedocs.io/en/latest/how-to/highlight-ldpy/).
112
+ - **Reference** — [the language](https://linked-data-python.readthedocs.io/en/latest/reference/language/), one page
113
+ per island family; [SPARQL expressions](https://linked-data-python.readthedocs.io/en/latest/reference/sparql-expressions/);
114
+ [CLI](https://linked-data-python.readthedocs.io/en/latest/reference/cli/); [Python API](https://linked-data-python.readthedocs.io/en/latest/reference/api/);
115
+ [language map formats](https://linked-data-python.readthedocs.io/en/latest/reference/language-map/).
116
+ - **Explanation** — [why](https://linked-data-python.readthedocs.io/en/latest/explanation/why/),
117
+ [what real RDF code does](https://linked-data-python.readthedocs.io/en/latest/explanation/what-real-code-does/) (the
118
118
  corpus study that drove the language's second wave),
119
- [designing the syntax](docs/explanation/designing-the-syntax.md),
120
- [island parsing](docs/explanation/island-parsing.md),
121
- [emission & semantics](docs/explanation/emission-and-semantics.md),
122
- [tooling](docs/explanation/tooling.md),
123
- [how this is tested](docs/explanation/how-it-is-tested.md).
119
+ [designing the syntax](https://linked-data-python.readthedocs.io/en/latest/explanation/designing-the-syntax/),
120
+ [island parsing](https://linked-data-python.readthedocs.io/en/latest/explanation/island-parsing/),
121
+ [emission & semantics](https://linked-data-python.readthedocs.io/en/latest/explanation/emission-and-semantics/),
122
+ [tooling](https://linked-data-python.readthedocs.io/en/latest/explanation/tooling/),
123
+ [how this is tested](https://linked-data-python.readthedocs.io/en/latest/explanation/how-it-is-tested/).
124
124
 
125
125
  Every `ldpy` and `python` block in the documentation is executed by the test
126
126
  suite, and its assertions are the test.
@@ -54,31 +54,31 @@ From Python: `import ldpy; ldpy.install()` then `import yourmodule` finds
54
54
 
55
55
  ## Documentation
56
56
 
57
- Read it at [`docs/`](docs/README.md) — start with the
58
- [home page](docs/README.md) for an overview, then:
57
+ Read it at **<https://linked-data-python.readthedocs.io/>** — start with the
58
+ home page for an overview, then:
59
59
 
60
- - **Tutorials** — [first steps](docs/tutorials/getting-started.md), then
61
- [build a knowledge graph](docs/tutorials/build-a-knowledge-graph.md) from
60
+ - **Tutorials** — [first steps](https://linked-data-python.readthedocs.io/en/latest/tutorials/getting-started/), then
61
+ [build a knowledge graph](https://linked-data-python.readthedocs.io/en/latest/tutorials/build-a-knowledge-graph/) from
62
62
  tabular data.
63
- - **How-to guides** — [run & import](docs/how-to/run-and-import.md),
64
- [build graphs from tables](docs/how-to/build-graphs-from-tables.md),
65
- [read and query](docs/how-to/query-a-graph.md),
66
- [migrate from rdflib](docs/how-to/migrate-from-rdflib.md),
67
- [VS Code](docs/how-to/use-vscode.md), [debugging](docs/how-to/debug.md),
68
- [language server](docs/how-to/language-server.md),
69
- [highlighting](docs/how-to/highlight-ldpy.md).
70
- - **Reference** — [the language](docs/reference/language/index.md), one page
71
- per island family; [SPARQL expressions](docs/reference/sparql-expressions.md);
72
- [CLI](docs/reference/cli.md); [Python API](docs/reference/api.md);
73
- [language map formats](docs/reference/language-map.md).
74
- - **Explanation** — [why](docs/explanation/why.md),
75
- [what real RDF code does](docs/explanation/what-real-code-does.md) (the
63
+ - **How-to guides** — [run & import](https://linked-data-python.readthedocs.io/en/latest/how-to/run-and-import/),
64
+ [build graphs from tables](https://linked-data-python.readthedocs.io/en/latest/how-to/build-graphs-from-tables/),
65
+ [read and query](https://linked-data-python.readthedocs.io/en/latest/how-to/query-a-graph/),
66
+ [migrate from rdflib](https://linked-data-python.readthedocs.io/en/latest/how-to/migrate-from-rdflib/),
67
+ [VS Code](https://linked-data-python.readthedocs.io/en/latest/how-to/use-vscode/), [debugging](https://linked-data-python.readthedocs.io/en/latest/how-to/debug/),
68
+ [language server](https://linked-data-python.readthedocs.io/en/latest/how-to/language-server/),
69
+ [highlighting](https://linked-data-python.readthedocs.io/en/latest/how-to/highlight-ldpy/).
70
+ - **Reference** — [the language](https://linked-data-python.readthedocs.io/en/latest/reference/language/), one page
71
+ per island family; [SPARQL expressions](https://linked-data-python.readthedocs.io/en/latest/reference/sparql-expressions/);
72
+ [CLI](https://linked-data-python.readthedocs.io/en/latest/reference/cli/); [Python API](https://linked-data-python.readthedocs.io/en/latest/reference/api/);
73
+ [language map formats](https://linked-data-python.readthedocs.io/en/latest/reference/language-map/).
74
+ - **Explanation** — [why](https://linked-data-python.readthedocs.io/en/latest/explanation/why/),
75
+ [what real RDF code does](https://linked-data-python.readthedocs.io/en/latest/explanation/what-real-code-does/) (the
76
76
  corpus study that drove the language's second wave),
77
- [designing the syntax](docs/explanation/designing-the-syntax.md),
78
- [island parsing](docs/explanation/island-parsing.md),
79
- [emission & semantics](docs/explanation/emission-and-semantics.md),
80
- [tooling](docs/explanation/tooling.md),
81
- [how this is tested](docs/explanation/how-it-is-tested.md).
77
+ [designing the syntax](https://linked-data-python.readthedocs.io/en/latest/explanation/designing-the-syntax/),
78
+ [island parsing](https://linked-data-python.readthedocs.io/en/latest/explanation/island-parsing/),
79
+ [emission & semantics](https://linked-data-python.readthedocs.io/en/latest/explanation/emission-and-semantics/),
80
+ [tooling](https://linked-data-python.readthedocs.io/en/latest/explanation/tooling/),
81
+ [how this is tested](https://linked-data-python.readthedocs.io/en/latest/explanation/how-it-is-tested/).
82
82
 
83
83
  Every `ldpy` and `python` block in the documentation is executed by the test
84
84
  suite, and its assertions are the test.
@@ -11,7 +11,19 @@ package but is no longer imported by default.
11
11
  from ldpy.transpiler import transpile, LdpySyntaxError, LdpyWarning
12
12
  from ldpy.importer import install, uninstall, install_excepthook
13
13
 
14
- __version__ = "0.1.0.dev0"
14
+ #: Read from the installed distribution rather than written here: two copies
15
+ #: of a version number drift, and this one had — a 0.2.0 install announced
16
+ #: itself as 0.1.0.dev0 in the editor status bar. The fallback covers a source
17
+ #: tree that was never installed.
18
+ try:
19
+ from importlib.metadata import PackageNotFoundError, version as _version
20
+ try:
21
+ __version__ = _version("linked-data-python")
22
+ except PackageNotFoundError: # pragma: no cover
23
+ __version__ = "0.0.0+unknown"
24
+ del _version, PackageNotFoundError
25
+ except ImportError: # pragma: no cover
26
+ __version__ = "0.0.0+unknown"
15
27
  __date__ = "2026-08-26"
16
28
 
17
29
 
@@ -211,9 +211,13 @@ def main(argv=None):
211
211
 
212
212
  if args.breakpoints:
213
213
  lines = [int(x) for x in args.breakpoints.split(",") if x.strip()]
214
+ # ABSOLUTE paths: this output crosses a process boundary, and a
215
+ # relative path means nothing to a reader that does not share our
216
+ # working directory. An editor turning ".ldpy-build/x.py" into a URI
217
+ # gets "/.ldpy-build/x.py", rooted at the filesystem root.
214
218
  print(json.dumps({
215
- "shadow": py_path,
216
- "map": map_path,
219
+ "shadow": os.path.abspath(py_path),
220
+ "map": os.path.abspath(map_path),
217
221
  "breakpoints": dict(zip(
218
222
  lines, translate_breakpoints(result.map, lines)))}))
219
223
  return 0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: linked-data-python
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Python extended with Semantic Web primitives: IRIs, RDF literals and Turtle-notation graphs as expressions, transpiled by island parsing.
5
5
  Author-email: Maxime Lefrançois <maxime.lefrancois@emse.fr>
6
6
  License: MIT
@@ -96,31 +96,31 @@ From Python: `import ldpy; ldpy.install()` then `import yourmodule` finds
96
96
 
97
97
  ## Documentation
98
98
 
99
- Read it at [`docs/`](docs/README.md) — start with the
100
- [home page](docs/README.md) for an overview, then:
99
+ Read it at **<https://linked-data-python.readthedocs.io/>** — start with the
100
+ home page for an overview, then:
101
101
 
102
- - **Tutorials** — [first steps](docs/tutorials/getting-started.md), then
103
- [build a knowledge graph](docs/tutorials/build-a-knowledge-graph.md) from
102
+ - **Tutorials** — [first steps](https://linked-data-python.readthedocs.io/en/latest/tutorials/getting-started/), then
103
+ [build a knowledge graph](https://linked-data-python.readthedocs.io/en/latest/tutorials/build-a-knowledge-graph/) from
104
104
  tabular data.
105
- - **How-to guides** — [run & import](docs/how-to/run-and-import.md),
106
- [build graphs from tables](docs/how-to/build-graphs-from-tables.md),
107
- [read and query](docs/how-to/query-a-graph.md),
108
- [migrate from rdflib](docs/how-to/migrate-from-rdflib.md),
109
- [VS Code](docs/how-to/use-vscode.md), [debugging](docs/how-to/debug.md),
110
- [language server](docs/how-to/language-server.md),
111
- [highlighting](docs/how-to/highlight-ldpy.md).
112
- - **Reference** — [the language](docs/reference/language/index.md), one page
113
- per island family; [SPARQL expressions](docs/reference/sparql-expressions.md);
114
- [CLI](docs/reference/cli.md); [Python API](docs/reference/api.md);
115
- [language map formats](docs/reference/language-map.md).
116
- - **Explanation** — [why](docs/explanation/why.md),
117
- [what real RDF code does](docs/explanation/what-real-code-does.md) (the
105
+ - **How-to guides** — [run & import](https://linked-data-python.readthedocs.io/en/latest/how-to/run-and-import/),
106
+ [build graphs from tables](https://linked-data-python.readthedocs.io/en/latest/how-to/build-graphs-from-tables/),
107
+ [read and query](https://linked-data-python.readthedocs.io/en/latest/how-to/query-a-graph/),
108
+ [migrate from rdflib](https://linked-data-python.readthedocs.io/en/latest/how-to/migrate-from-rdflib/),
109
+ [VS Code](https://linked-data-python.readthedocs.io/en/latest/how-to/use-vscode/), [debugging](https://linked-data-python.readthedocs.io/en/latest/how-to/debug/),
110
+ [language server](https://linked-data-python.readthedocs.io/en/latest/how-to/language-server/),
111
+ [highlighting](https://linked-data-python.readthedocs.io/en/latest/how-to/highlight-ldpy/).
112
+ - **Reference** — [the language](https://linked-data-python.readthedocs.io/en/latest/reference/language/), one page
113
+ per island family; [SPARQL expressions](https://linked-data-python.readthedocs.io/en/latest/reference/sparql-expressions/);
114
+ [CLI](https://linked-data-python.readthedocs.io/en/latest/reference/cli/); [Python API](https://linked-data-python.readthedocs.io/en/latest/reference/api/);
115
+ [language map formats](https://linked-data-python.readthedocs.io/en/latest/reference/language-map/).
116
+ - **Explanation** — [why](https://linked-data-python.readthedocs.io/en/latest/explanation/why/),
117
+ [what real RDF code does](https://linked-data-python.readthedocs.io/en/latest/explanation/what-real-code-does/) (the
118
118
  corpus study that drove the language's second wave),
119
- [designing the syntax](docs/explanation/designing-the-syntax.md),
120
- [island parsing](docs/explanation/island-parsing.md),
121
- [emission & semantics](docs/explanation/emission-and-semantics.md),
122
- [tooling](docs/explanation/tooling.md),
123
- [how this is tested](docs/explanation/how-it-is-tested.md).
119
+ [designing the syntax](https://linked-data-python.readthedocs.io/en/latest/explanation/designing-the-syntax/),
120
+ [island parsing](https://linked-data-python.readthedocs.io/en/latest/explanation/island-parsing/),
121
+ [emission & semantics](https://linked-data-python.readthedocs.io/en/latest/explanation/emission-and-semantics/),
122
+ [tooling](https://linked-data-python.readthedocs.io/en/latest/explanation/tooling/),
123
+ [how this is tested](https://linked-data-python.readthedocs.io/en/latest/explanation/how-it-is-tested/).
124
124
 
125
125
  Every `ldpy` and `python` block in the documentation is executed by the test
126
126
  suite, and its assertions are the test.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "linked-data-python"
7
- version = "0.2.0"
7
+ version = "0.2.1"
8
8
  description = "Python extended with Semantic Web primitives: IRIs, RDF literals and Turtle-notation graphs as expressions, transpiled by island parsing."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -79,6 +79,10 @@ def test_cli_breakpoints_mode(tmp_path):
79
79
  d = json.loads(p.stdout)
80
80
  assert d["shadow"].endswith("prog.py")
81
81
  assert os.path.isfile(d["map"])
82
+ # absolute, because this output crosses a process boundary: an editor
83
+ # that turned a relative path into a URI would root it at "/"
84
+ assert os.path.isabs(d["shadow"]) and os.path.isabs(d["map"])
85
+ assert os.path.isfile(d["shadow"])
82
86
  assert d["breakpoints"]["2"] == 3
83
87
  assert d["breakpoints"]["5"] == 5 # prélude +1, effondrement du g{} -1
84
88
 
@@ -55,3 +55,18 @@ def _missing(path):
55
55
  def test_public_api_documented(path):
56
56
  gaps = _missing(path)
57
57
  assert not gaps, "docstrings manquantes dans %s : %s" % (path, gaps)
58
+
59
+
60
+ def test_version_comes_from_the_installed_distribution():
61
+ """Two copies of a version number drift, and this one did: a 0.2.0
62
+ install announced itself as 0.1.0.dev0 in the editor status bar."""
63
+ import ldpy
64
+ from importlib.metadata import version
65
+ assert ldpy.__version__ == version("linked-data-python")
66
+
67
+
68
+ def test_probe_reports_that_same_version():
69
+ """`--probe` is what the VS Code status bar shows."""
70
+ from ldpy.debug import probe
71
+ import ldpy
72
+ assert probe()["version"] == ldpy.__version__