pdfdancer-client-python 0.2.24__tar.gz → 0.2.26__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 (76) hide show
  1. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/.github/workflows/ci.yml +1 -0
  2. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/.github/workflows/daily-tests.yml +2 -1
  3. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/PKG-INFO +7 -6
  4. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/README.md +6 -5
  5. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/docs/openapi.yml +1766 -758
  6. pdfdancer_client_python-0.2.26/media/logo-orange-512h.webp +0 -0
  7. pdfdancer_client_python-0.2.26/media/logo-orange-60h.webp +0 -0
  8. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/pyproject.toml +1 -1
  9. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer/__init__.py +2 -0
  10. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer/models.py +47 -0
  11. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer/pdfdancer_v1.py +28 -0
  12. pdfdancer_client_python-0.2.26/src/pdfdancer/text_line_builder.py +290 -0
  13. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer/types.py +54 -7
  14. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer_client_python.egg-info/PKG-INFO +7 -6
  15. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer_client_python.egg-info/SOURCES.txt +4 -0
  16. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/pdf_assertions.py +3 -1
  17. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_context_manager.py +1 -1
  18. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_page.py +1 -1
  19. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_paragraph.py +11 -7
  20. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_singular_selection.py +4 -2
  21. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_snapshot.py +1 -1
  22. pdfdancer_client_python-0.2.26/tests/e2e/test_text_line_edit.py +298 -0
  23. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/test_rate_limit.py +1 -1
  24. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/.claude/commands/discuss.md +0 -0
  25. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/.flake8 +0 -0
  26. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/.gitignore +0 -0
  27. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/CLAUDE.md +0 -0
  28. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/LICENSE +0 -0
  29. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/NOTICE +0 -0
  30. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/TODO.md +0 -0
  31. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/check.py +0 -0
  32. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/release.py +0 -0
  33. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/setup.cfg +0 -0
  34. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer/exceptions.py +0 -0
  35. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer/fingerprint.py +0 -0
  36. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer/image_builder.py +0 -0
  37. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer/page_builder.py +0 -0
  38. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer/paragraph_builder.py +0 -0
  39. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer/path_builder.py +0 -0
  40. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer_client_python.egg-info/dependency_links.txt +0 -0
  41. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer_client_python.egg-info/requires.txt +0 -0
  42. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/src/pdfdancer_client_python.egg-info/top_level.txt +0 -0
  43. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/test.sh +0 -0
  44. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/__init__.py +0 -0
  45. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/conftest.py +0 -0
  46. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/__init__.py +0 -0
  47. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_acroform.py +0 -0
  48. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_bezier_builder.py +0 -0
  49. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_form_x_objects.py +0 -0
  50. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_image.py +0 -0
  51. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_line.py +0 -0
  52. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_line_builder.py +0 -0
  53. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_new_pdf.py +0 -0
  54. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_path.py +0 -0
  55. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_path_builder.py +0 -0
  56. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_path_builder_rectangle.py +0 -0
  57. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_path_comprehensive.py +0 -0
  58. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_pdfdancer.py +0 -0
  59. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_positioning.py +0 -0
  60. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/e2e/test_rectangle_builder.py +0 -0
  61. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/fixtures/DancingScript-Regular.ttf +0 -0
  62. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/fixtures/Empty.pdf +0 -0
  63. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/fixtures/JetBrainsMono-Regular.ttf +0 -0
  64. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/fixtures/Showcase.pdf +0 -0
  65. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/fixtures/basic-paths.pdf +0 -0
  66. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/fixtures/form-xobject-example.pdf +0 -0
  67. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/fixtures/logo-80.png +0 -0
  68. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/fixtures/mixed-form-types.pdf +0 -0
  69. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/test_anonymous_token.py +0 -0
  70. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/test_fingerprint.py +0 -0
  71. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/test_models.py +0 -0
  72. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/test_openapi_compliance.py +0 -0
  73. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/test_path_models.py +0 -0
  74. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/test_pdf_object_equality.py +0 -0
  75. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/tests/test_standard_fonts.py +0 -0
  76. {pdfdancer_client_python-0.2.24 → pdfdancer_client_python-0.2.26}/update-api-spec.sh +0 -0
@@ -14,6 +14,7 @@ jobs:
14
14
  runs-on: ubuntu-latest
15
15
  strategy:
16
16
  fail-fast: false
17
+ max-parallel: 4
17
18
  matrix:
18
19
  python-version: [ '3.12' ]
19
20
 
