httpdbg 2.1.8__tar.gz → 2.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 (99) hide show
  1. {httpdbg-2.1.8 → httpdbg-2.2.1}/PKG-INFO +1 -1
  2. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/__init__.py +1 -1
  3. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/args.py +17 -4
  4. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/index.htm +8 -1
  5. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/render.js +8 -0
  6. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg.egg-info/PKG-INFO +1 -1
  7. httpdbg-2.2.1/tests/test_cli.py +32 -0
  8. httpdbg-2.1.8/tests/test_cli.py +0 -13
  9. {httpdbg-2.1.8 → httpdbg-2.2.1}/LICENSE +0 -0
  10. {httpdbg-2.1.8 → httpdbg-2.2.1}/README.md +0 -0
  11. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/__main__.py +0 -0
  12. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/env.py +0 -0
  13. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/exception.py +0 -0
  14. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/export.py +0 -0
  15. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/__init__.py +0 -0
  16. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/aiohttp.py +0 -0
  17. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/all.py +0 -0
  18. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/external.py +0 -0
  19. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/fastapi.py +0 -0
  20. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/flask.py +0 -0
  21. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/generic.py +0 -0
  22. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/h2.py +0 -0
  23. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/http.py +0 -0
  24. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/httpx.py +0 -0
  25. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/pytest.py +0 -0
  26. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/record.py +0 -0
  27. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/recordhttp1.py +0 -0
  28. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/recordhttp2.py +0 -0
  29. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/requests.py +0 -0
  30. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/socket.py +0 -0
  31. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/starlette.py +0 -0
  32. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/template_sitecustomize.py +0 -0
  33. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/unittest.py +0 -0
  34. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/urllib3.py +0 -0
  35. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/utils.py +0 -0
  36. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/hooks/uvicorn.py +0 -0
  37. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/http_status_code.py +0 -0
  38. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/initiator.py +0 -0
  39. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/log.py +0 -0
  40. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/mode_console.py +0 -0
  41. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/mode_module.py +0 -0
  42. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/mode_script.py +0 -0
  43. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/preview.py +0 -0
  44. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/records.py +0 -0
  45. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/server.py +0 -0
  46. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/utils.py +0 -0
  47. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/__init__.py +0 -0
  48. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/api.py +0 -0
  49. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/app.py +0 -0
  50. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/api.js +0 -0
  51. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/column.css +0 -0
  52. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/configuration.css +0 -0
  53. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/configuration.js +0 -0
  54. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/detail.css +0 -0
  55. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/favicon.ico +0 -0
  56. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/filter.js +0 -0
  57. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/chevron-direction-top-outline-icon.svg +0 -0
  58. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/download-install-line-icon.svg +0 -0
  59. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/engine-gears-icon.svg +0 -0
  60. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/eye-blind-icon.svg +0 -0
  61. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/eye-icon.svg +0 -0
  62. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/files-papers-outline-icon.svg +0 -0
  63. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/filter-outline-icon.svg +0 -0
  64. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/lock-line-icon.svg +0 -0
  65. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/lock-open-line-icon.svg +0 -0
  66. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/math-multiplication-icon.svg +0 -0
  67. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/push-pin-green-icon.svg +0 -0
  68. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/question-mark-round-line-icon.svg +0 -0
  69. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/recycle-bin-line-icon.svg +0 -0
  70. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/icons/wait-sandclock-icon.svg +0 -0
  71. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/main.js +0 -0
  72. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/mustache.min.js +0 -0
  73. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/style.css +0 -0
  74. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg/webapp/static/table.css +0 -0
  75. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg.egg-info/SOURCES.txt +0 -0
  76. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg.egg-info/dependency_links.txt +0 -0
  77. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg.egg-info/entry_points.txt +0 -0
  78. {httpdbg-2.1.8 → httpdbg-2.2.1}/httpdbg.egg-info/top_level.txt +0 -0
  79. {httpdbg-2.1.8 → httpdbg-2.2.1}/pyproject.toml +0 -0
  80. {httpdbg-2.1.8 → httpdbg-2.2.1}/setup.cfg +0 -0
  81. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_api.py +0 -0
  82. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_context_manager.py +0 -0
  83. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_hook_aiohttp.py +0 -0
  84. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_hook_h2.py +0 -0
  85. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_hook_httpx.py +0 -0
  86. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_hook_pytest.py +0 -0
  87. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_hook_requests.py +0 -0
  88. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_hook_unittest.py +0 -0
  89. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_hook_urllib3.py +0 -0
  90. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_initiator.py +0 -0
  91. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_mode_console.py +0 -0
  92. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_mode_module_pytest.py +0 -0
  93. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_mode_script.py +0 -0
  94. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_multiprocess.py +0 -0
  95. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_preview.py +0 -0
  96. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_pyhttpdbg_server.py +0 -0
  97. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_server.py +0 -0
  98. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_server_hook_fastapi.py +0 -0
  99. {httpdbg-2.1.8 → httpdbg-2.2.1}/tests/test_server_hook_flask.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: httpdbg
3
- Version: 2.1.8
3
+ Version: 2.2.1
4
4
  Summary: A very simple tool to debug HTTP(S) client and server requests.
5
5
  Author-email: cle-b <cle@tictac.pm>
6
6
  License-Expression: Apache-2.0
@@ -1,4 +1,4 @@
1
- __version__ = "2.1.8"
1
+ __version__ = "2.2.1"
2
2
 
