python-libei 0.1.0__tar.gz → 0.2.0__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 (30) hide show
  1. {python_libei-0.1.0/src/python_libei.egg-info → python_libei-0.2.0}/PKG-INFO +35 -20
  2. {python_libei-0.1.0 → python_libei-0.2.0}/README.md +34 -19
  3. {python_libei-0.1.0 → python_libei-0.2.0}/pyproject.toml +1 -1
  4. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/__init__.py +1 -1
  5. {python_libei-0.1.0 → python_libei-0.2.0/src/python_libei.egg-info}/PKG-INFO +35 -20
  6. {python_libei-0.1.0 → python_libei-0.2.0}/tests/test_documentation_shape.py +10 -3
  7. {python_libei-0.1.0 → python_libei-0.2.0}/LICENSE +0 -0
  8. {python_libei-0.1.0 → python_libei-0.2.0}/setup.cfg +0 -0
  9. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/_capi/__init__.py +0 -0
  10. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/_capi/libei.py +0 -0
  11. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/_capi/libeis.py +0 -0
  12. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/_capi/liboeffis.py +0 -0
  13. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/_capi/loader.py +0 -0
  14. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/_cobject.py +0 -0
  15. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/ei.py +0 -0
  16. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/eis.py +0 -0
  17. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/oeffis.py +0 -0
  18. {python_libei-0.1.0 → python_libei-0.2.0}/src/libei/py.typed +0 -0
  19. {python_libei-0.1.0 → python_libei-0.2.0}/src/python_libei.egg-info/SOURCES.txt +0 -0
  20. {python_libei-0.1.0 → python_libei-0.2.0}/src/python_libei.egg-info/dependency_links.txt +0 -0
  21. {python_libei-0.1.0 → python_libei-0.2.0}/src/python_libei.egg-info/requires.txt +0 -0
  22. {python_libei-0.1.0 → python_libei-0.2.0}/src/python_libei.egg-info/top_level.txt +0 -0
  23. {python_libei-0.1.0 → python_libei-0.2.0}/tests/test_cobject.py +0 -0
  24. {python_libei-0.1.0 → python_libei-0.2.0}/tests/test_documented_examples.py +0 -0
  25. {python_libei-0.1.0 → python_libei-0.2.0}/tests/test_ei_objects.py +0 -0
  26. {python_libei-0.1.0 → python_libei-0.2.0}/tests/test_eis_objects.py +0 -0
  27. {python_libei-0.1.0 → python_libei-0.2.0}/tests/test_integration_extras.py +0 -0
  28. {python_libei-0.1.0 → python_libei-0.2.0}/tests/test_integration_socketpair.py +0 -0
  29. {python_libei-0.1.0 → python_libei-0.2.0}/tests/test_loader.py +0 -0
  30. {python_libei-0.1.0 → python_libei-0.2.0}/tests/test_oeffis.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-libei
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: Inject and receive input on Wayland from Python: ctypes bindings for libei, libeis and liboeffis
5
5
  Author: Dennis K. Paulsen
6
6
  License-Expression: MIT
@@ -133,8 +133,9 @@ pointer.
133
133
 
134
134
  ## Status
135
135
 
