fetchnode 0.4.2__tar.gz → 0.4.3__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 (41) hide show
  1. fetchnode-0.4.3/CHANGELOG.md +36 -0
  2. {fetchnode-0.4.2 → fetchnode-0.4.3}/PKG-INFO +61 -14
  3. {fetchnode-0.4.2 → fetchnode-0.4.3}/README.md +57 -10
  4. {fetchnode-0.4.2 → fetchnode-0.4.3}/pyproject.toml +5 -4
  5. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/apps.py +6 -2
  6. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/conf.py +1 -1
  7. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/version.py +1 -1
  8. fetchnode-0.4.3/src/fetchnode_client/apps.py +5 -0
  9. fetchnode-0.4.2/src/fetchnode_client/apps.py +0 -2
  10. {fetchnode-0.4.2 → fetchnode-0.4.3}/.gitignore +0 -0
  11. {fetchnode-0.4.2 → fetchnode-0.4.3}/LICENSE +0 -0
  12. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/__init__.py +0 -0
  13. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/api.py +0 -0
  14. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/capture.py +0 -0
  15. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/celery.py +0 -0
  16. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/demo.py +0 -0
  17. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/excepthook.py +0 -0
  18. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/handlers.py +0 -0
  19. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/middleware.py +0 -0
  20. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/py.typed +0 -0
  21. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/query.py +0 -0
  22. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/scope.py +0 -0
  23. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/scrub.py +0 -0
  24. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/sender.py +0 -0
  25. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode/utils.py +0 -0
  26. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/__init__.py +0 -0
  27. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/api.py +0 -0
  28. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/capture.py +0 -0
  29. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/celery.py +0 -0
  30. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/conf.py +0 -0
  31. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/demo.py +0 -0
  32. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/excepthook.py +0 -0
  33. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/handlers.py +0 -0
  34. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/middleware.py +0 -0
  35. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/py.typed +0 -0
  36. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/query.py +0 -0
  37. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/scope.py +0 -0
  38. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/scrub.py +0 -0
  39. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/sender.py +0 -0
  40. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/utils.py +0 -0
  41. {fetchnode-0.4.2 → fetchnode-0.4.3}/src/fetchnode_client/version.py +0 -0
@@ -0,0 +1,36 @@
1
+ # FetchNode SDK changelog
2
+
3
+ ## 0.4.3 — 2026-09-29
4
+
5
+ ### Fixed
6
+
7
+ - Use `https://fetch-node.com/api/events/ingest/` as the default ingest endpoint.
8
+ - Let Django automatically discover the SDK AppConfig when `fetchnode` is in
9
+ `INSTALLED_APPS`, so startup installs logging and enabled instrumentation.
10
+ - Preserve automatic AppConfig discovery for the legacy `fetchnode_client` name.
11
+ - Correct the documentation URLs to the active FetchNode website.
12
+
13
+ ### Documentation
14
+
15
+ - Configure the private server key through `FETCHNODE_API_KEY` and supply an
16
+ explicit ingest URL. Keep private keys out of browser code and source control.
17
+ - Show explicit server conversion declarations and non-personal event properties.
18
+ - Verify reception after restarting or redeploying Django.
19
+
20
+ ### Release checks
21
+
22
+ - Test the installed wheel outside the repository, including Django AppConfig and
23
+ automatic logging setup.
24
+ - Exercise requests, exceptions, error logs and idempotent conversions against a
25
+ local FetchNode collector, with project isolation checks.
26
+ - Check distribution metadata and the release tag before uploading to PyPI.
27
+
28
+ ### Upgrade
29
+
30
+ ```bash
31
+ python -m pip install --upgrade fetchnode==0.4.3
32
+ ```
33
+
34
+ Update your dependency file or lockfile, restart or redeploy Django, and verify a
35
+ request and test error in FetchNode. Existing installations can set `API_URL`
36
+ explicitly if they use their own collector.
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: fetchnode
3
- Version: 0.4.2
3
+ Version: 0.4.3
4
4
  Summary: Official Django and Python client SDK for FetchNode monitoring
5
- Project-URL: Homepage, https://fetchnode.com
6
- Project-URL: Documentation, https://fetchnode.com/guide/
5
+ Project-URL: Homepage, https://fetch-node.com
6
+ Project-URL: Documentation, https://fetch-node.com/guide/
7
7
  Project-URL: Repository, https://github.com/remcovanwijk040/fetchnode