3
3
  __all__ = ["export_html", "httprecord", "HTTPRecords"]
4
4
 
@@ -5,12 +5,25 @@ from httpdbg.log import LogLevel
5
5
 
6
6
 
7
7
  def read_args(args: list[str]) -> tuple[argparse.Namespace, list[str]]:
8
+ """
9
+ Parse the raw command-line arguments to separate the arguments intended
10
+ for httpdbg from those intended for the script or module being executed.
11
+
12
+ The httpdbg arguments are everything up to and including the selected
13
+ execution option (e.g. ``--script``, ``--module``, or ``-m``), while the
14
+ remaining arguments are passed to the target script or module.
15
+ """
8
16
  httpdbg_args = args
9
17
  client_args = []
10
- for action in ["--console", "--module", "-m", "--script"]:
11
- if action in args:
12
- httpdbg_args = args[: args.index(action) + 2]
13
- client_args = args[args.index(action) + 1 :]
18
+ for arg in args:
19
+ tostop = False
20
+ for action in ["--console", "--module", "-m", "--script"]:
21
+ if action == arg:
22
+ httpdbg_args = args[: args.index(action) + 2]
23
+ client_args = args[args.index(action) + 1 :]
24
+ tostop = True
25
+ break
26
+ if tostop:
14
27
  break
15
28
 
16
29
  parser = argparse.ArgumentParser(
@@ -299,7 +299,14 @@
299
299
  </div>
300
300
 
301
301
  <script id="template_headers" type="x-tmpl-mustache">
302
- <b>{{ method }}</b> <a href="{{ url }}">{{ url }}</a>
302
+ <button title="copy to clipboard" onclick="navigator.clipboard.writeText({{url_to_clipboard}});"><svg class="icon"><use href="#files-papers-outline-icon"></use></svg></button>
303
+ <span class="header-cookie-key">{{verb}}</span>
304
+ {{#is_http}}
305
+ <a class="header-cookie-value" target="_blank" href="{{url}}">{{url}}</a>
306
+ {{/is_http}}
307
+ {{^is_http}}
308
+ <span class="header-cookie-value" title="Warning: This URL uses a non-HTTP/HTTPS scheme and has been disabled for security reasons.">{{url}}</span>
309
+ {{/is_http}}
303
310
  <hr>
304
311
  <span class="header-cookie-key">status:</span>
305
312
  <span class="header-cookie-value">{{ status_code }} {{ reason }} {{#http100}}(after 100 Continue){{/http100}}</span>
@@ -156,6 +156,14 @@ function fill_content(request_id, name) {
156
156
 
157
157
  var req = global.requests[request_id];
158
158
 
159
+ try {
160
+ const parsed_url = new URL(req.url);
161
+ req.is_http = ["http:", "https:"].includes(parsed_url.protocol);
162
+ } catch {
163
+ req.is_http = false;
164
+ }
165
+ req.url_to_clipboard = "global.requests['" + request_id + "'].url";
166
+
159
167
  update_with_template("template_title", document.querySelector("#title > div[name='" + name + "']"), req);
160
168
 
161
169
  update_with_template("template_headers", document.querySelector("#headers > div[name='" + name + "']"), req);
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: httpdbg
3
- Version: 2.1.8
3
+ Version: 2.2.1
4
4
  Summary: A very simple tool to debug HTTP(S) client and server requests.
5
5
  Author-email: cle-b <cle@tictac.pm>
6
6
  License-Expression: Apache-2.0
@@ -0,0 +1,32 @@
1
+ import pytest
2
+
3
+ from httpdbg import __version__
4
+ from httpdbg.__main__ import pyhttpdbg_entry_point
5
+ from httpdbg.args import read_args
6
+
7
+
8
+ @pytest.mark.cli
9
+ def test_cli_version(monkeypatch, capsys):
10
+ monkeypatch.setattr("sys.argv", ["pyhttpdb", "--version"])
11
+
12
+ pyhttpdbg_entry_point(test_mode=True)
13
+
14
+ assert __version__ in capsys.readouterr().out.strip()
15
+
16
+
17
+ @pytest.mark.cli
18
+ def test_read_args_split_httpdbg_and_script_args():
19
+ """Split httpdbg arguments from the arguments passed to the script/module."""
20
+ httpdbg_args_parsed, client_args = read_args(
21
+ ["--port", "345", "--script", "demo.py", "--script", "xyz"]
22
+ )
23
+ assert httpdbg_args_parsed.port == 345
24
+ assert httpdbg_args_parsed.script == "demo.py"
25
+ assert client_args == ["demo.py", "--script", "xyz"]
26
+
27
+
28
+ @pytest.mark.cli
29
+ def test_read_args_split_httpdbg_and_script_args_same_args():
30
+ """Allow script/module arguments to reuse httpdbg command-line same options."""
31
+ read_args(["--script", "demo.py", "--script", "xyz"])
32
+ read_args(["--script", "demo.py", "-m", "xyz"])
@@ -1,13 +0,0 @@
1
- import pytest
2
-
3
- from httpdbg import __version__
4
- from httpdbg.__main__ import pyhttpdbg_entry_point
5
-
6
-
7
- @pytest.mark.cli
8
- def test_cli_version(monkeypatch, capsys):
9
- monkeypatch.setattr("sys.argv", ["pyhttpdb", "--version"])
10
-
11
- pyhttpdbg_entry_point(test_mode=True)
12
-
13
- assert __version__ in capsys.readouterr().out.strip()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes