featureflip 2.4.0__tar.gz → 2.4.2__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 (42) hide show
  1. {featureflip-2.4.0 → featureflip-2.4.2}/CHANGELOG.md +14 -0
  2. {featureflip-2.4.0 → featureflip-2.4.2}/LICENSE +15 -3
  3. {featureflip-2.4.0 → featureflip-2.4.2}/PKG-INFO +2 -2
  4. {featureflip-2.4.0 → featureflip-2.4.2}/README.md +1 -1
  5. {featureflip-2.4.0 → featureflip-2.4.2}/pyproject.toml +1 -1
  6. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/__init__.py +1 -2
  7. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/_http.py +2 -1
  8. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/_streaming.py +2 -1
  9. featureflip-2.4.2/src/featureflip/_version.py +24 -0
  10. {featureflip-2.4.0 → featureflip-2.4.2}/.gitignore +0 -0
  11. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/_core.py +0 -0
  12. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/_events.py +0 -0
  13. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/_polling.py +0 -0
  14. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/_semver.py +0 -0
  15. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/client.py +0 -0
  16. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/config.py +0 -0
  17. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/context.py +0 -0
  18. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/detail.py +0 -0
  19. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/evaluation.py +0 -0
  20. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/exceptions.py +0 -0
  21. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/inspector.py +0 -0
  22. {featureflip-2.4.0 → featureflip-2.4.2}/src/featureflip/models.py +0 -0
  23. {featureflip-2.4.0 → featureflip-2.4.2}/tests/__init__.py +0 -0
  24. {featureflip-2.4.0 → featureflip-2.4.2}/tests/golden/vectors.json +0 -0
  25. {featureflip-2.4.0 → featureflip-2.4.2}/tests/integration/__init__.py +0 -0
  26. {featureflip-2.4.0 → featureflip-2.4.2}/tests/integration/test_api.py +0 -0
  27. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_client.py +0 -0
  28. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_config.py +0 -0
  29. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_context.py +0 -0
  30. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_core.py +0 -0
  31. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_detail.py +0 -0
  32. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_evaluation.py +0 -0
  33. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_events.py +0 -0
  34. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_exceptions.py +0 -0
  35. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_factory.py +0 -0
  36. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_golden.py +0 -0
  37. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_http.py +0 -0
  38. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_inspector.py +0 -0
  39. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_models.py +0 -0
  40. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_polling.py +0 -0
  41. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_semver.py +0 -0
  42. {featureflip-2.4.0 → featureflip-2.4.2}/tests/test_streaming.py +0 -0
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.4.2 — 2026-08-05
4
+
5
+ ### Fixed
6
+
7
+ - `LICENSE` is now the verbatim Apache-2.0 text. Three phrases in the operative sections had been reworded and the appendix dropped, which left automated license scanners unable to identify it. The license itself is unchanged; the file now says what it always claimed to.
8
+ - The README's License section said MIT. `LICENSE`, `pyproject.toml` and the PyPI listing have always said Apache-2.0, which is the actual license.
9
+
10
+ ## 2.4.1 — 2026-08-02
11
+
12
+ ### Fixed
13
+
14
+ - The `User-Agent` reports the SDK's real version, read from the installed package metadata rather than a hardcoded literal. It had been pinned to `0.1.0` since the first release, so every request from a 2.x client identified itself as pre-1.0 (#2141).
15
+ - `featureflip.__version__` reports the real version too. It had been stuck at `2.0.0`.
16
+
3
17
  ## 2.4.0 — 2026-07-29
4
18
 
5
19
  ### Added
@@ -1,3 +1,4 @@
1
+
1
2
  Apache License
2
3
  Version 2.0, January 2004
3
4
  http://www.apache.org/licenses/
@@ -48,7 +49,7 @@
48
49
  "Contribution" shall mean any work of authorship, including
49
50
  the original version of the Work and any modifications or additions
50
51
  to that Work or Derivative Works thereof, that is intentionally
51
- submitted to the Licensor for inclusion in the Work by the copyright owner
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
53
  or by an individual or Legal Entity authorized to submit on behalf of
53
54
  the copyright owner. For the purposes of this definition, "submitted"
54
55
  means any form of electronic, verbal, or written communication sent
@@ -60,7 +61,7 @@
60
61
  designated in writing by the copyright owner as "Not a Contribution."
61
62
 
62
63
  "Contributor" shall mean Licensor and any individual or Legal Entity
63
- on behalf of whom a Contribution has been received by the Licensor and
64
+ on behalf of whom a Contribution has been received by Licensor and
64
65
  subsequently incorporated within the Work.
65
66
 
66
67
  2. Grant of Copyright License. Subject to the terms and conditions of
@@ -106,7 +107,7 @@
106
107
  (d) If the Work includes a "NOTICE" text file as part of its
107
108
  distribution, then any Derivative Works that You distribute must
108
109
  include a readable copy of the attribution notices contained
109
- within such NOTICE file, excluding any notices that do not
110
+ within such NOTICE file, excluding those notices that do not
110
111
  pertain to any part of the Derivative Works, in at least one
111
112
  of the following places: within a NOTICE text file distributed
112
113
  as part of the Derivative Works; within the Source form or
@@ -175,6 +176,17 @@
175
176
 
176
177
  END OF TERMS AND CONDITIONS
177
178
 
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
178
190
  Copyright 2026 Canopy Labs LLC
179
191
 
180
192
  Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: featureflip
3
- Version: 2.4.0
3
+ Version: 2.4.2
4
4
  Summary: Python SDK for Featureflip - a feature flag SaaS platform
5
5
  Project-URL: Homepage, https://featureflip.io
6
6
  Project-URL: Documentation, https://featureflip.io/docs/sdks/python/
@@ -183,4 +183,4 @@ mypy src/featureflip --strict
183
183
 
184
184
  ## License
185
185
 
186
- MIT
186
+ Apache-2.0
@@ -151,4 +151,4 @@ mypy src/featureflip --strict
151
151
 
152
152
  ## License
153
153
 
154
- MIT
154
+ Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "featureflip"
7
- version = "2.4.0"
7
+ version = "2.4.2"
8
8
  description = "Python SDK for Featureflip - a feature flag SaaS platform"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -1,7 +1,6 @@
1
1
  """Featureflip Python SDK."""
2
2
 
3
- __version__ = "2.0.0"
4
-
3
+ from featureflip._version import __version__
5
4
  from featureflip.client import FeatureflipClient
6
5
  from featureflip.config import Config
7
6
  from featureflip.context import EvaluationContext
@@ -7,6 +7,7 @@ from typing import TYPE_CHECKING, Any
7
7
  import httpx
8
8
  import structlog
9
9
 
10
+ from featureflip._version import USER_AGENT
10
11
  from featureflip.models import (
11
12
  Condition,
12
13
  ConditionGroup,
@@ -51,7 +52,7 @@ class HttpClient:
51
52
  ),
52
53
  headers={
53
54
  "Authorization": sdk_key,
54
- "User-Agent": "featureflip-python/0.1.0",
55
+ "User-Agent": USER_AGENT,
55
56
  },
56
57
  )
57
58
 
@@ -12,6 +12,7 @@ import structlog
12
12
  from httpx_sse import connect_sse
13
13
 
14
14
  from featureflip._polling import PollingHandler
15
+ from featureflip._version import USER_AGENT
15
16
 
16
17
  if TYPE_CHECKING:
17
18
  from collections.abc import Callable
@@ -246,7 +247,7 @@ class StreamingHandler:
246
247
  """
247
248
  return {
248
249
  "Authorization": self._sdk_key,
249
- "User-Agent": "featureflip-python/0.1.0",
250
+ "User-Agent": USER_AGENT,
250
251
  "Accept": "text/event-stream",
251
252
  }
252
253
 
@@ -0,0 +1,24 @@
1
+ """Single source of the SDK's version.
2
+
3
+ Read from the installed distribution's metadata rather than hardcoded, because
4
+ ``publish-python-sdk.yml`` sets the release version by ``sed``-ing
5
+ ``pyproject.toml`` and nothing else. A literal here would be correct only until
6
+ the next release, which is exactly how the User-Agent came to advertise 0.1.0
7
+ from a 2.4.x SDK (#2141).
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from importlib.metadata import PackageNotFoundError
13
+ from importlib.metadata import version as _distribution_version
14
+
15
+ try:
16
+ __version__ = _distribution_version("featureflip")
17
+ except PackageNotFoundError: # pragma: no cover - source tree without an install
18
+ # Running straight from src/ (e.g. PYTHONPATH=src) with no dist-info to read.
19
+ # Report it plainly instead of guessing a number that could be wrong.
20
+ __version__ = "0.0.0+unknown"
21
+
22
+ USER_AGENT = f"featureflip-python/{__version__}"
23
+
24
+ __all__ = ["USER_AGENT", "__version__"]
File without changes