@@ -3,7 +3,7 @@ name: Daily Tests
3
3
  on:
4
4
  schedule:
5
5
  # Run daily at 9:00 PM UTC
6
- - cron: '0 21 * * *'
6
+ - cron: '40 10 * * *'
7
7
  workflow_dispatch: # Allow manual triggering
8
8
 
9
9
  jobs:
@@ -11,6 +11,7 @@ jobs:
11
11
  runs-on: ${{ matrix.os }}
12
12
  strategy:
13
13
  fail-fast: false
14
+ max-parallel: 4
14
15
  matrix:
15
16
  os: [ ubuntu-latest, windows-latest ]
16
17
  python-version: [ '3.10', '3.11', '3.12', '3.13' ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pdfdancer-client-python
3
- Version: 0.2.24
3
+ Version: 0.2.26
4
4
  Summary: Python client for PDFDancer API
5
5
  Author-email: "The Famous Cat Ltd." <hi@thefamouscat.com>
6
6
  License:
@@ -239,11 +239,12 @@ Dynamic: license-file
239
239
 
240
240
  # PDFDancer Python Client
241
241
 
242
- **Getting Started with PDFDancer**
242
+ ![PDFDancer logo](media/logo-orange-60h.webp)
243
243
 
244
- PDFDancer gives you pixel-perfect programmatic control over any PDF document from Python. Locate existing elements by
245
- coordinates or text, adjust them precisely, add brand-new content, and ship the modified PDF in memory or on disk. The
246
- same API is also available for TypeScript and Java, so teams can orchestrate identical PDF workflows across stacks.
244
+ **Stop fighting PDFs. Start editing them.**
245
+
246
+ Edit text in real-world PDFs—even ones you didn't create. Move images, reposition headers, and change fonts with
247
+ pixel-perfect control from Python. The same API is also available for TypeScript and Java.
247
248
 
248
249
  > Need the raw API schema? The latest OpenAPI description lives in `docs/openapi.yml` and is published at
249
250
  > https://bucket.pdfdancer.com/api-doc/development-0.0.yml.
@@ -258,7 +259,7 @@ same API is also available for TypeScript and Java, so teams can orchestrate ide
258
259
 
259
260
  ## What Makes PDFDancer Different
260
261
 
261
- - **Edit any PDF**: Work with documents from customers, governments, or vendors—not just ones you generated.
262
+ - **Edit text in real-world PDFs**: Work with documents from customers, governments, or vendors—even ones you didn't create.
262
263
  - **Pixel-perfect positioning**: Move or add elements at exact coordinates and keep the original layout intact.
263
264
  - **Surgical text replacement**: Swap or rewrite paragraphs without reflowing the rest of the page.
264
265
  - **Form manipulation**: Inspect, fill, and update AcroForm fields programmatically.
@@ -1,10 +1,11 @@
1
1
  # PDFDancer Python Client
2
2
 
3
- **Getting Started with PDFDancer**
3
+ ![PDFDancer logo](media/logo-orange-60h.webp)
4
4
 
5
- PDFDancer gives you pixel-perfect programmatic control over any PDF document from Python. Locate existing elements by
6
- coordinates or text, adjust them precisely, add brand-new content, and ship the modified PDF in memory or on disk. The
7
- same API is also available for TypeScript and Java, so teams can orchestrate identical PDF workflows across stacks.
5
+ **Stop fighting PDFs. Start editing them.**
6
+
7
+ Edit text in real-world PDFs—even ones you didn't create. Move images, reposition headers, and change fonts with
8
+ pixel-perfect control from Python. The same API is also available for TypeScript and Java.
8
9
 
9
10
  > Need the raw API schema? The latest OpenAPI description lives in `docs/openapi.yml` and is published at
10
11
  > https://bucket.pdfdancer.com/api-doc/development-0.0.yml.
@@ -19,7 +20,7 @@ same API is also available for TypeScript and Java, so teams can orchestrate ide
19
20
 
20
21
  ## What Makes PDFDancer Different
21
22
 
22
- - **Edit any PDF**: Work with documents from customers, governments, or vendors—not just ones you generated.
23
+ - **Edit text in real-world PDFs**: Work with documents from customers, governments, or vendors—even ones you didn't create.
23
24
  - **Pixel-perfect positioning**: Move or add elements at exact coordinates and keep the original layout intact.
24
25
  - **Surgical text replacement**: Swap or rewrite paragraphs without reflowing the rest of the page.
25
26
  - **Form manipulation**: Inspect, fill, and update AcroForm fields programmatically.