PyPDFForm 5.6.0__tar.gz → 6.0.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 (85) hide show
  1. {pypdfform-5.6.0 → pypdfform-6.0.0}/PKG-INFO +3 -3
  2. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/__init__.py +1 -10
  3. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/root.py +2 -18
  4. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/wrapper.py +3 -19
  5. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm.egg-info/PKG-INFO +3 -3
  6. {pypdfform-5.6.0 → pypdfform-6.0.0}/pyproject.toml +4 -4
  7. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_functional.py +0 -8
  8. {pypdfform-5.6.0 → pypdfform-6.0.0}/LICENSE +0 -0
  9. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/__init__.py +0 -0
  10. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/common.py +0 -0
  11. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/create.py +0 -0
  12. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/entry.py +0 -0
  13. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/inspect.py +0 -0
  14. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/remove.py +0 -0
  15. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/schemas/__init__.py +0 -0
  16. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/schemas/create.py +0 -0
  17. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/schemas/update.py +0 -0
  18. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/cli/update.py +0 -0
  19. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/__init__.py +0 -0
  20. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/adapter.py +0 -0
  21. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/annotations/__init__.py +0 -0
  22. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/annotations/base.py +0 -0
  23. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/annotations/link.py +0 -0
  24. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/annotations/stamp.py +0 -0
  25. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/annotations/text.py +0 -0
  26. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/annotations/text_markup.py +0 -0
  27. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/assets/__init__.py +0 -0
  28. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/assets/blank.py +0 -0
  29. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/constants.py +0 -0
  30. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/coordinate.py +0 -0
  31. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/deprecation.py +0 -0
  32. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/egress.py +0 -0
  33. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/filler.py +0 -0
  34. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/font.py +0 -0
  35. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/hooks.py +0 -0
  36. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/image.py +0 -0
  37. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/middleware/__init__.py +0 -0
  38. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/middleware/base.py +0 -0
  39. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/middleware/checkbox.py +0 -0
  40. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/middleware/dropdown.py +0 -0
  41. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/middleware/image.py +0 -0
  42. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/middleware/radio.py +0 -0
  43. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/middleware/signature.py +0 -0
  44. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/middleware/text.py +0 -0
  45. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/patterns.py +0 -0
  46. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/raw/__init__.py +0 -0
  47. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/raw/circle.py +0 -0
  48. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/raw/ellipse.py +0 -0
  49. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/raw/image.py +0 -0
  50. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/raw/line.py +0 -0
  51. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/raw/rect.py +0 -0
  52. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/raw/text.py +0 -0
  53. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/template.py +0 -0
  54. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/types.py +0 -0
  55. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/utils.py +0 -0
  56. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/watermark.py +0 -0
  57. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/widgets/__init__.py +0 -0
  58. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/widgets/base.py +0 -0
  59. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/widgets/checkbox.py +0 -0
  60. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/widgets/dropdown.py +0 -0
  61. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/widgets/image.py +0 -0
  62. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/widgets/radio.py +0 -0
  63. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/widgets/signature.py +0 -0
  64. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm/lib/widgets/text.py +0 -0
  65. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm.egg-info/SOURCES.txt +0 -0
  66. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm.egg-info/dependency_links.txt +0 -0
  67. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm.egg-info/entry_points.txt +0 -0
  68. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm.egg-info/requires.txt +0 -0
  69. {pypdfform-5.6.0 → pypdfform-6.0.0}/PyPDFForm.egg-info/top_level.txt +0 -0
  70. {pypdfform-5.6.0 → pypdfform-6.0.0}/README.md +0 -0
  71. {pypdfform-5.6.0 → pypdfform-6.0.0}/setup.cfg +0 -0
  72. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_bulk_create_fields.py +0 -0
  73. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_create_widget.py +0 -0
  74. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_draw_elements.py +0 -0
  75. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_dropdown.py +0 -0
  76. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_extract_middleware_attributes.py +0 -0
  77. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_fill_max_length_text_field.py +0 -0
  78. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_font_widths.py +0 -0
  79. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_generate_appearance_streams.py +0 -0
  80. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_js.py +0 -0
  81. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_need_appearances.py +0 -0
  82. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_paragraph.py +0 -0
  83. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_signature.py +0 -0
  84. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_use_full_widget_name.py +0 -0
  85. {pypdfform-5.6.0 → pypdfform-6.0.0}/tests/test_widget_attr_trigger.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyPDFForm
3
- Version: 5.6.0
3
+ Version: 6.0.0
4
4
  Summary: The Python library & CLI for PDF forms.
5
5
  Author: Jinge Li
6
6
  License-Expression: MIT
@@ -12,16 +12,16 @@ Classifier: Intended Audience :: Developers
12
12
  Classifier: Operating System :: OS Independent
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Programming Language :: Python :: 3 :: Only
15
- Classifier: Programming Language :: Python :: 3.10
16
15
  Classifier: Programming Language :: Python :: 3.11
17
16
  Classifier: Programming Language :: Python :: 3.12
18
17
  Classifier: Programming Language :: Python :: 3.13
19
18
  Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Programming Language :: Python :: 3.15
20
20
  Classifier: Topic :: File Formats
21
21
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
22
  Classifier: Topic :: Text Processing
23
23
  Classifier: Topic :: Utilities
24
- Requires-Python: >=3.10
24
+ Requires-Python: >=3.11
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
27
  Requires-Dist: cryptography<51.0.0,>=50.0.0
@@ -16,9 +16,7 @@ PyPDFForm aims to make PDF form automation straightforward whether it is used
16
16
  from Python code or from the command line.
17
17
  """
18
18
 
19
- import logging
20
-
21
- __version__ = "5.6.0"
19
+ __version__ = "6.0.0"
22
20
 
23
21
  from .lib.annotations import Annotations
24
22
  from .lib.assets.blank import BlankPage
@@ -28,13 +26,6 @@ from .lib.types import PdfArray
28
26
  from .lib.widgets import Fields
29
27
  from .lib.wrapper import PdfWrapper
30
28
 
31
- # TODO: figure out why `Annotation sizes differ:`
32
- for logger in [
33
- logging.getLogger(name) for name in getattr(logging.root.manager, "loggerDict")
34
- ]:
35
- if "pypdf" in logger.name:
36
- logger.setLevel(logging.ERROR)
37
-
38
29
  __all__ = [
39
30
  "PdfWrapper",
40
31
  "PdfArray",
@@ -108,14 +108,6 @@ def main(
108
108
  help="Generate form field appearance streams.",
109
109
  ),
110
110
  ] = False,
111
- preserve_metadata: Annotated[
112
- bool,
113
- typer.Option(
114
- "--preserve-metadata",
115
- help="Preserve input PDF metadata.",
116
- hidden=True,
117
- ),
118
- ] = False,
119
111
  use_full_widget_name: Annotated[
120
112
  bool,
121
113
  typer.Option(
@@ -138,15 +130,12 @@ def main(
138
130
  field appearances.
139
131
  generate_appearance_streams (bool): Whether to generate form field
140
132
  appearance streams while handling PDFs.
141
- preserve_metadata (bool): Deprecated compatibility option. Input PDF
142
- metadata is preserved automatically.
143
133
  use_full_widget_name (bool): Whether widget lookups should use full
144
134
  form field names.
145
135
  """
146
136
  ctx.obj = {
147
137
  "need_appearances": need_appearances,
148
138
  "generate_appearance_streams": generate_appearance_streams,
149
- "preserve_metadata": preserve_metadata,
150
139
  "use_full_widget_name": use_full_widget_name,
151
140
  }
152
141
 
@@ -163,10 +152,6 @@ def fill(
163
152
  Path | None, data_file_option("YAML or JSON file with form field values.")
164
153
  ] = None,
165
154
  output: OPTIONAL_OUTPUT_PDF = None,