8
8
  Project-URL: Issues, https://github.com/remcovanwijk040/fetchnode/issues
9
- Project-URL: Changelog, https://fetchnode.com/changelog/
9
+ Project-URL: Changelog, https://pypi.org/project/fetchnode/0.4.3/#sdk-changelog
10
10
  Author-email: Remco van Wijk <remcovanwijk040@users.noreply.github.com>
11
11
  License-Expression: MIT
12
12
  License-File: LICENSE
@@ -43,7 +43,7 @@ Description-Content-Type: text/markdown
43
43
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
44
44
  [![Typing: Typed](https://img.shields.io/badge/typing-typed-green.svg)](https://peps.python.org/pep-0561/)
45
45
 
46
- Official Python and Django client SDK for [FetchNode](https://fetchnode.com) — the focused operations workspace for developers and teams managing multiple production Django websites.
46
+ Official Python and Django client SDK for [FetchNode](https://fetch-node.com) — the focused operations workspace for developers and teams managing multiple production Django websites.
47
47
 
48
48
  FetchNode captures unhandled exceptions, error logs, slow database queries, N+1 query patterns, Celery background tasks, and authoritative business conversions with zero bloat and privacy-safe defaults.
49
49
 
@@ -70,6 +70,10 @@ FetchNode captures unhandled exceptions, error logs, slow database queries, N+1
70
70
 
71
71
  ## Installation
72
72
 
73
+ Version 0.4.3 fixes the default ingest endpoint and Django startup discovery for
74
+ automatic logging. See the [SDK changelog](#sdk-changelog)
75
+ for changes and upgrade instructions.
76
+
73
77
  Install via `pip`:
74
78
 
75
79
  ```bash
@@ -114,13 +118,18 @@ MIDDLEWARE = [
114
118
  ### 3. Configure `settings.FETCHNODE`
115
119
 
116
120
  ```python
121
+ import os
122
+
117
123
  FETCHNODE = {
118
- "API_KEY": "fn_live_your_project_key_here",
124
+ "API_KEY": os.environ.get("FETCHNODE_API_KEY", ""),
125
+ "API_URL": "https://fetch-node.com/api/events/ingest/",
119
126
  "ENVIRONMENT": "production", # e.g. "production", "staging"
120
127
  }
121
128
  ```
122
129
 
123
- That's it! Django will automatically initialize FetchNode upon startup and capture unhandled exceptions, slow queries, and request telemetry.
130
+ Set `FETCHNODE_API_KEY` to your private server key in the deployment environment. Keep it out of source control and browser code. Restart or redeploy Django, then verify a request and test error in FetchNode.
131
+
132
+ Django will automatically initialize FetchNode upon startup and capture unhandled exceptions, slow queries, and request telemetry.
124
133
 
125
134
  ---
126
135
 
@@ -130,8 +139,8 @@ Configure via `settings.FETCHNODE` or environment variables:
130
139
 
131
140
  | Setting Key | Environment Variable | Default | Description |
132
141
  | :--- | :--- | :--- | :--- |
133
- | `API_KEY` | `FETCHNODE_API_KEY` | `""` | **Required.** Your FetchNode project key (starts with `fn_live_` or `fn_test_`). |
134
- | `ENDPOINT` / `API_URL` | `FETCHNODE_ENDPOINT` | `https://monitor.fetchnode.com/api/events/ingest/` | Processing server URL. Point to your self-hosted instance if applicable. |
142
+ | `API_KEY` | `FETCHNODE_API_KEY` | `""` | **Required.** Your private server key from project settings. Never use a public browser key here. |
143
+ | `ENDPOINT` / `API_URL` | `FETCHNODE_ENDPOINT` | `https://fetch-node.com/api/events/ingest/` | Processing server URL. Point to your self-hosted instance if applicable. |
135
144
  | `ENVIRONMENT` | `FETCHNODE_ENVIRONMENT` | `"development"` | Active environment name (`"production"`, `"staging"`). |
136
145
  | `RELEASE` | `FETCHNODE_RELEASE` | `""` | Release tag or git commit hash (e.g. `git rev-parse HEAD`). |
137
146
  | `ENABLED` | `FETCHNODE_ENABLED` | `True` if API_KEY present | Master toggle for event sending. |
@@ -163,8 +172,8 @@ def contact_view(request):
163
172
  "lead_submitted",
164
173
  request=request,
165
174
  idempotency_key=f"lead:{lead.id}",
166
- properties={"email": lead.email},
167
- conversion=True,
175
+ properties={"source": "contact_form"},
176
+ conversion={"display_name": "Lead submitted", "funnel_order": 1, "primary": True},
168
177
  )
169
178
  return redirect("thank_you")
170
179
  ```
@@ -271,9 +280,9 @@ fetchnode.flush()
271
280
 
272
281
  ## Links & Resources
273
282
 
274
- - **Website & Cloud App:** [fetchnode.com](https://fetchnode.com)
275
- - **Documentation & Setup Guide:** [fetchnode.com/guide/](https://fetchnode.com/guide/)
276
- - **Changelog:** [fetchnode.com/changelog/](https://fetchnode.com/changelog/)
283
+ - **Website & Cloud App:** [fetchnode.com](https://fetch-node.com)
284
+ - **Documentation & Setup Guide:** [fetchnode.com/guide/](https://fetch-node.com/guide/)
285
+ - **Changelog:** [fetchnode.com/changelog/](https://fetch-node.com/changelog/)
277
286
  - **GitHub Repository:** [github.com/remcovanwijk040/fetchnode](https://github.com/remcovanwijk040/fetchnode)
278
287
  - **Issue Tracker:** [github.com/remcovanwijk040/fetchnode/issues](https://github.com/remcovanwijk040/fetchnode/issues)
279
288
 
@@ -282,3 +291,41 @@ fetchnode.flush()
282
291
  ## License
283
292
 
284
293
  MIT License. See [LICENSE](LICENSE) for details.
294
+
295
+
296
+ # SDK changelog
297
+
298
+ ## 0.4.3 — 2026-09-29
299
+
300
+ ### Fixed
301
+
302
+ - Use `https://fetch-node.com/api/events/ingest/` as the default ingest endpoint.
303
+ - Let Django automatically discover the SDK AppConfig when `fetchnode` is in
304
+ `INSTALLED_APPS`, so startup installs logging and enabled instrumentation.
305
+ - Preserve automatic AppConfig discovery for the legacy `fetchnode_client` name.
306
+ - Correct the documentation URLs to the active FetchNode website.
307
+
308
+ ### Documentation
309
+
310
+ - Configure the private server key through `FETCHNODE_API_KEY` and supply an
311
+ explicit ingest URL. Keep private keys out of browser code and source control.
312
+ - Show explicit server conversion declarations and non-personal event properties.
313
+ - Verify reception after restarting or redeploying Django.
314
+
315
+ ### Release checks
316
+
317
+ - Test the installed wheel outside the repository, including Django AppConfig and
318
+ automatic logging setup.
319
+ - Exercise requests, exceptions, error logs and idempotent conversions against a
320
+ local FetchNode collector, with project isolation checks.
321
+ - Check distribution metadata and the release tag before uploading to PyPI.
322
+
323
+ ### Upgrade
324
+
325
+ ```bash
326
+ python -m pip install --upgrade fetchnode==0.4.3
327
+ ```
328
+
329
+ Update your dependency file or lockfile, restart or redeploy Django, and verify a
330
+ request and test error in FetchNode. Existing installations can set `API_URL`
331
+ explicitly if they use their own collector.
@@ -6,7 +6,7 @@
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
7
  [![Typing: Typed](https://img.shields.io/badge/typing-typed-green.svg)](https://peps.python.org/pep-0561/)
8
8
 
9
- Official Python and Django client SDK for [FetchNode](https://fetchnode.com) — the focused operations workspace for developers and teams managing multiple production Django websites.
9
+ Official Python and Django client SDK for [FetchNode](https://fetch-node.com) — the focused operations workspace for developers and teams managing multiple production Django websites.
10
10
 
11
11
  FetchNode captures unhandled exceptions, error logs, slow database queries, N+1 query patterns, Celery background tasks, and authoritative business conversions with zero bloat and privacy-safe defaults.
12
12
 
@@ -33,6 +33,10 @@ FetchNode captures unhandled exceptions, error logs, slow database queries, N+1
33
33
 
34
34
  ## Installation
35
35
 
36
+ Version 0.4.3 fixes the default ingest endpoint and Django startup discovery for
37
+ automatic logging. See the [SDK changelog](#sdk-changelog)
38
+ for changes and upgrade instructions.
39
+
36
40
  Install via `pip`:
37
41
 
38
42
  ```bash
@@ -77,13 +81,18 @@ MIDDLEWARE = [
77
81
  ### 3. Configure `settings.FETCHNODE`
78
82
 
79
83
  ```python
84
+ import os
85
+
80
86
  FETCHNODE = {
81
- "API_KEY": "fn_live_your_project_key_here",
87
+ "API_KEY": os.environ.get("FETCHNODE_API_KEY", ""),
88
+ "API_URL": "https://fetch-node.com/api/events/ingest/",
82
89
  "ENVIRONMENT": "production", # e.g. "production", "staging"
83
90
  }
84
91
  ```
85
92
 
86
- That's it! Django will automatically initialize FetchNode upon startup and capture unhandled exceptions, slow queries, and request telemetry.
93
+ Set `FETCHNODE_API_KEY` to your private server key in the deployment environment. Keep it out of source control and browser code. Restart or redeploy Django, then verify a request and test error in FetchNode.
94
+
95
+ Django will automatically initialize FetchNode upon startup and capture unhandled exceptions, slow queries, and request telemetry.
87
96
 
88
97
  ---
89
98
 
@@ -93,8 +102,8 @@ Configure via `settings.FETCHNODE` or environment variables:
93
102
 
94
103
  | Setting Key | Environment Variable | Default | Description |
95
104
  | :--- | :--- | :--- | :--- |
96
- | `API_KEY` | `FETCHNODE_API_KEY` | `""` | **Required.** Your FetchNode project key (starts with `fn_live_` or `fn_test_`). |
97
- | `ENDPOINT` / `API_URL` | `FETCHNODE_ENDPOINT` | `https://monitor.fetchnode.com/api/events/ingest/` | Processing server URL. Point to your self-hosted instance if applicable. |
105
+ | `API_KEY` | `FETCHNODE_API_KEY` | `""` | **Required.** Your private server key from project settings. Never use a public browser key here. |
106
+ | `ENDPOINT` / `API_URL` | `FETCHNODE_ENDPOINT` | `https://fetch-node.com/api/events/ingest/` | Processing server URL. Point to your self-hosted instance if applicable. |
98
107
  | `ENVIRONMENT` | `FETCHNODE_ENVIRONMENT` | `"development"` | Active environment name (`"production"`, `"staging"`). |
99
108
  | `RELEASE` | `FETCHNODE_RELEASE` | `""` | Release tag or git commit hash (e.g. `git rev-parse HEAD`). |
100
109
  | `ENABLED` | `FETCHNODE_ENABLED` | `True` if API_KEY present | Master toggle for event sending. |
@@ -126,8 +135,8 @@ def contact_view(request):
126
135
  "lead_submitted",
127
136
  request=request,
128
137
  idempotency_key=f"lead:{lead.id}",
129
- properties={"email": lead.email},
130
- conversion=True,
138
+ properties={"source": "contact_form"},
139
+ conversion={"display_name": "Lead submitted", "funnel_order": 1, "primary": True},
131
140
  )
132
141
  return redirect("thank_you")
133
142
  ```
@@ -234,9 +243,9 @@ fetchnode.flush()
234
243
 
235
244
  ## Links & Resources
236
245
 
237
- - **Website & Cloud App:** [fetchnode.com](https://fetchnode.com)
238
- - **Documentation & Setup Guide:** [fetchnode.com/guide/](https://fetchnode.com/guide/)
239
- - **Changelog:** [fetchnode.com/changelog/](https://fetchnode.com/changelog/)
246
+ - **Website & Cloud App:** [fetchnode.com](https://fetch-node.com)
247
+ - **Documentation & Setup Guide:** [fetchnode.com/guide/](https://fetch-node.com/guide/)
248
+ - **Changelog:** [fetchnode.com/changelog/](https://fetch-node.com/changelog/)
240
249
  - **GitHub Repository:** [github.com/remcovanwijk040/fetchnode](https://github.com/remcovanwijk040/fetchnode)
241
250
  - **Issue Tracker:** [github.com/remcovanwijk040/fetchnode/issues](https://github.com/remcovanwijk040/fetchnode/issues)
242
251
 
@@ -245,3 +254,41 @@ fetchnode.flush()
245
254
  ## License
246
255
 
247
256
  MIT License. See [LICENSE](LICENSE) for details.
257
+
258
+
259
+ # SDK changelog
260
+
261
+ ## 0.4.3 — 2026-09-29
262
+
263
+ ### Fixed
264
+
265
+ - Use `https://fetch-node.com/api/events/ingest/` as the default ingest endpoint.
266
+ - Let Django automatically discover the SDK AppConfig when `fetchnode` is in
267
+ `INSTALLED_APPS`, so startup installs logging and enabled instrumentation.
268
+ - Preserve automatic AppConfig discovery for the legacy `fetchnode_client` name.
269
+ - Correct the documentation URLs to the active FetchNode website.
270
+
271
+ ### Documentation
272
+
273
+ - Configure the private server key through `FETCHNODE_API_KEY` and supply an
274
+ explicit ingest URL. Keep private keys out of browser code and source control.
275
+ - Show explicit server conversion declarations and non-personal event properties.
276
+ - Verify reception after restarting or redeploying Django.
277
+
278
+ ### Release checks
279
+
280
+ - Test the installed wheel outside the repository, including Django AppConfig and
281
+ automatic logging setup.
282
+ - Exercise requests, exceptions, error logs and idempotent conversions against a
283
+ local FetchNode collector, with project isolation checks.
284
+ - Check distribution metadata and the release tag before uploading to PyPI.
285
+
286
+ ### Upgrade
287
+
288
+ ```bash
289
+ python -m pip install --upgrade fetchnode==0.4.3
290
+ ```
291
+
292
+ Update your dependency file or lockfile, restart or redeploy Django, and verify a
293
+ request and test error in FetchNode. Existing installations can set `API_URL`
294
+ explicitly if they use their own collector.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "fetchnode"
7
- version = "0.4.2"
7
+ version = "0.4.3"
8
8
  description = "Official Django and Python client SDK for FetchNode monitoring"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -43,11 +43,11 @@ celery = [
43
43
  ]
44
44
 
45
45
  [project.urls]
46
- Homepage = "https://fetchnode.com"
47
- Documentation = "https://fetchnode.com/guide/"
46
+ Homepage = "https://fetch-node.com"
47
+ Documentation = "https://fetch-node.com/guide/"
48
48
  Repository = "https://github.com/remcovanwijk040/fetchnode"
49
49
  Issues = "https://github.com/remcovanwijk040/fetchnode/issues"
50
- Changelog = "https://fetchnode.com/changelog/"
50
+ Changelog = "https://pypi.org/project/fetchnode/0.4.3/#sdk-changelog"
51
51
 
52
52
  [tool.hatch.build.targets.wheel]
53
53
  packages = ["src/fetchnode", "src/fetchnode_client"]
@@ -56,6 +56,7 @@ packages = ["src/fetchnode", "src/fetchnode_client"]
56
56
  include = [
57
57
  "/src",
58
58
  "/README.md",
59
+ "/CHANGELOG.md",
59
60
  "/LICENSE",
60
61
  "/pyproject.toml",
61
62
  ]
@@ -34,5 +34,9 @@ class FetchNodeConfig(AppConfig):
34
34
  install_excepthook_instrumentation()
35
35
 
36
36
 
37
- # Backwards compatibility alias
38
- FetchNodeClientConfig = FetchNodeConfig
37
+ def __getattr__(name):
38
+ # Keep explicit legacy imports working without exposing a second AppConfig
39
+ # candidate to Django's automatic application discovery.
40
+ if name == "FetchNodeClientConfig":
41
+ return FetchNodeConfig
42
+ raise AttributeError(name)
@@ -4,7 +4,7 @@ from django.conf import settings
4
4
 
5
5
  DEFAULTS = {
6
6
  "ENABLED": False,
7
- "API_URL": "https://monitor.fetchnode.com/api/events/ingest/",
7
+ "API_URL": "https://fetch-node.com/api/events/ingest/",
8
8
  "API_KEY": "",
9
9
  "ENVIRONMENT": "development",
10
10
  "RELEASE": "",
@@ -1,3 +1,3 @@
1
1
  """FetchNode Python SDK version shared by package metadata and telemetry."""
2
2
 
3
- SDK_VERSION = "0.4.2"
3
+ SDK_VERSION = "0.4.3"
@@ -0,0 +1,5 @@
1
+ from fetchnode import apps as _primary_apps
2
+
3
+
4
+ class FetchNodeClientConfig(_primary_apps.FetchNodeConfig):
5
+ name = "fetchnode_client"
@@ -1,2 +0,0 @@
1
- from fetchnode.apps import *
2
- from fetchnode.apps import FetchNodeClientConfig
File without changes
File without changes