summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames R. Barlow <james@purplerock.ca>2021-08-17 02:51:09 -0700
committerJames R. Barlow <james@purplerock.ca>2021-08-17 02:51:09 -0700
commit521970cbdaba04e1132234bc4482fb3877db64e3 (patch)
tree66f7578aa912a17176f61dafb87497eb77a3639f
parent9dfe60d75bf7e9ea547b0596edd16db685c14da2 (diff)
Rename {Token,Object}Type.name -> .name_
Since Enum class expects .name to be defined.
-rw-r--r--docs/api/filters.rst6
-rw-r--r--docs/release_notes.rst4
-rw-r--r--src/pikepdf/_qpdf.pyi5
-rw-r--r--src/pikepdf/models/image.py2
-rw-r--r--src/pikepdf/objects.py4
-rw-r--r--src/qpdf/object.cpp2
-rw-r--r--src/qpdf/tokenfilter.cpp2
-rw-r--r--tests/test_filters.py2
8 files changed, 18 insertions, 9 deletions
diff --git a/docs/api/filters.rst b/docs/api/filters.rst
index 6aa18db..87dfddb 100644
--- a/docs/api/filters.rst
+++ b/docs/api/filters.rst
@@ -67,11 +67,15 @@ Content stream token filters
The token data represents an integer, real number, null or boolean,
respectively.
- .. attribute:: name
+ .. attribute:: name_
The token is the name (pikepdf.Name) of an object. In practice, these
are among the most interesting tokens.
+ .. versionchanged:: 3.0
+ In versions older than 3.0, ``.name`` was used instead. This interfered
+ with semantics of the ``Enum`` object, so this was fixed.
+
.. attribute:: inline_image
An inline image in the content stream. The whole inline image is
diff --git a/docs/release_notes.rst b/docs/release_notes.rst
index 66e5fff..3d929f5 100644
--- a/docs/release_notes.rst
+++ b/docs/release_notes.rst
@@ -44,6 +44,10 @@ Breaking changes
as in the previous idiom ``page = Page(pdf.pages[0])``. In most cases,
if you use the Dictionary object API on a page, it will automatically do the
right thing to the underlying dictionary.
+- ``TokenType.name`` and ``ObjectType.name`` were renamed to
+ ``TokenType.name_`` and ``ObjectType.name_``, respectively. Unfortunately,
+ Python's ``Enum`` class of which these are both a subclass uses the ``.name``
+ attribute in a special way that interfered.
- Deprecated or private functions were removed:
- ``Object.page_contents_*`` (use ``Page.contents_*``)
- ``Object.images`` (use ``Page.images``)
diff --git a/src/pikepdf/_qpdf.pyi b/src/pikepdf/_qpdf.pyi
index 2136c1a..fdd3a31 100644
--- a/src/pikepdf/_qpdf.pyi
+++ b/src/pikepdf/_qpdf.pyi
@@ -80,7 +80,7 @@ class ObjectType(Enum):
dictionary: int = ...
inlineimage: int = ...
integer: int = ...
- name: int = ...
+ name_: int = ...
null: int = ...
operator: int = ...
real: int = ...
@@ -108,7 +108,7 @@ class TokenType(Enum):
eof: int = ...
inline_image: int = ...
integer: int = ...
- name: int = ...
+ name_: int = ...
null: int = ...
real: int = ...
space: int = ...
@@ -678,3 +678,4 @@ def set_access_default_mmap(mmap: bool) -> bool: ...
def set_decimal_precision(prec: int) -> int: ...
def unparse(obj: Any) -> bytes: ...
def utf8_to_pdf_doc(utf8: str, unknown: bytes) -> Tuple[bool, bytes]: ...
+def _unparse_content_stream(contentstream: Iterable[Any]) -> bytes: ...
diff --git a/src/pikepdf/models/image.py b/src/pikepdf/models/image.py
index 06aaa14..8d09872 100644
--- a/src/pikepdf/models/image.py
+++ b/src/pikepdf/models/image.py
@@ -318,7 +318,7 @@ class PdfImageBase(ABC):
base = 'Separation'
elif base == '/ICCBased':
base = self._approx_mode_from_icc()
- return base, lookup
+ return PaletteData(base, lookup)
@abstractmethod
def as_pil_image(self):
diff --git a/src/pikepdf/objects.py b/src/pikepdf/objects.py
index ea6649e..2e6d4ca 100644
--- a/src/pikepdf/objects.py
+++ b/src/pikepdf/objects.py
@@ -57,7 +57,7 @@ class _NameObjectMeta(_ObjectMeta):
"""Supports usage pikepdf.Name.Whatever -> Name('/Whatever')."""
def __getattr__(self, attr):
- if attr.startswith('_'):
+ if attr.startswith('_') or attr == 'object_type':
return getattr(_ObjectMeta, attr)
return Name('/' + attr)
@@ -95,7 +95,7 @@ class Name(Object, metaclass=_NameObjectMeta):
dynamic names and attributes.
"""
- object_type = ObjectType.name
+ object_type = ObjectType.name_
def __new__(cls, name: Union[str, 'Name']):
# QPDF_Name::unparse ensures that names are always saved in a UTF-8
diff --git a/src/qpdf/object.cpp b/src/qpdf/object.cpp
index f8c5d93..788831e 100644
--- a/src/qpdf/object.cpp
+++ b/src/qpdf/object.cpp
@@ -268,7 +268,7 @@ void init_object(py::module_ &m)
.value("integer", QPDFObject::object_type_e::ot_integer)
.value("real", QPDFObject::object_type_e::ot_real)
.value("string", QPDFObject::object_type_e::ot_string)
- .value("name", QPDFObject::object_type_e::ot_name)
+ .value("name_", QPDFObject::object_type_e::ot_name)
.value("array", QPDFObject::object_type_e::ot_array)
.value("dictionary", QPDFObject::object_type_e::ot_dictionary)
.value("stream", QPDFObject::object_type_e::ot_stream)
diff --git a/src/qpdf/tokenfilter.cpp b/src/qpdf/tokenfilter.cpp
index 169ee3f..fe1029d 100644
--- a/src/qpdf/tokenfilter.cpp
+++ b/src/qpdf/tokenfilter.cpp
@@ -67,7 +67,7 @@ void init_tokenfilter(py::module_ &m)
.value("dict_close", QPDFTokenizer::token_type_e::tt_dict_close)
.value("dict_open", QPDFTokenizer::token_type_e::tt_dict_open)
.value("integer", QPDFTokenizer::token_type_e::tt_integer)
- .value("name", QPDFTokenizer::token_type_e::tt_name)
+ .value("name_", QPDFTokenizer::token_type_e::tt_name)
.value("real", QPDFTokenizer::token_type_e::tt_real)
.value("string", QPDFTokenizer::token_type_e::tt_string)
.value("null", QPDFTokenizer::token_type_e::tt_null)
diff --git a/tests/test_filters.py b/tests/test_filters.py
index ab03ea2..d55a284 100644
--- a/tests/test_filters.py
+++ b/tests/test_filters.py
@@ -34,7 +34,7 @@ class FilterCollectNames(TokenFilter):
self.rawnames = []
def handle_token(self, token):
- if token.type_ == TokenType.name:
+ if token.type_ == TokenType.name_:
self.names.append(token.value)
self.rawnames.append(token.raw_value)
return None