166
- flatten: Annotated[
167
- bool,
168
- typer.Option("--flatten", help="Deprecated alias for --readonly.", hidden=True),
169
- ] = None,
170
155
  readonly: Annotated[
171
156
  bool,
172
157
  typer.Option("--readonly", help="Make form fields read-only when filling."),
@@ -191,9 +176,8 @@ def fill(
191
176
  options in ``ctx.args``. Defaults to None.
192
177
  output (Path, optional): Output PDF path. If omitted, the input PDF is
193
178
  overwritten. Defaults to None.
194
- flatten (bool, optional): Deprecated alias for `readonly`. Defaults to None.
195
179
  readonly (bool): Whether to make form fields read-only when filling.
196
- Defaults to False. Either `readonly` or `flatten` enables read-only fields.
180
+ Defaults to False.
197
181
  """
198
182
  obj = PdfWrapper(str(pdf), **ctx.obj)
199
183
 
@@ -231,4 +215,4 @@ def fill(
231
215
  )
232
216
  input_data[k] = input_data[k]["path"]
233
217
 
234
- obj.fill(input_data, readonly=readonly, flatten=flatten).write(output or pdf)
218
+ obj.fill(input_data, readonly=readonly).write(output or pdf)
@@ -37,7 +37,6 @@ from .adapter import (
37
37
  fp_or_f_obj_or_stream_to_stream,
38
38
  )
39
39
  from .coordinate import generate_coordinate_grid
40
- from .deprecation import deprecation_notice
41
40
  from .egress import (
42
41
  appearance_streams_handler,
43
42
  rebuild_acroform_fields,
@@ -109,8 +108,6 @@ class PdfWrapper:
109
108
  - `use_full_widget_name` (bool): Whether to use the full widget name when filling the form.
110
109
  - `need_appearances` (bool): Whether to set the `NeedAppearances` flag in the PDF's AcroForm dictionary.
111
110
  - `generate_appearance_streams` (bool): Whether to explicitly generate appearance streams for all form fields using pikepdf.
112
- - `preserve_metadata` (bool): Deprecated compatibility attribute;
113
- input PDF metadata is preserved automatically.
114
111
  - `title` (str | None): The title stored in the PDF's document
115
112
  metadata. A non-None value replaces the existing title; None
116
113
  preserves it.
@@ -121,7 +118,6 @@ class PdfWrapper:
121
118
  ("use_full_widget_name", False),
122
119
  ("need_appearances", False),
123
120
  ("generate_appearance_streams", False),
124
- ("preserve_metadata", False),
125
121
  ("title", None),
126
122
  ]
127
123
 
@@ -137,9 +133,7 @@ class PdfWrapper:
137
133
  The template is normalized to bytes and existing widgets are loaded immediately.
138
134
  The title and document-open JavaScript remain in the PDF stream and are read
139
135
  lazily when their properties are accessed. A non-None `title` keyword updates
140
- the title in the PDF stream; None leaves the template's title unchanged. The
141
- deprecated `preserve_metadata` keyword is accepted for backward compatibility
142
- and emits a deprecation warning. Enabling
136
+ the title in the PDF stream; None leaves the template's title unchanged. Enabling
143
137
  `generate_appearance_streams` also enables `need_appearances`.
144
138
 
145
139
  Args:
@@ -167,10 +161,6 @@ class PdfWrapper:
167
161
 
168
162
  # sets attrs from kwargs
169
163
  for attr, default in self.USER_PARAMS:
170
- if attr == "preserve_metadata" and attr in kwargs:
171
- deprecation_notice("", "preserve_metadata").emit_notice(
172
- self, "__init__"
173
- )
174
164
  setattr(self, attr, kwargs.get(attr, default))
175
165
 
176
166
  if getattr(self, "generate_appearance_streams") is True:
@@ -677,18 +667,12 @@ class PdfWrapper:
677
667
  Values can be strings, booleans, integers, file-like objects, or bytes.
678
668
  **kwargs: Additional keyword arguments:
679
669
  - `readonly` (bool): Whether to make form fields read-only when filling (default: False).
680
- - `flatten` (bool): Deprecated alias for `readonly` (default: False).
681
- Emits a deprecation warning when True. Fields become read-only
682
- if either option is True; False does not make existing read-only fields editable.
670
+ False does not make existing read-only fields editable.
683
671
 
684
672
  Returns:
685
673
  PdfWrapper: The `PdfWrapper` object, allowing for method chaining.
686
674
  """
687
675
 
688
- flatten = kwargs.get("flatten", False)
689
- if flatten:
690
- deprecation_notice("fill.readonly", "flatten").emit_notice(self, "fill")
691
-
692
676
  for key, value in data.items():
693
677
  if key in self.widgets:
694
678
  self.widgets[key].value = value
@@ -698,7 +682,7 @@ class PdfWrapper:
698
682
  self.widgets,
699
683
  need_appearances=getattr(self, "need_appearances"),
700
684
  use_full_widget_name=getattr(self, "use_full_widget_name"),
701
- readonly=kwargs.get("readonly", False) or flatten,
685
+ readonly=kwargs.get("readonly", False),
702
686
  )
703
687
 
704
688
  if image_drawn_stream is not None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyPDFForm
3
- Version: 5.6.0
3
+ Version: 6.0.0
4
4
  Summary: The Python library & CLI for PDF forms.
5
5
  Author: Jinge Li
6
6
  License-Expression: MIT
@@ -12,16 +12,16 @@ Classifier: Intended Audience :: Developers
12
12
  Classifier: Operating System :: OS Independent
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Programming Language :: Python :: 3 :: Only
15
- Classifier: Programming Language :: Python :: 3.10
16
15
  Classifier: Programming Language :: Python :: 3.11
17
16
  Classifier: Programming Language :: Python :: 3.12
18
17
  Classifier: Programming Language :: Python :: 3.13
19
18
  Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Programming Language :: Python :: 3.15
20
20
  Classifier: Topic :: File Formats
21
21
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
22
  Classifier: Topic :: Text Processing
23
23
  Classifier: Topic :: Utilities
24
- Requires-Python: >=3.10
24
+ Requires-Python: >=3.11
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
27
  Requires-Dist: cryptography<51.0.0,>=50.0.0
@@ -17,17 +17,17 @@ classifiers = [
17
17
  "Operating System :: OS Independent",
18
18
  "Programming Language :: Python :: 3",
19
19
  "Programming Language :: Python :: 3 :: Only",
20
- "Programming Language :: Python :: 3.10",
21
20
  "Programming Language :: Python :: 3.11",
22
21
  "Programming Language :: Python :: 3.12",
23
22
  "Programming Language :: Python :: 3.13",
24
23
  "Programming Language :: Python :: 3.14",
24
+ "Programming Language :: Python :: 3.15",
25
25
  "Topic :: File Formats",
26
26
  "Topic :: Software Development :: Libraries :: Python Modules",
27
27
  "Topic :: Text Processing",
28
28
  "Topic :: Utilities",
29
29
  ]
30
- requires-python = ">=3.10"
30
+ requires-python = ">=3.11"
31
31
  dependencies = [
32
32
  "cryptography>=50.0.0,<51.0.0",
33
33
  "fonttools>=4.63.0,<5.0.0",
@@ -104,14 +104,14 @@ select = [
104
104
  "PT",
105
105
  "PERF",
106
106
  "Q",
107
- "R",
107
+ "RET",
108
108
  "RSE",
109
109
  "SLF",
110
110
  "SLOT",
111
111
  "SIM",
112
112
  "T10",
113
113
  "TRY",
114
- "TCH",
114
+ "TC",
115
115
  "YTT",
116
116
  "W",
117
117
  "UP007",
@@ -102,14 +102,6 @@ def test_deprecation_warning_direct_call_with_replace():
102
102
  assert obj.my_method(use_legacy=True) == "result"
103
103
 
104
104
 
105
- def test_flatten_deprecating(template_stream):
106
- with pytest.warns(
107
- DeprecationWarning,
108
- match="PdfWrapper.fill.flatten will be deprecated soon. Use PdfWrapper.fill.readonly instead.",
109
- ):
110
- assert PdfWrapper(template_stream).fill({"test": "test"}, flatten=True)
111
-
112
-
113
105
  def test_base_schema_definition():
114
106
  assert Widget("foo").schema_definition == {}
115
107
 
File without changes
File without changes
File without changes
File without changes