ocrd 3.0.0b2__tar.gz → 3.0.0b3__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 (155) hide show
  1. {ocrd-3.0.0b2/src/ocrd.egg-info → ocrd-3.0.0b3}/PKG-INFO +1 -1
  2. ocrd-3.0.0b3/VERSION +1 -0
  3. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/cli/__init__.py +3 -3
  4. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/processor/base.py +5 -3
  5. {ocrd-3.0.0b2 → ocrd-3.0.0b3/src/ocrd.egg-info}/PKG-INFO +1 -1
  6. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_utils/config.py +13 -1
  7. ocrd-3.0.0b2/VERSION +0 -1
  8. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/LICENSE +0 -0
  9. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/MANIFEST.in +0 -0
  10. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/README.md +0 -0
  11. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/README_bashlib.md +0 -0
  12. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/README_ocrd.md +0 -0
  13. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/README_ocrd_modelfactory.md +0 -0
  14. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/README_ocrd_models.md +0 -0
  15. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/README_ocrd_network.md +0 -0
  16. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/README_ocrd_utils.md +0 -0
  17. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/README_ocrd_validators.md +0 -0
  18. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/pyproject.toml +0 -0
  19. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/requirements.txt +0 -0
  20. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/setup.cfg +0 -0
  21. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/__init__.py +0 -0
  22. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/cli/bashlib.py +0 -0
  23. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/cli/log.py +0 -0
  24. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/cli/network.py +0 -0
  25. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/cli/ocrd_tool.py +0 -0
  26. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/cli/process.py +0 -0
  27. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/cli/resmgr.py +0 -0
  28. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/cli/validate.py +0 -0
  29. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/cli/workspace.py +0 -0
  30. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/cli/zip.py +0 -0
  31. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/constants.py +0 -0
  32. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/decorators/__init__.py +0 -0
  33. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/decorators/loglevel_option.py +0 -0
  34. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/decorators/mets_find_options.py +0 -0
  35. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/decorators/ocrd_cli_options.py +0 -0
  36. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/decorators/parameter_option.py +0 -0
  37. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/lib.bash +0 -0
  38. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/mets_server.py +0 -0
  39. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/ocrd-all-tool.json +0 -0
  40. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/processor/__init__.py +0 -0
  41. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/processor/builtin/__init__.py +0 -0
  42. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/processor/builtin/dummy/__init__.py +0 -0
  43. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/processor/builtin/dummy/ocrd-tool.json +0 -0
  44. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/processor/builtin/dummy_processor.py +0 -0
  45. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/processor/helpers.py +0 -0
  46. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/processor/ocrd_page_result.py +0 -0
  47. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/resolver.py +0 -0
  48. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/resource_list.yml +0 -0
  49. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/resource_manager.py +0 -0
  50. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/task_sequence.py +0 -0
  51. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/workspace.py +0 -0
  52. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/workspace_backup.py +0 -0
  53. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd/workspace_bagger.py +0 -0
  54. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd.egg-info/SOURCES.txt +0 -0
  55. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd.egg-info/dependency_links.txt +0 -0
  56. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd.egg-info/entry_points.txt +0 -0
  57. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd.egg-info/requires.txt +0 -0
  58. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd.egg-info/top_level.txt +0 -0
  59. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_modelfactory/__init__.py +0 -0
  60. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/__init__.py +0 -0
  61. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/constants.py +0 -0
  62. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/mets-empty.xml +0 -0
  63. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/ocrd_agent.py +0 -0
  64. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/ocrd_exif.py +0 -0
  65. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/ocrd_file.py +0 -0
  66. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/ocrd_mets.py +0 -0
  67. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/ocrd_page.py +0 -0
  68. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/ocrd_page_generateds.py +0 -0
  69. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/ocrd_xml_base.py +0 -0
  70. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/report.py +0 -0
  71. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_models/utils.py +0 -0
  72. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/__init__.py +0 -0
  73. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/cli/__init__.py +0 -0
  74. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/cli/client.py +0 -0
  75. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/cli/processing_server.py +0 -0
  76. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/cli/processing_worker.py +0 -0
  77. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/cli/processor_server.py +0 -0
  78. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/client.py +0 -0
  79. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/client_utils.py +0 -0
  80. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/constants.py +0 -0
  81. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/database.py +0 -0
  82. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/logging_utils.py +0 -0
  83. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/models/__init__.py +0 -0
  84. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/models/job.py +0 -0
  85. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/models/messages.py +0 -0
  86. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/models/ocrd_tool.py +0 -0
  87. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/models/workflow.py +0 -0
  88. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/models/workspace.py +0 -0
  89. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/param_validators.py +0 -0
  90. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/process_helpers.py +0 -0
  91. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/processing_server.py +0 -0
  92. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/processing_worker.py +0 -0
  93. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/processor_server.py +0 -0
  94. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/rabbitmq_utils/__init__.py +0 -0
  95. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/rabbitmq_utils/connector.py +0 -0
  96. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/rabbitmq_utils/constants.py +0 -0
  97. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/rabbitmq_utils/consumer.py +0 -0
  98. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/rabbitmq_utils/helpers.py +0 -0
  99. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/rabbitmq_utils/ocrd_messages.py +0 -0
  100. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/rabbitmq_utils/publisher.py +0 -0
  101. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/runtime_data/__init__.py +0 -0
  102. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/runtime_data/config_parser.py +0 -0
  103. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/runtime_data/connection_clients.py +0 -0
  104. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/runtime_data/deployer.py +0 -0
  105. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/runtime_data/hosts.py +0 -0
  106. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/runtime_data/network_agents.py +0 -0
  107. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/runtime_data/network_services.py +0 -0
  108. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/server_cache.py +0 -0
  109. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/server_utils.py +0 -0
  110. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/tcp_to_uds_mets_proxy.py +0 -0
  111. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_network/utils.py +0 -0
  112. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_utils/__init__.py +0 -0
  113. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_utils/constants.py +0 -0
  114. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_utils/deprecate.py +0 -0
  115. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_utils/image.py +0 -0
  116. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_utils/introspect.py +0 -0
  117. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_utils/logging.py +0 -0
  118. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_utils/ocrd_logging.conf +0 -0
  119. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_utils/os.py +0 -0
  120. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_utils/str.py +0 -0
  121. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/__init__.py +0 -0
  122. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/bagit-profile.yml +0 -0
  123. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/constants.py +0 -0
  124. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/json_validator.py +0 -0
  125. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/message_processing.schema.yml +0 -0
  126. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/message_result.schema.yml +0 -0
  127. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/mets.xsd +0 -0
  128. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/ocrd_network_message_validator.py +0 -0
  129. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/ocrd_tool.schema.yml +0 -0
  130. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/ocrd_tool_validator.py +0 -0
  131. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/ocrd_zip_validator.py +0 -0
  132. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/page.xsd +0 -0
  133. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/page_validator.py +0 -0
  134. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/parameter_validator.py +0 -0
  135. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/processing_server_config.schema.yml +0 -0
  136. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/processing_server_config_validator.py +0 -0
  137. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/resource_list_validator.py +0 -0
  138. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/workspace_validator.py +0 -0
  139. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/xlink.xsd +0 -0
  140. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/xsd_mets_validator.py +0 -0
  141. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/xsd_page_validator.py +0 -0
  142. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/src/ocrd_validators/xsd_validator.py +0 -0
  143. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_decorators.py +0 -0
  144. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_logging.py +0 -0
  145. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_logging_conf.py +0 -0
  146. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_mets_server.py +0 -0
  147. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_model_factory.py +0 -0
  148. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_resolver.py +0 -0
  149. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_resolver_oai.py +0 -0
  150. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_resource_manager.py +0 -0
  151. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_task_sequence.py +0 -0
  152. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_utils.py +0 -0
  153. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_version.py +0 -0
  154. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_workspace.py +0 -0
  155. {ocrd-3.0.0b2 → ocrd-3.0.0b3}/tests/test_workspace_remove.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ocrd
