numbers-parser 4.9.0__tar.gz → 4.9.2__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 (59) hide show
  1. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/PKG-INFO +2 -1
  2. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/pyproject.toml +2 -1
  3. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/document.py +16 -1
  4. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/model.py +3 -1
  5. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/LICENSE.rst +0 -0
  6. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/README.md +0 -0
  7. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/__init__.py +0 -0
  8. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/_cat_numbers.py +0 -0
  9. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/_unpack_numbers.py +0 -0
  10. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/bullets.py +0 -0
  11. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/cell.py +0 -0
  12. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/cell_storage.py +0 -0
  13. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/constants.py +0 -0
  14. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/containers.py +0 -0
  15. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/currencies.py +0 -0
  16. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/data/empty.numbers +0 -0
  17. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/exceptions.py +0 -0
  18. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/experimental.py +0 -0
  19. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/file.py +0 -0
  20. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/formula.py +0 -0
  21. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TNArchives_pb2.py +0 -0
  22. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TNArchives_sos_pb2.py +0 -0
  23. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TNCommandArchives_pb2.py +0 -0
  24. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TNCommandArchives_sos_pb2.py +0 -0
  25. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSAArchives_pb2.py +0 -0
  26. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSAArchives_sos_pb2.py +0 -0
  27. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSACommandArchives_sos_pb2.py +0 -0
  28. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSCEArchives_pb2.py +0 -0
  29. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSCH3DArchives_pb2.py +0 -0
  30. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSCHArchives_Common_pb2.py +0 -0
  31. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSCHArchives_GEN_pb2.py +0 -0
  32. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSCHArchives_pb2.py +0 -0
  33. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSCHArchives_sos_pb2.py +0 -0
  34. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSCHCommandArchives_pb2.py +0 -0
  35. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSCHPreUFFArchives_pb2.py +0 -0
  36. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSDArchives_pb2.py +0 -0
  37. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSDArchives_sos_pb2.py +0 -0
  38. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSDCommandArchives_pb2.py +0 -0
  39. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSKArchives_pb2.py +0 -0
  40. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSKArchives_sos_pb2.py +0 -0
  41. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSPArchiveMessages_pb2.py +0 -0
  42. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSPDatabaseMessages_pb2.py +0 -0
  43. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSPMessages_pb2.py +0 -0
  44. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSSArchives_pb2.py +0 -0
  45. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSSArchives_sos_pb2.py +0 -0
  46. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSTArchives_pb2.py +0 -0
  47. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSTArchives_sos_pb2.py +0 -0
  48. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSTCommandArchives_pb2.py +0 -0
  49. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSTStylePropertyArchiving_pb2.py +0 -0
  50. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSWPArchives_pb2.py +0 -0
  51. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSWPArchives_sos_pb2.py +0 -0
  52. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/TSWPCommandArchives_pb2.py +0 -0
  53. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/__init__.py +0 -0
  54. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/fontmap.py +0 -0
  55. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/generated/functionmap.py +0 -0
  56. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/iwafile.py +0 -0
  57. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/mapping.py +0 -0
  58. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/numbers_cache.py +0 -0
  59. {numbers_parser-4.9.0 → numbers_parser-4.9.2}/src/numbers_parser/numbers_uuid.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: numbers-parser
3
- Version: 4.9.0
3
+ Version: 4.9.2
4
4
  Summary: Read and write Apple Numbers spreadsheets
5
5
  Home-page: https://github.com/masaccio/numbers-parser
6
6
  License: MIT
@@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
18
18
  Requires-Dist: compact-json (>=1.1.3,<2.0.0)
19
+ Requires-Dist: enum-tools (>=0.11.0,<0.12.0)
19
20
  Requires-Dist: importlib-resources (>=6.1.1,<7.0.0)
20
21
  Requires-Dist: pendulum (>=3.0,<4.0)
21
22
  Requires-Dist: protobuf (>=4.21.1,<5.0.0)
@@ -12,7 +12,7 @@ name = "numbers-parser"
12
12
  packages = [{include = "numbers_parser", from = "src"}]
13
13
  readme = "README.md"
14
14
  repository = "https://github.com/masaccio/numbers-parser"
15
- version = "4.9.0"
15
+ version = "4.9.2"
16
16
 
17
17
  [tool.poetry.scripts]
18
18
  cat-numbers = "numbers_parser._cat_numbers:main"
@@ -29,6 +29,7 @@ roman = "^3.3"
29
29
  sigfig = "^1.3.2"
30
30
  setuptools = "^69.0.3"
31
31
  importlib-resources = "^6.1.1"
32
+ enum-tools = "^0.11.0"
32
33
 
33
34
  [tool.poetry.group.dev.dependencies]
34
35
  black = "*"
@@ -1226,6 +1226,13 @@ class Table(Cacheable): # noqa: F811
1226
1226
  decimal_places=3,
1227
1227
  negative_style=NegativeNumberStyle.RED
1228
1228
  )
1229
+ table.set_cell_formatting(
1230
+ 3,
1231
+ 0,
1232
+ "popup",
1233
+ popup_values=["Cat", "Dog", "Rabbit"],
1234
+ allow_none=True
1235
+ )
1229
1236
 
1230
1237
  :Parameters:
1231
1238
  * **args** (*list*, *optional*) – Positional arguments for cell reference and data format type (see below)
@@ -1243,6 +1250,8 @@ class Table(Cacheable): # noqa: F811
1243
1250
  :Raises:
1244
1251
  * **TypeError** -
1245
1252
  If a tickbox is chosen for anything other than ``bool`` values.
1253
+ * **IndexError** -
1254
+ If the current cell value does not match a list of popup items.
1246
1255
 
1247
1256
  :Warns:
1248
1257
  * **RuntimeWarning** -
@@ -1421,13 +1430,19 @@ class Table(Cacheable): # noqa: F811
1421
1430
  else False
1422
1431
  )
1423
1432
  except (KeyError, AttributeError):
1433
+ control_format = kwargs["control_format"]
1424
1434
  raise TypeError(
1425
- "unsupported number format '{control_format}' for format_type_name"
1435
+ f"unsupported number format '{control_format}' for {format_type_name}"
1426
1436
  ) from None
1427
1437
  else:
1428
1438
  number_format_type = FormattingType.NUMBER
1429
1439
  format_id = self._model.format_archive(self._table_id, number_format_type, format)
1430
1440
  elif format_type_name == "popup":
1441
+ if cell.value not in format.popup_values:
1442
+ raise IndexError(
1443
+ f"current cell value '{cell.value}' does not match any popup values"
1444
+ )
1445
+
1431
1446
  popup_format_type = FormattingType.TEXT if isinstance(cell, TextCell) else True
1432
1447
  format_id = self._model.format_archive(self._table_id, popup_format_type, format)
1433
1448
  else:
@@ -1739,7 +1739,9 @@ class _NumbersModel(Cacheable):
1739
1739
  cell_type = TSTArchives.durationCellType
1740
1740
  value = value = pack("<d", float(cell.value.total_seconds()))
1741
1741
  elif isinstance(cell, EmptyCell):
1742
- if cell._style is not None:
1742
+ if cell._style is not None or (
1743
+ cell._storage is not None and cell._storage.control_id is not None
1744
+ ):
1743
1745
  flags = 0
1744
1746
  cell_type = TSTArchives.emptyCellValueType
1745
1747
  value = b""
File without changes