136
- Alpha (`0.1.0`), not yet on PyPI, and the API is not frozen — expect
137
- renames before 1.0. What that qualifier covers, concretely:
136
+ Alpha (`0.2.0`), published on [PyPI](https://pypi.org/project/python-libei/)
137
+ since `0.1.0`, and the API is not frozen — expect renames before 1.0. What
138
+ that qualifier covers, concretely:
138
139
 
139
140
  - The injection path — connect, bind, wait for a device, send events — is
140
141
  exercised end-to-end against the real libraries by
@@ -194,17 +195,29 @@ renames before 1.0. What that qualifier covers, concretely:
194
195
 
195
196
  ## Install
196
197
 
197
- Not published to PyPI yet — install from a checkout:
198
+ From [PyPI](https://pypi.org/project/python-libei/):
198
199
 
199
200
  ```sh
200
- git clone https://github.com/ctrondlp/python-libei.git
201
- cd python-libei
202
- pip install .
201
+ pip install python-libei
203
202
  ```
204
203
 
205
204
  The distribution is named `python-libei`, the import is `libei` -- so
206
205
  `pip show python-libei`, but `from libei import ei`.
207
206
 
207
+ Pure Python, no build step: the wheel is `py3-none-any` and ctypes talks to
208
+ the native libraries directly, so there is no compiler, no headers and no
209
+ `libei-devel` involved at install time. What `pip` does *not* bring is the
210
+ native libraries themselves -- see [Requirements](#requirements) above; on
211
+ Fedora, `sudo dnf install libei libeis liboeffis`.
212
+
213
+ To track `main` instead, or to hack on it, install from a checkout:
214
+
215
+ ```sh
216
+ git clone https://github.com/ctrondlp/python-libei.git
217
+ cd python-libei
218
+ pip install . # or `pip install -e '.[dev]'` to develop
219
+ ```
220
+
208
221
  Importing is always safe, even where the native libraries are missing — they
209
222
  are loaded on first use, not at import. Check before you rely on them:
210
223
 
@@ -724,9 +737,9 @@ tag. Nothing enforces that yet.
724
737
  A release is an annotated, `v`-prefixed tag plus a GitHub Release:
725
738
 
726
739
  ```sh
727
- git tag -a v0.1.0 -m "0.1.0"
728
- git push origin v0.1.0
729
- gh release create v0.1.0 --generate-notes --prerelease
740
+ git tag -a v0.2.0 -m "0.2.0"
741
+ git push origin v0.2.0
742
+ gh release create v0.2.0 --generate-notes --prerelease
730
743
  ```
731
744
 
732
745
  `--prerelease` while the API is unfrozen -- it keeps an alpha out of the
@@ -739,22 +752,24 @@ job in `ci.yml` handles it, uploading the artifacts the `build` job already
739
752
  ran `twine check` over.
740
753
 
741
754
  That job depends on two pieces of configuration outside this repository,
742
- which have to exist before the first tag:
743
-
744
- 1. On pypi.org, under Account settings -> Publishing, a **pending**
745
- publisher -- the flow for a project that has no releases yet. Project
746
- `python-libei`, owner `ctrondlp`, repository `python-libei`, workflow
747
- `ci.yml`, environment `pypi`. Every field has to match the workflow
755
+ both of which are in place as of `0.1.0`:
756
+
757
+ 1. On pypi.org, a trusted publisher on the `python-libei` project: owner
758
+ `ctrondlp`, repository `python-libei`, workflow `ci.yml`, environment
759
+ `pypi`. It started life as a **pending** publisher -- the flow for a
760
+ project with no releases yet -- and the first upload converted it into
761
+ an ordinary project-level one, so a fresh project is the only case that
762
+ needs the pending form again. Every field has to match the workflow
748
763
  exactly; a mismatch surfaces as a rejected credential at upload time,
749
764
  not when it is saved.
750
765
  2. A GitHub environment named `pypi`, in the repository settings. A
751
766
  required reviewer on it makes each publish a deliberate approval rather
752
767
  than a side effect of pushing a tag.
753
768
 
754
- Worth rehearsing on TestPyPI first: separate account, separate pending
755
- publisher, and `repository-url: https://test.pypi.org/legacy/` on the
756
- publish step. PyPI filenames are immutable, so a bad upload can only be
757
- yanked and superseded by a new version, never replaced.
769
+ PyPI filenames are immutable, so a bad upload can only be yanked and
770
+ superseded by a new version, never replaced -- worth rehearsing anything
771
+ unusual on TestPyPI first (separate account, separate pending publisher,
772
+ and `repository-url: https://test.pypi.org/legacy/` on the publish step).
758
773
 
759
774
  ## Design notes
760
775
 
@@ -100,8 +100,9 @@ pointer.
100
100
 
101
101
  ## Status
102
102
 
103
- Alpha (`0.1.0`), not yet on PyPI, and the API is not frozen — expect
104
- renames before 1.0. What that qualifier covers, concretely:
103
+ Alpha (`0.2.0`), published on [PyPI](https://pypi.org/project/python-libei/)
104
+ since `0.1.0`, and the API is not frozen — expect renames before 1.0. What
105
+ that qualifier covers, concretely:
105
106
 
106
107
  - The injection path — connect, bind, wait for a device, send events — is
107
108
  exercised end-to-end against the real libraries by
@@ -161,17 +162,29 @@ renames before 1.0. What that qualifier covers, concretely:
161
162
 
162
163
  ## Install
163
164
 
164
- Not published to PyPI yet — install from a checkout:
165
+ From [PyPI](https://pypi.org/project/python-libei/):
165
166
 
166
167
  ```sh
167
- git clone https://github.com/ctrondlp/python-libei.git
168
- cd python-libei
169
- pip install .
168
+ pip install python-libei
170
169
  ```
171
170
 
172
171
  The distribution is named `python-libei`, the import is `libei` -- so
173
172
  `pip show python-libei`, but `from libei import ei`.
174
173
 
174
+ Pure Python, no build step: the wheel is `py3-none-any` and ctypes talks to
175
+ the native libraries directly, so there is no compiler, no headers and no
176
+ `libei-devel` involved at install time. What `pip` does *not* bring is the
177
+ native libraries themselves -- see [Requirements](#requirements) above; on
178
+ Fedora, `sudo dnf install libei libeis liboeffis`.
179
+
180
+ To track `main` instead, or to hack on it, install from a checkout:
181
+
182
+ ```sh
183
+ git clone https://github.com/ctrondlp/python-libei.git
184
+ cd python-libei
185
+ pip install . # or `pip install -e '.[dev]'` to develop
186
+ ```
187
+
175
188
  Importing is always safe, even where the native libraries are missing — they
176
189
  are loaded on first use, not at import. Check before you rely on them:
177
190
 
@@ -691,9 +704,9 @@ tag. Nothing enforces that yet.
691
704
  A release is an annotated, `v`-prefixed tag plus a GitHub Release:
692
705
 
693
706
  ```sh
694
- git tag -a v0.1.0 -m "0.1.0"
695
- git push origin v0.1.0
696
- gh release create v0.1.0 --generate-notes --prerelease
707
+ git tag -a v0.2.0 -m "0.2.0"
708
+ git push origin v0.2.0
709
+ gh release create v0.2.0 --generate-notes --prerelease
697
710
  ```
698
711
 
699
712
  `--prerelease` while the API is unfrozen -- it keeps an alpha out of the
@@ -706,22 +719,24 @@ job in `ci.yml` handles it, uploading the artifacts the `build` job already
706
719
  ran `twine check` over.
707
720
 
708
721
  That job depends on two pieces of configuration outside this repository,
709
- which have to exist before the first tag:
710
-
711
- 1. On pypi.org, under Account settings -> Publishing, a **pending**
712
- publisher -- the flow for a project that has no releases yet. Project
713
- `python-libei`, owner `ctrondlp`, repository `python-libei`, workflow
714
- `ci.yml`, environment `pypi`. Every field has to match the workflow
722
+ both of which are in place as of `0.1.0`:
723
+
724
+ 1. On pypi.org, a trusted publisher on the `python-libei` project: owner
725
+ `ctrondlp`, repository `python-libei`, workflow `ci.yml`, environment
726
+ `pypi`. It started life as a **pending** publisher -- the flow for a
727
+ project with no releases yet -- and the first upload converted it into
728
+ an ordinary project-level one, so a fresh project is the only case that
729
+ needs the pending form again. Every field has to match the workflow
715
730
  exactly; a mismatch surfaces as a rejected credential at upload time,
716
731
  not when it is saved.
717
732
  2. A GitHub environment named `pypi`, in the repository settings. A
718
733
  required reviewer on it makes each publish a deliberate approval rather
719
734
  than a side effect of pushing a tag.
720
735
 
721
- Worth rehearsing on TestPyPI first: separate account, separate pending
722
- publisher, and `repository-url: https://test.pypi.org/legacy/` on the
723
- publish step. PyPI filenames are immutable, so a bad upload can only be
724
- yanked and superseded by a new version, never replaced.
736
+ PyPI filenames are immutable, so a bad upload can only be yanked and
737
+ superseded by a new version, never replaced -- worth rehearsing anything
738
+ unusual on TestPyPI first (separate account, separate pending publisher,
739
+ and `repository-url: https://test.pypi.org/legacy/` on the publish step).
725
740
 
726
741
  ## Design notes
727
742
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-libei"
7
- version = "0.1.0"
7
+ version = "0.2.0"
8
8
  description = "Inject and receive input on Wayland from Python: ctypes bindings for libei, libeis and liboeffis"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -26,6 +26,6 @@ the full breakdown, including which features need which libei version.
26
26
  Alpha: the API is not frozen.
27
27
  """
28
28
 
29
- __version__ = "0.1.0"
29
+ __version__ = "0.2.0"
30
30
 
31
31
  __all__ = ["__version__"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-libei
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: Inject and receive input on Wayland from Python: ctypes bindings for libei, libeis and liboeffis
5
5
  Author: Dennis K. Paulsen
6
6
  License-Expression: MIT
@@ -133,8 +133,9 @@ pointer.
133
133
 
134
134
  ## Status
135
135
 
136
- Alpha (`0.1.0`), not yet on PyPI, and the API is not frozen — expect
137
- renames before 1.0. What that qualifier covers, concretely:
136
+ Alpha (`0.2.0`), published on [PyPI](https://pypi.org/project/python-libei/)
137
+ since `0.1.0`, and the API is not frozen — expect renames before 1.0. What
138
+ that qualifier covers, concretely:
138
139
 
139
140
  - The injection path — connect, bind, wait for a device, send events — is
140
141
  exercised end-to-end against the real libraries by
@@ -194,17 +195,29 @@ renames before 1.0. What that qualifier covers, concretely:
194
195
 
195
196
  ## Install
196
197
 
197
- Not published to PyPI yet — install from a checkout:
198
+ From [PyPI](https://pypi.org/project/python-libei/):
198
199
 
199
200
  ```sh
200
- git clone https://github.com/ctrondlp/python-libei.git
201
- cd python-libei
202
- pip install .
201
+ pip install python-libei
203
202
  ```
204
203
 
205
204
  The distribution is named `python-libei`, the import is `libei` -- so
206
205
  `pip show python-libei`, but `from libei import ei`.
207
206
 
207
+ Pure Python, no build step: the wheel is `py3-none-any` and ctypes talks to
208
+ the native libraries directly, so there is no compiler, no headers and no
209
+ `libei-devel` involved at install time. What `pip` does *not* bring is the
210
+ native libraries themselves -- see [Requirements](#requirements) above; on
211
+ Fedora, `sudo dnf install libei libeis liboeffis`.
212
+
213
+ To track `main` instead, or to hack on it, install from a checkout:
214
+
215
+ ```sh
216
+ git clone https://github.com/ctrondlp/python-libei.git
217
+ cd python-libei
218
+ pip install . # or `pip install -e '.[dev]'` to develop
219
+ ```
220
+
208
221
  Importing is always safe, even where the native libraries are missing — they
209
222
  are loaded on first use, not at import. Check before you rely on them:
210
223
 
@@ -724,9 +737,9 @@ tag. Nothing enforces that yet.
724
737
  A release is an annotated, `v`-prefixed tag plus a GitHub Release:
725
738
 
726
739
  ```sh
727
- git tag -a v0.1.0 -m "0.1.0"
728
- git push origin v0.1.0
729
- gh release create v0.1.0 --generate-notes --prerelease
740
+ git tag -a v0.2.0 -m "0.2.0"
741
+ git push origin v0.2.0
742
+ gh release create v0.2.0 --generate-notes --prerelease
730
743
  ```
731
744
 
732
745
  `--prerelease` while the API is unfrozen -- it keeps an alpha out of the
@@ -739,22 +752,24 @@ job in `ci.yml` handles it, uploading the artifacts the `build` job already
739
752
  ran `twine check` over.
740
753
 
741
754
  That job depends on two pieces of configuration outside this repository,
742
- which have to exist before the first tag:
743
-
744
- 1. On pypi.org, under Account settings -> Publishing, a **pending**
745
- publisher -- the flow for a project that has no releases yet. Project
746
- `python-libei`, owner `ctrondlp`, repository `python-libei`, workflow
747
- `ci.yml`, environment `pypi`. Every field has to match the workflow
755
+ both of which are in place as of `0.1.0`:
756
+
757
+ 1. On pypi.org, a trusted publisher on the `python-libei` project: owner
758
+ `ctrondlp`, repository `python-libei`, workflow `ci.yml`, environment
759
+ `pypi`. It started life as a **pending** publisher -- the flow for a
760
+ project with no releases yet -- and the first upload converted it into
761
+ an ordinary project-level one, so a fresh project is the only case that
762
+ needs the pending form again. Every field has to match the workflow
748
763
  exactly; a mismatch surfaces as a rejected credential at upload time,
749
764
  not when it is saved.
750
765
  2. A GitHub environment named `pypi`, in the repository settings. A
751
766
  required reviewer on it makes each publish a deliberate approval rather
752
767
  than a side effect of pushing a tag.
753
768
 
754
- Worth rehearsing on TestPyPI first: separate account, separate pending
755
- publisher, and `repository-url: https://test.pypi.org/legacy/` on the
756
- publish step. PyPI filenames are immutable, so a bad upload can only be
757
- yanked and superseded by a new version, never replaced.
769
+ PyPI filenames are immutable, so a bad upload can only be yanked and
770
+ superseded by a new version, never replaced -- worth rehearsing anything
771
+ unusual on TestPyPI first (separate account, separate pending publisher,
772
+ and `repository-url: https://test.pypi.org/legacy/` on the publish step).
758
773
 
759
774
  ## Design notes
760
775
 
@@ -94,9 +94,16 @@ def test_examples_pump_dispatch_before_draining_events() -> None:
94
94
  )
95
95
 
96
96
 
97
- def test_readme_install_command_is_not_a_broken_pypi_reference() -> None:
98
- # The package is not on PyPI; `pip install python-libei` fails.
99
- assert "pip install python-libei" not in _README.read_text()
97
+ def test_readme_documents_the_pypi_install() -> None:
98
+ # The package is on PyPI as of 0.1.0, so the plain install has to be
99
+ # the one a reader sees first. This guard used to assert the opposite;
100
+ # it is inverted rather than deleted so that dropping the PyPI
101
+ # instruction is a test failure, not a silent regression to a checkout.
102
+ readme = _README.read_text()
103
+ assert "pip install python-libei" in readme
104
+ assert readme.index("pip install python-libei") < readme.index(
105
+ "git clone https://github.com/ctrondlp/python-libei.git"
106
+ ), "the checkout install is documented before the PyPI one"
100
107
 
101
108
 
102
109
  def test_readme_only_references_real_public_api() -> None:
File without changes
File without changes