3
- Version: 3.0.0b2
3
+ Version: 3.0.0b3
4
4
  Summary: OCR-D framework
5
5
  Author-email: Konstantin Baierer <unixprog@gmail.com>
6
6
  License: Apache License 2.0
ocrd-3.0.0b3/VERSION ADDED
@@ -0,0 +1 @@
1
+ 3.0.0b3
@@ -61,11 +61,11 @@ Variables:
61
61
  \b
62
62
  {config.describe('OCRD_DOWNLOAD_INPUT')}
63
63
  \b
64
- {config.describe('OCRD_MISSING_INPUT')}
64
+ {config.describe('OCRD_MISSING_INPUT', wrap_text=False)}
65
65
  \b
66
- {config.describe('OCRD_MISSING_OUTPUT')}
66
+ {config.describe('OCRD_MISSING_OUTPUT', wrap_text=False)}
67
67
  \b
68
- {config.describe('OCRD_EXISTING_OUTPUT')}
68
+ {config.describe('OCRD_EXISTING_OUTPUT', wrap_text=False)}
69
69
  \b
70
70
  {config.describe('OCRD_METS_CACHING')}
71
71
  \b
@@ -470,7 +470,7 @@ class Processor():
470
470
  max_workers=max_workers or 1,
471
471
  thread_name_prefix=f"pagetask.{workspace.mets.unique_identifier}"
472
472
  )
473
- self._base_logger.debug("started executor %s", str(executor))
473
+ self._base_logger.debug("started executor %s with %d workers", str(executor), max_workers or 1)
474
474
  tasks = {}
475
475
 
476
476
  for input_file_tuple in self.zip_input_files(on_error='abort', require_first=False):
@@ -478,7 +478,7 @@ class Processor():
478
478
  page_id = next(input_file.pageId
479
479
  for input_file in input_file_tuple
480
480
  if input_file)
481
- self._base_logger.info(f"processing page {page_id}")
481
+ self._base_logger.info(f"preparing page {page_id}")
482
482
  for i, input_file in enumerate(input_file_tuple):
483
483
  if input_file is None:
484
484
  # file/page not found in this file grp
@@ -521,9 +521,10 @@ class Processor():
521
521
  # broad coverage of output failures (including TimeoutError)
522
522
  except (Exception, TimeoutError) as err:
523
523
  # FIXME: add re-usable/actionable logging
524
- self._base_logger.error(f"Failure on page {page_id}: {str(err) or err.__class__.__name__}")
525
524
  if config.OCRD_MISSING_OUTPUT == 'ABORT':
525
+ self._base_logger.error(f"Failure on page {page_id}: {str(err) or err.__class__.__name__}")
526
526
  raise err
527
+ self._base_logger.exception(f"Failure on page {page_id}: {str(err) or err.__class__.__name__}")
527
528
  if config.OCRD_MISSING_OUTPUT == 'SKIP':
528
529
  nr_skipped += 1
529
530
  continue
@@ -587,6 +588,7 @@ class Processor():
587
588
  input_pcgts : List[Optional[OcrdPage]] = [None] * len(input_files)
588
589
  assert isinstance(input_files[0], get_args(OcrdFileType))
589
590
  page_id = input_files[0].pageId
591
+ self._base_logger.info("processing page %s", page_id)
590
592
  for i, input_file in enumerate(input_files):
591
593
  assert isinstance(input_file, get_args(OcrdFileType))
592
594
  self._base_logger.debug(f"parsing file {input_file.ID} for page {page_id}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ocrd
3
- Version: 3.0.0b2
3
+ Version: 3.0.0b3
4
4
  Summary: OCR-D framework
5
5
  Author-email: Konstantin Baierer <unixprog@gmail.com>
6
6
  License: Apache License 2.0
@@ -78,14 +78,26 @@ class OcrdEnvConfig():
78
78
  raise ValueError(f"Unregistered env variable {name}")
79
79
  return self._variables[name].has_default
80
80
 
81
+ def reset_defaults(self):
82
+ for name in self._variables:
83
+ try:
84
+ # we cannot use hasattr, because that delegates to getattr,
85
+ # which we override and provide defaults for (which of course
86
+ # cannot be removed)
87
+ if self.__getattribute__(name):
88
+ delattr(self, name)
89
+ except AttributeError:
90
+ pass
91
+
81
92
  def describe(self, name, *args, **kwargs):
82
93
  if not name in self._variables:
83
94
  raise ValueError(f"Unregistered env variable {name}")
84
95
  return self._variables[name].describe(*args, **kwargs)
85
96
 
86
97
  def __getattr__(self, name):
98
+ # will be called if name is not accessible (has not been added directly yet)
87
99
  if not name in self._variables:
88
- raise ValueError(f"Unregistered env variable {name}")
100
+ raise AttributeError(f"Unregistered env variable {name}")
89
101
  var_obj = self._variables[name]
90
102
  try:
91
103
  raw_value = self.raw_value(name)
ocrd-3.0.0b2/VERSION DELETED
@@ -1 +0,0 @@
1
- 3.0.0b2
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
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