From dfcf8c6a39c32d0e03731717a4ff20e5c6a91fab Mon Sep 17 00:00:00 2001 From: Konstantin Baierer Date: Mon, 23 Oct 2023 15:39:07 +0200 Subject: [PATCH] update core docs --- site/core/_modules/index.html | 53 +- site/core/_modules/ocrd/cli/log.html | 33 +- site/core/_modules/ocrd/cli/ocrd_tool.html | 43 +- site/core/_modules/ocrd/cli/resmgr.html | 78 +- site/core/_modules/ocrd/cli/workspace.html | 238 +- site/core/_modules/ocrd/decorators.html | 219 +- .../ocrd/decorators/loglevel_option.html | 28 +- .../ocrd/decorators/mets_find_options.html | 24 +- .../ocrd/decorators/ocrd_cli_options.html | 74 +- site/core/_modules/ocrd/mets_server.html | 432 + site/core/_modules/ocrd/processor/base.html | 70 +- .../processor/builtin/dummy_processor.html | 66 +- .../core/_modules/ocrd/processor/helpers.html | 339 +- site/core/_modules/ocrd/resolver.html | 159 +- site/core/_modules/ocrd/resource_manager.html | 123 +- site/core/_modules/ocrd/task_sequence.html | 24 +- site/core/_modules/ocrd/workspace.html | 227 +- site/core/_modules/ocrd/workspace_backup.html | 34 +- site/core/_modules/ocrd/workspace_bagger.html | 167 +- site/core/_modules/ocrd_modelfactory.html | 48 +- .../core/_modules/ocrd_models/ocrd_agent.html | 90 +- site/core/_modules/ocrd_models/ocrd_exif.html | 36 +- site/core/_modules/ocrd_models/ocrd_file.html | 221 +- site/core/_modules/ocrd_models/ocrd_mets.html | 506 +- site/core/_modules/ocrd_models/ocrd_page.html | 32 +- .../ocrd_models/ocrd_page_generateds.html | 206 +- .../_modules/ocrd_models/ocrd_xml_base.html | 36 +- site/core/_modules/ocrd_models/report.html | 42 +- site/core/_modules/ocrd_models/utils.html | 38 +- site/core/_modules/ocrd_network/client.html | 151 + site/core/_modules/ocrd_network/database.html | 314 + site/core/_modules/ocrd_network/deployer.html | 680 + .../ocrd_network/deployment_utils.html | 236 + site/core/_modules/ocrd_network/logging.html | 160 + .../_modules/ocrd_network/models/job.html | 266 + .../ocrd_network/models/messages.html | 135 + .../ocrd_network/models/ocrd_tool.html | 125 + .../ocrd_network/models/workspace.html | 148 + .../ocrd_network/param_validators.html | 158 + .../ocrd_network/process_helpers.html | 177 + .../ocrd_network/processing_server.html | 927 ++ .../ocrd_network/processing_worker.html | 410 + .../ocrd_network/processor_server.html | 370 + .../rabbitmq_utils/connector.html | 390 + .../ocrd_network/rabbitmq_utils/consumer.html | 203 + .../rabbitmq_utils/ocrd_messages.html | 220 + .../rabbitmq_utils/publisher.html | 224 + .../_modules/ocrd_network/runtime_data.html | 255 + .../_modules/ocrd_network/server_cache.html | 355 + .../_modules/ocrd_network/server_utils.html | 208 + site/core/_modules/ocrd_network/utils.html | 262 + site/core/_modules/ocrd_utils/config.html | 305 + site/core/_modules/ocrd_utils/deprecate.html | 36 +- site/core/_modules/ocrd_utils/image.html | 96 +- site/core/_modules/ocrd_utils/introspect.html | 43 +- site/core/_modules/ocrd_utils/logging.html | 267 +- site/core/_modules/ocrd_utils/os.html | 86 +- .../ocrd_utils/package_resources.html | 165 - site/core/_modules/ocrd_utils/str.html | 67 +- .../ocrd_validators/json_validator.html | 36 +- .../ocrd_network_message_validator.html | 135 + .../ocrd_validators/ocrd_tool_validator.html | 30 +- .../ocrd_validators/ocrd_zip_validator.html | 34 +- .../ocrd_validators/page_validator.html | 58 +- .../ocrd_validators/parameter_validator.html | 30 +- .../processing_server_config_validator.html | 135 + .../resource_list_validator.html | 28 +- .../ocrd_validators/workspace_validator.html | 152 +- .../ocrd_validators/xsd_mets_validator.html | 28 +- .../ocrd_validators/xsd_page_validator.html | 28 +- .../ocrd_validators/xsd_validator.html | 32 +- .../api/ocrd/ocrd.cli.network.rst.txt | 7 + site/core/_sources/api/ocrd/ocrd.cli.rst.txt | 1 + .../api/ocrd/ocrd.mets_server.rst.txt | 7 + .../ocrd/ocrd.processor.builtin.dummy.rst.txt | 7 + .../api/ocrd/ocrd.processor.builtin.rst.txt | 8 + site/core/_sources/api/ocrd/ocrd.rst.txt | 1 + .../_sources/api/ocrd_network/modules.rst.txt | 7 + .../ocrd_network.cli.client.rst.txt | 7 + ...ocrd_network.cli.processing_server.rst.txt | 7 + ...ocrd_network.cli.processing_worker.rst.txt | 7 + .../ocrd_network.cli.processor_server.rst.txt | 7 + .../api/ocrd_network/ocrd_network.cli.rst.txt | 18 + .../ocrd_network/ocrd_network.client.rst.txt | 7 + .../ocrd_network.database.rst.txt | 7 + .../ocrd_network.deployer.rst.txt | 7 + .../ocrd_network.deployment_utils.rst.txt | 7 + .../ocrd_network/ocrd_network.logging.rst.txt | 7 + .../ocrd_network.models.job.rst.txt | 7 + .../ocrd_network.models.messages.rst.txt | 7 + .../ocrd_network.models.ocrd_tool.rst.txt | 7 + .../ocrd_network/ocrd_network.models.rst.txt | 18 + .../ocrd_network.models.workspace.rst.txt | 7 + .../ocrd_network.param_validators.rst.txt | 7 + .../ocrd_network.process_helpers.rst.txt} | 4 +- .../ocrd_network.processing_server.rst.txt | 7 + .../ocrd_network.processing_worker.rst.txt | 7 + .../ocrd_network.processor_server.rst.txt | 7 + ...d_network.rabbitmq_utils.connector.rst.txt | 7 + ...d_network.rabbitmq_utils.constants.rst.txt | 7 + ...rd_network.rabbitmq_utils.consumer.rst.txt | 7 + ...twork.rabbitmq_utils.ocrd_messages.rst.txt | 7 + ...d_network.rabbitmq_utils.publisher.rst.txt | 7 + .../ocrd_network.rabbitmq_utils.rst.txt | 19 + .../api/ocrd_network/ocrd_network.rst.txt | 38 + .../ocrd_network.runtime_data.rst.txt | 7 + .../ocrd_network.server_cache.rst.txt | 7 + .../ocrd_network.server_utils.rst.txt | 7 + .../ocrd_network/ocrd_network.utils.rst.txt | 7 + .../api/ocrd_utils/ocrd_utils.config.rst.txt | 7 + .../api/ocrd_utils/ocrd_utils.rst.txt | 2 +- ...ors.ocrd_network_message_validator.rst.txt | 7 + ...processing_server_config_validator.rst.txt | 7 + .../ocrd_validators/ocrd_validators.rst.txt | 2 + site/core/_static/alabaster.css | 4 +- site/core/_static/basic.css | 73 +- site/core/_static/doctools.js | 420 +- site/core/_static/documentation_options.js | 4 +- site/core/_static/jquery-3.5.1.js | 10872 ---------------- site/core/_static/jquery.js | 2 - site/core/_static/language_data.js | 102 +- site/core/_static/searchtools.js | 823 +- site/core/_static/sphinx_highlight.js | 144 + site/core/_static/underscore-1.13.1.js | 2042 --- site/core/_static/underscore.js | 6 - site/core/api/ocrd/modules.html | 75 +- site/core/api/ocrd/ocrd.cli.bashlib.html | 54 +- site/core/api/ocrd/ocrd.cli.html | 213 +- site/core/api/ocrd/ocrd.cli.log.html | 81 +- site/core/api/ocrd/ocrd.cli.network.html | 327 + site/core/api/ocrd/ocrd.cli.ocrd_tool.html | 139 +- site/core/api/ocrd/ocrd.cli.process.html | 38 +- site/core/api/ocrd/ocrd.cli.resmgr.html | 66 +- site/core/api/ocrd/ocrd.cli.validate.html | 68 +- site/core/api/ocrd/ocrd.cli.workspace.html | 241 +- site/core/api/ocrd/ocrd.cli.zip.html | 117 +- site/core/api/ocrd/ocrd.constants.html | 35 +- site/core/api/ocrd/ocrd.decorators.html | 62 +- .../ocrd/ocrd.decorators.loglevel_option.html | 32 +- .../ocrd.decorators.mets_find_options.html | 32 +- .../ocrd.decorators.ocrd_cli_options.html | 32 +- .../ocrd.decorators.parameter_option.html | 36 +- site/core/api/ocrd/ocrd.html | 230 +- site/core/api/ocrd/ocrd.mets_server.html | 376 + site/core/api/ocrd/ocrd.processor.base.html | 64 +- .../ocrd/ocrd.processor.builtin.dummy.html | 145 + ...crd.processor.builtin.dummy_processor.html | 43 +- .../core/api/ocrd/ocrd.processor.builtin.html | 52 +- .../core/api/ocrd/ocrd.processor.helpers.html | 47 +- site/core/api/ocrd/ocrd.processor.html | 71 +- site/core/api/ocrd/ocrd.resolver.html | 101 +- site/core/api/ocrd/ocrd.resource_manager.html | 38 +- site/core/api/ocrd/ocrd.task_sequence.html | 38 +- site/core/api/ocrd/ocrd.workspace.html | 94 +- site/core/api/ocrd/ocrd.workspace_backup.html | 37 +- site/core/api/ocrd/ocrd.workspace_bagger.html | 62 +- site/core/api/ocrd_modelfactory/modules.html | 37 +- .../ocrd_modelfactory/ocrd_modelfactory.html | 53 +- site/core/api/ocrd_models/modules.html | 133 +- .../ocrd_models/ocrd_models.constants.html | 30 +- site/core/api/ocrd_models/ocrd_models.html | 2009 ++- .../ocrd_models/ocrd_models.ocrd_agent.html | 62 +- .../ocrd_models/ocrd_models.ocrd_exif.html | 51 +- .../ocrd_models/ocrd_models.ocrd_file.html | 95 +- .../ocrd_models/ocrd_models.ocrd_mets.html | 189 +- .../ocrd_models/ocrd_models.ocrd_page.html | 275 +- .../ocrd_models.ocrd_xml_base.html | 42 +- .../api/ocrd_models/ocrd_models.report.html | 35 +- .../api/ocrd_models/ocrd_models.utils.html | 40 +- site/core/api/ocrd_network/modules.html | 259 + .../ocrd_network/ocrd_network.cli.client.html | 117 + .../api/ocrd_network/ocrd_network.cli.html | 128 + .../ocrd_network.cli.processing_server.html | 117 + .../ocrd_network.cli.processing_worker.html | 117 + .../ocrd_network.cli.processor_server.html | 117 + .../api/ocrd_network/ocrd_network.client.html | 133 + .../ocrd_network/ocrd_network.database.html | 203 + .../ocrd_network/ocrd_network.deployer.html | 240 + .../ocrd_network.deployment_utils.html | 154 + site/core/api/ocrd_network/ocrd_network.html | 569 + .../ocrd_network/ocrd_network.logging.html | 157 + .../api/ocrd_network/ocrd_network.models.html | 891 ++ .../ocrd_network/ocrd_network.models.job.html | 537 + .../ocrd_network.models.messages.html | 157 + .../ocrd_network.models.ocrd_tool.html | 160 + .../ocrd_network.models.workspace.html | 261 + .../ocrd_network.param_validators.html | 233 + .../ocrd_network.process_helpers.html | 122 + .../ocrd_network.processing_server.html | 240 + .../ocrd_network.processing_worker.html | 167 + .../ocrd_network.processor_server.html | 174 + ...ocrd_network.rabbitmq_utils.connector.html | 201 + ...ocrd_network.rabbitmq_utils.constants.html | 117 + .../ocrd_network.rabbitmq_utils.consumer.html | 161 + .../ocrd_network.rabbitmq_utils.html | 368 + ..._network.rabbitmq_utils.ocrd_messages.html | 149 + ...ocrd_network.rabbitmq_utils.publisher.html | 151 + .../ocrd_network.runtime_data.html | 152 + .../ocrd_network.server_cache.html | 181 + .../ocrd_network.server_utils.html | 132 + .../api/ocrd_network/ocrd_network.utils.html | 189 + site/core/api/ocrd_utils/modules.html | 119 +- .../api/ocrd_utils/ocrd_utils.config.html | 210 + .../api/ocrd_utils/ocrd_utils.constants.html | 36 +- .../api/ocrd_utils/ocrd_utils.deprecate.html | 48 +- site/core/api/ocrd_utils/ocrd_utils.html | 139 +- .../core/api/ocrd_utils/ocrd_utils.image.html | 62 +- .../api/ocrd_utils/ocrd_utils.introspect.html | 46 +- .../api/ocrd_utils/ocrd_utils.logging.html | 103 +- site/core/api/ocrd_utils/ocrd_utils.os.html | 62 +- .../ocrd_utils.package_resources.html | 183 - site/core/api/ocrd_utils/ocrd_utils.str.html | 57 +- site/core/api/ocrd_validators/modules.html | 147 +- .../ocrd_validators.constants.html | 43 +- .../api/ocrd_validators/ocrd_validators.html | 318 +- .../ocrd_validators.json_validator.html | 59 +- ...dators.ocrd_network_message_validator.html | 187 + .../ocrd_validators.ocrd_tool_validator.html | 60 +- .../ocrd_validators.ocrd_zip_validator.html | 52 +- .../ocrd_validators.page_validator.html | 69 +- .../ocrd_validators.parameter_validator.html | 58 +- ...rs.processing_server_config_validator.html | 183 + ...rd_validators.resource_list_validator.html | 58 +- .../ocrd_validators.workspace_validator.html | 82 +- .../ocrd_validators.xsd_mets_validator.html | 54 +- .../ocrd_validators.xsd_page_validator.html | 54 +- .../ocrd_validators.xsd_validator.html | 52 +- site/core/genindex.html | 2225 +++- site/core/index.html | 393 +- site/core/objects.inv | Bin 14497 -> 19161 bytes site/core/py-modindex.html | 245 +- site/core/search.html | 22 +- site/core/searchindex.js | 2 +- 233 files changed, 27347 insertions(+), 17917 deletions(-) create mode 100644 site/core/_modules/ocrd/mets_server.html create mode 100644 site/core/_modules/ocrd_network/client.html create mode 100644 site/core/_modules/ocrd_network/database.html create mode 100644 site/core/_modules/ocrd_network/deployer.html create mode 100644 site/core/_modules/ocrd_network/deployment_utils.html create mode 100644 site/core/_modules/ocrd_network/logging.html create mode 100644 site/core/_modules/ocrd_network/models/job.html create mode 100644 site/core/_modules/ocrd_network/models/messages.html create mode 100644 site/core/_modules/ocrd_network/models/ocrd_tool.html create mode 100644 site/core/_modules/ocrd_network/models/workspace.html create mode 100644 site/core/_modules/ocrd_network/param_validators.html create mode 100644 site/core/_modules/ocrd_network/process_helpers.html create mode 100644 site/core/_modules/ocrd_network/processing_server.html create mode 100644 site/core/_modules/ocrd_network/processing_worker.html create mode 100644 site/core/_modules/ocrd_network/processor_server.html create mode 100644 site/core/_modules/ocrd_network/rabbitmq_utils/connector.html create mode 100644 site/core/_modules/ocrd_network/rabbitmq_utils/consumer.html create mode 100644 site/core/_modules/ocrd_network/rabbitmq_utils/ocrd_messages.html create mode 100644 site/core/_modules/ocrd_network/rabbitmq_utils/publisher.html create mode 100644 site/core/_modules/ocrd_network/runtime_data.html create mode 100644 site/core/_modules/ocrd_network/server_cache.html create mode 100644 site/core/_modules/ocrd_network/server_utils.html create mode 100644 site/core/_modules/ocrd_network/utils.html create mode 100644 site/core/_modules/ocrd_utils/config.html delete mode 100644 site/core/_modules/ocrd_utils/package_resources.html create mode 100644 site/core/_modules/ocrd_validators/ocrd_network_message_validator.html create mode 100644 site/core/_modules/ocrd_validators/processing_server_config_validator.html create mode 100644 site/core/_sources/api/ocrd/ocrd.cli.network.rst.txt create mode 100644 site/core/_sources/api/ocrd/ocrd.mets_server.rst.txt create mode 100644 site/core/_sources/api/ocrd/ocrd.processor.builtin.dummy.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/modules.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.cli.client.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.cli.processing_server.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.cli.processing_worker.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.cli.processor_server.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.cli.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.client.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.database.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.deployer.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.deployment_utils.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.logging.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.models.job.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.models.messages.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.models.ocrd_tool.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.models.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.models.workspace.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.param_validators.rst.txt rename site/core/_sources/api/{ocrd_utils/ocrd_utils.package_resources.rst.txt => ocrd_network/ocrd_network.process_helpers.rst.txt} (52%) create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.processing_server.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.processing_worker.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.processor_server.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.connector.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.constants.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.consumer.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.ocrd_messages.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.publisher.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.runtime_data.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.server_cache.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.server_utils.rst.txt create mode 100644 site/core/_sources/api/ocrd_network/ocrd_network.utils.rst.txt create mode 100644 site/core/_sources/api/ocrd_utils/ocrd_utils.config.rst.txt create mode 100644 site/core/_sources/api/ocrd_validators/ocrd_validators.ocrd_network_message_validator.rst.txt create mode 100644 site/core/_sources/api/ocrd_validators/ocrd_validators.processing_server_config_validator.rst.txt delete mode 100644 site/core/_static/jquery-3.5.1.js delete mode 100644 site/core/_static/jquery.js create mode 100644 site/core/_static/sphinx_highlight.js delete mode 100644 site/core/_static/underscore-1.13.1.js delete mode 100644 site/core/_static/underscore.js create mode 100644 site/core/api/ocrd/ocrd.cli.network.html create mode 100644 site/core/api/ocrd/ocrd.mets_server.html create mode 100644 site/core/api/ocrd/ocrd.processor.builtin.dummy.html create mode 100644 site/core/api/ocrd_network/modules.html create mode 100644 site/core/api/ocrd_network/ocrd_network.cli.client.html create mode 100644 site/core/api/ocrd_network/ocrd_network.cli.html create mode 100644 site/core/api/ocrd_network/ocrd_network.cli.processing_server.html create mode 100644 site/core/api/ocrd_network/ocrd_network.cli.processing_worker.html create mode 100644 site/core/api/ocrd_network/ocrd_network.cli.processor_server.html create mode 100644 site/core/api/ocrd_network/ocrd_network.client.html create mode 100644 site/core/api/ocrd_network/ocrd_network.database.html create mode 100644 site/core/api/ocrd_network/ocrd_network.deployer.html create mode 100644 site/core/api/ocrd_network/ocrd_network.deployment_utils.html create mode 100644 site/core/api/ocrd_network/ocrd_network.html create mode 100644 site/core/api/ocrd_network/ocrd_network.logging.html create mode 100644 site/core/api/ocrd_network/ocrd_network.models.html create mode 100644 site/core/api/ocrd_network/ocrd_network.models.job.html create mode 100644 site/core/api/ocrd_network/ocrd_network.models.messages.html create mode 100644 site/core/api/ocrd_network/ocrd_network.models.ocrd_tool.html create mode 100644 site/core/api/ocrd_network/ocrd_network.models.workspace.html create mode 100644 site/core/api/ocrd_network/ocrd_network.param_validators.html create mode 100644 site/core/api/ocrd_network/ocrd_network.process_helpers.html create mode 100644 site/core/api/ocrd_network/ocrd_network.processing_server.html create mode 100644 site/core/api/ocrd_network/ocrd_network.processing_worker.html create mode 100644 site/core/api/ocrd_network/ocrd_network.processor_server.html create mode 100644 site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.connector.html create mode 100644 site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.constants.html create mode 100644 site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.consumer.html create mode 100644 site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.html create mode 100644 site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.ocrd_messages.html create mode 100644 site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.publisher.html create mode 100644 site/core/api/ocrd_network/ocrd_network.runtime_data.html create mode 100644 site/core/api/ocrd_network/ocrd_network.server_cache.html create mode 100644 site/core/api/ocrd_network/ocrd_network.server_utils.html create mode 100644 site/core/api/ocrd_network/ocrd_network.utils.html create mode 100644 site/core/api/ocrd_utils/ocrd_utils.config.html delete mode 100644 site/core/api/ocrd_utils/ocrd_utils.package_resources.html create mode 100644 site/core/api/ocrd_validators/ocrd_validators.ocrd_network_message_validator.html create mode 100644 site/core/api/ocrd_validators/ocrd_validators.processing_server_config_validator.html diff --git a/site/core/_modules/index.html b/site/core/_modules/index.html index 54a088293..f9fbe3324 100644 --- a/site/core/_modules/index.html +++ b/site/core/_modules/index.html @@ -1,18 +1,16 @@ - - + - Overview: module code — ocrd 2.41.0 documentation - - - - - - - + Overview: module code — ocrd 2.58.1 documentation + + + + + + @@ -42,7 +40,8 @@

All modules for which code is available

  • ocrd.processor.base
  • +
  • ocrd.mets_server
  • +
  • ocrd.processor.base
  • ocrd.processor.builtin.dummy_processor
  • ocrd.processor.helpers
  • ocrd.resolver
  • @@ -61,18 +60,42 @@

    All modules for which code is available

  • ocrd_models.ocrd_xml_base
  • ocrd_models.report
  • ocrd_models.utils
  • +
  • ocrd_network.client
  • +
  • ocrd_network.database
  • +
  • ocrd_network.deployer
  • +
  • ocrd_network.deployment_utils
  • +
  • ocrd_network.logging
  • +
  • ocrd_network.models.job
  • +
  • ocrd_network.models.messages
  • +
  • ocrd_network.models.ocrd_tool
  • +
  • ocrd_network.models.workspace
  • +
  • ocrd_network.param_validators
  • +
  • ocrd_network.process_helpers
  • +
  • ocrd_network.processing_server
  • +
  • ocrd_network.processing_worker
  • +
  • ocrd_network.processor_server
  • +
  • ocrd_network.rabbitmq_utils.connector
  • +
  • ocrd_network.rabbitmq_utils.consumer
  • +
  • ocrd_network.rabbitmq_utils.ocrd_messages
  • +
  • ocrd_network.rabbitmq_utils.publisher
  • +
  • ocrd_network.runtime_data
  • +
  • ocrd_network.server_cache
  • +
  • ocrd_network.server_utils
  • +
  • ocrd_network.utils
  • +
  • ocrd_utils.config
  • ocrd_utils.deprecate
  • ocrd_utils.image
  • ocrd_utils.introspect
  • ocrd_utils.logging
  • ocrd_utils.os
  • -
  • ocrd_utils.package_resources
  • ocrd_utils.str
  • ocrd_validators.json_validator
  • +
  • ocrd_validators.ocrd_network_message_validator
  • ocrd_validators.ocrd_tool_validator
  • ocrd_validators.ocrd_zip_validator
  • ocrd_validators.page_validator
  • ocrd_validators.parameter_validator
  • +
  • ocrd_validators.processing_server_config_validator
  • ocrd_validators.resource_list_validator
  • ocrd_validators.workspace_validator
  • ocrd_validators.xsd_mets_validator
  • @@ -128,7 +151,7 @@

    Quick search

    - + @@ -145,8 +168,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 diff --git a/site/core/_modules/ocrd/cli/log.html b/site/core/_modules/ocrd/cli/log.html index 333bc392d..b1f73566b 100644 --- a/site/core/_modules/ocrd/cli/log.html +++ b/site/core/_modules/ocrd/cli/log.html @@ -1,18 +1,16 @@ - - + - ocrd.cli.log — ocrd 2.41.0 documentation - - - - - - - + ocrd.cli.log — ocrd 2.58.1 documentation + + + + + + @@ -57,14 +55,17 @@

    Source code for ocrd.cli.log

     pass_log = click.make_pass_decorator(LogCtx)
     
     @click.group("log")
    -@click.option('-n', '--name', envvar='OCRD_TOOL_NAME', default='', metavar='LOGGER_NAME', help='Name of the logger', show_default=True)
    +@click.option('-n', '--name', envvar='OCRD_TOOL_NAME', default='log_cli', metavar='LOGGER_NAME', help='Name of the logger', show_default=True)
     @click.pass_context
     def log_cli(ctx, name, *args, **kwargs):
    -    """
    +    """
         Logging
    +
    +    Logger name will be ocrd.OCRD_TOOL_NAME where OCRD_TOOL_NAME is normally
    +    (when using bashlib) the name of the processor.
         """
         initLogging()
    -    ctx.obj = LogCtx(name)
    +    ctx.obj = LogCtx('ocrd.' + name)
     
     def _bind_log_command(lvl):
         @click.argument('msgs', nargs=-1)
    @@ -134,7 +135,7 @@ 

    Quick search

    - + @@ -151,8 +152,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 diff --git a/site/core/_modules/ocrd/cli/ocrd_tool.html b/site/core/_modules/ocrd/cli/ocrd_tool.html index c6c2b8bfe..bb9c0f7d4 100644 --- a/site/core/_modules/ocrd/cli/ocrd_tool.html +++ b/site/core/_modules/ocrd/cli/ocrd_tool.html @@ -1,18 +1,16 @@ - - + - ocrd.cli.ocrd_tool — ocrd 2.41.0 documentation - - - - - - - + ocrd.cli.ocrd_tool — ocrd 2.58.1 documentation + + + + + + @@ -42,6 +40,7 @@

    Source code for ocrd.cli.ocrd_tool

         :nested: full
     
     """
    +from inspect import getmodule
     from json import dumps
     import codecs
     import sys
    @@ -84,7 +83,7 @@ 

    Source code for ocrd.cli.ocrd_tool

     @ocrd_tool_cli.command('version', help='Version of ocrd-tool.json')
     @pass_ocrd_tool
     def ocrd_tool_version(ctx):
    -    print('Version "%s", ocrd/core "%s"' % (ctx.json['version'], OCRD_VERSION))
    +    print(ctx.json['version'])
     
     # ----------------------------------------------------------------------
     # ocrd ocrd-tool validate
    @@ -151,10 +150,18 @@ 

    Source code for ocrd.cli.ocrd_tool

                       show_resource=res_name)
     
     @ocrd_tool_tool.command('help', help="Generate help for processors")
    +@click.argument('subcommand', required=False)
     @pass_ocrd_tool
    -def ocrd_tool_tool_params_help(ctx):
    -    Processor(None, ocrd_tool=ctx.json['tools'][ctx.tool_name],
    -              show_help=True)
    +def ocrd_tool_tool_params_help(ctx, subcommand):
    +    class BashProcessor(Processor):
    +        # set docstrings to empty
    +        __doc__ = None
    +        # HACK: override the module-level docstring, too
    +        getmodule(OcrdToolCtx).__doc__ = None
    +        def process(self):
    +            return super()
    +    BashProcessor(None, ocrd_tool=ctx.json['tools'][ctx.tool_name],
    +                  show_help=True, subcommand=subcommand)
     
     # ----------------------------------------------------------------------
     # ocrd ocrd-tool tool categories
    @@ -193,7 +200,7 @@ 

    Source code for ocrd.cli.ocrd_tool

     @click.option('-j', '--json', help='Output JSON instead of shell variables', is_flag=True, default=False)
     @pass_ocrd_tool
     def ocrd_tool_tool_parse_params(ctx, parameter, parameter_override, json):
    -    """
    +    """
         Parse parameters with fallback to defaults and output as shell-eval'able assignments to params var.
         """
         set_json_key_value_overrides(parameter, *parameter_override)
    @@ -259,7 +266,7 @@ 

    Quick search

    - + @@ -276,8 +283,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/cli/resmgr.html b/site/core/_modules/ocrd/cli/resmgr.html index 2fa09f1e5..9c4dd3934 100644 --- a/site/core/_modules/ocrd/cli/resmgr.html +++ b/site/core/_modules/ocrd/cli/resmgr.html @@ -1,18 +1,16 @@ - - + - ocrd.cli.resmgr — ocrd 2.41.0 documentation - - - - - - - + ocrd.cli.resmgr — ocrd 2.58.1 documentation + + + + + + @@ -42,7 +40,6 @@

    Source code for ocrd.cli.resmgr

         :nested: full
     """
     import sys
    -from os import environ
     from pathlib import Path
     from distutils.spawn import find_executable as which
     from yaml import safe_load, safe_dump
    @@ -75,7 +72,7 @@ 

    Source code for ocrd.cli.resmgr

     
     @click.group("resmgr")
     def resmgr_cli():
    -    """
    +    """
         Managing processor resources
         """
         initLogging()
    @@ -84,7 +81,7 @@ 

    Source code for ocrd.cli.resmgr

     @click.option('-D', '--no-dynamic', is_flag=True, default=False, help="Whether to skip looking into each processor's --dump-{json,module-dir} for module-level resources")
     @click.option('-e', '--executable', help='Show only resources for executable beginning with EXEC', metavar='EXEC', default='ocrd-*')
     def list_available(executable, no_dynamic):
    -    """
    +    """
         List available resources
         """
         resmgr = OcrdResourceManager()
    @@ -94,7 +91,7 @@ 

    Source code for ocrd.cli.resmgr

     @resmgr_cli.command('list-installed')
     @click.option('-e', '--executable', help='Show only resources for executable EXEC', metavar='EXEC')
     def list_installed(executable=None):
    -    """
    +    """
         List installed resources
         """
         resmgr = OcrdResourceManager()
    @@ -112,7 +109,7 @@ 

    Source code for ocrd.cli.resmgr

     @click.argument('executable', required=True)
     @click.argument('name', required=False)
     def download(any_url, no_dynamic, resource_type, path_in_archive, allow_uninstalled, overwrite, location, executable, name):
    -    """
    +    """
         Download resource NAME for processor EXECUTABLE.
     
         NAME is the name of the resource made available by downloading or copying.
    @@ -164,8 +161,9 @@ 

    Source code for ocrd.cli.resmgr

                     continue
                 if resdict['url'].startswith('https://') or resdict['url'].startswith('http://'):
                     log.info("Downloading %s resource '%s' (%s)", registered, resdict['name'], resdict['url'])
    -                with requests.get(resdict['url'], stream=True) as r:
    -                    resdict['size'] = int(r.headers.get('content-length'))
    +                if 'size' not in resdict:
    +                    with requests.head(resdict['url']) as r:
    +                        resdict['size'] = int(r.headers.get('content-length', 0))
                 else:
                     log.info("Copying %s resource '%s' (%s)", registered, resdict['name'], resdict['url'])
                     urlpath = Path(resdict['url'])
    @@ -186,30 +184,32 @@ 

    Source code for ocrd.cli.resmgr

                     if not basedir:
                         basedir = resmgr.location_to_resource_dir('data')
     
    -            with click.progressbar(length=resdict['size']) as bar:
    -                fpath = resmgr.download(
    -                    this_executable,
    -                    resdict['url'],
    -                    name=resdict['name'],
    -                    resource_type=resdict.get('type', resource_type),
    -                    path_in_archive=resdict.get('path_in_archive', path_in_archive),
    -                    overwrite=overwrite,
    -                    size=resdict['size'],
    -                    no_subdir=location in ['cwd', 'module'],
    -                    basedir=basedir,
    -                    progress_cb=lambda delta: bar.update(delta)
    -                )
    -            if registered == 'unregistered':
    -                log.info("%s resource '%s' (%s) not a known resource, creating stub in %s'", this_executable, name, any_url, resmgr.user_list)
    -                resmgr.add_to_user_database(this_executable, fpath, url=any_url)
    -            resmgr.save_user_list()
    -            log.info("Installed resource %s under %s", resdict['url'], fpath)
    +            try:
    +                with click.progressbar(length=resdict['size']) as bar:
    +                    fpath = resmgr.download(
    +                        this_executable,
    +                        resdict['url'],
    +                        basedir,
    +                        name=resdict['name'],
    +                        resource_type=resdict.get('type', resource_type),
    +                        path_in_archive=resdict.get('path_in_archive', path_in_archive),
    +                        overwrite=overwrite,
    +                        no_subdir=location in ['cwd', 'module'],
    +                        progress_cb=lambda delta: bar.update(delta)
    +                    )
    +                if registered == 'unregistered':
    +                    log.info("%s resource '%s' (%s) not a known resource, creating stub in %s'", this_executable, name, any_url, resmgr.user_list)
    +                    resmgr.add_to_user_database(this_executable, fpath, url=any_url)
    +                resmgr.save_user_list()
    +                log.info("Installed resource %s under %s", resdict['url'], fpath)
    +            except FileExistsError as exc:
    +                log.info(str(exc))
                 log.info("Use in parameters as '%s'", resmgr.parameter_usage(resdict['name'], usage=resdict.get('parameter_usage', 'as-is')))
     
     @resmgr_cli.command('migrate')
     @click.argument('migration', type=click.Choice(['2.37.0']))
     def migrate(migration):
    -    """
    +    """
         Update the configuration after updating core to MIGRATION
         """
         resmgr = OcrdResourceManager(skip_init=True)
    @@ -293,7 +293,7 @@ 

    Quick search

    - + @@ -310,8 +310,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/cli/workspace.html b/site/core/_modules/ocrd/cli/workspace.html index ad537532b..8ff9fced6 100644 --- a/site/core/_modules/ocrd/cli/workspace.html +++ b/site/core/_modules/ocrd/cli/workspace.html @@ -1,18 +1,16 @@ - - + - ocrd.cli.workspace — ocrd 2.41.0 documentation - - - - - - - + ocrd.cli.workspace — ocrd 2.58.1 documentation + + + + + + @@ -54,21 +52,24 @@

    Source code for ocrd.cli.workspace

     import click
     
     from ocrd import Resolver, Workspace, WorkspaceValidator, WorkspaceBackupManager
    -from ocrd_utils import getLogger, initLogging, pushd_popd, EXT_TO_MIME, safe_filename
    +from ocrd.mets_server import OcrdMetsServer
    +from ocrd_utils import getLogger, initLogging, pushd_popd, EXT_TO_MIME, safe_filename, parse_json_string_or_file
     from ocrd.decorators import mets_find_options
     from . import command_with_replaced_help
     
     
     
    [docs]class WorkspaceCtx(): - def __init__(self, directory, mets_url, mets_basename, automatic_backup): + def __init__(self, directory, mets_url, mets_basename, mets_server_url, automatic_backup): self.log = getLogger('ocrd.cli.workspace') - self.resolver = Resolver() if mets_basename: self.log.warning(DeprecationWarning('--mets-basename is deprecated. Use --mets/--directory instead.')) - self.directory, self.mets_url, self.mets_basename = self.resolver.resolve_mets_arguments(directory, mets_url, mets_basename) + self.resolver = Resolver() + self.directory, self.mets_url, self.mets_basename, self.mets_server_url \ + = self.resolver.resolve_mets_arguments(directory, mets_url, mets_basename, mets_server_url) self.automatic_backup = automatic_backup
    + pass_workspace = click.make_pass_decorator(WorkspaceCtx) # ---------------------------------------------------------------------- @@ -79,14 +80,26 @@

    Source code for ocrd.cli.workspace

     @click.option('-d', '--directory', envvar='WORKSPACE_DIR', type=click.Path(file_okay=False), metavar='WORKSPACE_DIR', help='Changes the workspace folder location [default: METS_URL directory or .]"')
     @click.option('-M', '--mets-basename', default=None, help='METS file basename. Deprecated, use --mets/--directory')
     @click.option('-m', '--mets', default=None, help='The path/URL of the METS file [default: WORKSPACE_DIR/mets.xml]', metavar="METS_URL")
    +@click.option('-U', '--mets-server-url', 'mets_server_url', help="TCP host of METS server")
     @click.option('--backup', default=False, help="Backup mets.xml whenever it is saved.", is_flag=True)
     @click.pass_context
    -def workspace_cli(ctx, directory, mets, mets_basename, backup):
    -    """
    -    Working with workspace
    +def workspace_cli(ctx, directory, mets, mets_basename, mets_server_url, backup):
    +    """
    +    Managing workspaces
    +
    +    A workspace comprises a METS file and a directory as point of reference.
    +
    +    Operates on the file system directly or via a METS server 
    +    (already running via some prior `server start` subcommand).
         """
         initLogging()
    -    ctx.obj = WorkspaceCtx(directory, mets_url=mets, mets_basename=mets_basename, automatic_backup=backup)
    +    ctx.obj = WorkspaceCtx(
    +        directory,
    +        mets_url=mets,
    +        mets_basename=mets_basename,
    +        mets_server_url=mets_server_url,
    +        automatic_backup=backup
    +    )
     
     # ----------------------------------------------------------------------
     # ocrd workspace validate
    @@ -96,12 +109,14 @@ 

    Source code for ocrd.cli.workspace

         (r' \[METS_URL\]', ''))) # XXX deprecated argument
     @pass_workspace
     @click.option('-a', '--download', is_flag=True, help="Download all files")
    -@click.option('-s', '--skip', help="Tests to skip", default=[], multiple=True, type=click.Choice(['imagefilename', 'dimension', 'mets_unique_identifier', 'mets_file_group_names', 'mets_files', 'pixel_density', 'page', 'page_xsd', 'mets_xsd', 'url']))
    +@click.option('-s', '--skip', help="Tests to skip", default=[], multiple=True, type=click.Choice(
    +    ['imagefilename', 'dimension', 'pixel_density', 'page', 'url', 'page_xsd', 'mets_fileid_page_pcgtsid',
    +     'mets_unique_identifier', 'mets_file_group_names', 'mets_files', 'mets_xsd']))
     @click.option('--page-textequiv-consistency', '--page-strictness', help="How strict to check PAGE multi-level textequiv consistency", type=click.Choice(['strict', 'lax', 'fix', 'off']), default='strict')
     @click.option('--page-coordinate-consistency', help="How fierce to check PAGE multi-level coordinate consistency", type=click.Choice(['poly', 'baseline', 'both', 'off']), default='poly')
     @click.argument('mets_url', default=None, required=False)
     def workspace_validate(ctx, mets_url, download, skip, page_textequiv_consistency, page_coordinate_consistency):
    -    """
    +    """
         Validate a workspace
     
         METS_URL can be a URL, an absolute path or a path relative to $PWD.
    @@ -141,7 +156,7 @@ 

    Source code for ocrd.cli.workspace

     @click.argument('workspace_dir', default=None, required=False)
     @pass_workspace
     def workspace_clone(ctx, clobber_mets, download, mets_url, workspace_dir):
    -    """
    +    """
         Create a workspace from METS_URL and return the directory
     
         METS_URL can be a URL, an absolute path or a path relative to $PWD.
    @@ -174,7 +189,7 @@ 

    Source code for ocrd.cli.workspace

     @click.argument('directory', default=None, required=False)
     @pass_workspace
     def workspace_init(ctx, clobber_mets, directory):
    -    """
    +    """
         Create a workspace with an empty METS file in --directory.
     
         """
    @@ -205,11 +220,17 @@ 

    Source code for ocrd.cli.workspace

     @click.argument('fname', required=True)
     @pass_workspace
     def workspace_add_file(ctx, file_grp, file_id, mimetype, page_id, ignore, check_file_exists, force, fname):
    -    """
    +    """
         Add a file or http(s) URL FNAME to METS in a workspace.
         If FNAME is not an http(s) URL and is not a workspace-local existing file, try to copy to workspace.
         """
    -    workspace = Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename, automatic_backup=ctx.automatic_backup)
    +    workspace = Workspace(
    +        ctx.resolver,
    +        directory=ctx.directory,
    +        mets_basename=ctx.mets_basename,
    +        automatic_backup=ctx.automatic_backup,
    +        mets_server_url=ctx.mets_server_url,
    +    )
     
         log = getLogger('ocrd.cli.workspace.add')
         if not mimetype:
    @@ -242,7 +263,16 @@ 

    Source code for ocrd.cli.workspace

     
         if not page_id:
             log.warning("You did not provide '--page-id/-g', so the file you added is not linked to a specific page.")
    -    workspace.add_file(file_grp, file_id=file_id, mimetype=mimetype, page_id=page_id, force=force, ignore=ignore, local_filename=local_filename, url=fname)
    +    kwargs = {
    +        'file_id': file_id,
    +        'mimetype': mimetype,
    +        'page_id': page_id,
    +        'force': force,
    +        'ignore': ignore,
    +        'local_filename': local_filename,
    +        'url': fname
    +    }
    +    workspace.add_file(file_grp, **kwargs)
         workspace.save_mets()
     
     # ----------------------------------------------------------------------
    @@ -254,8 +284,9 @@ 

    Source code for ocrd.cli.workspace

     @click.option('-r', '--regex', help="Regular expression matching the FILE_GLOB filesystem paths to define named captures usable in the other parameters", required=True)
     @click.option('-m', '--mimetype', help="Media type of the file. If not provided, guess from filename", required=False)
     @click.option('-g', '--page-id', help="physical page ID of the file", required=False)
    -@click.option('-i', '--file-id', help="ID of the file", required=False)
    -@click.option('-u', '--url', help="local filesystem path in the workspace directory (copied from source file if different)", required=False)
    +@click.option('-i', '--file-id', help="ID of the file. If not provided, derive from fileGrp and filename", required=False)
    +@click.option('-u', '--url', help="Remote URL of the file", required=False)
    +@click.option('-l', '--local-filename', help="Local filesystem path in the workspace directory (copied from source file if different)", required=False)
     @click.option('-G', '--file-grp', help="File group USE of the file", required=True)
     @click.option('-n', '--dry-run', help="Don't actually do anything to the METS or filesystem, just preview", default=False, is_flag=True)
     @click.option('-S', '--source-path', 'src_path_option', help="File path to copy from (if different from FILE_GLOB values)", required=False)
    @@ -264,8 +295,8 @@ 

    Source code for ocrd.cli.workspace

     @click.option('-s', '--skip', help="Skip files not matching --regex (instead of failing)", default=False, is_flag=True)
     @click.argument('file_glob', nargs=-1, required=True)
     @pass_workspace
    -def workspace_cli_bulk_add(ctx, regex, mimetype, page_id, file_id, url, file_grp, dry_run, file_glob, src_path_option, ignore, force, skip):
    -    """
    +def workspace_cli_bulk_add(ctx, regex, mimetype, page_id, file_id, url, local_filename, file_grp, dry_run, file_glob, src_path_option, ignore, force, skip):
    +    """
         Add files in bulk to an OCR-D workspace.
     
         FILE_GLOB can either be a shell glob expression to match file names,
    @@ -293,7 +324,7 @@ 

    Source code for ocrd.cli.workspace

                     --file-id 'FILE_{{ fileGrp }}_{{ pageid }}' \\
                     --page-id 'PHYS_{{ pageid }}' \\
                     --file-grp "{{ fileGrp }}" \\
    -                --url '{{ fileGrp }}/FILE_{{ pageid }}.{{ ext }}' \\
    +                --local-filename '{{ fileGrp }}/FILE_{{ pageid }}.{{ ext }}' \\
                     -
     
             \b
    @@ -301,11 +332,17 @@ 

    Source code for ocrd.cli.workspace

               echo PHYS_0001 BIN FILE_0001_BIN BIN/FILE_0001_BIN.xml; \\
               echo PHYS_0002 BIN FILE_0002_BIN.IMG-wolf BIN/FILE_0002_BIN.IMG-wolf.png; \\
               echo PHYS_0002 BIN FILE_0002_BIN BIN/FILE_0002_BIN.xml; \\
    -        } | ocrd workspace bulk-add -r '(?P<pageid>.*) (?P<filegrp>.*) (?P<fileid>.*) (?P<url>.*)' \\
    -          -G '{{ filegrp }}' -g '{{ pageid }}' -i '{{ fileid }}' -S '{{ url }}' -
    +        } | ocrd workspace bulk-add -r '(?P<pageid>.*) (?P<filegrp>.*) (?P<fileid>.*) (?P<local_filename>.*)' \\
    +          -G '{{ filegrp }}' -g '{{ pageid }}' -i '{{ fileid }}' -S '{{ local_filename }}' -
         """
         log = getLogger('ocrd.cli.workspace.bulk-add') # pylint: disable=redefined-outer-name
    -    workspace = Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename, automatic_backup=ctx.automatic_backup)
    +    workspace = Workspace(
    +        ctx.resolver,
    +        directory=ctx.directory,
    +        mets_basename=ctx.mets_basename,
    +        automatic_backup=ctx.automatic_backup,
    +        mets_server_url=ctx.mets_server_url,
    +    )
     
         try:
             pat = re.compile(regex)
    @@ -337,27 +374,24 @@ 

    Source code for ocrd.cli.workspace

                 sys.exit(1)
             group_dict = m.groupdict()
     
    -        # derive --file-id from filename if not --file-id not explicitly set
    -        file_id_ = file_id or safe_filename(str(file_path))
    -
             # set up file info
    -        file_dict = {'url': url, 'mimetype': mimetype, 'file_id': file_id_, 'page_id': page_id, 'file_grp': file_grp}
    +        file_dict = {'local_filename': local_filename, 'url': url, 'mimetype': mimetype, 'file_id': file_id, 'page_id': page_id, 'file_grp': file_grp}
     
    -        # guess mime type
    -        if not file_dict['mimetype']:
    -            try:
    -                file_dict['mimetype'] = EXT_TO_MIME[file_path.suffix]
    -            except KeyError:
    -                log.error("Cannot guess mimetype from extension '%s' for '%s'. Set --mimetype explicitly" % (file_path.suffix, file_path))
    -
    -        # Flag to track whether 'url' should be 'src'
    -        url_is_src = False
    +        # Flag to track whether 'local_filename' should be 'src'
    +        local_filename_is_src = False
     
             # expand templates
             for param_name in file_dict:
                 if not file_dict[param_name]:
    -                if param_name == 'url':
    -                    url_is_src = True
    +                if param_name == 'local_filename':
    +                    local_filename_is_src = True
    +                    continue
    +                elif param_name in ['mimetype', 'file_id']:
    +                    # auto-filled below once the other
    +                    # replacements have happened
    +                    continue
    +                elif param_name == 'url':
    +                    # Remote URL is not required
                         continue
                     raise ValueError(f"OcrdFile attribute '{param_name}' unset ({file_dict})")
                 for group_name in group_dict:
    @@ -372,11 +406,21 @@ 

    Source code for ocrd.cli.workspace

             else:
                 srcpath = file_path
     
    +        # derive --file-id from filename if not --file-id not explicitly set
    +        if not file_id:
    +            id_field = srcpath.stem if file_path != srcpath else file_path.stem
    +            file_dict['file_id'] = safe_filename('%s_%s' % (file_dict['file_grp'], id_field))
    +        if not mimetype:
    +            try:
    +                file_dict['mimetype'] = EXT_TO_MIME[srcpath.suffix]
    +            except KeyError:
    +                log.error("Cannot guess MIME type from extension '%s' for '%s'. Set --mimetype explicitly" % (srcpath.suffix, srcpath))
    +
             # copy files if src != url
    -        if url_is_src:
    -            file_dict['url'] = str(srcpath)
    +        if local_filename_is_src:
    +            file_dict['local_filename'] = srcpath
             else:
    -            destpath = Path(workspace.directory, file_dict['url'])
    +            destpath = Path(workspace.directory, file_dict['local_filename'])
                 if srcpath != destpath and not destpath.exists():
                     log.info("cp '%s' '%s'", srcpath, destpath)
                     if not dry_run:
    @@ -402,7 +446,7 @@ 

    Source code for ocrd.cli.workspace

     @workspace_cli.command('find')
     @mets_find_options
     @click.option('-k', '--output-field', help="Output field. Repeat for multiple fields, will be joined with tab",
    -        default=['url'],
    +        default=['local_filename'],
             multiple=True,
             type=click.Choice([
                 'url',
    @@ -418,10 +462,11 @@ 

    Source code for ocrd.cli.workspace

                 'local_filename',
             ]))
     @click.option('--download', is_flag=True, help="Download found files to workspace and change location in METS file ")
    +@click.option('--undo-download', is_flag=True, help="Remove all downloaded files from the METS")
     @click.option('--wait', type=int, default=0, help="Wait this many seconds between download requests")
     @pass_workspace
    -def workspace_find(ctx, file_grp, mimetype, page_id, file_id, output_field, download, wait):
    -    """
    +def workspace_find(ctx, file_grp, mimetype, page_id, file_id, output_field, download, undo_download, wait):
    +    """
         Find files.
     
         (If any ``FILTER`` starts with ``//``, then its remainder
    @@ -431,20 +476,29 @@ 

    Source code for ocrd.cli.workspace

         output_field = [snake_to_camel.get(x, x) for x in output_field]
         modified_mets = False
         ret = list()
    -    workspace = Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename)
    +    workspace = Workspace(
    +        ctx.resolver,
    +        directory=ctx.directory,
    +        mets_basename=ctx.mets_basename,
    +        mets_server_url=ctx.mets_server_url,
    +    )
         for f in workspace.find_files(
                 file_id=file_id,
                 file_grp=file_grp,
                 mimetype=mimetype,
                 page_id=page_id,
             ):
    +        ret_entry = [f.ID if field == 'pageId' else str(getattr(f, field)) or '' for field in output_field]
             if download and not f.local_filename:
                 workspace.download_file(f)
                 modified_mets = True
                 if wait:
                     time.sleep(wait)
    -        ret.append([f.ID if field == 'pageId' else getattr(f, field) or ''
    -                    for field in output_field])
    +        if undo_download and f.local_filename:
    +            ret_entry = [f'Removed local_filename {f.local_filename}']
    +            f.local_filename = None
    +            modified_mets = True
    +        ret.append(ret_entry)
         if modified_mets:
             workspace.save_mets()
         if 'pageId' in output_field:
    @@ -466,7 +520,7 @@ 

    Source code for ocrd.cli.workspace

     @click.argument('ID', nargs=-1)
     @pass_workspace
     def workspace_remove_file(ctx, id, force, keep_file):  # pylint: disable=redefined-builtin
    -    """
    +    """
         Delete files (given by their ID attribute ``ID``).
     
         (If any ``ID`` starts with ``//``, then its remainder
    @@ -487,7 +541,7 @@ 

    Source code for ocrd.cli.workspace

     @click.argument('NEW', nargs=1)
     @pass_workspace
     def rename_group(ctx, old, new):
    -    """
    +    """
         Rename fileGrp (USE attribute ``NEW`` to ``OLD``).
         """
         workspace = Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename)
    @@ -505,7 +559,7 @@ 

    Source code for ocrd.cli.workspace

     @click.argument('GROUP', nargs=-1)
     @pass_workspace
     def remove_group(ctx, group, recursive, force, keep_files):
    -    """
    +    """
         Delete fileGrps (given by their USE attribute ``GROUP``).
     
         (If any ``GROUP`` starts with ``//``, then its remainder
    @@ -527,7 +581,7 @@ 

    Source code for ocrd.cli.workspace

     @click.option('-i', '--file-id', help="ID", metavar='FILTER')
     @pass_workspace
     def prune_files(ctx, file_grp, mimetype, page_id, file_id):
    -    """
    +    """
         Removes mets:files that point to non-existing local files
     
         (If any ``FILTER`` starts with ``//``, then its remainder
    @@ -556,7 +610,7 @@ 

    Source code for ocrd.cli.workspace

     @workspace_cli.command('list-group')
     @pass_workspace
     def list_groups(ctx):
    -    """
    +    """
         List fileGrp USE attributes
         """
         workspace = Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename)
    @@ -569,7 +623,7 @@ 

    Source code for ocrd.cli.workspace

     @workspace_cli.command('list-page')
     @pass_workspace
     def list_pages(ctx):
    -    """
    +    """
         List physical page IDs
         """
         workspace = Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename)
    @@ -582,7 +636,7 @@ 

    Source code for ocrd.cli.workspace

     @workspace_cli.command('get-id')
     @pass_workspace
     def get_id(ctx):
    -    """
    +    """
         Get METS id if any
         """
         workspace = Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename)
    @@ -598,7 +652,7 @@ 

    Source code for ocrd.cli.workspace

     @click.argument('ID')
     @pass_workspace
     def set_id(ctx, id):   # pylint: disable=redefined-builtin
    -    """
    +    """
         Set METS ID.
     
         If one of the supported identifier mechanisms is used, will set this identifier.
    @@ -627,7 +681,7 @@ 

    Source code for ocrd.cli.workspace

     @mets_find_options
     @pass_workspace
     def merge(ctx, overwrite, force, copy_files, filegrp_mapping, fileid_mapping, pageid_mapping, file_grp, file_id, page_id, mimetype, mets_path):   # pylint: disable=redefined-builtin
    -    """
    +    """
         Merges this workspace with the workspace that contains ``METS_PATH``
     
         Pass a JSON string or file to ``--fileGrp-mapping``, ``--fileId-mapping`` or ``--pageId-mapping``
    @@ -664,14 +718,14 @@ 

    Source code for ocrd.cli.workspace

     @workspace_cli.group('backup')
     @click.pass_context
     def workspace_backup_cli(ctx): # pylint: disable=unused-argument
    -    """
    +    """
         Backing and restoring workspaces - dev edition
         """
     
     @workspace_backup_cli.command('add')
     @pass_workspace
     def workspace_backup_add(ctx):
    -    """
    +    """
         Create a new backup
         """
         backup_manager = WorkspaceBackupManager(Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename, automatic_backup=ctx.automatic_backup))
    @@ -680,7 +734,7 @@ 

    Source code for ocrd.cli.workspace

     @workspace_backup_cli.command('list')
     @pass_workspace
     def workspace_backup_list(ctx):
    -    """
    +    """
         List backups
         """
         backup_manager = WorkspaceBackupManager(Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename, automatic_backup=ctx.automatic_backup))
    @@ -692,7 +746,7 @@ 

    Source code for ocrd.cli.workspace

     @click.argument('bak') #, type=click.Path(dir_okay=False, readable=True, resolve_path=True))
     @pass_workspace
     def workspace_backup_restore(ctx, choose_first, bak):
    -    """
    +    """
         Restore backup BAK
         """
         backup_manager = WorkspaceBackupManager(Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename, automatic_backup=ctx.automatic_backup))
    @@ -701,11 +755,47 @@ 

    Source code for ocrd.cli.workspace

     @workspace_backup_cli.command('undo')
     @pass_workspace
     def workspace_backup_undo(ctx):
    -    """
    +    """
         Restore the last backup
         """
         backup_manager = WorkspaceBackupManager(Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename, automatic_backup=ctx.automatic_backup))
         backup_manager.undo()
    +
    +
    +# ----------------------------------------------------------------------
    +# ocrd workspace server
    +# ----------------------------------------------------------------------
    +
    +@workspace_cli.group('server')
    +@pass_workspace
    +def workspace_serve_cli(ctx): # pylint: disable=unused-argument
    +    """Control a METS server for this workspace"""
    +    assert ctx.mets_server_url, "For METS server commands, you must provide '-U/--mets-server-url'"
    +
    +@workspace_serve_cli.command('stop')
    +@pass_workspace
    +def workspace_serve_stop(ctx): # pylint: disable=unused-argument
    +    """Stop the METS server"""
    +    workspace = Workspace(
    +        ctx.resolver,
    +        directory=ctx.directory,
    +        mets_basename=ctx.mets_basename,
    +        mets_server_url=ctx.mets_server_url,
    +    )
    +    workspace.mets.stop()
    +
    +@workspace_serve_cli.command('start')
    +@pass_workspace
    +def workspace_serve_start(ctx): # pylint: disable=unused-argument
    +    """
    +    Start a METS server
    +
    +    (For TCP backend, pass a network interface to bind to as the '-U/--mets-server-url' parameter.)
    +    """
    +    OcrdMetsServer(
    +        workspace=Workspace(ctx.resolver, directory=ctx.directory, mets_basename=ctx.mets_basename),
    +        url=ctx.mets_server_url,
    +    ).startup()
     
    @@ -758,7 +848,7 @@

    Quick search

    - + @@ -775,8 +865,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/decorators.html b/site/core/_modules/ocrd/decorators.html index 7aa1830c0..1eb2a6a90 100644 --- a/site/core/_modules/ocrd/decorators.html +++ b/site/core/_modules/ocrd/decorators.html @@ -1,18 +1,16 @@ - - + - ocrd.decorators — ocrd 2.41.0 documentation - - - - - - - + ocrd.decorators — ocrd 2.58.1 documentation + + + + + + @@ -34,10 +32,7 @@

    Source code for ocrd.decorators

    -from os.path import isfile
    -import sys
    -
    -import click
    +import sys
     
     from ocrd_utils import (
         is_local_filename,
    @@ -45,9 +40,11 @@ 

    Source code for ocrd.decorators

         set_json_key_value_overrides,
     )
     
    -from ocrd_utils import getLogger, initLogging
    +from ocrd_utils import getLogger, initLogging, parse_json_string_with_comments, config
     from ocrd_validators import WorkspaceValidator
     
    +from ocrd_network import ProcessingWorker, ProcessorServer
    +
     from ..resolver import Resolver
     from ..processor.base import run_processor
     
    @@ -56,10 +53,12 @@ 

    Source code for ocrd.decorators

     from .ocrd_cli_options import ocrd_cli_options
     from .mets_find_options import mets_find_options
     
    +SUBCOMMANDS = ['worker', 'server']
    +
     
    [docs]def ocrd_cli_wrap_processor( processorClass, - ocrd_tool=None, mets=None, + mets_server_url=None, working_dir=None, dump_json=False, dump_module_dir=False, @@ -70,6 +69,13 @@

    Source code for ocrd.decorators

         overwrite=False,
         show_resource=None,
         list_resources=False,
    +    # ocrd_network params start #
    +    subcommand=None,
    +    address=None,
    +    queue=None,
    +    log_filename=None,
    +    database=None,
    +    # ocrd_network params end #
         **kwargs
     ):
         if not sys.argv[1:]:
    @@ -81,69 +87,128 @@ 

    Source code for ocrd.decorators

                 dump_json=dump_json,
                 dump_module_dir=dump_module_dir,
                 show_help=help,
    +            subcommand=subcommand,
                 show_version=version,
                 show_resource=show_resource,
                 list_resources=list_resources
             )
             sys.exit()
    -    else:
    -        initLogging()
    -        LOG = getLogger('ocrd_cli_wrap_processor')
    -        # LOG.info('kwargs=%s' % kwargs)
    -        # Merge parameter overrides and parameters
    -        if 'parameter_override' in kwargs:
    -            set_json_key_value_overrides(kwargs['parameter'], *kwargs['parameter_override'])
    -        # TODO OCR-D/core#274
    -        # Assert -I / -O
    -        # if not kwargs['input_file_grp']:
    -        #     raise ValueError('-I/--input-file-grp is required')
    -        # if not kwargs['output_file_grp']:
    -        #     raise ValueError('-O/--output-file-grp is required')
    -        resolver = Resolver()
    -        working_dir, mets, _ = resolver.resolve_mets_arguments(working_dir, mets, None)
    -        workspace = resolver.workspace_from_url(mets, working_dir)
    -        page_id = kwargs.get('page_id')
    -        # XXX not possible while processors do not adhere to # https://github.com/OCR-D/core/issues/505
    -        # if overwrite
    -        #     if 'output_file_grp' not in kwargs or not kwargs['output_file_grp']:
    -        #         raise Exception("--overwrite requires --output-file-grp")
    -        #     LOG.info("Removing files because of --overwrite")
    -        #     for grp in kwargs['output_file_grp'].split(','):
    -        #         if page_id:
    -        #             for one_page_id in kwargs['page_id'].split(','):
    -        #                 LOG.debug("Removing files in output file group %s with page ID %s", grp, one_page_id)
    -        #                 for file in workspace.mets.find_files(pageId=one_page_id, fileGrp=grp):
    -        #                     workspace.remove_file(file, force=True, keep_file=False, page_recursive=True)
    -        #         else:
    -        #             LOG.debug("Removing all files in output file group %s ", grp)
    -        #             # TODO: can be reduced to `page_same_group=True` as soon as core#505 has landed (in all processors)
    -        #             workspace.remove_file_group(grp, recursive=True, force=True, keep_files=False, page_recursive=True, page_same_group=False)
    -        #     workspace.save_mets()
    -        # XXX While https://github.com/OCR-D/core/issues/505 is open, set 'overwrite_mode' globally on the workspace
    -        if overwrite:
    -            workspace.overwrite_mode = True
    -        report = WorkspaceValidator.check_file_grp(workspace, kwargs['input_file_grp'], '' if overwrite else kwargs['output_file_grp'], page_id)
    -        if not report.is_valid:
    -            raise Exception("Invalid input/output file grps:\n\t%s" % '\n\t'.join(report.errors))
    -        if profile or profile_file:
    -            import cProfile
    -            import pstats
    -            import io
    -            import atexit
    -            print("Profiling...")
    -            pr = cProfile.Profile()
    -            pr.enable()
    -            def exit():
    -                pr.disable()
    -                print("Profiling completed")
    -                if profile_file:
    -                    with open(profile_file, 'wb') as f:
    -                        pr.dump_stats(profile_file)
    -                s = io.StringIO()
    -                pstats.Stats(pr, stream=s).sort_stats("cumulative").print_stats()
    -                print(s.getvalue())
    -            atexit.register(exit)
    -        run_processor(processorClass, ocrd_tool, mets, workspace=workspace, **kwargs)
    + if subcommand: + # Used for checking/starting network agents for the WebAPI architecture + check_and_run_network_agent(processorClass, subcommand, address, database, queue) + elif address or queue or database: + raise ValueError(f"Subcommand options --adress --queue and --database are only valid for subcommands 'worker' or 'server'") + + + initLogging() + + LOG = getLogger('ocrd.cli_wrap_processor') + # LOG.info('kwargs=%s' % kwargs) + # Merge parameter overrides and parameters + if 'parameter_override' in kwargs: + set_json_key_value_overrides(kwargs['parameter'], *kwargs['parameter_override']) + # TODO OCR-D/core#274 + # Assert -I / -O + # if not kwargs['input_file_grp']: + # raise ValueError('-I/--input-file-grp is required') + # if not kwargs['output_file_grp']: + # raise ValueError('-O/--output-file-grp is required') + resolver = Resolver() + working_dir, mets, _, mets_server_url = \ + resolver.resolve_mets_arguments(working_dir, mets, None, mets_server_url) + workspace = resolver.workspace_from_url(mets, working_dir, mets_server_url=mets_server_url) + page_id = kwargs.get('page_id') + # XXX not possible while processors do not adhere to # https://github.com/OCR-D/core/issues/505 + # if overwrite + # if 'output_file_grp' not in kwargs or not kwargs['output_file_grp']: + # raise Exception("--overwrite requires --output-file-grp") + # LOG.info("Removing files because of --overwrite") + # for grp in kwargs['output_file_grp'].split(','): + # if page_id: + # for one_page_id in kwargs['page_id'].split(','): + # LOG.debug("Removing files in output file group %s with page ID %s", grp, one_page_id) + # for file in workspace.mets.find_files(pageId=one_page_id, fileGrp=grp): + # workspace.remove_file(file, force=True, keep_file=False, page_recursive=True) + # else: + # LOG.debug("Removing all files in output file group %s ", grp) + # # TODO: can be reduced to `page_same_group=True` as soon as core#505 has landed (in all processors) + # workspace.remove_file_group(grp, recursive=True, force=True, keep_files=False, page_recursive=True, page_same_group=False) + # workspace.save_mets() + # XXX While https://github.com/OCR-D/core/issues/505 is open, set 'overwrite_mode' globally on the workspace + if overwrite: + workspace.overwrite_mode = True + report = WorkspaceValidator.check_file_grp(workspace, kwargs['input_file_grp'], '' if overwrite else kwargs['output_file_grp'], page_id) + if not report.is_valid: + raise Exception("Invalid input/output file grps:\n\t%s" % '\n\t'.join(report.errors)) + # Set up profiling behavior from environment variables/flags + if not profile and 'CPU' in config.OCRD_PROFILE: + profile = True + if not profile_file and config.is_set('OCRD_PROFILE_FILE'): + profile_file = config.OCRD_PROFILE_FILE + if profile or profile_file: + import cProfile + import pstats + import io + import atexit + print("Profiling...") + pr = cProfile.Profile() + pr.enable() + def exit(): + pr.disable() + print("Profiling completed") + if profile_file: + with open(profile_file, 'wb') as f: + pr.dump_stats(profile_file) + s = io.StringIO() + pstats.Stats(pr, stream=s).sort_stats("cumulative").print_stats() + print(s.getvalue()) + atexit.register(exit) + run_processor(processorClass, mets_url=mets, workspace=workspace, **kwargs)
    + + +
    [docs]def check_and_run_network_agent(ProcessorClass, subcommand: str, address: str, database: str, queue: str): + """ + """ + if subcommand not in SUBCOMMANDS: + raise ValueError(f"SUBCOMMAND can only be one of {SUBCOMMANDS}") + + if not database: + raise ValueError(f"Option '--database' is invalid for subcommand {subcommand}") + + if subcommand == 'server': + if not address: + raise ValueError(f"Option '--address' required for subcommand {subcommand}") + if queue: + raise ValueError(f"Option '--queue' invalid for subcommand {subcommand}") + if subcommand == 'worker': + if address: + raise ValueError(f"Option '--address' invalid for subcommand {subcommand}") + if not queue: + raise ValueError(f"Option '--queue' required for subcommand {subcommand}") + + processor = ProcessorClass(workspace=None) + if subcommand == 'worker': + processing_worker = ProcessingWorker( + rabbitmq_addr=queue, + mongodb_addr=database, + processor_name=processor.ocrd_tool['executable'], + ocrd_tool=processor.ocrd_tool, + processor_class=ProcessorClass, + ) + # The RMQConsumer is initialized and a connection to the RabbitMQ is performed + processing_worker.connect_consumer() + # Start consuming from the queue with name `processor_name` + processing_worker.start_consuming() + elif subcommand == 'server': + # TODO: Better validate that inside the ProcessorServer itself + host, port = address.split(':') + processor_server = ProcessorServer( + mongodb_addr=database, + processor_name=processor.ocrd_tool['executable'], + processor_class=ProcessorClass, + ) + processor_server.run_server(host=host, port=int(port)) + sys.exit(0)
    @@ -196,7 +261,7 @@

    Quick search

    - + @@ -213,8 +278,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/decorators/loglevel_option.html b/site/core/_modules/ocrd/decorators/loglevel_option.html index 938c8cffd..5c85d2dd7 100644 --- a/site/core/_modules/ocrd/decorators/loglevel_option.html +++ b/site/core/_modules/ocrd/decorators/loglevel_option.html @@ -1,18 +1,16 @@ - - + - ocrd.decorators.loglevel_option — ocrd 2.41.0 documentation - - - - - - - + ocrd.decorators.loglevel_option — ocrd 2.58.1 documentation + + + + + + @@ -40,6 +38,8 @@

    Source code for ocrd.decorators.loglevel_option

    < __all__ = ['ocrd_loglevel'] def _setOverrideLogLevel(ctx, param, value): # pylint: disable=unused-argument + if value is None: # Explicitly test for None because logging.DEBUG == 0 + return setOverrideLogLevel(value) return value @@ -51,7 +51,7 @@

    Source code for ocrd.decorators.loglevel_option

    < default=None, callback=_setOverrideLogLevel)
    [docs]def ocrd_loglevel(f): - """ + """ Add an option '--log-level' to set the log level. """ loglevel_option(f) @@ -110,7 +110,7 @@

    Quick search

    - + @@ -127,8 +127,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/decorators/mets_find_options.html b/site/core/_modules/ocrd/decorators/mets_find_options.html index 8424fe327..c98aeaa48 100644 --- a/site/core/_modules/ocrd/decorators/mets_find_options.html +++ b/site/core/_modules/ocrd/decorators/mets_find_options.html @@ -1,18 +1,16 @@ - - + - ocrd.decorators.mets_find_options — ocrd 2.41.0 documentation - - - - - - - + ocrd.decorators.mets_find_options — ocrd 2.58.1 documentation + + + + + + @@ -99,7 +97,7 @@

    Quick search

    - + @@ -116,8 +114,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/decorators/ocrd_cli_options.html b/site/core/_modules/ocrd/decorators/ocrd_cli_options.html index 09039b94b..b9fb57b98 100644 --- a/site/core/_modules/ocrd/decorators/ocrd_cli_options.html +++ b/site/core/_modules/ocrd/decorators/ocrd_cli_options.html @@ -1,18 +1,16 @@ - - + - ocrd.decorators.ocrd_cli_options — ocrd 2.41.0 documentation - - - - - - - + ocrd.decorators.ocrd_cli_options — ocrd 2.58.1 documentation + + + + + + @@ -34,12 +32,19 @@

    Source code for ocrd.decorators.ocrd_cli_options

    -from click import option
    +import click
    +from click import option, Path, group, command, argument
     from .parameter_option import parameter_option, parameter_override_option
     from .loglevel_option import loglevel_option
    +from ocrd_network import (
    +    DatabaseParamType,
    +    ServerAddressParamType,
    +    QueueServerParamType
    +)
    +
     
     
    [docs]def ocrd_cli_options(f): - """ + """ Implement MP CLI. Usage:: @@ -55,24 +60,35 @@

    Source code for ocrd.decorators.ocrd_cli_options

    params = [ option('-m', '--mets', help="METS to process", default="mets.xml"), option('-w', '--working-dir', help="Working Directory"), + option('-U', '--mets-server-url', help="METS server URL. Starts with http:// then TCP, otherwise unix socket path"), # TODO OCR-D/core#274 - # option('-I', '--input-file-grp', help='File group(s) used as input. **required**'), - # option('-O', '--output-file-grp', help='File group(s) used as output. **required**'), - option('-I', '--input-file-grp', help='File group(s) used as input.', default='INPUT'), - option('-O', '--output-file-grp', help='File group(s) used as output.', default='OUTPUT'), - option('-g', '--page-id', help="ID(s) of the pages to process"), - option('--overwrite', help="Overwrite the output file group or a page range (--page-id)", is_flag=True, default=False), - option('-C', '--show-resource', help='Dump the content of processor resource RESNAME', metavar='RESNAME'), - option('-L', '--list-resources', is_flag=True, default=False, help='List names of processor resources'), + # option('-I', '--input-file-grp', required=True), + # option('-O', '--output-file-grp', required=True), + option('-I', '--input-file-grp', default='INPUT'), + option('-O', '--output-file-grp', default='OUTPUT'), + option('-g', '--page-id'), + option('--overwrite', is_flag=True, default=False), + option('--profile', is_flag=True, default=False), + option('--profile-file', type=Path(dir_okay=False, writable=True)), parameter_option, parameter_override_option, - option('-J', '--dump-json', help="Dump tool description as JSON and exit", is_flag=True, default=False), - option('-D', '--dump-module-dir', help="Print processor's 'moduledir' of resourcess", is_flag=True, default=False), loglevel_option, - option('-V', '--version', help="Show version", is_flag=True, default=False), - option('-h', '--help', help="This help message", is_flag=True, default=False), - option('--profile', help="Enable profiling", is_flag=True, default=False), - option('--profile-file', help="Write cProfile stats to this file. Implies --profile"), + option('--address', type=ServerAddressParamType()), + option('--queue', type=QueueServerParamType()), + option('--database', type=DatabaseParamType()), + option('-C', '--show-resource'), + option('-L', '--list-resources', is_flag=True, default=False), + option('-J', '--dump-json', is_flag=True, default=False), + option('-D', '--dump-module-dir', is_flag=True, default=False), + option('-h', '--help', is_flag=True, default=False), + option('-V', '--version', is_flag=True, default=False), + option('--log-filename', default=None), + # Subcommand, only used for 'worker'/'server'. Cannot be handled in + # click because processors use the @command decorator and even if they + # were using `group`, you cannot combine have a command with + # subcommands. So we have to work around that by creating a + # pseudo-subcommand handled in ocrd_cli_wrap_processor + argument('subcommand', nargs=1, required=False, type=click.Choice(['worker', 'server'])), ] for param in params: param(f) @@ -131,7 +147,7 @@

    Quick search

    - + @@ -148,8 +164,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/mets_server.html b/site/core/_modules/ocrd/mets_server.html new file mode 100644 index 000000000..1201c55cc --- /dev/null +++ b/site/core/_modules/ocrd/mets_server.html @@ -0,0 +1,432 @@ + + + + + + + ocrd.mets_server — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd.mets_server

    +"""
    +# METS server functionality
    +"""
    +import re
    +from os import environ, _exit, chmod
    +from io import BytesIO
    +from typing import Any, Dict, Optional, Union, List, Tuple
    +from pathlib import Path
    +from urllib.parse import urlparse
    +import socket
    +
    +from fastapi import FastAPI, Request, File, Form, Response
    +from fastapi.responses import JSONResponse
    +from requests import request, Session as requests_session
    +from requests.exceptions import ConnectionError
    +from requests_unixsocket import Session as requests_unixsocket_session
    +from pydantic import BaseModel, Field, ValidationError
    +
    +import uvicorn
    +
    +from ocrd_models import OcrdMets, OcrdFile, ClientSideOcrdFile, OcrdAgent, ClientSideOcrdAgent
    +from ocrd_utils import initLogging, getLogger, deprecated_alias
    +
    +#
    +# Models
    +#
    +
    +
    [docs]class OcrdFileModel(BaseModel): + file_grp : str = Field() + file_id : str = Field() + mimetype : str = Field() + page_id : Optional[str] = Field() + url : Optional[str] = Field() + local_filename : Optional[str] = Field() + +
    [docs] @staticmethod + def create(file_grp : str, file_id : str, page_id : Optional[str], url : Optional[str], local_filename : Optional[Union[str, Path]], mimetype : str): + return OcrdFileModel(file_grp=file_grp, file_id=file_id, page_id=page_id, mimetype=mimetype, url=url, local_filename=str(local_filename))
    + +
    [docs]class OcrdAgentModel(BaseModel): + name : str = Field() + type : str = Field() + role : str = Field() + otherrole : Optional[str] = Field() + othertype : str = Field() + notes : Optional[List[Tuple[Dict[str, str], Optional[str]]]] = Field() + +
    [docs] @staticmethod + def create(name : str, _type : str, role : str, otherrole : str, othertype : str, notes : List[Tuple[Dict[str, str], Optional[str]]]): + return OcrdAgentModel(name=name, type=_type, role=role, otherrole=otherrole, othertype=othertype, notes=notes)
    + + +
    [docs]class OcrdFileListModel(BaseModel): + files : List[OcrdFileModel] = Field() + +
    [docs] @staticmethod + def create(files : List[OcrdFile]): + ret = OcrdFileListModel( + files=[OcrdFileModel.create( + file_grp=f.fileGrp, + file_id=f.ID, + mimetype=f.mimetype, + page_id=f.pageId, + url=f.url, + local_filename=f.local_filename + ) for f in files]) + return ret
    + +
    [docs]class OcrdFileGroupListModel(BaseModel): + file_groups : List[str] = Field() + +
    [docs] @staticmethod + def create(file_groups : List[str]): + return OcrdFileGroupListModel(file_groups=file_groups)
    + +
    [docs]class OcrdAgentListModel(BaseModel): + agents : List[OcrdAgentModel] = Field() + +
    [docs] @staticmethod + def create(agents : List[OcrdAgent]): + return OcrdAgentListModel( + agents=[OcrdAgentModel.create(name=a.name, _type=a.type, role=a.role, otherrole=a.otherrole, othertype=a.othertype, notes=a.notes) for a in agents] + )
    + +# +# Client +# + + +
    [docs]class ClientSideOcrdMets(): + """ + Partial substitute for :py:class:`ocrd_models.ocrd_mets.OcrdMets` which provides for + :py:meth:`ocrd_models.ocrd_mets.OcrdMets.find_files`, + :py:meth:`ocrd_models.ocrd_mets.OcrdMets.find_all_files`, and + :py:meth:`ocrd_models.ocrd_mets.OcrdMets.add_agent`, + :py:meth:`ocrd_models.ocrd_mets.OcrdMets.agents`, + :py:meth:`ocrd_models.ocrd_mets.OcrdMets.add_file` to query via HTTP a + :py:class:`ocrd.mets_server.OcrdMetsServer`. + """ + + def __init__(self, url): + protocol = 'tcp' if url.startswith('http://') else 'uds' + self.log = getLogger(f'ocrd.mets_client[{url}]') + self.url = url if protocol == 'tcp' else f'http+unix://{url.replace("/", "%2F")}' + self.session = requests_session() if protocol == 'tcp' else requests_unixsocket_session() + + def __getattr__(self, name): + raise NotImplementedError(f"ClientSideOcrdMets has no access to '{name}' - try without METS server") + + def __str__(self): + return f'<ClientSideOcrdMets[url={self.url}]>' + + @property + def workspace_path(self): + return self.session.request('GET', f'{self.url}/workspace_path').text + +
    [docs] def reload(self): + return self.session.request('POST', f'{self.url}/reload').text
    + +
    [docs] @deprecated_alias(ID="file_id") + @deprecated_alias(pageId="page_id") + @deprecated_alias(fileGrp="file_grp") + def find_files(self, **kwargs): + self.log.debug('find_files(%s)', kwargs) + if 'pageId' in kwargs: + kwargs['page_id'] = kwargs.pop('pageId') + if 'ID' in kwargs: + kwargs['file_id'] = kwargs.pop('ID') + if 'fileGrp' in kwargs: + kwargs['file_grp'] = kwargs.pop('fileGrp') + r = self.session.request('GET', f'{self.url}/file', params={**kwargs}) + for f in r.json()['files']: + yield ClientSideOcrdFile(None, ID=f['file_id'], pageId=f['page_id'], fileGrp=f['file_grp'], url=f['url'], local_filename=f['local_filename'], mimetype=f['mimetype'])
    + +
    [docs] def find_all_files(self, *args, **kwargs): + return list(self.find_files(*args, **kwargs))
    + +
    [docs] def add_agent(self, *args, **kwargs): + return self.session.request('POST', f'{self.url}/agent', json=OcrdAgentModel.create(**kwargs).dict())
    + + @property + def agents(self): + agent_dicts = self.session.request('GET', f'{self.url}/agent').json()['agents'] + for agent_dict in agent_dicts: + agent_dict['_type'] = agent_dict.pop('type') + return [ClientSideOcrdAgent(None, **agent_dict) for agent_dict in agent_dicts] + + @property + def unique_identifier(self): + return self.session.request('GET', f'{self.url}/unique_identifier').text + + @property + def file_groups(self): + return self.session.request('GET', f'{self.url}/file_groups').json()['file_groups'] + +
    [docs] @deprecated_alias(pageId="page_id") + @deprecated_alias(ID="file_id") + def add_file(self, file_grp, content=None, file_id=None, url=None, local_filename=None, mimetype=None, page_id=None, **kwargs): + data = OcrdFileModel.create( + file_id=file_id, + file_grp=file_grp, + page_id=page_id, + mimetype=mimetype, + url=url, + local_filename=local_filename) + r = self.session.request('POST', f'{self.url}/file', data=data.dict()) + return ClientSideOcrdFile( + None, + ID=file_id, + fileGrp=file_grp, + url=url, + pageId=page_id, + mimetype=mimetype, + local_filename=local_filename)
    + + +
    [docs] def save(self): + self.session.request('PUT', self.url)
    + +
    [docs] def stop(self): + try: + self.session.request('DELETE', self.url) + except ConnectionError: + # Expected because we exit the process without returning + pass
    + +# +# Server +# + +
    [docs]class OcrdMetsServer(): + + def __init__(self, workspace, url): + self.workspace = workspace + self.url = url + self.is_uds = not (url.startswith('http://') or url.startswith('https://')) + self.log = getLogger(f'ocrd.mets_server[{self.url}]') + +
    [docs] def shutdown(self): + self.log.info("Shutting down METS server") + if self.is_uds: + Path(self.url).unlink() + # os._exit because uvicorn catches SystemExit raised by sys.exit + _exit(0)
    + +
    [docs] def startup(self): + self.log.info("Starting up METS server") + + workspace = self.workspace + + app = FastAPI( + title="OCR-D METS Server", + description="Providing simultaneous write-access to mets.xml for OCR-D", + ) + + @app.exception_handler(ValidationError) + async def exception_handler_validation_error(request: Request, exc: ValidationError): + return JSONResponse(status_code=400, content=exc.errors()) + + @app.exception_handler(FileExistsError) + async def exception_handler_file_exists(request: Request, exc: FileExistsError): + return JSONResponse(status_code=400, content=str(exc)) + + @app.exception_handler(re.error) + async def exception_handler_invalid_regex(request: Request, exc: re.error): + return JSONResponse(status_code=400, content=f'invalid regex: {exc}') + + @app.get("/file", response_model=OcrdFileListModel) + async def find_files( + file_grp : Optional[str] = None, + file_id : Optional[str] = None, + page_id : Optional[str] = None, + mimetype : Optional[str] = None, + local_filename : Optional[str] = None, + url : Optional[str] = None, + ): + """ + Find files in the mets + """ + found = workspace.mets.find_all_files(fileGrp=file_grp, ID=file_id, pageId=page_id, mimetype=mimetype, local_filename=local_filename, url=url) + return OcrdFileListModel.create(found) + + @app.put('/') + def save(): + return workspace.save_mets() + + @app.post('/file', response_model=OcrdFileModel) + async def add_file( + file_grp : str = Form(), + file_id : str = Form(), + page_id : Optional[str] = Form(), + mimetype : str = Form(), + url : Optional[str] = Form(None), + local_filename : Optional[str] = Form(None), + ): + """ + Add a file + """ + # Validate + file_resource = OcrdFileModel.create(file_grp=file_grp, file_id=file_id, page_id=page_id, mimetype=mimetype, url=url, local_filename=local_filename) + # Add to workspace + kwargs = file_resource.dict() + workspace.add_file(**kwargs) + return file_resource + + @app.get('/file_groups', response_model=OcrdFileGroupListModel) + async def file_groups(): + return {'file_groups': workspace.mets.file_groups} + + @app.post('/agent', response_model=OcrdAgentModel) + async def add_agent(agent : OcrdAgentModel): + kwargs = agent.dict() + kwargs['_type'] = kwargs.pop('type') + workspace.mets.add_agent(**kwargs) + return agent + + @app.get('/agent', response_model=OcrdAgentListModel) + async def agents(): + return OcrdAgentListModel.create(workspace.mets.agents) + + @app.get('/unique_identifier', response_model=str) + async def unique_identifier(): + return Response(content=workspace.mets.unique_identifier, media_type='text/plain') + + @app.get('/workspace_path', response_model=str) + async def workspace_path(): + return Response(content=workspace.directory, media_type="text/plain") + + @app.post('/reload') + async def workspace_reload_mets(): + workspace.reload_mets() + return Response(content=f'Reloaded from {workspace.directory}', media_type="text/plain") + + @app.delete('/') + async def stop(): + """ + Stop the server + """ + getLogger('ocrd.models.ocrd_mets').info('Shutting down') + workspace.save_mets() + self.shutdown() + + # ------------- # + + if self.is_uds: + # Create socket and change to world-readable and -writable to avoid + # permsission errors + self.log.debug(f"chmod 0o677 {self.url}") + server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + server.bind(self.url) # creates the socket file + server.close() + chmod(self.url, 0o666) + uvicorn_kwargs = {'uds': self.url} + else: + parsed = urlparse(self.url) + uvicorn_kwargs = {'host': parsed.hostname, 'port': parsed.port} + + self.log.debug("Starting uvicorn") + uvicorn.run(app, **uvicorn_kwargs)
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd/processor/base.html b/site/core/_modules/ocrd/processor/base.html index 06df31a30..4e3efce19 100644 --- a/site/core/_modules/ocrd/processor/base.html +++ b/site/core/_modules/ocrd/processor/base.html @@ -1,18 +1,16 @@ - - + - ocrd.processor.base — ocrd 2.41.0 documentation - - - - - - - + ocrd.processor.base — ocrd 2.58.1 documentation + + + + + + @@ -45,6 +43,7 @@

    Source code for ocrd.processor.base

         'run_processor'
     ]
     
    +from warnings import warn
     from pkg_resources import resource_filename
     from os.path import exists
     from shutil import copyfileobj
    @@ -74,7 +73,7 @@ 

    Source code for ocrd.processor.base

     from .helpers import run_cli, run_processor, generate_processor_help # pylint: disable=unused-import
     
     
    [docs]class Processor(): - """ + """ A processor is a tool that implements the uniform OCR-D command-line interface for run-time data processing. That is, it executes a single workflow step, or a combination of workflow steps, on the workspace (represented by local METS). @@ -97,12 +96,13 @@

    Source code for ocrd.processor.base

                 show_resource=None,
                 list_resources=False,
                 show_help=False,
    +            subcommand=None,
                 show_version=False,
                 dump_json=False,
                 dump_module_dir=False,
                 version=None
         ):
    -        """
    +        """
             Instantiate, but do not process. Unless ``list_resources`` or
             ``show_resource`` or ``show_help`` or ``show_version`` or
             ``dump_json`` or ``dump_module_dir`` is true, setup for processing
    @@ -128,6 +128,7 @@ 

    Source code for ocrd.processor.base

                  show_help (boolean): If true, then instead of processing, print a usage description \
                      including the standard CLI and all of this processor's ocrd-tool parameters and \
                      docstrings.
    +             subcommand (string): 'worker' or 'server', only used here for the right --help output
                  show_version (boolean): If true, then instead of processing, print information on \
                      this processor's version and OCR-D version. Exit afterwards.
                  dump_json (boolean): If true, then instead of processing, print :py:attr:`ocrd_tool` \
    @@ -163,7 +164,7 @@ 

    Source code for ocrd.processor.base

                     sys.stdout.buffer.write(fpath.read_bytes())
                 return
             if show_help:
    -            self.show_help()
    +            self.show_help(subcommand=subcommand)
                 return
             self.version = version
             if show_version:
    @@ -185,20 +186,20 @@ 

    Source code for ocrd.processor.base

                 raise Exception("Invalid parameters %s" % report.errors)
             self.parameter = parameter
     
    -
    [docs] def show_help(self): - print(generate_processor_help(self.ocrd_tool, processor_instance=self))
    +
    [docs] def show_help(self, subcommand=None): + print(generate_processor_help(self.ocrd_tool, processor_instance=self, subcommand=subcommand))
    [docs] def show_version(self): print("Version %s, ocrd/core %s" % (self.version, OCRD_VERSION))
    [docs] def verify(self): - """ + """ Verify that the :py:attr:`input_file_grp` fulfills the processor's requirements. """ return True
    [docs] def process(self): - """ + """ Process the :py:attr:`workspace` from the given :py:attr:`input_file_grp` to the given :py:attr:`output_file_grp` @@ -211,7 +212,7 @@

    Source code for ocrd.processor.base

     
     
     
    [docs] def add_metadata(self, pcgts): - """ + """ Add PAGE-XML :py:class:`~ocrd_models.ocrd_page.MetadataItemType` ``MetadataItem`` describing the processing step and runtime parameters to :py:class:`~ocrd_models.ocrd_page.PcGtsType` ``pcgts``. """ @@ -235,7 +236,7 @@

    Source code for ocrd.processor.base

                         ]))
    [docs] def resolve_resource(self, val): - """ + """ Resolve a resource name to an absolute file path with the algorithm in https://ocr-d.de/en/spec/ocrd_tool#file-parameters @@ -263,7 +264,7 @@

    Source code for ocrd.processor.base

             sys.exit(1)
    [docs] def list_all_resources(self): - """ + """ List all resources found in the filesystem and matching content-type by filename suffix """ mimetypes = get_processor_resource_types(None, self.ocrd_tool) @@ -280,7 +281,7 @@

    Source code for ocrd.processor.base

     
         @property
         def module(self):
    -        """
    +        """
             The top-level module this processor belongs to.
             """
             # find shortest prefix path that is not just a namespace package
    @@ -289,21 +290,21 @@ 

    Source code for ocrd.processor.base

                 if fqname:
                     fqname += '.'
                 fqname += name
    -            if sys.modules[fqname].__file__:
    +            if getattr(sys.modules[fqname], '__file__', None):
                     return fqname
             # fall-back
             return self.__module__
     
         @property
         def moduledir(self):
    -        """
    +        """
             The filesystem path of the module directory.
             """
             return resource_filename(self.module, '')
     
         @property
         def input_files(self):
    -        """
    +        """
             List the input files (for single-valued :py:attr:`input_file_grp`).
     
             For each physical page:
    @@ -328,7 +329,7 @@ 

    Source code for ocrd.processor.base

             return [tuples[0] for tuples in ret]
     
     
    [docs] def zip_input_files(self, require_first=True, mimetype=None, on_error='skip'): - """ + """ List tuples of input files (for multi-valued :py:attr:`input_file_grp`). Processors that expect/need multiple input file groups, @@ -379,10 +380,19 @@

    Source code for ocrd.processor.base

     
             pages = dict()
             for i, ifg in enumerate(ifgs):
    -            for file_ in sorted(self.workspace.mets.find_all_files(
    +            files_ = sorted(self.workspace.mets.find_all_files(
                         pageId=self.page_id, fileGrp=ifg, mimetype=mimetype),
                                     # sort by MIME type so PAGE comes before images
    -                                key=lambda file_: file_.mimetype):
    +                                key=lambda file_: file_.mimetype)
    +            # Warn if no files found but pageId was specified because that
    +            # might be because of invalid page_id (range)
    +            if self.page_id and not files_:
    +                msg = (f"Could not find any files for --page-id {self.page_id} - "
    +                       f"compare '{self.page_id}' with the output of 'orcd workspace list-page'.")
    +                if on_error == 'abort':
    +                    raise ValueError(msg)
    +                LOG.warning(msg)
    +            for file_ in files_:
                     if not file_.pageId:
                         continue
                     ift = pages.setdefault(file_.pageId, [None]*len(ifgs))
    @@ -490,7 +500,7 @@ 

    Quick search

    - + @@ -507,8 +517,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/processor/builtin/dummy_processor.html b/site/core/_modules/ocrd/processor/builtin/dummy_processor.html index 0d8ede3d4..c63f553f9 100644 --- a/site/core/_modules/ocrd/processor/builtin/dummy_processor.html +++ b/site/core/_modules/ocrd/processor/builtin/dummy_processor.html @@ -1,18 +1,16 @@ - - + - ocrd.processor.builtin.dummy_processor — ocrd 2.41.0 documentation - - - - - - - + ocrd.processor.builtin.dummy_processor — ocrd 2.58.1 documentation + + + + + + @@ -36,7 +34,7 @@

    Source code for ocrd.processor.builtin.dummy_processor

     # pylint: disable=missing-module-docstring,invalid-name
     from os.path import join, basename
    -from ocrd_utils.package_resources import resource_string
    +from pkg_resources import resource_string
     
     import click
     
    @@ -53,17 +51,18 @@ 

    Source code for ocrd.processor.builtin.dummy_processor

    ) from ocrd_modelfactory import page_from_file -OCRD_TOOL = parse_json_string_with_comments(resource_string(__name__, 'ocrd-tool.json').decode('utf8')) +OCRD_TOOL = parse_json_string_with_comments(resource_string(__name__, 'dummy/ocrd-tool.json').decode('utf8'))
    [docs]class DummyProcessor(Processor): - """ - Bare-bones processor that only copies mets:file from input group to output group. + """ + Bare-bones processor creates PAGE-XML and optionally copies file from input group to output group """
    [docs] def process(self): LOG = getLogger('ocrd.dummy') assert_file_grp_cardinality(self.input_file_grp, 1) assert_file_grp_cardinality(self.output_file_grp, 1) + copy_files = self.parameter['copy_files'] for input_file in self.input_files: input_file = self.workspace.download_file(input_file) file_id = make_file_id(input_file, self.output_file_grp) @@ -72,8 +71,8 @@

    Source code for ocrd.processor.builtin.dummy_processor

    pcgts = page_from_file(self.workspace.download_file(input_file)) pcgts.set_pcGtsId(file_id) self.add_metadata(pcgts) - LOG.info("cp %s %s # %s -> %s", input_file.url, local_filename, input_file.ID, file_id) if input_file.mimetype == MIMETYPE_PAGE: + LOG.info("cp %s %s # %s -> %s", input_file.url, local_filename, input_file.ID, file_id) # Source file is PAGE-XML: Write out in-memory PcGtsType self.workspace.add_file( file_id=file_id, @@ -83,24 +82,27 @@

    Source code for ocrd.processor.builtin.dummy_processor

    local_filename=local_filename, content=to_xml(pcgts).encode('utf-8')) else: - # Source file is not PAGE-XML: Copy byte-by-byte - with open(input_file.local_filename, 'rb') as f: - content = f.read() - self.workspace.add_file( - file_id=file_id, - file_grp=self.output_file_grp, - page_id=input_file.pageId, - mimetype=input_file.mimetype, - local_filename=local_filename, - content=content) + # Source file is not PAGE-XML: Copy byte-by-byte unless copy_files is False + if not copy_files: + LOG.info("Not copying %s because it is not a PAGE-XML file and copy_files was false" % input_file.local_filename) + else: + LOG.info("cp %s %s # %s -> %s", input_file.url, local_filename, input_file.ID, file_id) + with open(input_file.local_filename, 'rb') as f: + content = f.read() + self.workspace.add_file( + ID=file_id, + file_grp=self.output_file_grp, + pageId=input_file.pageId, + mimetype=input_file.mimetype, + local_filename=local_filename, + content=content) if input_file.mimetype.startswith('image/'): # write out the PAGE-XML representation for this image page_file_id = file_id + '_PAGE' pcgts.set_pcGtsId(page_file_id) - pcgts.get_Page().set_imageFilename(local_filename) + pcgts.get_Page().set_imageFilename(local_filename if copy_files else input_file.local_filename) page_filename = join(self.output_file_grp, file_id + '.xml') - LOG.info("Add PAGE-XML %s generated for %s at %s", - page_file_id, file_id, page_filename) + LOG.info("Add PAGE-XML %s generated for %s at %s", page_file_id, file_id, page_filename) self.workspace.add_file( file_id=page_file_id, file_grp=self.output_file_grp, @@ -112,7 +114,7 @@

    Source code for ocrd.processor.builtin.dummy_processor

    def __init__(self, *args, **kwargs): kwargs['ocrd_tool'] = OCRD_TOOL - kwargs['version'] = '0.0.2' + kwargs['version'] = '0.0.3' super(DummyProcessor, self).__init__(*args, **kwargs)
    @click.command() @@ -171,7 +173,7 @@

    Quick search

    - + @@ -188,8 +190,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/processor/helpers.html b/site/core/_modules/ocrd/processor/helpers.html index d67cc3a13..13e323338 100644 --- a/site/core/_modules/ocrd/processor/helpers.html +++ b/site/core/_modules/ocrd/processor/helpers.html @@ -1,18 +1,16 @@ - - + - ocrd.processor.helpers — ocrd 2.41.0 documentation - - - - - - - + ocrd.processor.helpers — ocrd 2.58.1 documentation + + + + + + @@ -37,13 +35,18 @@

    Source code for ocrd.processor.helpers

     """
     Helper methods for running and documenting processors
     """
    +from os import chdir, getcwd
     from time import perf_counter, process_time
    +from functools import lru_cache
     import json
     import inspect
    -from subprocess import run, PIPE
    +from subprocess import run
    +from typing import List
     
     from click import wrap_text
    -from ocrd_utils import getLogger
    +from ocrd.workspace import Workspace
    +from ocrd_utils import freeze_args, getLogger, config, setOverrideLogLevel, getLevelName
    +
     
     __all__ = [
         'generate_processor_help',
    @@ -51,23 +54,23 @@ 

    Source code for ocrd.processor.helpers

         'run_processor'
     ]
     
    -def _get_workspace(workspace=None, resolver=None, mets_url=None, working_dir=None):
    +
    +def _get_workspace(workspace=None, resolver=None, mets_url=None, working_dir=None, mets_server_url=None):
         if workspace is None:
             if resolver is None:
                 raise Exception("Need to pass a resolver to create a workspace")
             if mets_url is None:
                 raise Exception("Need to pass mets_url to create a workspace")
    -        workspace = resolver.workspace_from_url(mets_url, dst_dir=working_dir)
    +        workspace = resolver.workspace_from_url(mets_url, dst_dir=working_dir, mets_server_url=mets_server_url)
         return workspace
     
     
    [docs]def run_processor( processorClass, - ocrd_tool=None, mets_url=None, resolver=None, workspace=None, page_id=None, - log_level=None, # TODO actually use this! + log_level=None, input_file_grp=None, output_file_grp=None, show_resource=None, @@ -75,8 +78,10 @@

    Source code for ocrd.processor.helpers

             parameter=None,
             parameter_override=None,
             working_dir=None,
    +        mets_server_url=None,
    +        instance_caching=False
     ): # pylint: disable=too-many-locals
    -    """
    +    """
         Instantiate a Pythonic processor, open a workspace, run the processor and save the workspace.
     
         If :py:attr:`workspace` is not none, reuse that. Otherwise, instantiate an
    @@ -85,12 +90,14 @@ 

    Source code for ocrd.processor.helpers

     
         Instantiate a Python object for :py:attr:`processorClass`, passing:
         - the workspace,
    -    - :py:attr:`ocrd_tool`
         - :py:attr:`page_id`
         - :py:attr:`input_file_grp`
         - :py:attr:`output_file_grp`
         - :py:attr:`parameter` (after applying any :py:attr:`parameter_override` settings)
     
    +    Warning: Avoid setting the `instance_caching` flag to True. It may have unexpected side effects.
    +    This flag is used for an experimental feature we would like to adopt in future.
    +
         Run the processor on the workspace (creating output files in the filesystem).
     
         Finally, write back the workspace (updating the METS in the filesystem).
    @@ -98,22 +105,31 @@ 

    Source code for ocrd.processor.helpers

         Args:
             processorClass (object): Python class of the module processor.
         """
    +    if log_level:
    +        setOverrideLogLevel(log_level)
         workspace = _get_workspace(
             workspace,
             resolver,
             mets_url,
    -        working_dir
    +        working_dir,
    +        mets_server_url
         )
         log = getLogger('ocrd.processor.helpers.run_processor')
         log.debug("Running processor %s", processorClass)
    -    processor = processorClass(
    -        workspace,
    -        ocrd_tool=ocrd_tool,
    +
    +    old_cwd = getcwd()
    +    processor = get_processor(
    +        processor_class=processorClass,
    +        parameter=parameter,
    +        workspace=None,
             page_id=page_id,
             input_file_grp=input_file_grp,
             output_file_grp=output_file_grp,
    -        parameter=parameter
    +        instance_caching=instance_caching
         )
    +    processor.workspace = workspace
    +    chdir(processor.workspace.directory)
    +
         ocrd_tool = processor.ocrd_tool
         name = '%s v%s' % (ocrd_tool['executable'], processor.version)
         otherrole = ocrd_tool['steps'][0]
    @@ -121,17 +137,48 @@ 

    Source code for ocrd.processor.helpers

         log.debug("Processor instance %s (%s doing %s)", processor, name, otherrole)
         t0_wall = perf_counter()
         t0_cpu = process_time()
    -    processor.process()
    +    if any(x in config.OCRD_PROFILE for x in ['RSS', 'PSS']):
    +        backend = 'psutil_pss' if 'PSS' in config.OCRD_PROFILE else 'psutil'
    +        from memory_profiler import memory_usage
    +        from sparklines import sparklines
    +        try:
    +            mem_usage = memory_usage(proc=processor.process,
    +                                     # only run process once
    +                                     max_iterations=1,
    +                                     interval=.1, timeout=None, timestamps=True,
    +                                     # include sub-processes
    +                                     multiprocess=True, include_children=True,
    +                                     # get proportional set size instead of RSS
    +                                     backend=backend)
    +        except Exception as err:
    +            log.exception("Failure in processor '%s'" % ocrd_tool['executable'])
    +            raise err
    +        finally:
    +            chdir(old_cwd)
    +        mem_usage_values = [mem for mem, _ in mem_usage]
    +        mem_output = 'memory consumption: '
    +        mem_output += ''.join(sparklines(mem_usage_values))
    +        mem_output += ' max: %.2f MiB min: %.2f MiB' % (max(mem_usage_values), min(mem_usage_values))
    +        logProfile.info(mem_output)
    +    else:
    +        try:
    +            processor.process()
    +        except Exception as err:
    +            log.exception("Failure in processor '%s'" % ocrd_tool['executable'])
    +            raise err
    +        finally:
    +            chdir(old_cwd)
    +
         t1_wall = perf_counter() - t0_wall
         t1_cpu = process_time() - t0_cpu
         logProfile.info("Executing processor '%s' took %fs (wall) %fs (CPU)( [--input-file-grp='%s' --output-file-grp='%s' --parameter='%s' --page-id='%s']" % (
             ocrd_tool['executable'],
             t1_wall,
             t1_cpu,
    -        input_file_grp or '',
    -        output_file_grp or '',
    -        json.dumps(parameter) or '',
    -        page_id or ''
    +        processor.input_file_grp or '',
    +        processor.output_file_grp or '',
    +        json.dumps(processor.parameter) or '',
    +        processor.page_id or ''
         ))
         workspace.mets.add_agent(
             name=name,
    @@ -139,14 +186,15 @@ 

    Source code for ocrd.processor.helpers

             othertype='SOFTWARE',
             role='OTHER',
             otherrole=otherrole,
    -        notes=[({'option': 'input-file-grp'}, input_file_grp or ''),
    -               ({'option': 'output-file-grp'}, output_file_grp or ''),
    -               ({'option': 'parameter'}, json.dumps(parameter or '')),
    -               ({'option': 'page-id'}, page_id or '')]
    +        notes=[({'option': 'input-file-grp'}, processor.input_file_grp or ''),
    +               ({'option': 'output-file-grp'}, processor.output_file_grp or ''),
    +               ({'option': 'parameter'}, json.dumps(processor.parameter or '')),
    +               ({'option': 'page-id'}, processor.page_id or '')]
         )
         workspace.save_mets()
         return processor
    +
    [docs]def run_cli( executable, mets_url=None, @@ -155,12 +203,14 @@

    Source code for ocrd.processor.helpers

             page_id=None,
             overwrite=None,
             log_level=None,
    +        log_filename=None,
             input_file_grp=None,
             output_file_grp=None,
             parameter=None,
             working_dir=None,
    +        mets_server_url=None,
     ):
    -    """
    +    """
         Open a workspace and run a processor on the command line.
     
         If :py:attr:`workspace` is not none, reuse that. Otherwise, instantiate an
    @@ -183,7 +233,7 @@ 

    Source code for ocrd.processor.helpers

         args = [executable, '--working-dir', workspace.directory]
         args += ['--mets', mets_url]
         if log_level:
    -        args += ['--log-level', log_level]
    +        args += ['--log-level', log_level if isinstance(log_level, str) else getLevelName(log_level)]
         if page_id:
             args += ['--page-id', page_id]
         if input_file_grp:
    @@ -194,92 +244,203 @@ 

    Source code for ocrd.processor.helpers

             args += ['--parameter', parameter]
         if overwrite:
             args += ['--overwrite']
    +    if mets_server_url:
    +        args += ['--mets-server-url', mets_server_url]
         log = getLogger('ocrd.processor.helpers.run_cli')
         log.debug("Running subprocess '%s'", ' '.join(args))
    -    result = run(args, check=False)
    +    if not log_filename:
    +        result = run(args, check=False)
    +    else:
    +        with open(log_filename, 'a') as file_desc:
    +            result = run(args, check=False, stdout=file_desc, stderr=file_desc)
         return result.returncode
    -
    [docs]def generate_processor_help(ocrd_tool, processor_instance=None): - """Generate a string describing the full CLI of this processor including params. - + +
    [docs]def generate_processor_help(ocrd_tool, processor_instance=None, subcommand=None): + """Generate a string describing the full CLI of this processor including params. + Args: ocrd_tool (dict): this processor's ``tools`` section of the module's ``ocrd-tool.json`` processor_instance (object, optional): the processor implementation (for adding any module/class/function docstrings) + subcommand (string): 'worker' or 'server' """ - parameter_help = '' - if 'parameters' not in ocrd_tool or not ocrd_tool['parameters']: - parameter_help = ' NONE\n' - else: - def wrap(s): - return wrap_text(s, initial_indent=' '*3, - subsequent_indent=' '*4, - width=72, preserve_paragraphs=True) - for param_name, param in ocrd_tool['parameters'].items(): - parameter_help += wrap('"%s" [%s%s]' % ( - param_name, - param['type'], - ' - REQUIRED' if 'required' in param and param['required'] else - ' - %s' % json.dumps(param['default']) if 'default' in param else '')) - parameter_help += '\n ' + wrap(param['description']) - if 'enum' in param: - parameter_help += '\n ' + wrap('Possible values: %s' % json.dumps(param['enum'])) - parameter_help += "\n" doc_help = '' if processor_instance: module = inspect.getmodule(processor_instance) if module and module.__doc__: - doc_help += '\n' + inspect.cleandoc(module.__doc__) + doc_help += '\n' + inspect.cleandoc(module.__doc__) + '\n' if processor_instance.__doc__: - doc_help += '\n' + inspect.cleandoc(processor_instance.__doc__) + doc_help += '\n' + inspect.cleandoc(processor_instance.__doc__) + '\n' if processor_instance.process.__doc__: - doc_help += '\n' + inspect.cleandoc(processor_instance.process.__doc__) + doc_help += '\n' + inspect.cleandoc(processor_instance.process.__doc__) + '\n' if doc_help: doc_help = '\n\n' + wrap_text(doc_help, width=72, initial_indent=' > ', subsequent_indent=' > ', preserve_paragraphs=True) - return ''' -Usage: %s [OPTIONS] - - %s%s - -Options: + subcommands = '''\ + worker Start a processing worker rather than do local processing + server Start a processor server rather than do local processing +''' + + processing_worker_options = '''\ + --queue The RabbitMQ server address in format + "amqp://{user}:{pass}@{host}:{port}/{vhost}" + [amqp://admin:admin@localhost:5672] + --database The MongoDB server address in format + "mongodb://{host}:{port}" + [mongodb://localhost:27018] + --log-filename Filename to redirect STDOUT/STDERR to, + if specified. +''' + + processing_server_options = '''\ + --address The Processor server address in format + "{host}:{port}" + --database The MongoDB server address in format + "mongodb://{host}:{port}" + [mongodb://localhost:27018] +''' + + processing_options = '''\ + -m, --mets URL-PATH URL or file path of METS to process [./mets.xml] + -w, --working-dir PATH Working directory of local workspace [dirname(URL-PATH)] -I, --input-file-grp USE File group(s) used as input -O, --output-file-grp USE File group(s) used as output - -g, --page-id ID Physical page ID(s) to process + -g, --page-id ID Physical page ID(s) to process instead of full document [] --overwrite Remove existing output pages/images - (with --page-id, remove only those) + (with "--page-id", remove only those) --profile Enable profiling - --profile-file Write cProfile stats to this file. Implies --profile + --profile-file PROF-PATH Write cProfile stats to PROF-PATH. Implies "--profile" -p, --parameter JSON-PATH Parameters, either verbatim JSON string or JSON file path -P, --param-override KEY VAL Override a single JSON object key-value pair, taking precedence over --parameter - -m, --mets URL-PATH URL or file path of METS to process - -w, --working-dir PATH Working directory of local workspace + -U, --mets-server-url URL URL of a METS Server for parallel incremental access to METS + If URL starts with http:// start an HTTP server there, + otherwise URL is a path to an on-demand-created unix socket -l, --log-level [OFF|ERROR|WARN|INFO|DEBUG|TRACE] - Log level + Override log level globally [INFO] +''' + + information_options = '''\ -C, --show-resource RESNAME Dump the content of processor resource RESNAME -L, --list-resources List names of processor resources - -J, --dump-json Dump tool description as JSON and exit - -D, --dump-module-dir Output the 'module' directory with resources for this processor - -h, --help This help message + -J, --dump-json Dump tool description as JSON + -D, --dump-module-dir Show the 'module' resource location path for this processor + -h, --help Show this message -V, --version Show version +''' + + parameter_help = '' + if 'parameters' not in ocrd_tool or not ocrd_tool['parameters']: + parameter_help = ' NONE\n' + else: + def wrap(s): + return wrap_text(s, initial_indent=' '*3, + subsequent_indent=' '*4, + width=72, preserve_paragraphs=True) + for param_name, param in ocrd_tool['parameters'].items(): + parameter_help += wrap('"%s" [%s%s]' % ( + param_name, + param['type'], + ' - REQUIRED' if 'required' in param and param['required'] else + ' - %s' % json.dumps(param['default']) if 'default' in param else '')) + parameter_help += '\n ' + wrap(param['description']) + if 'enum' in param: + parameter_help += '\n ' + wrap('Possible values: %s' % json.dumps(param['enum'])) + parameter_help += "\n" + + if not subcommand: + return f'''\ +Usage: {ocrd_tool['executable']} [worker|server] [OPTIONS] + {ocrd_tool['description']}{doc_help} + +Subcommands: +{subcommands} +Options for processing: +{processing_options} +Options for information: +{information_options} Parameters: -%s -Default Wiring: - %s -> %s - -''' % ( - ocrd_tool['executable'], - ocrd_tool['description'], - doc_help, - parameter_help, - ocrd_tool.get('input_file_grp', 'NONE'), - ocrd_tool.get('output_file_grp', 'NONE') -)
    +{parameter_help} +''' + elif subcommand == 'worker': + return f'''\ +Usage: {ocrd_tool['executable']} worker [OPTIONS] + + Run {ocrd_tool['executable']} as a processing worker. + + {ocrd_tool['description']}{doc_help} + +Options: +{processing_worker_options} +''' + elif subcommand == 'server': + return f'''\ +Usage: {ocrd_tool['executable']} server [OPTIONS] + + Run {ocrd_tool['executable']} as a processor sever. + + {ocrd_tool['description']}{doc_help} + +Options: +{processing_server_options} +''' + else: + pass
    + + +# Taken from https://github.com/OCR-D/core/pull/884 +@freeze_args +@lru_cache(maxsize=config.OCRD_MAX_PROCESSOR_CACHE) +def get_cached_processor(parameter: dict, processor_class): + """ + Call this function to get back an instance of a processor. + The results are cached based on the parameters. + Args: + parameter (dict): a dictionary of parameters. + processor_class: the concrete `:py:class:~ocrd.Processor` class. + Returns: + When the concrete class of the processor is unknown, `None` is returned. + Otherwise, an instance of the `:py:class:~ocrd.Processor` is returned. + """ + if processor_class: + dict_params = dict(parameter) if parameter else None + return processor_class(workspace=None, parameter=dict_params) + return None + + +def get_processor( + processor_class, + parameter: dict, + workspace: Workspace = None, + page_id: str = None, + input_file_grp: List[str] = None, + output_file_grp: List[str] = None, + instance_caching: bool = False, +): + if processor_class: + if instance_caching: + cached_processor = get_cached_processor( + parameter=parameter, + processor_class=processor_class + ) + cached_processor.workspace = workspace + cached_processor.page_id = page_id + cached_processor.input_file_grp = input_file_grp + cached_processor.output_file_grp = output_file_grp + return cached_processor + return processor_class( + workspace=workspace, + page_id=page_id, + input_file_grp=input_file_grp, + output_file_grp=output_file_grp, + parameter=parameter + ) + raise ValueError("Processor class is not known")
    @@ -332,7 +493,7 @@

    Quick search

    - + @@ -349,8 +510,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/resolver.html b/site/core/_modules/ocrd/resolver.html index d5c2d4a04..37fa52dd6 100644 --- a/site/core/_modules/ocrd/resolver.html +++ b/site/core/_modules/ocrd/resolver.html @@ -1,18 +1,16 @@ - - + - ocrd.resolver — ocrd 2.41.0 documentation - - - - - - - + ocrd.resolver — ocrd 2.58.1 documentation + + + + + + @@ -39,9 +37,11 @@

    Source code for ocrd.resolver

     from warnings import warn
     
     import requests
    +from requests.adapters import HTTPAdapter, Retry
     
     from ocrd.constants import TMP_PREFIX
     from ocrd_utils import (
    +    config,
         getLogger,
         is_local_filename,
         get_local_filename,
    @@ -55,28 +55,37 @@ 

    Source code for ocrd.resolver

     from ocrd_models.utils import handle_oai_response
     
     
    [docs]class Resolver(): - """ + """ Handle uploads, downloads, repository access, and manage temporary directories """ -
    [docs] def download_to_directory(self, directory, url, basename=None, if_exists='skip', subdir=None): - """ - Download a file to a directory. +
    [docs] def download_to_directory(self, directory, url, basename=None, if_exists='skip', subdir=None, retries=None, timeout=None): + """ + Download a URL ``url`` to a local file in ``directory``. - Early Shortcut: If `url` is a local file and that file is already in the directory, keep it there. + If ``url`` looks like a file path, check whether that exists. + If it does exist and is within ``directory` already, return early. + If it does exist but is outside of ``directory``. copy it. + If ``url` does not appear to be a file path, try downloading via HTTP, retrying ``retries`` times with timeout ``timeout`` between calls. - If `basename` is not given but subdir is, assume user knows what she's doing and - use last URL segment as the basename. + If ``basename`` is not given but ``subdir`` is, set ``basename`` to the last path segment of ``url``. - If `basename` is not given and no subdir is given, use the alnum characters in the URL as the basename. + If the target file already exists within ``directory``, behavior depends on ``if_exists``: + - ``skip`` (default): do nothing and return early. Note that this + - ``overwrite``: overwrite the existing file + - ``raise``: raise a ``FileExistsError`` Args: directory (string): Directory to download files to - basename (string, None): basename part of the filename on disk. url (string): URL to download from - if_exists (string, "skip"): What to do if target file already exists. \ + + Keyword Args: + basename (string, None): basename part of the filename on disk. Defaults to last path segment of ``url`` if unset. + if_exists (string, "skip"): What to do if target file already exists. One of ``skip`` (default), ``overwrite`` or ``raise`` - subdir (string, None): Subdirectory to create within the directory. Think ``mets:fileGrp``. + subdir (string, None): Subdirectory to create within the directory. Think ``mets:fileGrp[@USE]``. + retries (int, None): Number of retries to attempt on network failure. + timeout (tuple, None): Timeout in seconds for establishing a connection and reading next chunk of data. Returns: Local filename string, *relative* to directory @@ -85,67 +94,106 @@

    Source code for ocrd.resolver

             log.debug("directory=|%s| url=|%s| basename=|%s| if_exists=|%s| subdir=|%s|", directory, url, basename, if_exists, subdir)
     
             if not url:
    -            raise Exception("'url' must be a string")
    +            raise ValueError(f"'url' must be a non-empty string, not '{url}'") # actually Path also ok
             if not directory:
    -            raise Exception("'directory' must be a string")  # actually Path would also work
    +            raise ValueError(f"'directory' must be a non-empty string, not '{url}'")  # actually Path would also work
     
    +        url = str(url)
             directory = Path(directory)
             directory.mkdir(parents=True, exist_ok=True)
    -        directory = str(directory.resolve())
     
             subdir_path = Path(subdir if subdir else '')
             basename_path = Path(basename if basename else nth_url_segment(url))
    -        ret = str(Path(subdir_path, basename_path))
    +        ret = Path(subdir_path, basename_path)
             dst_path = Path(directory, ret)
     
    -        #  log.info("\n\tdst_path='%s \n\turl=%s", dst_path, url)
    -        #  print('url=%s', url)
    -        #  print('directory=%s', directory)
    -        #  print('subdir_path=%s', subdir_path)
    -        #  print('basename_path=%s', basename_path)
    -        #  print('ret=%s', ret)
    -        #  print('dst_path=%s', dst_path)
    +        # log.info("\n\tdst_path='%s \n\turl=%s", dst_path, url)
    +        # print(f'>>> url={url}')
    +        # print(f'>>> directory={directory}')
    +        # print(f'>>> subdir_path={subdir_path}')
    +        # print(f'>>> basename_path={basename_path}')
    +        # print(f'>>> dst_path={dst_path}')
    +        # print(f'>>> ret={ret}')
     
             src_path = None
             if is_local_filename(url):
                 try:
    -                # XXX this raises FNFE in Python 3.5 if src_path doesn't exist but not 3.6+
                     src_path = Path(get_local_filename(url)).resolve()
                 except FileNotFoundError as e:
                     log.error("Failed to resolve URL locally: %s --> '%s' which does not exist" % (url, src_path))
                     raise e
                 if not src_path.exists():
    -                raise FileNotFoundError("File path passed as 'url' to download_to_directory does not exist: %s" % url)
    +                raise FileNotFoundError(f"File path passed as 'url' to download_to_directory does not exist: '{url}")
                 if src_path == dst_path:
                     log.debug("Stop early, src_path and dst_path are the same: '%s' (url: '%s')" % (src_path, url))
    -                return ret
    +                return str(ret)
     
             # Respect 'if_exists' arg
             if dst_path.exists():
                 if if_exists == 'skip':
    -                return ret
    +                return str(ret)
                 if if_exists == 'raise':
    -                raise FileExistsError("File already exists and if_exists == 'raise': %s" % (dst_path))
    +                raise FileExistsError(f"File already exists and if_exists == 'raise': {dst_path}")
     
             # Create dst_path parent dir
             dst_path.parent.mkdir(parents=True, exist_ok=True)
     
             # Copy files or download remote assets
             if src_path:
    +            # src_path set, so it is a file source, we can copy directly
                 log.debug("Copying file '%s' to '%s'", src_path, dst_path)
                 dst_path.write_bytes(src_path.read_bytes())
             else:
    +            # src_path not set, it's an http URL, try to download
                 log.debug("Downloading URL '%s' to '%s'", url, dst_path)
    -            response = requests.get(url)
    -            if response.status_code != 200:
    -                raise Exception("HTTP request failed: %s (HTTP %d)" % (url, response.status_code))
    +            if not retries and config.is_set('OCRD_DOWNLOAD_RETRIES'):
    +                retries = config.OCRD_DOWNLOAD_RETRIES
    +            if timeout is None and config.is_set('OCRD_DOWNLOAD_TIMEOUT'):
    +                timeout = config.OCRD_DOWNLOAD_TIMEOUT
    +            session = requests.Session()
    +            retries = Retry(total=retries or 0,
    +                            status_forcelist=[
    +                                # probably too wide (only transient failures):
    +                                408, # Request Timeout
    +                                409, # Conflict
    +                                412, # Precondition Failed
    +                                417, # Expectation Failed
    +                                423, # Locked
    +                                424, # Fail
    +                                425, # Too Early
    +                                426, # Upgrade Required
    +                                428, # Precondition Required
    +                                429, # Too Many Requests
    +                                440, # Login Timeout
    +                                500, # Internal Server Error
    +                                503, # Service Unavailable
    +                                504, # Gateway Timeout
    +                                509, # Bandwidth Limit Exceeded
    +                                529, # Site Overloaded
    +                                598, # Proxy Read Timeout
    +                                599, # Proxy Connect Timeout
    +                    ])
    +            adapter = HTTPAdapter(max_retries=retries)
    +            session.mount('http://', adapter)
    +            session.mount('https://', adapter)
    +            response = session.get(url, timeout=timeout)
    +            response.raise_for_status()
                 contents = handle_oai_response(response)
                 dst_path.write_bytes(contents)
     
    -        return ret
    - -
    [docs] def workspace_from_url(self, mets_url, dst_dir=None, clobber_mets=False, mets_basename=None, download=False, src_baseurl=None): - """ + return str(ret)
    + +
    [docs] def workspace_from_url( + self, + mets_url, + dst_dir=None, + clobber_mets=False, + mets_basename=None, + download=False, + src_baseurl=None, + mets_server_url=None, + ): + """ Create a workspace from a METS by URL (i.e. clone if :py:attr:`mets_url` is remote or :py:attr:`dst_dir` is given). Arguments: @@ -198,10 +246,9 @@

    Source code for ocrd.resolver

     
             log.debug("workspace_from_url\nmets_basename='%s'\nmets_url='%s'\nsrc_baseurl='%s'\ndst_dir='%s'",
                 mets_basename, mets_url, src_baseurl, dst_dir)
    -
             self.download_to_directory(dst_dir, mets_url, basename=mets_basename, if_exists='overwrite' if clobber_mets else 'skip')
     
    -        workspace = Workspace(self, dst_dir, mets_basename=mets_basename, baseurl=src_baseurl)
    +        workspace = Workspace(self, dst_dir, mets_basename=mets_basename, baseurl=src_baseurl, mets_server_url=mets_server_url)
     
             if download:
                 for f in workspace.mets.find_files():
    @@ -210,7 +257,7 @@ 

    Source code for ocrd.resolver

             return workspace
    [docs] def workspace_from_nothing(self, directory, mets_basename='mets.xml', clobber_mets=False): - """ + """ Create an empty workspace. Arguments: @@ -237,12 +284,14 @@

    Source code for ocrd.resolver

     
             return Workspace(self, directory, mets, mets_basename=mets_basename)
    -
    [docs] def resolve_mets_arguments(self, directory, mets_url, mets_basename): - """ - Resolve the ``--mets``, ``--mets-basename`` and `--directory`` argument - into a coherent set of arguments according to https://github.com/OCR-D/core/issues/517 +
    [docs] def resolve_mets_arguments(self, directory, mets_url, mets_basename, mets_server_url): + """ + Resolve the ``--mets``, ``--mets-basename``, `--directory``, + ``--mets-server-url``, arguments into a coherent set of arguments + according to https://github.com/OCR-D/core/issues/517 """ log = getLogger('ocrd.resolver.resolve_mets_arguments') + mets_is_remote = mets_url and (mets_url.startswith('http://') or mets_url.startswith('https://')) # XXX we might want to be more strict like this but it might break # legacy code @@ -285,7 +334,7 @@

    Source code for ocrd.resolver

                         if not is_file_in_directory(directory, mets_url):
                             raise ValueError("--mets '%s' has a directory part inconsistent with --directory '%s'" % (mets_url, directory))
     
    -        return str(Path(directory).resolve()), str(mets_url), str(mets_basename)
    + return str(Path(directory).resolve()), str(mets_url), str(mets_basename), mets_server_url
    @@ -340,7 +389,7 @@

    Quick search

    - + @@ -357,8 +406,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/resource_manager.html b/site/core/_modules/ocrd/resource_manager.html index 25fd0e495..6175b22a7 100644 --- a/site/core/_modules/ocrd/resource_manager.html +++ b/site/core/_modules/ocrd/resource_manager.html @@ -1,18 +1,16 @@ - - + - ocrd.resource_manager — ocrd 2.41.0 documentation - - - - - - - + ocrd.resource_manager — ocrd 2.58.1 documentation + + + + + + @@ -36,16 +34,17 @@

    Source code for ocrd.resource_manager

     from pathlib import Path
     from os.path import join
    -from json import loads
    -from os import environ, listdir, getcwd, path
    +from os import environ, listdir, getcwd, path, unlink
    +from shutil import copytree, rmtree, copy
     from fnmatch import filter as apply_glob
    -from shutil import copytree
     from datetime import datetime
     from tarfile import open as open_tarfile
     from urllib.parse import urlparse, unquote
    -from subprocess import run, PIPE
    +from zipfile import ZipFile
     
     import requests
    +from gdown.parse_url import parse_url as gparse_url
    +from gdown.download import get_url_from_gdrive_confirmation
     from yaml import safe_load, safe_dump
     
     # https://github.com/OCR-D/core/issues/867
    @@ -55,13 +54,13 @@ 

    Source code for ocrd.resource_manager

         yaml.constructor.SafeConstructor.yaml_constructors[u'tag:yaml.org,2002:str']
     
     from ocrd_validators import OcrdResourceListValidator
    -from ocrd_utils import getLogger, directory_size, get_moduledir
    +from ocrd_utils import getLogger, directory_size, get_moduledir, EXT_TO_MIME, nth_url_segment, guess_media_type, config
     from ocrd_utils.os import get_processor_resource_types, list_all_resources, pushd_popd, get_ocrd_tool_json
     from .constants import RESOURCE_LIST_FILENAME, RESOURCE_USER_LIST_COMMENT
     
     
    [docs]class OcrdResourceManager(): - """ + """ Managing processor resources """ def __init__(self, userdir=None, xdg_config_home=None, xdg_data_home=None, skip_init=False): @@ -84,27 +83,19 @@

    Source code for ocrd.resource_manager

         @property
         def userdir(self):
             if not self._userdir:
    -            self._userdir = path.expanduser('~')
    -            if 'HOME' in environ and environ['HOME'] != path.expanduser('~'):
    -                self._userdir = environ['HOME']
    +            self._userdir = config.HOME
             return self._userdir
     
         @property
         def xdg_data_home(self):
             if not self._xdg_data_home:
    -            if 'XDG_DATA_HOME' in environ:
    -                self._xdg_data_home = environ['XDG_DATA_HOME']
    -            else:
    -                self._xdg_data_home = join(self.userdir, '.local', 'share')
    +            self._xdg_data_home = config.XDG_DATA_HOME
             return self._xdg_data_home
     
         @property
         def xdg_config_home(self):
             if not self._xdg_config_home:
    -            if 'XDG_CONFIG_HOME' in environ:
    -                self._xdg_config_home = environ['XDG_CONFIG_HOME']
    -            else:
    -                self._xdg_config_home = join(self.userdir, '.config')
    +            self._xdg_config_home = config.XDG_CONFIG_HOME
             return self._xdg_config_home
     
     
    [docs] def save_user_list(self, database=None): @@ -133,7 +124,7 @@

    Source code for ocrd.resource_manager

             return database
    [docs] def list_available(self, executable=None, dynamic=True, name=None, database=None, url=None): - """ + """ List models available for download by processor """ if not database: @@ -148,7 +139,7 @@

    Source code for ocrd.resource_manager

                         for resdict in ocrd_tool.get('resources', ()):
                             if exec_path.name not in database:
                                 database[exec_path.name] = []
    -                        database[exec_path.name].append(resdict)
    +                        database[exec_path.name].insert(0, resdict)
                 database = self._dedup_database(database)
             found = False
             ret = []
    @@ -168,7 +159,7 @@ 

    Source code for ocrd.resource_manager

             return ret
    [docs] def list_installed(self, executable=None): - """ + """ List installed resources, matching with registry by ``name`` """ ret = [] @@ -194,18 +185,28 @@

    Source code for ocrd.resource_manager

                         if res_filename.is_file() and ['text/directory'] == mimetypes:
                             continue
                     res_name = res_filename.name
    +                res_type = 'file' if res_filename.is_file() else 'directory'
    +                res_size = res_filename.stat().st_size if res_filename.is_file() else directory_size(res_filename)
                     resdict_list = [x for x in self.database.get(this_executable, []) if x['name'] == res_name]
                     if resdict_list:
                         resdict = resdict_list[0]
    +                elif str(res_filename.parent) == moduledir:
    +                    resdict = {
    +                        'name': res_name, 
    +                        'url': str(res_filename), 
    +                        'description': 'Found at module', 
    +                        'type': res_type,
    +                        'size': res_size
    +                    }
                     else:
    -                    resdict = self.add_to_user_database(this_executable, res_filename)
    +                    resdict = self.add_to_user_database(this_executable, res_filename, resource_type=res_type)
                     resdict['path'] = str(res_filename)
                     reslist.append(resdict)
                 ret.append((this_executable, reslist))
             return ret
    [docs] def add_to_user_database(self, executable, res_filename, url=None, resource_type='file'): - """ + """ Add a stub entry to the user resource.yml """ res_name = Path(res_filename).name @@ -262,8 +263,18 @@

    Source code for ocrd.resource_manager

             log = getLogger('ocrd.resource_manager._download_impl')
             log.info("Downloading %s to %s" % (url, filename))
             with open(filename, 'wb') as f:
    +            gdrive_file_id, is_gdrive_download_link = gparse_url(url, warning=False)
    +            if gdrive_file_id:
    +                if not is_gdrive_download_link:
    +                    url = "https://drive.google.com/uc?id={id}".format(id=gdrive_file_id)
    +                try:
    +                    with requests.get(url, stream=True) as r:
    +                        if "Content-Disposition" not in r.headers:
    +                            url = get_url_from_gdrive_confirmation(r.text)
    +                except RuntimeError as e:
    +                    log.warning("Cannot unwrap Google Drive URL: ", e)
                 with requests.get(url, stream=True) as r:
    -                total = size if size else int(r.headers.get('content-length'))
    +                r.raise_for_status()
                     for data in r.iter_content(chunk_size=4096):
                         if progress_cb:
                             progress_cb(len(data))
    @@ -309,9 +320,8 @@ 

    Source code for ocrd.resource_manager

             resource_type='file',
             path_in_archive='.',
             progress_cb=None,
    -        size=None,
         ):
    -        """
    +        """
             Download a resource by URL
             """
             log = getLogger('ocrd.resource_manager.download')
    @@ -321,9 +331,15 @@ 

    Source code for ocrd.resource_manager

                 name = Path(unquote(url_parsed.path)).name
             fpath = Path(destdir, name)
             is_url = url.startswith('https://') or url.startswith('http://')
    -        if fpath.exists() and not overwrite:
    -            log.info("%s to be %s to %s which already exists and overwrite is False" % (url, 'downloaded' if is_url else 'copied', fpath))
    -            return fpath
    +        if fpath.exists():
    +            if not overwrite:
    +                raise FileExistsError("%s %s already exists but --overwrite is not set" % ('Directory' if fpath.is_dir() else 'File', fpath))
    +            if fpath.is_dir():
    +                log.info("Removing existing target directory {fpath}")
    +                rmtree(str(fpath))
    +            else:
    +                log.info("Removing existing target file {fpath}")
    +                unlink(str(fpath))
             destdir.mkdir(parents=True, exist_ok=True)
             if resource_type in ('file', 'directory'):
                 if is_url:
    @@ -331,22 +347,33 @@ 

    Source code for ocrd.resource_manager

                 else:
                     self._copy_impl(url, fpath, progress_cb)
             elif resource_type == 'archive':
    +            archive_fname = 'download.tar.xx'
                 with pushd_popd(tempdir=True) as tempdir:
                     if is_url:
    -                    self._download_impl(url, 'download.tar.xx', progress_cb, size)
    +                    self._download_impl(url, archive_fname, progress_cb)
                     else:
    -                    self._copy_impl(url, 'download.tar.xx', progress_cb)
    +                    self._copy_impl(url, archive_fname, progress_cb)
                     Path('out').mkdir()
                     with pushd_popd('out'):
    -                    log.info("Extracting archive to %s/out" % tempdir)
    -                    with open_tarfile('../download.tar.xx', 'r:*') as tar:
    -                        tar.extractall()
    +                    mimetype = guess_media_type(f'../{archive_fname}', fallback='application/octet-stream')
    +                    log.info("Extracting %s archive to %s/out" % (mimetype, tempdir))
    +                    if mimetype == 'application/zip':
    +                        with ZipFile(f'../{archive_fname}', 'r') as zipf:
    +                            zipf.extractall()
    +                    elif mimetype in ('application/gzip', 'application/x-xz'):
    +                        with open_tarfile(f'../{archive_fname}', 'r:*') as tar:
    +                            tar.extractall()
    +                    else:
    +                        raise RuntimeError("Unable to handle extraction of %s archive %s" % (mimetype, url))
                         log.info("Copying '%s' from archive to %s" % (path_in_archive, fpath))
    -                    copytree(path_in_archive, str(fpath))
    +                    if Path(path_in_archive).is_dir():
    +                        copytree(path_in_archive, str(fpath))
    +                    else:
    +                        copy(path_in_archive, str(fpath))
             return fpath
    def _dedup_database(self, database=None, dedup_key='name'): - """ + """ Deduplicate resources by name """ if not database: @@ -410,7 +437,7 @@

    Quick search

    - + @@ -427,8 +454,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/task_sequence.html b/site/core/_modules/ocrd/task_sequence.html index 2b0f39865..85154fae5 100644 --- a/site/core/_modules/ocrd/task_sequence.html +++ b/site/core/_modules/ocrd/task_sequence.html @@ -1,18 +1,16 @@ - - + - ocrd.task_sequence — ocrd 2.41.0 documentation - - - - - - - + ocrd.task_sequence — ocrd 2.58.1 documentation + + + + + + @@ -244,7 +242,7 @@

    Quick search

    - + @@ -261,8 +259,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/workspace.html b/site/core/_modules/ocrd/workspace.html index 00233b148..18c1ff70a 100644 --- a/site/core/_modules/ocrd/workspace.html +++ b/site/core/_modules/ocrd/workspace.html @@ -1,18 +1,16 @@ - - + - ocrd.workspace — ocrd 2.41.0 documentation - - - - - - - + ocrd.workspace — ocrd 2.58.1 documentation + + + + + + @@ -78,6 +76,7 @@

    Source code for ocrd.workspace

     )
     
     from .workspace_backup import WorkspaceBackupManager
    +from .mets_server import ClientSideOcrdMets
     
     __all__ = ['Workspace']
     
    @@ -90,7 +89,7 @@ 

    Source code for ocrd.workspace

     
     
     
    [docs]class Workspace(): - """ + """ A workspace is a temporary directory set up for a processor. It's the interface to the METS/PAGE XML and delegates download and upload to the :py:class:`ocrd.resolver.Resolver`. @@ -105,20 +104,32 @@

    Source code for ocrd.workspace

             baseurl (string) : Base URL to prefix to relative URL.
         """
     
    -    def __init__(self, resolver, directory, mets=None, mets_basename='mets.xml', automatic_backup=False, baseurl=None):
    +    def __init__(self, resolver, directory, mets=None, mets_basename='mets.xml', automatic_backup=False, baseurl=None, mets_server_url=None):
             self.resolver = resolver
             self.directory = directory
             self.mets_target = str(Path(directory, mets_basename))
             self.overwrite_mode = False
    +        self.is_remote = bool(mets_server_url)
             if mets is None:
    -            mets = OcrdMets(filename=self.mets_target)
    +            if self.is_remote:
    +                mets = ClientSideOcrdMets(mets_server_url)
    +                if mets.workspace_path != self.directory:
    +                    raise ValueError(f"METS server {mets_server_url} workspace directory {mets.workspace_path} differs "
    +                            "from local workspace directory {self.directory}. These are not the same workspaces.")
    +            else:
    +                mets = OcrdMets(filename=self.mets_target)
             self.mets = mets
    -        self.automatic_backup = automatic_backup
    +        if automatic_backup:
    +            self.automatic_backup = WorkspaceBackupManager(self)
    +            self.automatic_backup.add()
    +        else:
    +            self.automatic_backup = None
             self.baseurl = baseurl
             #  print(mets.to_xml(xmllint=True).decode('utf-8'))
     
         def __str__(self):
    -        return 'Workspace[directory=%s, baseurl=%s, file_groups=%s, files=%s]' % (
    +        return 'Workspace[remote=%s, directory=%s, baseurl=%s, file_groups=%s, files=%s]' % (
    +            not not self.is_remote,
                 self.directory,
                 self.baseurl,
                 self.mets.file_groups,
    @@ -126,7 +137,7 @@ 

    Source code for ocrd.workspace

             )
     
     
    [docs] def reload_mets(self): - """ + """ Reload METS from the filesystem. """ self.mets = OcrdMets(filename=self.mets_target)
    @@ -136,7 +147,7 @@

    Source code for ocrd.workspace

         @deprecated_alias(fileGrp="file_grp")
         @deprecated_alias(fileGrp_mapping="filegrp_mapping")
         def merge(self, other_workspace, copy_files=True, overwrite=False, **kwargs):
    -        """
    +        """
             Merge ``other_workspace`` into this one
     
             See :py:meth:`ocrd_models.ocrd_mets.OcrdMets.merge` for the `kwargs`
    @@ -145,19 +156,21 @@ 

    Source code for ocrd.workspace

                 copy_files (boolean): Whether to copy files from `other_workspace` to this one
             """
             def after_add_cb(f):
    -            """callback to run on merged OcrdFile instances in the destination"""
    +            """callback to run on merged OcrdFile instances in the destination"""
    +            if not f.local_filename:
    +                # OcrdFile has no local_filename, so nothing to be copied
    +                return
                 if not copy_files:
                     fpath_src = Path(other_workspace.directory).resolve()
                     fpath_dst = Path(self.directory).resolve()
                     dstprefix = fpath_src.relative_to(fpath_dst) # raises ValueError if not a subpath
    -                if is_local_filename(f.url):
    -                    f.url = str(Path(dstprefix, f.url))
    +                f.local_filename = dstprefix / f.local_filename
                     return
    -            fpath_src = Path(other_workspace.directory, f.url)
    -            fpath_dest = Path(self.directory, f.url)
    +            fpath_src = Path(other_workspace.directory, f.local_filename)
    +            fpath_dest = Path(self.directory, f.local_filename)
                 if fpath_src.exists():
                     if fpath_dest.exists() and not overwrite:
    -                    raise Exception("Copying %s to %s would overwrite the latter" % (fpath_src, fpath_dest))
    +                    raise FileExistsError("Copying %s to %s would overwrite the latter" % (fpath_src, fpath_dest))
                     if not fpath_dest.parent.is_dir():
                         makedirs(str(fpath_dest.parent))
                     with open(str(fpath_src), 'rb') as fstream_in, open(str(fpath_dest), 'wb') as fstream_out:
    @@ -176,7 +189,7 @@ 

    Source code for ocrd.workspace

     
     
    [docs] @deprecated(version='1.0.0', reason="Use workspace.download_file") def download_url(self, url, **kwargs): - """ + """ Download a URL to the workspace. Args: @@ -192,34 +205,43 @@

    Source code for ocrd.workspace

             return f.local_filename
    [docs] def download_file(self, f, _recursion_count=0): - """ + """ Download a :py:class:`ocrd_models.ocrd_file.OcrdFile` to the workspace. """ log = getLogger('ocrd.workspace.download_file') - log.debug('download_file %s [_recursion_count=%s]' % (f, _recursion_count)) with pushd_popd(self.directory): - try: - # If the f.url is already a file path, and is within self.directory, do nothing - url_path = Path(f.url).resolve() - if not (url_path.exists() and url_path.relative_to(str(Path(self.directory).resolve()))): - raise Exception("Not already downloaded, moving on") - except Exception as e: + if f.local_filename: + file_path = Path(f.local_filename).absolute() + if file_path.exists(): + try: + file_path.relative_to(Path(self.directory).resolve()) # raises ValueError if not relative + # If the f.local_filename exists and is within self.directory, nothing to do + log.info(f"'local_filename' {f.local_filename} already within {self.directory}, nothing to do") + except ValueError: + # f.local_filename exists, but not within self.directory, copy it + log.info("Copying 'local_filename' %s to workspace directory %s" % (f.local_filename, self.directory)) + f.local_filename = self.resolver.download_to_directory(self.directory, f.local_filename, subdir=f.fileGrp) + return f + if f.url: + log.info("OcrdFile has 'local_filename' but it doesn't resolve, try to download from set 'url' %s", f.url) + elif self.baseurl: + log.info("OcrdFile has 'local_filename' but it doesn't resolve and no 'url', concatenate 'baseurl' %s and 'local_filename' %s", + self.baseurl, f.local_filename) + f.url = '%s/%s' % (self.baseurl, f.local_filename) + else: + raise FileNotFoundError(f"'local_filename' {f.local_filename} points to non-existing file," + "and no 'url' to download and no 'baseurl' set on workspace, nothing we can do.") + if f.url: + # If f.url is set, download the file to the workspace basename = '%s%s' % (f.ID, MIME_TO_EXT.get(f.mimetype, '')) if f.ID else f.basename - try: - f.url = self.resolver.download_to_directory(self.directory, f.url, subdir=f.fileGrp, basename=basename) - except FileNotFoundError as e: - if not self.baseurl: - raise Exception("No baseurl defined by workspace. Cannot retrieve '%s'" % f.url) - if _recursion_count >= 1: - raise FileNotFoundError("Already tried prepending baseurl '%s'. Cannot retrieve '%s'" % (self.baseurl, f.url)) - log.debug("First run of resolver.download_to_directory(%s) failed, try prepending baseurl '%s': %s", f.url, self.baseurl, e) - f.url = '%s/%s' % (self.baseurl, f.url) - f.url = self.download_file(f, _recursion_count + 1).local_filename - f.local_filename = f.url + f.local_filename = self.resolver.download_to_directory(self.directory, f.url, subdir=f.fileGrp, basename=basename) + else: + # If neither f.local_filename nor f.url is set, fail + raise ValueError("OcrdFile {f} has neither 'url' nor 'local_filename', so cannot be downloaded") return f
    [docs] def remove_file(self, file_id, force=False, keep_file=False, page_recursive=False, page_same_group=False): - """ + """ Remove a METS `file` from the workspace. Arguments: @@ -235,7 +257,7 @@

    Source code for ocrd.workspace

             """
             log = getLogger('ocrd.workspace.remove_file')
             log.debug('Deleting mets:file %s', file_id)
    -        if not force and self.overwrite_mode:
    +        if self.overwrite_mode:
                 force = True
             if isinstance(file_id, OcrdFile):
                 file_id = file_id.ID
    @@ -251,7 +273,7 @@ 

    Source code for ocrd.workspace

                     with pushd_popd(self.directory):
                         ocrd_page = parse(self.download_file(ocrd_file).local_filename, silence=True)
                         for img_url in ocrd_page.get_AllAlternativeImagePaths():
    -                        img_kwargs = {'url': img_url}
    +                        img_kwargs = {'local_filename': img_url}
                             if page_same_group:
                                 img_kwargs['fileGrp'] = ocrd_file.fileGrp
                             for img_file in self.mets.find_files(**img_kwargs):
    @@ -274,7 +296,7 @@ 

    Source code for ocrd.workspace

                     raise e
    [docs] def remove_file_group(self, USE, recursive=False, force=False, keep_files=False, page_recursive=False, page_same_group=False): - """ + """ Remove a METS `fileGrp`. Arguments: @@ -317,7 +339,7 @@

    Source code for ocrd.workspace

     
     
     
    [docs] def rename_file_group(self, old, new): - """ + """ Rename a METS `fileGrp`. Arguments: @@ -327,34 +349,34 @@

    Source code for ocrd.workspace

             log = getLogger('ocrd.workspace.rename_file_group')
     
             if old not in self.mets.file_groups:
    -            raise ValueError("No such fileGrp: %s" % old)
    +            raise ValueError(f"No such fileGrp: {old}")
             if new in self.mets.file_groups:
    -            raise ValueError("fileGrp already exists %s" % new)
    +            raise ValueError(f"fileGrp already exists {new}")
     
             with pushd_popd(self.directory):
                 # create workspace dir ``new``
                 log.info("mkdir %s" % new)
                 if not Path(new).is_dir():
                     Path(new).mkdir()
    -            url_replacements = {}
    +            local_filename_replacements = {}
                 log.info("Moving files")
                 for mets_file in self.mets.find_files(fileGrp=old, local_only=True):
    -                new_url = old_url = mets_file.url
    +                new_local_filename = old_local_filename = str(mets_file.local_filename)
                     # Directory part
    -                new_url = sub(r'^%s/' % old, r'%s/' % new, new_url)
    +                new_local_filename = sub(r'^%s/' % old, r'%s/' % new, new_local_filename)
                     # File part
    -                new_url = sub(r'/%s' % old, r'/%s' % new, new_url)
    -                url_replacements[mets_file.url] = new_url
    +                new_local_filename = sub(r'/%s' % old, r'/%s' % new, new_local_filename)
    +                local_filename_replacements[str(mets_file.local_filename)] = new_local_filename
                     # move file from ``old`` to ``new``
    -                move(mets_file.url, new_url)
    +                mets_file.local_filename.rename(new_local_filename)
                     # change the url of ``mets:file``
    -                mets_file.url = new_url
    +                mets_file.local_filename = new_local_filename
                     # change the file ID and update structMap
                     # change the file ID and update structMap
                     new_id = sub(r'^%s' % old, r'%s' % new, mets_file.ID)
                     try:
                         next(self.mets.find_files(ID=new_id))
    -                    log.warning("ID %s already exists, not changing ID while renaming %s -> %s" % (new_id, old_url, new_url))
    +                    log.warning("ID %s already exists, not changing ID while renaming %s -> %s" % (new_id, old_local_filename, new_local_filename))
                     except StopIteration:
                         mets_file.ID = new_id
                 # change file paths in PAGE-XML imageFilename and filename attributes
    @@ -362,17 +384,17 @@ 

    Source code for ocrd.workspace

                     log.info("Renaming file references in PAGE-XML %s" % page_file)
                     pcgts = page_from_file(page_file)
                     changed = False
    -                for old_url, new_url in url_replacements.items():
    -                    if pcgts.get_Page().imageFilename == old_url:
    +                for old_local_filename, new_local_filename in local_filename_replacements.items():
    +                    if pcgts.get_Page().imageFilename == old_local_filename:
                             changed = True
    -                        log.info("Rename pc:Page/@imageFilename: %s -> %s" % (old_url, new_url))
    -                        pcgts.get_Page().imageFilename = new_url
    +                        log.info("Rename pc:Page/@imageFilename: %s -> %s" % (old_local_filename, new_local_filename))
    +                        pcgts.get_Page().imageFilename = new_local_filename
                     for ai in pcgts.get_Page().get_AllAlternativeImages():
    -                    for old_url, new_url in url_replacements.items():
    -                        if ai.filename == old_url:
    +                    for old_local_filename, new_local_filename in local_filename_replacements.items():
    +                        if ai.filename == old_local_filename:
                                 changed = True
    -                            log.info("Rename pc:Page/../AlternativeImage: %s -> %s" % (old_url, new_url))
    -                            ai.filename = new_url
    +                            log.info("Rename pc:Page/../AlternativeImage: %s -> %s" % (old_local_filename, new_local_filename))
    +                            ai.filename = new_local_filename
                     if changed:
                         log.info("PAGE-XML changed, writing %s" % (page_file.local_filename))
                         with open(page_file.local_filename, 'w', encoding='utf-8') as f:
    @@ -387,7 +409,7 @@ 

    Source code for ocrd.workspace

     
    [docs] @deprecated_alias(pageId="page_id") @deprecated_alias(ID="file_id") def add_file(self, file_grp, content=None, **kwargs): - """ + """ Add a file to the :py:class:`ocrd_models.ocrd_mets.OcrdMets` of the workspace. Arguments: @@ -415,11 +437,9 @@

    Source code for ocrd.workspace

             with pushd_popd(self.directory):
                 if kwargs.get('local_filename'):
                     # If the local filename has folder components, create those folders
    -                local_filename_dir = kwargs['local_filename'].rsplit('/', 1)[0]
    -                if local_filename_dir != kwargs['local_filename'] and not Path(local_filename_dir).is_dir():
    +                local_filename_dir = str(kwargs['local_filename']).rsplit('/', 1)[0]
    +                if local_filename_dir != str(kwargs['local_filename']) and not Path(local_filename_dir).is_dir():
                         makedirs(local_filename_dir)
    -                if 'url' not in kwargs:
    -                    kwargs['url'] = kwargs['local_filename']
     
                 #  print(kwargs)
                 kwargs["pageId"] = kwargs.pop("page_id")
    @@ -428,6 +448,8 @@ 

    Source code for ocrd.workspace

     
                 ret = self.mets.add_file(file_grp, **kwargs)
     
    +            # content being set implies is_remote==False because METS server
    +            # does not pass file contents
                 if content is not None:
                     with open(kwargs['local_filename'], 'wb') as f:
                         if isinstance(content, str):
    @@ -437,18 +459,21 @@ 

    Source code for ocrd.workspace

             return ret
    [docs] def save_mets(self): - """ + """ Write out the current state of the METS file to the filesystem. """ log = getLogger('ocrd.workspace.save_mets') - log.debug("Saving mets '%s'", self.mets_target) - if self.automatic_backup: - WorkspaceBackupManager(self).add() - with atomic_write(self.mets_target) as f: - f.write(self.mets.to_xml(xmllint=True).decode('utf-8'))
    + if self.is_remote: + self.mets.save() + else: + log.debug("Saving mets '%s'", self.mets_target) + if self.automatic_backup: + WorkspaceBackupManager(self).add() + with atomic_write(self.mets_target) as f: + f.write(self.mets.to_xml(xmllint=True).decode('utf-8'))
    [docs] def resolve_image_exif(self, image_url): - """ + """ Get the EXIF metadata about an image URL as :py:class:`ocrd_models.ocrd_exif.OcrdExif` Args: @@ -459,19 +484,21 @@

    Source code for ocrd.workspace

             """
             if not image_url:
                 # avoid "finding" just any file
    -            raise Exception("Cannot resolve empty image path")
    +            raise ValueError(f"'image_url' must be a non-empty string, not '{image_url}' ({type(image_url)})")
             try:
    -            f = next(self.mets.find_files(url=image_url))
    -            image_filename = self.download_file(f).local_filename
    -            ocrd_exif = exif_from_filename(image_filename)
    +            f = next(self.mets.find_files(local_filename=str(image_url)))
    +            return exif_from_filename(f.local_filename)
             except StopIteration:
    -            with download_temporary_file(image_url) as f:
    -                ocrd_exif = exif_from_filename(f.name)
    -        return ocrd_exif
    + try: + f = next(self.mets.find_files(url=str(image_url))) + return exif_from_filename(self.download_file(f).local_filename) + except StopIteration: + with download_temporary_file(image_url) as f: + return exif_from_filename(f.name)
    [docs] @deprecated(version='1.0.0', reason="Use workspace.image_from_page and workspace.image_from_segment") def resolve_image_as_pil(self, image_url, coords=None): - """ + """ Resolve an image URL to a `PIL.Image`. Arguments: @@ -492,11 +519,15 @@

    Source code for ocrd.workspace

             log = getLogger('ocrd.workspace._resolve_image_as_pil')
             with pushd_popd(self.directory):
                 try:
    -                f = next(self.mets.find_files(url=image_url))
    -                pil_image = Image.open(self.download_file(f).local_filename)
    +                f = next(self.mets.find_files(local_filename=str(image_url)))
    +                pil_image = Image.open(f.local_filename)
                 except StopIteration:
    -                with download_temporary_file(image_url) as f:
    -                    pil_image = Image.open(f.name)
    +                try:
    +                    f = next(self.mets.find_files(url=str(image_url)))
    +                    pil_image = Image.open(self.download_file(f).local_filename)
    +                except StopIteration:
    +                    with download_temporary_file(image_url) as f:
    +                        pil_image = Image.open(f.name)
                 pil_image.load() # alloc and give up the FD
     
             # Pillow does not properly support higher color depths
    @@ -554,7 +585,7 @@ 

    Source code for ocrd.workspace

     
    [docs] def image_from_page(self, page, page_id, fill='background', transparency=False, feature_selector='', feature_filter='', filename=''): - """Extract an image for a PAGE-XML page from the workspace. + """Extract an image for a PAGE-XML page from the workspace. Args: page (:py:class:`ocrd_models.ocrd_page.PageType`): a PAGE `PageType` object @@ -781,7 +812,7 @@

    Source code for ocrd.workspace

     
    [docs] def image_from_segment(self, segment, parent_image, parent_coords, fill='background', transparency=False, feature_selector='', feature_filter='', filename=''): - """Extract an image for a PAGE-XML hierarchy segment from its parent's image. + """Extract an image for a PAGE-XML hierarchy segment from its parent's image. Args: segment (object): a PAGE segment object \ @@ -1039,7 +1070,7 @@

    Source code for ocrd.workspace

                             page_id=None,
                             mimetype='image/png',
                             force=False):
    -        """Store an image in the filesystem and reference it as new file in the METS.
    +        """Store an image in the filesystem and reference it as new file in the METS.
     
             Args:
                 image (PIL.Image): derived image to save
    @@ -1057,7 +1088,7 @@ 

    Source code for ocrd.workspace

                 The (absolute) path of the created file.
             """
             log = getLogger('ocrd.workspace.save_image_file')
    -        if not force and self.overwrite_mode:
    +        if self.overwrite_mode:
                 force = True
             image_bytes = io.BytesIO()
             image.save(image_bytes, format=MIME_TO_PIL[mimetype])
    @@ -1075,7 +1106,7 @@ 

    Source code for ocrd.workspace

             return file_path
    [docs] def find_files(self, *args, **kwargs): - """ + """ Search ``mets:file`` entries in wrapped METS document and yield results. Delegator to :py:func:`ocrd_models.ocrd_mets.OcrdMets.find_files` @@ -1256,7 +1287,7 @@

    Quick search

    - + @@ -1273,8 +1304,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/workspace_backup.html b/site/core/_modules/ocrd/workspace_backup.html index 07de56e46..00202f333 100644 --- a/site/core/_modules/ocrd/workspace_backup.html +++ b/site/core/_modules/ocrd/workspace_backup.html @@ -1,18 +1,16 @@ - - + - ocrd.workspace_backup — ocrd 2.41.0 documentation - - - - - - - + ocrd.workspace_backup — ocrd 2.58.1 documentation + + + + + + @@ -74,7 +72,7 @@

    Source code for ocrd.workspace_backup

                 )
    [docs]class WorkspaceBackupManager(): - """ + """ Manages backups of a workspace in a directory BACKUP_DIR """ @@ -83,7 +81,7 @@

    Source code for ocrd.workspace_backup

             self.backup_directory = join(workspace.directory, BACKUP_DIR)
     
     
    [docs] def restore(self, chksum, choose_first=False): - """ + """ Restore mets.xml to previous state """ log = getLogger('ocrd.workspace_backup.restore') @@ -104,7 +102,7 @@

    Source code for ocrd.workspace_backup

             self.workspace.reload_mets()
    [docs] def add(self): - """ + """ Create a backup in <self.backup_directory> """ log = getLogger('ocrd.workspace_backup.add') @@ -124,7 +122,7 @@

    Source code for ocrd.workspace_backup

             return chksum
    [docs] def list(self): - """ + """ List all backups as WorkspaceBackup objects, sorted descending by lastmod. """ backups = [] @@ -134,7 +132,7 @@

    Source code for ocrd.workspace_backup

             return backups
    [docs] def undo(self): - """ + """ Restore to last version """ log = getLogger('ocrd.workspace_backup.undo') @@ -196,7 +194,7 @@

    Quick search

    - + @@ -213,8 +211,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd/workspace_bagger.html b/site/core/_modules/ocrd/workspace_bagger.html index 3f0429e7c..67d31863e 100644 --- a/site/core/_modules/ocrd/workspace_bagger.html +++ b/site/core/_modules/ocrd/workspace_bagger.html @@ -1,18 +1,16 @@ - - + - ocrd.workspace_bagger — ocrd 2.41.0 documentation - - - - - - - + ocrd.workspace_bagger — ocrd 2.58.1 documentation + + + + + + @@ -37,16 +35,20 @@

    Source code for ocrd.workspace_bagger

     from datetime import datetime
     from os import makedirs, chdir, walk
     from os.path import join, isdir, basename, exists, relpath
    +from pathlib import Path
     from shutil import make_archive, rmtree, copyfile, move
    -from tempfile import mkdtemp
    +from tempfile import mkdtemp, TemporaryDirectory
     import re
     import tempfile
     import sys
    -from bagit import Bag, make_manifests, _load_tag_file  # pylint: disable=no-name-in-module
    +from bagit import Bag, make_manifests, _load_tag_file, _make_tag_file, _make_tagmanifest_file  # pylint: disable=no-name-in-module
    +from distutils.dir_util import copy_tree
    +from pkg_resources import get_distribution
     
     from ocrd_utils import (
         pushd_popd,
         getLogger,
    +    MIME_TO_EXT,
         is_local_filename,
         unzip_file_to_dir,
     
    @@ -56,7 +58,6 @@ 

    Source code for ocrd.workspace_bagger

     from ocrd_validators.constants import BAGIT_TXT, TMP_BAGIT_PREFIX, OCRD_BAGIT_PROFILE_URL
     from ocrd_modelfactory import page_from_file
     from ocrd_models.ocrd_page import to_xml
    -from ocrd_utils.package_resources import get_distribution
     
     from .workspace import Workspace
     
    @@ -65,7 +66,7 @@ 

    Source code for ocrd.workspace_bagger

     BACKUPDIR = join('/tmp', TMP_BAGIT_PREFIX + 'backup')
     
     
    [docs]class WorkspaceBagger(): - """ + """ Serialize/De-serialize from OCRD-ZIP to workspace and back. """ @@ -73,12 +74,7 @@

    Source code for ocrd.workspace_bagger

             self.resolver = resolver
             self.strict = strict
     
    -    def _serialize_bag(self, workspace, bagdir, dest, in_place, skip_zip):
    -        if in_place:
    -            if not exists(BACKUPDIR):
    -                makedirs(BACKUPDIR)
    -            backupdir = mkdtemp(dir=BACKUPDIR)
    -            move(workspace.directory, backupdir)
    +    def _serialize_bag(self, workspace, bagdir, dest, skip_zip):
             if skip_zip:
                 move(bagdir, dest)
             else:
    @@ -96,31 +92,28 @@ 

    Source code for ocrd.workspace_bagger

     
         def _bag_mets_files(self, workspace, bagdir, ocrd_mets, processes):
             mets = workspace.mets
    -        changed_urls = {}
    +        changed_local_filenames = {}
     
             log = getLogger('ocrd.workspace_bagger')
             # TODO allow filtering by fileGrp@USE and such
             with pushd_popd(workspace.directory):
    -            # URLs of the files before changing
    +            # local_filenames of the files before changing
                 for f in mets.find_files():
    -                log.info("Resolving %s", f.url)
    -                if is_local_filename(f.url):
    -                    # nothing to do then
    -                    pass
    -                elif not f.url.startswith('http'):
    -                    self._log_or_raise("Not an http URL: %s" % f.url)
    -                    continue
    -                log.info("Resolved %s", f.url)
    -
    -                file_grp_dir = join(bagdir, 'data', f.fileGrp)
    -                if not isdir(file_grp_dir):
    -                    makedirs(file_grp_dir)
    -
    -                _basename = "%s%s" % (f.ID, f.extension)
    -                _relpath = join(f.fileGrp, _basename)
    -                self.resolver.download_to_directory(file_grp_dir, f.url, basename=_basename)
    -                changed_urls[f.url] = _relpath
    -                f.url = _relpath
    +                log.info("Handling OcrdFile %s", f)
    +
    +                file_grp_dir = Path(bagdir, 'data', f.fileGrp)
    +                if not file_grp_dir.is_dir():
    +                    file_grp_dir.mkdir()
    +
    +                if f.local_filename:
    +                    _relpath = join(f.fileGrp, f.basename)
    +                    self.resolver.download_to_directory(file_grp_dir, f.local_filename, basename=f.basename)
    +                    changed_local_filenames[str(f.local_filename)] = _relpath
    +                else:
    +                    _relpath = join(f.fileGrp, f"{f.ID}{MIME_TO_EXT[f.mimetype]}")
    +                    self.resolver.download_to_directory(file_grp_dir, f.url, basename=f.basename)
    +                    changed_local_filenames[f.url] = _relpath
    +                f.local_filename = _relpath
     
                 # save mets.xml
                 with open(join(bagdir, 'data', ocrd_mets), 'wb') as f:
    @@ -134,21 +127,19 @@ 

    Source code for ocrd.workspace_bagger

                 for page_file in bag_workspace.mets.find_files(mimetype=MIMETYPE_PAGE):
                     pcgts = page_from_file(page_file)
                     changed = False
    -                #  page_doc.set(imageFileName
    -            #  for old, new in changed_urls:
    -                for old, new in changed_urls.items():
    +                for old, new in changed_local_filenames.items():
                         if pcgts.get_Page().imageFilename == old:
                             pcgts.get_Page().imageFilename = new
                             changed = True
                         # TODO replace AlternativeImage, recursively...
                     if changed:
    -                    with open(page_file.url, 'w') as out:
    +                    with open(page_file.local_filename, 'w') as out:
                             out.write(to_xml(pcgts))
                         #  log.info("Replace %s -> %s in %s" % (old, new, page_file))
     
    -            chdir(bagdir)
    -            total_bytes, total_files = make_manifests('data', processes, algorithms=['sha512'])
    -            log.info("New vs. old: %s" % changed_urls)
    +            with pushd_popd(bagdir):
    +                total_bytes, total_files = make_manifests('data', processes, algorithms=['sha512'])
    +            log.info("New vs. old: %s" % changed_local_filenames)
             return total_bytes, total_files
     
         def _set_bag_info(self, bag, total_bytes, total_files, ocrd_identifier, ocrd_base_version_checksum, ocrd_mets='mets.xml'):
    @@ -175,10 +166,9 @@ 

    Source code for ocrd.workspace_bagger

                 ocrd_base_version_checksum=None,
                 processes=1,
                 skip_zip=False,
    -            in_place=False,
                 tag_files=None
                ):
    -        """
    +        """
             Bag a workspace
     
             See https://ocr-d.github.com/ocrd_zip#packing-a-workspace-as-ocrd-zip
    @@ -191,14 +181,8 @@ 

    Source code for ocrd.workspace_bagger

                 ord_base_version_checksum (string): Ocrd-Base-Version-Checksum in bag-info.txt
                 processes (integer): Number of parallel processes checksumming
                 skip_zip (boolean): Whether to leave directory unzipped
    -            in_place (boolean): Whether to **replace** the workspace with its BagIt variant
                 tag_files (list<string>): Path names of additional tag files to be bagged at the root of the bag
             """
    -        if in_place and (dest is not None):
    -            raise Exception("Setting 'dest' and 'in_place' is a contradiction")
    -        if in_place and not skip_zip:
    -            raise Exception("Setting 'skip_zip' and not 'in_place' is a contradiction")
    -
             if tag_files is None:
                 tag_files = []
     
    @@ -206,15 +190,13 @@ 

    Source code for ocrd.workspace_bagger

             bagdir = mkdtemp(prefix=TMP_BAGIT_PREFIX)
     
             if dest is None:
    -            if in_place:
    -                dest = workspace.directory
    -            elif not skip_zip:
    +            if not skip_zip:
                     dest = '%s.ocrd.zip' % workspace.directory
                 else:
                     dest = '%s.ocrd' % workspace.directory
     
             log = getLogger('ocrd.workspace_bagger')
    -        log.info("Bagging %s to %s (temp dir %s)", workspace.directory, '(in-place)' if in_place else dest, bagdir)
    +        log.info("Bagging %s to %s (temp dir %s)", workspace.directory, dest, bagdir)
     
             # create data dir
             makedirs(join(bagdir, 'data'))
    @@ -237,13 +219,13 @@ 

    Source code for ocrd.workspace_bagger

             bag.save()
     
             # ZIP it
    -        self._serialize_bag(workspace, bagdir, dest, in_place, skip_zip)
    +        self._serialize_bag(workspace, bagdir, dest, skip_zip)
     
             log.info('Created bag at %s', dest)
             return dest
    [docs] def spill(self, src, dest): - """ + """ Spill a workspace, i.e. unpack it and turn it into a workspace. See https://ocr-d.github.com/ocrd_zip#unpacking-ocrd-zip-to-a-workspace @@ -298,14 +280,67 @@

    Source code for ocrd.workspace_bagger

             return workspace
    [docs] def validate(self, bag): - """ + """ Validate conformance with BagIt and OCR-D bagit profile. See: - https://ocr-d.github.io/ocrd_zip - https://ocr-d.github.io/bagit-profile.json - https://ocr-d.github.io/bagit-profile.yml - """
    + """ + pass
    + +
    [docs] def recreate_checksums(self, src, dest=None, overwrite=False): + """ + (Re)creates the files containing the checksums of a bag + + This function uses bag.py to create new files: manifest-sha512.txt and + tagminifest-sha512.txt for the bag. Also 'Payload-Oxum' in bag-info.txt will be set to the + appropriate value. + + Arguments: + src (string): Path to Bag. May be an zipped or unziped bagit + dest (string): Path to where the result should be stored. Not needed if overwrite is + set + overwrite(bool): Replace bag with newly created bag + """ + if overwrite and dest: + raise Exception("Setting 'dest' and 'overwrite' is a contradiction") + if not overwrite and not dest: + raise Exception("For checksum recreation 'dest' must be provided") + src_path = Path(src) + if not src_path.exists(): + raise Exception("Path to bag not existing") + is_zipped = src_path.is_file() + + with TemporaryDirectory() as tempdir: + if is_zipped: + unzip_file_to_dir(src, tempdir) + path_to_bag = Path(tempdir) + if not path_to_bag.joinpath("data").exists(): + raise FileNotFoundError("data directory of bag not found") + else: + path_to_bag = src_path if overwrite else Path(dest) + if not src_path.joinpath("data").exists(): + raise FileNotFoundError(f"data directory of bag not found at {src}") + if not overwrite: + path_to_bag.mkdir(parents=True, exist_ok=True) + copy_tree(src, dest) + + with pushd_popd(path_to_bag): + n_bytes, n_files = make_manifests("data", 1, ["sha512"]) + + bag_infos = _load_tag_file("bag-info.txt") + bag_infos["Payload-Oxum"] = f"{n_bytes}.{n_files}" + _make_tag_file("bag-info.txt", bag_infos) + _make_tagmanifest_file("sha512", ".") + + if is_zipped: + name = src_path.name + if name.endswith(".zip"): + name = name[:-4] + zip_path = make_archive(name, "zip", path_to_bag) + move(zip_path, src if overwrite else dest)
    @@ -358,7 +393,7 @@

    Quick search

    - + @@ -375,8 +410,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_modelfactory.html b/site/core/_modules/ocrd_modelfactory.html index f10fa49c2..2dd6c2e61 100644 --- a/site/core/_modules/ocrd_modelfactory.html +++ b/site/core/_modules/ocrd_modelfactory.html @@ -1,18 +1,16 @@ - - + - ocrd_modelfactory — ocrd 2.41.0 documentation - - - - - - - + ocrd_modelfactory — ocrd 2.58.1 documentation + + + + + + @@ -44,9 +42,10 @@

    Source code for ocrd_modelfactory

     from yaml import safe_load, safe_dump
     
     from PIL import Image
    +from lxml import etree as ET
     
    -from ocrd_utils import VERSION, MIMETYPE_PAGE
    -from ocrd_models import OcrdExif
    +from ocrd_utils import VERSION, MIMETYPE_PAGE, guess_media_type
    +from ocrd_models import OcrdExif, OcrdFile, ClientSideOcrdFile
     from ocrd_models.ocrd_page import (
         PcGtsType, PageType, MetadataType,
         parse, parseEtree
    @@ -60,7 +59,7 @@ 

    Source code for ocrd_modelfactory

     
     
     
    [docs]def exif_from_filename(image_filename): - """ + """ Create :py:class:`~ocrd_models.ocrd_exif.OcrdExif` by opening an image file with PIL and reading its metadata. @@ -74,7 +73,7 @@

    Source code for ocrd_modelfactory

         return ocrd_exif
    [docs]def page_from_image(input_file, with_tree=False): - """ + """ Create :py:class:`~ocrd_models.ocrd_page.OcrdPage` from an :py:class:`~ocrd_models.ocrd_file.OcrdFile` representing an image (i.e. should have ``@mimetype`` starting with ``image/``). @@ -102,7 +101,7 @@

    Source code for ocrd_modelfactory

                 imageWidth=exif.width,
                 imageHeight=exif.height,
                 # XXX brittle
    -            imageFilename=input_file.url if input_file.url is not None else input_file.local_filename
    +            imageFilename=str(input_file.local_filename) if input_file.local_filename else input_file.url
             ),
             pcGtsId=input_file.ID
         )
    @@ -114,16 +113,23 @@ 

    Source code for ocrd_modelfactory

         return pcgts, etree, mapping, revmap
    [docs]def page_from_file(input_file, with_tree=False): - """ - Create a new PAGE-XML from a METS file representing a PAGE-XML or an image. + """ + Create :py:class:`~ocrd_models.ocrd_page.OcrdPage` + from an :py:class:`~ocrd_models.ocrd_file.OcrdFile` or a file path + representing either a PAGE-XML or an image (to generate a PAGE-XML for). Arguments: - input_file (:py:class:`~ocrd_models.ocrd_file.OcrdFile`): file to open \ + input_file (:py:class:`~ocrd_models.ocrd_file.OcrdFile` or `str`): file to open \ and produce a PAGE DOM for Keyword arguments: with_tree (boolean): whether to return XML node tree, element-node mapping \ and reverse mapping, too (cf. :py:func:`ocrd_models.ocrd_page.parseEtree`) """ + if not isinstance(input_file, (OcrdFile, ClientSideOcrdFile)): + mimetype = guess_media_type(input_file, application_xml=MIMETYPE_PAGE) + input_file = OcrdFile(ET.Element("dummy"), + local_filename=input_file, + mimetype=mimetype) if not input_file.local_filename: raise ValueError("input_file must have 'local_filename' property") if not Path(input_file.local_filename).exists(): @@ -185,7 +191,7 @@

    Quick search

    - + @@ -202,8 +208,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_models/ocrd_agent.html b/site/core/_modules/ocrd_models/ocrd_agent.html index 8f5744a83..4924e71d1 100644 --- a/site/core/_modules/ocrd_models/ocrd_agent.html +++ b/site/core/_modules/ocrd_models/ocrd_agent.html @@ -1,18 +1,16 @@ - - + - ocrd_models.ocrd_agent — ocrd 2.41.0 documentation - - - - - - - + ocrd_models.ocrd_agent — ocrd 2.58.1 documentation + + + + + + @@ -42,7 +40,7 @@

    Source code for ocrd_models.ocrd_agent

     from .ocrd_xml_base import ET
     
     
    [docs]class OcrdAgent(): - """ + """ Represents a <mets:agent> """ @@ -58,7 +56,7 @@

    Source code for ocrd_models.ocrd_agent

     
         def __init__(self, el=None, name=None, _type=None, othertype=None, role=None, otherrole=None,
                      notes=None):
    -        """
    +        """
             Args:
                 el (LxmlElement):
                 name (string):
    @@ -79,7 +77,7 @@ 

    Source code for ocrd_models.ocrd_agent

             self.notes = notes
     
         def __str__(self):
    -        """
    +        """
             String representation
             """
             props = ', '.join([
    @@ -90,14 +88,14 @@ 

    Source code for ocrd_models.ocrd_agent

     
         @property
         def type(self):
    -        """
    +        """
             Get the ``TYPE`` attribute value.
             """
             return self._el.get('TYPE')
     
         @type.setter
         def type(self, _type):
    -        """
    +        """
             Set the ``TYPE`` attribute value.
             """
             if _type is not None:
    @@ -105,14 +103,14 @@ 

    Source code for ocrd_models.ocrd_agent

     
         @property
         def othertype(self):
    -        """
    +        """
             Get the ``OTHERTYPE`` attribute value.
             """
             return self._el.get('OTHERTYPE')
     
         @othertype.setter
         def othertype(self, othertype):
    -        """
    +        """
             Set the ``OTHERTYPE`` attribute value.
             """
             if othertype is not None:
    @@ -121,14 +119,14 @@ 

    Source code for ocrd_models.ocrd_agent

     
         @property
         def role(self):
    -        """
    +        """
             Get the ``ROLE`` attribute value.
             """
             return self._el.get('ROLE')
     
         @role.setter
         def role(self, role):
    -        """
    +        """
             Set the ``ROLE`` attribute value.
             """
             if role is not None:
    @@ -136,14 +134,14 @@ 

    Source code for ocrd_models.ocrd_agent

     
         @property
         def otherrole(self):
    -        """
    +        """
             Get the ``OTHERROLE`` attribute value.
             """
             return self._el.get('OTHERROLE')
     
         @otherrole.setter
         def otherrole(self, otherrole):
    -        """
    +        """
             Set the ``OTHERROLE`` attribute value.
             """
             if otherrole is not None:
    @@ -152,7 +150,7 @@ 

    Source code for ocrd_models.ocrd_agent

     
         @property
         def name(self):
    -        """
    +        """
             Get the ``mets:name`` element value.
             """
             el_name = self._el.find(TAG_METS_NAME)
    @@ -161,7 +159,7 @@ 

    Source code for ocrd_models.ocrd_agent

     
         @name.setter
         def name(self, name):
    -        """
    +        """
             Set the ``mets:name`` element value.
             """
             if name is not None:
    @@ -172,7 +170,7 @@ 

    Source code for ocrd_models.ocrd_agent

     
         @property
         def notes(self):
    -        """
    +        """
             Get the ``mets:note`` element values (as tuples of attributes and text).
             """
             el_notes = self._el.findall(TAG_METS_NOTE)
    @@ -182,7 +180,7 @@ 

    Source code for ocrd_models.ocrd_agent

     
         @notes.setter
         def notes(self, notes):
    -        """
    +        """
             Set the ``mets:note`` element values.
             """
             if notes is not None:
    @@ -196,6 +194,42 @@ 

    Source code for ocrd_models.ocrd_agent

                     el_note.text = text
                     for name, value in attrib.items():
                         el_note.set('{%s}' % NS["ocrd"] + name, value)
    + + +
    [docs]class ClientSideOcrdAgent(): + """ + Provides the same interface as :py:class:`ocrd_models.ocrd_file.OcrdAgent` + but without attachment to :py:class:`ocrd_models.ocrd_mets.OcrdMets` since + this represents the response of the :py:class:`ocrd.mets_server.OcrdMetsServer`. + """ + + def __init__(self, el, name=None, _type=None, othertype=None, role=None, otherrole=None, + notes=None): + """ + Args: + el (): ignored + Keyword Args: + name (string): + _type (string): + othertype (string): + role (string): + otherrole (string): + notes (dict): + """ + self.name = name + self.type = _type + self.othertype = othertype + self.role = role + self.otherrole = otherrole + self.notes = notes + + def __str__(self): + props = ', '.join([ + '='.join([k, getattr(self, k) if getattr(self, k) else '---']) + for k in ['type', 'othertype', 'role', 'otherrole', 'name'] + ]) + return '<ClientSideOcrdAgent [' + props + ']/>'
    +
    @@ -248,7 +282,7 @@

    Quick search

    - + @@ -265,8 +299,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_models/ocrd_exif.html b/site/core/_modules/ocrd_models/ocrd_exif.html index 69669f89d..4f0d60596 100644 --- a/site/core/_modules/ocrd_models/ocrd_exif.html +++ b/site/core/_modules/ocrd_models/ocrd_exif.html @@ -1,18 +1,16 @@ - - + - ocrd_models.ocrd_exif — ocrd 2.41.0 documentation - - - - - - - + ocrd_models.ocrd_exif — ocrd 2.58.1 documentation + + + + + + @@ -45,7 +43,7 @@

    Source code for ocrd_models.ocrd_exif

     from ocrd_utils import getLogger
     
     
    [docs]class OcrdExif(): - """Represents technical image metadata. + """Represents technical image metadata. Attributes: width (int): pixel dimensions @@ -65,7 +63,7 @@

    Source code for ocrd_models.ocrd_exif

         """
     
         def __init__(self, img):
    -        """
    +        """
             Arguments:
                 img (`PIL.Image`): PIL image technical metadata is about.
             """
    @@ -77,7 +75,7 @@ 

    Source code for ocrd_models.ocrd_exif

             if which('identify'):
                 self.run_identify(img)
             else:
    -            getLogger('ocrd_exif').warning("ImageMagick 'identify' not available, Consider installing ImageMagick for more robust pixel density estimation")
    +            getLogger('ocrd.exif').warning("ImageMagick 'identify' not available, Consider installing ImageMagick for more robust pixel density estimation")
                 self.run_pil(img)
     
     
    [docs] def run_identify(self, img): @@ -92,9 +90,9 @@

    Source code for ocrd_models.ocrd_exif

             if ret.returncode:
                 stderr = ret.stderr.decode('utf-8')
                 if 'no decode delegate for this image format' in stderr:
    -                getLogger('ocrd_exif').warning("ImageMagick does not support the '%s' image format. ", img.format)
    +                getLogger('ocrd.exif').warning("ImageMagick does not support the '%s' image format. ", img.format)
                 else:
    -                getLogger('ocrd_exif').error("identify exited with non-zero %s: %s", ret.returncode, stderr)
    +                getLogger('ocrd.exif').error("identify exited with non-zero %s: %s", ret.returncode, stderr)
                 self.xResolution = self.yResolution = 1
                 self.resolutionUnit = 'inches'
             else:
    @@ -133,7 +131,7 @@ 

    Source code for ocrd_models.ocrd_exif

             self.resolution = round(sqrt(self.xResolution * self.yResolution))
    [docs] def to_xml(self): - """ + """ Serialize all properties as XML string. """ ret = '<exif>' @@ -193,7 +191,7 @@

    Quick search

    - + @@ -210,8 +208,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_models/ocrd_file.html b/site/core/_modules/ocrd_models/ocrd_file.html index 7a8758e51..c679b4328 100644 --- a/site/core/_modules/ocrd_models/ocrd_file.html +++ b/site/core/_modules/ocrd_models/ocrd_file.html @@ -1,18 +1,16 @@ - - + - ocrd_models.ocrd_file — ocrd 2.41.0 documentation - - - - - - - + ocrd_models.ocrd_file — ocrd 2.58.1 documentation + + + + + + @@ -38,53 +36,49 @@

    Source code for ocrd_models.ocrd_file

     API to ``mets:file``
     """
     from os.path import splitext, basename
    +from pathlib import Path
     
    -from ocrd_utils import is_local_filename, get_local_filename, MIME_TO_EXT, EXT_TO_MIME
    +from ocrd_utils import deprecation_warning
     
     from .ocrd_xml_base import ET
     from .constants import NAMESPACES as NS, TAG_METS_FLOCAT, TAG_METS_FILE
     
     
    [docs]class OcrdFile(): - """ + """ Represents a single ``mets:file/mets:FLocat`` (METS file entry). """ - # @staticmethod - # def create(mimetype, ID, url, local_filename): - # el_fileGrp.SubElement('file') - - def __init__(self, el, mimetype=None, pageId=None, loctype='OTHER', local_filename=None, mets=None, url=None, ID=None): - """ + def __init__(self, el, mimetype=None, pageId=None, local_filename=None, mets=None, url=None, ID=None, loctype=None): + """ Args: el (LxmlElement): etree Element of the ``mets:file`` this represents. Create new if not provided Keyword Args: mets (OcrdMets): Containing :py:class:`ocrd_models.ocrd_mets.OcrdMets`. mimetype (string): ``@MIMETYPE`` of this ``mets:file`` pageId (string): ``@ID`` of the physical ``mets:structMap`` entry corresponding to this ``mets:file`` - loctype (string): ``@LOCTYPE`` of this ``mets:file`` local_filename (string): Local filename - url (string): ``@xlink:href`` of this ``mets:file`` + url (string): original ``@xlink:href`` of this ``mets:file`` + local_filename (Path): ``@xlink:href`` pointing to the locally cached version of the file in the workspace ID (string): ``@ID`` of this ``mets:file`` + loctype (string): DEPRECATED do not use """ if el is None: raise ValueError("Must provide mets:file element this OcrdFile represents") + if loctype: + deprecation_warning("'loctype' is not supported in OcrdFile anymore, use 'url' or 'local_filename'") self._el = el self.mets = mets self.ID = ID self.mimetype = mimetype - self.local_filename = local_filename - self.loctype = loctype self.pageId = pageId + if local_filename: + self.local_filename = Path(local_filename) if url: self.url = url - if not(local_filename): - if self.url and is_local_filename(self.url): - self.local_filename = get_local_filename(self.url) - def __str__(self): - """ + """ String representation of this ``mets:file``. """ # props = '\n\t'.join([ @@ -93,7 +87,7 @@

    Source code for ocrd_models.ocrd_file

             #  ])
             #  return 'OcrdFile[' + '\n\t' + props + '\n\t]'
             props = ', '.join([
    -            '='.join([k, getattr(self, k) if getattr(self, k) else '---'])
    +            '='.join([k, str(getattr(self, k)) if getattr(self, k) else '---'])
                 for k in ['ID', 'mimetype', 'url', 'local_filename']
             ])
             try:
    @@ -103,45 +97,46 @@ 

    Source code for ocrd_models.ocrd_file

             return '<OcrdFile fileGrp=%s %s]/> ' % (fileGrp, props)
     
         def __eq__(self, other):
    -        return self.ID == other.ID # and \
    -               # self.url == other.url and \
    +        return self.ID == other.ID \
    +           and self.url == other.url \
    +           and self.local_filename == other.local_filename
                    # EXT_TO_MIME[MIME_TO_EXT[self.mimetype]] == EXT_TO_MIME[MIME_TO_EXT[other.mimetype]] and \
                    # self.fileGrp == other.fileGrp
     
         @property
         def basename(self):
    -        """
    -        Get the ``os.path.basename`` of the local file, if any.
    +        """
    +        Get the ``.name`` of the local file
             """
    -        return basename(self.local_filename if self.local_filename else self.url)
    +        if not self.local_filename:
    +            return
    +        return self.local_filename.name
     
         @property
         def extension(self):
    -        _basename, ext = splitext(self.basename)
    -        if _basename.endswith('.tar'):
    -            ext = ".tar" + ext
    -        return ext
    +        if not self.local_filename:
    +            return
    +        return ''.join(self.local_filename.suffixes)
     
         @property
         def basename_without_extension(self):
    -        """
    +        """
             Get the ``os.path.basename`` of the local file, if any, with extension removed.
             """
    -        ret = self.basename.rsplit('.', 1)[0]
    -        if ret.endswith('.tar'):
    -            ret = ret[0:len(ret)-4]
    -        return ret
    +        if not self.local_filename:
    +            return
    +        return self.local_filename.name[:-len(self.extension)]
     
         @property
         def ID(self):
    -        """
    +        """
             Get the ``@ID`` of the ``mets:file``.
             """
             return self._el.get('ID')
     
         @ID.setter
         def ID(self, ID):
    -        """
    +        """
             Set the ``@ID`` of the ``mets:file`` to :py:attr:`ID`.
             """
             if ID is None:
    @@ -156,7 +151,7 @@ 

    Source code for ocrd_models.ocrd_file

     
         @property
         def pageId(self):
    -        """
    +        """
             Get the ``@ID`` of the physical ``mets:structMap`` entry corresponding to this ``mets:file`` (physical page manifestation).
             """
             if self.mets is None:
    @@ -165,7 +160,7 @@ 

    Source code for ocrd_models.ocrd_file

     
         @pageId.setter
         def pageId(self, pageId):
    -        """
    +        """
             Get the ``@ID`` of the physical ``mets:structMap`` entry corresponding to this ``mets:file`` (physical page manifestation) to :py:attr:`pageId`.
             """
             if pageId is None:
    @@ -174,59 +169,23 @@ 

    Source code for ocrd_models.ocrd_file

                 raise Exception("OcrdFile %s has no member 'mets' pointing to parent OcrdMets" % self)
             self.mets.set_physical_page_for_file(pageId, self)
     
    -
         @property
    -    def loctype(self):
    -        """
    -        Get the ``@LOCTYPE`` of the ``mets:file``.
    +    def loctypes(self):
    +        """
    +        Get the ``@LOCTYPE``s of the ``mets:file``.
             """
    -        el_FLocat = self._el.find('mets:FLocat', NS)
    -        return '' if el_FLocat is None else el_FLocat.get('LOCTYPE')
    -
    -    @loctype.setter
    -    def loctype(self, loctype):
    -        """
    -        Set the ``@LOCTYPE`` of the ``mets:file`` to :py:attr:`loctype`.
    -        """
    -        if loctype is None:
    -            return
    -        loctype = loctype.upper()
    -        el_FLocat = self._el.find('mets:FLocat', NS)
    -        if el_FLocat is None:
    -            el_FLocat = ET.SubElement(self._el, TAG_METS_FLOCAT)
    -        el_FLocat.set('LOCTYPE', loctype)
    -        if loctype == 'OTHER':
    -            self.otherloctype = 'FILE'
    -        else:
    -            self.otherloctype = None
    -
    -    @property
    -    def otherloctype(self):
    -        el_FLocat = self._el.find('mets:FLocat', NS)
    -        return '' if el_FLocat is None else el_FLocat.get('OTHERLOCTYPE')
    -
    -    @otherloctype.setter
    -    def otherloctype(self, otherloctype):
    -        el_FLocat = self._el.find('mets:FLocat', NS)
    -        if el_FLocat is None:
    -            el_FLocat = ET.SubElement(self._el, TAG_METS_FLOCAT)
    -        if not otherloctype:
    -            if 'OTHERLOCTYPE' in el_FLocat.attrib:
    -                del el_FLocat.attrib['OTHERLOCTYPE']
    -        else:
    -            el_FLocat.set('LOCTYPE', 'OTHER')
    -            el_FLocat.set('OTHERLOCTYPE', otherloctype)
    +        return [x.get('LOCTYPE') for x in  self._el.findall('mets:FLocat', NS)]
     
         @property
         def mimetype(self):
    -        """
    +        """
             Get the ``@MIMETYPE`` of the ``mets:file``.
             """
             return self._el.get('MIMETYPE')
     
         @mimetype.setter
         def mimetype(self, mimetype):
    -        """
    +        """
             Set the ``@MIMETYPE`` of the ``mets:file`` to :py:attr:`mimetype`.
             """
             if mimetype is None:
    @@ -235,7 +194,7 @@ 

    Source code for ocrd_models.ocrd_file

     
         @property
         def fileGrp(self):
    -        """
    +        """
             The ``@USE`` of the containing ``mets:fileGrp``
             """
             parent = self._el.getparent()
    @@ -245,25 +204,89 @@ 

    Source code for ocrd_models.ocrd_file

     
         @property
         def url(self):
    -        """
    -        Get the ``@xlink:href`` of this ``mets:file``.
    +        """
    +        Get the remote/original URL ``@xlink:href`` of this ``mets:file``.
             """
    -        el_FLocat = self._el.find(TAG_METS_FLOCAT)
    +        el_FLocat = self._el.find('mets:FLocat[@LOCTYPE="URL"]', NS)
             if el_FLocat is not None:
                 return el_FLocat.get("{%s}href" % NS["xlink"])
             return ''
     
         @url.setter
         def url(self, url):
    -        """
    -        Set the ``@xlink:href`` of this ``mets:file`` to :py:attr:`url`.
    +        """
    +        Set the remote/original URL ``@xlink:href`` of this ``mets:file`` to :py:attr:`url`.
             """
    +        el_FLocat = self._el.find('mets:FLocat[@LOCTYPE="URL"]', NS)
             if url is None:
    +            if el_FLocat:
    +                self._el.remove(el_FLocat)
                 return
    -        el_FLocat = self._el.find('mets:FLocat', NS)
             if el_FLocat is None:
                 el_FLocat = ET.SubElement(self._el, TAG_METS_FLOCAT)
    -        el_FLocat.set("{%s}href" % NS["xlink"], url)
    + el_FLocat.set("{%s}href" % NS["xlink"], url) + el_FLocat.set("LOCTYPE", "URL") + + @property + def local_filename(self): + """ + Get the local/cached ``@xlink:href`` of this ``mets:file``. + """ + el_FLocat = self._el.find('mets:FLocat[@LOCTYPE="OTHER"][@OTHERLOCTYPE="FILE"]', NS) + if el_FLocat is not None: + return Path(el_FLocat.get("{%s}href" % NS["xlink"])) + + @local_filename.setter + def local_filename(self, fname): + """ + Set the local/cached ``@xlink:href`` of this ``mets:file`` to :py:attr:`local_filename`. + """ + el_FLocat = self._el.find('mets:FLocat[@LOCTYPE="OTHER"][@OTHERLOCTYPE="FILE"]', NS) + if not fname: + if el_FLocat is not None: + self._el.remove(el_FLocat) + return + if el_FLocat is None: + el_FLocat = ET.SubElement(self._el, TAG_METS_FLOCAT) + el_FLocat.set("{%s}href" % NS["xlink"], str(fname)) + el_FLocat.set("LOCTYPE", "OTHER") + el_FLocat.set("OTHERLOCTYPE", "FILE")
    + + +
    [docs]class ClientSideOcrdFile: + """ + Provides the same interface as :py:class:`ocrd_models.ocrd_file.OcrdFile` + but without attachment to :py:class:`ocrd_models.ocrd_mets.OcrdMets` since + this represents the response of the :py:class:`ocrd.mets_server.OcrdMetsServer`. + """ + + def __init__(self, el, mimetype=None, pageId=None, loctype='OTHER', local_filename=None, mets=None, url=None, ID=None, fileGrp=None): + """ + Args: + el (): ignored + Keyword Args: + mets (): ignored + mimetype (string): ``@MIMETYPE`` of this ``mets:file`` + pageId (string): ``@ID`` of the physical ``mets:structMap`` entry corresponding to this ``mets:file`` + loctype (string): ``@LOCTYPE`` of this ``mets:file`` + url (string): ignored XXX the remote/original file once we have proper mets:FLocat bookkeeping + local_filename (): ``@xlink:href`` of this ``mets:file`` - XXX the local file once we have proper mets:FLocat bookkeeping + ID (string): ``@ID`` of this ``mets:file`` + """ + self.ID = ID + self.mimetype = mimetype + self.local_filename = local_filename + self.url = url + self.loctype = loctype + self.pageId = pageId + self.fileGrp = fileGrp + + def __str__(self): + props = ', '.join([ + '='.join([k, getattr(self, k) if hasattr(self, k) and getattr(self, k) else '---']) + for k in ['fileGrp', 'ID', 'mimetype', 'url', 'local_filename'] + ]) + return '<ClientSideOcrdFile %s]/>' % (props)
    @@ -316,7 +339,7 @@

    Quick search

    - + @@ -333,8 +356,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_models/ocrd_mets.html b/site/core/_modules/ocrd_models/ocrd_mets.html index d732397a7..1b1103cf8 100644 --- a/site/core/_modules/ocrd_models/ocrd_mets.html +++ b/site/core/_modules/ocrd_models/ocrd_mets.html @@ -1,18 +1,16 @@ - - + - ocrd_models.ocrd_mets — ocrd 2.41.0 documentation - - - - - - - + ocrd_models.ocrd_mets — ocrd 2.58.1 documentation + + + + + + @@ -39,17 +37,21 @@

    Source code for ocrd_models.ocrd_mets

     """
     from datetime import datetime
     import re
    +import typing
     from lxml import etree as ET
    +from copy import deepcopy
     
     from ocrd_utils import (
    -    is_local_filename,
         getLogger,
    +    deprecation_warning,
         generate_range,
         VERSION,
         REGEX_PREFIX,
         REGEX_FILE_ID
     )
     
    +from ocrd_utils.config import config
    +
     from .constants import (
         NAMESPACES as NS,
         TAG_METS_AGENT,
    @@ -72,13 +74,13 @@ 

    Source code for ocrd_models.ocrd_mets

     REGEX_PREFIX_LEN = len(REGEX_PREFIX)
     
     
    [docs]class OcrdMets(OcrdXmlDocument): - """ + """ API to a single METS file """
    [docs] @staticmethod - def empty_mets(now=None): - """ + def empty_mets(now=None, cache_flag=False): + """ Create an empty METS file from bundled template. """ if not now: @@ -86,37 +88,136 @@

    Source code for ocrd_models.ocrd_mets

             tpl = METS_XML_EMPTY.decode('utf-8')
             tpl = tpl.replace('{{ VERSION }}', VERSION)
             tpl = tpl.replace('{{ NOW }}', '%s' % now)
    -        return OcrdMets(content=tpl.encode('utf-8'))
    + return OcrdMets(content=tpl.encode('utf-8'), cache_flag=cache_flag)
    def __init__(self, **kwargs): - """ - + """ """ super(OcrdMets, self).__init__(**kwargs) + # XXX If the environment variable OCRD_METS_CACHING is set to "true", + # then enable caching, if "false", disable caching, overriding the + # kwarg to the constructor + if config.is_set('OCRD_METS_CACHING'): + getLogger('ocrd.models.ocrd_mets').debug('METS Caching %s because OCRD_METS_CACHING is %s', + 'enabled' if config.OCRD_METS_CACHING else 'disabled', config.raw_value('OCRD_METS_CACHING')) + self._cache_flag = config.OCRD_METS_CACHING + + # If cache is enabled + if self._cache_flag: + self.refresh_caches() + + def __exit__(self): + """ + + """ + if self._cache_flag: + self._clear_caches() + def __str__(self): - """ + """ String representation """ - return 'OcrdMets[fileGrps=%s,files=%s]' % (self.file_groups, list(self.find_files())) + return 'OcrdMets[cached=%s,fileGrps=%s,files=%s]' % (self._cache_flag, self.file_groups, list(self.find_files())) + + def _fill_caches(self): + """ + Fills the caches with fileGrps and FileIDs + """ + + tree_root = self._tree.getroot() + + # Fill with files + el_fileSec = tree_root.find("mets:fileSec", NS) + if el_fileSec is None: + return + + log = getLogger('ocrd.models.ocrd_mets._fill_caches-files') + + for el_fileGrp in el_fileSec.findall('mets:fileGrp', NS): + fileGrp_use = el_fileGrp.get('USE') + + # Assign an empty dictionary that will hold the files of the added fileGrp + self._file_cache[fileGrp_use] = {} + + for el_file in el_fileGrp: + file_id = el_file.get('ID') + self._file_cache[fileGrp_use].update({file_id : el_file}) + # log.info("File added to the cache: %s" % file_id) + + # Fill with pages + el_div_list = tree_root.findall(".//mets:div[@TYPE='page']", NS) + if len(el_div_list) == 0: + return + log = getLogger('ocrd.models.ocrd_mets._fill_caches-pages') + + for el_div in el_div_list: + div_id = el_div.get('ID') + log.debug("DIV_ID: %s" % el_div.get('ID')) + + self._page_cache[div_id] = el_div + + # Assign an empty dictionary that will hold the fptr of the added page (div) + self._fptr_cache[div_id] = {} + + # log.info("Page_id added to the cache: %s" % div_id) + + for el_fptr in el_div: + self._fptr_cache[div_id].update({el_fptr.get('FILEID') : el_fptr}) + # log.info("Fptr added to the cache: %s" % el_fptr.get('FILEID')) + + # log.info("Len of page_cache: %s" % len(self._page_cache)) + # log.info("Len of fptr_cache: %s" % len(self._fptr_cache)) + + def _clear_caches(self): + """ + Deallocates the caches + """ + self._file_cache = None + self._page_cache = None + self._fptr_cache = None + +
    [docs] def refresh_caches(self): + if self._cache_flag: + # Cache for the files (mets:file) - two nested dictionaries + # The outer dictionary's Key: 'fileGrp.USE' + # The outer dictionary's Value: Inner dictionary + # The inner dictionary's Key: 'file.ID' + # The inner dictionary's Value: a 'file' object at some memory location + self._file_cache = {} + + # Cache for the pages (mets:div) + # The dictionary's Key: 'div.ID' + # The dictionary's Value: a 'div' object at some memory location + self._page_cache = {} + + # Cache for the file pointers (mets:fptr) - two nested dictionaries + # The outer dictionary's Key: 'div.ID' + # The outer dictionary's Value: Inner dictionary + # The inner dictionary's Key: 'fptr.FILEID' + # The inner dictionary's Value: a 'fptr' object at some memory location + self._fptr_cache = {} + + # Note, if the empty_mets() function is used to instantiate OcrdMets + # Then the cache is empty even after this operation + self._fill_caches()
    + @property def unique_identifier(self): - """ + """ Get the unique identifier by looking through ``mods:identifier`` - See `specs <https://ocr-d.de/en/spec/mets#unique-id-for-the-document-processed>`_ for details. """ for t in IDENTIFIER_PRIORITY: found = self._tree.getroot().find('.//mods:identifier[@type="%s"]' % t, NS) if found is not None: return found.text - + @unique_identifier.setter def unique_identifier(self, purl): - """ + """ Set the unique identifier by looking through ``mods:identifier`` - See `specs <https://ocr-d.de/en/spec/mets#unique-id-for-the-document-processed>`_ for details. """ id_el = None @@ -132,13 +233,13 @@

    Source code for ocrd_models.ocrd_mets

     
         @property
         def agents(self):
    -        """
    +        """
             List all :py:class:`ocrd_models.ocrd_agent.OcrdAgent`s
             """
             return [OcrdAgent(el_agent) for el_agent in self._tree.getroot().findall('mets:metsHdr/mets:agent', NS)]
     
     
    [docs] def add_agent(self, *args, **kwargs): - """ + """ Add an :py:class:`ocrd_models.ocrd_agent.OcrdAgent` to the list of agents in the ``metsHdr``. """ el_metsHdr = self._tree.getroot().find('.//mets:metsHdr', NS) @@ -146,71 +247,81 @@

    Source code for ocrd_models.ocrd_mets

                 el_metsHdr = ET.Element(TAG_METS_METSHDR)
                 self._tree.getroot().insert(0, el_metsHdr)
             #  assert(el_metsHdr is not None)
    -        el_agent = ET.SubElement(el_metsHdr, TAG_METS_AGENT)
    +        el_agent = ET.Element(TAG_METS_AGENT)
    +        try:
    +            el_agent_last = next(el_metsHdr.iterchildren(tag=TAG_METS_AGENT, reversed=True))
    +            el_agent_last.addnext(el_agent)
    +        except StopIteration:
    +            el_metsHdr.insert(0, el_agent)
             #  print(ET.tostring(el_metsHdr))
             return OcrdAgent(el_agent, *args, **kwargs)
    @property def file_groups(self): - """ + """ List the `@USE` of all `mets:fileGrp` entries. """ + + # WARNING: Actually we cannot return strings in place of elements! + if self._cache_flag: + return list(self._file_cache.keys()) + return [el.get('USE') for el in self._tree.getroot().findall('.//mets:fileGrp', NS)]
    [docs] def find_all_files(self, *args, **kwargs): - """ + """ Like :py:meth:`find_files` but return a list of all results. - Equivalent to ``list(self.find_files(...))`` """ return list(self.find_files(*args, **kwargs))
    # pylint: disable=multiple-statements -
    [docs] def find_files(self, ID=None, fileGrp=None, pageId=None, mimetype=None, url=None, local_only=False): - """ +
    [docs] def find_files(self, ID=None, fileGrp=None, pageId=None, mimetype=None, url=None, local_filename=None, local_only=False): + """ Search ``mets:file`` entries in this METS document and yield results. - - The :py:attr:`ID`, :py:attr:`pageId`, :py:attr:`fileGrp`, :py:attr:`url` and :py:attr:`mimetype` parameters can each be either a literal string, or a regular expression if the string starts with ``//`` (double slash). - If it is a regex, the leading ``//`` is removed and candidates are matched against the regex with `re.fullmatch`. If it is a literal string, comparison is done with string equality. - The :py:attr:`pageId` parameter supports the numeric range operator ``..``. For example, to find all files in pages ``PHYS_0001`` to ``PHYS_0003``, ``PHYS_0001..PHYS_0003`` will be expanded to ``PHYS_0001,PHYS_0002,PHYS_0003``. - Keyword Args: ID (string) : ``@ID`` of the ``mets:file`` fileGrp (string) : ``@USE`` of the ``mets:fileGrp`` to list files of pageId (string) : ``@ID`` of the corresponding physical ``mets:structMap`` entry (physical page) - url (string) : ``@xlink:href`` (URL or path) of ``mets:Flocat`` of ``mets:file`` + url (string) : ``@xlink:href`` remote/original URL of ``mets:Flocat`` of ``mets:file`` + local_filename (string) : ``@xlink:href`` local/cached filename of ``mets:Flocat`` of ``mets:file`` mimetype (string) : ``@MIMETYPE`` of ``mets:file`` local (boolean) : Whether to restrict results to local files in the filesystem - Yields: :py:class:`ocrd_models:ocrd_file:OcrdFile` instantiations """ + pageId_list = [] if pageId: - if pageId.startswith(REGEX_PREFIX): - pageIds, pageId = re.compile(pageId[REGEX_PREFIX_LEN:]), list() + pageId_patterns = [] + for pageId_token in re.split(r',', pageId): + if pageId_token.startswith(REGEX_PREFIX): + pageId_patterns.append(re.compile(pageId_token[REGEX_PREFIX_LEN:])) + elif '..' in pageId_token: + pageId_patterns += generate_range(*pageId_token.split('..', 1)) + else: + pageId_patterns += [pageId_token] + if self._cache_flag: + for page_id in self._page_cache.keys(): + if page_id in pageId_patterns or \ + any([isinstance(p, typing.Pattern) and p.fullmatch(page_id) for p in pageId_patterns]): + pageId_list += self._fptr_cache[page_id] else: - pageIds, pageId = pageId.split(','), list() - pageIds_expanded = [] - for pageId_ in pageIds: - if '..' in pageId_: - pageIds_expanded += generate_range(*pageId_.split('..', 1)) - pageIds += pageIds_expanded - for page in self._tree.getroot().xpath( - '//mets:div[@TYPE="page"]', namespaces=NS): - if (page.get('ID') in pageIds if isinstance(pageIds, list) else - pageIds.fullmatch(page.get('ID'))): - pageId.extend( - [fptr.get('FILEID') for fptr in page.findall('mets:fptr', NS)]) + for page in self._tree.getroot().xpath( + '//mets:div[@TYPE="page"]', namespaces=NS): + if page.get('ID') in pageId_patterns or \ + any([isinstance(p, typing.Pattern) and p.fullmatch(page.get('ID')) for p in pageId_patterns]): + pageId_list += [fptr.get('FILEID') for fptr in page.findall('mets:fptr', NS)] + if ID and ID.startswith(REGEX_PREFIX): ID = re.compile(ID[REGEX_PREFIX_LEN:]) if fileGrp and fileGrp.startswith(REGEX_PREFIX): @@ -219,17 +330,30 @@

    Source code for ocrd_models.ocrd_mets

                 mimetype = re.compile(mimetype[REGEX_PREFIX_LEN:])
             if url and url.startswith(REGEX_PREFIX):
                 url = re.compile(url[REGEX_PREFIX_LEN:])
    -        for cand in self._tree.getroot().xpath('//mets:file', namespaces=NS):
    +            
    +        candidates = []
    +        if self._cache_flag:
    +            if fileGrp:
    +                if isinstance(fileGrp, str):
    +                    candidates += self._file_cache.get(fileGrp, {}).values()
    +                else:
    +                    candidates = [x for fileGrp_needle, el_file_list in self._file_cache.items() if fileGrp.match(fileGrp_needle) for x in el_file_list.values()]
    +            else:
    +                candidates = [el_file for id_to_file in self._file_cache.values() for el_file in id_to_file.values()]
    +        else:
    +            candidates = self._tree.getroot().xpath('//mets:file', namespaces=NS)
    +            
    +        for cand in candidates:
                 if ID:
                     if isinstance(ID, str):
                         if not ID == cand.get('ID'): continue
                     else:
                         if not ID.fullmatch(cand.get('ID')): continue
     
    -            if pageId is not None and cand.get('ID') not in pageId:
    +            if pageId is not None and cand.get('ID') not in pageId_list:
                     continue
     
    -            if fileGrp:
    +            if not self._cache_flag and fileGrp:
                     if isinstance(fileGrp, str):
                         if cand.getparent().get('USE') != fileGrp: continue
                     else:
    @@ -242,7 +366,7 @@ 

    Source code for ocrd_models.ocrd_mets

                         if not mimetype.fullmatch(cand.get('MIMETYPE') or ''): continue
     
                 if url:
    -                cand_locat = cand.find('mets:FLocat', namespaces=NS)
    +                cand_locat = cand.find('mets:FLocat[@LOCTYPE="URL"]', namespaces=NS)
                     if cand_locat is None:
                         continue
                     cand_url = cand_locat.get('{%s}href' % NS['xlink'])
    @@ -251,22 +375,32 @@ 

    Source code for ocrd_models.ocrd_mets

                     else:
                         if not url.fullmatch(cand_url): continue
     
    -            f = OcrdFile(cand, mets=self)
    +            if local_filename:
    +                cand_locat = cand.find('mets:FLocat[@LOCTYPE="OTHER"][@OTHERLOCTYPE="FILE"]', namespaces=NS)
    +                if cand_locat is None:
    +                    continue
    +                cand_local_filename = cand_locat.get('{%s}href' % NS['xlink'])
    +                if isinstance(local_filename, str):
    +                    if cand_local_filename != local_filename: continue
    +                else:
    +                    if not local_filename.fullmatch(cand_local_filename): continue
    +
    +            if local_only:
    +                # deprecation_warning("'local_only' is deprecated, use 'local_filename=\"//.+\"' instead")
    +                is_local = cand.find('mets:FLocat[@LOCTYPE="OTHER"][@OTHERLOCTYPE="FILE"][@xlink:href]', namespaces=NS)
    +                if is_local is None:
    +                    continue
     
    -            # If only local resources should be returned and f is not a file path: skip the file
    -            if local_only and not is_local_filename(f.url):
    -                continue
    -            yield f
    + yield OcrdFile(cand, mets=self)
    [docs] def add_file_group(self, fileGrp): - """ + """ Add a new ``mets:fileGrp``. - Arguments: fileGrp (string): ``@USE`` of the new ``mets:fileGrp``. """ if ',' in fileGrp: - raise Exception('fileGrp must not contain commas') + raise ValueError('fileGrp must not contain commas') el_fileSec = self._tree.getroot().find('mets:fileSec', NS) if el_fileSec is None: el_fileSec = ET.SubElement(self._tree.getroot(), TAG_METS_FILESEC) @@ -274,27 +408,34 @@

    Source code for ocrd_models.ocrd_mets

             if el_fileGrp is None:
                 el_fileGrp = ET.SubElement(el_fileSec, TAG_METS_FILEGRP)
                 el_fileGrp.set('USE', fileGrp)
    +
    +            if self._cache_flag:
    +                # Assign an empty dictionary that will hold the files of the added fileGrp
    +                self._file_cache[fileGrp] = {}
    +
             return el_fileGrp
    [docs] def rename_file_group(self, old, new): - """ + """ Rename a ``mets:fileGrp`` by changing the ``@USE`` from :py:attr:`old` to :py:attr:`new`. """ el_fileGrp = self._tree.getroot().find('mets:fileSec/mets:fileGrp[@USE="%s"]' % old, NS) if el_fileGrp is None: raise FileNotFoundError("No such fileGrp '%s'" % old) - el_fileGrp.set('USE', new)
    + el_fileGrp.set('USE', new) + + if self._cache_flag: + self._file_cache[new] = self._file_cache.pop(old)
    [docs] def remove_file_group(self, USE, recursive=False, force=False): - """ + """ Remove a ``mets:fileGrp`` (single fixed ``@USE`` or multiple regex ``@USE``) - Arguments: USE (string): ``@USE`` of the ``mets:fileGrp`` to delete. Can be a regex if prefixed with ``//`` recursive (boolean): Whether to recursively delete each ``mets:file`` in the group force (boolean): Do not raise an exception if ``mets:fileGrp`` does not exist """ - log = getLogger('ocrd_models.ocrd_mets.remove_file_group') + log = getLogger('ocrd.models.ocrd_mets.remove_file_group') el_fileSec = self._tree.getroot().find('mets:fileSec', NS) if el_fileSec is None: raise Exception("No fileSec!") @@ -315,18 +456,31 @@

    Source code for ocrd_models.ocrd_mets

                     log.warning(msg)
                     return
                 raise Exception(msg)
    -        files = el_fileGrp.findall('mets:file', NS)
    +
    +        # The cache should also be used here
    +        if self._cache_flag:
    +            files = self._file_cache.get(el_fileGrp.get('USE'), {}).values()
    +        else:
    +            files = el_fileGrp.findall('mets:file', NS)
    +
             if files:
                 if not recursive:
                     raise Exception("fileGrp %s is not empty and recursive wasn't set" % USE)
    -            for f in files:
    -                self.remove_one_file(f.get('ID'))
    +            for f in list(files):
    +                self.remove_one_file(ID=f.get('ID'), fileGrp=f.getparent().get('USE'))
    +
    +        if self._cache_flag:
    +            # Note: Since the files inside the group are removed
    +            # with the 'remove_one_file' method above, 
    +            # we should not take care of that again.
    +            # We just remove the fileGrp.
    +            del self._file_cache[el_fileGrp.get('USE')]
    +
             el_fileGrp.getparent().remove(el_fileGrp)
    [docs] def add_file(self, fileGrp, mimetype=None, url=None, ID=None, pageId=None, force=False, local_filename=None, ignore=False, **kwargs): - """ + """ Instantiate and add a new :py:class:`ocrd_models.ocrd_file.OcrdFile`. - Arguments: fileGrp (string): ``@USE`` of ``mets:fileGrp`` to add to Keyword Args: @@ -346,26 +500,36 @@

    Source code for ocrd_models.ocrd_mets

                 raise ValueError("Invalid syntax for mets:file/@ID %s (not an xs:ID)" % ID)
             if not REGEX_FILE_ID.fullmatch(fileGrp):
                 raise ValueError("Invalid syntax for mets:fileGrp/@USE %s (not an xs:ID)" % fileGrp)
    -        log = getLogger('ocrd_models.ocrd_mets.add_file')
    +        log = getLogger('ocrd.models.ocrd_mets.add_file')
    +
             el_fileGrp = self.add_file_group(fileGrp)
             if not ignore:
    -            mets_file = next(self.find_files(ID=ID), None)
    +            mets_file = next(self.find_files(ID=ID, fileGrp=fileGrp), None)
                 if mets_file:
                     if mets_file.fileGrp == fileGrp and \
                        mets_file.pageId == pageId and \
                        mets_file.mimetype == mimetype:
                         if not force:
                             raise FileExistsError(f"A file with ID=={ID} already exists {mets_file} and neither force nor ignore are set")
    -                    self.remove_file(ID=ID)
    +                    self.remove_file(ID=ID, fileGrp=fileGrp)
                     else:
                         raise FileExistsError(f"A file with ID=={ID} already exists {mets_file} but unrelated - cannot mitigate")
    -        kwargs = {k: v for k, v in locals().items() if k in ['url', 'ID', 'mimetype', 'pageId', 'local_filename'] and v}
    -        mets_file = OcrdFile(ET.SubElement(el_fileGrp, TAG_METS_FILE), mets=self, **kwargs)
    +
    +        # To get rid of Python's FutureWarning - checking if v is not None
    +        kwargs = {k: v for k, v in locals().items() if k in ['url', 'ID', 'mimetype', 'pageId', 'local_filename'] and v is not None}
    +        # This separation is needed to reuse the same el_mets_file element in the caching if block
    +        el_mets_file = ET.SubElement(el_fileGrp, TAG_METS_FILE)
    +        # The caching of the physical page is done in the OcrdFile constructor
    +        mets_file = OcrdFile(el_mets_file, mets=self, **kwargs)
    +
    +        if self._cache_flag:
    +            # Add the file to the file cache
    +            self._file_cache[fileGrp].update({ID: el_mets_file})
     
             return mets_file
    [docs] def remove_file(self, *args, **kwargs): - """ + """ Delete each ``ocrd:file`` matching the query. Same arguments as :py:meth:`find_files` """ files = list(self.find_files(*args, **kwargs)) @@ -382,36 +546,56 @@

    Source code for ocrd_models.ocrd_mets

                 return []
             raise FileNotFoundError("File not found: %s %s" % (args, kwargs))
    -
    [docs] def remove_one_file(self, ID): - """ +
    [docs] def remove_one_file(self, ID, fileGrp=None): + """ Delete an existing :py:class:`ocrd_models.ocrd_file.OcrdFile`. - Arguments: - ID (string): ``@ID`` of the ``mets:file`` to delete - + ID (string|OcrdFile): ``@ID`` of the ``mets:file`` to delete Can also be an :py:class:`ocrd_models.ocrd_file.OcrdFile` to avoid search via ``ID``. + fileGrp (string): ``@USE`` of the ``mets:fileGrp`` containing the ``mets:file``. Used only for optimization. Returns: The old :py:class:`ocrd_models.ocrd_file.OcrdFile` reference. """ - log = getLogger('ocrd_models.ocrd_mets.remove_one_file') - log.debug("remove_one_file(%s)" % ID) + log = getLogger('ocrd.models.ocrd_mets.remove_one_file') + log.debug("remove_one_file(%s %s)" % (ID, fileGrp)) if isinstance(ID, OcrdFile): ocrd_file = ID ID = ocrd_file.ID else: - ocrd_file = next(self.find_files(ID=ID), None) + ocrd_file = next(self.find_files(ID=ID, fileGrp=fileGrp), None) if not ocrd_file: - raise FileNotFoundError("File not found: %s" % ID) + raise FileNotFoundError("File not found: %s (fileGr=%s)" % (ID, fileGrp)) + + # Delete the physical page ref + fptrs = [] + if self._cache_flag: + for page in self._fptr_cache.keys(): + if ID in self._fptr_cache[page]: + fptrs.append(self._fptr_cache[page][ID]) + else: + fptrs = self._tree.getroot().findall('.//mets:fptr[@FILEID="%s"]' % ID, namespaces=NS) # Delete the physical page ref - for fptr in self._tree.getroot().findall('.//mets:fptr[@FILEID="%s"]' % ID, namespaces=NS): + for fptr in fptrs: log.debug("Delete fptr element %s for page '%s'", fptr, ID) page_div = fptr.getparent() page_div.remove(fptr) + # Remove the fptr from the cache as well + if self._cache_flag: + del self._fptr_cache[page_div.get('ID')][ID] # delete empty pages if not page_div.getchildren(): log.debug("Delete empty page %s", page_div) page_div.getparent().remove(page_div) + # Delete the empty pages from caches as well + if self._cache_flag: + del self._page_cache[page_div.get('ID')] + del self._fptr_cache[page_div.get('ID')] + + # Delete the file reference from the cache + if self._cache_flag: + parent_use = ocrd_file._el.getparent().get('USE') + del self._file_cache[parent_use][ocrd_file.ID] # Delete the file reference # pylint: disable=protected-access @@ -421,34 +605,43 @@

    Source code for ocrd_models.ocrd_mets

     
         @property
         def physical_pages(self):
    -        """
    +        """
             List all page IDs (the ``@ID`` of each physical ``mets:structMap`` ``mets:div``)
             """
    -        return self._tree.getroot().xpath(
    +        if self._cache_flag:
    +            return list(self._page_cache.keys())
    +            
    +        return [str(x) for x in self._tree.getroot().xpath(
                 'mets:structMap[@TYPE="PHYSICAL"]/mets:div[@TYPE="physSequence"]/mets:div[@TYPE="page"]/@ID',
    -            namespaces=NS)
    +            namespaces=NS)]
     
     
    [docs] def get_physical_pages(self, for_fileIds=None): - """ + """ List all page IDs (the ``@ID`` of each physical ``mets:structMap`` ``mets:div``), optionally for a subset of ``mets:file`` ``@ID`` :py:attr:`for_fileIds`. """ if for_fileIds is None: return self.physical_pages ret = [None] * len(for_fileIds) - for page in self._tree.getroot().xpath( - 'mets:structMap[@TYPE="PHYSICAL"]/mets:div[@TYPE="physSequence"]/mets:div[@TYPE="page"]', - namespaces=NS): - for fptr in page.findall('mets:fptr', NS): - if fptr.get('FILEID') in for_fileIds: - ret[for_fileIds.index(fptr.get('FILEID'))] = page.get('ID') + + if self._cache_flag: + for pageId in self._fptr_cache.keys(): + for fptr in self._fptr_cache[pageId].keys(): + if fptr in for_fileIds: + ret[for_fileIds.index(fptr)] = pageId + else: + for page in self._tree.getroot().xpath( + 'mets:structMap[@TYPE="PHYSICAL"]/mets:div[@TYPE="physSequence"]/mets:div[@TYPE="page"]', + namespaces=NS): + for fptr in page.findall('mets:fptr', NS): + if fptr.get('FILEID') in for_fileIds: + ret[for_fileIds.index(fptr.get('FILEID'))] = page.get('ID') return ret
    [docs] def set_physical_page_for_file(self, pageId, ocrd_file, order=None, orderlabel=None): - """ + """ Set the physical page ID (``@ID`` of the physical ``mets:structMap`` ``mets:div`` entry) corresponding to the ``mets:file`` :py:attr:`ocrd_file`, creating all structures if necessary. - Arguments: pageId (string): ``@ID`` of the physical ``mets:structMap`` entry to use ocrd_file (object): existing :py:class:`ocrd_models.ocrd_file.OcrdFile` object @@ -456,11 +649,22 @@

    Source code for ocrd_models.ocrd_mets

                 order (string): ``@ORDER`` to use
                 orderlabel (string): ``@ORDERLABEL`` to use
             """
    -        #  print(pageId, ocrd_file)
    +
             # delete any page mapping for this file.ID
    -        for el_fptr in self._tree.getroot().findall(
    +        candidates = []
    +        if self._cache_flag:
    +            for page_id in self._fptr_cache.keys():
    +                if ocrd_file.ID in self._fptr_cache[page_id].keys():
    +                    if self._fptr_cache[page_id][ocrd_file.ID] is not None:
    +                        candidates.append(self._fptr_cache[page_id][ocrd_file.ID])
    +        else:
    +            candidates = self._tree.getroot().findall(
                     'mets:structMap[@TYPE="PHYSICAL"]/mets:div[@TYPE="physSequence"]/mets:div[@TYPE="page"]/mets:fptr[@FILEID="%s"]' %
    -                ocrd_file.ID, namespaces=NS):
    +                ocrd_file.ID, namespaces=NS)
    +
    +        for el_fptr in candidates:
    +            if self._cache_flag:
    +                del self._fptr_cache[el_fptr.getparent().get('ID')][ocrd_file.ID]
                 el_fptr.getparent().remove(el_fptr)
     
             # find/construct as necessary
    @@ -472,7 +676,14 @@ 

    Source code for ocrd_models.ocrd_mets

             if el_seqdiv is None:
                 el_seqdiv = ET.SubElement(el_structmap, TAG_METS_DIV)
                 el_seqdiv.set('TYPE', 'physSequence')
    -        el_pagediv = el_seqdiv.find('mets:div[@ID="%s"]' % pageId, NS)
    +        
    +        el_pagediv = None
    +        if self._cache_flag:
    +            if pageId in self._page_cache:
    +                el_pagediv = self._page_cache[pageId]
    +        else:
    +            el_pagediv = el_seqdiv.find('mets:div[@ID="%s"]' % pageId, NS)
    +        
             if el_pagediv is None:
                 el_pagediv = ET.SubElement(el_seqdiv, TAG_METS_DIV)
                 el_pagediv.set('TYPE', 'page')
    @@ -481,52 +692,90 @@ 

    Source code for ocrd_models.ocrd_mets

                     el_pagediv.set('ORDER', order)
                 if orderlabel:
                     el_pagediv.set('ORDERLABEL', orderlabel)
    +            if self._cache_flag:
    +                # Create a new entry in the page cache
    +                self._page_cache[pageId] = el_pagediv
    +                # Create a new entry in the fptr cache and 
    +                # assign an empty dictionary to hold the fileids
    +                self._fptr_cache[pageId] = {}
    +                
             el_fptr = ET.SubElement(el_pagediv, TAG_METS_FPTR)
    -        el_fptr.set('FILEID', ocrd_file.ID)
    + el_fptr.set('FILEID', ocrd_file.ID) + + if self._cache_flag: + # Assign the ocrd fileID to the pageId in the cache + self._fptr_cache[el_pagediv.get('ID')].update({ocrd_file.ID : el_fptr})
    [docs] def get_physical_page_for_file(self, ocrd_file): - """ + """ Get the physical page ID (``@ID`` of the physical ``mets:structMap`` ``mets:div`` entry) corresponding to the ``mets:file`` :py:attr:`ocrd_file`. """ - ret = self._tree.getroot().xpath( - '/mets:mets/mets:structMap[@TYPE="PHYSICAL"]/mets:div[@TYPE="physSequence"]/mets:div[@TYPE="page"][./mets:fptr[@FILEID="%s"]]/@ID' % - ocrd_file.ID, namespaces=NS) - if ret: + ret = [] + if self._cache_flag: + for pageId in self._fptr_cache.keys(): + if ocrd_file.ID in self._fptr_cache[pageId].keys(): + ret.append(self._page_cache[pageId].get('ID')) + else: + ret = self._tree.getroot().xpath( + '/mets:mets/mets:structMap[@TYPE="PHYSICAL"]/mets:div[@TYPE="physSequence"]/mets:div[@TYPE="page"][./mets:fptr[@FILEID="%s"]]/@ID' % + ocrd_file.ID, namespaces=NS) + + # To get rid of the python's FutureWarning + if len(ret): return ret[0]
    [docs] def remove_physical_page(self, ID): - """ + """ Delete page (physical ``mets:structMap`` ``mets:div`` entry ``@ID``) :py:attr:`ID`. """ - mets_div = self._tree.getroot().xpath( - 'mets:structMap[@TYPE="PHYSICAL"]/mets:div[@TYPE="physSequence"]/mets:div[@TYPE="page"][@ID="%s"]' % ID, - namespaces=NS) + mets_div = None + if self._cache_flag: + if ID in self._page_cache.keys(): + mets_div = [self._page_cache[ID]] + else: + mets_div = self._tree.getroot().xpath( + 'mets:structMap[@TYPE="PHYSICAL"]/mets:div[@TYPE="physSequence"]/mets:div[@TYPE="page"][@ID="%s"]' % ID, + namespaces=NS) if mets_div: - mets_div[0].getparent().remove(mets_div[0])
    + mets_div[0].getparent().remove(mets_div[0]) + if self._cache_flag: + del self._page_cache[ID] + del self._fptr_cache[ID]
    [docs] def remove_physical_page_fptr(self, fileId): - """ + """ Delete all ``mets:fptr[@FILEID = fileId]`` to ``mets:file[@ID == fileId]`` for :py:attr:`fileId` from all ``mets:div`` entries in the physical ``mets:structMap``. Returns: List of pageIds that mets:fptrs were deleted from """ - mets_fptrs = self._tree.getroot().xpath( - 'mets:structMap[@TYPE="PHYSICAL"]/mets:div[@TYPE="physSequence"]/mets:div[@TYPE="page"]/mets:fptr[@FILEID="%s"]' % fileId, - namespaces=NS) + + # Question: What is the reason to keep a list of mets_fptrs? + # Do we have a situation in which the fileId is same for different pageIds ? + # From the examples I have seen inside 'assets' that is not the case + # and the mets_fptrs list will always contain a single element. + # If that's the case then we do not need to iterate 2 loops, just one. + mets_fptrs = [] + if self._cache_flag: + for page_id in self._fptr_cache.keys(): + if fileId in self._fptr_cache[page_id].keys(): + mets_fptrs.append(self._fptr_cache[page_id][fileId]) + else: + mets_fptrs = self._tree.getroot().xpath( + 'mets:structMap[@TYPE="PHYSICAL"]/mets:div[@TYPE="physSequence"]/mets:div[@TYPE="page"]/mets:fptr[@FILEID="%s"]' % fileId, namespaces=NS) ret = [] for mets_fptr in mets_fptrs: mets_div = mets_fptr.getparent() ret.append(mets_div.get('ID')) + if self._cache_flag: + del self._fptr_cache[mets_div.get('ID')][mets_fptr.get('FILEID')] mets_div.remove(mets_fptr) return ret
    [docs] def merge(self, other_mets, force=False, fileGrp_mapping=None, fileId_mapping=None, pageId_mapping=None, after_add_cb=None, **kwargs): - """ + """ Add all files from other_mets. - Accepts the same kwargs as :py:func:`find_files` - Keyword Args: force (boolean): Whether to :py:meth:`add_file`s with force (overwriting existing ``mets:file``s) fileGrp_mapping (dict): Map :py:attr:`other_mets` fileGrp to fileGrp in this METS @@ -545,6 +794,7 @@

    Source code for ocrd_models.ocrd_mets

                         fileGrp_mapping.get(f_src.fileGrp, f_src.fileGrp),
                         mimetype=f_src.mimetype,
                         url=f_src.url,
    +                    local_filename=f_src.local_filename,
                         ID=fileId_mapping.get(f_src.ID, f_src.ID),
                         pageId=pageId_mapping.get(f_src.pageId, f_src.pageId),
                         force=force)
    @@ -604,7 +854,7 @@ 

    Quick search

    - + @@ -621,8 +871,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_models/ocrd_page.html b/site/core/_modules/ocrd_models/ocrd_page.html index a17f1dc70..b376a1bcf 100644 --- a/site/core/_modules/ocrd_models/ocrd_page.html +++ b/site/core/_modules/ocrd_models/ocrd_page.html @@ -1,18 +1,16 @@ - - + - ocrd_models.ocrd_page — ocrd 2.41.0 documentation - - - - - - - + ocrd_models.ocrd_page — ocrd 2.58.1 documentation + + + + + + @@ -168,7 +166,7 @@

    Source code for ocrd_models.ocrd_page

     
     # add docstrings
     parse.__doc__ = (
    -    """Parse a file, create the object tree, and export it.
    +    """Parse a file, create the object tree, and export it.
     
         Arguments:
             inFileName (str) -- Path to the PAGE-XML file.
    @@ -181,7 +179,7 @@ 

    Source code for ocrd_models.ocrd_page

     )
     
     parseEtree.__doc__ = (
    -    """Parse a file, create the object tree, and export it. Return tree and mappings, too.
    +    """Parse a file, create the object tree, and export it. Return tree and mappings, too.
     
         Arguments:
             inFileName (str) -- Path to the PAGE-XML file.
    @@ -199,7 +197,7 @@ 

    Source code for ocrd_models.ocrd_page

     
     # fix generated (malformed) docstrings
     parseString.__doc__ = (
    -    """Parse a string, create the object tree, and export it.
    +    """Parse a string, create the object tree, and export it.
     
         Arguments:
             inString (str) -- This XML fragment should not start \
    @@ -214,7 +212,7 @@ 

    Source code for ocrd_models.ocrd_page

     OcrdPage = PcGtsType
     
     
    [docs]def to_xml(el, skip_declaration=False): - """ + """ Serialize ``pc:PcGts`` document as string. """ # XXX remove potential empty ReadingOrder @@ -287,7 +285,7 @@

    Quick search

    - + @@ -304,8 +302,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_models/ocrd_page_generateds.html b/site/core/_modules/ocrd_models/ocrd_page_generateds.html index e97345a05..f78f586ac 100644 --- a/site/core/_modules/ocrd_models/ocrd_page_generateds.html +++ b/site/core/_modules/ocrd_models/ocrd_page_generateds.html @@ -1,18 +1,16 @@ - - + - ocrd_models.ocrd_page_generateds — ocrd 2.41.0 documentation - - - - - - - + ocrd_models.ocrd_page_generateds — ocrd 2.58.1 documentation + + + + + + @@ -677,7 +675,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def getSubclassFromModule_(module, class_): - '''Get the subclass of a class from a specific module.''' + '''Get the subclass of a class from a specific module.''' name = class_.__name__ + 'Sub' if hasattr(module, name): return getattr(module, name) @@ -1061,7 +1059,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    class ProductionSimpleType(str, Enum): - """Text production type""" + """Text production type""" PRINTED='printed' TYPEWRITTEN='typewritten' HANDWRITTENCURSIVE='handwritten-cursive' @@ -1268,7 +1266,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    return self.pcGtsId or '' return self.imageFilename
    [docs] def get_AllAlternativeImagePaths(self, page=True, region=True, line=True, word=True, glyph=True): - """ + """ Get all the ``pc:AlternativeImage/@filename`` paths referenced in the PAGE-XML document. Arguments: @@ -1317,7 +1315,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    return ret
    [docs] def prune_ReadingOrder(self): - """ + """ Remove any empty ReadingOrder elements """ ro = self.get_Page().get_ReadingOrder() @@ -1338,7 +1336,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class MetadataType(GeneratedsSuper): - """External reference of any kind""" + """External reference of any kind""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ MemberSpec_('externalRef', 'string', 0, 1, {'use': 'optional'}), @@ -1579,7 +1577,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class MetadataItemType(GeneratedsSuper): - """Type of metadata (e.g. author) + """Type of metadata (e.g. author) E.g. imagePhotometricInterpretation E.g. RGB""" __hash__ = GeneratedsSuper.__hash__ @@ -1767,7 +1765,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class LabelsType(GeneratedsSuper): - """Reference to external model / ontology / schema + """Reference to external model / ontology / schema E.g. an RDF resource identifier (to be used as subject or object of an RDF triple) Prefix for all labels (e.g. first part of an URI)""" @@ -1950,7 +1948,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class LabelType(GeneratedsSuper): - """Semantic label + """Semantic label The label / tag (e.g. 'person'). Can be an RDF resource identifier (e.g. object of an RDF triple). @@ -2091,7 +2089,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class PageType(GeneratedsSuper): - """Contains the image file name including the file extension. + """Contains the image file name including the file extension. Specifies the width of the image.Specifies the height of the image.Specifies the image resolution in width.Specifies the image resolution in height. @@ -3196,7 +3194,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    return regionrefs
    [docs] def get_AllRegions(self, classes=None, order='document', depth=0): - """ + """ Get all the ``*Region`` elements, or only those provided by `classes`. Return in document order, unless `order` is ``reading-order``. @@ -3252,7 +3250,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    ret = in_reading_order + [r for r in ret if r not in in_reading_order] return ret
    [docs] def get_AllAlternativeImages(self, page=True, region=True, line=True, word=True, glyph=True): - """ + """ Get all the ``pc:AlternativeImage`` in a document Arguments: @@ -3283,7 +3281,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    return ret
    [docs] def invalidate_AlternativeImage(self, feature_selector=None): - """ + """ Remove derived images from this segment (due to changed coordinates). If `feature_selector` is not none, remove only images with @@ -3314,7 +3312,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    self.gds_collector_.add_message('Removing AlternativeImage %s from "%s"' % ( image.get_comments() or '', name))
    [docs] def set_Border(self, Border): - """ + """ Set coordinate polygon by given :py:class:`BorderType` object. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been cropped with a bbox @@ -3323,7 +3321,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    self.invalidate_AlternativeImage(feature_selector='cropped') self.Border = Border
    [docs] def get_AllTextLines(self, region_order='document', respect_textline_order=True): - """ + """ Return all the TextLine in the document Arguments: @@ -3349,7 +3347,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    return ret
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -3363,7 +3361,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class CoordsType(GeneratedsSuper): - """Polygon outline of the element as a path of points. + """Polygon outline of the element as a path of points. No points may lie outside the outline of its parent, which in the case of Border is the bounding rectangle of the root image. Paths are closed by convention, @@ -3515,7 +3513,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_points(self, points): - """ + """ Set coordinate polygon by given string. Moreover, invalidate the parent's ``pc:AlternativeImage``s (because they will have been cropped with a bbox @@ -3534,7 +3532,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class TextLineType(GeneratedsSuper): - """Overrides primaryLanguage attribute of parent text + """Overrides primaryLanguage attribute of parent text region The primary script used in the text line The secondary script used in the text line @@ -4015,7 +4013,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def invalidate_AlternativeImage(self, feature_selector=None): - """ + """ Remove derived images from this segment (due to changed coordinates). If `feature_selector` is not none, remove only images with @@ -4046,7 +4044,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    self.gds_collector_.add_message('Removing AlternativeImage %s from "%s"' % ( image.get_comments() or '', name))
    [docs] def set_Coords(self, Coords): - """ + """ Set coordinate polygon by given :py:class:`CoordsType` object. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been cropped with a bbox @@ -4063,7 +4061,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class WordType(GeneratedsSuper): - """Overrides primaryLanguage attribute of parent line + """Overrides primaryLanguage attribute of parent line and/or text region The primary script used in the word The secondary script used in the word @@ -4507,7 +4505,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def invalidate_AlternativeImage(self, feature_selector=None): - """ + """ Remove derived images from this segment (due to changed coordinates). If `feature_selector` is not none, remove only images with @@ -4538,7 +4536,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    self.gds_collector_.add_message('Removing AlternativeImage %s from "%s"' % ( image.get_comments() or '', name))
    [docs] def set_Coords(self, Coords): - """ + """ Set coordinate polygon by given :py:class:`CoordsType` object. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been cropped with a bbox @@ -4555,7 +4553,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class GlyphType(GeneratedsSuper): - """The script used for the glyph + """The script used for the glyph Overrides the production attribute of the parent word / text line / text region. For generic use""" @@ -4951,7 +4949,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def invalidate_AlternativeImage(self, feature_selector=None): - """ + """ Remove derived images from this segment (due to changed coordinates). If `feature_selector` is not none, remove only images with @@ -4982,7 +4980,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    self.gds_collector_.add_message('Removing AlternativeImage %s from "%s"' % ( image.get_comments() or '', name))
    [docs] def set_Coords(self, Coords): - """ + """ Set coordinate polygon by given :py:class:`CoordsType` object. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been cropped with a bbox @@ -4999,7 +4997,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class TextEquivType(GeneratedsSuper): - """Used for sort order in case multiple TextEquivs are defined. + """Used for sort order in case multiple TextEquivs are defined. The text content with the lowest index should be interpreted as the main text content. OCR confidence value (between 0 and 1) @@ -5249,7 +5247,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class GridType(GeneratedsSuper): - """Matrix of grid points defining the table grid on the page.""" + """Matrix of grid points defining the table grid on the page.""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ MemberSpec_('GridPoints', 'GridPointsType', 1, 0, {'maxOccurs': 'unbounded', 'minOccurs': '2', 'name': 'GridPoints', 'type': 'GridPointsType'}, None), @@ -5367,7 +5365,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class GridPointsType(GeneratedsSuper): - """Points with x,y coordinates. + """Points with x,y coordinates. The grid row index""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ @@ -5499,7 +5497,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class PrintSpaceType(GeneratedsSuper): - """Determines the effective area on the paper of a printed page. + """Determines the effective area on the paper of a printed page. Its size is equal for all pages of a book (exceptions: titlepage, multipage pictures). It contains all living elements (except marginals) @@ -5615,7 +5613,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class ReadingOrderType(GeneratedsSuper): - """Definition of the reading order within the page. + """Definition of the reading order within the page. To express a reading order between elements they have to be included in an OrderedGroup. Groups may contain further groups. @@ -5779,7 +5777,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class RegionRefIndexedType(GeneratedsSuper): - """Numbered regionPosition (order number) of this item within the current + """Numbered regionPosition (order number) of this item within the current hierarchy level.""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ @@ -5899,7 +5897,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class OrderedGroupIndexedType(GeneratedsSuper): - """Indexed group containing ordered elements + """Indexed group containing ordered elements Optional link to a parent region of nested regions. The parent region doubles as reading order group. Only the nested regions should be allowed as group members. @@ -6268,7 +6266,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    return hash(self.id) # pylint: disable=invalid-name,missing-module-docstring,line-too-long
    [docs] def get_AllIndexed(self, classes=None, index_sort=True): - """ + """ Get all indexed children sorted by their ``@index``. Arguments: @@ -6298,7 +6296,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    # pylint: disable=line-too-long,invalid-name,missing-module-docstring
    [docs] def extend_AllIndexed(self, elements, validate_continuity=False): - """ + """ Add all elements in list `elements`, respecting ``@index`` order. With `validate_continuity`, check that all new elements come after all old elements (or raise an exception). @@ -6327,7 +6325,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    return self.get_AllIndexed()
    # pylint: disable=line-too-long,invalid-name,missing-module-docstring
    [docs] def sort_AllIndexed(self, validate_uniqueness=True): - """ + """ Sort all indexed children in-place. """ elements = self.get_AllIndexed(index_sort=True) @@ -6369,7 +6367,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class UnorderedGroupIndexedType(GeneratedsSuper): - """Indexed group containing unordered elements + """Indexed group containing unordered elements Optional link to a parent region of nested regions. The parent region doubles as reading order group. Only the nested regions should be allowed as group members. @@ -6737,7 +6735,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def get_UnorderedGroupChildren(self): - """ + """ List all non-metadata children of an :py:class:`UnorderedGroupType` """ # TODO: should not change order @@ -6849,7 +6847,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class OrderedGroupType(GeneratedsSuper): - """Numbered group (contains ordered elements) + """Numbered group (contains ordered elements) Optional link to a parent region of nested regions. The parent region doubles as reading order group. Only the nested regions should be allowed as group members. @@ -7200,7 +7198,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    return hash(self.id) # pylint: disable=invalid-name,missing-module-docstring,line-too-long
    [docs] def get_AllIndexed(self, classes=None, index_sort=True): - """ + """ Get all indexed children sorted by their ``@index``. Arguments: @@ -7230,7 +7228,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    # pylint: disable=line-too-long,invalid-name,missing-module-docstring
    [docs] def extend_AllIndexed(self, elements, validate_continuity=False): - """ + """ Add all elements in list `elements`, respecting ``@index`` order. With `validate_continuity`, check that all new elements come after all old elements (or raise an exception). @@ -7259,7 +7257,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    return self.get_AllIndexed()
    # pylint: disable=line-too-long,invalid-name,missing-module-docstring
    [docs] def sort_AllIndexed(self, validate_uniqueness=True): - """ + """ Sort all indexed children in-place. """ elements = self.get_AllIndexed(index_sort=True) @@ -7301,7 +7299,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class UnorderedGroupType(GeneratedsSuper): - """Numbered group (contains unordered elements) + """Numbered group (contains unordered elements) Optional link to a parent region of nested regions. The parent region doubles as reading order group. Only the nested regions should be allowed as group members. @@ -7651,7 +7649,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def get_UnorderedGroupChildren(self): - """ + """ List all non-metadata children of an :py:class:`UnorderedGroupType` """ # TODO: should not change order @@ -7661,7 +7659,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class BorderType(GeneratedsSuper): - """Border of the actual page (if the scanned image + """Border of the actual page (if the scanned image contains parts not belonging to the page).""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ @@ -7769,7 +7767,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_Coords(self, Coords): - """ + """ Set coordinate polygon by given :py:class:`CoordsType` object. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been cropped with a bbox @@ -7786,7 +7784,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class LayersType(GeneratedsSuper): - """Can be used to express the z-index of overlapping + """Can be used to express the z-index of overlapping regions. An element with a greater z-index is always in front of another element with lower z-index.""" __hash__ = GeneratedsSuper.__hash__ @@ -8069,7 +8067,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class BaselineType(GeneratedsSuper): - """Confidence value (between 0 and 1)""" + """Confidence value (between 0 and 1)""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ MemberSpec_('points', 'pc:PointsType', 0, 0, {'use': 'required'}), @@ -8217,7 +8215,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class RelationsType(GeneratedsSuper): - """Container for one-to-one relations between layout + """Container for one-to-one relations between layout objects (for example: DropCap - paragraph, caption - image).""" __hash__ = GeneratedsSuper.__hash__ @@ -8337,7 +8335,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class RelationType(GeneratedsSuper): - """One-to-one relation between to layout object. Use 'link' + """One-to-one relation between to layout object. Use 'link' for loose relations and 'join' for strong relations (where something is fragmented for instance). Examples for 'link': caption - image floating - @@ -8569,7 +8567,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class TextStyleType(GeneratedsSuper): - """Monospace (fixed-pitch, non-proportional) or + """Monospace (fixed-pitch, non-proportional) or proportional font. For instance: Arial, Times New Roman. Add more information if necessary @@ -9081,7 +9079,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class RegionType(GeneratedsSuper): - """For generic use + """For generic use Is this region a continuation of another region (in previous column or page, for example)?""" __hash__ = GeneratedsSuper.__hash__ @@ -9744,7 +9742,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def invalidate_AlternativeImage(self, feature_selector=None): - """ + """ Remove derived images from this segment (due to changed coordinates). If `feature_selector` is not none, remove only images with @@ -9775,7 +9773,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    self.gds_collector_.add_message('Removing AlternativeImage %s from "%s"' % ( image.get_comments() or '', name))
    [docs] def set_Coords(self, Coords): - """ + """ Set coordinate polygon by given :py:class:`CoordsType` object. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been cropped with a bbox @@ -9792,7 +9790,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class AlternativeImageType(GeneratedsSuper): - """Confidence value (between 0 and 1)""" + """Confidence value (between 0 and 1)""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ MemberSpec_('filename', 'string', 0, 0, {'use': 'required'}), @@ -9944,7 +9942,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class GraphemesType(GeneratedsSuper): - """Container for graphemes, grapheme groups and + """Container for graphemes, grapheme groups and non-printing characters.""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ @@ -10117,7 +10115,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class GraphemeBaseType(GeneratedsSuper): - """Base type for graphemes, grapheme groups and non-printing characters. + """Base type for graphemes, grapheme groups and non-printing characters. Order index of grapheme, group, or non-printing character within the parent container (graphemes or glyph or grapheme group). Type of character represented by the @@ -10356,7 +10354,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class GraphemeType(GraphemeBaseType): - """Represents a sub-element of a glyph. + """Represents a sub-element of a glyph. Smallest graphical unit that can be assigned a Unicode code point.""" __hash__ = GeneratedsSuper.__hash__ @@ -10469,7 +10467,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class NonPrintingCharType(GraphemeBaseType): - """A glyph component without visual representation + """A glyph component without visual representation but with Unicode code point. Non-visual / non-printing / control character. Part of grapheme container (of glyph) or grapheme sub group.""" @@ -10706,7 +10704,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class UserDefinedType(GeneratedsSuper): - """Container for user-defined attributes""" + """Container for user-defined attributes""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ MemberSpec_('UserAttribute', 'UserAttributeType', 1, 0, {'maxOccurs': 'unbounded', 'minOccurs': '1', 'name': 'UserAttribute', 'type': 'UserAttributeType'}, None), @@ -10824,7 +10822,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class UserAttributeType(GeneratedsSuper): - """Structured custom data defined by name, type and value.""" + """Structured custom data defined by name, type and value.""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ MemberSpec_('name', 'string', 0, 1, {'use': 'optional'}), @@ -10975,7 +10973,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class TableCellRoleType(GeneratedsSuper): - """Cell position in table starting with row 0Cell position in table + """Cell position in table starting with row 0Cell position in table starting with column 0Number of rows the cell spans (optional; default is 1)Number of columns the cell spans (optional; default is 1) Is the cell a column or row header?""" @@ -11259,7 +11257,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class CustomRegionType(RegionType): - """Regions containing content that is not covered + """Regions containing content that is not covered by the default types (text, graphic, image, line drawing, chart, table, separator, maths, map, music, chem, advert, noise, unknown). @@ -11368,7 +11366,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class UnknownRegionType(RegionType): - """To be used if the region type cannot be ascertained.""" + """To be used if the region type cannot be ascertained.""" __hash__ = GeneratedsSuper.__hash__ member_data_items_ = [ ] @@ -11457,7 +11455,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class NoiseRegionType(RegionType): - """Noise regions are regions where no real data lies, only + """Noise regions are regions where no real data lies, only false data created by artifacts on the document or scanner noise.""" __hash__ = GeneratedsSuper.__hash__ @@ -11548,7 +11546,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class AdvertRegionType(RegionType): - """Regions containing advertisements. + """Regions containing advertisements. The angle the rectangle encapsulating a region has to be rotated in clockwise direction in order to correct the present skew @@ -11687,7 +11685,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -11701,7 +11699,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class MusicRegionType(RegionType): - """Regions containing musical notations. + """Regions containing musical notations. The angle the rectangle encapsulating a region has to be rotated in clockwise direction in order to correct the present skew @@ -11840,7 +11838,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -11854,7 +11852,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class MapRegionType(RegionType): - """Regions containing maps. + """Regions containing maps. The angle the rectangle encapsulating a region has to be rotated in clockwise direction in order to correct the present @@ -11963,7 +11961,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -11977,7 +11975,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class ChemRegionType(RegionType): - """Regions containing chemical formulas. + """Regions containing chemical formulas. The angle the rectangle encapsulating a region has to be rotated in clockwise direction in order to correct the present @@ -12117,7 +12115,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -12131,7 +12129,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class MathsRegionType(RegionType): - """Regions containing equations and mathematical symbols + """Regions containing equations and mathematical symbols should be marked as maths regions. The angle the rectangle encapsulating a region has to be rotated in clockwise direction @@ -12271,7 +12269,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -12285,7 +12283,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class SeparatorRegionType(RegionType): - """Separators are lines that lie between columns and + """Separators are lines that lie between columns and paragraphs and can be used to logically separate different articles from each other. The angle the rectangle encapsulating a region @@ -12426,7 +12424,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -12440,7 +12438,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class ChartRegionType(RegionType): - """Regions containing charts or graphs of any type, should + """Regions containing charts or graphs of any type, should be marked as chart regions. The angle the rectangle encapsulating a region has to be rotated in clockwise direction @@ -12652,7 +12650,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -12666,7 +12664,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class TableRegionType(RegionType): - """Tabular data in any form is represented with a table + """Tabular data in any form is represented with a table region. Rows and columns may or may not have separator lines; these lines are not separator regions. The angle the rectangle encapsulating a region @@ -12926,7 +12924,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -12940,7 +12938,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class GraphicRegionType(RegionType): - """Regions containing simple graphics, such as a company + """Regions containing simple graphics, such as a company logo, should be marked as graphic regions. The angle the rectangle encapsulating a region has to be rotated in clockwise direction @@ -13121,7 +13119,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -13135,7 +13133,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class LineDrawingRegionType(RegionType): - """A line drawing is a single colour illustration without + """A line drawing is a single colour illustration without solid areas. The angle the rectangle encapsulating a region has to be rotated in clockwise direction @@ -13316,7 +13314,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -13330,7 +13328,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class ImageRegionType(RegionType): - """An image is considered to be more intricate and complex + """An image is considered to be more intricate and complex than a graphic. These can be photos or drawings. The angle the rectangle encapsulating a region has to be rotated in clockwise direction @@ -13524,7 +13522,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -13538,7 +13536,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]class TextRegionType(RegionType): - """Pure text is represented as a text region. This includes + """Pure text is represented as a text region. This includes drop capitals, but practically ornate text may be considered as a graphic. The angle the rectangle encapsulating the region @@ -14045,7 +14043,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def __hash__(self): return hash(self.id)
    [docs] def set_orientation(self, orientation): - """ + """ Set deskewing angle to given `orientation` number. Moreover, invalidate self's ``pc:AlternativeImage``s (because they will have been rotated and enlarged @@ -14082,7 +14080,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    def get_required_ns_prefix_defs(rootNode): - '''Get all name space prefix definitions required in this XML doc. + '''Get all name space prefix definitions required in this XML doc. Return a dictionary of definitions and a char string of definitions. ''' nsmap = { @@ -14168,7 +14166,7 @@

    Source code for ocrd_models.ocrd_page_generateds

    [docs]def parseString(inString, silence=False, print_warnings=True): - '''Parse a string, create the object tree, and export it. + '''Parse a string, create the object tree, and export it. Arguments: - inString -- A string. This XML fragment should not start @@ -14356,7 +14354,7 @@

    Quick search

    - + @@ -14373,8 +14371,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_models/ocrd_xml_base.html b/site/core/_modules/ocrd_models/ocrd_xml_base.html index 7a60737a2..29cf90720 100644 --- a/site/core/_modules/ocrd_models/ocrd_xml_base.html +++ b/site/core/_modules/ocrd_models/ocrd_xml_base.html @@ -1,18 +1,16 @@ - - + - ocrd_models.ocrd_xml_base — ocrd 2.41.0 documentation - - - - - - - + ocrd_models.ocrd_xml_base — ocrd 2.58.1 documentation + + + + + + @@ -48,15 +46,16 @@

    Source code for ocrd_models.ocrd_xml_base

         ET.register_namespace(curie, NAMESPACES[curie])
     
     
    [docs]class OcrdXmlDocument(): - """ + """ Base class for XML documents loaded from either content or filename. """ - def __init__(self, filename=None, content=None): - """ + def __init__(self, filename=None, content=None, cache_flag=False): + """ Args: filename (string): content (string): + cache_flag (bool): """ # print(self, filename, content) if filename is None and content is None: @@ -70,8 +69,11 @@

    Source code for ocrd_models.ocrd_xml_base

                     raise Exception('File does not exist: %s' % filename)
                 self._tree.parse(filename)
     
    +        # Cache enabled - True/False
    +        self._cache_flag = cache_flag
    +
     
    [docs] def to_xml(self, xmllint=False): - """ + """ Serialize all properties as pretty-printed XML Args: @@ -134,7 +136,7 @@

    Quick search

    - + @@ -151,8 +153,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_models/report.html b/site/core/_modules/ocrd_models/report.html index 57866d656..431847bb5 100644 --- a/site/core/_modules/ocrd_models/report.html +++ b/site/core/_modules/ocrd_models/report.html @@ -1,18 +1,16 @@ - - + - ocrd_models.report — ocrd 2.41.0 documentation - - - - - - - + ocrd_models.report — ocrd 2.58.1 documentation + + + + + + @@ -44,12 +42,12 @@

    Source code for ocrd_models.report

     #
     
     
    [docs]class ValidationReport(object): - """ + """ Container of notices, warnings and errors about a workspace. """ def __init__(self): - """ + """ Create a new ValidationReport. """ self.notices = [] @@ -57,7 +55,7 @@

    Source code for ocrd_models.report

             self.errors = []
     
         def __str__(self):
    -        """
    +        """
             Serialize to string.
             """
             ret = 'OK' if self.is_valid else 'INVALID'
    @@ -74,13 +72,13 @@ 

    Source code for ocrd_models.report

     
         @property
         def is_valid(self):
    -        """
    +        """
             Whether the report contains neither errors nor warnings.
             """
             return not self.warnings and not self.errors
     
     
    [docs] def to_xml(self): - """ + """ Serialize to XML. """ body = '' @@ -90,25 +88,25 @@

    Source code for ocrd_models.report

             return '<report valid="%s">%s\n</report>' % ("true" if self.is_valid else "false", body)
    [docs] def add_warning(self, msg): - """ + """ Add a warning. """ self.warnings.append(msg)
    [docs] def add_error(self, msg): - """ + """ Add an error """ self.errors.append(msg)
    [docs] def add_notice(self, msg): - """ + """ Add a notice """ self.notices.append(msg)
    [docs] def merge_report(self, otherself): - """ + """ Merge another report into this one. """ self.notices += otherself.notices @@ -166,7 +164,7 @@

    Quick search

    - + @@ -183,8 +181,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_models/utils.html b/site/core/_modules/ocrd_models/utils.html index c71258be7..fb6bea58a 100644 --- a/site/core/_modules/ocrd_models/utils.html +++ b/site/core/_modules/ocrd_models/utils.html @@ -1,18 +1,16 @@ - - + - ocrd_models.utils — ocrd 2.41.0 documentation - - - - - - - + ocrd_models.utils — ocrd 2.58.1 documentation + + + + + + @@ -50,23 +48,23 @@

    Source code for ocrd_models.utils

     ]
     
     
    [docs]def xmllint_format(xml): - """ + """ Pretty-print XML like ``xmllint`` does. Arguments: xml (string): Serialized XML """ - log = getLogger('ocrd_models.utils.xmllint_format') + log = getLogger('ocrd.models.utils.xmllint_format') parser = ET.XMLParser(resolve_entities=False, strip_cdata=False, remove_blank_text=True) document = ET.fromstring(xml, parser) return ('%s\n%s' % ('<?xml version="1.0" encoding="UTF-8"?>', ET.tostring(document, pretty_print=True, encoding='UTF-8').decode('utf-8'))).encode('utf-8')
    [docs]def handle_oai_response(response): - """ + """ In case of a valid OAI-Response, extract first METS-Entry-Data """ - log = getLogger('ocrd_models.utils.handle_oai_response') + log = getLogger('ocrd.models.utils.handle_oai_response') content_type = response.headers['Content-Type'] if 'xml' in content_type or 'text' in content_type: content = response.content @@ -79,10 +77,10 @@

    Source code for ocrd_models.utils

     
     
     
    [docs]def is_oai_content(data): - """ + """ Return True if data is an OAI-PMH request/response """ - log = getLogger('ocrd_models.utils.is_oai_content') + log = getLogger('ocrd.models.utils.is_oai_content') xml_root = ET.fromstring(data) root_tag = xml_root.tag log.info("response data root.tag: '%s'" % root_tag) @@ -90,7 +88,7 @@

    Source code for ocrd_models.utils

     
     
     
    [docs]def extract_mets_from_oai_content(data, preamble='<?xml version="1.0" encoding="UTF-8"?>'): - """ + """ Extract METS from an OAI-PMH GetRecord response """ xml_root = ET.fromstring(data) @@ -158,7 +156,7 @@

    Quick search

    - + @@ -175,8 +173,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_network/client.html b/site/core/_modules/ocrd_network/client.html new file mode 100644 index 000000000..b62a9f090 --- /dev/null +++ b/site/core/_modules/ocrd_network/client.html @@ -0,0 +1,151 @@ + + + + + + + ocrd_network.client — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.client

    +import json
    +import requests
    +
    +from ocrd_utils import config
    +
    +
    +# TODO: This is just a conceptual implementation and first try to
    +#  trigger further discussions on how this should look like.
    +
    [docs]class Client: + def __init__( + self, + server_addr_processing: str = config.OCRD_NETWORK_SERVER_ADDR_PROCESSING, + server_addr_workflow: str = config.OCRD_NETWORK_SERVER_ADDR_WORKFLOW, + server_addr_workspace: str = config.OCRD_NETWORK_SERVER_ADDR_WORKSPACE, + ): + self.server_addr_processing = server_addr_processing + self.server_addr_workflow = server_addr_workflow + self.server_addr_workspace = server_addr_workspace + +
    [docs] def send_processing_request(self, processor_name: str, req_params: dict): + verify_server_protocol(self.server_addr_processing) + req_url = f'{self.server_addr_processing}/processor/{processor_name}' + req_headers = {"Content-Type": "application/json; charset=utf-8"} + req_json = json.loads(json.dumps(req_params)) + + print(f'Sending processing request to: {req_url}') + response = requests.post(url=req_url, headers=req_headers, json=req_json) + return response.json()
    + + +
    [docs]def verify_server_protocol(address: str): + protocol_matched = False + for protocol in ['http://', 'https://']: + if address.startswith(protocol): + protocol_matched = True + break + if not protocol_matched: + raise ValueError(f'Wrong/Missing protocol in the server address: {address}')
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/database.html b/site/core/_modules/ocrd_network/database.html new file mode 100644 index 000000000..697ce766a --- /dev/null +++ b/site/core/_modules/ocrd_network/database.html @@ -0,0 +1,314 @@ + + + + + + + ocrd_network.database — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.database

    +""" The database is used to store information regarding jobs and workspaces.
    +
    +Jobs: for every process-request a job is inserted into the database with an uuid, status and
    +information about the process like parameters and file groups. It is mainly used to track the status
    +(`ocrd_network.models.job.StateEnum`) of a job so that the state of a job can be queried. Finished
    +jobs are not deleted from the database.
    +
    +Workspaces: A job or a processor always runs on a workspace. So a processor needs the information
    +where the workspace is available. This information can be set with providing an absolute path or a
    +workspace_id. With the latter, the database is used to convert the workspace_id to a path.
    +
    +XXX: Currently the information is not preserved after the processing-server shuts down as the
    +database (runs in docker) currently has no volume set.
    +"""
    +from beanie import init_beanie
    +from beanie.operators import In
    +from motor.motor_asyncio import AsyncIOMotorClient
    +from uuid import uuid4
    +from pathlib import Path
    +from typing import List
    +
    +from .models import (
    +    DBProcessorJob,
    +    DBWorkflowJob,
    +    DBWorkspace
    +)
    +from .utils import call_sync
    +
    +
    +
    [docs]async def initiate_database(db_url: str): + client = AsyncIOMotorClient(db_url) + await init_beanie( + database=client.get_default_database(default='ocrd'), + document_models=[DBProcessorJob, DBWorkflowJob, DBWorkspace] + )
    + + +
    [docs]@call_sync +async def sync_initiate_database(db_url: str): + await initiate_database(db_url)
    + + +
    [docs]async def db_create_workspace(mets_path: str) -> DBWorkspace: + """ Create a workspace-database entry only from a mets-path + """ + if not Path(mets_path).exists(): + raise FileNotFoundError(f'Cannot create DB workspace entry, `{mets_path}` does not exist!') + try: + return await db_get_workspace(workspace_mets_path=mets_path) + except ValueError: + workspace_db = DBWorkspace( + workspace_id=str(uuid4()), + workspace_path=Path(mets_path).parent, + workspace_mets_path=mets_path, + ocrd_identifier="", + bagit_profile_identifier="", + ) + await workspace_db.save() + return workspace_db
    + + +
    [docs]async def db_get_workspace(workspace_id: str = None, workspace_mets_path: str = None) -> DBWorkspace: + workspace = None + if not workspace_id and not workspace_mets_path: + raise ValueError(f'Either `workspace_id` or `workspace_mets_path` field must be used as a search key') + if workspace_id: + workspace = await DBWorkspace.find_one( + DBWorkspace.workspace_id == workspace_id + ) + if not workspace: + raise ValueError(f'Workspace with id "{workspace_id}" not in the DB.') + if workspace_mets_path: + workspace = await DBWorkspace.find_one( + DBWorkspace.workspace_mets_path == workspace_mets_path + ) + if not workspace: + raise ValueError(f'Workspace with path "{workspace_mets_path}" not in the DB.') + return workspace
    + + +
    [docs]@call_sync +async def sync_db_get_workspace(workspace_id: str = None, workspace_mets_path: str = None) -> DBWorkspace: + return await db_get_workspace(workspace_id=workspace_id, workspace_mets_path=workspace_mets_path)
    + + +
    [docs]async def db_update_workspace(workspace_id: str = None, workspace_mets_path: str = None, **kwargs) -> DBWorkspace: + workspace = None + if not workspace_id and not workspace_mets_path: + raise ValueError(f'Either `workspace_id` or `workspace_mets_path` field must be used as a search key') + if workspace_id: + workspace = await DBWorkspace.find_one( + DBWorkspace.workspace_id == workspace_id + ) + if not workspace: + raise ValueError(f'Workspace with id "{workspace_id}" not in the DB.') + if workspace_mets_path: + workspace = await DBWorkspace.find_one( + DBWorkspace.workspace_mets_path == workspace_mets_path + ) + if not workspace: + raise ValueError(f'Workspace with path "{workspace_mets_path}" not in the DB.') + + job_keys = list(workspace.__dict__.keys()) + for key, value in kwargs.items(): + if key not in job_keys: + raise ValueError(f'Field "{key}" is not available.') + if key == 'workspace_id': + workspace.workspace_id = value + elif key == 'workspace_mets_path': + workspace.workspace_mets_path = value + elif key == 'ocrd_identifier': + workspace.ocrd_identifier = value + elif key == 'bagit_profile_identifier': + workspace.bagit_profile_identifier = value + elif key == 'ocrd_base_version_checksum': + workspace.ocrd_base_version_checksum = value + elif key == 'ocrd_mets': + workspace.ocrd_mets = value + elif key == 'bag_info_adds': + workspace.bag_info_adds = value + elif key == 'deleted': + workspace.deleted = value + elif key == 'mets_server_url': + workspace.mets_server_url = value + else: + raise ValueError(f'Field "{key}" is not updatable.') + await workspace.save() + return workspace
    + + +
    [docs]@call_sync +async def sync_db_update_workspace(workspace_id: str = None, workspace_mets_path: str = None, **kwargs) -> DBWorkspace: + return await db_update_workspace(workspace_id=workspace_id, workspace_mets_path=workspace_mets_path, **kwargs)
    + + +
    [docs]async def db_get_processing_job(job_id: str) -> DBProcessorJob: + job = await DBProcessorJob.find_one( + DBProcessorJob.job_id == job_id) + if not job: + raise ValueError(f'Processing job with id "{job_id}" not in the DB.') + return job
    + + +
    [docs]@call_sync +async def sync_db_get_processing_job(job_id: str) -> DBProcessorJob: + return await db_get_processing_job(job_id)
    + + +
    [docs]async def db_update_processing_job(job_id: str, **kwargs) -> DBProcessorJob: + job = await DBProcessorJob.find_one( + DBProcessorJob.job_id == job_id) + if not job: + raise ValueError(f'Processing job with id "{job_id}" not in the DB.') + + job_keys = list(job.__dict__.keys()) + for key, value in kwargs.items(): + if key not in job_keys: + raise ValueError(f'Field "{key}" is not available.') + if key == 'state': + job.state = value + elif key == 'start_time': + job.start_time = value + elif key == 'end_time': + job.end_time = value + elif key == 'path_to_mets': + job.path_to_mets = value + elif key == 'exec_time': + job.exec_time = value + elif key == 'log_file_path': + job.log_file_path = value + else: + raise ValueError(f'Field "{key}" is not updatable.') + await job.save() + return job
    + + +
    [docs]@call_sync +async def sync_db_update_processing_job(job_id: str, **kwargs) -> DBProcessorJob: + return await db_update_processing_job(job_id=job_id, **kwargs)
    + + +
    [docs]async def db_get_workflow_job(job_id: str) -> DBWorkflowJob: + job = await DBWorkflowJob.find_one(DBWorkflowJob.job_id == job_id) + if not job: + raise ValueError(f'Workflow job with id "{job_id}" not in the DB.') + return job
    + + +
    [docs]@call_sync +async def sync_db_get_workflow_job(job_id: str) -> DBWorkflowJob: + return await db_get_workflow_job(job_id)
    + + +
    [docs]async def db_get_processing_jobs(job_ids: List[str]) -> [DBProcessorJob]: + jobs = await DBProcessorJob.find(In(DBProcessorJob.job_id, job_ids)).to_list() + return jobs
    + + +
    [docs]@call_sync +async def sync_db_get_processing_jobs(job_ids: List[str]) -> [DBProcessorJob]: + return await db_get_processing_jobs(job_ids)
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/deployer.html b/site/core/_modules/ocrd_network/deployer.html new file mode 100644 index 000000000..64fc7ec64 --- /dev/null +++ b/site/core/_modules/ocrd_network/deployer.html @@ -0,0 +1,680 @@ + + + + + + + ocrd_network.deployer — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.deployer

    +"""
    +Abstraction of the deployment functionality for processors.
    +
    +The Processing Server provides the configuration parameters to the Deployer agent.
    +The Deployer agent runs the RabbitMQ Server, MongoDB and the Processing Hosts.
    +Each Processing Host may have several Processing Workers.
    +Each Processing Worker is an instance of an OCR-D processor.
    +"""
    +from __future__ import annotations
    +from typing import Dict, List, Union
    +from re import search as re_search
    +from pathlib import Path
    +import subprocess
    +from time import sleep
    +
    +from ocrd_utils import config, getLogger, safe_filename
    +
    +from .deployment_utils import (
    +    create_docker_client,
    +    DeployType,
    +    verify_mongodb_available,
    +    verify_rabbitmq_available,
    +)
    +from .logging import get_mets_server_logging_file_path
    +from .runtime_data import (
    +    DataHost,
    +    DataMongoDB,
    +    DataProcessingWorker,
    +    DataProcessorServer,
    +    DataRabbitMQ
    +)
    +from .utils import (
    +    is_mets_server_running,
    +    stop_mets_server,
    +    validate_and_load_config
    +)
    +
    +
    +
    [docs]class Deployer: + def __init__(self, config_path: str) -> None: + self.log = getLogger('ocrd_network.deployer') + config = validate_and_load_config(config_path) + + self.data_mongo: DataMongoDB = DataMongoDB(config['database']) + self.data_queue: DataRabbitMQ = DataRabbitMQ(config['process_queue']) + self.data_hosts: List[DataHost] = [] + self.internal_callback_url = config.get('internal_callback_url', None) + for config_host in config['hosts']: + self.data_hosts.append(DataHost(config_host)) + self.mets_servers: Dict = {} # {"mets_server_url": "mets_server_pid"} + + # TODO: Reconsider this. +
    [docs] def find_matching_processors( + self, + worker_only: bool = False, + server_only: bool = False, + docker_only: bool = False, + native_only: bool = False, + str_names_only: bool = False, + unique_only: bool = False + ) -> Union[List[str], List[object]]: + """Finds and returns a list of matching data objects of type: + `DataProcessingWorker` and `DataProcessorServer`. + + :py:attr:`worker_only` match only processors with worker status + :py:attr:`server_only` match only processors with server status + :py:attr:`docker_only` match only docker processors + :py:attr:`native_only` match only native processors + :py:attr:`str_only` returns the processor_name instead of data object + :py:attr:`unique_only` remove duplicates from the matches + + `worker_only` and `server_only` are mutually exclusive to each other + `docker_only` and `native_only` are mutually exclusive to each other + `unique_only` is allowed only together with `str_names_only` + """ + + if worker_only and server_only: + raise ValueError(f"Only 'worker_only' or 'server_only' is allowed, not both.") + if docker_only and native_only: + raise ValueError(f"Only 'docker_only' or 'native_only' is allowed, not both.") + if not str_names_only and unique_only: + raise ValueError(f"Value 'unique_only' is allowed only together with 'str_names_only'") + + # Find all matching objects of type: + # DataProcessingWorker or DataProcessorServer + matched_objects = [] + for data_host in self.data_hosts: + if not server_only: + for data_worker in data_host.data_workers: + if data_worker.deploy_type == DeployType.NATIVE and docker_only: + continue + if data_worker.deploy_type == DeployType.DOCKER and native_only: + continue + matched_objects.append(data_worker) + if not worker_only: + for data_server in data_host.data_servers: + if data_server.deploy_type == DeployType.NATIVE and docker_only: + continue + if data_server.deploy_type == DeployType.DOCKER and native_only: + continue + matched_objects.append(data_server) + if str_names_only: + # gets only the processor names of the matched objects + name_list = [match.processor_name for match in matched_objects] + if unique_only: + # removes the duplicates, if any + return list(dict.fromkeys(name_list)) + return name_list + return matched_objects
    + +
    [docs] def resolve_processor_server_url(self, processor_name) -> str: + processor_server_url = '' + for data_host in self.data_hosts: + for data_server in data_host.data_servers: + if data_server.processor_name == processor_name: + processor_server_url = f'http://{data_host.address}:{data_server.port}/' + return processor_server_url
    + +
    [docs] def kill_all(self) -> None: + """ kill all started services: hosts, database, queue + + The order of killing is important to optimize graceful shutdown in the future. If RabbitMQ + server is killed before killing Processing Workers, that may have bad outcome and leave + Processing Workers in an unpredictable state + """ + self.kill_hosts() + self.kill_mongodb() + self.kill_rabbitmq()
    + +
    [docs] def deploy_hosts( + self, + mongodb_url: str, + rabbitmq_url: str + ) -> None: + for host_data in self.data_hosts: + if host_data.needs_ssh: + host_data.create_client(client_type='ssh') + assert host_data.ssh_client + if host_data.needs_docker: + host_data.create_client(client_type='docker') + assert host_data.docker_client + + self.log.debug(f'Deploying processing workers on host: {host_data.address}') + for data_worker in host_data.data_workers: + self._deploy_processing_worker( + mongodb_url, + rabbitmq_url, + host_data, + data_worker + ) + + self.log.debug(f'Deploying processor servers on host: {host_data.address}') + for data_server in host_data.data_servers: + self._deploy_processor_server( + mongodb_url, + host_data, + data_server + ) + + if host_data.ssh_client: + host_data.ssh_client.close() + host_data.ssh_client = None + if host_data.docker_client: + host_data.docker_client.close() + host_data.docker_client = None
    + + def _deploy_processing_worker( + self, + mongodb_url: str, + rabbitmq_url: str, + host_data: DataHost, + data_worker: DataProcessingWorker + ) -> None: + self.log.debug(f"Deploying processing worker, " + f"environment: '{data_worker.deploy_type}', " + f"name: '{data_worker.processor_name}', " + f"address: '{host_data.address}'") + + if data_worker.deploy_type == DeployType.NATIVE: + assert host_data.ssh_client # to satisfy mypy + pid = self.start_native_processor( + ssh_client=host_data.ssh_client, + processor_name=data_worker.processor_name, + queue_url=rabbitmq_url, + database_url=mongodb_url, + ) + data_worker.pid = pid + elif data_worker.deploy_type == DeployType.DOCKER: + assert host_data.docker_client # to satisfy mypy + pid = self.start_docker_processor( + docker_client=host_data.docker_client, + processor_name=data_worker.processor_name, + _queue_url=rabbitmq_url, + _database_url=mongodb_url + ) + data_worker.pid = pid + sleep(0.2) + + # TODO: Revisit this to remove code duplications of deploy_* methods + def _deploy_processor_server( + self, + mongodb_url: str, + host_data: DataHost, + data_server: DataProcessorServer, + ) -> None: + self.log.debug(f"Deploying processing worker, " + f"environment: '{data_server.deploy_type}', " + f"name: '{data_server.processor_name}', " + f"address: '{data_server.host}:{data_server.port}'") + + if data_server.deploy_type == DeployType.NATIVE: + assert host_data.ssh_client + pid = self.start_native_processor_server( + ssh_client=host_data.ssh_client, + processor_name=data_server.processor_name, + agent_address=f'{data_server.host}:{data_server.port}', + database_url=mongodb_url, + ) + data_server.pid = pid + + if data_server.processor_name in host_data.server_ports: + name = data_server.processor_name + port = data_server.port + if host_data.server_ports[name]: + host_data.server_ports[name] = host_data.server_ports[name].append(port) + else: + host_data.server_ports[name] = [port] + else: + host_data.server_ports[data_server.processor_name] = [data_server.port] + elif data_server.deploy_type == DeployType.DOCKER: + raise Exception("Deploying docker processor server is not supported yet!") + +
    [docs] def deploy_rabbitmq( + self, + image: str, + detach: bool, + remove: bool, + ports_mapping: Union[Dict, None] = None + ) -> str: + if self.data_queue.skip_deployment: + self.log.debug(f"RabbitMQ is externaly managed. Skipping deployment") + verify_rabbitmq_available( + self.data_queue.address, + self.data_queue.port, + self.data_queue.vhost, + self.data_queue.username, + self.data_queue.password + ) + return self.data_queue.url + self.log.debug(f"Trying to deploy '{image}', with modes: " + f"detach='{detach}', remove='{remove}'") + + if not self.data_queue or not self.data_queue.address: + raise ValueError('Deploying RabbitMQ has failed - missing configuration.') + + client = create_docker_client( + self.data_queue.address, + self.data_queue.ssh_username, + self.data_queue.ssh_password, + self.data_queue.ssh_keypath + ) + if not ports_mapping: + # 5672, 5671 - used by AMQP 0-9-1 and AMQP 1.0 clients without and with TLS + # 15672, 15671: HTTP API clients, management UI and rabbitmq admin, without and with TLS + # 25672: used for internode and CLI tools communication and is allocated from + # a dynamic range (limited to a single port by default, computed as AMQP port + 20000) + ports_mapping = { + 5672: self.data_queue.port, + 15672: 15672, + 25672: 25672 + } + res = client.containers.run( + image=image, + detach=detach, + remove=remove, + ports=ports_mapping, + # The default credentials to be used by the processing workers + environment=[ + f'RABBITMQ_DEFAULT_USER={self.data_queue.username}', + f'RABBITMQ_DEFAULT_PASS={self.data_queue.password}' + ] + ) + assert res and res.id, \ + f'Failed to start RabbitMQ docker container on host: {self.data_queue.address}' + self.data_queue.pid = res.id + client.close() + + rmq_host = self.data_queue.address + rmq_port = int(self.data_queue.port) + rmq_vhost = '/' + + verify_rabbitmq_available( + host=rmq_host, + port=rmq_port, + vhost=rmq_vhost, + username=self.data_queue.username, + password=self.data_queue.password + ) + self.log.info(f'The RabbitMQ server was deployed on URL: ' + f'{rmq_host}:{rmq_port}{rmq_vhost}') + return self.data_queue.url
    + +
    [docs] def deploy_mongodb( + self, + image: str, + detach: bool, + remove: bool, + ports_mapping: Union[Dict, None] = None + ) -> str: + if self.data_mongo.skip_deployment: + self.log.debug('MongoDB is externaly managed. Skipping deployment') + verify_mongodb_available(self.data_mongo.url) + return self.data_mongo.url + + self.log.debug(f"Trying to deploy '{image}', with modes: " + f"detach='{detach}', remove='{remove}'") + + if not self.data_mongo or not self.data_mongo.address: + raise ValueError('Deploying MongoDB has failed - missing configuration.') + + client = create_docker_client( + self.data_mongo.address, + self.data_mongo.ssh_username, + self.data_mongo.ssh_password, + self.data_mongo.ssh_keypath + ) + if not ports_mapping: + ports_mapping = { + 27017: self.data_mongo.port + } + if self.data_mongo.username: + environment = [ + f'MONGO_INITDB_ROOT_USERNAME={self.data_mongo.username}', + f'MONGO_INITDB_ROOT_PASSWORD={self.data_mongo.password}' + ] + else: + environment = [] + + res = client.containers.run( + image=image, + detach=detach, + remove=remove, + ports=ports_mapping, + environment=environment + ) + if not res or not res.id: + raise RuntimeError('Failed to start MongoDB docker container on host: ' + f'{self.data_mongo.address}') + self.data_mongo.pid = res.id + client.close() + + mongodb_hostinfo = f'{self.data_mongo.address}:{self.data_mongo.port}' + self.log.info(f'The MongoDB was deployed on host: {mongodb_hostinfo}') + return self.data_mongo.url
    + +
    [docs] def kill_rabbitmq(self) -> None: + if self.data_queue.skip_deployment: + return + elif not self.data_queue.pid: + self.log.warning('No running RabbitMQ instance found') + return + client = create_docker_client( + self.data_queue.address, + self.data_queue.ssh_username, + self.data_queue.ssh_password, + self.data_queue.ssh_keypath + ) + client.containers.get(self.data_queue.pid).stop() + self.data_queue.pid = None + client.close() + self.log.info('The RabbitMQ is stopped')
    + +
    [docs] def kill_mongodb(self) -> None: + if self.data_mongo.skip_deployment: + return + elif not self.data_mongo.pid: + self.log.warning('No running MongoDB instance found') + return + client = create_docker_client( + self.data_mongo.address, + self.data_mongo.ssh_username, + self.data_mongo.ssh_password, + self.data_mongo.ssh_keypath + ) + client.containers.get(self.data_mongo.pid).stop() + self.data_mongo.pid = None + client.close() + self.log.info('The MongoDB is stopped')
    + +
    [docs] def kill_hosts(self) -> None: + self.log.debug('Starting to kill/stop hosts') + # Kill processing hosts + for host_data in self.data_hosts: + if host_data.needs_ssh: + host_data.create_client(client_type='ssh') + assert host_data.ssh_client + if host_data.needs_docker: + host_data.create_client(client_type='docker') + assert host_data.docker_client + + self.log.debug(f'Killing/Stopping processing workers on host: {host_data.address}') + self.kill_processing_workers(host_data) + + self.log.debug(f'Killing/Stopping processor servers on host: {host_data.address}') + self.kill_processor_servers(host_data) + + if host_data.ssh_client: + host_data.ssh_client.close() + host_data.ssh_client = None + if host_data.docker_client: + host_data.docker_client.close() + host_data.docker_client = None
    + + # TODO: Optimize the code duplication from start_* and kill_* methods +
    [docs] def kill_processing_workers(self, host_data: DataHost) -> None: + amount = len(host_data.data_workers) + if not amount: + self.log.info(f'No active processing workers to be stopped.') + return + self.log.info(f"Trying to stop {amount} processing workers:") + for worker in host_data.data_workers: + if not worker.pid: + continue + if worker.deploy_type == DeployType.NATIVE: + host_data.ssh_client.exec_command(f'kill {worker.pid}') + self.log.info(f"Stopped native worker with pid: '{worker.pid}'") + elif worker.deploy_type == DeployType.DOCKER: + host_data.docker_client.containers.get(worker.pid).stop() + self.log.info(f"Stopped docker worker with container id: '{worker.pid}'") + host_data.data_workers = []
    + +
    [docs] def kill_processor_servers(self, host_data: DataHost) -> None: + amount = len(host_data.data_servers) + if not amount: + self.log.info(f'No active processor servers to be stopped.') + return + self.log.info(f"Trying to stop {amount} processing workers:") + for server in host_data.data_servers: + if not server.pid: + continue + if server.deploy_type == DeployType.NATIVE: + host_data.ssh_client.exec_command(f'kill {server.pid}') + self.log.info(f"Stopped native server with pid: '{server.pid}'") + elif server.deploy_type == DeployType.DOCKER: + host_data.docker_client.containers.get(server.pid).stop() + self.log.info(f"Stopped docker server with container id: '{server.pid}'") + host_data.data_servers = []
    + +
    [docs] def start_native_processor( + self, + ssh_client, + processor_name: str, + queue_url: str, + database_url: str + ) -> str: + """ start a processor natively on a host via ssh + + Args: + ssh_client: paramiko SSHClient to execute commands on a host + processor_name: name of processor to run + queue_url: url to rabbitmq + database_url: url to database + + Returns: + str: pid of running process + """ + self.log.info(f'Starting native processing worker: {processor_name}') + channel = ssh_client.invoke_shell() + stdin, stdout = channel.makefile('wb'), channel.makefile('rb') + cmd = f'{processor_name} worker --database {database_url} --queue {queue_url} &' + # the only way (I could find) to make it work to start a process in the background and + # return early is this construction. The pid of the last started background process is + # printed with `echo $!` but it is printed inbetween other output. Because of that I added + # `xyz` before and after the code to easily be able to filter out the pid via regex when + # returning from the function + + self.log.debug(f'About to execute command: {cmd}') + stdin.write(f'{cmd}\n') + stdin.write('echo xyz$!xyz \n exit \n') + output = stdout.read().decode('utf-8') + stdout.close() + stdin.close() + return re_search(r'xyz([0-9]+)xyz', output).group(1) # type: ignore
    + +
    [docs] def start_docker_processor( + self, + docker_client, + processor_name: str, + _queue_url: str, + _database_url: str + ) -> str: + # TODO: Raise an exception here as well? + # raise Exception("Deploying docker processing worker is not supported yet!") + + self.log.info(f'Starting docker container processor: {processor_name}') + # TODO: add real command here to start processing server in docker here + res = docker_client.containers.run('debian', 'sleep 500s', detach=True, remove=True) + assert res and res.id, f'Running processor: {processor_name} in docker-container failed' + return res.id
    + + # TODO: Just a copy of the above start_native_processor() method. + # Far from being great... But should be good as a starting point +
    [docs] def start_native_processor_server( + self, + ssh_client, + processor_name: str, + agent_address: str, + database_url: str + ) -> str: + self.log.info(f"Starting native processor server: {processor_name} on {agent_address}") + channel = ssh_client.invoke_shell() + stdin, stdout = channel.makefile('wb'), channel.makefile('rb') + cmd = f'{processor_name} server --address {agent_address} --database {database_url} &' + self.log.debug(f'About to execute command: {cmd}') + stdin.write(f'{cmd}\n') + stdin.write('echo xyz$!xyz \n exit \n') + output = stdout.read().decode('utf-8') + stdout.close() + stdin.close() + return re_search(r'xyz([0-9]+)xyz', output).group(1) # type: ignore
    + + # TODO: No support for TCP version yet +
    [docs] def start_unix_mets_server(self, mets_path: str) -> Path: + log_file = get_mets_server_logging_file_path(mets_path=mets_path) + mets_server_url = Path(config.OCRD_NETWORK_SOCKETS_ROOT_DIR, f"{safe_filename(mets_path)}.sock") + + if is_mets_server_running(mets_server_url=str(mets_server_url)): + self.log.info(f"The mets server is already started: {mets_server_url}") + return mets_server_url + + cwd = Path(mets_path).parent + self.log.info(f'Starting UDS mets server: {mets_server_url}') + sub_process = subprocess.Popen( + args=['nohup', 'ocrd', 'workspace', '--mets-server-url', f'{mets_server_url}', + '-d', f'{cwd}', 'server', 'start'], + shell=False, + stdout=open(file=log_file, mode='w'), + stderr=open(file=log_file, mode='a'), + cwd=cwd, + universal_newlines=True + ) + # Wait for the mets server to start + sleep(2) + self.mets_servers[mets_server_url] = sub_process.pid + return mets_server_url
    + +
    [docs] def stop_unix_mets_server(self, mets_server_url: str) -> None: + self.log.info(f'Stopping UDS mets server: {mets_server_url}') + if Path(mets_server_url) in self.mets_servers: + mets_server_pid = self.mets_servers[Path(mets_server_url)] + else: + raise Exception(f"Mets server not found: {mets_server_url}") + + ''' + subprocess.run( + args=['kill', '-s', 'SIGINT', f'{mets_server_pid}'], + shell=False, + universal_newlines=True + ) + ''' + + # TODO: Reconsider this again + # Not having this sleep here causes connection errors + # on the last request processed by the processing worker. + # Sometimes 3 seconds is enough, sometimes not. + sleep(5) + stop_mets_server(mets_server_url=mets_server_url)
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/deployment_utils.html b/site/core/_modules/ocrd_network/deployment_utils.html new file mode 100644 index 000000000..d18699318 --- /dev/null +++ b/site/core/_modules/ocrd_network/deployment_utils.html @@ -0,0 +1,236 @@ + + + + + + + ocrd_network.deployment_utils — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.deployment_utils

    +from __future__ import annotations
    +from enum import Enum
    +from docker import APIClient, DockerClient
    +from docker.transport import SSHHTTPAdapter
    +from paramiko import AutoAddPolicy, SSHClient
    +from time import sleep
    +import re
    +
    +from .rabbitmq_utils import RMQPublisher
    +from pymongo import MongoClient
    +
    +__all__ = [
    +    'create_docker_client',
    +    'create_ssh_client',
    +    'DeployType',
    +    'verify_mongodb_available',
    +    'verify_rabbitmq_available'
    +]
    +
    +
    +
    [docs]def create_ssh_client(address: str, username: str, password: str = "", keypath: str = "") -> SSHClient: + client = SSHClient() + client.set_missing_host_key_policy(AutoAddPolicy) + try: + client.connect(hostname=address, username=username, password=password, key_filename=keypath) + except Exception as error: + raise Exception(f"Error creating SSHClient of host '{address}', reason:") from error + return client
    + + +
    [docs]def create_docker_client(address: str, username: str, password: str = "", keypath: str = "") -> CustomDockerClient: + return CustomDockerClient(username, address, password=password, keypath=keypath)
    + + +class CustomDockerClient(DockerClient): + """Wrapper for docker.DockerClient to use an own SshHttpAdapter. + + This makes it possible to use provided password/keyfile for connecting with + python-docker-sdk, which otherwise only allows to use ~/.ssh/config for + login + + XXX: inspired by https://github.com/docker/docker-py/issues/2416 . Should be replaced when + docker-sdk provides its own way to make it possible to use custom SSH Credentials. Possible + Problems: APIClient must be given the API-version because it cannot connect prior to read it. I + could imagine this could cause Problems. This is not a rushed implementation and was the only + workaround I could find that allows password/keyfile to be used (by default only keyfile from + ~/.ssh/config can be used to authenticate via ssh) + + XXX 2: Reasons to extend DockerClient: The code-changes regarding the connection should be in + one place, so I decided to create `CustomSshHttpAdapter` as an inner class. The super + constructor *must not* be called to make this workaround work. Otherwise, the APIClient + constructor would be invoked without `version` and that would cause a connection-attempt before + this workaround can be applied. + """ + + def __init__(self, user: str, host: str, **kwargs) -> None: + # the super-constructor is not called on purpose: it solely instantiates the APIClient. The + # missing `version` in that call would raise an error. APIClient is provided here as a + # replacement for what the super-constructor does + if not (user and host): + raise ValueError('Missing argument: user and host must both be provided') + if ('password' not in kwargs) != ('keypath' not in kwargs): + raise ValueError('Missing argument: one of password and keyfile is needed') + self.api = APIClient(f'ssh://{host}', use_ssh_client=True, version='1.41') + ssh_adapter = self.CustomSshHttpAdapter(f'ssh://{user}@{host}:22', **kwargs) + self.api.mount('http+docker://ssh', ssh_adapter) + + class CustomSshHttpAdapter(SSHHTTPAdapter): + def __init__(self, base_url, password: str = "", keypath: str = "") -> None: + self.password = password + self.keypath = keypath + if bool(self.password) == bool(self.keypath): + raise Exception("Either 'password' or 'keypath' must be provided") + super().__init__(base_url) + + def _create_paramiko_client(self, base_url: str) -> None: + """ + this method is called in the superclass constructor. Overwriting allows to set + password/keypath for the internal paramiko-client + """ + super()._create_paramiko_client(base_url) + if self.password: + self.ssh_params['password'] = self.password + elif self.keypath: + self.ssh_params['key_filename'] = self.keypath + self.ssh_client.set_missing_host_key_policy(AutoAddPolicy) + + +
    [docs]def verify_rabbitmq_available( + host: str, + port: int, + vhost: str, + username: str, + password: str +) -> None: + max_waiting_steps = 15 + while max_waiting_steps > 0: + try: + dummy_publisher = RMQPublisher(host=host, port=port, vhost=vhost) + dummy_publisher.authenticate_and_connect(username=username, password=password) + except Exception: + max_waiting_steps -= 1 + sleep(2) + else: + # TODO: Disconnect the dummy_publisher here before returning... + return + raise RuntimeError(f'Cannot connect to RabbitMQ host: {host}, port: {port}, ' + f'vhost: {vhost}, username: {username}')
    + + +
    [docs]def verify_mongodb_available(mongo_url: str) -> None: + try: + client = MongoClient(mongo_url, serverSelectionTimeoutMS=1000.0) + client.admin.command("ismaster") + except Exception: + raise RuntimeError(f'Cannot connect to MongoDB: {re.sub(r":[^@]+@", ":****@", mongo_url)}')
    + + +
    [docs]class DeployType(Enum): + """ Deploy-Type of the processing worker/processor server. + """ + DOCKER = 1 + NATIVE = 2
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/logging.html b/site/core/_modules/ocrd_network/logging.html new file mode 100644 index 000000000..7a9819c04 --- /dev/null +++ b/site/core/_modules/ocrd_network/logging.html @@ -0,0 +1,160 @@ + + + + + + + ocrd_network.logging — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.logging

    +from pathlib import Path
    +from ocrd_utils import safe_filename, config
    +
    +
    +OCRD_NETWORK_MODULES = [
    +    "mets_servers",
    +    "processing_jobs",
    +    "processing_servers",
    +    "processing_workers",
    +    "processor_servers"
    +]
    +
    +
    +
    [docs]def get_root_logging_dir(module_name: str) -> Path: + if module_name not in OCRD_NETWORK_MODULES: + raise ValueError(f"Invalid module name: {module_name}, should be one of: {OCRD_NETWORK_MODULES}") + module_log_dir = Path(config.OCRD_NETWORK_LOGS_ROOT_DIR, module_name) + module_log_dir.mkdir(parents=True, exist_ok=True) + return module_log_dir
    + + +
    [docs]def get_cache_locked_pages_logging_file_path() -> Path: + return get_root_logging_dir("processing_servers") / "cache_locked_pages.log"
    + + +
    [docs]def get_cache_processing_requests_logging_file_path() -> Path: + return get_root_logging_dir("processing_servers") / "cache_processing_requests.log"
    + + +
    [docs]def get_processing_job_logging_file_path(job_id: str) -> Path: + return get_root_logging_dir("processing_jobs") / f"{job_id}.log"
    + + +
    [docs]def get_processing_server_logging_file_path(pid: int) -> Path: + return get_root_logging_dir("processing_servers") / f"server.{pid}.log"
    + + +
    [docs]def get_processing_worker_logging_file_path(processor_name: str, pid: int) -> Path: + return get_root_logging_dir("processing_workers") / f"worker.{pid}.{processor_name}.log"
    + + +
    [docs]def get_processor_server_logging_file_path(processor_name: str, pid: int) -> Path: + return get_root_logging_dir("processor_servers") / f"server.{pid}.{processor_name}.log"
    + + +
    [docs]def get_mets_server_logging_file_path(mets_path: str) -> Path: + return get_root_logging_dir("mets_servers") / f"{safe_filename(mets_path)}.log"
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/models/job.html b/site/core/_modules/ocrd_network/models/job.html new file mode 100644 index 000000000..327c5a3d8 --- /dev/null +++ b/site/core/_modules/ocrd_network/models/job.html @@ -0,0 +1,266 @@ + + + + + + + ocrd_network.models.job — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.models.job

    +from datetime import datetime
    +from enum import Enum
    +from typing import Dict, List, Optional
    +
    +from beanie import Document
    +from pydantic import BaseModel
    +
    +
    +
    [docs]class StateEnum(str, Enum): + # The processing job is cached inside the Processing Server requests cache + cached = 'CACHED' + # The processing job was cancelled due to failed dependencies + cancelled = 'CANCELLED' + # The processing job is queued inside the RabbitMQ + queued = 'QUEUED' + # Processing job is currently running in a Worker or Processor Server + running = 'RUNNING' + # Processing job finished successfully + success = 'SUCCESS' + # Processing job failed + failed = 'FAILED'
    + + +
    [docs]class PYJobInput(BaseModel): + """ Wraps the parameters required to make a run-processor-request + """ + processor_name: Optional[str] = None + path_to_mets: Optional[str] = None + workspace_id: Optional[str] = None + description: Optional[str] = None + input_file_grps: List[str] + output_file_grps: Optional[List[str]] + page_id: Optional[str] = None + parameters: dict = {} # Always set to empty dict when None, otherwise it fails ocr-d-validation + result_queue_name: Optional[str] = None + callback_url: Optional[str] = None + # Used to toggle between sending requests to 'worker and 'server', + # i.e., Processing Worker and Processor Server, respectively + agent_type: Optional[str] = 'worker' + # Auto generated by the Processing Server when forwarding to the Processor Server + job_id: Optional[str] = None + # If set, specifies a list of job ids this job depends on + depends_on: Optional[List[str]] = None + +
    [docs] class Config: + schema_extra = { + 'example': { + 'path_to_mets': '/path/to/mets.xml', + 'description': 'The description of this execution', + 'input_file_grps': ['INPUT_FILE_GROUP'], + 'output_file_grps': ['OUTPUT_FILE_GROUP'], + 'page_id': 'PAGE_ID', + 'parameters': {} + } + }
    + + +
    [docs]class PYJobOutput(BaseModel): + """ Wraps output information for a job-response + """ + job_id: str + processor_name: str + state: StateEnum + path_to_mets: Optional[str] + workspace_id: Optional[str] + input_file_grps: List[str] + output_file_grps: Optional[List[str]] + page_id: Optional[str] = None + log_file_path: Optional[str]
    + + +
    [docs]class DBProcessorJob(Document): + """ Job representation in the database + """ + job_id: str + processor_name: str + path_to_mets: Optional[str] + workspace_id: Optional[str] + description: Optional[str] + state: StateEnum + input_file_grps: List[str] + output_file_grps: Optional[List[str]] + page_id: Optional[str] + parameters: Optional[dict] + depends_on: Optional[List[str]] + result_queue_name: Optional[str] + callback_url: Optional[str] + internal_callback_url: Optional[str] + start_time: Optional[datetime] + end_time: Optional[datetime] + exec_time: Optional[str] + log_file_path: Optional[str] + +
    [docs] class Settings: + use_enum_values = True
    + +
    [docs] def to_job_output(self) -> PYJobOutput: + return PYJobOutput( + job_id=self.job_id, + processor_name=self.processor_name, + state=self.state, + path_to_mets=self.path_to_mets, + workspace_id=self.workspace_id, + input_file_grps=self.input_file_grps, + output_file_grps=self.output_file_grps, + page_id=self.page_id, + log_file_path=self.log_file_path + )
    + + +
    [docs]class PYWorkflowJobOutput(BaseModel): + """ Wraps output information for a workflow job-response + """ + job_id: str + page_id: str + page_wise: bool = False + # A dictionary where each entry has: + # key: page_id + # value: List of and processing job ids sorted in dependency order + processing_job_ids: Dict + path_to_mets: Optional[str] + workspace_id: Optional[str] + description: Optional[str]
    + + +
    [docs]class DBWorkflowJob(Document): + """ Workflow job representation in the database + """ + job_id: str + page_id: str + page_wise: bool = False + # A dictionary where each entry has: + # key: page_id + # value: List of and processing job ids sorted in dependency order + processing_job_ids: Dict + path_to_mets: Optional[str] + workspace_id: Optional[str] + description: Optional[str] + workflow_callback_url: Optional[str] + +
    [docs] class Settings: + use_enum_values = True
    + +
    [docs] def to_job_output(self) -> PYWorkflowJobOutput: + return PYWorkflowJobOutput( + job_id=self.job_id, + page_id=self.page_id, + page_wise=self.page_wise, + processing_job_ids=self.processing_job_ids, + path_to_mets=self.path_to_mets, + workspace_id=self.workspace_id, + workflow_callback_url=self.workflow_callback_url + )
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/models/messages.html b/site/core/_modules/ocrd_network/models/messages.html new file mode 100644 index 000000000..ae3281934 --- /dev/null +++ b/site/core/_modules/ocrd_network/models/messages.html @@ -0,0 +1,135 @@ + + + + + + + ocrd_network.models.messages — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.models.messages

    +from pydantic import BaseModel
    +from typing import Optional
    +from .job import StateEnum
    +
    +
    +
    [docs]class PYResultMessage(BaseModel): + """ Wraps the parameters required to make a result message request + """ + job_id: str + state: StateEnum + path_to_mets: Optional[str] = None + workspace_id: Optional[str] = None + +
    [docs] class Config: + schema_extra = { + 'example': { + 'job_id': '123123123', + 'state': 'SUCCESS', + 'path_to_mets': '/path/to/mets.xml', + 'workspace_id': 'c7f25615-fc17-4365-a74d-ad20e1ddbd0e' + } + }
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/models/ocrd_tool.html b/site/core/_modules/ocrd_network/models/ocrd_tool.html new file mode 100644 index 000000000..9895bb520 --- /dev/null +++ b/site/core/_modules/ocrd_network/models/ocrd_tool.html @@ -0,0 +1,125 @@ + + + + + + + ocrd_network.models.ocrd_tool — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.models.ocrd_tool

    +from pydantic import BaseModel
    +from typing import List, Optional
    +
    +
    +
    [docs]class PYOcrdTool(BaseModel): + executable: str + categories: List[str] + description: str + input_file_grp: List[str] + output_file_grp: Optional[List[str]] + steps: List[str] + parameters: Optional[dict] = None
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/models/workspace.html b/site/core/_modules/ocrd_network/models/workspace.html new file mode 100644 index 000000000..17753522d --- /dev/null +++ b/site/core/_modules/ocrd_network/models/workspace.html @@ -0,0 +1,148 @@ + + + + + + + ocrd_network.models.workspace — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.models.workspace

    +from beanie import Document
    +from typing import Optional
    +
    +
    +
    [docs]class DBWorkspace(Document): + """ + Model to store a workspace in the mongo-database. + + Information to handle workspaces and from bag-info.txt are stored here. + + Attributes: + ocrd_identifier Ocrd-Identifier (mandatory) + bagit_profile_identifier BagIt-Profile-Identifier (mandatory) + ocrd_base_version_checksum Ocrd-Base-Version-Checksum (mandatory) + ocrd_mets Ocrd-Mets (optional) + bag_info_adds bag-info.txt can also (optionally) contain additional + key-value-pairs which are saved here + deleted the document is deleted if set, however, the record is still preserved + pages_locked a data structure that holds output `fileGrp`s and their respective locked `page_id` + that are currently being processed by an OCR-D processor (server or worker). + If no `page_id` field is set, an identifier "all_pages" will be used. + mets_server_url If set, the reading from and writing to the mets file happens through the METS Server + """ + workspace_id: str + workspace_mets_path: str + ocrd_identifier: str + bagit_profile_identifier: str + ocrd_base_version_checksum: Optional[str] + ocrd_mets: Optional[str] + bag_info_adds: Optional[dict] + mets_server_url: Optional[str] + deleted: bool = False + +
    [docs] class Settings: + name = "workspace"
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/param_validators.html b/site/core/_modules/ocrd_network/param_validators.html new file mode 100644 index 000000000..03f665afd --- /dev/null +++ b/site/core/_modules/ocrd_network/param_validators.html @@ -0,0 +1,158 @@ + + + + + + + ocrd_network.param_validators — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.param_validators

    +from click import ParamType
    +
    +from .utils import (
    +    verify_database_uri,
    +    verify_and_parse_mq_uri
    +)
    +
    +
    +
    [docs]class ServerAddressParamType(ParamType): + name = 'Server address string format' + expected_format = 'host:port' + +
    [docs] def convert(self, value, param, ctx): + try: + elements = value.split(':') + if len(elements) != 2: + raise ValueError('The processing server address is in wrong format') + int(elements[1]) # validate port + except ValueError as error: + self.fail(f'{error}, expected format: {self.expected_format}', param, ctx) + return value
    + + +
    [docs]class QueueServerParamType(ParamType): + name = 'Message queue server string format' + +
    [docs] def convert(self, value, param, ctx): + try: + # perform validation check only + verify_and_parse_mq_uri(value) + except Exception as error: + self.fail(f'{error}', param, ctx) + return value
    + + +
    [docs]class DatabaseParamType(ParamType): + name = 'Database string format' + +
    [docs] def convert(self, value, param, ctx): + try: + # perform validation check only + verify_database_uri(value) + except Exception as error: + self.fail(f'{error}', param, ctx) + return value
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/process_helpers.html b/site/core/_modules/ocrd_network/process_helpers.html new file mode 100644 index 000000000..34d2677b7 --- /dev/null +++ b/site/core/_modules/ocrd_network/process_helpers.html @@ -0,0 +1,177 @@ + + + + + + + ocrd_network.process_helpers — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.process_helpers

    +import json
    +from typing import List, Optional
    +from contextlib import nullcontext
    +
    +from ocrd.processor.helpers import run_cli, run_processor
    +from .utils import get_ocrd_workspace_instance
    +from ocrd_utils import redirect_stderr_and_stdout_to_file, initLogging
    +
    +
    +# A wrapper for run_processor() and run_cli()
    +
    [docs]def invoke_processor( + processor_class, + executable: str, + abs_path_to_mets: str, + input_file_grps: List[str], + output_file_grps: List[str], + page_id: str, + parameters: dict, + mets_server_url: Optional[str] = None, + log_filename: str = None, +) -> None: + if not (processor_class or executable): + raise ValueError('Missing processor class and executable') + input_file_grps_str = ','.join(input_file_grps) + output_file_grps_str = ','.join(output_file_grps) + + workspace = get_ocrd_workspace_instance( + mets_path=abs_path_to_mets, + mets_server_url=mets_server_url + ) + + if processor_class: + ctx_mgr = redirect_stderr_and_stdout_to_file(log_filename) if log_filename else nullcontext() + with ctx_mgr: + initLogging(force_reinit=True) + try: + run_processor( + processorClass=processor_class, + workspace=workspace, + input_file_grp=input_file_grps_str, + output_file_grp=output_file_grps_str, + page_id=page_id, + parameter=parameters, + instance_caching=True, + mets_server_url=mets_server_url, + log_level='DEBUG' + ) + except Exception as e: + raise RuntimeError(f"Python executable '{processor_class.__dict__}' exited with: {e}") + else: + return_code = run_cli( + executable=executable, + workspace=workspace, + mets_url=abs_path_to_mets, + input_file_grp=input_file_grps_str, + output_file_grp=output_file_grps_str, + page_id=page_id, + parameter=json.dumps(parameters), + mets_server_url=mets_server_url, + log_level='DEBUG', + log_filename=log_filename + ) + if return_code != 0: + raise RuntimeError(f"CLI executable '{executable}' exited with: {return_code}")
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/processing_server.html b/site/core/_modules/ocrd_network/processing_server.html new file mode 100644 index 000000000..d3f9fe9b7 --- /dev/null +++ b/site/core/_modules/ocrd_network/processing_server.html @@ -0,0 +1,927 @@ + + + + + + + ocrd_network.processing_server — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.processing_server

    +import json
    +from logging import FileHandler, Formatter
    +import requests
    +import httpx
    +from os import getpid
    +from typing import Dict, List
    +import uvicorn
    +
    +from fastapi import (
    +    FastAPI,
    +    status,
    +    Request,
    +    HTTPException,
    +    UploadFile
    +)
    +from fastapi.exceptions import RequestValidationError
    +from fastapi.responses import FileResponse, JSONResponse
    +
    +from pika.exceptions import ChannelClosedByBroker
    +from ocrd.task_sequence import ProcessorTask
    +from ocrd_utils import initLogging, getLogger, LOG_FORMAT
    +from ocrd import Resolver, Workspace
    +from pathlib import Path
    +from .database import (
    +    initiate_database,
    +    db_create_workspace,
    +    db_get_processing_job,
    +    db_get_processing_jobs,
    +    db_get_workflow_job,
    +    db_get_workspace,
    +    db_update_processing_job,
    +    db_update_workspace
    +)
    +from .deployer import Deployer
    +from .logging import get_processing_server_logging_file_path
    +from .models import (
    +    DBProcessorJob,
    +    DBWorkflowJob,
    +    PYJobInput,
    +    PYJobOutput,
    +    PYResultMessage,
    +    PYWorkflowJobOutput,
    +    StateEnum
    +)
    +from .rabbitmq_utils import (
    +    RMQPublisher,
    +    OcrdProcessingMessage
    +)
    +from .server_cache import (
    +    CacheLockedPages,
    +    CacheProcessingRequests
    +)
    +from .server_utils import (
    +    _get_processor_job,
    +    _get_processor_job_log,
    +    expand_page_ids,
    +    validate_and_return_mets_path,
    +    validate_job_input
    +)
    +from .utils import (
    +    download_ocrd_all_tool_json,
    +    generate_created_time,
    +    generate_id,
    +    get_ocrd_workspace_physical_pages
    +)
    +import time
    +
    +
    +
    [docs]class ProcessingServer(FastAPI): + """FastAPI app to make ocr-d processor calls + + The Processing-Server receives calls conforming to the ocr-d webapi regarding the processing + part. It can run ocrd-processors and provides endpoints to discover processors and watch the job + status. + The Processing-Server does not execute the processors itself but starts up a queue and a + database to delegate the calls to processing workers. They are started by the Processing-Server + and the communication goes through the queue. + """ + + def __init__(self, config_path: str, host: str, port: int) -> None: + initLogging() + super().__init__( + on_startup=[self.on_startup], + on_shutdown=[self.on_shutdown], + title='OCR-D Processing Server', + description='OCR-D Processing Server' + ) + self.log = getLogger('ocrd_network.processing_server') + log_file = get_processing_server_logging_file_path(pid=getpid()) + file_handler = FileHandler(filename=log_file, mode='a') + file_handler.setFormatter(Formatter(LOG_FORMAT)) + self.log.addHandler(file_handler) + + self.log.info(f"Downloading ocrd all tool json") + self.ocrd_all_tool_json = download_ocrd_all_tool_json( + ocrd_all_url="https://ocr-d.de/js/ocrd-all-tool.json" + ) + self.hostname = host + self.port = port + # The deployer is used for: + # - deploying agents when the Processing Server is started + # - retrieving runtime data of agents + self.deployer = Deployer(config_path) + self.mongodb_url = None + # TODO: Combine these under a single URL, rabbitmq_utils needs an update + self.rmq_host = self.deployer.data_queue.address + self.rmq_port = self.deployer.data_queue.port + self.rmq_vhost = '/' + self.rmq_username = self.deployer.data_queue.username + self.rmq_password = self.deployer.data_queue.password + + # Gets assigned when `connect_publisher` is called on the working object + self.rmq_publisher = None + + # Used for keeping track of cached processing requests + self.cache_processing_requests = CacheProcessingRequests() + + # Used for keeping track of locked/unlocked pages of a workspace + self.cache_locked_pages = CacheLockedPages() + + # Used by processing workers and/or processor servers to report back the results + if self.deployer.internal_callback_url: + host = self.deployer.internal_callback_url + self.internal_job_callback_url = f'{host.rstrip("/")}/result_callback' + else: + self.internal_job_callback_url = f'http://{host}:{port}/result_callback' + + # Create routes + self.router.add_api_route( + path='/stop', + endpoint=self.stop_deployed_agents, + methods=['POST'], + tags=['tools'], + summary='Stop database, queue and processing-workers', + ) + + self.router.add_api_route( + path='/processor/{processor_name}', + endpoint=self.push_processor_job, + methods=['POST'], + tags=['processing'], + status_code=status.HTTP_200_OK, + summary='Submit a job to this processor', + response_model=PYJobOutput, + response_model_exclude_unset=True, + response_model_exclude_none=True + ) + + self.router.add_api_route( + path='/processor/{processor_name}/{job_id}', + endpoint=self.get_processor_job, + methods=['GET'], + tags=['processing'], + status_code=status.HTTP_200_OK, + summary='Get information about a job based on its ID', + response_model=PYJobOutput, + response_model_exclude_unset=True, + response_model_exclude_none=True + ) + + self.router.add_api_route( + path='/processor/{processor_name}/{job_id}/log', + endpoint=self.get_processor_job_log, + methods=['GET'], + tags=['processing'], + status_code=status.HTTP_200_OK, + summary='Get the log file of a job id' + ) + + self.router.add_api_route( + path='/result_callback', + endpoint=self.remove_from_request_cache, + methods=['POST'], + tags=['processing'], + status_code=status.HTTP_200_OK, + summary='Callback used by a worker or processor server for reporting result of a processing request', + ) + + self.router.add_api_route( + path='/processor/{processor_name}', + endpoint=self.get_processor_info, + methods=['GET'], + tags=['processing', 'discovery'], + status_code=status.HTTP_200_OK, + summary='Get information about this processor', + ) + + self.router.add_api_route( + path='/processor', + endpoint=self.list_processors, + methods=['GET'], + tags=['processing', 'discovery'], + status_code=status.HTTP_200_OK, + summary='Get a list of all available processors', + ) + + self.router.add_api_route( + path='/workflow', + endpoint=self.run_workflow, + methods=['POST'], + tags=['workflow', 'processing'], + status_code=status.HTTP_200_OK, + summary='Run a workflow', + response_model=PYWorkflowJobOutput, + response_model_exclude=["processing_job_ids"], + response_model_exclude_defaults=True, + response_model_exclude_unset=True, + response_model_exclude_none=True + ) + + self.router.add_api_route( + path='/workflow/{workflow_job_id}', + endpoint=self.get_workflow_info, + methods=['GET'], + tags=['workflow', 'processing'], + status_code=status.HTTP_200_OK, + summary='Get information about a workflow run', + ) + + @self.exception_handler(RequestValidationError) + async def validation_exception_handler(request: Request, exc: RequestValidationError): + exc_str = f'{exc}'.replace('\n', ' ').replace(' ', ' ') + self.log.error(f'{request}: {exc_str}') + content = {'status_code': 10422, 'message': exc_str, 'data': None} + return JSONResponse(content=content, status_code=status.HTTP_422_UNPROCESSABLE_ENTITY) + +
    [docs] def start(self) -> None: + """ deploy agents (db, queue, workers) and start the processing server with uvicorn + """ + try: + self.deployer.deploy_rabbitmq(image='rabbitmq:3-management', detach=True, remove=True) + rabbitmq_url = self.deployer.data_queue.url + + self.deployer.deploy_mongodb(image='mongo', detach=True, remove=True) + self.mongodb_url = self.deployer.data_mongo.url + + # The RMQPublisher is initialized and a connection to the RabbitMQ is performed + self.connect_publisher() + self.log.debug(f'Creating message queues on RabbitMQ instance url: {rabbitmq_url}') + self.create_message_queues() + + self.deployer.deploy_hosts( + mongodb_url=self.mongodb_url, + rabbitmq_url=rabbitmq_url + ) + except Exception: + self.log.error('Error during startup of processing server. ' + 'Trying to kill parts of incompletely deployed service') + self.deployer.kill_all() + raise + uvicorn.run(self, host=self.hostname, port=int(self.port))
    + +
    [docs] async def on_startup(self): + await initiate_database(db_url=self.mongodb_url)
    + +
    [docs] async def on_shutdown(self) -> None: + """ + - hosts and pids should be stored somewhere + - ensure queue is empty or processor is not currently running + - connect to hosts and kill pids + """ + await self.stop_deployed_agents()
    + +
    [docs] async def stop_deployed_agents(self) -> None: + self.deployer.kill_all()
    + +
    [docs] def connect_publisher(self, enable_acks: bool = True) -> None: + self.log.info(f'Connecting RMQPublisher to RabbitMQ server: ' + f'{self.rmq_host}:{self.rmq_port}{self.rmq_vhost}') + self.rmq_publisher = RMQPublisher( + host=self.rmq_host, + port=self.rmq_port, + vhost=self.rmq_vhost + ) + self.log.debug(f'RMQPublisher authenticates with username: ' + f'{self.rmq_username}, password: {self.rmq_password}') + self.rmq_publisher.authenticate_and_connect( + username=self.rmq_username, + password=self.rmq_password + ) + if enable_acks: + self.rmq_publisher.enable_delivery_confirmations() + self.log.info('Delivery confirmations are enabled') + self.log.info('Successfully connected RMQPublisher.')
    + +
    [docs] def create_message_queues(self) -> None: + """ Create the message queues based on the occurrence of + `workers.name` in the config file. + """ + + # The abstract version of the above lines + queue_names = self.deployer.find_matching_processors( + worker_only=True, + str_names_only=True, + unique_only=True + ) + + for queue_name in queue_names: + # The existence/validity of the worker.name is not tested. + # Even if an ocr-d processor does not exist, the queue is created + self.log.info(f'Creating a message queue with id: {queue_name}') + self.rmq_publisher.create_queue(queue_name=queue_name)
    + +
    [docs] @staticmethod + def create_processing_message(job: DBProcessorJob) -> OcrdProcessingMessage: + processing_message = OcrdProcessingMessage( + job_id=job.job_id, + processor_name=job.processor_name, + created_time=generate_created_time(), + path_to_mets=job.path_to_mets, + workspace_id=job.workspace_id, + input_file_grps=job.input_file_grps, + output_file_grps=job.output_file_grps, + page_id=job.page_id, + parameters=job.parameters, + result_queue_name=job.result_queue_name, + callback_url=job.callback_url, + internal_callback_url=job.internal_callback_url + ) + return processing_message
    + +
    [docs] def check_if_queue_exists(self, processor_name): + try: + # Only checks if the process queue exists, if not raises ChannelClosedByBroker + self.rmq_publisher.create_queue(processor_name, passive=True) + except ChannelClosedByBroker as error: + self.log.warning(f"Process queue with id '{processor_name}' not existing: {error}") + # Reconnect publisher - not efficient, but works + # TODO: Revisit when reconnection strategy is implemented + self.connect_publisher(enable_acks=True) + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Process queue with id '{processor_name}' not existing" + )
    + +
    [docs] def query_ocrd_tool_json_from_server(self, processor_name): + processor_server_url = self.deployer.resolve_processor_server_url(processor_name) + if not processor_server_url: + self.log.exception(f"Processor Server of '{processor_name}' is not available") + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Processor Server of '{processor_name}' is not available" + ) + # Request the tool json from the Processor Server + response = requests.get( + processor_server_url, + headers={'Content-Type': 'application/json'} + ) + if not response.status_code == 200: + self.log.exception(f"Failed to retrieve '{processor_name}' from: {processor_server_url}") + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Failed to retrieve '{processor_name}' from: {processor_server_url}" + ) + ocrd_tool = response.json() + return ocrd_tool, processor_server_url
    + +
    [docs] async def push_processor_job(self, processor_name: str, data: PYJobInput) -> PYJobOutput: + if data.job_id: + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Job id field is set but must not be: {data.job_id}" + ) + # Generate processing job id + data.job_id = generate_id() + + # Append the processor name to the request itself + data.processor_name = processor_name + + if data.agent_type not in ['worker', 'server']: + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Unknown network agent with value: {data.agent_type}" + ) + db_workspace = await db_get_workspace( + workspace_id=data.workspace_id, + workspace_mets_path=data.path_to_mets + ) + if not db_workspace: + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Workspace with id: {data.workspace_id} or path: {data.path_to_mets} not found" + ) + workspace_key = data.path_to_mets if data.path_to_mets else data.workspace_id + # initialize the request counter for the workspace_key + self.cache_processing_requests.update_request_counter(workspace_key=workspace_key, by_value=0) + + # Since the path is not resolved yet, + # the return value is not important for the Processing Server + request_mets_path = await validate_and_return_mets_path(self.log, data) + + page_ids = expand_page_ids(data.page_id) + + # A flag whether the current request must be cached + # This is set to true if for any output fileGrp there + # is a page_id value that has been previously locked + cache_current_request = False + + # Check if there are any dependencies of the current request + if data.depends_on: + cache_current_request = await self.cache_processing_requests.is_caching_required(data.depends_on) + + # No need for further check of locked pages dependency + # if the request should be already cached + if not cache_current_request: + # Check if there are any locked pages for the current request + cache_current_request = self.cache_locked_pages.check_if_locked_pages_for_output_file_grps( + workspace_key=workspace_key, + output_file_grps=data.output_file_grps, + page_ids=page_ids + ) + + if cache_current_request: + # Cache the received request + self.cache_processing_requests.cache_request(workspace_key, data) + + # Create a cached job DB entry + db_cached_job = DBProcessorJob( + **data.dict(exclude_unset=True, exclude_none=True), + internal_callback_url=self.internal_job_callback_url, + state=StateEnum.cached + ) + await db_cached_job.insert() + return db_cached_job.to_job_output() + + # Lock the pages in the request + self.cache_locked_pages.lock_pages( + workspace_key=workspace_key, + output_file_grps=data.output_file_grps, + page_ids=page_ids + ) + + # Start a Mets Server with the current workspace + mets_server_url = self.deployer.start_unix_mets_server(mets_path=request_mets_path) + + # Assign the mets server url in the database + await db_update_workspace( + workspace_id=data.workspace_id, + workspace_mets_path=data.path_to_mets, + mets_server_url=mets_server_url + ) + + # Create a queued job DB entry + db_queued_job = DBProcessorJob( + **data.dict(exclude_unset=True, exclude_none=True), + internal_callback_url=self.internal_job_callback_url, + state=StateEnum.queued + ) + await db_queued_job.insert() + self.cache_processing_requests.update_request_counter(workspace_key=workspace_key, by_value=1) + job_output = None + if data.agent_type == 'worker': + ocrd_tool = await self.get_processor_info(data.processor_name) + validate_job_input(self.log, data.processor_name, ocrd_tool, data) + processing_message = self.create_processing_message(db_queued_job) + self.log.debug(f"Pushing to processing worker: {data.processor_name}, {data.page_id}, {data.job_id}") + await self.push_to_processing_queue(data.processor_name, processing_message) + job_output = db_queued_job.to_job_output() + if data.agent_type == 'server': + ocrd_tool, processor_server_url = self.query_ocrd_tool_json_from_server(data.processor_name) + validate_job_input(self.log, data.processor_name, ocrd_tool, data) + self.log.debug(f"Pushing to processor server: {data.processor_name}, {data.page_id}, {data.job_id}") + job_output = await self.push_to_processor_server(data.processor_name, processor_server_url, data) + if not job_output: + self.log.exception('Failed to create job output') + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail='Failed to create job output' + ) + return job_output
    + + # TODO: Revisit and remove duplications between push_to_* methods +
    [docs] async def push_to_processing_queue(self, processor_name: str, processing_message: OcrdProcessingMessage): + if not self.rmq_publisher: + raise Exception('RMQPublisher is not connected') + deployed_processors = self.deployer.find_matching_processors( + worker_only=True, + str_names_only=True, + unique_only=True + ) + if processor_name not in deployed_processors: + self.check_if_queue_exists(processor_name) + + try: + self.rmq_publisher.publish_to_queue( + queue_name=processor_name, + message=OcrdProcessingMessage.encode_yml(processing_message) + ) + except Exception as error: + self.log.exception(f'RMQPublisher has failed: {error}') + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f'RMQPublisher has failed: {error}' + )
    + +
    [docs] async def push_to_processor_server( + self, + processor_name: str, + processor_server_url: str, + job_input: PYJobInput + ) -> PYJobOutput: + try: + json_data = json.dumps(job_input.dict(exclude_unset=True, exclude_none=True)) + except Exception as e: + self.log.exception(f"Failed to json dump the PYJobInput, error: {e}") + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Failed to json dump the PYJobInput, error: {e}" + ) + + # TODO: The amount of pages should come as a request input + # TODO: cf https://github.com/OCR-D/core/pull/1030/files#r1152551161 + # currently, use 200 as a default + amount_of_pages = 200 + request_timeout = 20.0 * amount_of_pages # 20 sec timeout per page + # Post a processing job to the Processor Server asynchronously + timeout = httpx.Timeout(timeout=request_timeout, connect=30.0) + async with httpx.AsyncClient(timeout=timeout) as client: + response = await client.post( + processor_server_url, + headers={'Content-Type': 'application/json'}, + json=json.loads(json_data) + ) + + if not response.status_code == 202: + self.log.exception(f"Failed to post '{processor_name}' job to: {processor_server_url}") + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Failed to post '{processor_name}' job to: {processor_server_url}" + ) + job_output = response.json() + return job_output
    + +
    [docs] async def get_processor_job(self, processor_name: str, job_id: str) -> PYJobOutput: + return await _get_processor_job(self.log, processor_name, job_id)
    + +
    [docs] async def get_processor_job_log(self, processor_name: str, job_id: str) -> FileResponse: + return await _get_processor_job_log(self.log, processor_name, job_id)
    + +
    [docs] async def remove_from_request_cache(self, result_message: PYResultMessage): + result_job_id = result_message.job_id + result_job_state = result_message.state + path_to_mets = result_message.path_to_mets + workspace_id = result_message.workspace_id + self.log.debug(f"Result job_id: {result_job_id}, state: {result_job_state}") + + # Read DB workspace entry + db_workspace = await db_get_workspace(workspace_id=workspace_id, workspace_mets_path=path_to_mets) + if not db_workspace: + self.log.exception(f"Workspace with id: {workspace_id} or path: {path_to_mets} not found in DB") + mets_server_url = db_workspace.mets_server_url + workspace_key = path_to_mets if path_to_mets else workspace_id + + if result_job_state == StateEnum.failed: + await self.cache_processing_requests.cancel_dependent_jobs( + workspace_key=workspace_key, + processing_job_id=result_job_id + ) + + if result_job_state != StateEnum.success: + # TODO: Handle other potential error cases + pass + + db_result_job = await db_get_processing_job(result_job_id) + if not db_result_job: + self.log.exception(f"Processing job with id: {result_job_id} not found in DB") + + # Unlock the output file group pages for the result processing request + self.cache_locked_pages.unlock_pages( + workspace_key=workspace_key, + output_file_grps=db_result_job.output_file_grps, + page_ids=expand_page_ids(db_result_job.page_id) + ) + + # Take the next request from the cache (if any available) + if workspace_key not in self.cache_processing_requests.processing_requests: + self.log.debug(f"No internal queue available for workspace with key: {workspace_key}") + return + + # decrease the internal counter by 1 + request_counter = self.cache_processing_requests.update_request_counter(workspace_key=workspace_key, by_value=-1) + self.log.debug(f"Internal processing counter value: {request_counter}") + if not len(self.cache_processing_requests.processing_requests[workspace_key]): + if request_counter <= 0: + # Shut down the Mets Server for the workspace_key since no + # more internal callbacks are expected for that workspace + self.log.debug(f"Stopping the mets server: {mets_server_url}") + self.deployer.stop_unix_mets_server(mets_server_url=mets_server_url) + # The queue is empty - delete it + try: + del self.cache_processing_requests.processing_requests[workspace_key] + except KeyError: + self.log.warning(f"Trying to delete non-existing internal queue with key: {workspace_key}") + + # For debugging purposes it is good to see if any locked pages are left + self.log.debug(f"Contents of the locked pages cache for: {workspace_key}") + locked_pages = self.cache_locked_pages.get_locked_pages(workspace_key=workspace_key) + for output_fileGrp in locked_pages: + self.log.debug(f"{output_fileGrp}: {locked_pages[output_fileGrp]}") + else: + self.log.debug(f"Internal request cache is empty but waiting for {request_counter} result callbacks.") + return + + consumed_requests = await self.cache_processing_requests.consume_cached_requests(workspace_key=workspace_key) + + if not len(consumed_requests): + self.log.debug("No processing jobs were consumed from the requests cache") + return + + for data in consumed_requests: + self.log.debug(f"Changing the job status of: {data.job_id} from {StateEnum.cached} to {StateEnum.queued}") + db_consumed_job = await db_update_processing_job(job_id=data.job_id, state=StateEnum.queued) + workspace_key = data.path_to_mets if data.path_to_mets else data.workspace_id + + # Lock the output file group pages for the current request + self.cache_locked_pages.lock_pages( + workspace_key=workspace_key, + output_file_grps=data.output_file_grps, + page_ids=expand_page_ids(data.page_id) + ) + self.cache_processing_requests.update_request_counter(workspace_key=workspace_key, by_value=1) + job_output = None + if data.agent_type == 'worker': + ocrd_tool = await self.get_processor_info(data.processor_name) + validate_job_input(self.log, data.processor_name, ocrd_tool, data) + processing_message = self.create_processing_message(db_consumed_job) + self.log.debug(f"Pushing cached to processing worker: " + f"{data.processor_name}, {data.page_id}, {data.job_id}") + await self.push_to_processing_queue(data.processor_name, processing_message) + job_output = db_consumed_job.to_job_output() + if data.agent_type == 'server': + ocrd_tool, processor_server_url = self.query_ocrd_tool_json_from_server(data.processor_name) + validate_job_input(self.log, data.processor_name, ocrd_tool, data) + self.log.debug(f"Pushing cached to processor server: " + f"{data.processor_name}, {data.page_id}, {data.job_id}") + job_output = await self.push_to_processor_server(data.processor_name, processor_server_url, data) + if not job_output: + self.log.exception(f'Failed to create job output for job input data: {data}')
    + +
    [docs] async def get_processor_info(self, processor_name) -> Dict: + """ Return a processor's ocrd-tool.json + """ + ocrd_tool = self.ocrd_all_tool_json.get(processor_name, None) + if not ocrd_tool: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Ocrd tool JSON of '{processor_name}' not available!" + ) + + # TODO: Returns the ocrd tool json even of processors + # that are not deployed. This may or may not be desired. + return ocrd_tool
    + +
    [docs] async def list_processors(self) -> List[str]: + # There is no caching on the Processing Server side + processor_names_list = self.deployer.find_matching_processors( + docker_only=False, + native_only=False, + worker_only=False, + server_only=False, + str_names_only=True, + unique_only=True + ) + return processor_names_list
    + +
    [docs] async def task_sequence_to_processing_jobs( + self, + tasks: List[ProcessorTask], + mets_path: str, + page_id: str, + agent_type: str = 'worker', + ) -> List[PYJobOutput]: + file_group_cache = {} + responses = [] + for task in tasks: + # Find dependent jobs of the current task + dependent_jobs = [] + for input_file_grp in task.input_file_grps: + if input_file_grp in file_group_cache: + dependent_jobs.append(file_group_cache[input_file_grp]) + # NOTE: The `task.mets_path` and `task.page_id` is not utilized in low level + # Thus, setting these two flags in the ocrd process workflow file has no effect + job_input_data = PYJobInput( + processor_name=task.executable, + path_to_mets=mets_path, + input_file_grps=task.input_file_grps, + output_file_grps=task.output_file_grps, + page_id=page_id, + parameters=task.parameters, + agent_type=agent_type, + depends_on=dependent_jobs, + ) + response = await self.push_processor_job( + processor_name=job_input_data.processor_name, + data=job_input_data + ) + for file_group in task.output_file_grps: + file_group_cache[file_group] = response.job_id + responses.append(response) + return responses
    + +
    [docs] async def run_workflow( + self, + workflow: UploadFile, + mets_path: str, + agent_type: str = 'worker', + page_id: str = None, + page_wise: bool = False, + workflow_callback_url: str = None + ) -> PYWorkflowJobOutput: + try: + # core cannot create workspaces by api, but processing-server needs the workspace in the + # database. Here the workspace is created if the path available and not existing in db: + await db_create_workspace(mets_path) + except FileNotFoundError: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, + detail=f"Mets file not existing: {mets_path}") + + workflow = (await workflow.read()).decode("utf-8") + try: + tasks_list = workflow.splitlines() + tasks = [ProcessorTask.parse(task_str) for task_str in tasks_list if task_str.strip()] + except BaseException as e: + raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Error parsing tasks: {e}") + + available_groups = Workspace(Resolver(), Path(mets_path).parents[0]).mets.file_groups + for grp in tasks[0].input_file_grps: + if grp not in available_groups: + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Input file grps of 1st processor not found: {tasks[0].input_file_grps}" + ) + try: + if page_id: + page_range = expand_page_ids(page_id) + else: + # If no page_id is specified, all physical pages are assigned as page range + page_range = get_ocrd_workspace_physical_pages(mets_path=mets_path) + compact_page_range = f'{page_range[0]}..{page_range[-1]}' + except BaseException as e: + raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Error determining page-range: {e}") + + if not page_wise: + responses = await self.task_sequence_to_processing_jobs( + tasks=tasks, + mets_path=mets_path, + page_id=compact_page_range, + agent_type=agent_type + ) + processing_job_ids = [] + for response in responses: + processing_job_ids.append(response.job_id) + db_workflow_job = DBWorkflowJob( + job_id=generate_id(), + page_id=compact_page_range, + page_wise=page_wise, + processing_job_ids={compact_page_range: processing_job_ids}, + path_to_mets=mets_path, + workflow_callback_url=workflow_callback_url + ) + await db_workflow_job.insert() + return db_workflow_job.to_job_output() + + all_pages_job_ids = {} + for current_page in page_range: + responses = await self.task_sequence_to_processing_jobs( + tasks=tasks, + mets_path=mets_path, + page_id=current_page, + agent_type=agent_type + ) + processing_job_ids = [] + for response in responses: + processing_job_ids.append(response.job_id) + all_pages_job_ids[current_page] = processing_job_ids + db_workflow_job = DBWorkflowJob( + job_id=generate_id(), + page_id=compact_page_range, + page_wise=page_wise, + processing_job_ids=all_pages_job_ids, + path_to_mets=mets_path, + workflow_callback_url=workflow_callback_url + ) + await db_workflow_job.insert() + return db_workflow_job.to_job_output()
    + +
    [docs] async def get_workflow_info(self, workflow_job_id) -> Dict: + """ Return list of a workflow's processor jobs + """ + try: + workflow_job = await db_get_workflow_job(workflow_job_id) + except ValueError: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, + detail=f"Workflow-Job with id: {workflow_job_id} not found") + job_ids: List[str] = [id for lst in workflow_job.processing_job_ids.values() for id in lst] + jobs = await db_get_processing_jobs(job_ids) + res = {} + failed_tasks = {} + failed_tasks_key = "failed-processor-tasks" + for job in jobs: + res.setdefault(job.processor_name, {}) + res[job.processor_name].setdefault(job.state.value, 0) + res[job.processor_name][job.state.value] += 1 + if job.state == "FAILED": + if failed_tasks_key not in res: + res[failed_tasks_key] = failed_tasks + failed_tasks.setdefault(job.processor_name, []) + failed_tasks[job.processor_name].append({ + "job_id": job.job_id, + "page_id": job.page_id, + }) + return res
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/processing_worker.html b/site/core/_modules/ocrd_network/processing_worker.html new file mode 100644 index 000000000..87374dd09 --- /dev/null +++ b/site/core/_modules/ocrd_network/processing_worker.html @@ -0,0 +1,410 @@ + + + + + + + ocrd_network.processing_worker — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.processing_worker

    +"""
    +Abstraction for the Processing Server unit in this arch:
    +https://user-images.githubusercontent.com/7795705/203554094-62ce135a-b367-49ba-9960-ffe1b7d39b2c.jpg
    +
    +Calls to native OCR-D processor should happen through
    +the Processing Worker wrapper to hide low level details.
    +According to the current requirements, each ProcessingWorker
    +is a single OCR-D Processor instance.
    +"""
    +
    +from datetime import datetime
    +from logging import FileHandler, Formatter
    +from os import getpid
    +from time import sleep
    +import pika.spec
    +import pika.adapters.blocking_connection
    +from pika.exceptions import AMQPConnectionError
    +
    +from ocrd_utils import config, getLogger, LOG_FORMAT
    +from .database import (
    +    sync_initiate_database,
    +    sync_db_get_workspace,
    +    sync_db_update_processing_job,
    +)
    +from .logging import (
    +    get_processing_job_logging_file_path,
    +    get_processing_worker_logging_file_path
    +)
    +from .models import StateEnum
    +from .process_helpers import invoke_processor
    +from .rabbitmq_utils import (
    +    OcrdProcessingMessage,
    +    OcrdResultMessage,
    +    RMQConsumer,
    +    RMQPublisher
    +)
    +from .utils import (
    +    calculate_execution_time,
    +    post_to_callback_url,
    +    verify_database_uri,
    +    verify_and_parse_mq_uri
    +)
    +
    +
    +
    [docs]class ProcessingWorker: + def __init__(self, rabbitmq_addr, mongodb_addr, processor_name, ocrd_tool: dict, processor_class=None) -> None: + self.log = getLogger(f'ocrd_network.processing_worker') + log_file = get_processing_worker_logging_file_path(processor_name=processor_name, pid=getpid()) + file_handler = FileHandler(filename=log_file, mode='a') + file_handler.setFormatter(Formatter(LOG_FORMAT)) + self.log.addHandler(file_handler) + + try: + verify_database_uri(mongodb_addr) + self.log.debug(f'Verified MongoDB URL: {mongodb_addr}') + rmq_data = verify_and_parse_mq_uri(rabbitmq_addr) + self.rmq_username = rmq_data['username'] + self.rmq_password = rmq_data['password'] + self.rmq_host = rmq_data['host'] + self.rmq_port = rmq_data['port'] + self.rmq_vhost = rmq_data['vhost'] + self.log.debug(f'Verified RabbitMQ Credentials: {self.rmq_username}:{self.rmq_password}') + self.log.debug(f'Verified RabbitMQ Server URL: {self.rmq_host}:{self.rmq_port}{self.rmq_vhost}') + except ValueError as e: + raise ValueError(e) + + sync_initiate_database(mongodb_addr) # Database client + self.ocrd_tool = ocrd_tool + # The str name of the OCR-D processor instance to be started + self.processor_name = processor_name + # The processor class to be used to instantiate the processor + # Think of this as a func pointer to the constructor of the respective OCR-D processor + self.processor_class = processor_class + # Gets assigned when `connect_consumer` is called on the worker object + # Used to consume OcrdProcessingMessage from the queue with name {processor_name} + self.rmq_consumer = None + # Gets assigned when the `connect_publisher` is called on the worker object + # The publisher is connected when the `result_queue` field of the OcrdProcessingMessage is set for first time + # Used to publish OcrdResultMessage type message to the queue with name {processor_name}-result + self.rmq_publisher = None + # Always create a queue (idempotent) + self.create_queue() + +
    [docs] def connect_consumer(self) -> None: + self.log.info(f'Connecting RMQConsumer to RabbitMQ server: ' + f'{self.rmq_host}:{self.rmq_port}{self.rmq_vhost}') + self.rmq_consumer = RMQConsumer( + host=self.rmq_host, + port=self.rmq_port, + vhost=self.rmq_vhost + ) + self.log.debug(f'RMQConsumer authenticates with username: ' + f'{self.rmq_username}, password: {self.rmq_password}') + self.rmq_consumer.authenticate_and_connect( + username=self.rmq_username, + password=self.rmq_password + ) + self.log.info(f'Successfully connected RMQConsumer.')
    + +
    [docs] def connect_publisher(self, enable_acks: bool = True) -> None: + self.log.info(f'Connecting RMQPublisher to RabbitMQ server: ' + f'{self.rmq_host}:{self.rmq_port}{self.rmq_vhost}') + self.rmq_publisher = RMQPublisher( + host=self.rmq_host, + port=self.rmq_port, + vhost=self.rmq_vhost + ) + self.log.debug(f'RMQPublisher authenticates with username: ' + f'{self.rmq_username}, password: {self.rmq_password}') + self.rmq_publisher.authenticate_and_connect( + username=self.rmq_username, + password=self.rmq_password + ) + if enable_acks: + self.rmq_publisher.enable_delivery_confirmations() + self.log.info('Delivery confirmations are enabled') + self.log.info('Successfully connected RMQPublisher.')
    + + # Define what happens every time a message is consumed + # from the queue with name self.processor_name +
    [docs] def on_consumed_message( + self, + channel: pika.adapters.blocking_connection.BlockingChannel, + delivery: pika.spec.Basic.Deliver, + properties: pika.spec.BasicProperties, + body: bytes) -> None: + consumer_tag = delivery.consumer_tag + delivery_tag: int = delivery.delivery_tag + is_redelivered: bool = delivery.redelivered + message_headers: dict = properties.headers + + self.log.debug(f'Consumer tag: {consumer_tag}, ' + f'message delivery tag: {delivery_tag}, ' + f'redelivered: {is_redelivered}') + self.log.debug(f'Message headers: {message_headers}') + + try: + self.log.debug(f'Trying to decode processing message with tag: {delivery_tag}') + processing_message: OcrdProcessingMessage = OcrdProcessingMessage.decode_yml(body) + except Exception as e: + self.log.error(f'Failed to decode processing message body: {body}') + self.log.error(f'Nacking processing message with tag: {delivery_tag}') + channel.basic_nack(delivery_tag=delivery_tag, multiple=False, requeue=False) + raise Exception(f'Failed to decode processing message with tag: {delivery_tag}, reason: {e}') + + try: + self.log.info(f'Starting to process the received message: {processing_message.__dict__}') + self.process_message(processing_message=processing_message) + except Exception as e: + self.log.error(f'Failed to process processing message with tag: {delivery_tag}') + self.log.error(f'Nacking processing message with tag: {delivery_tag}') + channel.basic_nack(delivery_tag=delivery_tag, multiple=False, requeue=False) + raise Exception(f'Failed to process processing message with tag: {delivery_tag}, reason: {e}') + + self.log.info(f'Successfully processed RabbitMQ message') + self.log.debug(f'Acking message with tag: {delivery_tag}') + channel.basic_ack(delivery_tag=delivery_tag, multiple=False)
    + +
    [docs] def start_consuming(self) -> None: + if self.rmq_consumer: + self.log.info(f'Configuring consuming from queue: {self.processor_name}') + self.rmq_consumer.configure_consuming( + queue_name=self.processor_name, + callback_method=self.on_consumed_message + ) + self.log.info(f'Starting consuming from queue: {self.processor_name}') + # Starting consuming is a blocking action + self.rmq_consumer.start_consuming() + else: + raise Exception('The RMQConsumer is not connected/configured properly')
    + + # TODO: Better error handling required to catch exceptions +
    [docs] def process_message(self, processing_message: OcrdProcessingMessage) -> None: + # Verify that the processor name in the processing message + # matches the processor name of the current processing worker + if self.processor_name != processing_message.processor_name: + raise ValueError(f'Processor name is not matching. Expected: {self.processor_name},' + f'Got: {processing_message.processor_name}') + + # All of this is needed because the OcrdProcessingMessage object + # may not contain certain keys. Simply passing None in the OcrdProcessingMessage constructor + # breaks the message validator schema which expects String, but not None due to the Optional[] wrapper. + pm_keys = processing_message.__dict__.keys() + job_id = processing_message.job_id + input_file_grps = processing_message.input_file_grps + output_file_grps = processing_message.output_file_grps if 'output_file_grps' in pm_keys else None + path_to_mets = processing_message.path_to_mets if 'path_to_mets' in pm_keys else None + workspace_id = processing_message.workspace_id if 'workspace_id' in pm_keys else None + page_id = processing_message.page_id if 'page_id' in pm_keys else None + result_queue_name = processing_message.result_queue_name if 'result_queue_name' in pm_keys else None + callback_url = processing_message.callback_url if 'callback_url' in pm_keys else None + internal_callback_url = processing_message.internal_callback_url if 'internal_callback_url' in pm_keys else None + parameters = processing_message.parameters if processing_message.parameters else {} + + if not path_to_mets and not workspace_id: + raise ValueError(f'`path_to_mets` nor `workspace_id` was set in the ocrd processing message') + + if path_to_mets: + mets_server_url = sync_db_get_workspace(workspace_mets_path=path_to_mets).mets_server_url + if not path_to_mets and workspace_id: + path_to_mets = sync_db_get_workspace(workspace_id).workspace_mets_path + mets_server_url = sync_db_get_workspace(workspace_id).mets_server_url + + execution_failed = False + self.log.debug(f'Invoking processor: {self.processor_name}') + start_time = datetime.now() + job_log_file = get_processing_job_logging_file_path(job_id=job_id) + sync_db_update_processing_job( + job_id=job_id, + state=StateEnum.running, + path_to_mets=path_to_mets, + start_time=start_time, + log_file_path=job_log_file + ) + try: + invoke_processor( + processor_class=self.processor_class, + executable=self.processor_name, + abs_path_to_mets=path_to_mets, + input_file_grps=input_file_grps, + output_file_grps=output_file_grps, + page_id=page_id, + log_filename=job_log_file, + parameters=processing_message.parameters, + mets_server_url=mets_server_url + ) + except Exception as error: + self.log.debug(f"processor_name: {self.processor_name}, path_to_mets: {path_to_mets}, " + f"input_grps: {input_file_grps}, output_file_grps: {output_file_grps}, " + f"page_id: {page_id}, parameters: {parameters}") + self.log.exception(error) + execution_failed = True + end_time = datetime.now() + exec_duration = calculate_execution_time(start_time, end_time) + job_state = StateEnum.success if not execution_failed else StateEnum.failed + sync_db_update_processing_job( + job_id=job_id, + state=job_state, + end_time=end_time, + exec_time=f'{exec_duration} ms' + ) + result_message = OcrdResultMessage( + job_id=job_id, + state=job_state.value, + path_to_mets=path_to_mets, + # May not be always available + workspace_id=workspace_id + ) + self.log.info(f'Result message: {result_message.__dict__}') + # If the result_queue field is set, send the result message to a result queue + if result_queue_name: + self.publish_to_result_queue(result_queue_name, result_message) + if callback_url: + # If the callback_url field is set, + # post the result message (callback to a user defined endpoint) + post_to_callback_url(self.log, callback_url, result_message) + if internal_callback_url: + # If the internal callback_url field is set, + # post the result message (callback to Processing Server endpoint) + post_to_callback_url(self.log, internal_callback_url, result_message)
    + +
    [docs] def publish_to_result_queue(self, result_queue: str, result_message: OcrdResultMessage): + if self.rmq_publisher is None: + self.connect_publisher() + # create_queue method is idempotent - nothing happens if + # a queue with the specified name already exists + self.rmq_publisher.create_queue(queue_name=result_queue) + self.log.info(f'Publishing result message to queue: {result_queue}') + encoded_result_message = OcrdResultMessage.encode_yml(result_message) + self.rmq_publisher.publish_to_queue( + queue_name=result_queue, + message=encoded_result_message + )
    + +
    [docs] def create_queue( + self, + connection_attempts: int = config.OCRD_NETWORK_WORKER_QUEUE_CONNECT_ATTEMPTS, + retry_delay: int = 3) -> None: + """Create the queue for this worker + + Originally only the processing-server created the queues for the workers according to the + configuration file. This is intended to make external deployment of workers possible. + """ + if self.rmq_publisher is None: + attempts_left = connection_attempts if connection_attempts > 0 else 1 + while attempts_left > 0: + try: + self.connect_publisher() + break + except AMQPConnectionError as e: + if attempts_left <= 1: + raise e + attempts_left -= 1 + sleep(retry_delay) + + # the following function is idempotent + self.rmq_publisher.create_queue(queue_name=self.processor_name)
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/processor_server.html b/site/core/_modules/ocrd_network/processor_server.html new file mode 100644 index 000000000..4548259c6 --- /dev/null +++ b/site/core/_modules/ocrd_network/processor_server.html @@ -0,0 +1,370 @@ + + + + + + + ocrd_network.processor_server — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.processor_server

    +from datetime import datetime
    +from logging import FileHandler, Formatter
    +from os import getpid
    +from subprocess import run, PIPE
    +import uvicorn
    +
    +from fastapi import FastAPI, HTTPException, status
    +from fastapi.responses import FileResponse
    +
    +from ocrd_utils import (
    +    initLogging,
    +    get_ocrd_tool_json,
    +    getLogger,
    +    LOG_FORMAT,
    +    parse_json_string_with_comments
    +)
    +from .database import (
    +    DBProcessorJob,
    +    db_get_workspace,
    +    db_update_processing_job,
    +    initiate_database
    +)
    +from .logging import get_processor_server_logging_file_path
    +from .models import (
    +    PYJobInput,
    +    PYJobOutput,
    +    PYOcrdTool,
    +    StateEnum
    +)
    +from .process_helpers import invoke_processor
    +from .rabbitmq_utils import OcrdResultMessage
    +from .server_utils import (
    +    _get_processor_job,
    +    _get_processor_job_log,
    +    validate_and_return_mets_path,
    +    validate_job_input
    +)
    +from .utils import (
    +    calculate_execution_time,
    +    post_to_callback_url,
    +    generate_id,
    +)
    +
    +
    +
    [docs]class ProcessorServer(FastAPI): + def __init__(self, mongodb_addr: str, processor_name: str = "", processor_class=None): + if not (processor_name or processor_class): + raise ValueError('Either "processor_name" or "processor_class" must be provided') + initLogging() + super().__init__( + on_startup=[self.on_startup], + on_shutdown=[self.on_shutdown], + title=f'OCR-D Processor Server', + description='OCR-D Processor Server' + ) + self.log = getLogger('ocrd_network.processor_server') + log_file = get_processor_server_logging_file_path(processor_name=processor_name, pid=getpid()) + file_handler = FileHandler(filename=log_file, mode='a') + file_handler.setFormatter(Formatter(LOG_FORMAT)) + self.log.addHandler(file_handler) + + self.db_url = mongodb_addr + self.processor_name = processor_name + self.processor_class = processor_class + self.ocrd_tool = None + self.version = None + + self.version = self.get_version() + self.ocrd_tool = self.get_ocrd_tool() + + if not self.ocrd_tool: + raise Exception(f"The ocrd_tool is empty or missing") + + if not self.processor_name: + self.processor_name = self.ocrd_tool['executable'] + + # Create routes + self.router.add_api_route( + path='/', + endpoint=self.get_processor_info, + methods=['GET'], + tags=['Processing'], + status_code=status.HTTP_200_OK, + summary='Get information about this processor.', + response_model=PYOcrdTool, + response_model_exclude_unset=True, + response_model_exclude_none=True + ) + + self.router.add_api_route( + path='/', + endpoint=self.create_processor_task, + methods=['POST'], + tags=['Processing'], + status_code=status.HTTP_202_ACCEPTED, + summary='Submit a job to this processor.', + response_model=PYJobOutput, + response_model_exclude_unset=True, + response_model_exclude_none=True + ) + + self.router.add_api_route( + path='/{job_id}', + endpoint=self.get_processor_job, + methods=['GET'], + tags=['Processing'], + status_code=status.HTTP_200_OK, + summary='Get information about a job based on its ID', + response_model=PYJobOutput, + response_model_exclude_unset=True, + response_model_exclude_none=True + ) + + self.router.add_api_route( + path='/{job_id}/log', + endpoint=self.get_processor_job_log, + methods=['GET'], + tags=['processing'], + status_code=status.HTTP_200_OK, + summary='Get the log file of a job id' + ) + +
    [docs] async def on_startup(self): + await initiate_database(db_url=self.db_url)
    + +
    [docs] async def on_shutdown(self) -> None: + """ + TODO: Perform graceful shutdown operations here + """ + pass
    + +
    [docs] async def get_processor_info(self): + if not self.ocrd_tool: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f'Empty or missing ocrd_tool' + ) + return self.ocrd_tool
    + + # Note: The Processing server pushes to a queue, while + # the Processor Server creates (pushes to) a background task +
    [docs] async def create_processor_task(self, job_input: PYJobInput): + validate_job_input(self.log, self.processor_name, self.ocrd_tool, job_input) + job_input.path_to_mets = await validate_and_return_mets_path(self.log, job_input) + + job = None + # The request is not forwarded from the Processing Server, assign a job_id + if not job_input.job_id: + job_id = generate_id() + # Create a DB entry + job = DBProcessorJob( + **job_input.dict(exclude_unset=True, exclude_none=True), + job_id=job_id, + processor_name=self.processor_name, + state=StateEnum.queued + ) + await job.insert() + await self.run_processor_task(job=job) + return job.to_job_output()
    + +
    [docs] async def run_processor_task(self, job: DBProcessorJob): + execution_failed = False + start_time = datetime.now() + await db_update_processing_job( + job_id=job.job_id, + state=StateEnum.running, + start_time=start_time + ) + + mets_server_url = await db_get_workspace(workspace_mets_path=job.path_to_mets).mets_server_url + try: + invoke_processor( + processor_class=self.processor_class, + executable=self.processor_name, + abs_path_to_mets=job.path_to_mets, + input_file_grps=job.input_file_grps, + output_file_grps=job.output_file_grps, + page_id=job.page_id, + parameters=job.parameters, + mets_server_url=mets_server_url + ) + except Exception as error: + self.log.debug(f"processor_name: {self.processor_name}, path_to_mets: {job.path_to_mets}, " + f"input_grps: {job.input_file_grps}, output_file_grps: {job.output_file_grps}, " + f"page_id: {job.page_id}, parameters: {job.parameters}") + self.log.exception(error) + execution_failed = True + end_time = datetime.now() + exec_duration = calculate_execution_time(start_time, end_time) + job_state = StateEnum.success if not execution_failed else StateEnum.failed + await db_update_processing_job( + job_id=job.job_id, + state=job_state, + end_time=end_time, + exec_time=f'{exec_duration} ms' + ) + result_message = OcrdResultMessage( + job_id=job.job_id, + state=job_state.value, + path_to_mets=job.path_to_mets, + # May not be always available + workspace_id=job.workspace_id + ) + self.log.info(f'Result message: {result_message}') + if job.callback_url: + # If the callback_url field is set, + # post the result message (callback to a user defined endpoint) + post_to_callback_url(self.log, job.callback_url, result_message) + if job.internal_callback_url: + # If the internal callback_url field is set, + # post the result message (callback to Processing Server endpoint) + post_to_callback_url(self.log, job.internal_callback_url, result_message)
    + +
    [docs] def get_ocrd_tool(self): + if self.ocrd_tool: + return self.ocrd_tool + if self.processor_class: + # The way of accessing ocrd tool like in the line below may be problematic + # ocrd_tool = self.processor_class(workspace=None, version=True).ocrd_tool + ocrd_tool = parse_json_string_with_comments( + run( + [self.processor_name, '--dump-json'], + stdout=PIPE, + check=True, + universal_newlines=True + ).stdout + ) + else: + ocrd_tool = get_ocrd_tool_json(self.processor_name) + return ocrd_tool
    + +
    [docs] def get_version(self) -> str: + if self.version: + return self.version + + """ + if self.processor_class: + # The way of accessing the version like in the line below may be problematic + # version_str = self.processor_class(workspace=None, version=True).version + return version_str + """ + version_str = run( + [self.processor_name, '--version'], + stdout=PIPE, + check=True, + universal_newlines=True + ).stdout + return version_str
    + +
    [docs] def run_server(self, host, port): + uvicorn.run(self, host=host, port=port)
    + +
    [docs] async def get_processor_job(self, job_id: str) -> PYJobOutput: + return await _get_processor_job(self.log, self.processor_name, job_id)
    + +
    [docs] async def get_processor_job_log(self, job_id: str) -> FileResponse: + return await _get_processor_job_log(self.log, self.processor_name, job_id)
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/rabbitmq_utils/connector.html b/site/core/_modules/ocrd_network/rabbitmq_utils/connector.html new file mode 100644 index 000000000..6e3b3a8da --- /dev/null +++ b/site/core/_modules/ocrd_network/rabbitmq_utils/connector.html @@ -0,0 +1,390 @@ + + + + + + + ocrd_network.rabbitmq_utils.connector — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.rabbitmq_utils.connector

    +"""
    +The source code in this file is adapted by reusing
    +some part of the source code from the official
    +RabbitMQ documentation.
    +"""
    +from typing import Any, Optional, Union
    +from pika import BasicProperties, BlockingConnection, ConnectionParameters, PlainCredentials
    +from pika.adapters.blocking_connection import BlockingChannel
    +from .constants import (
    +    DEFAULT_EXCHANGER_NAME,
    +    DEFAULT_EXCHANGER_TYPE,
    +    DEFAULT_QUEUE,
    +    DEFAULT_ROUTER,
    +    RABBIT_MQ_HOST as HOST,
    +    RABBIT_MQ_PORT as PORT,
    +    RABBIT_MQ_VHOST as VHOST,
    +    PREFETCH_COUNT
    +)
    +
    +
    +
    [docs]class RMQConnector: + def __init__(self, host: str = HOST, port: int = PORT, vhost: str = VHOST) -> None: + self._host = host + self._port = port + self._vhost = vhost + + # According to the documentation, Pika blocking + # connections are not thread-safe! + self._connection = None + self._channel = None + + # Should try reconnecting again + self._try_reconnecting = False + # If the module has been stopped with a + # keyboard interruption, i.e., CTRL + C + self._gracefully_stopped = False + +
    [docs] @staticmethod + def declare_and_bind_defaults(connection: BlockingConnection, channel: BlockingChannel) -> None: + if connection and connection.is_open: + if channel and channel.is_open: + # Declare the default exchange agent + RMQConnector.exchange_declare( + channel=channel, + exchange_name=DEFAULT_EXCHANGER_NAME, + exchange_type=DEFAULT_EXCHANGER_TYPE, + ) + # Declare the default queue + RMQConnector.queue_declare(channel, queue_name=DEFAULT_QUEUE) + # Bind the default queue to the default exchange + RMQConnector.queue_bind( + channel, + queue_name=DEFAULT_QUEUE, + exchange_name=DEFAULT_EXCHANGER_NAME, + routing_key=DEFAULT_ROUTER + )
    + + # Connection related methods +
    [docs] @staticmethod + def open_blocking_connection( + credentials: PlainCredentials, + host: str = HOST, + port: int = PORT, + vhost: str = VHOST + ) -> BlockingConnection: + blocking_connection = BlockingConnection( + parameters=ConnectionParameters( + host=host, + port=port, + virtual_host=vhost, + credentials=credentials, + # TODO: The heartbeat should not be disabled (0)! + heartbeat=0 + ), + ) + return blocking_connection
    + +
    [docs] @staticmethod + def open_blocking_channel(connection: BlockingConnection) -> Union[BlockingChannel, None]: + if connection and connection.is_open: + channel = connection.channel() + return channel + return None
    + +
    [docs] @staticmethod + def exchange_bind( + channel: BlockingChannel, + destination_exchange: str, + source_exchange: str, + routing_key: str, + arguments: Optional[Any] = None + ) -> None: + if arguments is None: + arguments = {} + if channel and channel.is_open: + channel.exchange_bind( + destination=destination_exchange, + source=source_exchange, + routing_key=routing_key, + arguments=arguments + )
    + +
    [docs] @staticmethod + def exchange_declare( + channel: BlockingChannel, + exchange_name: str, + exchange_type: str, + passive: bool = False, + durable: bool = False, + auto_delete: bool = False, + internal: bool = False, + arguments: Optional[Any] = None + ) -> None: + if arguments is None: + arguments = {} + if channel and channel.is_open: + exchange = channel.exchange_declare( + exchange=exchange_name, + exchange_type=exchange_type, + # Only check to see if the exchange exists + passive=passive, + # Survive a reboot of RabbitMQ + durable=durable, + # Remove when no more queues are bound to it + auto_delete=auto_delete, + # Can only be published to by other exchanges + internal=internal, + # Custom key/value pair arguments for the exchange + arguments=arguments + ) + return exchange
    + +
    [docs] @staticmethod + def exchange_delete( + channel: BlockingChannel, + exchange_name: str, + if_unused: bool = False + ) -> None: + # Deletes queue only if unused + if channel and channel.is_open: + channel.exchange_delete(exchange=exchange_name, if_unused=if_unused)
    + +
    [docs] @staticmethod + def exchange_unbind( + channel: BlockingChannel, + destination_exchange: str, + source_exchange: str, + routing_key: str, + arguments: Optional[Any] = None + ) -> None: + if arguments is None: + arguments = {} + if channel and channel.is_open: + channel.exchange_unbind( + destination=destination_exchange, + source=source_exchange, + routing_key=routing_key, + arguments=arguments + )
    + +
    [docs] @staticmethod + def queue_bind( + channel: BlockingChannel, + queue_name: str, + exchange_name: str, + routing_key: str, + arguments: Optional[Any] = None + ) -> None: + if arguments is None: + arguments = {} + if channel and channel.is_open: + channel.queue_bind(queue=queue_name, exchange=exchange_name, routing_key=routing_key, arguments=arguments)
    + +
    [docs] @staticmethod + def queue_declare( + channel: BlockingChannel, + queue_name: str, + passive: bool = False, + durable: bool = False, + exclusive: bool = False, + auto_delete: bool = False, + arguments: Optional[Any] = None + ) -> None: + if arguments is None: + arguments = {} + if channel and channel.is_open: + queue = channel.queue_declare( + queue=queue_name, + # Only check to see if the queue exists and + # raise ChannelClosed exception if it does not + passive=passive, + # Survive reboots of the server + durable=durable, + # Only allow access by the current connection + exclusive=exclusive, + # Delete after consumer cancels or disconnects + auto_delete=auto_delete, + # Custom key/value pair arguments for the queue + arguments=arguments + ) + return queue
    + +
    [docs] @staticmethod + def queue_delete( + channel: BlockingChannel, + queue_name: str, + if_unused: bool = False, + if_empty: bool = False + ) -> None: + if channel and channel.is_open: + channel.queue_delete( + queue=queue_name, + # Only delete if the queue is unused + if_unused=if_unused, + # Only delete if the queue is empty + if_empty=if_empty + )
    + +
    [docs] @staticmethod + def queue_purge(channel: BlockingChannel, queue_name: str) -> None: + if channel and channel.is_open: + channel.queue_purge(queue=queue_name)
    + +
    [docs] @staticmethod + def queue_unbind( + channel: BlockingChannel, + queue_name: str, + exchange_name: str, + routing_key: str, + arguments: Optional[Any] = None + ) -> None: + if arguments is None: + arguments = {} + if channel and channel.is_open: + channel.queue_unbind( + queue=queue_name, + exchange=exchange_name, + routing_key=routing_key, + arguments=arguments + )
    + +
    [docs] @staticmethod + def set_qos( + channel: BlockingChannel, + prefetch_size: int = 0, + prefetch_count: int = PREFETCH_COUNT, + global_qos: bool = False + ) -> None: + if channel and channel.is_open: + channel.basic_qos( + # No specific limit if set to 0 + prefetch_size=prefetch_size, + prefetch_count=prefetch_count, + # Should the qos apply to all channels of the connection + global_qos=global_qos + )
    + +
    [docs] @staticmethod + def confirm_delivery(channel: BlockingChannel) -> None: + if channel and channel.is_open: + channel.confirm_delivery()
    + +
    [docs] @staticmethod + def basic_publish( + channel: BlockingChannel, + exchange_name: str, + routing_key: str, + message_body: bytes, + properties: BasicProperties + ) -> None: + if channel and channel.is_open: + channel.basic_publish( + exchange=exchange_name, + routing_key=routing_key, + body=message_body, + properties=properties + )
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/rabbitmq_utils/consumer.html b/site/core/_modules/ocrd_network/rabbitmq_utils/consumer.html new file mode 100644 index 000000000..0f0429f19 --- /dev/null +++ b/site/core/_modules/ocrd_network/rabbitmq_utils/consumer.html @@ -0,0 +1,203 @@ + + + + + + + ocrd_network.rabbitmq_utils.consumer — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.rabbitmq_utils.consumer

    +"""
    +The source code in this file is adapted by reusing
    +some part of the source code from the official
    +RabbitMQ documentation.
    +"""
    +from typing import Any, Union
    +from pika import PlainCredentials
    +from ocrd_utils import getLogger
    +from .constants import (
    +    DEFAULT_QUEUE,
    +    RABBIT_MQ_HOST as HOST,
    +    RABBIT_MQ_PORT as PORT,
    +    RABBIT_MQ_VHOST as VHOST
    +)
    +from .connector import RMQConnector
    +
    +
    +
    [docs]class RMQConsumer(RMQConnector): + def __init__(self, host: str = HOST, port: int = PORT, vhost: str = VHOST) -> None: + self.log = getLogger('ocrd_network.rabbitmq_utils.consumer') + super().__init__(host=host, port=port, vhost=vhost) + self.consumer_tag = None + self.consuming = False + self.was_consuming = False + self.closing = False + self.reconnect_delay = 0 + +
    [docs] def authenticate_and_connect(self, username: str, password: str) -> None: + credentials = PlainCredentials( + username=username, + password=password, + erase_on_connect=False # Delete credentials once connected + ) + self._connection = RMQConnector.open_blocking_connection( + host=self._host, + port=self._port, + vhost=self._vhost, + credentials=credentials, + ) + self._channel = RMQConnector.open_blocking_channel(self._connection) + RMQConnector.set_qos(self._channel) + self.log.info("Set QoS for the consumer")
    + +
    [docs] def setup_defaults(self) -> None: + RMQConnector.declare_and_bind_defaults(self._connection, self._channel)
    + +
    [docs] def get_one_message( + self, + queue_name: str, + auto_ack: bool = False + ) -> Union[Any, None]: + message = None + if self._channel and self._channel.is_open: + message = self._channel.basic_get( + queue=queue_name, + auto_ack=auto_ack + ) + return message
    + +
    [docs] def configure_consuming( + self, + queue_name: str, + callback_method: Any + ) -> None: + self.log.debug(f'Configuring consuming from queue: {queue_name}') + self._channel.add_on_cancel_callback(self.__on_consumer_cancelled) + self.consumer_tag = self._channel.basic_consume( + queue_name, + callback_method + ) + self.was_consuming = True + self.consuming = True
    + +
    [docs] def start_consuming(self) -> None: + if self._channel and self._channel.is_open: + self._channel.start_consuming()
    + +
    [docs] def get_waiting_message_count(self) -> Union[int, None]: + if self._channel and self._channel.is_open: + return self._channel.get_waiting_message_count() + return None
    + + def __on_consumer_cancelled(self, frame: Any) -> None: + self.log.warning(f'The consumer was cancelled remotely in frame: {frame}') + if self._channel: + self._channel.close() + +
    [docs] def ack_message(self, delivery_tag: int) -> None: + self.log.debug(f'Acknowledging message with delivery tag: {delivery_tag}') + self._channel.basic_ack(delivery_tag)
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/rabbitmq_utils/ocrd_messages.html b/site/core/_modules/ocrd_network/rabbitmq_utils/ocrd_messages.html new file mode 100644 index 000000000..c13aa35cc --- /dev/null +++ b/site/core/_modules/ocrd_network/rabbitmq_utils/ocrd_messages.html @@ -0,0 +1,220 @@ + + + + + + + ocrd_network.rabbitmq_utils.ocrd_messages — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.rabbitmq_utils.ocrd_messages

    +from __future__ import annotations
    +from typing import Any, Dict, List, Optional
    +import yaml
    +
    +from ocrd_validators import OcrdNetworkMessageValidator
    +
    +
    +
    [docs]class OcrdProcessingMessage: + def __init__( + self, + job_id: str, + processor_name: str, + created_time: int, + input_file_grps: List[str], + output_file_grps: Optional[List[str]], + path_to_mets: Optional[str], + workspace_id: Optional[str], + page_id: Optional[str], + result_queue_name: Optional[str], + callback_url: Optional[str], + internal_callback_url: Optional[str], + parameters: Dict[str, Any] = None + ) -> None: + if not job_id: + raise ValueError('job_id must be provided') + if not processor_name: + raise ValueError('processor_name must be provided') + if not created_time: + raise ValueError('created time must be provided') + if not input_file_grps or len(input_file_grps) == 0: + raise ValueError('input_file_grps must be provided and contain at least 1 element') + if not (workspace_id or path_to_mets): + raise ValueError('Either "workspace_id" or "path_to_mets" must be provided') + + self.job_id = job_id + self.processor_name = processor_name + self.created_time = created_time + self.input_file_grps = input_file_grps + if output_file_grps: + self.output_file_grps = output_file_grps + if path_to_mets: + self.path_to_mets = path_to_mets + if workspace_id: + self.workspace_id = workspace_id + if page_id: + self.page_id = page_id + if result_queue_name: + self.result_queue_name = result_queue_name + if callback_url: + self.callback_url = callback_url + if internal_callback_url: + self.internal_callback_url = internal_callback_url + self.parameters = parameters if parameters else {} + +
    [docs] @staticmethod + def encode_yml(ocrd_processing_message: OcrdProcessingMessage) -> bytes: + return yaml.dump(ocrd_processing_message.__dict__, indent=2).encode('utf-8')
    + +
    [docs] @staticmethod + def decode_yml(ocrd_processing_message: bytes) -> OcrdProcessingMessage: + msg = ocrd_processing_message.decode('utf-8') + data = yaml.safe_load(msg) + report = OcrdNetworkMessageValidator.validate_message_processing(data) + if not report.is_valid: + raise ValueError(f'Validating the processing message has failed:\n{report.errors}') + return OcrdProcessingMessage( + job_id=data.get('job_id', None), + processor_name=data.get('processor_name', None), + created_time=data.get('created_time', None), + path_to_mets=data.get('path_to_mets', None), + workspace_id=data.get('workspace_id', None), + input_file_grps=data.get('input_file_grps', None), + output_file_grps=data.get('output_file_grps', None), + page_id=data.get('page_id', None), + parameters=data.get('parameters', None), + result_queue_name=data.get('result_queue_name', None), + callback_url=data.get('callback_url', None), + internal_callback_url=data.get('internal_callback_url', None) + )
    + + +
    [docs]class OcrdResultMessage: + def __init__(self, job_id: str, state: str, + path_to_mets: Optional[str] = None, + workspace_id: Optional[str] = None) -> None: + self.job_id = job_id + self.state = state + self.workspace_id = workspace_id + self.path_to_mets = path_to_mets + +
    [docs] @staticmethod + def encode_yml(ocrd_result_message: OcrdResultMessage) -> bytes: + return yaml.dump(ocrd_result_message.__dict__, indent=2).encode('utf-8')
    + +
    [docs] @staticmethod + def decode_yml(ocrd_result_message: bytes) -> OcrdResultMessage: + msg = ocrd_result_message.decode('utf-8') + data = yaml.safe_load(msg) + report = OcrdNetworkMessageValidator.validate_message_result(data) + if not report.is_valid: + raise ValueError(f'Validating the result message has failed:\n{report.errors}') + return OcrdResultMessage( + job_id=data.get('job_id', None), + state=data.get('state', None), + path_to_mets=data.get('path_to_mets', None), + workspace_id=data.get('workspace_id', None), + )
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/rabbitmq_utils/publisher.html b/site/core/_modules/ocrd_network/rabbitmq_utils/publisher.html new file mode 100644 index 000000000..3b3736b3c --- /dev/null +++ b/site/core/_modules/ocrd_network/rabbitmq_utils/publisher.html @@ -0,0 +1,224 @@ + + + + + + + ocrd_network.rabbitmq_utils.publisher — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.rabbitmq_utils.publisher

    +"""
    +The source code in this file is adapted by reusing
    +some part of the source code from the official
    +RabbitMQ documentation.
    +"""
    +from typing import Optional
    +from pika import BasicProperties, PlainCredentials
    +from ocrd_utils import getLogger
    +from .constants import (
    +    DEFAULT_EXCHANGER_NAME,
    +    DEFAULT_ROUTER,
    +    RABBIT_MQ_HOST as HOST,
    +    RABBIT_MQ_PORT as PORT,
    +    RABBIT_MQ_VHOST as VHOST
    +)
    +from .connector import RMQConnector
    +
    +
    +
    [docs]class RMQPublisher(RMQConnector): + def __init__(self, host: str = HOST, port: int = PORT, vhost: str = VHOST) -> None: + self.log = getLogger('ocrd_network.rabbitmq_utils.publisher') + super().__init__(host=host, port=port, vhost=vhost) + self.message_counter = 0 + self.deliveries = {} + self.acked_counter = 0 + self.nacked_counter = 0 + self.running = True + +
    [docs] def authenticate_and_connect(self, username: str, password: str) -> None: + credentials = PlainCredentials( + username=username, + password=password, + erase_on_connect=False # Delete credentials once connected + ) + self._connection = RMQConnector.open_blocking_connection( + host=self._host, + port=self._port, + vhost=self._vhost, + credentials=credentials, + ) + self._channel = RMQConnector.open_blocking_channel(self._connection)
    + +
    [docs] def setup_defaults(self) -> None: + RMQConnector.declare_and_bind_defaults(self._connection, self._channel)
    + +
    [docs] def create_queue( + self, + queue_name: str, + exchange_name: Optional[str] = None, + exchange_type: Optional[str] = None, + passive: bool = False + ) -> None: + if exchange_name is None: + exchange_name = DEFAULT_EXCHANGER_NAME + if exchange_type is None: + exchange_type = 'direct' + + RMQConnector.exchange_declare( + channel=self._channel, + exchange_name=exchange_name, + exchange_type=exchange_type + ) + RMQConnector.queue_declare( + channel=self._channel, + queue_name=queue_name, + passive=passive + ) + RMQConnector.queue_bind( + channel=self._channel, + queue_name=queue_name, + exchange_name=exchange_name, + # the routing key matches the queue name + routing_key=queue_name + )
    + +
    [docs] def publish_to_queue( + self, + queue_name: str, + message: bytes, + exchange_name: Optional[str] = None, + properties: Optional[BasicProperties] = None + ) -> None: + if exchange_name is None: + exchange_name = DEFAULT_EXCHANGER_NAME + if properties is None: + headers = {'ocrd_network default header': 'ocrd_network default header value'} + properties = BasicProperties( + app_id='ocrd_network default app id', + content_type='application/json', + headers=headers + ) + + # Note: There is no way to publish to a queue directly. + # Publishing happens through an exchange agent with + # a routing key - specified when binding the queue to the exchange + RMQConnector.basic_publish( + self._channel, + exchange_name=exchange_name, + # The routing key and the queue name must match! + routing_key=queue_name, + message_body=message, + properties=properties + ) + + self.message_counter += 1 + self.deliveries[self.message_counter] = True + self.log.debug(f'Published message #{self.message_counter}')
    + +
    [docs] def enable_delivery_confirmations(self) -> None: + self.log.debug('Enabling delivery confirmations (Confirm.Select RPC)') + RMQConnector.confirm_delivery(channel=self._channel)
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/runtime_data.html b/site/core/_modules/ocrd_network/runtime_data.html new file mode 100644 index 000000000..c7b3a48c2 --- /dev/null +++ b/site/core/_modules/ocrd_network/runtime_data.html @@ -0,0 +1,255 @@ + + + + + + + ocrd_network.runtime_data — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.runtime_data

    +from __future__ import annotations
    +from typing import Dict, List
    +
    +from .deployment_utils import (
    +    create_docker_client,
    +    create_ssh_client,
    +    DeployType
    +)
    +
    +__all__ = [
    +    'DataHost',
    +    'DataMongoDB',
    +    'DataProcessingWorker',
    +    'DataProcessorServer',
    +    'DataRabbitMQ'
    +]
    +
    +
    +
    [docs]class DataHost: + def __init__(self, config: Dict) -> None: + self.address = config['address'] + self.username = config['username'] + self.password = config.get('password', None) + self.keypath = config.get('path_to_privkey', None) + + # These flags are used to track whether a connection + # of the specified type will be required + self.needs_ssh: bool = False + self.needs_docker: bool = False + + self.ssh_client = None + self.docker_client = None + + # TODO: Not sure this is DS is ideal, seems off + self.data_workers: List[DataProcessingWorker] = [] + self.data_servers: List[DataProcessorServer] = [] + + for worker in config.get('workers', []): + name = worker['name'] + count = worker['number_of_instance'] + deploy_type = DeployType.DOCKER if worker.get('deploy_type', None) == 'docker' else DeployType.NATIVE + if not self.needs_ssh and deploy_type == DeployType.NATIVE: + self.needs_ssh = True + if not self.needs_docker and deploy_type == DeployType.DOCKER: + self.needs_docker = True + for _ in range(count): + self.data_workers.append(DataProcessingWorker(self.address, deploy_type, name)) + + for server in config.get('servers', []): + name = server['name'] + port = server['port'] + deploy_type = DeployType.DOCKER if server.get('deploy_type', None) == 'docker' else DeployType.NATIVE + if not self.needs_ssh and deploy_type == DeployType.NATIVE: + self.needs_ssh = True + if not self.needs_docker and deploy_type == DeployType.DOCKER: + self.needs_docker = True + self.data_servers.append(DataProcessorServer(self.address, port, deploy_type, name)) + + # Key: processor_name, Value: list of ports + self.server_ports: dict = {} + +
    [docs] def create_client(self, client_type: str): + if client_type not in ['docker', 'ssh']: + raise ValueError(f'Host client type cannot be of type: {client_type}') + if client_type == 'ssh': + if not self.ssh_client: + self.ssh_client = create_ssh_client( + self.address, self.username, self.password, self.keypath) + return self.ssh_client + if client_type == 'docker': + if not self.docker_client: + self.docker_client = create_docker_client( + self.address, self.username, self.password, self.keypath + ) + return self.docker_client
    + + +
    [docs]class DataProcessingWorker: + def __init__(self, host: str, deploy_type: DeployType, processor_name: str) -> None: + self.host = host + self.deploy_type = deploy_type + self.processor_name = processor_name + # Assigned when deployed + self.pid = None
    + + +
    [docs]class DataProcessorServer: + def __init__(self, host: str, port: int, deploy_type: DeployType, processor_name: str) -> None: + self.host = host + self.port = port + self.deploy_type = deploy_type + self.processor_name = processor_name + # Assigned when deployed + self.pid = None
    + + +
    [docs]class DataMongoDB: + def __init__(self, config: Dict) -> None: + self.address = config['address'] + self.port = int(config['port']) + if 'ssh' in config: + self.ssh_username = config['ssh']['username'] + self.ssh_keypath = config['ssh'].get('path_to_privkey', None) + self.ssh_password = config['ssh'].get('password', None) + else: + self.ssh_username = None + self.ssh_keypath = None + self.ssh_password = None + + if 'credentials' in config: + self.username = config['credentials']['username'] + self.password = config['credentials']['password'] + self.url = f'mongodb://{self.username}:{self.password}@{self.address}:{self.port}' + else: + self.username = None + self.password = None + self.url = f'mongodb://{self.address}:{self.port}' + self.skip_deployment = config.get('skip_deployment', False) + # Assigned when deployed + self.pid = None
    + + +
    [docs]class DataRabbitMQ: + def __init__(self, config: Dict) -> None: + self.address = config['address'] + self.port = int(config['port']) + if 'ssh' in config: + self.ssh_username = config['ssh']['username'] + self.ssh_keypath = config['ssh'].get('path_to_privkey', None) + self.ssh_password = config['ssh'].get('password', None) + else: + self.ssh_username = None + self.ssh_keypath = None + self.ssh_password = None + + self.vhost = '/' + self.username = config['credentials']['username'] + self.password = config['credentials']['password'] + self.url = f'amqp://{self.username}:{self.password}@{self.address}:{self.port}{self.vhost}' + self.skip_deployment = config.get('skip_deployment', False) + # Assigned when deployed + self.pid = None
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/server_cache.html b/site/core/_modules/ocrd_network/server_cache.html new file mode 100644 index 000000000..28c3f3aea --- /dev/null +++ b/site/core/_modules/ocrd_network/server_cache.html @@ -0,0 +1,355 @@ + + + + + + + ocrd_network.server_cache — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.server_cache

    +from __future__ import annotations
    +from typing import Dict, List
    +from logging import FileHandler, Formatter
    +
    +from ocrd_utils import getLogger, LOG_FORMAT
    +from .database import db_get_processing_job, db_update_processing_job
    +from .logging import (
    +    get_cache_locked_pages_logging_file_path,
    +    get_cache_processing_requests_logging_file_path
    +)
    +from .models import PYJobInput, StateEnum
    +
    +__all__ = [
    +    'CacheLockedPages',
    +    'CacheProcessingRequests'
    +]
    +
    +
    +
    [docs]class CacheLockedPages: + def __init__(self) -> None: + self.log = getLogger("ocrd_network.server_cache.locked_pages") + log_file = get_cache_locked_pages_logging_file_path() + log_fh = FileHandler(filename=log_file, mode='a') + log_fh.setFormatter(Formatter(LOG_FORMAT)) + self.log.addHandler(log_fh) + + # Used for keeping track of locked pages for a workspace + # Key: `path_to_mets` if already resolved else `workspace_id` + # Value: A dictionary where each dictionary key is the output file group, + # and the values are list of strings representing the locked pages + self.locked_pages: Dict[str, Dict[str, List[str]]] = {} + # Used as a placeholder to lock all pages when no page_id is specified + self.placeholder_all_pages: str = "all_pages" + +
    [docs] def check_if_locked_pages_for_output_file_grps( + self, + workspace_key: str, + output_file_grps: List[str], + page_ids: List[str] + ) -> bool: + if not self.locked_pages.get(workspace_key, None): + self.log.debug(f"No entry found in the locked pages cache for workspace key: {workspace_key}") + return False + for output_fileGrp in output_file_grps: + if output_fileGrp in self.locked_pages[workspace_key]: + if self.placeholder_all_pages in self.locked_pages[workspace_key][output_fileGrp]: + self.log.debug(f"Caching the received request due to locked output file grp pages") + return True + if not set(self.locked_pages[workspace_key][output_fileGrp]).isdisjoint(page_ids): + self.log.debug(f"Caching the received request due to locked output file grp pages") + return True + return False
    + +
    [docs] def get_locked_pages( + self, + workspace_key: str + ) -> Dict[str, List[str]]: + if not self.locked_pages.get(workspace_key, None): + self.log.debug(f"No locked pages available for workspace key: {workspace_key}") + return {} + return self.locked_pages[workspace_key]
    + +
    [docs] def lock_pages( + self, + workspace_key: str, + output_file_grps: List[str], + page_ids: List[str] + ) -> None: + if not self.locked_pages.get(workspace_key, None): + self.log.debug(f"No entry found in the locked pages cache for workspace key: {workspace_key}") + self.log.debug(f"Creating an entry in the locked pages cache for workspace key: {workspace_key}") + self.locked_pages[workspace_key] = {} + + for output_fileGrp in output_file_grps: + if output_fileGrp not in self.locked_pages[workspace_key]: + self.log.debug(f"Creating an empty list for output file grp: {output_fileGrp}") + self.locked_pages[workspace_key][output_fileGrp] = [] + # The page id list is not empty - only some pages are in the request + if page_ids: + self.log.debug(f"Locking pages for `{output_fileGrp}`: {page_ids}") + self.locked_pages[workspace_key][output_fileGrp].extend(page_ids) + self.log.debug(f"Locked pages of `{output_fileGrp}`: " + f"{self.locked_pages[workspace_key][output_fileGrp]}") + else: + # Lock all pages with a single value + self.log.debug(f"Locking pages for `{output_fileGrp}`: {self.placeholder_all_pages}") + self.locked_pages[workspace_key][output_fileGrp].append(self.placeholder_all_pages)
    + +
    [docs] def unlock_pages( + self, + workspace_key: str, + output_file_grps: List[str], + page_ids: List[str] + ) -> None: + if not self.locked_pages.get(workspace_key, None): + self.log.debug(f"No entry found in the locked pages cache for workspace key: {workspace_key}") + return + for output_fileGrp in output_file_grps: + if output_fileGrp in self.locked_pages[workspace_key]: + if page_ids: + # Unlock the previously locked pages + self.log.debug(f"Unlocking pages of `{output_fileGrp}`: {page_ids}") + self.locked_pages[workspace_key][output_fileGrp] = \ + [x for x in self.locked_pages[workspace_key][output_fileGrp] if x not in page_ids] + self.log.debug(f"Remaining locked pages of `{output_fileGrp}`: " + f"{self.locked_pages[workspace_key][output_fileGrp]}") + else: + # Remove the single variable used to indicate all pages are locked + self.log.debug(f"Unlocking all pages for: {output_fileGrp}") + self.locked_pages[workspace_key][output_fileGrp].remove(self.placeholder_all_pages)
    + + +
    [docs]class CacheProcessingRequests: + def __init__(self) -> None: + self.log = getLogger("ocrd_network.server_cache.processing_requests") + log_file = get_cache_processing_requests_logging_file_path() + log_fh = FileHandler(filename=log_file, mode='a') + log_fh.setFormatter(Formatter(LOG_FORMAT)) + self.log.addHandler(log_fh) + + # Used for buffering/caching processing requests in the Processing Server + # Key: `path_to_mets` if already resolved else `workspace_id` + # Value: Queue that holds PYInputJob elements + self.processing_requests: Dict[str, List[PYJobInput]] = {} + + # Used for tracking of active processing jobs for a workspace to decide + # when the shutdown a METS Server instance for that workspace + # Key: `path_to_mets` if already resolved else `workspace_id` + # Value: integer which holds the amount of jobs pushed to the RabbitMQ + # but no internal callback was yet invoked + self.__processing_counter: Dict[str, int] = {} + + @staticmethod + async def __check_if_job_deps_met(dependencies: List[str]) -> bool: + # Check the states of all dependent jobs + for dependency_job_id in dependencies: + try: + dependency_job_state = (await db_get_processing_job(dependency_job_id)).state + except ValueError: + # job_id not (yet) in db. Dependency not met + return False + # Found a dependent job whose state is not success + if dependency_job_state != StateEnum.success: + return False + return True + +
    [docs] async def consume_cached_requests(self, workspace_key: str) -> List[PYJobInput]: + if not self.has_workspace_cached_requests(workspace_key=workspace_key): + self.log.debug(f"No jobs to be consumed for workspace key: {workspace_key}") + return [] + found_consume_requests = [] + for i, current_element in enumerate(self.processing_requests[workspace_key]): + # Request has other job dependencies + if current_element.depends_on: + satisfied_dependencies = await self.__check_if_job_deps_met(current_element.depends_on) + if not satisfied_dependencies: + continue + found_consume_requests.append(current_element) + found_requests = [] + for found_element in found_consume_requests: + try: + (self.processing_requests[workspace_key]).remove(found_element) + # self.log.debug(f"Found cached request to be processed: {found_request}") + self.log.debug(f"Found cached request: {found_element.processor_name}, {found_element.page_id}, " + f"{found_element.job_id}, depends_on: {found_element.depends_on}") + found_requests.append(found_element) + except ValueError: + # The ValueError is not an issue since the + # element was removed by another instance + continue + return found_requests
    + +
    [docs] def update_request_counter(self, workspace_key: str, by_value: int) -> int: + """ + A method used to increase/decrease the internal counter of some workspace_key by `by_value`. + Returns the value of the updated counter. + """ + # If a record counter of this workspace key does not exist + # in the requests counter cache yet, create one and assign 0 + if not self.__processing_counter.get(workspace_key, None): + self.log.debug(f"Creating an internal request counter for workspace key: {workspace_key}") + self.__processing_counter[workspace_key] = 0 + self.__processing_counter[workspace_key] = self.__processing_counter[workspace_key] + by_value + return self.__processing_counter[workspace_key]
    + +
    [docs] def cache_request(self, workspace_key: str, data: PYJobInput): + # If a record queue of this workspace key does not exist in the requests cache + if not self.processing_requests.get(workspace_key, None): + self.log.debug(f"Creating an internal request queue for workspace_key: {workspace_key}") + self.processing_requests[workspace_key] = [] + self.log.debug(f"Caching request: {data.processor_name}, {data.page_id}, " + f"{data.job_id}, depends_on: {data.depends_on}") + # Add the processing request to the end of the internal queue + self.processing_requests[workspace_key].append(data)
    + +
    [docs] async def cancel_dependent_jobs(self, workspace_key: str, processing_job_id: str) -> List[PYJobInput]: + if not self.has_workspace_cached_requests(workspace_key=workspace_key): + self.log.debug(f"No jobs to be cancelled for workspace key: {workspace_key}") + return [] + self.log.debug(f"Cancelling jobs dependent on job id: {processing_job_id}") + found_cancel_requests = [] + for i, current_element in enumerate(self.processing_requests[workspace_key]): + if processing_job_id in current_element.depends_on: + found_cancel_requests.append(current_element) + cancelled_jobs = [] + for cancel_element in found_cancel_requests: + try: + self.processing_requests[workspace_key].remove(cancel_element) + self.log.debug(f"For job id: `{processing_job_id}`, " + f"cancelling: {cancel_element.job_id}") + cancelled_jobs.append(cancel_element) + await db_update_processing_job(job_id=cancel_element.job_id, state=StateEnum.cancelled) + # Recursively cancel dependent jobs for the cancelled job + recursively_cancelled = await self.cancel_dependent_jobs( + workspace_key=workspace_key, + processing_job_id=cancel_element.job_id + ) + # Add the recursively cancelled jobs to the main list of cancelled jobs + cancelled_jobs.extend(recursively_cancelled) + except ValueError: + # The ValueError is not an issue since the + # element was removed by another instance + continue + return cancelled_jobs
    + +
    [docs] async def is_caching_required(self, job_dependencies: List[str]) -> bool: + if not len(job_dependencies): + # no dependencies found + return False + if await self.__check_if_job_deps_met(job_dependencies): + # all dependencies are met + return False + return True
    + +
    [docs] def has_workspace_cached_requests(self, workspace_key: str) -> bool: + if not self.processing_requests.get(workspace_key, None): + self.log.debug(f"In processing requests cache, no workspace key found: {workspace_key}") + return False + if not len(self.processing_requests[workspace_key]): + self.log.debug(f"The processing requests cache is empty for workspace key: {workspace_key}") + return False + return True
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/server_utils.html b/site/core/_modules/ocrd_network/server_utils.html new file mode 100644 index 000000000..4d2c85c71 --- /dev/null +++ b/site/core/_modules/ocrd_network/server_utils.html @@ -0,0 +1,208 @@ + + + + + + + ocrd_network.server_utils — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.server_utils

    +import re
    +from fastapi import HTTPException, status
    +from fastapi.responses import FileResponse
    +from pathlib import Path
    +from typing import List
    +from ocrd_validators import ParameterValidator
    +from ocrd_utils import (
    +    generate_range,
    +    REGEX_PREFIX
    +)
    +from .database import (
    +    db_get_processing_job,
    +    db_get_workspace,
    +)
    +from .models import PYJobInput, PYJobOutput
    +
    +
    +async def _get_processor_job(logger, processor_name: str, job_id: str) -> PYJobOutput:
    +    """ Return processing job-information from the database
    +    """
    +    try:
    +        job = await db_get_processing_job(job_id)
    +        return job.to_job_output()
    +    except ValueError as e:
    +        logger.exception(f"Processing job with id '{job_id}' of processor type "
    +                         f"'{processor_name}' not existing, error: {e}")
    +        raise HTTPException(
    +            status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
    +            detail=f"Processing job with id '{job_id}' of processor type '{processor_name}' not existing"
    +        )
    +
    +
    +async def _get_processor_job_log(logger, processor_name: str, job_id: str) -> FileResponse:
    +    db_job = await _get_processor_job(logger, processor_name, job_id)
    +    log_file_path = Path(db_job.log_file_path)
    +    return FileResponse(path=log_file_path, filename=log_file_path.name)
    +
    +
    +
    [docs]async def validate_and_return_mets_path(logger, job_input: PYJobInput) -> str: + # This check is done to return early in case the workspace_id is provided + # but the abs mets path cannot be queried from the DB + if not job_input.path_to_mets and job_input.workspace_id: + try: + db_workspace = await db_get_workspace(job_input.workspace_id) + path_to_mets = db_workspace.workspace_mets_path + except ValueError as e: + logger.exception(f"Workspace with id '{job_input.workspace_id}' not existing: {e}") + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Workspace with id '{job_input.workspace_id}' not existing" + ) + return path_to_mets + return job_input.path_to_mets
    + + +
    [docs]def expand_page_ids(page_id: str) -> List: + page_ids = [] + if not page_id: + return page_ids + for page_id_token in re.split(r',', page_id): + if page_id_token.startswith(REGEX_PREFIX): + page_ids.append(re.compile(page_id_token[len(REGEX_PREFIX):])) + elif '..' in page_id_token: + page_ids += generate_range(*page_id_token.split('..', 1)) + else: + page_ids += [page_id_token] + return page_ids
    + + +
    [docs]def validate_job_input(logger, processor_name: str, ocrd_tool: dict, job_input: PYJobInput) -> None: + if bool(job_input.path_to_mets) == bool(job_input.workspace_id): + logger.exception("Either 'path_to_mets' or 'workspace_id' must be provided, but not both") + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="Either 'path_to_mets' or 'workspace_id' must be provided, but not both" + ) + if not ocrd_tool: + logger.exception(f"Processor '{processor_name}' not available. Empty or missing ocrd_tool") + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Processor '{processor_name}' not available. Empty or missing ocrd_tool" + ) + try: + report = ParameterValidator(ocrd_tool).validate(dict(job_input.parameters)) + except Exception as e: + logger.exception(f'Failed to validate processing job against the ocrd_tool: {e}') + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail='Failed to validate processing job against the ocrd_tool' + ) + else: + if not report.is_valid: + logger.exception(f'Failed to validate processing job ' + f'against the ocrd_tool, errors: {report.errors}') + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=report.errors)
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_network/utils.html b/site/core/_modules/ocrd_network/utils.html new file mode 100644 index 000000000..07d52840e --- /dev/null +++ b/site/core/_modules/ocrd_network/utils.html @@ -0,0 +1,262 @@ + + + + + + + ocrd_network.utils — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_network.utils

    +from datetime import datetime
    +from functools import wraps
    +from pika import URLParameters
    +from pymongo import uri_parser as mongo_uri_parser
    +from re import match as re_match
    +from requests import Session as Session_TCP
    +from requests_unixsocket import Session as Session_UDS
    +from typing import Dict, List
    +from uuid import uuid4
    +from yaml import safe_load
    +
    +from ocrd import Resolver, Workspace
    +from ocrd_validators import ProcessingServerConfigValidator
    +from .rabbitmq_utils import OcrdResultMessage
    +
    +
    +# Based on: https://gist.github.com/phizaz/20c36c6734878c6ec053245a477572ec
    +
    [docs]def call_sync(func): + import asyncio + + @wraps(func) + def func_wrapper(*args, **kwargs): + result = func(*args, **kwargs) + if asyncio.iscoroutine(result): + return asyncio.get_event_loop().run_until_complete(result) + return result + return func_wrapper
    + + +
    [docs]def calculate_execution_time(start: datetime, end: datetime) -> int: + """ + Calculates the difference between `start` and `end` datetime. + Returns the result in milliseconds + """ + return int((end - start).total_seconds() * 1000)
    + + +
    [docs]def generate_created_time() -> int: + return int(datetime.utcnow().timestamp())
    + + +
    [docs]def generate_id() -> str: + """ + Generate the id to be used for processing job ids. + Note, workspace_id and workflow_id in the reference + WebAPI implementation are produced in the same manner + """ + return str(uuid4())
    + + +
    [docs]def validate_and_load_config(config_path: str) -> Dict: + # Load and validate the config + with open(config_path) as fin: + config = safe_load(fin) + report = ProcessingServerConfigValidator.validate(config) + if not report.is_valid: + raise Exception(f'Processing-Server configuration file is invalid:\n{report.errors}') + return config
    + + +
    [docs]def verify_database_uri(mongodb_address: str) -> str: + try: + # perform validation check + mongo_uri_parser.parse_uri(uri=mongodb_address, validate=True) + except Exception as error: + raise ValueError(f"The database address '{mongodb_address}' is in wrong format, {error}") + return mongodb_address
    + + +
    [docs]def verify_and_parse_mq_uri(rabbitmq_address: str): + """ + Check the full list of available parameters in the docs here: + https://pika.readthedocs.io/en/stable/_modules/pika/connection.html#URLParameters + """ + + uri_pattern = r"^(?:([^:\/?#\s]+):\/{2})?(?:([^@\/?#\s]+)@)?([^\/?#\s]+)?(?:\/([^?#\s]*))?(?:[?]([^#\s]+))?\S*$" + match = re_match(pattern=uri_pattern, string=rabbitmq_address) + if not match: + raise ValueError(f"The message queue server address is in wrong format: '{rabbitmq_address}'") + url_params = URLParameters(rabbitmq_address) + + parsed_data = { + 'username': url_params.credentials.username, + 'password': url_params.credentials.password, + 'host': url_params.host, + 'port': url_params.port, + 'vhost': url_params.virtual_host + } + return parsed_data
    + + +
    [docs]def download_ocrd_all_tool_json(ocrd_all_url: str): + if not ocrd_all_url: + raise ValueError(f'The URL of ocrd all tool json is empty') + headers = {'Accept': 'application/json'} + response = Session_TCP().get(ocrd_all_url, headers=headers) + if not response.status_code == 200: + raise ValueError(f"Failed to download ocrd all tool json from: '{ocrd_all_url}'") + return response.json()
    + + +
    [docs]def post_to_callback_url(logger, callback_url: str, result_message: OcrdResultMessage): + logger.info(f'Posting result message to callback_url "{callback_url}"') + headers = {"Content-Type": "application/json"} + json_data = { + "job_id": result_message.job_id, + "state": result_message.state, + "path_to_mets": result_message.path_to_mets, + "workspace_id": result_message.workspace_id + } + response = Session_TCP().post(url=callback_url, headers=headers, json=json_data) + logger.info(f'Response from callback_url "{response}"')
    + + +
    [docs]def get_ocrd_workspace_instance(mets_path: str, mets_server_url: str = None) -> Workspace: + if mets_server_url: + if not is_mets_server_running(mets_server_url=mets_server_url): + raise RuntimeError(f'The mets server is not running: {mets_server_url}') + return Resolver().workspace_from_url(mets_url=mets_path, mets_server_url=mets_server_url)
    + + +
    [docs]def get_ocrd_workspace_physical_pages(mets_path: str, mets_server_url: str = None) -> List[str]: + return get_ocrd_workspace_instance(mets_path=mets_path, mets_server_url=mets_server_url).mets.physical_pages
    + + +
    [docs]def is_mets_server_running(mets_server_url: str) -> bool: + protocol = 'tcp' if (mets_server_url.startswith('http://') or mets_server_url.startswith('https://')) else 'uds' + session = Session_TCP() if protocol == 'tcp' else Session_UDS() + mets_server_url = mets_server_url if protocol == 'tcp' else f'http+unix://{mets_server_url.replace("/", "%2F")}' + try: + response = session.get(url=f'{mets_server_url}/workspace_path') + except Exception: + return False + if response.status_code == 200: + return True + return False
    + + +
    [docs]def stop_mets_server(mets_server_url: str) -> bool: + protocol = 'tcp' if (mets_server_url.startswith('http://') or mets_server_url.startswith('https://')) else 'uds' + session = Session_TCP() if protocol == 'tcp' else Session_UDS() + mets_server_url = mets_server_url if protocol == 'tcp' else f'http+unix://{mets_server_url.replace("/", "%2F")}' + try: + response = session.delete(url=f'{mets_server_url}/') + except Exception: + return False + if response.status_code == 200: + return True + return False
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_utils/config.html b/site/core/_modules/ocrd_utils/config.html new file mode 100644 index 000000000..83cac5b05 --- /dev/null +++ b/site/core/_modules/ocrd_utils/config.html @@ -0,0 +1,305 @@ + + + + + + + ocrd_utils.config — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_utils.config

    +"""
    +Most behavior of OCR-D is controlled via command-line flags or keyword args.
    +Some behavior is global or too cumbersome to handle via explicit code and
    +better solved by using environment variables.
    +
    +OcrdEnvConfig is a base class to make this more streamlined, to be subclassed
    +in the `ocrd` package for the actual values
    +"""
    +
    +from os import environ
    +from pathlib import Path
    +from tempfile import gettempdir
    +from textwrap import fill, indent
    +
    +
    +
    [docs]class OcrdEnvVariable(): + + def __init__(self, name, description, parser=str, validator=lambda val: True, default=[False, None]): + """ + An environment variable for use in OCR-D. + + Args: + name (str): Name of the environment vairable + description (str): Description of what the variable is used for. + + Keyword Args: + parser (callable): Function to transform the raw (string) value to whatever is needed. + validator (callable): Function to validate that the raw (string) value is parseable. + default (tuple(bool, any)): 2-tuple, first element is a bool whether there is a default + value defined and second element contains that default value, which can be a callable + for defered evaluation + """ + self.name = name + self.description = description + self.parser = parser + self.validator = validator + self.has_default = default[0] + self.default = default[1] + + def __str__(self): + return f'{self.name}: {self.description}' + +
    [docs] def describe(self, wrap_text=True, indent_text=True): + desc = self.description + if self.has_default: + default = self.default() if callable(self.default) else self.default + desc += f' (Default: "{default}")' + ret = '' + ret = f'{self.name}\n' + if wrap_text: + desc = fill(desc, width=50) + if indent_text: + ret = f' {ret}' + desc = indent(desc, ' ') + return ret + desc
    + +
    [docs]class OcrdEnvConfig(): + + def __init__(self): + self._variables = {} + +
    [docs] def add(self, name, *args, **kwargs): + self._variables[name] = OcrdEnvVariable(name, *args, **kwargs) + return self._variables[name]
    + +
    [docs] def has_default(self, name): + if not name in self._variables: + raise ValueError(f"Unregistered env variable {name}") + return self._variables[name].has_default
    + +
    [docs] def describe(self, name, *args, **kwargs): + if not name in self._variables: + raise ValueError(f"Unregistered env variable {name}") + return self._variables[name].describe(*args, **kwargs)
    + + def __getattr__(self, name): + if not name in self._variables: + raise ValueError(f"Unregistered env variable {name}") + var_obj = self._variables[name] + try: + raw_value = self.raw_value(name) + except KeyError as e: + if var_obj.has_default: + raw_value = var_obj.default() if callable(var_obj.default) else var_obj.default + else: + raise e + if not var_obj.validator(raw_value): + raise ValueError(f"'{name}' set to invalid value '{raw_value}'") + return var_obj.parser(raw_value) + +
    [docs] def is_set(self, name): + if not name in self._variables: + raise ValueError(f"Unregistered env variable {name}") + return name in environ
    + +
    [docs] def raw_value(self, name): + if not name in self._variables: + raise ValueError(f"Unregistered env variable {name}") + return environ[name]
    + +config = OcrdEnvConfig() + +config.add('OCRD_METS_CACHING', + description='If set to `true`, access to the METS file is cached, speeding in-memory search and modification.', + validator=lambda val: val in ('true', 'false', '0', '1'), + parser=lambda val: val in ('true', '1')) + +config.add('OCRD_MAX_PROCESSOR_CACHE', + description="Maximum number of processor instances (for each set of parameters) to be kept in memory (including loaded models) for processing workers or processor servers.", + parser=int, + default=(True, 128)) + +config.add("OCRD_PROFILE", + description="""\ +Whether to enable gathering runtime statistics +on the `ocrd.profile` logger (comma-separated): +- `CPU`: yields CPU and wall-time, +- `RSS`: also yields peak memory (resident set size) +- `PSS`: also yields peak memory (proportional set size) +""", + validator=lambda val : all(t in ('', 'CPU', 'RSS', 'PSS') for t in val.split(',')), + default=(True, '')) + +config.add("OCRD_PROFILE_FILE", + description="If set, then the CPU profile is written to this file for later peruse with a analysis tools like snakeviz") + +config.add("OCRD_DOWNLOAD_RETRIES", + description="Number of times to retry failed attempts for downloads of workspace files.", + validator=int, + parser=int) + +def _ocrd_download_timeout_parser(val): + timeout = val.split(',') + if len(timeout) > 1: + timeout = tuple(float(x) for x in timeout) + else: + timeout = float(timeout[0]) + return timeout + +config.add("OCRD_DOWNLOAD_TIMEOUT", + description="Timeout in seconds for connecting or reading (comma-separated) when downloading.", + parser=_ocrd_download_timeout_parser) + +config.add("OCRD_NETWORK_SERVER_ADDR_PROCESSING", + description="Default address of Processing Server to connect to (for `ocrd network client processing`).", + default=(True, '')) + +config.add("OCRD_NETWORK_SERVER_ADDR_WORKFLOW", + description="Default address of Workflow Server to connect to (for `ocrd network client workflow`).", + default=(True, '')) + +config.add("OCRD_NETWORK_SERVER_ADDR_WORKSPACE", + description="Default address of Workspace Server to connect to (for `ocrd network client workspace`).", + default=(True, '')) + +config.add("OCRD_NETWORK_WORKER_QUEUE_CONNECT_ATTEMPTS", + description="Number of attempts for a worker to create its queue. Helpfull if the rabbitmq-server needs time to be fully started", + parser=int, + default=(True, 3)) + +config.add(name="OCRD_NETWORK_SOCKETS_ROOT_DIR", + description="The root directory where all mets server related socket files are created", + parser=lambda val: Path(val), + default=(True, Path(gettempdir(), "ocrd_network_sockets"))) +config.OCRD_NETWORK_SOCKETS_ROOT_DIR.mkdir(parents=True, exist_ok=True) + +config.add(name="OCRD_NETWORK_LOGS_ROOT_DIR", + description="The root directory where all ocrd_network related file logs are stored", + parser=lambda val: Path(val), + default=(True, Path(gettempdir(), "ocrd_network_logs"))) +config.OCRD_NETWORK_LOGS_ROOT_DIR.mkdir(parents=True, exist_ok=True) + +config.add("HOME", + description="Directory to look for `ocrd_logging.conf`, fallback for unset XDG variables.", + # description="HOME directory, cf. https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html", + validator=lambda val: Path(val).is_dir(), + parser=lambda val: Path(val), + default=(True, lambda: Path.home())) + +config.add("XDG_DATA_HOME", + description="Directory to look for `./ocrd/resources.yml` (i.e. `ocrd resmgr` user database)", + default=(True, lambda: Path(config.HOME, '.local/share'))) + +config.add("XDG_CONFIG_HOME", + description="Directory to look for `./ocrd-resources/*` (i.e. `ocrd resmgr` data location)", + default=(True, lambda: Path(config.HOME, '.config'))) + +config.add("OCRD_LOGGING_DEBUG", + description="Print information about the logging setup to STDERR", + default=(True, False), + validator=lambda val: isinstance(val, bool) or val in ('true', 'false', '0', '1'), + parser=lambda val: val in ('true', '1')) +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_utils/deprecate.html b/site/core/_modules/ocrd_utils/deprecate.html index dc85b9f54..ad2754592 100644 --- a/site/core/_modules/ocrd_utils/deprecate.html +++ b/site/core/_modules/ocrd_utils/deprecate.html @@ -1,18 +1,16 @@ - - + - ocrd_utils.deprecate — ocrd 2.41.0 documentation - - - - - - - + ocrd_utils.deprecate — ocrd 2.58.1 documentation + + + + + + @@ -37,13 +35,11 @@

    Source code for ocrd_utils.deprecate

     import functools
     import warnings
     
    -"""
    -https://stackoverflow.com/questions/49802412/how-to-implement-deprecation-in-python-with-argument-alias
    -by user2357112 supports Monica
    -"""
    +
    [docs]def deprecation_warning(msg, stacklevel=2): + warnings.warn(msg, DeprecationWarning, stacklevel)
    [docs]def deprecated_alias(**aliases): - """ + """ Deprecate a kwarg in favor of another kwarg """ def deco(f): @@ -55,6 +51,10 @@

    Source code for ocrd_utils.deprecate

         return deco
    [docs]def rename_kwargs(func_name, kwargs, aliases): + """ + https://stackoverflow.com/questions/49802412/how-to-implement-deprecation-in-python-with-argument-alias + by user2357112 supports Monica + """ for alias, new in aliases.items(): if alias in kwargs: if new in kwargs: @@ -115,7 +115,7 @@

    Quick search

    - + @@ -132,8 +132,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_utils/image.html b/site/core/_modules/ocrd_utils/image.html index 79141bfe8..ff8214565 100644 --- a/site/core/_modules/ocrd_utils/image.html +++ b/site/core/_modules/ocrd_utils/image.html @@ -1,18 +1,16 @@ - - + - ocrd_utils.image — ocrd 2.41.0 documentation - - - - - - - + ocrd_utils.image — ocrd 2.58.1 documentation + + + + + + @@ -76,7 +74,7 @@

    Source code for ocrd_utils.image

     ]
     
     
    [docs]def adjust_canvas_to_rotation(size, angle): - """Calculate the enlarged image size after rotation. + """Calculate the enlarged image size after rotation. Given a numpy array ``size`` of an original canvas (width and height), and a rotation angle in degrees counter-clockwise ``angle``, @@ -93,7 +91,7 @@

    Source code for ocrd_utils.image

                       np.array(size))
    [docs]def adjust_canvas_to_transposition(size, method): - """Calculate the flipped image size after transposition. + """Calculate the flipped image size after transposition. Given a numpy array ``size`` of an original canvas (width and height), and a transposition mode ``method`` (see ``transpose_image``), @@ -109,12 +107,12 @@

    Source code for ocrd_utils.image

         return size
    [docs]def bbox_from_points(points): - """Construct a numeric list representing a bounding box from polygon coordinates in page representation.""" + """Construct a numeric list representing a bounding box from polygon coordinates in page representation.""" xys = [[int(p) for p in pair.split(',')] for pair in points.split(' ')] return bbox_from_polygon(xys)
    [docs]def bbox_from_polygon(polygon): - """Construct a numeric list representing a bounding box from polygon coordinates in numeric list representation.""" + """Construct a numeric list representing a bounding box from polygon coordinates in numeric list representation.""" minx = sys.maxsize miny = sys.maxsize maxx = -sys.maxsize @@ -131,7 +129,7 @@

    Source code for ocrd_utils.image

         return minx, miny, maxx, maxy
    [docs]def bbox_from_xywh(xywh): - """Convert a bounding box from a numeric dict to a numeric list representation.""" + """Convert a bounding box from a numeric dict to a numeric list representation.""" return ( xywh['x'], xywh['y'], @@ -140,7 +138,7 @@

    Source code for ocrd_utils.image

         )
    [docs]def coordinates_of_segment(segment, parent_image, parent_coords): - """Extract the coordinates of a PAGE segment element relative to its parent. + """Extract the coordinates of a PAGE segment element relative to its parent. Given... @@ -175,7 +173,7 @@

    Source code for ocrd_utils.image

         return np.round(polygon).astype(np.int32)
    [docs]def polygon_from_points(points): - """ + """ Convert polygon coordinates in page representation to polygon coordinates in numeric list representation. """ polygon = [] @@ -186,7 +184,7 @@

    Source code for ocrd_utils.image

     
     
     
    [docs]def coordinates_for_segment(polygon, parent_image, parent_coords): - """Convert relative coordinates to absolute. + """Convert relative coordinates to absolute. Given... @@ -219,7 +217,7 @@

    Source code for ocrd_utils.image

         return np.round(polygon).astype(np.int32)
    [docs]def polygon_mask(image, coordinates): - """"Create a mask image of a polygon. + """"Create a mask image of a polygon. Given a PIL.Image ``image`` (merely for dimensions), and a numpy array ``polygon`` of relative coordinates into the image, @@ -234,7 +232,7 @@

    Source code for ocrd_utils.image

         return mask
    [docs]def rotate_coordinates(transform, angle, orig=np.array([0, 0])): - """Compose an affine coordinate transformation with a passive rotation. + """Compose an affine coordinate transformation with a passive rotation. Given a numpy array ``transform`` of an existing transformation matrix in homogeneous (3d) coordinates, and a rotation angle in @@ -248,7 +246,7 @@

    Source code for ocrd_utils.image

         
         Return a numpy array of the resulting affine transformation matrix.
         """
    -    LOG = getLogger('ocrd_utils.coords.rotate_coordinates')
    +    LOG = getLogger('ocrd.utils.coords.rotate_coordinates')
         rad = np.deg2rad(angle)
         cos = np.cos(rad)
         sin = np.sin(rad)
    @@ -271,7 +269,7 @@ 

    Source code for ocrd_utils.image

         return transform
    def rotate_image(image, angle, fill='background', transparency=False): - """"Rotate an image, enlarging and filling with background. + """"Rotate an image, enlarging and filling with background. Given a PIL.Image ``image`` and a rotation angle in degrees counter-clockwise ``angle``, rotate the image, increasing its @@ -290,7 +288,7 @@

    Source code for ocrd_utils.image

     
         Return a new PIL.Image.
         """
    -    LOG = getLogger('ocrd_utils.rotate_image')
    +    LOG = getLogger('ocrd.utils.rotate_image')
         LOG.debug('rotating image by %.2f°', angle)
         if transparency and image.mode in ['RGB', 'L']:
             # ensure no information is lost by adding transparency channel
    @@ -324,7 +322,7 @@ 

    Source code for ocrd_utils.image

     
     
     
    [docs]def shift_coordinates(transform, offset): - """Compose an affine coordinate transformation with a translation. + """Compose an affine coordinate transformation with a translation. Given a numpy array ``transform`` of an existing transformation matrix in homogeneous (3d) coordinates, and a numpy array @@ -334,7 +332,7 @@

    Source code for ocrd_utils.image

         
         Return a numpy array of the resulting affine transformation matrix.
         """
    -    LOG = getLogger('ocrd_utils.coords.shift_coordinates')
    +    LOG = getLogger('ocrd.utils.coords.shift_coordinates')
         LOG.debug('shifting coordinates by %s', str(offset))
         shift = np.eye(3)
         shift[0, 2] = offset[0]
    @@ -342,7 +340,7 @@ 

    Source code for ocrd_utils.image

         return np.dot(shift, transform)
    [docs]def scale_coordinates(transform, factors): - """Compose an affine coordinate transformation with a proportional scaling. + """Compose an affine coordinate transformation with a proportional scaling. Given a numpy array ``transform`` of an existing transformation matrix in homogeneous (3d) coordinates, and a numpy array ``factors`` of the scaling factors, calculate the affine @@ -351,7 +349,7 @@

    Source code for ocrd_utils.image

         
         Return a numpy array of the resulting affine transformation matrix.
         """
    -    LOG = getLogger('ocrd_utils.coords.scale_coordinates')
    +    LOG = getLogger('ocrd.utils.coords.scale_coordinates')
         LOG.debug('scaling coordinates by %s', str(factors))
         scale = np.eye(3)
         scale[0, 0] = factors[0]
    @@ -359,7 +357,7 @@ 

    Source code for ocrd_utils.image

         return np.dot(scale, transform)
    [docs]def transform_coordinates(polygon, transform=None): - """Apply an affine transformation to a set of points. + """Apply an affine transformation to a set of points. Augment the 2d numpy array of points ``polygon`` with a an extra column of ones (homogeneous coordinates), then multiply with the transformation matrix ``transform`` (or the identity matrix), @@ -376,7 +374,7 @@

    Source code for ocrd_utils.image

         return polygon
    [docs]def transpose_coordinates(transform, method, orig=np.array([0, 0])): - """"Compose an affine coordinate transformation with a transposition (i.e. flip or rotate in 90° multiples). + """"Compose an affine coordinate transformation with a transposition (i.e. flip or rotate in 90° multiples). Given a numpy array ``transform`` of an existing transformation matrix in homogeneous (3d) coordinates, a transposition mode ``method``, @@ -410,7 +408,7 @@

    Source code for ocrd_utils.image

     
         Return a numpy array of the resulting affine transformation matrix.
         """
    -    LOG = getLogger('ocrd_utils.coords.transpose_coordinates')
    +    LOG = getLogger('ocrd.utils.coords.transpose_coordinates')
         LOG.debug('transposing coordinates with %s around %s', membername(Image, method), str(orig))
         # get rotation matrix for passive rotation/reflection:
         rot90 = np.array([[0, 1, 0],
    @@ -442,7 +440,7 @@ 

    Source code for ocrd_utils.image

         return transform
    def transpose_image(image, method): - """"Transpose (i.e. flip or rotate in 90° multiples) an image. + """"Transpose (i.e. flip or rotate in 90° multiples) an image. Given a PIL.Image ``image`` and a transposition mode ``method``, apply the respective operation: @@ -477,12 +475,12 @@

    Source code for ocrd_utils.image

         
         Return a new PIL.Image.
         """
    -    LOG = getLogger('ocrd_utils.transpose_image')
    +    LOG = getLogger('ocrd.utils.transpose_image')
         LOG.debug('transposing image with %s', membername(Image, method))
         return image.transpose(method)
     
     def crop_image(image, box=None):
    -    """"Crop an image to a rectangle, filling with background.
    +    """"Crop an image to a rectangle, filling with background.
     
         Given a PIL.Image ``image`` and a list ``box`` of the bounding
         rectangle relative to the image, crop at the box coordinates,
    @@ -495,7 +493,7 @@ 

    Source code for ocrd_utils.image

     
         Return a new PIL.Image.
         """
    -    LOG = getLogger('ocrd_utils.crop_image')
    +    LOG = getLogger('ocrd.utils.crop_image')
         if not box:
             box = (0, 0, image.width, image.height)
         elif box[0] < 0 or box[1] < 0 or box[2] > image.width or box[3] > image.height:
    @@ -516,7 +514,7 @@ 

    Source code for ocrd_utils.image

         return new_image
     
     
    [docs]def image_from_polygon(image, polygon, fill='background', transparency=False): - """"Mask an image with a polygon. + """"Mask an image with a polygon. Given a PIL.Image ``image`` and a numpy array ``polygon`` of relative coordinates into the image, fill everything @@ -565,16 +563,16 @@

    Source code for ocrd_utils.image

         return new_image
    [docs]def points_from_bbox(minx, miny, maxx, maxy): - """Construct polygon coordinates in page representation from a numeric list representing a bounding box.""" + """Construct polygon coordinates in page representation from a numeric list representing a bounding box.""" return "%i,%i %i,%i %i,%i %i,%i" % ( minx, miny, maxx, miny, maxx, maxy, minx, maxy)
    [docs]def points_from_polygon(polygon): - """Convert polygon coordinates from a numeric list representation to a page representation.""" + """Convert polygon coordinates from a numeric list representation to a page representation.""" return " ".join("%i,%i" % (x, y) for x, y in polygon)
    [docs]def points_from_xywh(box): - """ + """ Construct polygon coordinates in page representation from numeric dict representing a bounding box. """ x, y, w, h = box['x'], box['y'], box['w'], box['h'] @@ -586,7 +584,7 @@

    Source code for ocrd_utils.image

             x, y + h
         )
    [docs]def points_from_y0x0y1x1(yxyx): - """ + """ Construct a polygon representation from a rectangle described as a list [y0, x0, y1, x1] """ y0 = yxyx[0] @@ -601,7 +599,7 @@

    Source code for ocrd_utils.image

         )
    [docs]def points_from_x0y0x1y1(xyxy): - """ + """ Construct a polygon representation from a rectangle described as a list [x0, y0, x1, y1] """ x0 = xyxy[0] @@ -616,11 +614,11 @@

    Source code for ocrd_utils.image

         )
    [docs]def polygon_from_bbox(minx, miny, maxx, maxy): - """Construct polygon coordinates in numeric list representation from a numeric list representing a bounding box.""" + """Construct polygon coordinates in numeric list representation from a numeric list representing a bounding box.""" return [[minx, miny], [maxx, miny], [maxx, maxy], [minx, maxy]]
    [docs]def polygon_from_x0y0x1y1(x0y0x1y1): - """Construct polygon coordinates in numeric list representation from a string list representing a bounding box.""" + """Construct polygon coordinates in numeric list representation from a string list representing a bounding box.""" minx = int(x0y0x1y1[0]) miny = int(x0y0x1y1[1]) maxx = int(x0y0x1y1[2]) @@ -628,11 +626,11 @@

    Source code for ocrd_utils.image

         return [[minx, miny], [maxx, miny], [maxx, maxy], [minx, maxy]]
    [docs]def polygon_from_xywh(xywh): - """Construct polygon coordinates in numeric list representation from numeric dict representing a bounding box.""" + """Construct polygon coordinates in numeric list representation from numeric dict representing a bounding box.""" return polygon_from_bbox(*bbox_from_xywh(xywh))
    [docs]def xywh_from_bbox(minx, miny, maxx, maxy): - """Convert a bounding box from a numeric list to a numeric dict representation.""" + """Convert a bounding box from a numeric list to a numeric dict representation.""" return { 'x': minx, 'y': miny, @@ -641,14 +639,14 @@

    Source code for ocrd_utils.image

         }
    [docs]def xywh_from_points(points): - """ + """ Construct a numeric dict representing a bounding box from polygon coordinates in page representation. """ return xywh_from_bbox(*bbox_from_points(points))
    [docs]def xywh_from_polygon(polygon): - """Construct a numeric dict representing a bounding box from polygon coordinates in numeric list representation.""" + """Construct a numeric dict representing a bounding box from polygon coordinates in numeric list representation.""" return xywh_from_bbox(*bbox_from_polygon(polygon))
    @@ -702,7 +700,7 @@

    Quick search

    - + @@ -719,8 +717,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_utils/introspect.html b/site/core/_modules/ocrd_utils/introspect.html index 6eedc6c47..63ec8851a 100644 --- a/site/core/_modules/ocrd_utils/introspect.html +++ b/site/core/_modules/ocrd_utils/introspect.html @@ -1,18 +1,16 @@ - - + - ocrd_utils.introspect — ocrd 2.41.0 documentation - - - - - - - + ocrd_utils.introspect — ocrd 2.58.1 documentation + + + + + + @@ -38,9 +36,26 @@

    Source code for ocrd_utils.introspect

     Utility functions to simplify access to data structures.
     """
     import json
    +from functools import wraps
    +from frozendict import frozendict
    +
    +
    +# Taken from https://github.com/OCR-D/core/pull/884
    +
    [docs]def freeze_args(func): + """ + Transform mutable dictionary into immutable. Useful to be compatible with cache. + Code taken from `this post <https://stackoverflow.com/a/53394430/1814420>`_ + """ + @wraps(func) + def wrapped(*args, **kwargs): + args = tuple([frozendict(arg) if isinstance(arg, dict) else arg for arg in args]) + kwargs = {k: frozendict(v) if isinstance(v, dict) else v for k, v in kwargs.items()} + return func(*args, **kwargs) + return wrapped
    +
    [docs]def membername(class_, val): - """Convert a member variable/constant into a member name string.""" + """Convert a member variable/constant into a member name string.""" return next((k for k, v in class_.__dict__.items() if v == val), str(val))
    [docs]def set_json_key_value_overrides(obj, *kvpairs): @@ -103,7 +118,7 @@

    Quick search

    - + @@ -120,8 +135,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_utils/logging.html b/site/core/_modules/ocrd_utils/logging.html index 9e6eeecc4..145f7a4b7 100644 --- a/site/core/_modules/ocrd_utils/logging.html +++ b/site/core/_modules/ocrd_utils/logging.html @@ -1,18 +1,16 @@ - - + - ocrd_utils.logging — ocrd 2.41.0 documentation - - - - - - - + ocrd_utils.logging — ocrd 2.58.1 documentation + + + + + + @@ -46,18 +44,34 @@

    Source code for ocrd_utils.logging

     - $PWD/ocrd_logging.py
     
     These files will be executed in the context of ocrd/ocrd_logging.py, with `logging` global set.
    +
    +Changes as of 2023-08-20:
    +
    +    - Try to be less intrusive with OCR-D specific logging conventions to
    +      make it easier and less surprising to define logging behavior when
    +      using OCR-D/core as a library
    +    - Change setOverrideLogLevel to only override the log level of the ``ocrd``
    +      logger and its descendants
    +    - initLogging will set exactly one handler, for the root logger or for the
    +      ``ocrd`` logger.
    +    - Child loggers should propagate to the ancestor logging (default
    +      behavior of the logging library - no more PropagationShyLogger)
    +    - disableLogging only removes any handlers from the ``ocrd`` logger
     """
     # pylint: disable=no-member
     
     from __future__ import absolute_import
    +
     from traceback import format_stack
     
     import logging
     import logging.config
    -import os
    +from pathlib import Path
     import sys
     
     from .constants import LOG_FORMAT, LOG_TIMEFMT
    +from .config import config
    +
     
     __all__ = [
         'disableLogging',
    @@ -68,8 +82,30 @@ 

    Source code for ocrd_utils.logging

         'setOverrideLogLevel',
     ]
     
    +# These are the loggers we add handlers to
    +ROOT_OCRD_LOGGERS = [
    +    'ocrd',
    +    'ocrd_network'
    +]
    +
    +LOGGING_DEFAULTS = {
    +    'ocrd': logging.INFO,
    +    'ocrd_network': logging.DEBUG,
    +    # 'ocrd.resolver': logging.INFO,
    +    # 'ocrd.resolver.download_to_directory': logging.INFO,
    +    # 'ocrd.resolver.add_files_to_mets': logging.INFO,
    +    # To cut back on the `Self-intersection at or near point` INFO messages
    +    'shapely.geos': logging.ERROR,
    +    'tensorflow': logging.ERROR,
    +    'PIL': logging.INFO,
    +    'paramiko.transport': logging.INFO,
    +    'uvicorn.access': logging.DEBUG,
    +    'uvicorn.error': logging.DEBUG,
    +    'uvicorn': logging.INFO,
    +    'multipart': logging.INFO,
    +}
    +
     _initialized_flag = False
    -_overrideLogLevel = None
     
     _ocrdLevel2pythonLevel = {
         'TRACE': 'DEBUG',
    @@ -77,127 +113,138 @@ 

    Source code for ocrd_utils.logging

         'FATAL': 'ERROR',
     }
     
    -class PropagationShyLogger(logging.Logger):
    -
    -    def addHandler(self, hdlr):
    -        super().addHandler(hdlr)
    -        self.propagate = not self.handlers
    -
    -    def removeHandler(self, hdlr):
    -        super().removeHandler(hdlr)
    -        self.propagate = not self.handlers
    -
    -logging.setLoggerClass(PropagationShyLogger)
    -logging.getLogger().propagate = False
    +def tf_disable_interactive_logs():
    +    try:
    +        from os import environ
    +        # This env variable must be set before importing from Keras
    +        environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
    +        from tensorflow.keras.utils import disable_interactive_logging
    +        # Enabled interactive logging throws an exception
    +        # due to a call of sys.stdout.flush()
    +        disable_interactive_logging()
    +    except ImportError:
    +        # Nothing should be handled here if TF is not available
    +        pass
     
     
    [docs]def getLevelName(lvl): - """ + """ Get (string) python logging level for (string) spec-defined log level name. """ lvl = _ocrdLevel2pythonLevel.get(lvl, lvl) return logging.getLevelName(lvl)
    -
    [docs]def setOverrideLogLevel(lvl, silent=False): - """ - Override all logger filter levels to include lvl and above. - +
    [docs]def getLogger(*args, **kwargs): + """ + Wrapper around ``logging.getLogger`` that alls :py:func:`initLogging` if + that wasn't explicitly called before. + """ + logger = logging.getLogger(*args, **kwargs) + return logger
    - - Set root logger level - - iterates all existing loggers and sets their log level to ``NOTSET``. +
    [docs]def setOverrideLogLevel(lvl, silent=not config.OCRD_LOGGING_DEBUG): + """ + Override the output log level of the handlers attached to the ``ocrd`` logger. Args: lvl (string): Log level name. silent (boolean): Whether to log the override call - """ - if lvl is None: - return - root_logger = logging.getLogger('') - if not silent: - root_logger.info('Overriding log level globally to %s', lvl) - lvl = getLevelName(lvl) - global _overrideLogLevel # pylint: disable=global-statement - _overrideLogLevel = lvl - for loggerName in logging.Logger.manager.loggerDict: - logger = logging.Logger.manager.loggerDict[loggerName] - if isinstance(logger, logging.PlaceHolder): - continue - logger.setLevel(logging.NOTSET) - root_logger.setLevel(lvl)
    - -
    [docs]def getLogger(*args, **kwargs): - """ - Wrapper around ``logging.getLogger`` that respects `overrideLogLevel <#setOverrideLogLevel>`_. """ if not _initialized_flag: - initLogging() - logging.getLogger('').critical('getLogger was called before initLogging. Source of the call:') - for line in [x for x in format_stack(limit=2)[0].split('\n') if x]: - logging.getLogger('').critical(line) - name = args[0] - logger = logging.getLogger(*args, **kwargs) - if _overrideLogLevel and name: - logger.setLevel(logging.NOTSET) - return logger
    + initLogging(silent=silent) + ocrd_logger = logging.getLogger('ocrd') -
    [docs]def initLogging(): - """ - Reset root logger, read logging configuration if exists, otherwise use basicConfig + if lvl is None: + if not silent: + print('[LOGGING] Reset log level override', file=sys.stderr) + ocrd_logger.setLevel(logging.NOTSET) + else: + if not silent: + print(f'[LOGGING] Overriding ocrd log level to {lvl}', file=sys.stderr) + ocrd_logger.setLevel(lvl)
    + +
    [docs]def initLogging(builtin_only=False, force_reinit=False, silent=not config.OCRD_LOGGING_DEBUG): + """ + Reset ``ocrd`` logger, read logging configuration if exists, otherwise use basicConfig + + initLogging is to be called by OCR-D/core once, i.e. + - for the ``ocrd`` CLI + - for the processor wrapper methods + + Other processes that use OCR-D/core as a library can, but do not have to, use this functionality. + + Keyword Args: + - builtin_only (bool, False): Whether to search for logging configuration + on-disk (``False``) or only use the + hard-coded config (``True``). For testing + - force_reinit (bool, False): Whether to ignore the module-level + ``_initialized_flag``. For testing only. + - silent (bool, True): Whether to log logging behavior by printing to stderr """ - global _initialized_flag # pylint: disable=global-statement - if _initialized_flag: - logging.getLogger('').critical('initLogging was called multiple times. Source of latest call:') - for line in [x for x in format_stack(limit=2)[0].split('\n') if x]: - logging.getLogger('').critical(line) + global _initialized_flag + if _initialized_flag and not force_reinit: + return + # disableLogging() + # https://docs.python.org/3/library/logging.html#logging.disable + # If logging.disable(logging.NOTSET) is called, it effectively removes this + # overriding level, so that logging output again depends on the effective + # levels of individual loggers. logging.disable(logging.NOTSET) - for handler in logging.root.handlers[:]: - logging.root.removeHandler(handler) - - CONFIG_PATHS = [ - os.path.curdir, - os.path.join(os.path.expanduser('~')), - '/etc', - ] - config_file = next((f for f \ - in [os.path.join(p, 'ocrd_logging.conf') for p in CONFIG_PATHS] \ - if os.path.exists(f)), - None) + + # remove all handlers for the ocrd root loggers + for logger_name in ROOT_OCRD_LOGGERS: + for handler in logging.getLogger(logger_name).handlers[:]: + logging.getLogger(logger_name).removeHandler(handler) + + config_file = None + if not builtin_only: + CONFIG_PATHS = [ + Path.cwd(), + Path.home(), + Path('/etc'), + ] + config_file = [f for f \ + in [p / 'ocrd_logging.conf' for p in CONFIG_PATHS] \ + if f.exists()] if config_file: + if len(config_file) > 1 and not silent: + print(f"[LOGGING] Multiple logging configuration files found at {config_file}, using first one", file=sys.stderr) + config_file = config_file[0] + if not silent: + print(f"[LOGGING] Picked up logging config at {config_file}", file=sys.stderr) logging.config.fileConfig(config_file) - logging.getLogger('ocrd.logging').debug("Picked up logging config at %s" % config_file) else: + if not silent: + print("[LOGGING] Initializing logging with built-in defaults", file=sys.stderr) # Default logging config - logging.basicConfig(level=logging.INFO, format=LOG_FORMAT, datefmt=LOG_TIMEFMT, stream=sys.stderr) - logging.getLogger('').setLevel(logging.INFO) - # logging.getLogger('ocrd.resolver').setLevel(logging.INFO) - # logging.getLogger('ocrd.resolver.download_to_directory').setLevel(logging.INFO) - # logging.getLogger('ocrd.resolver.add_files_to_mets').setLevel(logging.INFO) - logging.getLogger('PIL').setLevel(logging.INFO) - # To cut back on the `Self-intersection at or near point` INFO messages - logging.getLogger('shapely.geos').setLevel(logging.ERROR) - logging.getLogger('tensorflow').setLevel(logging.ERROR) - - if _overrideLogLevel: - # for existing loggers that won't have getLogger do this - # (because they were instantiated through logging.getLogger - # instead of ours, or come from logging.config.fileConfig), - # unset log levels so the global override can apply: - for loggerName in logging.Logger.manager.loggerDict: - logger = logging.Logger.manager.loggerDict[loggerName] - if isinstance(logger, logging.PlaceHolder): - continue - logger.setLevel(logging.NOTSET) - logging.getLogger('').setLevel(_overrideLogLevel) - + ocrd_handler = logging.StreamHandler(stream=sys.stderr) + ocrd_handler.setFormatter(logging.Formatter(fmt=LOG_FORMAT, datefmt=LOG_TIMEFMT)) + ocrd_handler.setLevel(logging.DEBUG) + for logger_name in ROOT_OCRD_LOGGERS: + logging.getLogger(logger_name).addHandler(ocrd_handler) + for logger_name, logger_level in LOGGING_DEFAULTS.items(): + logging.getLogger(logger_name).setLevel(logger_level) _initialized_flag = True
    -
    [docs]def disableLogging(): +
    [docs]def disableLogging(silent=not config.OCRD_LOGGING_DEBUG): + """ + Disables all logging of the ``ocrd`` logger and descendants + + Keyword Args: + - silent (bool, True): Whether to log logging behavior by printing to stderr + """ global _initialized_flag # pylint: disable=global-statement + if _initialized_flag and not silent: + print("[LOGGING] Disabling logging", file=sys.stderr) _initialized_flag = False - global _overrideLogLevel # pylint: disable=global-statement - _overrideLogLevel = None - logging.basicConfig(level=logging.CRITICAL) - logging.disable(logging.ERROR)
    + # logging.basicConfig(level=logging.CRITICAL) + # logging.disable(logging.ERROR) + # remove all handlers for the ocrd logger + for logger_name in ROOT_OCRD_LOGGERS: + for handler in logging.getLogger(logger_name).handlers[:]: + logging.getLogger(logger_name).removeHandler(handler) + for logger_name in LOGGING_DEFAULTS: + logging.getLogger(logger_name).setLevel(logging.NOTSET)
    # Initializing stream handlers at module level # would cause message output in all runtime contexts, @@ -261,7 +308,7 @@

    Quick search

    - + @@ -278,8 +325,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_utils/os.html b/site/core/_modules/ocrd_utils/os.html index 9ba2f81d2..c307d0fa9 100644 --- a/site/core/_modules/ocrd_utils/os.html +++ b/site/core/_modules/ocrd_utils/os.html @@ -1,18 +1,16 @@ - - + - ocrd_utils.os — ocrd 2.41.0 documentation - - - - - - - + ocrd_utils.os — ocrd 2.58.1 documentation + + + + + + @@ -44,14 +42,16 @@

    Source code for ocrd_utils.os

         'get_ocrd_tool_json',
         'get_moduledir',
         'get_processor_resource_types',
    +    'guess_media_type',
         'pushd_popd',
         'unzip_file_to_dir',
         'atomic_write',
    +    'redirect_stderr_and_stdout_to_file',
     ]
     
     from tempfile import TemporaryDirectory, gettempdir
     from functools import lru_cache
    -import contextlib
    +from contextlib import contextmanager, redirect_stderr, redirect_stdout
     from distutils.spawn import find_executable as which
     from json import loads
     from json.decoder import JSONDecodeError
    @@ -60,14 +60,17 @@ 

    Source code for ocrd_utils.os

     from os.path import exists, abspath as abspath_, join, isdir
     from zipfile import ZipFile
     from subprocess import run, PIPE
    +from mimetypes import guess_type as mimetypes_guess
    +from filetype import guess as filetype_guess
     
     from atomicwrites import atomic_write as atomic_write_, AtomicWriter
     
    -from .constants import XDG_DATA_HOME
    +from .constants import EXT_TO_MIME
    +from .config import config
     from .logging import getLogger
     
     
    [docs]def abspath(url): - """ + """ Get a full path to a file or file URL See os.abspath @@ -76,7 +79,7 @@

    Source code for ocrd_utils.os

             url = url[len('file://'):]
         return abspath_(url)
    -
    [docs]@contextlib.contextmanager +
    [docs]@contextmanager def pushd_popd(newcwd=None, tempdir=False): if newcwd and tempdir: raise Exception("pushd_popd can accept either newcwd or tempdir, not both") @@ -98,7 +101,7 @@

    Source code for ocrd_utils.os

             chdir(oldcwd)
    [docs]def unzip_file_to_dir(path_to_zip, output_directory): - """ + """ Extract a ZIP archive to a directory """ z = ZipFile(path_to_zip, 'r') @@ -107,14 +110,14 @@

    Source code for ocrd_utils.os

     
     
    [docs]@lru_cache() def get_ocrd_tool_json(executable): - """ + """ Get the ``ocrd-tool`` description of ``executable``. """ executable_name = Path(executable).name try: ocrd_tool = loads(run([executable, '--dump-json'], stdout=PIPE).stdout) except (JSONDecodeError, OSError) as e: - getLogger('ocrd_utils.get_ocrd_tool_json').error(f'{executable} --dump-json produced invalid JSON: {e}') + getLogger('ocrd.utils.get_ocrd_tool_json').error(f'{executable} --dump-json produced invalid JSON: {e}') ocrd_tool = {} if 'resource_locations' not in ocrd_tool: ocrd_tool['resource_locations'] = ['data', 'cwd', 'system', 'module'] @@ -126,17 +129,17 @@

    Source code for ocrd_utils.os

         try:
             moduledir = run([executable, '--dump-module-dir'], encoding='utf-8', stdout=PIPE).stdout.rstrip('\n')
         except (JSONDecodeError, OSError) as e:
    -        getLogger('ocrd_utils.get_moduledir').error(f'{executable} --dump-module-dir failed: {e}')
    +        getLogger('ocrd.utils.get_moduledir').error(f'{executable} --dump-module-dir failed: {e}')
         return moduledir
    def list_resource_candidates(executable, fname, cwd=getcwd(), moduled=None, xdg_data_home=None): - """ + """ Generate candidates for processor resources according to https://ocr-d.de/en/spec/ocrd_tool#file-parameters """ candidates = [] candidates.append(join(cwd, fname)) - xdg_data_home = XDG_DATA_HOME if not xdg_data_home else xdg_data_home + xdg_data_home = config.XDG_DATA_HOME if not xdg_data_home else xdg_data_home processor_path_var = '%s_PATH' % executable.replace('-', '_').upper() if processor_path_var in environ: candidates += [join(x, fname) for x in environ[processor_path_var].split(':')] @@ -147,7 +150,7 @@

    Source code for ocrd_utils.os

         return candidates
     
     def list_all_resources(executable, moduled=None, xdg_data_home=None):
    -    """
    +    """
         List all processor resources in the filesystem according to
         https://ocr-d.de/en/spec/ocrd_tool#file-parameters
         """
    @@ -158,7 +161,7 @@ 

    Source code for ocrd_utils.os

             # processor we're looking for ressource_locations of is not installed.
             # Assume the default
             resource_locations = ['data', 'cwd', 'system', 'module']
    -    xdg_data_home = XDG_DATA_HOME if not xdg_data_home else xdg_data_home
    +    xdg_data_home = config.XDG_DATA_HOME if not xdg_data_home else xdg_data_home
         # XXX cwd would list too many false positives
         # if 'cwd' in resource_locations:
         #     cwd_candidate = join(getcwd(), 'ocrd-resources', executable)
    @@ -198,7 +201,7 @@ 

    Source code for ocrd_utils.os

         return sorted([str(x) for x in candidates])
     
     
    [docs]def get_processor_resource_types(executable, ocrd_tool=None): - """ + """ Determine what type of resource parameters a processor needs. Return a list of MIME types (with the special value `*/*` to @@ -233,14 +236,14 @@

    Source code for ocrd_utils.os

             chmod(fd, mode)
             return f
     
    -
    [docs]@contextlib.contextmanager +
    [docs]@contextmanager def atomic_write(fpath): with atomic_write_(fpath, writer_cls=AtomicWriterPerms, overwrite=True) as f: yield f
    [docs]def is_file_in_directory(directory, file): - """ + """ Return True if ``file`` is in ``directory`` (by checking that all components of ``directory`` are in ``file.parts``) """ directory = Path(directory) @@ -248,7 +251,7 @@

    Source code for ocrd_utils.os

         return list(file.parts)[:len(directory.parts)] == list(directory.parts)
    def itertree(path): - """ + """ Generate a list of paths by recursively enumerating ``path`` """ if not isinstance(path, Path): @@ -259,11 +262,34 @@

    Source code for ocrd_utils.os

         yield path
     
     
    [docs]def directory_size(path): - """ + """ Calculcates size of all files in directory ``path`` """ path = Path(path) return sum(f.stat().st_size for f in path.glob('**/*') if f.is_file())
    + +
    [docs]def guess_media_type(input_file : str, fallback : str = None, application_xml : str = 'application/xml'): + """ + Guess the media type of a file path + """ + mimetype = filetype_guess(input_file) + if mimetype is not None: + mimetype = mimetype.mime + else: + mimetype = mimetypes_guess(input_file)[0] + if mimetype is None: + mimetype = EXT_TO_MIME.get(''.join(Path(input_file).suffixes), fallback) + if mimetype is None: + raise ValueError("Could not determine MIME type of input_file must") + if mimetype == 'application/xml': + mimetype = application_xml + return mimetype
    + +
    [docs]@contextmanager +def redirect_stderr_and_stdout_to_file(filename): + with open(filename, 'at', encoding='utf-8') as f: + with redirect_stderr(f), redirect_stdout(f): + yield
    @@ -316,7 +342,7 @@

    Quick search

    - + @@ -333,8 +359,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_utils/package_resources.html b/site/core/_modules/ocrd_utils/package_resources.html deleted file mode 100644 index 5f5c20681..000000000 --- a/site/core/_modules/ocrd_utils/package_resources.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - ocrd_utils.package_resources — ocrd 2.41.0 documentation - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - -
    - -

    Source code for ocrd_utils.package_resources

    -import atexit
    -from contextlib import ExitStack
    -from pathlib import Path
    -
    -try:
    -    from importlib.resources import path, read_binary
    -except ImportError:
    -    from importlib_resources import path, read_binary  # type: ignore
    -
    -try:
    -    from importlib.metadata import distribution as get_distribution
    -except ImportError:
    -    from importlib_metadata import distribution as get_distribution
    -
    -# See https://importlib-resources.readthedocs.io/en/latest/migration.html#pkg-resources-resource-filename
    -_file_manager = ExitStack()
    -atexit.register(_file_manager.close)
    -
    -
    -
    [docs]def resource_filename(package: str, resource: str) -> Path: - """ - Reimplementation of the function with the same name from pkg_resources - - Using importlib for better performance - - package : str - The package from where to start looking for resource (often __name__) - resource : str - The resource to look up - """ - parent_package = package.rsplit('.',1)[0] - return _file_manager.enter_context(path(parent_package, resource))
    - - -
    [docs]def resource_string(package: str, resource: str) -> bytes: - """ - Reimplementation of the function with the same name from pkg_resources - - Using importlib for better performance - - package : str - The package from where to start looking for resource (often __name__) - resource : str - The resource to look up - """ - parent_package = package.rsplit('.',1)[0] - return read_binary(parent_package, resource)
    - - -__all__ = ['resource_filename', 'resource_string', 'get_distribution'] -
    - -
    - -
    -
    - -
    -
    - - - - - - - \ No newline at end of file diff --git a/site/core/_modules/ocrd_utils/str.html b/site/core/_modules/ocrd_utils/str.html index 1013ce133..2c5346c85 100644 --- a/site/core/_modules/ocrd_utils/str.html +++ b/site/core/_modules/ocrd_utils/str.html @@ -1,18 +1,16 @@ - - + - ocrd_utils.str — ocrd 2.41.0 documentation - - - - - - - + ocrd_utils.str — ocrd 2.58.1 documentation + + + + + + @@ -41,6 +39,8 @@

    Source code for ocrd_utils.str

     import re
     import json
     from .constants import REGEX_FILE_ID
    +from .deprecate import deprecation_warning
    +from warnings import warn
     
     __all__ = [
         'assert_file_grp_cardinality',
    @@ -58,7 +58,7 @@ 

    Source code for ocrd_utils.str

     
     
     
    [docs]def assert_file_grp_cardinality(grps, n, msg=None): - """ + """ Assert that a string of comma-separated fileGrps contains exactly ``n`` entries. """ if isinstance(grps, str): @@ -73,7 +73,7 @@

    Source code for ocrd_utils.str

                 )
    [docs]def concat_padded(base, *args): - """ + """ Concatenate string and zero-padded 4 digit number """ ret = base @@ -85,7 +85,7 @@

    Source code for ocrd_utils.str

         return ret
    [docs]def remove_non_path_from_url(url): - """ + """ Remove everything from URL after path. """ url = url.split('?', 1)[0] # query @@ -94,7 +94,7 @@

    Source code for ocrd_utils.str

         return url
    [docs]def make_file_id(ocrd_file, output_file_grp): - """ + """ Derive a new file ID for an output file from an existing input file ``ocrd_file`` and the name of the output file's ``fileGrp/@USE``, ``output_file_grp``. If ``ocrd_file``'s ID contains the input file's fileGrp name, then replace it by ``output_file_grp``. @@ -133,7 +133,7 @@

    Source code for ocrd_utils.str

         return ret
    [docs]def nth_url_segment(url, n=-1): - """ + """ Return the last /-delimited segment of a URL-like string Arguments: @@ -147,7 +147,7 @@

    Source code for ocrd_utils.str

             return ''
    [docs]def get_local_filename(url, start=None): - """ + """ Return local filename, optionally relative to ``start`` Arguments: @@ -155,7 +155,7 @@

    Source code for ocrd_utils.str

             start (string): Base path to remove from filename. Raise an exception if not a prefix of url
         """
         if url.startswith('https://') or url.startswith('http:'):
    -        raise Exception("Can't determine local filename of http(s) URL")
    +        raise ValueError("Can't determine local filename of http(s) URL")
         if url.startswith('file://'):
             url = url[len('file://'):]
         # Goobi/Kitodo produces those, they are always absolute
    @@ -163,34 +163,35 @@ 

    Source code for ocrd_utils.str

             url = url[len('file:'):]
         if start:
             if not url.startswith(start):
    -            raise Exception("Cannot remove prefix %s from url %s" % (start, url))
    +            raise ValueError("Cannot remove prefix %s from url %s" % (start, url))
             if not start.endswith('/'):
                 start += '/'
             url = url[len(start):]
         return url
    [docs]def is_local_filename(url): - """ + """ Whether a url is a local filename. """ + # deprecation_warning("Deprecated so we spot inconsistent URL/file handling") return url.startswith('file://') or not('://' in url)
    [docs]def is_string(val): - """ + """ Return whether a value is a ``str``. """ return isinstance(val, str)
    [docs]def parse_json_string_with_comments(val): - """ + """ Parse a string of JSON interspersed with #-prefixed full-line comments """ jsonstr = re.sub(r'^\s*#.*$', '', val, flags=re.MULTILINE) return json.loads(jsonstr)
    [docs]def parse_json_string_or_file(*values): # pylint: disable=unused-argument - """ + """ Parse a string as either the path to a JSON object or a literal JSON object. Empty strings are equivalent to '{}' @@ -217,24 +218,26 @@

    Source code for ocrd_utils.str

         return ret
    [docs]def safe_filename(url): - """ + """ Sanitize input to be safely used as the basename of a local file. """ - ret = re.sub(r'[^A-Za-z0-9_]+', '_', url) + ret = re.sub(r'[^\w]+', '_', url) ret = re.sub(r'^\.*', '', ret) ret = re.sub(r'\.\.*', '.', ret) # print('safe filename: %s -> %s' % (url, ret)) return ret
    def generate_range(start, end): - """ + """ Generate a list of strings by incrementing the number part of ``start`` until including ``end``. """ ret = [] - start_num, end_num = re.search(r'\d+', start), re.search(r'\d+', end) - if not (start_num and end_num): - raise ValueError("Unable to generate range %s .. %s, could not detect number part" % (start, end)) - start_num, end_num = start_num.group(0), end_num.group(0) + try: + start_num, end_num = re.findall(r'\d+', start)[-1], re.findall(r'\d+', end)[-1] + except IndexError: + raise ValueError("Range '%s..%s': could not find numeric part" % (start, end)) + if start_num == end_num: + warn("Range '%s..%s': evaluates to the same number") for i in range(int(start_num), int(end_num) + 1): ret.append(start.replace(start_num, str(i).zfill(len(start_num)))) return ret @@ -290,7 +293,7 @@

    Quick search

    - + @@ -307,8 +310,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_validators/json_validator.html b/site/core/_modules/ocrd_validators/json_validator.html index a4895306d..8a6cc9559 100644 --- a/site/core/_modules/ocrd_validators/json_validator.html +++ b/site/core/_modules/ocrd_validators/json_validator.html @@ -1,18 +1,16 @@ - - + - ocrd_validators.json_validator — ocrd 2.41.0 documentation - - - - - - - + ocrd_validators.json_validator — ocrd 2.58.1 documentation + + + + + + @@ -45,13 +43,13 @@

    Source code for ocrd_validators.json_validator

    # http://python-jsonschema.readthedocs.io/en/latest/faq/

    [docs]def extend_with_default(validator_class): - """ + """ Add a default-setting mechanism to a ``jsonschema`` validation class. """ validate_properties = validator_class.VALIDATORS["properties"] def set_defaults(validator, properties, instance, schema): - """ + """ Set defaults in subschemas """ for prop, subschema in properties.items(): @@ -71,13 +69,13 @@

    Source code for ocrd_validators.json_validator

    #

    [docs]class JsonValidator(): - """ + """ JSON Schema validator. """
    [docs] @staticmethod def validate(obj, schema): - """ + """ Validate an object against a schema Args: @@ -89,7 +87,7 @@

    Source code for ocrd_validators.json_validator

    return JsonValidator(schema)._validate(obj) # pylint: disable=protected-access

    def __init__(self, schema, validator_class=Draft6Validator): - """ + """ Construct a JsonValidator. Args: @@ -99,7 +97,7 @@

    Source code for ocrd_validators.json_validator

    self.validator = validator_class(schema) def _validate(self, obj): - """ + """ Do the actual validation Arguments: @@ -165,7 +163,7 @@

    Quick search

    - + @@ -182,8 +180,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_validators/ocrd_network_message_validator.html b/site/core/_modules/ocrd_validators/ocrd_network_message_validator.html new file mode 100644 index 000000000..0309519fc --- /dev/null +++ b/site/core/_modules/ocrd_validators/ocrd_network_message_validator.html @@ -0,0 +1,135 @@ + + + + + + + ocrd_validators.ocrd_network_message_validator — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_validators.ocrd_network_message_validator

    +"""
    +Validating ocrd-network messages
    +"""
    +from .constants import (
    +    MESSAGE_SCHEMA_PROCESSING,
    +    MESSAGE_SCHEMA_RESULT
    +)
    +from .json_validator import JsonValidator
    +
    +
    +
    [docs]class OcrdNetworkMessageValidator(JsonValidator): + """ + JsonValidator validating against the ocrd network message schemas + """ + +
    [docs] @staticmethod + def validate_message_processing(obj): + return JsonValidator.validate(obj, schema=MESSAGE_SCHEMA_PROCESSING)
    + +
    [docs] @staticmethod + def validate_message_result(obj): + return JsonValidator.validate(obj, schema=MESSAGE_SCHEMA_RESULT)
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_validators/ocrd_tool_validator.html b/site/core/_modules/ocrd_validators/ocrd_tool_validator.html index 3d62d4fd8..1132e9245 100644 --- a/site/core/_modules/ocrd_validators/ocrd_tool_validator.html +++ b/site/core/_modules/ocrd_validators/ocrd_tool_validator.html @@ -1,18 +1,16 @@ - - + - ocrd_validators.ocrd_tool_validator — ocrd 2.41.0 documentation - - - - - - - + ocrd_validators.ocrd_tool_validator — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@

    Source code for ocrd_validators.ocrd_tool_validator

    """ Validating ``ocrd-tool.json``. -See `specs <https://ocr-d.github.io/ocrd_tool>`_. +See `specs <https://ocr-d.de/en/spec/ocrd_tool>`_. """ from .constants import OCRD_TOOL_SCHEMA from .json_validator import JsonValidator @@ -47,13 +45,13 @@

    Source code for ocrd_validators.ocrd_tool_validator

    #
    [docs]class OcrdToolValidator(JsonValidator): - """ + """ JsonValidator validating against the ``ocrd-tool.json`` schema. """
    [docs] @staticmethod def validate(obj, schema=OCRD_TOOL_SCHEMA): - """ + """ Validate against ``ocrd-tool.json`` schema. """ return JsonValidator.validate(obj, schema)
    @@ -109,7 +107,7 @@

    Quick search

    - + @@ -126,8 +124,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_validators/ocrd_zip_validator.html b/site/core/_modules/ocrd_validators/ocrd_zip_validator.html index ddc0e66af..1a4271c5f 100644 --- a/site/core/_modules/ocrd_validators/ocrd_zip_validator.html +++ b/site/core/_modules/ocrd_validators/ocrd_zip_validator.html @@ -1,18 +1,16 @@ - - + - ocrd_validators.ocrd_zip_validator — ocrd 2.41.0 documentation - - - - - - - + ocrd_validators.ocrd_zip_validator — ocrd 2.58.1 documentation + + + + + + @@ -55,7 +53,7 @@

    Source code for ocrd_validators.ocrd_zip_validator

    #
    [docs]class OcrdZipValidator(): - """ + """ Validate conformance with BagIt and OCR-D bagit profile. See: @@ -65,7 +63,7 @@

    Source code for ocrd_validators.ocrd_zip_validator

    """ def __init__(self, resolver, path_to_zip): - """ + """ Arguments: resolver (Resolver): resolver path_to_zip (string): Path to the OCRD-ZIP file @@ -76,14 +74,14 @@

    Source code for ocrd_validators.ocrd_zip_validator

    self.profile_validator = Profile(OCRD_BAGIT_PROFILE_URL, profile=OCRD_BAGIT_PROFILE) def _validate_profile(self, bag): - """ + """ Validate against OCRD BagIt profile (bag-info fields, algos etc) """ if not self.profile_validator.validate(bag): raise Exception(str(self.profile_validator.report)) def _validate_bag(self, bag, **kwargs): - """ + """ Validate BagIt (checksums, payload.oxum etc) """ failed = None @@ -101,7 +99,7 @@

    Source code for ocrd_validators.ocrd_zip_validator

    raise BagValidationError("%s" % failed)
    [docs] def validate(self, skip_checksums=False, skip_bag=False, skip_unzip=False, skip_delete=False, processes=2): - """ + """ Validate an OCRD-ZIP file for profile, bag and workspace conformance Arguments: @@ -190,7 +188,7 @@

    Quick search

    - + @@ -207,8 +205,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_validators/page_validator.html b/site/core/_modules/ocrd_validators/page_validator.html index 842478aac..b052256dd 100644 --- a/site/core/_modules/ocrd_validators/page_validator.html +++ b/site/core/_modules/ocrd_validators/page_validator.html @@ -1,18 +1,16 @@ - - + - ocrd_validators.page_validator — ocrd 2.41.0 documentation - - - - - - - + ocrd_validators.page_validator — ocrd 2.58.1 documentation + + + + + + @@ -129,13 +127,13 @@

    Source code for ocrd_validators.page_validator

    [docs]class ConsistencyError(Exception): - """ + """ Exception representing a consistency error in textual transcription across levels of a PAGE-XML. (Element text strings must be the concatenation of their children's text strings, joined by white space.) """ def __init__(self, tag, ID, file_id, actual, expected): - """ + """ Construct a new ConsistencyError. Arguments: @@ -156,13 +154,13 @@

    Source code for ocrd_validators.page_validator

    tag, ID, file_id, actual, expected))

    [docs]class CoordinateConsistencyError(Exception): - """ + """ Exception representing a consistency error in coordinate confinement across levels of a PAGE-XML. (Element coordinate polygons must be properly contained in their parents' coordinate polygons.) """ def __init__(self, tag, ID, file_id, outer, inner): - """ + """ Construct a new CoordinateConsistencyError. Arguments: @@ -182,14 +180,14 @@

    Source code for ocrd_validators.page_validator

    tag, ID, file_id, inner, outer))

    [docs]class CoordinateValidityError(Exception): - """ + """ Exception representing a validity error of an element's coordinates in PAGE-XML. (Element coordinate polygons must have at least 3 points, and must not self-intersect or be non-contiguous or be negative.) """ def __init__(self, tag, ID, file_id, points, reason='unknown'): - """ + """ Construct a new CoordinateValidityError. Arguments: @@ -207,13 +205,13 @@

    Source code for ocrd_validators.page_validator

    tag, ID, file_id, points, reason))

    [docs]def compare_without_whitespace(a, b): - """ + """ Compare two strings, ignoring all whitespace. """ return re.sub('\\s+', '', a) == re.sub('\\s+', '', b)
    [docs]def page_get_reading_order(ro, rogroup): - """Add all elements from the given reading order group to the given dictionary. + """Add all elements from the given reading order group to the given dictionary. Given a dict ``ro`` from layout element IDs to ReadingOrder element objects, and an object ``rogroup`` with additional ReadingOrder element objects, @@ -234,7 +232,7 @@

    Source code for ocrd_validators.page_validator

    page_get_reading_order(ro, elem)

    [docs]def make_poly(polygon_points): - """Instantiate a Polygon from a list of point pairs, or return an error string""" + """Instantiate a Polygon from a list of point pairs, or return an error string""" if len(polygon_points) < 4: return 'has too few points' poly = Polygon(polygon_points) @@ -249,7 +247,7 @@

    Source code for ocrd_validators.page_validator

    return poly

    [docs]def make_line(line_points): - """Instantiate a LineString from a list of point pairs, or return an error string""" + """Instantiate a LineString from a list of point pairs, or return an error string""" if len(line_points) < 2: return 'has too few points' line = LineString(line_points) @@ -267,7 +265,7 @@

    Source code for ocrd_validators.page_validator

    check_baseline, check_coords, report, file_id, joinRelations=None, readingOrder=None, textLineOrder=None, readingDirection=None): - """ + """ Check whether the text results on an element is consistent with its child element text results, and whether the coordinates of an element are fully within its parent element coordinates. """ @@ -365,7 +363,7 @@

    Source code for ocrd_validators.page_validator

    baseline_points, baseline_line)) log.debug("Invalid coords of baseline in %s", node_id) consistent = False - elif not baseline_line.within(node_poly.buffer(PARENT_SLACK)): + elif node_poly and not baseline_line.within(node_poly.buffer(PARENT_SLACK)): report.add_error(CoordinateConsistencyError("Baseline", node_id, file_id, parent_points, baseline_points)) log.debug("Inconsistent coords of baseline in %s %s", tag, node_id) @@ -388,7 +386,7 @@

    Source code for ocrd_validators.page_validator

    return consistent

    [docs]def concatenate(nodes, concatenate_with, page_textequiv_strategy, joins=None): - """ + """ Concatenate nodes textually according to https://ocr-d.github.io/page#consistency-of-text-results-on-different-levels """ if not nodes: @@ -404,7 +402,7 @@

    Source code for ocrd_validators.page_validator

    return result.strip()

    [docs]def get_text(node, page_textequiv_strategy='first'): - """ + """ Get the first or most confident among text results (depending on ``page_textequiv_strategy``). For the strategy ``best``, return the string of the highest scoring result. For the strategy ``first``, return the string of the lowest indexed result. @@ -436,7 +434,7 @@

    Source code for ocrd_validators.page_validator

    return textEquivs[0].get_Unicode().strip()

    [docs]def set_text(node, text, page_textequiv_strategy): - """ + """ Set the first or most confident among text results (depending on ``page_textequiv_strategy``). For the strategy ``best``, set the string of the highest scoring result. For the strategy ``first``, set the string of the lowest indexed result. @@ -469,7 +467,7 @@

    Source code for ocrd_validators.page_validator

    textEquivs[0].set_Unicode(text)

    [docs]class PageValidator(): - """ + """ Validator for `OcrdPage <../ocrd_models/ocrd_models.ocrd_page.html>`. """ @@ -479,7 +477,7 @@

    Source code for ocrd_validators.page_validator

    def validate(filename=None, ocrd_page=None, ocrd_file=None, page_textequiv_consistency='strict', page_textequiv_strategy='first', check_baseline=True, check_coords=True): - """ + """ Validates a PAGE file for consistency by filename, OcrdFile or passing OcrdPage directly. Arguments: @@ -567,7 +565,7 @@

    Quick search

    - + @@ -584,8 +582,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_validators/parameter_validator.html b/site/core/_modules/ocrd_validators/parameter_validator.html index ff1882e6e..c16b22012 100644 --- a/site/core/_modules/ocrd_validators/parameter_validator.html +++ b/site/core/_modules/ocrd_validators/parameter_validator.html @@ -1,18 +1,16 @@ - - + - ocrd_validators.parameter_validator — ocrd 2.41.0 documentation - - - - - - - + ocrd_validators.parameter_validator — ocrd 2.58.1 documentation + + + + + + @@ -44,12 +42,12 @@

    Source code for ocrd_validators.parameter_validator

    #
    [docs]class ParameterValidator(JsonValidator): - """ + """ JsonValidator validating parametersagains ocrd-tool.json. """
    [docs] def validate(self, *args, **kwargs): # pylint: disable=arguments-differ - """ + """ Validate a parameter dict against a parameter schema from an ocrd-tool.json Args: @@ -59,7 +57,7 @@

    Source code for ocrd_validators.parameter_validator

    return super(ParameterValidator, self)._validate(*args, **kwargs)
    def __init__(self, ocrd_tool): - """ + """ Construct a ParameterValidator. Arguments: @@ -134,7 +132,7 @@

    Quick search

    - + @@ -151,8 +149,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_validators/processing_server_config_validator.html b/site/core/_modules/ocrd_validators/processing_server_config_validator.html new file mode 100644 index 000000000..18e9ab342 --- /dev/null +++ b/site/core/_modules/ocrd_validators/processing_server_config_validator.html @@ -0,0 +1,135 @@ + + + + + + + ocrd_validators.processing_server_config_validator — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +

    Source code for ocrd_validators.processing_server_config_validator

    +"""
    +Validating configuration file for the Processing-Server
    +"""
    +from .constants import PROCESSING_SERVER_CONFIG_SCHEMA
    +from .json_validator import JsonValidator
    +
    +
    +# TODO: provide a link somewhere in this file as it is done in ocrd_tool.schema.yml but best with a
    +#  working link. Currently it is here:
    +#  https://github.com/OCR-D/spec/pull/222/files#diff-a71bf71cbc7d9ce94fded977f7544aba4df9e7bdb8fc0cf1014e14eb67a9b273
    +#  But that is a PR not merged yet
    +
    [docs]class ProcessingServerConfigValidator(JsonValidator): + """ + JsonValidator validating against the schema for the Processing Server + """ + +
    [docs] @staticmethod + def validate(obj, schema=PROCESSING_SERVER_CONFIG_SCHEMA): + """ + Validate against schema for Processing-Server + """ + return JsonValidator.validate(obj, schema)
    +
    + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/_modules/ocrd_validators/resource_list_validator.html b/site/core/_modules/ocrd_validators/resource_list_validator.html index f34081d8f..7442e2ce9 100644 --- a/site/core/_modules/ocrd_validators/resource_list_validator.html +++ b/site/core/_modules/ocrd_validators/resource_list_validator.html @@ -1,18 +1,16 @@ - - + - ocrd_validators.resource_list_validator — ocrd 2.41.0 documentation - - - - - - - + ocrd_validators.resource_list_validator — ocrd 2.58.1 documentation + + + + + + @@ -47,13 +45,13 @@

    Source code for ocrd_validators.resource_list_validator

    #
    [docs]class OcrdResourceListValidator(JsonValidator): - """ + """ JsonValidator validating against the ``resource_list.yml`` schema. """
    [docs] @staticmethod def validate(obj, schema=RESOURCE_LIST_SCHEMA): - """ + """ Validate against ``resource_list.schema.yml`` schema. """ return JsonValidator(schema, validator_class=DefaultValidatingDraft6Validator)._validate(obj)
    @@ -110,7 +108,7 @@

    Quick search

    - + @@ -127,8 +125,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_validators/workspace_validator.html b/site/core/_modules/ocrd_validators/workspace_validator.html index 353bc38db..00beec8ac 100644 --- a/site/core/_modules/ocrd_validators/workspace_validator.html +++ b/site/core/_modules/ocrd_validators/workspace_validator.html @@ -1,18 +1,16 @@ - - + - ocrd_validators.workspace_validator — ocrd 2.41.0 documentation - - - - - - - + ocrd_validators.workspace_validator — ocrd 2.58.1 documentation + + + + + + @@ -55,13 +53,13 @@

    Source code for ocrd_validators.workspace_validator

    #
    [docs]class WorkspaceValidator(): - """ - Validates an OCR-D/METS workspace against the specs. + """ + Validator for `OcrdMets <../ocrd_models/ocrd_models.ocrd_mets.html>`. """
    [docs] @staticmethod def check_file_grp(workspace, input_file_grp=None, output_file_grp=None, page_id=None, report=None): - """ + """ Return a report on whether input_file_grp is/are in workspace.mets and output_file_grp is/are not. To be run before processing @@ -99,7 +97,7 @@

    Source code for ocrd_validators.workspace_validator

    def __init__(self, resolver, mets_url, src_dir=None, skip=None, download=False, page_strictness='strict', page_coordinate_consistency='poly'): - """ + """ Construct a new WorkspaceValidator. Args: @@ -108,8 +106,14 @@

    Source code for ocrd_validators.workspace_validator

    src_dir (string): skip (list): download (boolean): - page_strictness ("strict"|"lax"|"fix"|"off"): - page_coordinate_consistency ("poly"|"baseline"|"both"|"off"): + page_strictness ("strict"|"lax"|"fix"|"off"): how strict to check + multi-level TextEquiv consistency of PAGE XML files + page_coordinate_consistency ("poly"|"baseline"|"both"|"off"): check whether each + segment's coords are fully contained within its parent's: + * `"poly"`: *Region/TextLine/Word/Glyph in Border/*Region/TextLine/Word + * `"baseline"`: Baseline in TextLine + * `"both"`: both `poly` and `baseline` checks + * `"off"`: no coordinate checks """ self.report = ValidationReport() self.skip = skip if skip else [] @@ -122,6 +126,10 @@

    Source code for ocrd_validators.workspace_validator

    self.download = download self.page_strictness = page_strictness self.page_coordinate_consistency = page_coordinate_consistency + self.page_checks = [] + # there will be more options to come + if 'mets_fileid_page_pcgtsid' not in self.skip: + self.page_checks.append('pcgtsid') self.src_dir = src_dir self.workspace = None @@ -129,15 +137,20 @@

    Source code for ocrd_validators.workspace_validator

    [docs] @staticmethod def validate(*args, **kwargs): - """ + """ Validates the workspace of a METS URL against the specs Arguments: resolver (:class:`ocrd.Resolver`): Resolver mets_url (string): URL of the METS file src_dir (string, None): Directory containing mets file - skip (list): Tests to skip. One or more of 'mets_unique_identifier', 'mets_file_group_names', 'mets_files', 'pixel_density', 'dimension', 'url' - download (boolean): Whether to download files + skip (list): Validation checks to omit. One or more of + 'mets_unique_identifier', 'mets_file_group_names', + 'mets_files', 'pixel_density', 'dimension', 'url', + 'multipage', 'page', 'page_xsd', 'mets_xsd', + 'mets_fileid_page_pcgtsid' + download (boolean): Whether to download remote file references + temporarily during validation (like a processor would) Returns: report (:class:`ValidationReport`) Report on the validity @@ -146,7 +159,7 @@

    Source code for ocrd_validators.workspace_validator

    return validator._validate() # pylint: disable=protected-access
    def _validate(self): - """ + """ Actual validation. """ try: @@ -182,16 +195,16 @@

    Source code for ocrd_validators.workspace_validator

    return self.report def _resolve_workspace(self): - """ + """ Clone workspace from mets_url unless workspace was provided. """ self.log.debug('_resolve_workspace') if self.workspace is None: - self.workspace = self.resolver.workspace_from_url(self.mets_url, src_baseurl=self.src_dir, download=self.download) + self.workspace = self.resolver.workspace_from_url(self.mets_url, src_baseurl=self.src_dir) self.mets = self.workspace.mets def _validate_mets_unique_identifier(self): - """ + """ Validate METS unique identifier exists. See `spec <https://ocr-d.github.io/mets#unique-id-for-the-document-processed>`_. @@ -201,31 +214,32 @@

    Source code for ocrd_validators.workspace_validator

    self.report.add_error("METS has no unique identifier") def _validate_imagefilename(self): - """ + """ Validate that the imageFilename is correctly set to a filename relative to the workspace """ self.log.debug('_validate_imagefilename') for f in self.mets.find_files(mimetype=MIMETYPE_PAGE): - if not is_local_filename(f.url) and not self.download: - self.report.add_notice("Won't download remote PAGE XML <%s>" % f.url) + if not f.local_filename and not self.download: + self.log.warning("Not available locally and 'download' is not set: %s", f) continue self.workspace.download_file(f) page = page_from_file(f).get_Page() imageFilename = page.imageFilename if not self.mets.find_files(url=imageFilename): - self.report.add_error("PAGE-XML %s : imageFilename '%s' not found in METS" % (f.url, imageFilename)) + self.report.add_error("PAGE-XML %s : imageFilename '%s' not found in METS" % (f.local_filename, imageFilename)) if is_local_filename(imageFilename) and not Path(imageFilename).exists(): - self.report.add_warning("PAGE-XML %s : imageFilename '%s' points to non-existent local file" % (f.url, imageFilename)) + self.report.add_warning("PAGE-XML %s : imageFilename '%s' points to non-existent local file" % (f.local_filename, imageFilename)) def _validate_dimension(self): - """ + """ Validate image height and PAGE imageHeight match """ self.log.info('_validate_dimension') for f in self.mets.find_files(mimetype=MIMETYPE_PAGE): - if not is_local_filename(f.url) and not self.download: - self.report.add_notice("_validate_dimension: Not executed because --download wasn't set and PAGE might reference remote (Alternative)Images <%s>" % f.url) + if not f.local_filename and not self.download: + self.log.warning("Not available locally and 'download' is not set: %s", f) continue + self.workspace.download_file(f) page = page_from_file(f).get_Page() _, _, exif = self.workspace.image_from_page(page, f.pageId) if page.imageHeight != exif.height: @@ -234,43 +248,45 @@

    Source code for ocrd_validators.workspace_validator

    self.report.add_error("PAGE '%s': @imageWidth != image's actual width (%s != %s)" % (f.ID, page.imageWidth, exif.width)) def _validate_multipage(self): - """ + """ Validate the number of images per file is 1 (TIFF allows multi-page images) See `spec <https://ocr-d.github.io/mets#no-multi-page-images>`_. """ self.log.debug('_validate_multipage') - for f in [f for f in self.mets.find_files() if f.mimetype.startswith('image/')]: - if not is_local_filename(f.url) and not self.download: - self.report.add_notice("Won't download remote image <%s>" % f.url) + for f in self.mets.find_files(mimetype='//image/.*'): + if not f.local_filename and not self.download: + self.log.warning("Not available locally and 'download' is not set: %s", f) continue + self.workspace.download_file(f) try: - exif = self.workspace.resolve_image_exif(f.url) + exif = self.workspace.resolve_image_exif(f.local_filename) if exif.n_frames > 1: self.report.add_error("Image %s: More than 1 frame: %s" % (f.ID, exif.n_frames)) except FileNotFoundError: - self.report.add_error("Image %s: Could not retrieve %s" % (f.ID, f.url)) + self.report.add_error("Image %s: Could not retrieve %s (local_filename=%s, url=%s)" % (f.ID, f.local_filename, f.url)) return def _validate_pixel_density(self): - """ + """ Validate image pixel density See `spec <https://ocr-d.github.io/mets#pixel-density-of-images-must-be-explicit-and-high-enough>`_. """ self.log.debug('_validate_pixel_density') - for f in [f for f in self.mets.find_files() if f.mimetype.startswith('image/')]: - if not is_local_filename(f.url) and not self.download: - self.report.add_notice("Won't download remote image <%s>" % f.url) + for f in self.mets.find_files(mimetype='//image/.*'): + if not f.local_filename and not self.download: + self.log.warning("Not available locally and 'download' is not set: %s", f) continue - exif = self.workspace.resolve_image_exif(f.url) + self.workspace.download_file(f) + exif = self.workspace.resolve_image_exif(f.local_filename) for k in ['xResolution', 'yResolution']: v = exif.__dict__.get(k) if v is None or v <= 72: self.report.add_notice("Image %s: %s (%s pixels per %s) is suspiciously low" % (f.ID, k, v, exif.resolutionUnit)) def _validate_mets_file_group_names(self): - """ + """ Ensure ``USE`` attributes of ``mets:fileGrp`` conform to OCR-D naming schema.. See `spec <https://ocr-d.github.io/mets#file-group-use-syntax>`_. @@ -295,7 +311,7 @@

    Source code for ocrd_validators.workspace_validator

    self.report.add_notice("Invalid USE name '%s' in fileGrp '%s'" % (name, fileGrp)) def _validate_mets_files(self): - """ + """ Validate ``mets:file`` URLs are sane. """ self.log.debug('_validate_mets_files') @@ -306,12 +322,10 @@

    Source code for ocrd_validators.workspace_validator

    for f in self.mets.find_files(): if f._el.get('GROUPID'): # pylint: disable=protected-access self.report.add_notice("File '%s' has GROUPID attribute - document might need an update" % f.ID) - if not f.pageId: - self.report.add_error("File '%s' does not manifest any physical page." % f.ID) - if not f.url: - self.report.add_error("File '%s' has no mets:Flocat/@xlink:href" % f.ID) + if not (f.url or f.local_filename): + self.report.add_error("File '%s' has neither mets:Flocat[@LOCTYPE='URL']/@xlink:href nor mets:FLocat[@LOCTYPE='OTHER'][@OTHERLOCTYPE='FILE']/xlink:href" % f.ID) continue - if 'url' not in self.skip and ':/' in f.url: + if f.url and 'url' not in self.skip: if re.match(r'^file:/[^/]', f.url): self.report.add_error("File '%s' has an invalid (Java-specific) file URL '%s'" % (f.ID, f.url)) scheme = f.url[0:f.url.index(':')] @@ -319,34 +333,40 @@

    Source code for ocrd_validators.workspace_validator

    self.report.add_warning("File '%s' has non-HTTP, non-file URL '%s'" % (f.ID, f.url)) def _validate_page(self): - """ + """ Run PageValidator on the PAGE-XML documents referenced in the METS. """ self.log.debug('_validate_page') - for ocrd_file in self.mets.find_files(mimetype=MIMETYPE_PAGE): - self.workspace.download_file(ocrd_file) - page_report = PageValidator.validate(ocrd_file=ocrd_file, + for f in self.mets.find_files(mimetype=MIMETYPE_PAGE): + if not f.local_filename and not self.download: + self.log.warning("Not available locally and 'download' is not set: %s", f) + continue + self.workspace.download_file(f) + page_report = PageValidator.validate(ocrd_file=f, page_textequiv_consistency=self.page_strictness, check_coords=self.page_coordinate_consistency in ['poly', 'both'], check_baseline=self.page_coordinate_consistency in ['baseline', 'both']) - pg = page_from_file(ocrd_file) - if pg.pcGtsId != ocrd_file.ID: - page_report.add_warning('pc:PcGts/@pcGtsId differs from mets:file/@ID: "%s" !== "%s"' % (pg.pcGtsId or '', ocrd_file.ID or '')) + pg = page_from_file(f) + if 'pcgtsid' in self.page_checks and pg.pcGtsId != f.ID: + page_report.add_warning('pc:PcGts/@pcGtsId differs from mets:file/@ID: "%s" !== "%s"' % (pg.pcGtsId or '', f.ID or '')) self.report.merge_report(page_report) def _validate_page_xsd(self): - """ + """ Validate all PAGE-XML files against PAGE XSD schema """ self.log.debug('_validate_page_xsd') - for ocrd_file in self.mets.find_files(mimetype=MIMETYPE_PAGE): - self.workspace.download_file(ocrd_file) - for err in XsdPageValidator.validate(Path(ocrd_file.local_filename)).errors: - self.report.add_error("%s: %s" % (ocrd_file.ID, err)) - self.log.debug("Finished alidating all PAGE-XML files against XSD") + for f in self.mets.find_files(mimetype=MIMETYPE_PAGE): + if not f.local_filename and not self.download: + self.log.warning("Not available locally and 'download' is not set: %s", f) + continue + self.workspace.download_file(f) + for err in XsdPageValidator.validate(Path(f.local_filename)).errors: + self.report.add_error("%s: %s" % (f.ID, err)) + self.log.debug("Finished validating all PAGE-XML files against XSD") def _validate_mets_xsd(self): - """ + """ Validate METS against METS XSD schema """ self.log.debug('_validate_mets_xsd') @@ -406,7 +426,7 @@

    Quick search

    - + @@ -423,8 +443,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_validators/xsd_mets_validator.html b/site/core/_modules/ocrd_validators/xsd_mets_validator.html index 05b569e84..37b4d677d 100644 --- a/site/core/_modules/ocrd_validators/xsd_mets_validator.html +++ b/site/core/_modules/ocrd_validators/xsd_mets_validator.html @@ -1,18 +1,16 @@ - - + - ocrd_validators.xsd_mets_validator — ocrd 2.41.0 documentation - - - - - - - + ocrd_validators.xsd_mets_validator — ocrd 2.58.1 documentation + + + + + + @@ -38,13 +36,13 @@

    Source code for ocrd_validators.xsd_mets_validator

    from .constants import XSD_METS_URL
    [docs]class XsdMetsValidator(XsdValidator): - """ + """ XML Schema validator. """
    [docs] @classmethod def validate(cls, doc): # pylint: disable=arguments-differ - """ + """ Validate an XML document against a schema Args: @@ -103,7 +101,7 @@

    Quick search

    - + @@ -120,8 +118,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_validators/xsd_page_validator.html b/site/core/_modules/ocrd_validators/xsd_page_validator.html index 7f54c4869..e4f888ee1 100644 --- a/site/core/_modules/ocrd_validators/xsd_page_validator.html +++ b/site/core/_modules/ocrd_validators/xsd_page_validator.html @@ -1,18 +1,16 @@ - - + - ocrd_validators.xsd_page_validator — ocrd 2.41.0 documentation - - - - - - - + ocrd_validators.xsd_page_validator — ocrd 2.58.1 documentation + + + + + + @@ -38,13 +36,13 @@

    Source code for ocrd_validators.xsd_page_validator

    from .constants import XSD_PAGE_URL
    [docs]class XsdPageValidator(XsdValidator): - """ + """ XML Schema validator. """
    [docs] @classmethod def validate(cls, doc): # pylint: disable=arguments-differ - """ + """ Validate an XML document against a schema Args: @@ -103,7 +101,7 @@

    Quick search

    - + @@ -120,8 +118,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_modules/ocrd_validators/xsd_validator.html b/site/core/_modules/ocrd_validators/xsd_validator.html index 4fb56b07e..8439db766 100644 --- a/site/core/_modules/ocrd_validators/xsd_validator.html +++ b/site/core/_modules/ocrd_validators/xsd_validator.html @@ -1,18 +1,16 @@ - - + - ocrd_validators.xsd_validator — ocrd 2.41.0 documentation - - - - - - - + ocrd_validators.xsd_validator — ocrd 2.58.1 documentation + + + + + + @@ -50,7 +48,7 @@

    Source code for ocrd_validators.xsd_validator

    #
    [docs]class XsdValidator(): - """ + """ XML Schema validator. """ _instances = {} @@ -64,7 +62,7 @@

    Source code for ocrd_validators.xsd_validator

    [docs] @classmethod def validate(cls, schema_url, doc): - """ + """ Validate an XML document against a schema. Args: @@ -74,7 +72,7 @@

    Source code for ocrd_validators.xsd_validator

    return cls.instance(schema_url)._validate(doc) # pylint: disable=protected-access
    def __init__(self, schema_url): - """ + """ Construct an XsdValidator. Args: @@ -87,7 +85,7 @@

    Source code for ocrd_validators.xsd_validator

    self._xmlschema = ET.XMLSchema(xmlschema_doc) def _validate(self, doc): - """ + """ Do the actual validation. Arguments: @@ -158,7 +156,7 @@

    Quick search

    - + @@ -175,8 +173,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13
    diff --git a/site/core/_sources/api/ocrd/ocrd.cli.network.rst.txt b/site/core/_sources/api/ocrd/ocrd.cli.network.rst.txt new file mode 100644 index 000000000..aa6f35e1f --- /dev/null +++ b/site/core/_sources/api/ocrd/ocrd.cli.network.rst.txt @@ -0,0 +1,7 @@ +ocrd.cli.network module +======================= + +.. automodule:: ocrd.cli.network + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd/ocrd.cli.rst.txt b/site/core/_sources/api/ocrd/ocrd.cli.rst.txt index dfff6af3e..59ae69c10 100644 --- a/site/core/_sources/api/ocrd/ocrd.cli.rst.txt +++ b/site/core/_sources/api/ocrd/ocrd.cli.rst.txt @@ -14,6 +14,7 @@ Submodules ocrd.cli.bashlib ocrd.cli.log + ocrd.cli.network ocrd.cli.ocrd_tool ocrd.cli.process ocrd.cli.resmgr diff --git a/site/core/_sources/api/ocrd/ocrd.mets_server.rst.txt b/site/core/_sources/api/ocrd/ocrd.mets_server.rst.txt new file mode 100644 index 000000000..5c5246037 --- /dev/null +++ b/site/core/_sources/api/ocrd/ocrd.mets_server.rst.txt @@ -0,0 +1,7 @@ +ocrd.mets\_server module +======================== + +.. automodule:: ocrd.mets_server + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd/ocrd.processor.builtin.dummy.rst.txt b/site/core/_sources/api/ocrd/ocrd.processor.builtin.dummy.rst.txt new file mode 100644 index 000000000..4bb5c5501 --- /dev/null +++ b/site/core/_sources/api/ocrd/ocrd.processor.builtin.dummy.rst.txt @@ -0,0 +1,7 @@ +ocrd.processor.builtin.dummy package +==================================== + +.. automodule:: ocrd.processor.builtin.dummy + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd/ocrd.processor.builtin.rst.txt b/site/core/_sources/api/ocrd/ocrd.processor.builtin.rst.txt index 4aaa9d888..27107ceb2 100644 --- a/site/core/_sources/api/ocrd/ocrd.processor.builtin.rst.txt +++ b/site/core/_sources/api/ocrd/ocrd.processor.builtin.rst.txt @@ -6,6 +6,14 @@ ocrd.processor.builtin package :undoc-members: :show-inheritance: +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + ocrd.processor.builtin.dummy + Submodules ---------- diff --git a/site/core/_sources/api/ocrd/ocrd.rst.txt b/site/core/_sources/api/ocrd/ocrd.rst.txt index af534e8d0..b44edf29d 100644 --- a/site/core/_sources/api/ocrd/ocrd.rst.txt +++ b/site/core/_sources/api/ocrd/ocrd.rst.txt @@ -23,6 +23,7 @@ Submodules :maxdepth: 4 ocrd.constants + ocrd.mets_server ocrd.resolver ocrd.resource_manager ocrd.task_sequence diff --git a/site/core/_sources/api/ocrd_network/modules.rst.txt b/site/core/_sources/api/ocrd_network/modules.rst.txt new file mode 100644 index 000000000..db9c09aa9 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/modules.rst.txt @@ -0,0 +1,7 @@ +ocrd_network +============ + +.. toctree:: + :maxdepth: 4 + + ocrd_network diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.cli.client.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.cli.client.rst.txt new file mode 100644 index 000000000..fb45f1904 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.cli.client.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.cli.client module +=============================== + +.. automodule:: ocrd_network.cli.client + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.cli.processing_server.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.cli.processing_server.rst.txt new file mode 100644 index 000000000..bf812ea31 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.cli.processing_server.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.cli.processing\_server module +=========================================== + +.. automodule:: ocrd_network.cli.processing_server + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.cli.processing_worker.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.cli.processing_worker.rst.txt new file mode 100644 index 000000000..18fea5401 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.cli.processing_worker.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.cli.processing\_worker module +=========================================== + +.. automodule:: ocrd_network.cli.processing_worker + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.cli.processor_server.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.cli.processor_server.rst.txt new file mode 100644 index 000000000..cb6f9218d --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.cli.processor_server.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.cli.processor\_server module +========================================== + +.. automodule:: ocrd_network.cli.processor_server + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.cli.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.cli.rst.txt new file mode 100644 index 000000000..3c8f35a9d --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.cli.rst.txt @@ -0,0 +1,18 @@ +ocrd\_network.cli package +========================= + +.. automodule:: ocrd_network.cli + :members: + :undoc-members: + :show-inheritance: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + ocrd_network.cli.client + ocrd_network.cli.processing_server + ocrd_network.cli.processing_worker + ocrd_network.cli.processor_server diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.client.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.client.rst.txt new file mode 100644 index 000000000..3394fcfff --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.client.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.client module +=========================== + +.. automodule:: ocrd_network.client + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.database.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.database.rst.txt new file mode 100644 index 000000000..7b4fd2a7d --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.database.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.database module +============================= + +.. automodule:: ocrd_network.database + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.deployer.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.deployer.rst.txt new file mode 100644 index 000000000..205a331ba --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.deployer.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.deployer module +============================= + +.. automodule:: ocrd_network.deployer + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.deployment_utils.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.deployment_utils.rst.txt new file mode 100644 index 000000000..cc1f315ac --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.deployment_utils.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.deployment\_utils module +====================================== + +.. automodule:: ocrd_network.deployment_utils + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.logging.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.logging.rst.txt new file mode 100644 index 000000000..d2ac721d1 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.logging.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.logging module +============================ + +.. automodule:: ocrd_network.logging + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.models.job.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.models.job.rst.txt new file mode 100644 index 000000000..8444e2a34 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.models.job.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.models.job module +=============================== + +.. automodule:: ocrd_network.models.job + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.models.messages.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.models.messages.rst.txt new file mode 100644 index 000000000..755334aac --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.models.messages.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.models.messages module +==================================== + +.. automodule:: ocrd_network.models.messages + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.models.ocrd_tool.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.models.ocrd_tool.rst.txt new file mode 100644 index 000000000..9c89dd9a2 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.models.ocrd_tool.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.models.ocrd\_tool module +====================================== + +.. automodule:: ocrd_network.models.ocrd_tool + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.models.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.models.rst.txt new file mode 100644 index 000000000..dba609ccb --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.models.rst.txt @@ -0,0 +1,18 @@ +ocrd\_network.models package +============================ + +.. automodule:: ocrd_network.models + :members: + :undoc-members: + :show-inheritance: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + ocrd_network.models.job + ocrd_network.models.messages + ocrd_network.models.ocrd_tool + ocrd_network.models.workspace diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.models.workspace.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.models.workspace.rst.txt new file mode 100644 index 000000000..30b3af73b --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.models.workspace.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.models.workspace module +===================================== + +.. automodule:: ocrd_network.models.workspace + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.param_validators.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.param_validators.rst.txt new file mode 100644 index 000000000..d98a05180 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.param_validators.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.param\_validators module +====================================== + +.. automodule:: ocrd_network.param_validators + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_utils/ocrd_utils.package_resources.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.process_helpers.rst.txt similarity index 52% rename from site/core/_sources/api/ocrd_utils/ocrd_utils.package_resources.rst.txt rename to site/core/_sources/api/ocrd_network/ocrd_network.process_helpers.rst.txt index 0c9f335eb..2ffcf9c30 100644 --- a/site/core/_sources/api/ocrd_utils/ocrd_utils.package_resources.rst.txt +++ b/site/core/_sources/api/ocrd_network/ocrd_network.process_helpers.rst.txt @@ -1,7 +1,7 @@ -ocrd\_utils.package\_resources module +ocrd\_network.process\_helpers module ===================================== -.. automodule:: ocrd_utils.package_resources +.. automodule:: ocrd_network.process_helpers :members: :undoc-members: :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.processing_server.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.processing_server.rst.txt new file mode 100644 index 000000000..47d4159ce --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.processing_server.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.processing\_server module +======================================= + +.. automodule:: ocrd_network.processing_server + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.processing_worker.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.processing_worker.rst.txt new file mode 100644 index 000000000..6a274dbe7 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.processing_worker.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.processing\_worker module +======================================= + +.. automodule:: ocrd_network.processing_worker + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.processor_server.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.processor_server.rst.txt new file mode 100644 index 000000000..c1ac2b4e8 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.processor_server.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.processor\_server module +====================================== + +.. automodule:: ocrd_network.processor_server + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.connector.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.connector.rst.txt new file mode 100644 index 000000000..74e58b5e6 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.connector.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.rabbitmq\_utils.connector module +============================================== + +.. automodule:: ocrd_network.rabbitmq_utils.connector + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.constants.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.constants.rst.txt new file mode 100644 index 000000000..19463abd8 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.constants.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.rabbitmq\_utils.constants module +============================================== + +.. automodule:: ocrd_network.rabbitmq_utils.constants + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.consumer.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.consumer.rst.txt new file mode 100644 index 000000000..e3e6ba3e2 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.consumer.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.rabbitmq\_utils.consumer module +============================================= + +.. automodule:: ocrd_network.rabbitmq_utils.consumer + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.ocrd_messages.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.ocrd_messages.rst.txt new file mode 100644 index 000000000..4dddef9b7 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.ocrd_messages.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.rabbitmq\_utils.ocrd\_messages module +=================================================== + +.. automodule:: ocrd_network.rabbitmq_utils.ocrd_messages + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.publisher.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.publisher.rst.txt new file mode 100644 index 000000000..4303c4eda --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.publisher.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.rabbitmq\_utils.publisher module +============================================== + +.. automodule:: ocrd_network.rabbitmq_utils.publisher + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.rst.txt new file mode 100644 index 000000000..36b581a33 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.rabbitmq_utils.rst.txt @@ -0,0 +1,19 @@ +ocrd\_network.rabbitmq\_utils package +===================================== + +.. automodule:: ocrd_network.rabbitmq_utils + :members: + :undoc-members: + :show-inheritance: + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + ocrd_network.rabbitmq_utils.connector + ocrd_network.rabbitmq_utils.constants + ocrd_network.rabbitmq_utils.consumer + ocrd_network.rabbitmq_utils.ocrd_messages + ocrd_network.rabbitmq_utils.publisher diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.rst.txt new file mode 100644 index 000000000..bcecb065c --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.rst.txt @@ -0,0 +1,38 @@ +ocrd\_network package +===================== + +.. automodule:: ocrd_network + :members: + :undoc-members: + :show-inheritance: + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + ocrd_network.cli + ocrd_network.models + ocrd_network.rabbitmq_utils + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + ocrd_network.client + ocrd_network.database + ocrd_network.deployer + ocrd_network.deployment_utils + ocrd_network.logging + ocrd_network.param_validators + ocrd_network.process_helpers + ocrd_network.processing_server + ocrd_network.processing_worker + ocrd_network.processor_server + ocrd_network.runtime_data + ocrd_network.server_cache + ocrd_network.server_utils + ocrd_network.utils diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.runtime_data.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.runtime_data.rst.txt new file mode 100644 index 000000000..fefa00b49 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.runtime_data.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.runtime\_data module +================================== + +.. automodule:: ocrd_network.runtime_data + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.server_cache.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.server_cache.rst.txt new file mode 100644 index 000000000..dcf708acb --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.server_cache.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.server\_cache module +================================== + +.. automodule:: ocrd_network.server_cache + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.server_utils.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.server_utils.rst.txt new file mode 100644 index 000000000..1f02aa4ab --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.server_utils.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.server\_utils module +================================== + +.. automodule:: ocrd_network.server_utils + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_network/ocrd_network.utils.rst.txt b/site/core/_sources/api/ocrd_network/ocrd_network.utils.rst.txt new file mode 100644 index 000000000..1873c6975 --- /dev/null +++ b/site/core/_sources/api/ocrd_network/ocrd_network.utils.rst.txt @@ -0,0 +1,7 @@ +ocrd\_network.utils module +========================== + +.. automodule:: ocrd_network.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_utils/ocrd_utils.config.rst.txt b/site/core/_sources/api/ocrd_utils/ocrd_utils.config.rst.txt new file mode 100644 index 000000000..25141f449 --- /dev/null +++ b/site/core/_sources/api/ocrd_utils/ocrd_utils.config.rst.txt @@ -0,0 +1,7 @@ +ocrd\_utils.config module +========================= + +.. automodule:: ocrd_utils.config + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_utils/ocrd_utils.rst.txt b/site/core/_sources/api/ocrd_utils/ocrd_utils.rst.txt index b894bdb7d..60d1db041 100644 --- a/site/core/_sources/api/ocrd_utils/ocrd_utils.rst.txt +++ b/site/core/_sources/api/ocrd_utils/ocrd_utils.rst.txt @@ -12,11 +12,11 @@ Submodules .. toctree:: :maxdepth: 4 + ocrd_utils.config ocrd_utils.constants ocrd_utils.deprecate ocrd_utils.image ocrd_utils.introspect ocrd_utils.logging ocrd_utils.os - ocrd_utils.package_resources ocrd_utils.str diff --git a/site/core/_sources/api/ocrd_validators/ocrd_validators.ocrd_network_message_validator.rst.txt b/site/core/_sources/api/ocrd_validators/ocrd_validators.ocrd_network_message_validator.rst.txt new file mode 100644 index 000000000..fbd3f9eb9 --- /dev/null +++ b/site/core/_sources/api/ocrd_validators/ocrd_validators.ocrd_network_message_validator.rst.txt @@ -0,0 +1,7 @@ +ocrd\_validators.ocrd\_network\_message\_validator module +========================================================= + +.. automodule:: ocrd_validators.ocrd_network_message_validator + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_validators/ocrd_validators.processing_server_config_validator.rst.txt b/site/core/_sources/api/ocrd_validators/ocrd_validators.processing_server_config_validator.rst.txt new file mode 100644 index 000000000..e0db49244 --- /dev/null +++ b/site/core/_sources/api/ocrd_validators/ocrd_validators.processing_server_config_validator.rst.txt @@ -0,0 +1,7 @@ +ocrd\_validators.processing\_server\_config\_validator module +============================================================= + +.. automodule:: ocrd_validators.processing_server_config_validator + :members: + :undoc-members: + :show-inheritance: diff --git a/site/core/_sources/api/ocrd_validators/ocrd_validators.rst.txt b/site/core/_sources/api/ocrd_validators/ocrd_validators.rst.txt index c02fc5ae2..7f5dbac55 100644 --- a/site/core/_sources/api/ocrd_validators/ocrd_validators.rst.txt +++ b/site/core/_sources/api/ocrd_validators/ocrd_validators.rst.txt @@ -14,10 +14,12 @@ Submodules ocrd_validators.constants ocrd_validators.json_validator + ocrd_validators.ocrd_network_message_validator ocrd_validators.ocrd_tool_validator ocrd_validators.ocrd_zip_validator ocrd_validators.page_validator ocrd_validators.parameter_validator + ocrd_validators.processing_server_config_validator ocrd_validators.resource_list_validator ocrd_validators.workspace_validator ocrd_validators.xsd_mets_validator diff --git a/site/core/_static/alabaster.css b/site/core/_static/alabaster.css index 0eddaeb07..517d0b29c 100644 --- a/site/core/_static/alabaster.css +++ b/site/core/_static/alabaster.css @@ -419,7 +419,9 @@ table.footnote td { } dl { - margin: 0; + margin-left: 0; + margin-right: 0; + margin-top: 0; padding: 0; } diff --git a/site/core/_static/basic.css b/site/core/_static/basic.css index bf18350b6..cfc60b86c 100644 --- a/site/core/_static/basic.css +++ b/site/core/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -222,7 +222,7 @@ table.modindextable td { /* -- general body styles --------------------------------------------------- */ div.body { - min-width: 450px; + min-width: 360px; max-width: 800px; } @@ -237,16 +237,6 @@ a.headerlink { visibility: hidden; } -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -335,12 +325,16 @@ p.sidebar-title { font-weight: bold; } +nav.contents, +aside.topic, div.admonition, div.topic, blockquote { clear: left; } /* -- topics ---------------------------------------------------------------- */ +nav.contents, +aside.topic, div.topic { border: 1px solid #ccc; padding: 7px; @@ -379,6 +373,8 @@ div.body p.centered { div.sidebar > :last-child, aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, div.topic > :last-child, div.admonition > :last-child { margin-bottom: 0; @@ -386,6 +382,8 @@ div.admonition > :last-child { div.sidebar::after, aside.sidebar::after, +nav.contents::after, +aside.topic::after, div.topic::after, div.admonition::after, blockquote::after { @@ -428,10 +426,6 @@ table.docutils td, table.docutils th { border-bottom: 1px solid #aaa; } -table.footnote td, table.footnote th { - border: 0 !important; -} - th { text-align: left; padding-right: 5px; @@ -615,19 +609,26 @@ ul.simple p { margin-bottom: 0; } -dl.footnote > dt, -dl.citation > dt { +aside.footnote > span, +div.citation > span { float: left; - margin-right: 0.5em; } - -dl.footnote > dd, -dl.citation > dd { +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { margin-bottom: 0em; } - -dl.footnote > dd:after, -dl.citation > dd:after { +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { content: ""; clear: both; } @@ -644,10 +645,6 @@ dl.field-list > dt { padding-right: 5px; } -dl.field-list > dt:after { - content: ":"; -} - dl.field-list > dd { padding-left: 0.5em; margin-top: 0em; @@ -673,6 +670,16 @@ dd { margin-left: 30px; } +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + dl > dd:last-child, dl > dd:last-child > :last-child { margin-bottom: 0; @@ -741,6 +748,14 @@ abbr, acronym { cursor: help; } +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + /* -- code displays --------------------------------------------------------- */ pre { diff --git a/site/core/_static/doctools.js b/site/core/_static/doctools.js index e1bfd708b..d06a71d75 100644 --- a/site/core/_static/doctools.js +++ b/site/core/_static/doctools.js @@ -2,357 +2,155 @@ * doctools.js * ~~~~~~~~~~~ * - * Sphinx JavaScript utilities for all documentation. + * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); } - return result; }; -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - /** * Small JavaScript module for the documentation. */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - this.initOnKeyListeners(); +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); }, /** * i18n support */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", // gettext and ngettext don't access this so that the functions // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists } }, - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; }, - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - var url = new URL(window.location); - url.searchParams.delete('highlight'); - window.history.replaceState({}, '', url); + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; }, - /** + /** * helper function to focus on search bar */ - focusSearchBar : function() { - $('input[name=q]').first().focus(); + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); }, /** - * make the url absolute + * Initialise the domain index toggle buttons */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); }, - initOnKeyListeners: function() { + initOnKeyListeners: () => { // only install a listener if it is really needed - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - return; - - $(document).keydown(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box, textarea, dropdown or button - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && activeElementType !== 'BUTTON') { - if (event.altKey || event.ctrlKey || event.metaKey) - return; - - if (!event.shiftKey) { - switch (event.key) { - case 'ArrowLeft': - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) - break; - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - break; - case 'ArrowRight': - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) - break; - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - break; - case 'Escape': - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - break; - Documentation.hideSearchWords(); - return false; - } - } - - // some keyboard layouts may need Shift to get / + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { switch (event.key) { - case '/': - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - break; - Documentation.focusSearchBar(); - return false; + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; } } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } }); - } + }, }; // quick alias for translations -_ = Documentation.gettext; +const _ = Documentation.gettext; -$(document).ready(function() { - Documentation.init(); -}); +_ready(Documentation.init); diff --git a/site/core/_static/documentation_options.js b/site/core/_static/documentation_options.js index c4bc65a4a..df113cb0d 100644 --- a/site/core/_static/documentation_options.js +++ b/site/core/_static/documentation_options.js @@ -1,7 +1,7 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2.41.0', - LANGUAGE: 'None', + VERSION: '2.58.1', + LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', FILE_SUFFIX: '.html', diff --git a/site/core/_static/jquery-3.5.1.js b/site/core/_static/jquery-3.5.1.js deleted file mode 100644 index 50937333b..000000000 --- a/site/core/_static/jquery-3.5.1.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
    " ], - col: [ 2, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - + + + ocrd — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@ - + @@ -145,8 +176,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.cli.bashlib module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.cli.bashlib module — ocrd 2.58.1 documentation + + + + + + @@ -37,45 +35,45 @@
    -

    ocrd.cli.bashlib module

    +

    ocrd.cli.bashlib module

    OCR-D CLI: bash library

    -

    ocrd bashlib

    +

    ocrd bashlib

    Work with bash library

    -
    ocrd bashlib [OPTIONS] COMMAND [ARGS]...
    +
    ocrd bashlib [OPTIONS] COMMAND [ARGS]...
     
    -

    constants

    +

    constants

    Query constants from ocrd_utils and ocrd_models

    -
    ocrd bashlib constants [OPTIONS] NAME
    +
    ocrd bashlib constants [OPTIONS] NAME
     

    Arguments

    -NAME
    +NAME

    Required argument

    -

    filename

    +

    filename

    Dump the bash library filename for sourcing by shell scripts

    For functions exported by bashlib, see ../../README.md

    -
    ocrd bashlib filename [OPTIONS]
    +
    ocrd bashlib filename [OPTIONS]
     
    -

    input-files

    +

    input-files

    List input files for processing

    Instantiate a processor and workspace from the given processing options. Then loop through the input files of the input fileGrp, and for each one, print its url, ID, mimetype and pageId, as well as its recommended outputFileId (from make_file_id).

    (The printing format is one associative array initializer per line.)

    -
    ocrd bashlib input-files [OPTIONS]
    +
    ocrd bashlib input-files [OPTIONS]
     

    Options

    @@ -93,13 +91,13 @@

    input-files
    --I, --input-file-grp <input_file_grp>
    +-I, --input-file-grp <input_file_grp>

    File group(s) used as input.

    --O, --output-file-grp <output_file_grp>
    +-O, --output-file-grp <output_file_grp>

    File group(s) used as output.

    @@ -132,7 +130,7 @@

    input-files-l, --log-level <log_level>

    Log level

    -
    Options
    +
    Options:

    OFF | ERROR | WARN | INFO | DEBUG | TRACE

    @@ -215,7 +213,7 @@

    Quick search

    - + @@ -232,8 +230,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.cli package — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.cli package — ocrd 2.58.1 documentation + + + + + + @@ -37,12 +35,12 @@
    -

    ocrd.cli package

    +

    ocrd.cli package

    OCR-D Command-line interface

    -

    ocrd

    +

    ocrd

    Entry-point of multi-purpose CLI for OCR-D

    -
    ocrd [OPTIONS] COMMAND [ARGS]...
    +
    ocrd [OPTIONS] COMMAND [ARGS]...
     

    Options

    @@ -57,12 +55,126 @@

    ocrd-l, --log-level <log_level>

    Log level

    -
    Options
    +
    Options:

    OFF | ERROR | WARN | INFO | DEBUG | TRACE

    +
    +
    Variables:
    +
    +
    PATH
    +
    +
    Search path for processor executables
    +
    (affects ocrd process and ocrd resmgr)
    +
    +
    HOME
    +
    +
    Directory to look for ocrd_logging.conf,
    +
    fallback for unset XDG variables. (Default:
    +
    “/home/kba”)
    +
    +
    XDG_CONFIG_HOME
    +
    +
    Directory to look for ./ocrd-resources/* (i.e.
    +
    ocrd resmgr data location) (Default:
    +
    “/home/kba/.config”)
    +
    +
    XDG_DATA_HOME
    +
    +
    Directory to look for ./ocrd/resources.yml (i.e.
    +
    ocrd resmgr user database) (Default:
    +
    “/home/kba/.local/share”)
    +
    +
    OCRD_DOWNLOAD_RETRIES
    +
    +
    Number of times to retry failed attempts for
    +
    downloads of workspace files.
    +
    +
    OCRD_DOWNLOAD_TIMEOUT
    +
    +
    Timeout in seconds for connecting or reading
    +
    (comma-separated) when downloading.
    +
    +
    OCRD_METS_CACHING
    +
    +
    If set to true, access to the METS file is
    +
    cached, speeding in-memory search and
    +
    modification.
    +
    +
    OCRD_DOWNLOAD_TIMEOUT
    +
    +
    Timeout in seconds for connecting or reading
    +
    (comma-separated) when downloading.
    +
    +
    OCRD_MAX_PROCESSOR_CACHE
    +
    +
    Maximum number of processor instances (for each
    +
    set of parameters) to be kept in memory (including
    +
    loaded models) for processing workers or processor
    +
    servers. (Default: “128”)
    +
    +
    OCRD_NETWORK_SERVER_ADDR_PROCESSING
    +
    +
    Default address of Processing Server to connect to
    +
    (for ocrd network client processing). (Default:
    +
    “”)
    +
    +
    OCRD_NETWORK_SERVER_ADDR_WORKFLOW
    +
    +
    Default address of Workflow Server to connect to
    +
    (for ocrd network client workflow). (Default:
    +
    “”)
    +
    +
    OCRD_NETWORK_SERVER_ADDR_WORKSPACE
    +
    +
    Default address of Workspace Server to connect to
    +
    (for ocrd network client workspace). (Default:
    +
    “”)
    +
    +
    OCRD_NETWORK_WORKER_QUEUE_CONNECT_ATTEMPTS
    +
    +
    Number of attempts for a worker to create its
    +
    queue. Helpfull if the rabbitmq-server needs time
    +
    to be fully started (Default: “3”)
    +
    +
    OCRD_PROFILE_FILE
    +
    +
    If set, then the CPU profile is written to this
    +
    file for later peruse with a analysis tools like
    +
    snakeviz
    +
    +
    OCRD_PROFILE
    +
    +
    Whether to enable gathering runtime statistics
    +
    on the ocrd.profile logger (comma-separated):
    +
    - CPU: yields CPU and wall-time,
    +
    - RSS: also yields peak memory (resident set size)
    +
    - PSS: also yields peak memory (proportional set size)
    +
    +
    (Default: “”)
    +
    +
    +
    OCRD_NETWORK_SOCKETS_ROOT_DIR
    +
    +
    The root directory where all mets server related
    +
    socket files are created (Default:
    +
    “/tmp/ocrd_network_sockets”)
    +
    +
    OCRD_NETWORK_LOGS_ROOT_DIR
    +
    +
    The root directory where all ocrd_network related
    +
    file logs are stored (Default:
    +
    “/tmp/ocrd_network_logs”)
    +
    +
    OCRD_LOGGING_DEBUG
    +
    +
    Print information about the logging setup to
    +
    STDERR (Default: “False”)
    +
    +
    +

    Commands

    @@ -76,6 +188,12 @@

    ocrd

    Logging

    +
    +
    +network
    +

    Managing network components

    +
    +
    ocrd-tool
    @@ -103,7 +221,7 @@

    ocrd
    workspace
    -

    Working with workspace

    +

    Managing workspaces

    @@ -114,7 +232,7 @@

    ocrd

    -

    Submodules

    +

    Submodules

    - + @@ -312,8 +459,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.cli.log module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.cli.log module — ocrd 2.58.1 documentation + + + + + + - + @@ -37,12 +35,14 @@
    -

    ocrd.cli.log module

    +

    ocrd.cli.log module

    OCR-D CLI: Logging

    -

    ocrd log

    +

    ocrd log

    Logging

    -
    ocrd log [OPTIONS] COMMAND [ARGS]...
    +

    Logger name will be ocrd.OCRD_TOOL_NAME where OCRD_TOOL_NAME is normally +(when using bashlib) the name of the processor.

    +
    ocrd log [OPTIONS] COMMAND [ARGS]...
     

    Options

    @@ -51,8 +51,9 @@

    ocrd log-n, --name <LOGGER_NAME>

    Name of the logger

    -
    Default
    -

    +
    Default:
    +

    log_cli

    +
    @@ -66,85 +67,85 @@

    ocrd log -

    critical

    +

    critical

    Log a CRITICAL message

    -
    ocrd log critical [OPTIONS] [MSGS]...
    +
    ocrd log critical [OPTIONS] [MSGS]...
     

    Arguments

    -MSGS
    +MSGS

    Optional argument(s)

    -

    debug

    +

    debug

    Log a DEBUG message

    -
    ocrd log debug [OPTIONS] [MSGS]...
    +
    ocrd log debug [OPTIONS] [MSGS]...
     

    Arguments

    -MSGS
    +MSGS

    Optional argument(s)

    -

    error

    +

    error

    Log a ERROR message

    -
    ocrd log error [OPTIONS] [MSGS]...
    +
    ocrd log error [OPTIONS] [MSGS]...
     

    Arguments

    -MSGS
    +MSGS

    Optional argument(s)

    -

    info

    +

    info

    Log a INFO message

    -
    ocrd log info [OPTIONS] [MSGS]...
    +
    ocrd log info [OPTIONS] [MSGS]...
     

    Arguments

    -MSGS
    +MSGS

    Optional argument(s)

    -

    trace

    +

    trace

    Log a TRACE message

    -
    ocrd log trace [OPTIONS] [MSGS]...
    +
    ocrd log trace [OPTIONS] [MSGS]...
     

    Arguments

    -MSGS
    +MSGS

    Optional argument(s)

    -

    warning

    +

    warning

    Log a WARNING message

    -
    ocrd log warning [OPTIONS] [MSGS]...
    +
    ocrd log warning [OPTIONS] [MSGS]...
     

    Arguments

    -MSGS
    +MSGS

    Optional argument(s)

    @@ -220,7 +221,7 @@

    Related Topics

  • ocrd package
  • @@ -236,7 +237,7 @@

    Quick search

    - + @@ -253,8 +254,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | + + + + + + + ocrd.cli.network module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd.cli.network module

    +

    OCR-D CLI: management of network components

    +
    +

    ocrd network

    +

    Managing network components

    +
    ocrd network [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +

    client

    +

    A client for interacting with the network modules. +The client CLI mimics the WebAPI endpoints

    +
    ocrd network client [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +

    discovery

    +

    The discovery endpoint of the WebAPI

    +
    ocrd network client discovery [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +
    +

    processing

    +

    The processing endpoint of the WebAPI

    +
    ocrd network client processing [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +
    processor
    +
    ocrd network client processing processor [OPTIONS] PROCESSOR_NAME
    +
    +
    +

    Options

    +
    +
    +--address <address>
    +
    + +
    +
    +-m, --mets <mets>
    +

    Required

    +
    + +
    +
    +-I, --input-file-grp <input_file_grp>
    +
    + +
    +
    +-O, --output-file-grp <output_file_grp>
    +
    + +
    +
    +-g, --page-id <page_id>
    +
    + +
    +
    +-p, --parameter <parameter>
    +

    Parameters, either JSON string or path to JSON file

    +
    + +
    +
    +--result-queue-name <result_queue_name>
    +
    + +
    +
    +--callback-url <callback_url>
    +
    + +
    +
    +--agent-type <agent_type>
    +
    + +

    Arguments

    +
    +
    +PROCESSOR_NAME
    +

    Required argument

    +
    + +
    +
    +
    +

    workflow

    +

    The workflow endpoint of the WebAPI

    +
    ocrd network client workflow [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +
    +

    workspace

    +

    The workspace endpoint of the WebAPI

    +
    ocrd network client workspace [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +
    +
    +

    processing-server

    +

    Start the Processing Server +(proxy between the user and the +Processing Worker(s) / Processor Server(s))

    +
    ocrd network processing-server [OPTIONS] PATH_TO_CONFIG
    +
    +
    +

    Options

    +
    +
    +-a, --address <address>
    +

    Required The URL of the Processing server, format: host:port

    +
    + +

    Arguments

    +
    +
    +PATH_TO_CONFIG
    +

    Required argument

    +
    + +
    +
    +

    processing-worker

    +

    Start Processing Worker +(a specific ocr-d processor consuming tasks from RabbitMQ queue)

    +
    ocrd network processing-worker [OPTIONS] PROCESSOR_NAME
    +
    +
    +

    Options

    +
    +
    +-q, --queue <queue>
    +

    Required The URL of the Queue Server, format: amqp://username:password@host:port/vhost

    +
    + +
    +
    +-d, --database <database>
    +

    Required The URL of the MongoDB, format: mongodb://host:port

    +
    + +

    Arguments

    +
    +
    +PROCESSOR_NAME
    +

    Required argument

    +
    + +
    +
    +

    processor-server

    +

    Start Processor Server +(standalone REST API OCR-D processor)

    +
    ocrd network processor-server [OPTIONS] PROCESSOR_NAME
    +
    +
    +

    Options

    +
    +
    +-a, --address <address>
    +

    Required The URL of the processor server, format: host:port

    +
    + +
    +
    +-d, --database <database>
    +

    Required The URL of the MongoDB, format: mongodb://host:port

    +
    + +

    Arguments

    +
    +
    +PROCESSOR_NAME
    +

    Required argument

    +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd/ocrd.cli.ocrd_tool.html b/site/core/api/ocrd/ocrd.cli.ocrd_tool.html index 2586295fb..dbc4a11b0 100644 --- a/site/core/api/ocrd/ocrd.cli.ocrd_tool.html +++ b/site/core/api/ocrd/ocrd.cli.ocrd_tool.html @@ -1,23 +1,21 @@ - - + - - - ocrd.cli.ocrd_tool module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.cli.ocrd_tool module — ocrd 2.58.1 documentation + + + + + + - + @@ -37,135 +35,142 @@
    -

    ocrd.cli.ocrd_tool module

    +

    ocrd.cli.ocrd_tool module

    OCR-D CLI: ocrd-tool.json management

    -

    ocrd ocrd-tool

    +

    ocrd ocrd-tool

    Work with ocrd-tool.json JSON_FILE

    -
    ocrd ocrd-tool [OPTIONS] JSON_FILE COMMAND [ARGS]...
    +
    ocrd ocrd-tool [OPTIONS] JSON_FILE COMMAND [ARGS]...
     

    Arguments

    -JSON_FILE
    +JSON_FILE

    Required argument

    -
    -

    list-tools

    +
    +

    list-tools

    List tools

    -
    ocrd ocrd-tool list-tools [OPTIONS]
    +
    ocrd ocrd-tool JSON_FILE list-tools [OPTIONS]
     
    -
    -

    tool

    +
    +

    tool

    Work with a single tool TOOL_NAME

    -
    ocrd ocrd-tool tool [OPTIONS] TOOL_NAME COMMAND [ARGS]...
    +
    ocrd ocrd-tool JSON_FILE tool [OPTIONS] TOOL_NAME COMMAND [ARGS]...
     

    Arguments

    -
    -TOOL_NAME
    +
    +TOOL_NAME

    Required argument

    -
    -

    categories

    +
    +

    categories

    Categories of tool

    -
    ocrd ocrd-tool tool categories [OPTIONS]
    +
    ocrd ocrd-tool JSON_FILE tool TOOL_NAME categories [OPTIONS]
     
    -
    -

    description

    +
    +

    description

    Describe tool

    -
    ocrd ocrd-tool tool description [OPTIONS]
    +
    ocrd ocrd-tool JSON_FILE tool TOOL_NAME description [OPTIONS]
     
    -
    -

    dump

    +
    +

    dump

    Dump JSON of tool

    -
    ocrd ocrd-tool tool dump [OPTIONS]
    +
    ocrd ocrd-tool JSON_FILE tool TOOL_NAME dump [OPTIONS]
     
    -
    -

    help

    +
    +

    help

    Generate help for processors

    -
    ocrd ocrd-tool tool help [OPTIONS]
    +
    ocrd ocrd-tool JSON_FILE tool TOOL_NAME help [OPTIONS] [SUBCOMMAND]
     
    +

    Arguments

    +
    +
    +SUBCOMMAND
    +

    Optional argument

    +
    +
    -
    -

    list-resources

    +
    +

    list-resources

    List tool’s file resources

    -
    ocrd ocrd-tool tool list-resources [OPTIONS]
    +
    ocrd ocrd-tool JSON_FILE tool TOOL_NAME list-resources [OPTIONS]
     
    -
    -

    parse-params

    +
    +

    parse-params

    Parse parameters with fallback to defaults and output as shell-eval’able assignments to params var.

    -
    ocrd ocrd-tool tool parse-params [OPTIONS]
    +
    ocrd ocrd-tool JSON_FILE tool TOOL_NAME parse-params [OPTIONS]
     

    Options

    -
    --p, --parameter <parameter>
    +
    +-p, --parameter <parameter>

    Parameters, either JSON string or path to JSON file

    -
    --P, --parameter-override <parameter_override>
    +
    +-P, --parameter-override <parameter_override>

    Parameter override

    -
    --j, --json
    +
    +-j, --json

    Output JSON instead of shell variables

    -
    -

    show-resource

    +
    +

    show-resource

    Dump a tool’s file resource

    -
    ocrd ocrd-tool tool show-resource [OPTIONS] RES_NAME
    +
    ocrd ocrd-tool JSON_FILE tool TOOL_NAME show-resource [OPTIONS] RES_NAME
     

    Arguments

    -
    -RES_NAME
    +
    +RES_NAME

    Required argument

    -
    -

    steps

    +
    +

    steps

    Steps of tool

    -
    ocrd ocrd-tool tool steps [OPTIONS]
    +
    ocrd ocrd-tool JSON_FILE tool TOOL_NAME steps [OPTIONS]
     
    -
    -

    validate

    +
    +

    validate

    Validate an ocrd-tool.json

    -
    ocrd ocrd-tool validate [OPTIONS]
    +
    ocrd ocrd-tool JSON_FILE validate [OPTIONS]
     
    -
    -

    version

    +
    +

    version

    Version of ocrd-tool.json

    -
    ocrd ocrd-tool version [OPTIONS]
    +
    ocrd ocrd-tool JSON_FILE version [OPTIONS]
     
    @@ -234,7 +239,7 @@

    Related Topics

  • ocrd
  • - + @@ -268,8 +273,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.cli.process module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.cli.process module — ocrd 2.58.1 documentation + + + + + + @@ -37,12 +35,12 @@
    -

    ocrd.cli.process module

    +

    ocrd.cli.process module

    OCR-D CLI: running task sequences (workflow processing)

    -

    ocrd process

    +

    ocrd process

    Process a series of tasks

    -
    ocrd process [OPTIONS] TASKS...
    +
    ocrd process [OPTIONS] TASKS...
     

    Options

    @@ -51,7 +49,7 @@

    ocrd process-l, --log-level <log_level>

    Log level

    -
    Options
    +
    Options:

    OFF | ERROR | WARN | INFO | DEBUG | TRACE

    @@ -78,7 +76,7 @@

    ocrd processArguments

    -TASKS
    +TASKS

    Required argument(s)

    @@ -158,7 +156,7 @@

    Quick search

    - + @@ -175,8 +173,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.cli.resmgr module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.cli.resmgr module — ocrd 2.58.1 documentation + + + + + + @@ -37,16 +35,16 @@
    -

    ocrd.cli.resmgr module

    +

    ocrd.cli.resmgr module

    OCR-D CLI: management of processor resources

    -

    ocrd resmgr

    +

    ocrd resmgr

    Managing processor resources

    -
    ocrd resmgr [OPTIONS] COMMAND [ARGS]...
    +
    ocrd resmgr [OPTIONS] COMMAND [ARGS]...
     
    -

    download

    +

    download

    Download resource NAME for processor EXECUTABLE.

    NAME is the name of the resource made available by downloading or copying.

    If NAME is ‘*’ (asterisk), then download all known registered resources for this processor.

    @@ -54,7 +52,7 @@

    download--resource-type is set to archive, then that archive gets unpacked after download, and its --path-in-archive will subsequently be renamed to NAME.

    -
    ocrd resmgr download [OPTIONS] EXECUTABLE [NAME]
    +
    ocrd resmgr download [OPTIONS] EXECUTABLE [NAME]
     

    Options

    @@ -66,7 +64,7 @@

    download
    --D, --no-dynamic
    +-D, --no-dynamic

    Whether to skip looking into each processor’s –dump-{json,module-dir} for module-level resources

    @@ -75,7 +73,7 @@

    download-t, --resource-type <resource_type>

    Type of resource

    -
    Options
    +
    Options:

    file | directory | archive

    @@ -83,7 +81,7 @@

    download
    --P, --path-in-archive <path_in_archive>
    +-P, --path-in-archive <path_in_archive>

    Path to extract in case of archive type

    @@ -104,7 +102,7 @@

    download-l, --location <location>

    Where to store resources - defaults to first location in processor’s ‘resource_locations’ list or finally ‘data’

    -
    Options
    +
    Options:

    data | cwd | system | module

    @@ -113,27 +111,27 @@

    downloadArguments

    -EXECUTABLE
    +EXECUTABLE

    Required argument

    -NAME
    +NAME

    Optional argument

    -

    list-available

    +

    list-available

    List available resources

    -
    ocrd resmgr list-available [OPTIONS]
    +
    ocrd resmgr list-available [OPTIONS]
     

    Options

    --D, --no-dynamic
    +-D, --no-dynamic

    Whether to skip looking into each processor’s –dump-{json,module-dir} for module-level resources

    @@ -145,9 +143,9 @@

    list-available
    -

    list-installed

    +

    list-installed

    List installed resources

    -
    ocrd resmgr list-installed [OPTIONS]
    +
    ocrd resmgr list-installed [OPTIONS]
     

    Options

    @@ -159,15 +157,15 @@

    list-installed
    -

    migrate

    +

    migrate

    Update the configuration after updating core to MIGRATION

    -
    ocrd resmgr migrate [OPTIONS] [2.37.0]
    +
    ocrd resmgr migrate [OPTIONS] {2.37.0}
     

    Arguments

    -MIGRATION
    +MIGRATION

    Required argument

    @@ -253,7 +251,7 @@

    Quick search

    - + @@ -270,8 +268,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.cli.validate module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.cli.validate module — ocrd 2.58.1 documentation + + + + + + @@ -37,18 +35,18 @@
    -

    ocrd.cli.validate module

    +

    ocrd.cli.validate module

    OCR-D CLI: syntax validation

    -

    ocrd validate

    +

    ocrd validate

    All the validation in one CLI

    -
    ocrd validate [OPTIONS] COMMAND [ARGS]...
    +
    ocrd validate [OPTIONS] COMMAND [ARGS]...
     
    -

    page

    +

    page

    Validate PAGE against OCR-D conventions

    -
    ocrd validate page [OPTIONS] PAGE
    +
    ocrd validate page [OPTIONS] PAGE
     

    Options

    @@ -57,7 +55,7 @@

    page--page-textequiv-consistency <page_textequiv_consistency>

    How strict to check PAGE multi-level textequiv consistency

    -
    Options
    +
    Options:

    strict | lax | fix | off

    @@ -68,7 +66,7 @@

    page--page-textequiv-strategy <page_textequiv_strategy>

    Strategy to determine the correct textequiv

    -
    Options
    +
    Options:

    first

    @@ -89,41 +87,41 @@

    pageArguments

    -PAGE
    +PAGE

    Required argument

    -

    parameters

    +

    parameters

    Validate PARAM_JSON against parameter definition of EXECUTABLE in OCRD_TOOL

    -
    ocrd validate parameters [OPTIONS] OCRD_TOOL EXECUTABLE PARAM_JSON
    +
    ocrd validate parameters [OPTIONS] OCRD_TOOL EXECUTABLE PARAM_JSON
     

    Arguments

    -OCRD_TOOL
    +OCRD_TOOL

    Required argument

    -EXECUTABLE
    +EXECUTABLE

    Required argument

    -PARAM_JSON
    +PARAM_JSON

    Required argument

    -

    tasks

    +

    tasks

    Validate a sequence of tasks passable to ‘ocrd process’

    -
    ocrd validate tasks [OPTIONS] TASKS...
    +
    ocrd validate tasks [OPTIONS] TASKS...
     

    Options

    @@ -135,7 +133,7 @@

    tasks
    --M, --mets-basename <mets_basename>
    +-M, --mets-basename <mets_basename>

    Basename of the METS file, used in conjunction with –workspace

    @@ -154,21 +152,21 @@

    tasksArguments

    -TASKS
    +TASKS

    Required argument(s)

    -

    tool-json

    +

    tool-json

    Validate OCRD_TOOL as an ocrd-tool.json file.

    -
    ocrd validate tool-json [OPTIONS] [OCRD_TOOL]
    +
    ocrd validate tool-json [OPTIONS] [OCRD_TOOL]
     

    Arguments

    -OCRD_TOOL
    +OCRD_TOOL

    Optional argument

    @@ -249,7 +247,7 @@

    Quick search

    - + @@ -266,8 +264,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.cli.workspace module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.cli.workspace module — ocrd 2.58.1 documentation + + + + + + @@ -37,12 +35,15 @@
    -

    ocrd.cli.workspace module

    +

    ocrd.cli.workspace module

    OCR-D CLI: workspace management

    -

    ocrd workspace

    -

    Working with workspace

    -
    ocrd workspace [OPTIONS] COMMAND [ARGS]...
    +

    ocrd workspace

    +

    Managing workspaces

    +

    A workspace comprises a METS file and a directory as point of reference.

    +

    Operates on the file system directly or via a METS server +(already running via some prior server start subcommand).

    +
    ocrd workspace [OPTIONS] COMMAND [ARGS]...
     

    Options

    @@ -54,16 +55,22 @@

    ocrd workspace
    --M, --mets-basename <mets_basename>
    +-M, --mets-basename <mets_basename>

    METS file basename. Deprecated, use –mets/–directory

    -
    --m, --mets <METS_URL>
    +
    +-m, --mets <METS_URL>

    The path/URL of the METS file [default: WORKSPACE_DIR/mets.xml]

    +
    +
    +-U, --mets-server-url <mets_server_url>
    +

    TCP host of METS server

    +
    +
    --backup
    @@ -80,16 +87,16 @@

    ocrd workspace -

    add

    +

    add

    Add a file or http(s) URL FNAME to METS in a workspace. If FNAME is not an http(s) URL and is not a workspace-local existing file, try to copy to workspace.

    -
    ocrd workspace add [OPTIONS] FNAME
    +
    ocrd workspace add [OPTIONS] FNAME
     

    Options

    --G, --file-grp <FILE_GRP>
    +-G, --file-grp <FILE_GRP>

    Required fileGrp USE

    @@ -106,14 +113,14 @@

    add -
    --g, --page-id <PAGE_ID>
    +
    +-g, --page-id <PAGE_ID>

    ID of the physical page

    --C, --check-file-exists
    +-C, --check-file-exists

    Whether to ensure FNAME exists

    @@ -132,35 +139,35 @@

    addArguments

    -FNAME
    +FNAME

    Required argument

    -

    backup

    +

    backup

    Backing and restoring workspaces - dev edition

    -
    ocrd workspace backup [OPTIONS] COMMAND [ARGS]...
    +
    ocrd workspace backup [OPTIONS] COMMAND [ARGS]...
     
    -

    add

    +

    add

    Create a new backup

    -
    ocrd workspace backup add [OPTIONS]
    +
    ocrd workspace backup add [OPTIONS]
     
    -

    list

    +

    list

    List backups

    -
    ocrd workspace backup list [OPTIONS]
    +
    ocrd workspace backup list [OPTIONS]
     
    -

    restore

    +

    restore

    Restore backup BAK

    -
    ocrd workspace backup restore [OPTIONS] BAK
    +
    ocrd workspace backup restore [OPTIONS] BAK
     

    Options

    @@ -173,21 +180,21 @@

    restoreArguments

    -BAK
    +BAK

    Required argument

    -

    undo

    +

    undo

    Restore the last backup

    -
    ocrd workspace backup undo [OPTIONS]
    +
    ocrd workspace backup undo [OPTIONS]
     
    -

    bulk-add

    +

    bulk-add

    Add files in bulk to an OCR-D workspace.

    FILE_GLOB can either be a shell glob expression to match file names, or a list of expressions or ‘-’, in which case expressions are read from STDIN.

    @@ -215,7 +222,7 @@

    bulk-add–file-id ‘FILE_{{ fileGrp }}_{{ pageid }}’

    –page-id ‘PHYS_{{ pageid }}’
    –file-grp “{{ fileGrp }}”
    -
    –url ‘{{ fileGrp }}/FILE_{{ pageid }}.{{ ext }}’
    +
    –local-filename ‘{{ fileGrp }}/FILE_{{ pageid }}.{{ ext }}’
    -
    @@ -227,11 +234,11 @@

    bulk-add -
    } | ocrd workspace bulk-add -r ‘(?P<pageid>.*) (?P<filegrp>.*) (?P<fileid>.*) (?P<url>.*)’

    -G ‘{{ filegrp }}’ -g ‘{{ pageid }}’ -i ‘{{ fileid }}’ -S ‘{{ url }}’ -

    +
    } | ocrd workspace bulk-add -r ‘(?P<pageid>.*) (?P<filegrp>.*) (?P<fileid>.*) (?P<local_filename>.*)’

    -G ‘{{ filegrp }}’ -g ‘{{ pageid }}’ -i ‘{{ fileid }}’ -S ‘{{ local_filename }}’ -

    -
    ocrd workspace bulk-add [OPTIONS] FILE_GLOB...
    +
    ocrd workspace bulk-add [OPTIONS] FILE_GLOB...
     

    Options

    @@ -256,13 +263,19 @@

    bulk-add
    -i, --file-id <file_id>
    -

    ID of the file

    +

    ID of the file. If not provided, derive from fileGrp and filename

    -u, --url <url>
    -

    local filesystem path in the workspace directory (copied from source file if different)

    +

    Remote URL of the file

    +
    + +
    +
    +-l, --local-filename <local_filename>
    +

    Local filesystem path in the workspace directory (copied from source file if different)

    @@ -279,7 +292,7 @@

    bulk-add
    --S, --source-path <src_path_option>
    +-S, --source-path <src_path_option>

    File path to copy from (if different from FILE_GLOB values)

    @@ -296,26 +309,26 @@

    bulk-add -
    --s, --skip
    +
    +-s, --skip

    Skip files not matching –regex (instead of failing)

    Arguments

    -FILE_GLOB
    +FILE_GLOB

    Required argument(s)

    -

    clone

    +

    clone

    Create a workspace from METS_URL and return the directory

    METS_URL can be a URL, an absolute path or a path relative to $PWD. If METS_URL is not provided, use –mets accordingly. METS_URL can also be an OAI-PMH GetRecord URL wrapping a METS file.

    -
    ocrd workspace clone [OPTIONS] METS_URL [WORKSPACE_DIR]
    +
    ocrd workspace clone [OPTIONS] METS_URL [WORKSPACE_DIR]
     

    Options

    @@ -334,25 +347,25 @@

    cloneArguments

    -METS_URL
    +METS_URL

    Required argument

    -WORKSPACE_DIR
    +WORKSPACE_DIR

    Optional argument

    -

    find

    +

    find

    Find files.

    (If any FILTER starts with //, then its remainder

    will be interpreted as a regular expression.)

    -
    ocrd workspace find [OPTIONS]
    +
    ocrd workspace find [OPTIONS]
     

    Options

    @@ -385,7 +398,7 @@

    find-k, --output-field <output_field>

    Output field. Repeat for multiple fields, will be joined with tab

    -
    Options
    +
    Options:

    url | mimetype | page_id | pageId | file_id | ID | file_grp | fileGrp | basename | basename_without_extension | local_filename

    @@ -397,6 +410,12 @@

    find +
    +--undo-download
    +

    Remove all downloaded files from the METS

    +
    +
    --wait <wait>
    @@ -405,16 +424,16 @@

    find -

    get-id

    +

    get-id

    Get METS id if any

    -
    ocrd workspace get-id [OPTIONS]
    +
    ocrd workspace get-id [OPTIONS]
     

    -

    init

    +

    init

    Create a workspace with an empty METS file in –directory.

    -
    ocrd workspace init [OPTIONS] [DIRECTORY]
    +
    ocrd workspace init [OPTIONS] [DIRECTORY]
     

    Options

    @@ -427,34 +446,34 @@

    initArguments

    -DIRECTORY
    +DIRECTORY

    Optional argument

    -

    list-group

    +

    list-group

    List fileGrp USE attributes

    -
    ocrd workspace list-group [OPTIONS]
    +
    ocrd workspace list-group [OPTIONS]
     
    -

    list-page

    +

    list-page

    List physical page IDs

    -
    ocrd workspace list-page [OPTIONS]
    +
    ocrd workspace list-page [OPTIONS]
     
    -

    merge

    +

    merge

    Merges this workspace with the workspace that contains METS_PATH

    Pass a JSON string or file to --fileGrp-mapping, --fileId-mapping or --pageId-mapping in order to rename all fileGrp, file ID or page ID values, respectively.

    The --file-id, --page-id, --mimetype and --file-grp options have the same semantics as in ocrd workspace find, see ocrd workspace find --help for an explanation.

    -
    ocrd workspace merge [OPTIONS] METS_PATH
    +
    ocrd workspace merge [OPTIONS] METS_PATH
     

    Options

    @@ -475,27 +494,27 @@

    merge--copy-files, --no-copy-files

    Copy files as well

    -
    Default
    -

    True

    +
    Default:
    +

    True

    ---fileGrp-mapping <filegrp_mapping>
    +--fileGrp-mapping <filegrp_mapping>

    JSON object mapping src to dest fileGrp

    ---fileId-mapping <fileid_mapping>
    +--fileId-mapping <fileid_mapping>

    JSON object mapping src to dest file ID

    ---pageId-mapping <pageid_mapping>
    +--pageId-mapping <pageid_mapping>

    JSON object mapping src to dest page ID

    @@ -526,25 +545,25 @@

    mergeArguments

    -METS_PATH
    +METS_PATH

    Required argument

    -

    prune-files

    +

    prune-files

    Removes mets:files that point to non-existing local files

    (If any FILTER starts with //, then its remainder

    will be interpreted as a regular expression.)

    -
    ocrd workspace prune-files [OPTIONS]
    +
    ocrd workspace prune-files [OPTIONS]
     

    Options

    --G, --file-grp <FILTER>
    +-G, --file-grp <FILTER>

    fileGrp USE

    @@ -555,8 +574,8 @@

    prune-files -
    --g, --page-id <FILTER>
    +
    +-g, --page-id <FILTER>

    Page ID

    @@ -568,13 +587,13 @@

    prune-files -

    remove

    +

    remove

    Delete files (given by their ID attribute ID).

    (If any ID starts with //, then its remainder

    will be interpreted as a regular expression.)

    -
    ocrd workspace remove [OPTIONS] [ID]...
    +
    ocrd workspace remove [OPTIONS] [ID]...
     

    Options

    @@ -593,19 +612,19 @@

    removeArguments

    -ID
    +ID

    Optional argument(s)

    -

    remove-group

    +

    remove-group

    Delete fileGrps (given by their USE attribute GROUP).

    (If any GROUP starts with //, then its remainder

    will be interpreted as a regular expression.)

    -
    ocrd workspace remove-group [OPTIONS] [GROUP]...
    +
    ocrd workspace remove-group [OPTIONS] [GROUP]...
     

    Options

    @@ -630,55 +649,77 @@

    remove-groupArguments

    -GROUP
    +GROUP

    Optional argument(s)

    -

    rename-group

    +

    rename-group

    Rename fileGrp (USE attribute NEW to OLD).

    -
    ocrd workspace rename-group [OPTIONS] OLD NEW
    +
    ocrd workspace rename-group [OPTIONS] OLD NEW
     

    Arguments

    -OLD
    +OLD

    Required argument

    -NEW
    +NEW

    Required argument

    +
    +
    +

    server

    +

    Control a METS server for this workspace

    +
    ocrd workspace server [OPTIONS] COMMAND [ARGS]...
    +
    +
    +
    +

    start

    +

    Start a METS server

    +

    (For TCP backend, pass a network interface to bind to as the ‘-U/–mets-server-url’ parameter.)

    +
    ocrd workspace server start [OPTIONS]
    +
    +
    +
    +
    +

    stop

    +

    Stop the METS server

    +
    ocrd workspace server stop [OPTIONS]
    +
    +
    +
    -

    set-id

    +

    set-id

    Set METS ID.

    If one of the supported identifier mechanisms is used, will set this identifier.

    Otherwise will create a new <mods:identifier type=”purl”>{{ ID }}</mods:identifier>.

    -
    ocrd workspace set-id [OPTIONS] ID
    +
    ocrd workspace set-id [OPTIONS] ID
     

    Arguments

    -ID
    +ID

    Required argument

    -

    validate

    +

    validate

    Validate a workspace

    METS_URL can be a URL, an absolute path or a path relative to $PWD. If not given, use –mets accordingly.

    Check that the METS and its referenced file contents abide by the OCR-D specifications.

    -
    ocrd workspace validate [OPTIONS] [METS_URL]
    +
    ocrd workspace validate [OPTIONS] [METS_URL]
     

    Options

    @@ -693,8 +734,8 @@

    validate-s, --skip <skip>

    Tests to skip

    -
    Options
    -

    imagefilename | dimension | mets_unique_identifier | mets_file_group_names | mets_files | pixel_density | page | page_xsd | mets_xsd | url

    +
    Options:
    +

    imagefilename | dimension | pixel_density | page | url | page_xsd | mets_fileid_page_pcgtsid | mets_unique_identifier | mets_file_group_names | mets_files | mets_xsd

    @@ -704,7 +745,7 @@

    validate--page-textequiv-consistency, --page-strictness <page_textequiv_consistency>

    How strict to check PAGE multi-level textequiv consistency

    -
    Options
    +
    Options:

    strict | lax | fix | off

    @@ -715,7 +756,7 @@

    validate--page-coordinate-consistency <page_coordinate_consistency>

    How fierce to check PAGE multi-level coordinate consistency

    -
    Options
    +
    Options:

    poly | baseline | both | off

    @@ -724,7 +765,7 @@

    validateArguments

    -METS_URL
    +METS_URL

    Optional argument

    @@ -732,7 +773,7 @@

    validate
    -class ocrd.cli.workspace.WorkspaceCtx(directory, mets_url, mets_basename, automatic_backup)[source]
    +class ocrd.cli.workspace.WorkspaceCtx(directory, mets_url, mets_basename, mets_server_url, automatic_backup)[source]

    Bases: object

    @@ -811,7 +852,7 @@

    Quick search

    - + @@ -828,8 +869,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.cli.zip module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.cli.zip module — ocrd 2.58.1 documentation + + + + + + @@ -37,18 +35,18 @@
    -

    ocrd.cli.zip module

    +

    ocrd.cli.zip module

    OCR-D CLI: OCRD-ZIP (BagIt) management

    -

    ocrd zip

    +

    ocrd zip

    Bag/Spill/Validate OCRD-ZIP bags

    -
    ocrd zip [OPTIONS] COMMAND [ARGS]...
    +
    ocrd zip [OPTIONS] COMMAND [ARGS]...
     
    -

    bag

    +

    bag

    Bag workspace as OCRD-ZIP at DEST

    -
    ocrd zip bag [OPTIONS] [DEST]
    +
    ocrd zip bag [OPTIONS] [DEST]
     

    Options

    @@ -57,19 +55,19 @@

    bag-d, --directory <directory>

    Workspace folder location.

    -
    Default
    -

    .

    +
    Default:
    +

    .

    --M, --mets-basename <mets_basename>
    +-M, --mets-basename <mets_basename>

    Basename of the METS file.

    -
    Default
    -

    mets.xml

    +
    Default:
    +

    mets.xml

    @@ -81,14 +79,8 @@

    bag -
    --I, --in-place
    -

    Replace workspace with bag (like bagit.py does)

    -
    - -
    -
    --m, --mets <mets>
    +
    +-m, --mets <mets>

    location of mets.xml in the bag’s data dir

    @@ -106,7 +98,7 @@

    bag
    --Z, --skip-zip
    +-Z, --skip-zip

    Create a directory but do not ZIP it

    @@ -119,17 +111,17 @@

    bagArguments

    -DEST
    +DEST

    Optional argument

    -

    spill

    +

    spill

    Spill/unpack OCRD-ZIP bag at SRC to DEST

    SRC must exist an be an OCRD-ZIP DEST must not exist and be a directory

    -
    ocrd zip spill [OPTIONS] SRC
    +
    ocrd zip spill [OPTIONS] SRC
     

    Options

    @@ -138,8 +130,8 @@

    spill-d, --dest <dest>

    Workspace folder location.

    -
    Default
    -

    .

    +
    Default:
    +

    .

    @@ -147,40 +139,71 @@

    spillArguments

    -SRC
    +SRC +

    Required argument

    +
    + +

    +
    +

    update

    +

    Recreate files containing checksums (manifest-sha512.txt, tagmanifest-sha512.txt and +‘Payload-Oxum’ contained in bag-info.txt) of an OCRD-ZIP.

    +

    Open the bag (zip file or directory) src, create or update its manifests/checksums and +output to (zip file or directory) dest. It is also possible to output to src / overwrite +src in place when --overwrite-flag is given.

    +
    ocrd zip update [OPTIONS] SRC [DEST]
    +
    +
    +

    Options

    +
    +
    +-o, --overwrite
    +

    overwrite bag in SRC

    +
    + +

    Arguments

    +
    +
    +SRC

    Required argument

    +
    +
    +DEST
    +

    Optional argument

    +
    +
    -

    validate

    +

    validate

    Validate OCRD-ZIP

    SRC must exist an be an OCRD-ZIP, either a ZIP file or a directory.

    -
    ocrd zip validate [OPTIONS] SRC
    +
    ocrd zip validate [OPTIONS] SRC
     

    Options

    --Z, --skip-unzip
    +-Z, --skip-unzip

    Treat SRC as a directory not a ZIP

    --B, --skip-bag
    +-B, --skip-bag

    Whether to skip all checks of manifests and files

    --C, --skip-checksums
    +-C, --skip-checksums

    Whether to omit checksum checks but still check basic BagIt conformance

    --D, --skip-delete
    +-D, --skip-delete

    Whether to skip deleting the unpacked OCRD-ZIP dir after valdiation

    @@ -193,7 +216,7 @@

    validateArguments

    -SRC
    +SRC

    Required argument

    @@ -274,7 +297,7 @@

    Quick search

    - + @@ -291,8 +314,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.constants module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.constants module — ocrd 2.58.1 documentation + + + + + + - + @@ -37,7 +35,7 @@
    -

    ocrd.constants module

    +

    ocrd.constants module

    Constants for ocrd.

    @@ -72,6 +70,7 @@

    Navigation

  • Subpackages
  • Submodules
  • @@ -112,7 +111,7 @@

    Quick search

    - + @@ -129,8 +128,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.decorators package — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.decorators package — ocrd 2.58.1 documentation + + + + + + @@ -37,20 +35,38 @@
    -

    ocrd.decorators package

    +

    ocrd.decorators package

    -ocrd.decorators.ocrd_cli_wrap_processor(processorClass, ocrd_tool=None, mets=None, working_dir=None, dump_json=False, dump_module_dir=False, help=False, profile=False, profile_file=None, version=False, overwrite=False, show_resource=None, list_resources=False, **kwargs)[source]
    +ocrd.decorators.ocrd_cli_wrap_processor(processorClass, mets=None, mets_server_url=None, working_dir=None, dump_json=False, dump_module_dir=False, help=False, profile=False, profile_file=None, version=False, overwrite=False, show_resource=None, list_resources=False, subcommand=None, address=None, queue=None, log_filename=None, database=None, **kwargs)[source] +
    + +
    +
    +ocrd.decorators.check_and_run_network_agent(ProcessorClass, subcommand: str, address: str, database: str, queue: str)[source]
    -

    Submodules

    +

    Submodules

    @@ -87,6 +103,8 @@

    Navigation

  • Subpackages
  • - + @@ -143,8 +161,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.decorators.loglevel_option module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.decorators.loglevel_option module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd.decorators.loglevel_option module

    +

    ocrd.decorators.loglevel_option module

    ocrd.decorators.loglevel_option.ocrd_loglevel(f)[source]
    @@ -77,6 +75,8 @@

    Navigation

  • Subpackages
  • - + @@ -135,8 +135,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.decorators.mets_find_options module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.decorators.mets_find_options module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd.decorators.mets_find_options module

    +

    ocrd.decorators.mets_find_options module

    ocrd.decorators.mets_find_options.mets_find_options(f)[source]
    @@ -76,6 +74,8 @@

    Navigation

  • Subpackages
  • - + @@ -134,8 +134,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.decorators.ocrd_cli_options module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.decorators.ocrd_cli_options module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd.decorators.ocrd_cli_options module

    +

    ocrd.decorators.ocrd_cli_options module

    ocrd.decorators.ocrd_cli_options.ocrd_cli_options(f)[source]
    @@ -86,6 +84,8 @@

    Navigation

  • Subpackages
  • - + @@ -144,8 +144,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.decorators.parameter_option module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.decorators.parameter_option module — ocrd 2.58.1 documentation + + + + + + @@ -37,15 +35,15 @@
    -

    ocrd.decorators.parameter_option module

    +

    ocrd.decorators.parameter_option module

    -ocrd.decorators.parameter_option.parameter_option(f)
    +ocrd.decorators.parameter_option.parameter_option(f: FC) FC
    -ocrd.decorators.parameter_option.parameter_override_option(f)
    +ocrd.decorators.parameter_option.parameter_override_option(f: FC) FC
    @@ -81,6 +79,8 @@

    Navigation

  • Subpackages
  • - + @@ -139,8 +139,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd package — ocrd 2.41.0 documentation - - - - - - - + + + ocrd package — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd package

    +

    ocrd package

    OCR-D reference implementation, base package: decorators and classes for processors and CLIs.

    Related (and dependent) packages:

      @@ -51,7 +49,7 @@ Schemas and routines for validating BagIt, ocrd-tool.json, workspaces, METS, page, CLI parameters etc.

    -

    Subpackages

    +

    Subpackages

    @@ -173,6 +342,7 @@

    Navigation

  • Submodules
  • - + @@ -228,8 +398,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | + + + + + + + ocrd.mets_server module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd.mets_server module

    +

    # METS server functionality

    +
    +
    +class ocrd.mets_server.OcrdFileModel(*, file_grp: str, file_id: str, mimetype: str, page_id: str | None = None, url: str | None = None, local_filename: str | None = None)[source]
    +

    Bases: BaseModel

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +file_grp: str
    +
    + +
    +
    +file_id: str
    +
    + +
    +
    +mimetype: str
    +
    + +
    +
    +page_id: str | None
    +
    + +
    +
    +url: str | None
    +
    + +
    +
    +local_filename: str | None
    +
    + +
    +
    +static create(file_grp: str, file_id: str, page_id: str | None, url: str | None, local_filename: str | Path | None, mimetype: str)[source]
    +
    + +
    + +
    +
    +class ocrd.mets_server.OcrdAgentModel(*, name: str, type: str, role: str, otherrole: str | None = None, othertype: str, notes: List[Tuple[Dict[str, str], str | None]] | None = None)[source]
    +

    Bases: BaseModel

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +name: str
    +
    + +
    +
    +type: str
    +
    + +
    +
    +role: str
    +
    + +
    +
    +otherrole: str | None
    +
    + +
    +
    +othertype: str
    +
    + +
    +
    +notes: List[Tuple[Dict[str, str], str | None]] | None
    +
    + +
    +
    +static create(name: str, _type: str, role: str, otherrole: str, othertype: str, notes: List[Tuple[Dict[str, str], str | None]])[source]
    +
    + +
    + +
    +
    +class ocrd.mets_server.OcrdFileListModel(*, files: List[OcrdFileModel])[source]
    +

    Bases: BaseModel

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +files: List[OcrdFileModel]
    +
    + +
    +
    +static create(files: List[OcrdFile])[source]
    +
    + +
    + +
    +
    +class ocrd.mets_server.OcrdFileGroupListModel(*, file_groups: List[str])[source]
    +

    Bases: BaseModel

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +file_groups: List[str]
    +
    + +
    +
    +static create(file_groups: List[str])[source]
    +
    + +
    + +
    +
    +class ocrd.mets_server.OcrdAgentListModel(*, agents: List[OcrdAgentModel])[source]
    +

    Bases: BaseModel

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +agents: List[OcrdAgentModel]
    +
    + +
    +
    +static create(agents: List[OcrdAgent])[source]
    +
    + +
    + +
    +
    +class ocrd.mets_server.ClientSideOcrdMets(url)[source]
    +

    Bases: object

    +

    Partial substitute for ocrd_models.ocrd_mets.OcrdMets which provides for +ocrd_models.ocrd_mets.OcrdMets.find_files(), +ocrd_models.ocrd_mets.OcrdMets.find_all_files(), and +ocrd_models.ocrd_mets.OcrdMets.add_agent(), +ocrd_models.ocrd_mets.OcrdMets.agents(), +ocrd_models.ocrd_mets.OcrdMets.add_file() to query via HTTP a +ocrd.mets_server.OcrdMetsServer.

    +
    +
    +property workspace_path
    +
    + +
    +
    +reload()[source]
    +
    + +
    +
    +find_files(**kwargs)[source]
    +
    + +
    +
    +find_all_files(*args, **kwargs)[source]
    +
    + +
    +
    +add_agent(*args, **kwargs)[source]
    +
    + +
    +
    +property agents
    +
    + +
    +
    +property unique_identifier
    +
    + +
    +
    +property file_groups
    +
    + +
    +
    +add_file(file_grp, content=None, file_id=None, url=None, local_filename=None, mimetype=None, page_id=None, **kwargs)[source]
    +
    + +
    +
    +save()[source]
    +
    + +
    +
    +stop()[source]
    +
    + +
    + +
    +
    +class ocrd.mets_server.OcrdMetsServer(workspace, url)[source]
    +

    Bases: object

    +
    +
    +shutdown()[source]
    +
    + +
    +
    +startup()[source]
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd/ocrd.processor.base.html b/site/core/api/ocrd/ocrd.processor.base.html index fd2fba96a..69e6740a5 100644 --- a/site/core/api/ocrd/ocrd.processor.base.html +++ b/site/core/api/ocrd/ocrd.processor.base.html @@ -1,19 +1,17 @@ - - + - - - ocrd.processor.base module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.processor.base module — ocrd 2.58.1 documentation + + + + + + @@ -37,11 +35,11 @@
    -

    ocrd.processor.base module

    +

    ocrd.processor.base module

    Processor base class and helper functions.

    -class ocrd.processor.base.Processor(workspace, ocrd_tool=None, parameter=None, input_file_grp='INPUT', output_file_grp='OUTPUT', page_id=None, show_resource=None, list_resources=False, show_help=False, show_version=False, dump_json=False, dump_module_dir=False, version=None)[source]
    +class ocrd.processor.base.Processor(workspace, ocrd_tool=None, parameter=None, input_file_grp='INPUT', output_file_grp='OUTPUT', page_id=None, show_resource=None, list_resources=False, show_help=False, subcommand=None, show_version=False, dump_json=False, dump_module_dir=False, version=None)[source]

    Bases: object

    A processor is a tool that implements the uniform OCR-D command-line interface for run-time data processing. That is, it executes a single workflow step, @@ -54,10 +52,10 @@ dump_json or dump_module_dir is true, setup for processing (parsing and validating parameters, entering the workspace directory).

    -
    Parameters
    +
    Parameters:

    workspace (Workspace) – The workspace to process. Can be None even for processing (esp. on multiple workspaces), but then needs to be set before running.

    -
    Keyword Arguments
    +
    Keyword Arguments:
    • ocrd_tool (string) – JSON of the ocrd-tool description for that processor. Can be None for processing, but needs to be set before running.

    • parameter (string) – JSON of the runtime choices for ocrd-tool parameters. Can be None even for processing, but then needs to be set before running.

    • @@ -67,6 +65,7 @@
    • show_resource (string) – If not None, then instead of processing, resolve given resource by name and print its contents to stdout.

    • list_resources (boolean) – If true, then instead of processing, find all installed resource files in the search paths and print their path names.

    • show_help (boolean) – If true, then instead of processing, print a usage description including the standard CLI and all of this processor’s ocrd-tool parameters and docstrings.

    • +
    • subcommand (string) – ‘worker’ or ‘server’, only used here for the right –help output

    • show_version (boolean) – If true, then instead of processing, print information on this processor’s version and OCR-D version. Exit afterwards.

    • dump_json (boolean) – If true, then instead of processing, print ocrd_tool on stdout.

    • dump_module_dir (boolean) – If true, then instead of processing, print moduledir on stdout.

    • @@ -75,7 +74,7 @@
    -show_help()[source]
    +show_help(subcommand=None)[source]
    @@ -113,7 +112,7 @@

    Resolve a resource name to an absolute file path with the algorithm in https://ocr-d.de/en/spec/ocrd_tool#file-parameters

    -
    Parameters
    +
    Parameters:

    val (string) – resource value to resolve

    @@ -152,7 +151,7 @@

    Algorithm <https://github.com/cisocrgroup/ocrd_cis/pull/57#issuecomment-656336593>_

    -
    Returns
    +
    Returns:

    A list of ocrd_models.ocrd_file.OcrdFile objects.

    @@ -188,7 +187,7 @@

    Multiple matches for PAGE-XML will always raise an exception.

    -
    Keyword Arguments
    +
    Keyword Arguments:
    • require_first (boolean) – If true, then skip a page entirely whenever it is not available in the first input fileGrp.

    • @@ -197,7 +196,7 @@ PAGE or image.

    -
    Returns
    +
    Returns:

    A list of ocrd_models.ocrd_file.OcrdFile tuples.

    @@ -207,13 +206,13 @@
    -ocrd.processor.base.generate_processor_help(ocrd_tool, processor_instance=None)[source]
    +ocrd.processor.base.generate_processor_help(ocrd_tool, processor_instance=None, subcommand=None)[source]

    Generate a string describing the full CLI of this processor including params.

    -
    Parameters
    +
    Parameters:
    • ocrd_tool (dict) – this processor’s tools section of the module’s ocrd-tool.json

    • -
    • processor_instance (object, optional) – the processor implementation +

    • processor_instance – the processor implementation (for adding any module/class/function docstrings)

    @@ -222,7 +221,7 @@
    -ocrd.processor.base.run_cli(executable, mets_url=None, resolver=None, workspace=None, page_id=None, overwrite=None, log_level=None, input_file_grp=None, output_file_grp=None, parameter=None, working_dir=None)[source]
    +ocrd.processor.base.run_cli(executable, mets_url=None, resolver=None, workspace=None, page_id=None, overwrite=None, log_level=None, log_filename=None, input_file_grp=None, output_file_grp=None, parameter=None, working_dir=None, mets_server_url=None)[source]

    Open a workspace and run a processor on the command line.

    If workspace is not none, reuse that. Otherwise, instantiate an Workspace for mets_url (and working_dir) @@ -235,7 +234,7 @@ - parameter (after applying any parameter_override settings)

    (Will create output files and update the in the filesystem).

    -
    Parameters
    +
    Parameters:

    executable (string) – Executable name of the module processor.

    @@ -243,22 +242,23 @@
    -ocrd.processor.base.run_processor(processorClass, ocrd_tool=None, mets_url=None, resolver=None, workspace=None, page_id=None, log_level=None, input_file_grp=None, output_file_grp=None, show_resource=None, list_resources=False, parameter=None, parameter_override=None, working_dir=None)[source]
    +ocrd.processor.base.run_processor(processorClass, mets_url=None, resolver=None, workspace=None, page_id=None, log_level=None, input_file_grp=None, output_file_grp=None, show_resource=None, list_resources=False, parameter=None, parameter_override=None, working_dir=None, mets_server_url=None, instance_caching=False)[source]

    Instantiate a Pythonic processor, open a workspace, run the processor and save the workspace.

    If workspace is not none, reuse that. Otherwise, instantiate an Workspace for mets_url (and working_dir) by using ocrd.Resolver.workspace_from_url() (i.e. open or clone local workspace).

    Instantiate a Python object for processorClass, passing: - the workspace, -- ocrd_tool - page_id - input_file_grp - output_file_grp - parameter (after applying any parameter_override settings)

    +

    Warning: Avoid setting the instance_caching flag to True. It may have unexpected side effects. +This flag is used for an experimental feature we would like to adopt in future.

    Run the processor on the workspace (creating output files in the filesystem).

    Finally, write back the workspace (updating the METS in the filesystem).

    -
    Parameters
    +
    Parameters:

    processorClass (object) – Python class of the module processor.

    @@ -339,7 +339,7 @@

    Quick search

    - + @@ -356,8 +356,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | + + + + + + + ocrd.processor.builtin.dummy package — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd/ocrd.processor.builtin.dummy_processor.html b/site/core/api/ocrd/ocrd.processor.builtin.dummy_processor.html index 2c3818a53..57ff7fa51 100644 --- a/site/core/api/ocrd/ocrd.processor.builtin.dummy_processor.html +++ b/site/core/api/ocrd/ocrd.processor.builtin.dummy_processor.html @@ -1,23 +1,21 @@ - - + - - - ocrd.processor.builtin.dummy_processor module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.processor.builtin.dummy_processor module — ocrd 2.58.1 documentation + + + + + + - + @@ -37,21 +35,21 @@
    -

    ocrd.processor.builtin.dummy_processor module

    +

    ocrd.processor.builtin.dummy_processor module

    class ocrd.processor.builtin.dummy_processor.DummyProcessor(*args, **kwargs)[source]
    -

    Bases: ocrd.processor.base.Processor

    -

    Bare-bones processor that only copies mets:file from input group to output group.

    +

    Bases: Processor

    +

    Bare-bones processor creates PAGE-XML and optionally copies file from input group to output group

    Instantiate, but do not process. Unless list_resources or show_resource or show_help or show_version or dump_json or dump_module_dir is true, setup for processing (parsing and validating parameters, entering the workspace directory).

    -
    Parameters
    +
    Parameters:

    workspace (Workspace) – The workspace to process. Can be None even for processing (esp. on multiple workspaces), but then needs to be set before running.

    -
    Keyword Arguments
    +
    Keyword Arguments:
    • ocrd_tool (string) – JSON of the ocrd-tool description for that processor. Can be None for processing, but needs to be set before running.

    • parameter (string) – JSON of the runtime choices for ocrd-tool parameters. Can be None even for processing, but then needs to be set before running.

    • @@ -61,6 +59,7 @@
    • show_resource (string) – If not None, then instead of processing, resolve given resource by name and print its contents to stdout.

    • list_resources (boolean) – If true, then instead of processing, find all installed resource files in the search paths and print their path names.

    • show_help (boolean) – If true, then instead of processing, print a usage description including the standard CLI and all of this processor’s ocrd-tool parameters and docstrings.

    • +
    • subcommand (string) – ‘worker’ or ‘server’, only used here for the right –help output

    • show_version (boolean) – If true, then instead of processing, print information on this processor’s version and OCR-D version. Exit afterwards.

    • dump_json (boolean) – If true, then instead of processing, print ocrd_tool on stdout.

    • dump_module_dir (boolean) – If true, then instead of processing, print moduledir on stdout.

    • @@ -139,7 +138,7 @@

      Related Topics

    • ocrd package
    - + @@ -174,8 +173,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.processor.builtin package — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.processor.builtin package — ocrd 2.58.1 documentation + + + + + + - + @@ -37,12 +35,26 @@
    - + @@ -138,8 +150,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.processor.helpers module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.processor.helpers module — ocrd 2.58.1 documentation + + + + + + @@ -37,17 +35,17 @@
    -

    ocrd.processor.helpers module

    +

    ocrd.processor.helpers module

    Helper methods for running and documenting processors

    -ocrd.processor.helpers.generate_processor_help(ocrd_tool, processor_instance=None)[source]
    +ocrd.processor.helpers.generate_processor_help(ocrd_tool, processor_instance=None, subcommand=None)[source]

    Generate a string describing the full CLI of this processor including params.

    -
    Parameters
    +
    Parameters:
    • ocrd_tool (dict) – this processor’s tools section of the module’s ocrd-tool.json

    • -
    • processor_instance (object, optional) – the processor implementation +

    • processor_instance – the processor implementation (for adding any module/class/function docstrings)

    @@ -56,7 +54,7 @@
    -ocrd.processor.helpers.run_cli(executable, mets_url=None, resolver=None, workspace=None, page_id=None, overwrite=None, log_level=None, input_file_grp=None, output_file_grp=None, parameter=None, working_dir=None)[source]
    +ocrd.processor.helpers.run_cli(executable, mets_url=None, resolver=None, workspace=None, page_id=None, overwrite=None, log_level=None, log_filename=None, input_file_grp=None, output_file_grp=None, parameter=None, working_dir=None, mets_server_url=None)[source]

    Open a workspace and run a processor on the command line.

    If workspace is not none, reuse that. Otherwise, instantiate an Workspace for mets_url (and working_dir) @@ -69,7 +67,7 @@ - parameter (after applying any parameter_override settings)

    (Will create output files and update the in the filesystem).

    -
    Parameters
    +
    Parameters:

    executable (string) – Executable name of the module processor.

    @@ -77,22 +75,23 @@
    -ocrd.processor.helpers.run_processor(processorClass, ocrd_tool=None, mets_url=None, resolver=None, workspace=None, page_id=None, log_level=None, input_file_grp=None, output_file_grp=None, show_resource=None, list_resources=False, parameter=None, parameter_override=None, working_dir=None)[source]
    +ocrd.processor.helpers.run_processor(processorClass, mets_url=None, resolver=None, workspace=None, page_id=None, log_level=None, input_file_grp=None, output_file_grp=None, show_resource=None, list_resources=False, parameter=None, parameter_override=None, working_dir=None, mets_server_url=None, instance_caching=False)[source]

    Instantiate a Pythonic processor, open a workspace, run the processor and save the workspace.

    If workspace is not none, reuse that. Otherwise, instantiate an Workspace for mets_url (and working_dir) by using ocrd.Resolver.workspace_from_url() (i.e. open or clone local workspace).

    Instantiate a Python object for processorClass, passing: - the workspace, -- ocrd_tool - page_id - input_file_grp - output_file_grp - parameter (after applying any parameter_override settings)

    +

    Warning: Avoid setting the instance_caching flag to True. It may have unexpected side effects. +This flag is used for an experimental feature we would like to adopt in future.

    Run the processor on the workspace (creating output files in the filesystem).

    Finally, write back the workspace (updating the METS in the filesystem).

    -
    Parameters
    +
    Parameters:

    processorClass (object) – Python class of the module processor.

    @@ -173,7 +172,7 @@

    Quick search

    - + @@ -190,8 +189,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.processor package — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.processor package — ocrd 2.58.1 documentation + + + + + + @@ -37,14 +35,21 @@
    - + @@ -151,8 +180,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.resolver module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.resolver module — ocrd 2.58.1 documentation + + + + + + - + @@ -37,7 +35,7 @@
    -

    ocrd.resolver module

    +

    ocrd.resolver module

    class ocrd.resolver.Resolver[source]
    @@ -45,37 +43,53 @@

    Handle uploads, downloads, repository access, and manage temporary directories

    -download_to_directory(directory, url, basename=None, if_exists='skip', subdir=None)[source]
    -

    Download a file to a directory.

    -

    Early Shortcut: If url is a local file and that file is already in the directory, keep it there.

    -

    If basename is not given but subdir is, assume user knows what she’s doing and -use last URL segment as the basename.

    -

    If basename is not given and no subdir is given, use the alnum characters in the URL as the basename.

    +download_to_directory(directory, url, basename=None, if_exists='skip', subdir=None, retries=None, timeout=None)[source] +

    Download a URL url to a local file in directory.

    +

    If url looks like a file path, check whether that exists. +If it does exist and is within directory` already, return early. +If it does exist but is outside of ``directory. copy it. +If url` does not appear to be a file path, try downloading via HTTP, retrying ``retries times with timeout timeout between calls.

    +

    If basename is not given but subdir is, set basename to the last path segment of url.

    +
    +
    If the target file already exists within directory, behavior depends on if_exists:
      +
    • skip (default): do nothing and return early. Note that this

    • +
    • overwrite: overwrite the existing file

    • +
    • raise: raise a FileExistsError

    • +
    +
    +
    -
    Parameters
    +
    Parameters:
    • directory (string) – Directory to download files to

    • -
    • basename (string, None) – basename part of the filename on disk.

    • url (string) – URL to download from

    • -
    • if_exists (string, "skip") – What to do if target file already exists. One of skip (default), overwrite or raise

    • -
    • subdir (string, None) – Subdirectory to create within the directory. Think mets:fileGrp.

    -
    Returns
    -

    Local filename string, relative to directory

    +
    Keyword Arguments:
    +
      +
    • basename (string, None) – basename part of the filename on disk. Defaults to last path segment of url if unset.

    • +
    • if_exists (string, "skip") – What to do if target file already exists. +One of skip (default), overwrite or raise

    • +
    • subdir (string, None) – Subdirectory to create within the directory. Think mets:fileGrp[@USE].

    • +
    • retries (int, None) – Number of retries to attempt on network failure.

    • +
    • timeout (tuple, None) – Timeout in seconds for establishing a connection and reading next chunk of data.

    • +
    +
    +
    Returns:
    +

    Local filename string, relative to directory

    -workspace_from_url(mets_url, dst_dir=None, clobber_mets=False, mets_basename=None, download=False, src_baseurl=None)[source]
    +workspace_from_url(mets_url, dst_dir=None, clobber_mets=False, mets_basename=None, download=False, src_baseurl=None, mets_server_url=None)[source]

    Create a workspace from a METS by URL (i.e. clone if mets_url is remote or dst_dir is given).

    -
    Parameters
    +
    Parameters:

    mets_url (string) – Source METS URL or filesystem path

    -
    Keyword Arguments
    +
    Keyword Arguments:
    • dst_dir (string, None) – Target directory for the workspace. By default create a temporary directory under ocrd.constants.TMP_PREFIX. (The resulting path can be retrieved via ocrd.Workspace.directory.)

    • clobber_mets (boolean, False) – Whether to overwrite existing mets.xml. By default existing mets.xml will raise an exception.

    • @@ -87,7 +101,7 @@

      Download (clone) mets_url to mets.xml in dst_dir, unless the former is already local and the latter is none or already identical to its directory name.

      -
      Returns
      +
      Returns:

      a new Workspace

      @@ -98,13 +112,13 @@ workspace_from_nothing(directory, mets_basename='mets.xml', clobber_mets=False)[source]

      Create an empty workspace.

      -
      Parameters
      +
      Parameters:

      directory (string) – Target directory for the workspace. If none, create a temporary directory under ocrd.constants.TMP_PREFIX. (The resulting path can be retrieved via ocrd.Workspace.directory.)

      -
      Keyword Arguments
      +
      Keyword Arguments:

      clobber_mets (boolean, False) – Whether to overwrite existing mets.xml. By default existing mets.xml will raise an exception.

      -
      Returns
      +
      Returns:

      a new Workspace

      @@ -112,9 +126,10 @@
      -resolve_mets_arguments(directory, mets_url, mets_basename)[source]
      -

      Resolve the --mets, --mets-basename and –directory` argument -into a coherent set of arguments according to https://github.com/OCR-D/core/issues/517

      +resolve_mets_arguments(directory, mets_url, mets_basename, mets_server_url)[source] +

      Resolve the --mets, --mets-basename, –directory`, +--mets-server-url, arguments into a coherent set of arguments +according to https://github.com/OCR-D/core/issues/517

    @@ -152,7 +167,11 @@

    Navigation

  • Subpackages
  • Submodules
  • - + @@ -209,8 +228,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.resource_manager module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.resource_manager module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd.resource_manager module

    +

    ocrd.resource_manager module

    class ocrd.resource_manager.OcrdResourceManager(userdir=None, xdg_config_home=None, xdg_data_home=None, skip_init=False)[source]
    @@ -108,7 +106,7 @@
    -download(executable, url, basedir, overwrite=False, no_subdir=False, name=None, resource_type='file', path_in_archive='.', progress_cb=None, size=None)[source]
    +download(executable, url, basedir, overwrite=False, no_subdir=False, name=None, resource_type='file', path_in_archive='.', progress_cb=None)[source]

    Download a resource by URL

    @@ -147,8 +145,12 @@

    Navigation

  • Subpackages
  • Submodules
  • - + @@ -204,8 +206,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.task_sequence module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.task_sequence module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    - + @@ -159,8 +163,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.workspace module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.workspace module — ocrd 2.58.1 documentation + + + + + + @@ -37,16 +35,16 @@
    -

    ocrd.workspace module

    +

    ocrd.workspace module

    -class ocrd.workspace.Workspace(resolver, directory, mets=None, mets_basename='mets.xml', automatic_backup=False, baseurl=None)[source]
    +class ocrd.workspace.Workspace(resolver, directory, mets=None, mets_basename='mets.xml', automatic_backup=False, baseurl=None, mets_server_url=None)[source]

    Bases: object

    A workspace is a temporary directory set up for a processor. It’s the interface to the METS/PAGE XML and delegates download and upload to the ocrd.resolver.Resolver.

    -
    Parameters
    +
    Parameters:
    • directory (string) – Filesystem folder to work in

    • mets (ocrd_models.ocrd_mets.OcrdMets) – OcrdMets representing this workspace. @@ -69,7 +67,7 @@

      Merge other_workspace into this one

      See ocrd_models.ocrd_mets.OcrdMets.merge() for the kwargs

      -
      Keyword Arguments
      +
      Keyword Arguments:

      copy_files (boolean) – Whether to copy files from other_workspace to this one

      @@ -80,13 +78,13 @@ download_url(url, **kwargs)[source]

      Download a URL to the workspace.

      -
      Parameters
      +
      Parameters:
      -
      Returns
      +
      Returns:

      The local filename of the downloaded file

      @@ -106,11 +104,11 @@ remove_file(file_id, force=False, keep_file=False, page_recursive=False, page_same_group=False)[source]

      Remove a METS file from the workspace.

      -
      Parameters
      +
      Parameters:

      file_id (string|:py:class:ocrd_models.ocrd_file.OcrdFile) – @ID of the METS file to delete or the file itself

      -
      Keyword Arguments
      +
      Keyword Arguments:
      • force (boolean) – Continue removing even if file not found in METS

      • keep_file (boolean) – Whether to keep files on disk

      • @@ -128,10 +126,10 @@ remove_file_group(USE, recursive=False, force=False, keep_files=False, page_recursive=False, page_same_group=False)[source]

        Remove a METS fileGrp.

        -
        Parameters
        +
        Parameters:

        USE (string) – @USE of the METS fileGrp to delete

        -
        Keyword Arguments
        +
        Keyword Arguments:
        • recursive (boolean) – Whether to recursively delete all files in the group

        • force (boolean) – Continue removing even if group or containing files not found in METS

        • @@ -150,7 +148,7 @@ rename_file_group(old, new)[source]

          Rename a METS fileGrp.

          -
          Parameters
          +
          Parameters:
          • old (string) – @USE of the METS fileGrp to rename

          • new (string) – @USE of the METS fileGrp to rename as

          • @@ -164,17 +162,17 @@ add_file(file_grp, content=None, **kwargs)[source]

            Add a file to the ocrd_models.ocrd_mets.OcrdMets of the workspace.

            -
            Parameters
            +
            Parameters:

            file_grp (string) – @USE of the METS fileGrp to add to

            -
            Keyword Arguments
            +
            Keyword Arguments:
            -
            Returns
            +
            Returns:

            a new ocrd_models.ocrd_file.OcrdFile

            @@ -191,10 +189,10 @@ resolve_image_exif(image_url)[source]

            Get the EXIF metadata about an image URL as ocrd_models.ocrd_exif.OcrdExif

            -
            Parameters
            +
            Parameters:

            image_url (string) – @href (path or URL) of the METS file to inspect

            -
            Returns
            +
            Returns:

            ocrd_models.ocrd_exif.OcrdExif

            @@ -205,13 +203,13 @@ resolve_image_as_pil(image_url, coords=None)[source]

            Resolve an image URL to a PIL.Image.

            -
            Parameters
            +
            Parameters:

            image_url (string) – @href (path or URL) of the METS file to retrieve

            -
            Keyword Arguments
            +
            Keyword Arguments:

            coords (list) – Coordinates of the bounding box to cut from the image

            -
            Returns
            +
            Returns:

            Full or cropped PIL.Image

            @@ -225,13 +223,13 @@ image_from_page(page, page_id, fill='background', transparency=False, feature_selector='', feature_filter='', filename='')[source]

            Extract an image for a PAGE-XML page from the workspace.

            -
            Parameters
            +
            Parameters:
            -
            Keyword Arguments
            +
            Keyword Arguments:
            • fill (string) – a PIL color specifier, or background or none

            • transparency (boolean) – whether to add an alpha channel for masking

            • @@ -279,7 +277,7 @@ before cropping and rotating. (Thus, unexposed/masked areas will be transparent afterwards for consumers that can interpret alpha channels).

              -
              Returns
              +
              Returns:

              a tuple of
              • the extracted PIL.Image,

              • @@ -327,7 +325,7 @@ image_from_segment(segment, parent_image, parent_coords, fill='background', transparency=False, feature_selector='', feature_filter='', filename='')[source]

                Extract an image for a PAGE-XML hierarchy segment from its parent’s image.

                -
                Parameters
                +
                Parameters:
                -
                Keyword Arguments
                +
                Keyword Arguments:
                • fill (string) – a PIL color specifier, or background or none

                • transparency (boolean) – whether to add an alpha channel for masking

                • @@ -394,7 +392,7 @@ transposition as possible first, unless “rotated-90” / “rotated-180” / “rotated-270” is being filtered.)

                  -
                  Returns
                  +
                  Returns:

                  a tuple of
    - + @@ -572,8 +574,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.workspace_backup module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.workspace_backup module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    - + @@ -170,8 +173,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd.workspace_bagger module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd.workspace_bagger module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd.workspace_bagger module

    +

    ocrd.workspace_bagger module

    class ocrd.workspace_bagger.WorkspaceBagger(resolver, strict=False)[source]
    @@ -45,11 +43,11 @@

    Serialize/De-serialize from OCRD-ZIP to workspace and back.

    -bag(workspace, ocrd_identifier, dest=None, ocrd_mets='mets.xml', ocrd_base_version_checksum=None, processes=1, skip_zip=False, in_place=False, tag_files=None)[source]
    +bag(workspace, ocrd_identifier, dest=None, ocrd_mets='mets.xml', ocrd_base_version_checksum=None, processes=1, skip_zip=False, tag_files=None)[source]

    Bag a workspace

    See https://ocr-d.github.com/ocrd_zip#packing-a-workspace-as-ocrd-zip

    -
    Parameters
    +
    Parameters:
    • workspace (ocrd.Workspace) – workspace to bag

    • ord_identifier (string) – Ocrd-Identifier in bag-info.txt

    • @@ -58,7 +56,6 @@
    • ord_base_version_checksum (string) – Ocrd-Base-Version-Checksum in bag-info.txt

    • processes (integer) – Number of parallel processes checksumming

    • skip_zip (boolean) – Whether to leave directory unzipped

    • -
    • in_place (boolean) – Whether to replace the workspace with its BagIt variant

    • tag_files (list<string>) – Path names of additional tag files to be bagged at the root of the bag

    @@ -71,7 +68,7 @@

    Spill a workspace, i.e. unpack it and turn it into a workspace.

    See https://ocr-d.github.com/ocrd_zip#unpacking-ocrd-zip-to-a-workspace

    -
    Parameters
    +
    Parameters:
    • src (string) – Path to OCRD-ZIP

    • dest (string) – Path to directory to unpack data folder to

    • @@ -94,6 +91,25 @@
    +
    +
    +recreate_checksums(src, dest=None, overwrite=False)[source]
    +

    (Re)creates the files containing the checksums of a bag

    +

    This function uses bag.py to create new files: manifest-sha512.txt and +tagminifest-sha512.txt for the bag. Also ‘Payload-Oxum’ in bag-info.txt will be set to the +appropriate value.

    +
    +
    Parameters:
    +
      +
    • src (string) – Path to Bag. May be an zipped or unziped bagit

    • +
    • dest (string) – Path to where the result should be stored. Not needed if overwrite is +set

    • +
    • overwrite (bool) – Replace bag with newly created bag

    • +
    +
    +
    +
    +
    @@ -129,12 +145,16 @@

    Navigation

  • Subpackages
  • Submodules
  • @@ -169,7 +189,7 @@

    Quick search

    - + @@ -186,8 +206,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_modelfactory — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_modelfactory — ocrd 2.58.1 documentation + + + + + + @@ -37,10 +35,15 @@ - + @@ -116,8 +119,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_modelfactory package — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_modelfactory package — ocrd 2.58.1 documentation + + + + + + @@ -36,7 +34,7 @@
    -

    ocrd_modelfactory package

    +

    ocrd_modelfactory package

    Factory methods to create models for data, files, URLs.

    @@ -44,7 +42,7 @@

    Create OcrdExif by opening an image file with PIL and reading its metadata.

    -
    Parameters
    +
    Parameters:

    image_filename (str) – Local image path name (relative to workspace).

    @@ -53,12 +51,14 @@
    ocrd_modelfactory.page_from_file(input_file, with_tree=False)[source]
    -

    Create a new PAGE-XML from a METS file representing a PAGE-XML or an image.

    +

    Create OcrdPage +from an OcrdFile or a file path +representing either a PAGE-XML or an image (to generate a PAGE-XML for).

    -
    Parameters
    -

    input_file (OcrdFile) – file to open and produce a PAGE DOM for

    +
    Parameters:
    +

    input_file (OcrdFile or str) – file to open and produce a PAGE DOM for

    -
    Keyword Arguments
    +
    Keyword Arguments:

    with_tree (boolean) – whether to return XML node tree, element-node mapping and reverse mapping, too (cf. ocrd_models.ocrd_page.parseEtree())

    @@ -71,10 +71,10 @@ from an OcrdFile representing an image (i.e. should have @mimetype starting with image/).

    -
    Parameters
    +
    Parameters:

    input_file (OcrdFile) – file to open and produce a PAGE DOM for

    -
    Keyword Arguments
    +
    Keyword Arguments:

    with_tree (boolean) – whether to return XML node tree, element-node mapping and reverse mapping, too (cf. ocrd_models.ocrd_page.parseEtree())

    @@ -113,7 +113,12 @@

    Navigation

  • ocrd_models
  • ocrd_validators
  • ocrd_modelfactory
  • @@ -137,7 +142,7 @@

    Quick search

    - + @@ -154,8 +159,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models — ocrd 2.58.1 documentation + + + + + + @@ -37,20 +35,107 @@
    -

    ocrd_models

    +

    ocrd_models

    - + @@ -130,8 +215,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models.constants module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models.constants module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd_models.constants module

    +

    ocrd_models.constants module

    Constants for ocrd_models.

    @@ -113,7 +111,7 @@

    Quick search

    - + @@ -130,8 +128,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models package — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models package — ocrd 2.58.1 documentation + + + + + + @@ -37,21 +35,1982 @@
    -

    ocrd_models package

    +

    ocrd_models package

    APIs and schemas for various file formats in the OCR domain.

    -

    Submodules

    +

    Submodules

    @@ -127,7 +2086,7 @@

    Quick search

    - + @@ -144,8 +2103,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models.ocrd_agent module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models.ocrd_agent module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd_models.ocrd_agent module

    +

    ocrd_models.ocrd_agent module

    API to mets:agent

    @@ -45,7 +43,7 @@

    Bases: object

    Represents a <mets:agent>

    -
    Parameters
    +
    Parameters:
    • el (LxmlElement) –

    • name (string) –

    • @@ -95,6 +93,30 @@
    +
    +
    +class ocrd_models.ocrd_agent.ClientSideOcrdAgent(el, name=None, _type=None, othertype=None, role=None, otherrole=None, notes=None)[source]
    +

    Bases: object

    +

    Provides the same interface as ocrd_models.ocrd_file.OcrdAgent +but without attachment to ocrd_models.ocrd_mets.OcrdMets since +this represents the response of the ocrd.mets_server.OcrdMetsServer.

    +
    +
    Parameters:
    +

    () (el) – ignored

    +
    +
    Keyword Arguments:
    +
      +
    • name (string) –

    • +
    • _type (string) –

    • +
    • othertype (string) –

    • +
    • role (string) –

    • +
    • otherrole (string) –

    • +
    • notes (dict) –

    • +
    +
    +
    +
    +
    @@ -129,7 +151,11 @@

    Navigation

  • ocrd_models package
  • - + @@ -186,8 +212,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models.ocrd_exif module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models.ocrd_exif module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd_models.ocrd_exif module

    +

    ocrd_models.ocrd_exif module

    Technical image metadata

    @@ -49,7 +47,7 @@ width

    pixel dimensions

    -
    Type
    +
    Type:

    int

    @@ -60,7 +58,7 @@ height

    pixel dimensions

    -
    Type
    +
    Type:

    int

    @@ -81,7 +79,7 @@

    (see PIL concept mode)

    -
    Type
    +
    Type:

    str

    @@ -92,7 +90,7 @@ resolution

    pixel density

    -
    Type
    +
    Type:

    int

    @@ -103,7 +101,7 @@ xResolution

    pixel density

    -
    Type
    +
    Type:

    int

    @@ -114,7 +112,7 @@ yResolution

    pixel density

    -
    Type
    +
    Type:

    int

    @@ -125,14 +123,14 @@ resolutionUnit

    unit of measurement (either inches or cm)

    -
    Type
    +
    Type:

    str

    -
    Parameters
    +
    Parameters:

    img (PIL.Image) – PIL image technical metadata is about.

    @@ -189,7 +187,10 @@

    Navigation

  • Submodules
  • - + @@ -245,8 +246,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models.ocrd_file module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models.ocrd_file module — ocrd 2.58.1 documentation + + + + + + @@ -37,33 +35,34 @@
    -

    ocrd_models.ocrd_file module

    +

    ocrd_models.ocrd_file module

    API to mets:file

    -class ocrd_models.ocrd_file.OcrdFile(el, mimetype=None, pageId=None, loctype='OTHER', local_filename=None, mets=None, url=None, ID=None)[source]
    +class ocrd_models.ocrd_file.OcrdFile(el, mimetype=None, pageId=None, local_filename=None, mets=None, url=None, ID=None, loctype=None)[source]

    Bases: object

    Represents a single mets:file/mets:FLocat (METS file entry).

    -
    Parameters
    +
    Parameters:

    el (LxmlElement) – etree Element of the mets:file this represents. Create new if not provided

    -
    Keyword Arguments
    +
    Keyword Arguments:
    • mets (OcrdMets) – Containing ocrd_models.ocrd_mets.OcrdMets.

    • mimetype (string) – @MIMETYPE of this mets:file

    • pageId (string) – @ID of the physical mets:structMap entry corresponding to this mets:file

    • -
    • loctype (string) – @LOCTYPE of this mets:file

    • -
    • local_filename (string) – Local filename

    • -
    • url (string) – @xlink:href of this mets:file

    • +
    • local_filename (Path) – Local filename

    • +
    • url (string) – original @xlink:href of this mets:file

    • +
    • local_filename@xlink:href pointing to the locally cached version of the file in the workspace

    • ID (string) – @ID of this mets:file

    • +
    • loctype (string) – DEPRECATED do not use

    property basename
    -

    Get the os.path.basename of the local file, if any.

    +

    Get the .name of the local file

    @@ -90,16 +89,11 @@
    -
    -property loctype
    -

    Get the @LOCTYPE of the mets:file.

    +
    +property loctypes
    +

    Get the @LOCTYPE``s of the ``mets:file.

    -
    -
    -property otherloctype
    -
    -
    property mimetype
    @@ -115,9 +109,40 @@
    property url
    -

    Get the @xlink:href of this mets:file.

    +

    Get the remote/original URL @xlink:href of this mets:file.

    +
    + +
    +
    +property local_filename
    +

    Get the local/cached @xlink:href of this mets:file.

    +
    +
    +
    +
    +class ocrd_models.ocrd_file.ClientSideOcrdFile(el, mimetype=None, pageId=None, loctype='OTHER', local_filename=None, mets=None, url=None, ID=None, fileGrp=None)[source]
    +

    Bases: object

    +

    Provides the same interface as ocrd_models.ocrd_file.OcrdFile +but without attachment to ocrd_models.ocrd_mets.OcrdMets since +this represents the response of the ocrd.mets_server.OcrdMetsServer.

    +
    +
    Parameters:
    +

    () (el) – ignored

    +
    +
    Keyword Arguments:
    +
      +
    • () (local_filename) – ignored

    • +
    • mimetype (string) – @MIMETYPE of this mets:file

    • +
    • pageId (string) – @ID of the physical mets:structMap entry corresponding to this mets:file

    • +
    • loctype (string) – @LOCTYPE of this mets:file

    • +
    • url (string) – ignored XXX the remote/original file once we have proper mets:FLocat bookkeeping

    • +
    • ()@xlink:href of this mets:file - XXX the local file once we have proper mets:FLocat bookkeeping

    • +
    • ID (string) – @ID of this mets:file

    • +
    +
    +
    @@ -156,7 +181,11 @@

    Navigation

  • ocrd_models.constants module
  • ocrd_models.ocrd_agent module
  • ocrd_models.ocrd_exif module
  • -
  • ocrd_models.ocrd_file module
  • +
  • ocrd_models.ocrd_file module +
  • ocrd_models.ocrd_mets module
  • ocrd_models.ocrd_page module
  • ocrd_models.ocrd_xml_base module
  • @@ -194,7 +223,7 @@

    Quick search

    - + @@ -211,8 +240,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models.ocrd_mets module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models.ocrd_mets module — ocrd 2.58.1 documentation + + + + + + @@ -37,24 +35,29 @@
    -

    ocrd_models.ocrd_mets module

    +

    ocrd_models.ocrd_mets module

    API to METS

    class ocrd_models.ocrd_mets.OcrdMets(**kwargs)[source]
    -

    Bases: ocrd_models.ocrd_xml_base.OcrdXmlDocument

    +

    Bases: OcrdXmlDocument

    API to a single METS file

    -static empty_mets(now=None)[source]
    +static empty_mets(now=None, cache_flag=False)[source]

    Create an empty METS file from bundled template.

    +
    +
    +refresh_caches()[source]
    +
    +
    property unique_identifier
    -

    Get the unique identifier by looking through mods:identifier

    -

    See specs for details.

    +

    Get the unique identifier by looking through mods:identifier +See specs for details.

    @@ -74,7 +77,7 @@ property file_groups

    fileGrp` entries.

    -
    Type
    +
    Type:

    List the @USE of all `mets

    @@ -83,37 +86,41 @@
    find_all_files(*args, **kwargs)[source]
    -

    Like find_files() but return a list of all results.

    -

    Equivalent to list(self.find_files(...))

    +

    Like find_files() but return a list of all results. +Equivalent to list(self.find_files(...))

    -find_files(ID=None, fileGrp=None, pageId=None, mimetype=None, url=None, local_only=False)[source]
    -

    Search mets:file entries in this METS document and yield results.

    -

    The ID, pageId, fileGrp, +find_files(ID=None, fileGrp=None, pageId=None, mimetype=None, url=None, local_filename=None, local_only=False)[source] +

    Search mets:file entries in this METS document and yield results. +The ID, pageId, fileGrp, url and mimetype parameters can each be either a literal string, or a regular expression if the string starts with -// (double slash).

    -

    If it is a regex, the leading // is removed and candidates are matched +// (double slash). +If it is a regex, the leading // is removed and candidates are matched against the regex with re.fullmatch. If it is a literal string, comparison -is done with string equality.

    -

    The pageId parameter supports the numeric range operator ... For +is done with string equality. +The pageId parameter supports the numeric range operator ... For example, to find all files in pages PHYS_0001 to PHYS_0003, -PHYS_0001..PHYS_0003 will be expanded to PHYS_0001,PHYS_0002,PHYS_0003.

    +PHYS_0001..PHYS_0003 will be expanded to PHYS_0001,PHYS_0002,PHYS_0003. +:keyword ID: @ID of the mets:file +:kwtype ID: string +:keyword fileGrp: @USE of the mets:fileGrp to list files of +:kwtype fileGrp: string +:keyword pageId: @ID of the corresponding physical mets:structMap entry (physical page) +:kwtype pageId: string +:keyword url: @xlink:href remote/original URL of mets:Flocat of mets:file +:kwtype url: string +:keyword local_filename: @xlink:href local/cached filename of mets:Flocat of mets:file +:kwtype local_filename: string +:keyword mimetype: @MIMETYPE of mets:file +:kwtype mimetype: string +:keyword local: Whether to restrict results to local files in the filesystem +:kwtype local: boolean

    -
    Keyword Arguments
    -
      -
    • ID (string) – @ID of the mets:file

    • -
    • fileGrp (string) – @USE of the mets:fileGrp to list files of

    • -
    • pageId (string) – @ID of the corresponding physical mets:structMap entry (physical page)

    • -
    • url (string) – @xlink:href (URL or path) of mets:Flocat of mets:file

    • -
    • mimetype (string) – @MIMETYPE of mets:file

    • -
    • local (boolean) – Whether to restrict results to local files in the filesystem

    • -
    -
    -
    Yields
    -

    ocrd_models:ocrd_file:OcrdFile instantiations

    +
    Yields:
    +

    ocrd_models:ocrd_file:OcrdFile instantiations

    @@ -121,12 +128,9 @@
    add_file_group(fileGrp)[source]
    -

    Add a new mets:fileGrp.

    -
    -
    Parameters
    -

    fileGrp (string) – @USE of the new mets:fileGrp.

    -
    -
    +

    Add a new mets:fileGrp. +:param fileGrp: @USE of the new mets:fileGrp. +:type fileGrp: string

    @@ -138,28 +142,24 @@
    remove_file_group(USE, recursive=False, force=False)[source]
    -

    Remove a mets:fileGrp (single fixed @USE or multiple regex @USE)

    -
    -
    Parameters
    -
      -
    • USE (string) – @USE of the mets:fileGrp to delete. Can be a regex if prefixed with //

    • -
    • recursive (boolean) – Whether to recursively delete each mets:file in the group

    • -
    • force (boolean) – Do not raise an exception if mets:fileGrp does not exist

    • -
    -
    -
    +

    Remove a mets:fileGrp (single fixed @USE or multiple regex @USE) +:param USE: @USE of the mets:fileGrp to delete. Can be a regex if prefixed with // +:type USE: string +:param recursive: Whether to recursively delete each mets:file in the group +:type recursive: boolean +:param force: Do not raise an exception if mets:fileGrp does not exist +:type force: boolean

    add_file(fileGrp, mimetype=None, url=None, ID=None, pageId=None, force=False, local_filename=None, ignore=False, **kwargs)[source]
    -

    Instantiate and add a new ocrd_models.ocrd_file.OcrdFile.

    +

    Instantiate and add a new ocrd_models.ocrd_file.OcrdFile. +:param fileGrp: @USE of mets:fileGrp to add to +:type fileGrp: string

    -
    Parameters
    -

    fileGrp (string) – @USE of mets:fileGrp to add to

    -
    -
    Keyword Arguments
    -
      +
      Keyword Arguments:
      +
      • mimetype (string) – @MIMETYPE of the mets:file to use

      • url (string) – @xlink:href (URL or path) of the mets:file to use

      • ID (string) – @ID of the mets:file to use

      • @@ -180,14 +180,15 @@
        -remove_one_file(ID)[source]
        -

        Delete an existing ocrd_models.ocrd_file.OcrdFile.

        +remove_one_file(ID, fileGrp=None)[source] +

        Delete an existing ocrd_models.ocrd_file.OcrdFile. +:param ID: @ID of the mets:file to delete Can also be an ocrd_models.ocrd_file.OcrdFile to avoid search via ID. +:type ID: string|OcrdFile +:param fileGrp: @USE of the mets:fileGrp containing the mets:file. Used only for optimization. +:type fileGrp: string

        -
        Parameters
        -

        ID (string) – @ID of the mets:file to delete

        -
        -
        Returns
        -

        The old ocrd_models.ocrd_file.OcrdFile reference.

        +
        Returns:
        +

        The old ocrd_models.ocrd_file.OcrdFile reference.

        @@ -209,16 +210,14 @@
        set_physical_page_for_file(pageId, ocrd_file, order=None, orderlabel=None)[source]

        Set the physical page ID (@ID of the physical mets:structMap mets:div entry) -corresponding to the mets:file ocrd_file, creating all structures if necessary.

        +corresponding to the mets:file ocrd_file, creating all structures if necessary. +:param pageId: @ID of the physical mets:structMap entry to use +:type pageId: string +:param ocrd_file: existing ocrd_models.ocrd_file.OcrdFile object +:type ocrd_file: object

        -
        Parameters
        +
        Keyword Arguments:
        -
        -
        Keyword Arguments
        -
        • order (string) – @ORDER to use

        • orderlabel (string) – @ORDERLABEL to use

        @@ -250,19 +249,18 @@
        merge(other_mets, force=False, fileGrp_mapping=None, fileId_mapping=None, pageId_mapping=None, after_add_cb=None, **kwargs)[source]
        -

        Add all files from other_mets.

        -

        Accepts the same kwargs as find_files()

        -
        -
        Keyword Arguments
        -
          -
        • force (boolean) – Whether to :py:meth:`add_file`s with force (overwriting existing ``mets:file``s)

        • -
        • fileGrp_mapping (dict) – Map other_mets fileGrp to fileGrp in this METS

        • -
        • fileId_mapping (dict) – Map other_mets file ID to file ID in this METS

        • -
        • pageId_mapping (dict) – Map other_mets page ID to page ID in this METS

        • -
        • after_add_cb (function) – Callback received after file is added to the METS

        • -
        -
        -
        +

        Add all files from other_mets. +Accepts the same kwargs as find_files() +:keyword force: Whether to add_file`s with force (overwriting existing ``mets:file``s) +:kwtype force: boolean +:keyword fileGrp_mapping: Map :py:attr:`other_mets() fileGrp to fileGrp in this METS +:kwtype fileGrp_mapping: dict +:keyword fileId_mapping: Map other_mets file ID to file ID in this METS +:kwtype fileId_mapping: dict +:keyword pageId_mapping: Map other_mets page ID to page ID in this METS +:kwtype pageId_mapping: dict +:keyword after_add_cb: Callback received after file is added to the METS +:kwtype after_add_cb: function

        @@ -304,7 +302,10 @@

        Navigation

      • ocrd_models.ocrd_agent module
      • ocrd_models.ocrd_exif module
      • ocrd_models.ocrd_file module
      • -
      • ocrd_models.ocrd_mets module
      • +
      • ocrd_models.ocrd_mets module +
      • ocrd_models.ocrd_page module
      • ocrd_models.ocrd_xml_base module
      • ocrd_models.report module
      • @@ -341,7 +342,7 @@

        Quick search

    - + @@ -358,8 +359,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models.ocrd_page module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models.ocrd_page module — ocrd 2.58.1 documentation + + + + + + @@ -37,20 +35,20 @@
    -

    ocrd_models.ocrd_page module

    +

    ocrd_models.ocrd_page module

    API to PAGE-XML, generated with generateDS from XML schema.

    ocrd_models.ocrd_page.parse(inFileName, silence=False, print_warnings=True)[source]

    Parse a file, create the object tree, and export it.

    -
    Parameters
    +
    Parameters:
    • inFileName (str) –

    • print_warnings (boolean) –

    -
    Returns
    +
    Returns:

    The root object in the tree.

    @@ -61,13 +59,13 @@ ocrd_models.ocrd_page.parseEtree(inFileName, silence=False, print_warnings=True, mapping=None, nsmap=None)[source]

    Parse a file, create the object tree, and export it. Return tree and mappings, too.

    -
    Parameters
    +
    Parameters:
    • inFileName (str) –

    • print_warnings (boolean) –

    -
    Returns
    +
    Returns:

    A tuple of
    • The root object in the tree.

    • @@ -87,10 +85,10 @@ ocrd_models.ocrd_page.parseString(inString, silence=False, print_warnings=True)[source]

      Parse a string, create the object tree, and export it.

      -
      Parameters
      +
      Parameters:

      inString (str) –

      -
      Returns
      +
      Returns:

      The root object in the tree.

      @@ -99,13 +97,13 @@
      ocrd_models.ocrd_page.OcrdPage
      -

      alias of ocrd_models.ocrd_page_generateds.PcGtsType

      +

      alias of PcGtsType

      class ocrd_models.ocrd_page.AdvertRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, bgColour=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Regions containing advertisements. The angle the rectangle encapsulating a region has to be rotated in clockwise direction @@ -126,7 +124,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -218,7 +216,7 @@
      class ocrd_models.ocrd_page.AlternativeImageType(filename=None, comments=None, conf=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Confidence value (between 0 and 1)

      @@ -330,7 +328,7 @@
      class ocrd_models.ocrd_page.BaselineType(points=None, conf=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Confidence value (between 0 and 1)

      @@ -442,7 +440,7 @@
      class ocrd_models.ocrd_page.BorderType(Coords=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Border of the actual page (if the scanned image contains parts not belonging to the page).

      @@ -534,7 +532,7 @@
      class ocrd_models.ocrd_page.ChartRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, type_=None, numColours=None, bgColour=None, embText=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Regions containing charts or graphs of any type, should be marked as chart regions. The angle the rectangle encapsulating a region @@ -561,7 +559,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -688,7 +686,7 @@
      class ocrd_models.ocrd_page.ChemRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, bgColour=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Regions containing chemical formulas. The angle the rectangle encapsulating a region has to be rotated in clockwise @@ -710,7 +708,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -802,7 +800,7 @@
      class ocrd_models.ocrd_page.CoordsType(points=None, conf=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Polygon outline of the element as a path of points. No points may lie outside the outline of its parent, which in the case of Border is the bounding rectangle @@ -925,7 +923,7 @@

      class ocrd_models.ocrd_page.CustomRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, type_=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Regions containing content that is not covered by the default types (text, graphic, image, line drawing, chart, table, separator, maths, @@ -944,7 +942,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -1017,7 +1015,7 @@
      class ocrd_models.ocrd_page.GlyphType(id=None, ligature=None, symbol=None, script=None, production=None, custom=None, comments=None, AlternativeImage=None, Coords=None, Graphemes=None, TextEquiv=None, TextStyle=None, UserDefined=None, Labels=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      The script used for the glyph Overrides the production attribute of the parent word / text line / text region. @@ -1304,7 +1302,7 @@

      class ocrd_models.ocrd_page.GraphemeBaseType(id=None, index=None, ligature=None, charType=None, custom=None, comments=None, TextEquiv=None, extensiontype_=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Base type for graphemes, grapheme groups and non-printing characters. Order index of grapheme, group, or non-printing character within the parent container (graphemes or glyph or grapheme group). @@ -1481,7 +1479,7 @@

      class ocrd_models.ocrd_page.GraphemeGroupType(id=None, index=None, ligature=None, charType=None, custom=None, comments=None, TextEquiv=None, Grapheme=None, NonPrintingChar=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GraphemeBaseType

      +

      Bases: GraphemeBaseType

      member_data_items_ = [<ocrd_models.ocrd_page_generateds.MemberSpec_ object>, <ocrd_models.ocrd_page_generateds.MemberSpec_ object>]
      @@ -1495,7 +1493,7 @@
      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.GraphemeBaseType

      +

      alias of GraphemeBaseType

      @@ -1608,7 +1606,7 @@
      class ocrd_models.ocrd_page.GraphemeType(id=None, index=None, ligature=None, charType=None, custom=None, comments=None, TextEquiv=None, Coords=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GraphemeBaseType

      +

      Bases: GraphemeBaseType

      Represents a sub-element of a glyph. Smallest graphical unit that can be assigned a Unicode code point.

      @@ -1625,7 +1623,7 @@
      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.GraphemeBaseType

      +

      alias of GraphemeBaseType

      @@ -1698,7 +1696,7 @@
      class ocrd_models.ocrd_page.GraphemesType(Grapheme=None, NonPrintingChar=None, GraphemeGroup=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Container for graphemes, grapheme groups and non-printing characters.

      @@ -1851,7 +1849,7 @@
      class ocrd_models.ocrd_page.GraphicRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, type_=None, numColours=None, embText=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Regions containing simple graphics, such as a company logo, should be marked as graphic regions. The angle the rectangle encapsulating a region @@ -1877,7 +1875,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -1989,7 +1987,7 @@
      class ocrd_models.ocrd_page.GridPointsType(index=None, points=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Points with x,y coordinates. The grid row index

      @@ -2097,7 +2095,7 @@
      class ocrd_models.ocrd_page.GridType(GridPoints=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Matrix of grid points defining the table grid on the page.

      @@ -2199,7 +2197,7 @@
      class ocrd_models.ocrd_page.ImageRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, colourDepth=None, bgColour=None, embText=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      An image is considered to be more intricate and complex than a graphic. These can be photos or drawings. The angle the rectangle encapsulating a region @@ -2224,7 +2222,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -2341,7 +2339,7 @@
      class ocrd_models.ocrd_page.LabelType(value=None, type_=None, comments=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Semantic label The label / tag (e.g. ‘person’). Can be an RDF resource identifier @@ -2454,7 +2452,7 @@

      class ocrd_models.ocrd_page.LabelsType(externalModel=None, externalId=None, prefix=None, comments=None, Label=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Reference to external model / ontology / schema E.g. an RDF resource identifier (to be used as subject or object of an RDF triple) @@ -2599,7 +2597,7 @@

      class ocrd_models.ocrd_page.LayerType(id=None, zIndex=None, caption=None, RegionRef=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      member_data_items_ = [<ocrd_models.ocrd_page_generateds.MemberSpec_ object>, <ocrd_models.ocrd_page_generateds.MemberSpec_ object>, <ocrd_models.ocrd_page_generateds.MemberSpec_ object>, <ocrd_models.ocrd_page_generateds.MemberSpec_ object>]
      @@ -2730,7 +2728,7 @@
      class ocrd_models.ocrd_page.LayersType(Layer=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Can be used to express the z-index of overlapping regions. An element with a greater z-index is always in front of another element with lower z-index.

      @@ -2834,7 +2832,7 @@
      class ocrd_models.ocrd_page.LineDrawingRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, penColour=None, bgColour=None, embText=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      A line drawing is a single colour illustration without solid areas. The angle the rectangle encapsulating a region @@ -2859,7 +2857,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -2971,7 +2969,7 @@
      class ocrd_models.ocrd_page.MapRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Regions containing maps. The angle the rectangle encapsulating a region has to be rotated in clockwise @@ -2992,7 +2990,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -3069,7 +3067,7 @@
      class ocrd_models.ocrd_page.MathsRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, bgColour=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Regions containing equations and mathematical symbols should be marked as maths regions. The angle the rectangle encapsulating a region @@ -3091,7 +3089,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -3183,7 +3181,7 @@
      class ocrd_models.ocrd_page.MetadataItemType(type_=None, name=None, value=None, date=None, Labels=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Type of metadata (e.g. author) E.g. imagePhotometricInterpretation E.g. RGB

      @@ -3327,7 +3325,7 @@
      class ocrd_models.ocrd_page.MetadataType(externalRef=None, Creator=None, Created=None, LastChange=None, Comments=None, UserDefined=None, MetadataItem=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      External reference of any kind

      @@ -3489,7 +3487,7 @@
      class ocrd_models.ocrd_page.MusicRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, bgColour=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Regions containing musical notations. The angle the rectangle encapsulating a region has to be rotated in clockwise direction @@ -3510,7 +3508,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -3602,7 +3600,7 @@
      class ocrd_models.ocrd_page.NoiseRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Noise regions are regions where no real data lies, only false data created by artifacts on the document or scanner noise.

      @@ -3619,7 +3617,7 @@
      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -3682,7 +3680,7 @@
      class ocrd_models.ocrd_page.NonPrintingCharType(id=None, index=None, ligature=None, charType=None, custom=None, comments=None, TextEquiv=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GraphemeBaseType

      +

      Bases: GraphemeBaseType

      A glyph component without visual representation but with Unicode code point. Non-visual / non-printing / control character. @@ -3700,7 +3698,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.GraphemeBaseType

      +

      alias of GraphemeBaseType

      @@ -3763,7 +3761,7 @@
      class ocrd_models.ocrd_page.OrderedGroupIndexedType(id=None, regionRef=None, index=None, caption=None, type_=None, continuation=None, custom=None, comments=None, UserDefined=None, Labels=None, RegionRefIndexed=None, OrderedGroupIndexed=None, UnorderedGroupIndexed=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Indexed group containing ordered elements Optional link to a parent region of nested regions. The parent region doubles as reading order group. @@ -4038,13 +4036,13 @@ get_AllIndexed(classes=None, index_sort=True)[source]

      Get all indexed children sorted by their @index.

      -
      Parameters
      +
      Parameters:
      • classes (list) – Type of children (sans Indexed) to return. Default: ['RegionRef', 'OrderedGroup', 'UnorderedGroup']

      • index_sort (boolean) – Whether to sort by @index

      -
      Returns
      +
      Returns:

      a list of RegionRefIndexedType, OrderedGroupIndexedType, and UnorderedGroupIndexedType

      @@ -4080,7 +4078,7 @@
      class ocrd_models.ocrd_page.OrderedGroupType(id=None, regionRef=None, caption=None, type_=None, continuation=None, custom=None, comments=None, UserDefined=None, Labels=None, RegionRefIndexed=None, OrderedGroupIndexed=None, UnorderedGroupIndexed=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Numbered group (contains ordered elements) Optional link to a parent region of nested regions. The parent region doubles as reading order group. @@ -4343,13 +4341,13 @@ get_AllIndexed(classes=None, index_sort=True)[source]

      Get all indexed children sorted by their @index.

      -
      Parameters
      +
      Parameters:
      • classes (list) – Type of children (sans Indexed) to return. Default: ['RegionRef', 'OrderedGroup', 'UnorderedGroup']

      • index_sort (boolean) – Whether to sort by @index

      -
      Returns
      +
      Returns:

      a list of RegionRefIndexedType, OrderedGroupIndexedType, and UnorderedGroupIndexedType

      @@ -4385,7 +4383,7 @@
      class ocrd_models.ocrd_page.PageType(imageFilename=None, imageWidth=None, imageHeight=None, imageXResolution=None, imageYResolution=None, imageResolutionUnit=None, custom=None, orientation=None, type_=None, primaryLanguage=None, secondaryLanguage=None, primaryScript=None, secondaryScript=None, readingDirection=None, textLineOrder=None, conf=None, AlternativeImage=None, Border=None, PrintSpace=None, ReadingOrder=None, Layers=None, Relations=None, TextStyle=None, UserDefined=None, Labels=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, MapRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Contains the image file name including the file extension. Specifies the width of the image.Specifies the height of the image.Specifies the image resolution in width.Specifies the image @@ -5175,7 +5173,7 @@

      Get all the *Region elements, or only those provided by classes. Return in document order, unless order is reading-order.

      -
      Parameters
      +
      Parameters:
      • classes (list) – Classes of regions that shall be returned, e.g. ['Text', 'Image']

      • order ("document"|"reading-order"|"reading-order-only") – Whether to return regions sorted by document order (document, default) or by @@ -5185,7 +5183,7 @@

      • depth (int) – Recursive depth to look for regions at, set to 0 for all regions at any depth. Default: 0

      -
      Returns
      +
      Returns:

      a list of TextRegionType, ImageRegionType, LineDrawingRegionType, GraphicRegionType, TableRegionType, ChartRegionType, MapRegionType, SeparatorRegionType, MathsRegionType, ChemRegionType, MusicRegionType, AdvertRegionType, NoiseRegionType, UnknownRegionType, and/or CustomRegionType

      @@ -5202,7 +5200,7 @@ get_AllAlternativeImages(page=True, region=True, line=True, word=True, glyph=True)[source]

      Get all the pc:AlternativeImage in a document

      -
      Parameters
      +
      Parameters:
      • page (boolean) – Get images on pc:Page level

      • region (boolean) – Get images on pc:*Region level

      • @@ -5211,7 +5209,7 @@
      • glyph (boolean) – Get images on pc:Glyph level

      -
      Returns
      +
      Returns:

      a list of AlternativeImageType

      @@ -5239,13 +5237,13 @@ get_AllTextLines(region_order='document', respect_textline_order=True)[source]

      Return all the TextLine in the document

      -
      Parameters
      +
      Parameters:
      • region_order ("document"|"reading-order"|"reading-order-only") – Whether to return regions sorted by document order (document, default) or by reading order with regions not in the reading order at the end of the returned list (reading-order) or regions not in the reading order omitted (reading-order-only)

      • respect_textline_order (boolean) – Whether to respect @textLineOrder attribute

      -
      Returns
      +
      Returns:

      a list of TextLineType

      @@ -5265,7 +5263,7 @@
      class ocrd_models.ocrd_page.PcGtsType(pcGtsId=None, Metadata=None, Page=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      member_data_items_ = [<ocrd_models.ocrd_page_generateds.MemberSpec_ object>, <ocrd_models.ocrd_page_generateds.MemberSpec_ object>, <ocrd_models.ocrd_page_generateds.MemberSpec_ object>]
      @@ -5376,7 +5374,7 @@ get_AllAlternativeImagePaths(page=True, region=True, line=True, word=True, glyph=True)[source]

      Get all the pc:AlternativeImage/@filename paths referenced in the PAGE-XML document.

      -
      Parameters
      +
      Parameters:
      • page (boolean) – Get images on pc:Page level

      • region (boolean) – Get images on pc:*Region level

      • @@ -5385,7 +5383,7 @@
      • glyph (boolean) – Get images on pc:Glyph level

      -
      Returns
      +
      Returns:

      a list of image filename strings

      @@ -5402,7 +5400,7 @@
      class ocrd_models.ocrd_page.PrintSpaceType(Coords=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Determines the effective area on the paper of a printed page. Its size is equal for all pages of a book (exceptions: titlepage, multipage pictures). @@ -5495,7 +5493,7 @@

      class ocrd_models.ocrd_page.ReadingOrderType(conf=None, OrderedGroup=None, UnorderedGroup=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Definition of the reading order within the page. To express a reading order between elements they have to be included in an OrderedGroup. @@ -5611,7 +5609,7 @@

      class ocrd_models.ocrd_page.RegionRefIndexedType(index=None, regionRef=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Numbered regionPosition (order number) of this item within the current hierarchy level.

      @@ -5709,7 +5707,7 @@
      class ocrd_models.ocrd_page.RegionRefType(regionRef=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      member_data_items_ = [<ocrd_models.ocrd_page_generateds.MemberSpec_ object>]
      @@ -5795,7 +5793,7 @@
      class ocrd_models.ocrd_page.RegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, extensiontype_=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      For generic use Is this region a continuation of another region (in previous column or page, for example)?

      @@ -6366,7 +6364,7 @@
      class ocrd_models.ocrd_page.RelationType(id=None, type_=None, custom=None, comments=None, Labels=None, SourceRegionRef=None, TargetRegionRef=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      One-to-one relation between to layout object. Use ‘link’ for loose relations and ‘join’ for strong relations (where something is fragmented for instance). @@ -6542,7 +6540,7 @@

      class ocrd_models.ocrd_page.RelationsType(Relation=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Container for one-to-one relations between layout objects (for example: DropCap - paragraph, caption - image).

      @@ -6646,7 +6644,7 @@
      class ocrd_models.ocrd_page.RolesType(TableCellRole=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      member_data_items_ = [<ocrd_models.ocrd_page_generateds.MemberSpec_ object>]
      @@ -6732,7 +6730,7 @@
      class ocrd_models.ocrd_page.SeparatorRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, colour=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Separators are lines that lie between columns and paragraphs and can be used to logically separate different articles from each other. @@ -6755,7 +6753,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -6847,7 +6845,7 @@
      class ocrd_models.ocrd_page.TableCellRoleType(rowIndex=None, columnIndex=None, rowSpan=None, colSpan=None, header=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Cell position in table starting with row 0Cell position in table starting with column 0Number of rows the cell spans (optional; default is 1)Number of columns the cell spans (optional; default is 1) @@ -6977,7 +6975,7 @@

      class ocrd_models.ocrd_page.TableRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, rows=None, columns=None, lineColour=None, bgColour=None, lineSeparators=None, embText=None, Grid=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Tabular data in any form is represented with a table region. Rows and columns may or may not have separator lines; these lines are not separator regions. @@ -7006,7 +7004,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -7158,7 +7156,7 @@
      class ocrd_models.ocrd_page.TextEquivType(index=None, conf=None, dataType=None, dataTypeDetails=None, comments=None, PlainText=None, Unicode=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Used for sort order in case multiple TextEquivs are defined. The text content with the lowest index should be interpreted as the main text content. @@ -7323,7 +7321,7 @@

      class ocrd_models.ocrd_page.TextLineType(id=None, primaryLanguage=None, primaryScript=None, secondaryScript=None, readingDirection=None, production=None, custom=None, comments=None, index=None, AlternativeImage=None, Coords=None, Baseline=None, Word=None, TextEquiv=None, TextStyle=None, UserDefined=None, Labels=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Overrides primaryLanguage attribute of parent text region The primary script used in the text line @@ -7672,7 +7670,7 @@

      class ocrd_models.ocrd_page.TextRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, orientation=None, type_=None, leading=None, readingDirection=None, textLineOrder=None, readingOrientation=None, indented=None, align=None, primaryLanguage=None, secondaryLanguage=None, primaryScript=None, secondaryScript=None, production=None, TextLine=None, TextEquiv=None, TextStyle=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      Pure text is represented as a text region. This includes drop capitals, but practically ornate text may be considered as a graphic. @@ -7717,7 +7715,7 @@

      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -8009,7 +8007,7 @@
      class ocrd_models.ocrd_page.TextStyleType(fontFamily=None, serif=None, monospace=None, fontSize=None, xHeight=None, kerning=None, textColour=None, textColourRgb=None, bgColour=None, bgColourRgb=None, reverseVideo=None, bold=None, italic=None, underlined=None, underlineStyle=None, subscript=None, superscript=None, strikethrough=None, smallCaps=None, letterSpaced=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Monospace (fixed-pitch, non-proportional) or proportional font. For instance: Arial, Times New Roman. @@ -8316,7 +8314,7 @@

      class ocrd_models.ocrd_page.UnknownRegionType(id=None, custom=None, comments=None, continuation=None, AlternativeImage=None, Coords=None, UserDefined=None, Labels=None, Roles=None, TextRegion=None, ImageRegion=None, LineDrawingRegion=None, GraphicRegion=None, TableRegion=None, ChartRegion=None, SeparatorRegion=None, MathsRegion=None, ChemRegion=None, MusicRegion=None, AdvertRegion=None, NoiseRegion=None, UnknownRegion=None, CustomRegion=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.RegionType

      +

      Bases: RegionType

      To be used if the region type cannot be ascertained.

      @@ -8331,7 +8329,7 @@
      superclass
      -

      alias of ocrd_models.ocrd_page_generateds.RegionType

      +

      alias of RegionType

      @@ -8394,7 +8392,7 @@
      class ocrd_models.ocrd_page.UnorderedGroupIndexedType(id=None, regionRef=None, index=None, caption=None, type_=None, continuation=None, custom=None, comments=None, UserDefined=None, Labels=None, RegionRef=None, OrderedGroup=None, UnorderedGroup=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Indexed group containing unordered elements Optional link to a parent region of nested regions. The parent region doubles as reading order group. @@ -8680,7 +8678,7 @@

      class ocrd_models.ocrd_page.UnorderedGroupType(id=None, regionRef=None, caption=None, type_=None, continuation=None, custom=None, comments=None, UserDefined=None, Labels=None, RegionRef=None, OrderedGroup=None, UnorderedGroup=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Numbered group (contains unordered elements) Optional link to a parent region of nested regions. The parent region doubles as reading order group. @@ -8954,7 +8952,7 @@

      class ocrd_models.ocrd_page.UserAttributeType(name=None, description=None, type_=None, value=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Structured custom data defined by name, type and value.

      @@ -9071,7 +9069,7 @@
      class ocrd_models.ocrd_page.UserDefinedType(UserAttribute=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Container for user-defined attributes

      @@ -9173,7 +9171,7 @@
      class ocrd_models.ocrd_page.WordType(id=None, language=None, primaryScript=None, secondaryScript=None, readingDirection=None, production=None, custom=None, comments=None, AlternativeImage=None, Coords=None, Glyph=None, TextEquiv=None, TextStyle=None, UserDefined=None, Labels=None, gds_collector_=None, **kwargs_)[source]
      -

      Bases: ocrd_models.ocrd_page_generateds.GeneratedsSuper

      +

      Bases: GeneratedsSuper

      Overrides primaryLanguage attribute of parent line and/or text region The primary script used in the word @@ -9541,7 +9539,68 @@

      Navigation

    • ocrd_models.ocrd_exif module
    • ocrd_models.ocrd_file module
    • ocrd_models.ocrd_mets module
    • -
    • ocrd_models.ocrd_page module
    • +
    • ocrd_models.ocrd_page module +
    • ocrd_models.ocrd_xml_base module
    • ocrd_models.report module
    • ocrd_models.utils module
    • @@ -9577,7 +9636,7 @@

      Quick search

    - + @@ -9594,8 +9653,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models.ocrd_xml_base module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models.ocrd_xml_base module — ocrd 2.58.1 documentation + + + + + + @@ -37,18 +35,19 @@
    -

    ocrd_models.ocrd_xml_base module

    +

    ocrd_models.ocrd_xml_base module

    Base class for XML documents loaded from either content or filename.

    -class ocrd_models.ocrd_xml_base.OcrdXmlDocument(filename=None, content=None)[source]
    +class ocrd_models.ocrd_xml_base.OcrdXmlDocument(filename=None, content=None, cache_flag=False)[source]

    Bases: object

    Base class for XML documents loaded from either content or filename.

    -
    Parameters
    +
    Parameters:
    • filename (string) –

    • content (string) –

    • +
    • cache_flag (bool) –

    @@ -57,7 +56,7 @@ to_xml(xmllint=False)[source]

    Serialize all properties as pretty-printed XML

    -
    Parameters
    +
    Parameters:

    xmllint (boolean) – Format with xmllint in addition to pretty-printing

    @@ -104,7 +103,10 @@

    Navigation

  • ocrd_models.ocrd_file module
  • ocrd_models.ocrd_mets module
  • ocrd_models.ocrd_page module
  • -
  • ocrd_models.ocrd_xml_base module
  • +
  • ocrd_models.ocrd_xml_base module +
  • ocrd_models.report module
  • ocrd_models.utils module
  • @@ -139,7 +141,7 @@

    Quick search

    - + @@ -156,8 +158,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models.report module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models.report module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd_models.report module

    +

    ocrd_models.report module

    Validation report with messages of different levels of severity.

    @@ -123,7 +121,10 @@

    Navigation

  • ocrd_models.ocrd_mets module
  • ocrd_models.ocrd_page module
  • ocrd_models.ocrd_xml_base module
  • -
  • ocrd_models.report module
  • +
  • ocrd_models.report module +
  • ocrd_models.utils module
  • @@ -157,7 +158,7 @@

    Quick search

    - + @@ -174,8 +175,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_models.utils module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_models.utils module — ocrd 2.58.1 documentation + + + + + + @@ -37,14 +35,14 @@
    -

    ocrd_models.utils module

    +

    ocrd_models.utils module

    Utilities for ocrd_models

    ocrd_models.utils.xmllint_format(xml)[source]

    Pretty-print XML like xmllint does.

    -
    Parameters
    +
    Parameters:

    xml (string) – Serialized XML

    @@ -109,7 +107,13 @@

    Navigation

  • ocrd_models.ocrd_page module
  • ocrd_models.ocrd_xml_base module
  • ocrd_models.report module
  • -
  • ocrd_models.utils module
  • +
  • ocrd_models.utils module +
  • @@ -142,7 +146,7 @@

    Quick search

    - + @@ -159,8 +163,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | + + + + + + + ocrd_network — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network

    +
    + +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.cli.client.html b/site/core/api/ocrd_network/ocrd_network.cli.client.html new file mode 100644 index 000000000..5e83d413c --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.cli.client.html @@ -0,0 +1,117 @@ + + + + + + + + ocrd_network.cli.client module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.cli.client module

    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.cli.html b/site/core/api/ocrd_network/ocrd_network.cli.html new file mode 100644 index 000000000..18705177f --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.cli.html @@ -0,0 +1,128 @@ + + + + + + + + ocrd_network.cli package — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.cli.processing_server.html b/site/core/api/ocrd_network/ocrd_network.cli.processing_server.html new file mode 100644 index 000000000..1bbcf5ed1 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.cli.processing_server.html @@ -0,0 +1,117 @@ + + + + + + + + ocrd_network.cli.processing_server module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.cli.processing_server module

    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.cli.processing_worker.html b/site/core/api/ocrd_network/ocrd_network.cli.processing_worker.html new file mode 100644 index 000000000..b77f96ba3 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.cli.processing_worker.html @@ -0,0 +1,117 @@ + + + + + + + + ocrd_network.cli.processing_worker module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.cli.processing_worker module

    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.cli.processor_server.html b/site/core/api/ocrd_network/ocrd_network.cli.processor_server.html new file mode 100644 index 000000000..a082eeac0 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.cli.processor_server.html @@ -0,0 +1,117 @@ + + + + + + + + ocrd_network.cli.processor_server module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.cli.processor_server module

    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.client.html b/site/core/api/ocrd_network/ocrd_network.client.html new file mode 100644 index 000000000..24ae6c3d1 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.client.html @@ -0,0 +1,133 @@ + + + + + + + + ocrd_network.client module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.client module

    +
    +
    +class ocrd_network.client.Client(server_addr_processing: str = '', server_addr_workflow: str = '', server_addr_workspace: str = '')[source]
    +

    Bases: object

    +
    +
    +send_processing_request(processor_name: str, req_params: dict)[source]
    +
    + +
    + +
    +
    +ocrd_network.client.verify_server_protocol(address: str)[source]
    +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.database.html b/site/core/api/ocrd_network/ocrd_network.database.html new file mode 100644 index 000000000..f6ec0e101 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.database.html @@ -0,0 +1,203 @@ + + + + + + + + ocrd_network.database module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.database module

    +

    The database is used to store information regarding jobs and workspaces.

    +

    Jobs: for every process-request a job is inserted into the database with an uuid, status and +information about the process like parameters and file groups. It is mainly used to track the status +(ocrd_network.models.job.StateEnum) of a job so that the state of a job can be queried. Finished +jobs are not deleted from the database.

    +

    Workspaces: A job or a processor always runs on a workspace. So a processor needs the information +where the workspace is available. This information can be set with providing an absolute path or a +workspace_id. With the latter, the database is used to convert the workspace_id to a path.

    +

    XXX: Currently the information is not preserved after the processing-server shuts down as the +database (runs in docker) currently has no volume set.

    +
    +
    +async ocrd_network.database.initiate_database(db_url: str)[source]
    +
    + +
    +
    +ocrd_network.database.sync_initiate_database(db_url: str)[source]
    +
    + +
    +
    +async ocrd_network.database.db_create_workspace(mets_path: str) DBWorkspace[source]
    +

    Create a workspace-database entry only from a mets-path

    +
    + +
    +
    +async ocrd_network.database.db_get_workspace(workspace_id: str | None = None, workspace_mets_path: str | None = None) DBWorkspace[source]
    +
    + +
    +
    +ocrd_network.database.sync_db_get_workspace(workspace_id: str = None, workspace_mets_path: str = None) DBWorkspace[source]
    +
    + +
    +
    +async ocrd_network.database.db_update_workspace(workspace_id: str | None = None, workspace_mets_path: str | None = None, **kwargs) DBWorkspace[source]
    +
    + +
    +
    +ocrd_network.database.sync_db_update_workspace(workspace_id: str = None, workspace_mets_path: str = None, **kwargs) DBWorkspace[source]
    +
    + +
    +
    +async ocrd_network.database.db_get_processing_job(job_id: str) DBProcessorJob[source]
    +
    + +
    +
    +ocrd_network.database.sync_db_get_processing_job(job_id: str) DBProcessorJob[source]
    +
    + +
    +
    +async ocrd_network.database.db_update_processing_job(job_id: str, **kwargs) DBProcessorJob[source]
    +
    + +
    +
    +ocrd_network.database.sync_db_update_processing_job(job_id: str, **kwargs) DBProcessorJob[source]
    +
    + +
    +
    +async ocrd_network.database.db_get_workflow_job(job_id: str) DBWorkflowJob[source]
    +
    + +
    +
    +ocrd_network.database.sync_db_get_workflow_job(job_id: str) DBWorkflowJob[source]
    +
    + +
    +
    +async ocrd_network.database.db_get_processing_jobs(job_ids: List[str]) [<class 'ocrd_network.models.job.DBProcessorJob'>][source]
    +
    + +
    +
    +ocrd_network.database.sync_db_get_processing_jobs(job_ids: List[str]) [<class 'ocrd_network.models.job.DBProcessorJob'>][source]
    +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.deployer.html b/site/core/api/ocrd_network/ocrd_network.deployer.html new file mode 100644 index 000000000..29fcb8d6c --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.deployer.html @@ -0,0 +1,240 @@ + + + + + + + + ocrd_network.deployer module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.deployer module

    +

    Abstraction of the deployment functionality for processors.

    +

    The Processing Server provides the configuration parameters to the Deployer agent. +The Deployer agent runs the RabbitMQ Server, MongoDB and the Processing Hosts. +Each Processing Host may have several Processing Workers. +Each Processing Worker is an instance of an OCR-D processor.

    +
    +
    +class ocrd_network.deployer.Deployer(config_path: str)[source]
    +

    Bases: object

    +
    +
    +find_matching_processors(worker_only: bool = False, server_only: bool = False, docker_only: bool = False, native_only: bool = False, str_names_only: bool = False, unique_only: bool = False) List[str] | List[object][source]
    +

    Finds and returns a list of matching data objects of type: +DataProcessingWorker and DataProcessorServer.

    +

    worker_only match only processors with worker status +server_only match only processors with server status +docker_only match only docker processors +native_only match only native processors +str_only returns the processor_name instead of data object +unique_only remove duplicates from the matches

    +

    worker_only and server_only are mutually exclusive to each other +docker_only and native_only are mutually exclusive to each other +unique_only is allowed only together with str_names_only

    +
    + +
    +
    +resolve_processor_server_url(processor_name) str[source]
    +
    + +
    +
    +kill_all() None[source]
    +

    kill all started services: hosts, database, queue

    +

    The order of killing is important to optimize graceful shutdown in the future. If RabbitMQ +server is killed before killing Processing Workers, that may have bad outcome and leave +Processing Workers in an unpredictable state

    +
    + +
    +
    +deploy_hosts(mongodb_url: str, rabbitmq_url: str) None[source]
    +
    + +
    +
    +deploy_rabbitmq(image: str, detach: bool, remove: bool, ports_mapping: Dict | None = None) str[source]
    +
    + +
    +
    +deploy_mongodb(image: str, detach: bool, remove: bool, ports_mapping: Dict | None = None) str[source]
    +
    + +
    +
    +kill_rabbitmq() None[source]
    +
    + +
    +
    +kill_mongodb() None[source]
    +
    + +
    +
    +kill_hosts() None[source]
    +
    + +
    +
    +kill_processing_workers(host_data: DataHost) None[source]
    +
    + +
    +
    +kill_processor_servers(host_data: DataHost) None[source]
    +
    + +
    +
    +start_native_processor(ssh_client, processor_name: str, queue_url: str, database_url: str) str[source]
    +

    start a processor natively on a host via ssh

    +
    +
    Parameters:
    +
      +
    • ssh_client – paramiko SSHClient to execute commands on a host

    • +
    • processor_name – name of processor to run

    • +
    • queue_url – url to rabbitmq

    • +
    • database_url – url to database

    • +
    +
    +
    Returns:
    +

    pid of running process

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    +
    +start_docker_processor(docker_client, processor_name: str, _queue_url: str, _database_url: str) str[source]
    +
    + +
    +
    +start_native_processor_server(ssh_client, processor_name: str, agent_address: str, database_url: str) str[source]
    +
    + +
    +
    +start_unix_mets_server(mets_path: str) Path[source]
    +
    + +
    +
    +stop_unix_mets_server(mets_server_url: str) None[source]
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.deployment_utils.html b/site/core/api/ocrd_network/ocrd_network.deployment_utils.html new file mode 100644 index 000000000..c325e6080 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.deployment_utils.html @@ -0,0 +1,154 @@ + + + + + + + + ocrd_network.deployment_utils module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.deployment_utils module

    +
    +
    +ocrd_network.deployment_utils.create_docker_client(address: str, username: str, password: str = '', keypath: str = '') CustomDockerClient[source]
    +
    + +
    +
    +ocrd_network.deployment_utils.create_ssh_client(address: str, username: str, password: str = '', keypath: str = '') SSHClient[source]
    +
    + +
    +
    +class ocrd_network.deployment_utils.DeployType(value)[source]
    +

    Bases: Enum

    +

    Deploy-Type of the processing worker/processor server.

    +
    +
    +DOCKER = 1
    +
    + +
    +
    +NATIVE = 2
    +
    + +
    + +
    +
    +ocrd_network.deployment_utils.verify_mongodb_available(mongo_url: str) None[source]
    +
    + +
    +
    +ocrd_network.deployment_utils.verify_rabbitmq_available(host: str, port: int, vhost: str, username: str, password: str) None[source]
    +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.html b/site/core/api/ocrd_network/ocrd_network.html new file mode 100644 index 000000000..03f440733 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.html @@ -0,0 +1,569 @@ + + + + + + + + ocrd_network package — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network package

    +
    +

    Subpackages

    +
    + +
    +
    +
    +

    Submodules

    +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.logging.html b/site/core/api/ocrd_network/ocrd_network.logging.html new file mode 100644 index 000000000..dc72fae5a --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.logging.html @@ -0,0 +1,157 @@ + + + + + + + + ocrd_network.logging module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.logging module

    +
    +
    +ocrd_network.logging.get_root_logging_dir(module_name: str) Path[source]
    +
    + +
    +
    +ocrd_network.logging.get_cache_locked_pages_logging_file_path() Path[source]
    +
    + +
    +
    +ocrd_network.logging.get_cache_processing_requests_logging_file_path() Path[source]
    +
    + +
    +
    +ocrd_network.logging.get_processing_job_logging_file_path(job_id: str) Path[source]
    +
    + +
    +
    +ocrd_network.logging.get_processing_server_logging_file_path(pid: int) Path[source]
    +
    + +
    +
    +ocrd_network.logging.get_processing_worker_logging_file_path(processor_name: str, pid: int) Path[source]
    +
    + +
    +
    +ocrd_network.logging.get_processor_server_logging_file_path(processor_name: str, pid: int) Path[source]
    +
    + +
    +
    +ocrd_network.logging.get_mets_server_logging_file_path(mets_path: str) Path[source]
    +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.models.html b/site/core/api/ocrd_network/ocrd_network.models.html new file mode 100644 index 000000000..9e2da3e66 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.models.html @@ -0,0 +1,891 @@ + + + + + + + + ocrd_network.models package — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.models package

    +

    DB prefix stands for Database Models +PY prefix stands for Pydantic Models

    +
    +
    +class ocrd_network.models.DBProcessorJob(*args, _id: PydanticObjectId | None = None, revision_id: UUID | None = None, job_id: str, processor_name: str, path_to_mets: str | None = None, workspace_id: str | None = None, description: str | None = None, state: StateEnum, input_file_grps: List[str], output_file_grps: List[str] | None = None, page_id: str | None = None, parameters: dict | None = None, depends_on: List[str] | None = None, result_queue_name: str | None = None, callback_url: str | None = None, internal_callback_url: str | None = None, start_time: datetime | None = None, end_time: datetime | None = None, exec_time: str | None = None, log_file_path: str | None = None)[source]
    +

    Bases: Document

    +

    Job representation in the database

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +job_id: str
    +
    + +
    +
    +processor_name: str
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +description: str | None
    +
    + +
    +
    +state: StateEnum
    +
    + +
    +
    +input_file_grps: List[str]
    +
    + +
    +
    +output_file_grps: List[str] | None
    +
    + +
    +
    +page_id: str | None
    +
    + +
    +
    +parameters: dict | None
    +
    + +
    +
    +depends_on: List[str] | None
    +
    + +
    +
    +result_queue_name: str | None
    +
    + +
    +
    +callback_url: str | None
    +
    + +
    +
    +internal_callback_url: str | None
    +
    + +
    +
    +start_time: datetime | None
    +
    + +
    +
    +end_time: datetime | None
    +
    + +
    +
    +exec_time: str | None
    +
    + +
    +
    +log_file_path: str | None
    +
    + +
    +
    +class Settings[source]
    +

    Bases: object

    +
    +
    +use_enum_values = True
    +
    + +
    + +
    +
    +to_job_output() PYJobOutput[source]
    +
    + +
    + +
    +
    +class ocrd_network.models.DBWorkflowJob(*args, _id: PydanticObjectId | None = None, revision_id: UUID | None = None, job_id: str, page_id: str, page_wise: bool = False, processing_job_ids: Dict, path_to_mets: str | None = None, workspace_id: str | None = None, description: str | None = None, workflow_callback_url: str | None = None)[source]
    +

    Bases: Document

    +

    Workflow job representation in the database

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +job_id: str
    +
    + +
    +
    +page_id: str
    +
    + +
    +
    +page_wise: bool
    +
    + +
    +
    +processing_job_ids: Dict
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +description: str | None
    +
    + +
    +
    +workflow_callback_url: str | None
    +
    + +
    +
    +class Settings[source]
    +

    Bases: object

    +
    +
    +use_enum_values = True
    +
    + +
    + +
    +
    +to_job_output() PYWorkflowJobOutput[source]
    +
    + +
    + +
    +
    +class ocrd_network.models.DBWorkspace(*args, _id: PydanticObjectId | None = None, revision_id: UUID | None = None, workspace_id: str, workspace_mets_path: str, ocrd_identifier: str, bagit_profile_identifier: str, ocrd_base_version_checksum: str | None = None, ocrd_mets: str | None = None, bag_info_adds: dict | None = None, mets_server_url: str | None = None, deleted: bool = False)[source]
    +

    Bases: Document

    +

    Model to store a workspace in the mongo-database.

    +

    Information to handle workspaces and from bag-info.txt are stored here.

    +
    +
    +ocrd_identifier             Ocrd-Identifier
    +
    +
    Type:
    +

    mandatory

    +
    +
    +
    + +
    +
    +bagit_profile_identifier    BagIt-Profile-Identifier
    +
    +
    Type:
    +

    mandatory

    +
    +
    +
    + +
    +
    +ocrd_base_version_checksum  Ocrd-Base-Version-Checksum
    +
    +
    Type:
    +

    mandatory

    +
    +
    +
    + +
    +
    +ocrd_mets                   Ocrd-Mets
    +
    +
    Type:
    +

    optional

    +
    +
    +
    + +
    +
    +bag_info_adds               bag-info.txt can also
    +

    key-value-pairs which are saved here

    +
    +
    Type:
    +

    optionally

    +
    +
    +
    + +
    +
    +deleted                     the document is deleted if set, however, the record is still preserved
    +
    + +
    +
    +pages_locked                a data structure that holds output `fileGrp`s and their respective locked `page_id`
    +

    that are currently being processed by an OCR-D processor (server or worker). +If no page_id field is set, an identifier “all_pages” will be used.

    +
    + +
    +
    +mets_server_url             If set, the reading from and writing to the mets file happens through the METS Server
    +
    + +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +workspace_id: str
    +
    + +
    +
    +workspace_mets_path: str
    +
    + +
    +
    +ocrd_identifier: str
    +
    + +
    +
    +bagit_profile_identifier: str
    +
    + +
    +
    +ocrd_base_version_checksum: str | None
    +
    + +
    +
    +ocrd_mets: str | None
    +
    + +
    +
    +bag_info_adds: dict | None
    +
    + +
    +
    +mets_server_url: str | None
    +
    + +
    +
    +deleted: bool
    +
    + +
    +
    +class Settings[source]
    +

    Bases: object

    +
    +
    +name = 'workspace'
    +
    + +
    + +
    + +
    +
    +class ocrd_network.models.PYJobInput(*, processor_name: str | None = None, path_to_mets: str | None = None, workspace_id: str | None = None, description: str | None = None, input_file_grps: List[str], output_file_grps: List[str] | None = None, page_id: str | None = None, parameters: dict = {}, result_queue_name: str | None = None, callback_url: str | None = None, agent_type: str | None = 'worker', job_id: str | None = None, depends_on: List[str] | None = None)[source]
    +

    Bases: BaseModel

    +

    Wraps the parameters required to make a run-processor-request

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +processor_name: str | None
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +description: str | None
    +
    + +
    +
    +input_file_grps: List[str]
    +
    + +
    +
    +output_file_grps: List[str] | None
    +
    + +
    +
    +page_id: str | None
    +
    + +
    +
    +parameters: dict
    +
    + +
    +
    +result_queue_name: str | None
    +
    + +
    +
    +callback_url: str | None
    +
    + +
    +
    +agent_type: str | None
    +
    + +
    +
    +job_id: str | None
    +
    + +
    +
    +depends_on: List[str] | None
    +
    + +
    +
    +class Config[source]
    +

    Bases: object

    +
    +
    +schema_extra = {'example': {'description': 'The description of this execution', 'input_file_grps': ['INPUT_FILE_GROUP'], 'output_file_grps': ['OUTPUT_FILE_GROUP'], 'page_id': 'PAGE_ID', 'parameters': {}, 'path_to_mets': '/path/to/mets.xml'}}
    +
    + +
    + +
    + +
    +
    +class ocrd_network.models.PYJobOutput(*, job_id: str, processor_name: str, state: StateEnum, path_to_mets: str | None = None, workspace_id: str | None = None, input_file_grps: List[str], output_file_grps: List[str] | None = None, page_id: str | None = None, log_file_path: str | None = None)[source]
    +

    Bases: BaseModel

    +

    Wraps output information for a job-response

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +job_id: str
    +
    + +
    +
    +processor_name: str
    +
    + +
    +
    +state: StateEnum
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +input_file_grps: List[str]
    +
    + +
    +
    +output_file_grps: List[str] | None
    +
    + +
    +
    +page_id: str | None
    +
    + +
    +
    +log_file_path: str | None
    +
    + +
    + +
    +
    +class ocrd_network.models.PYOcrdTool(*, executable: str, categories: List[str], description: str, input_file_grp: List[str], output_file_grp: List[str] | None = None, steps: List[str], parameters: dict | None = None)[source]
    +

    Bases: BaseModel

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +executable: str
    +
    + +
    +
    +categories: List[str]
    +
    + +
    +
    +description: str
    +
    + +
    +
    +input_file_grp: List[str]
    +
    + +
    +
    +output_file_grp: List[str] | None
    +
    + +
    +
    +steps: List[str]
    +
    + +
    +
    +parameters: dict | None
    +
    + +
    + +
    +
    +class ocrd_network.models.PYResultMessage(*, job_id: str, state: StateEnum, path_to_mets: str | None = None, workspace_id: str | None = None)[source]
    +

    Bases: BaseModel

    +

    Wraps the parameters required to make a result message request

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +job_id: str
    +
    + +
    +
    +state: StateEnum
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +class Config[source]
    +

    Bases: object

    +
    +
    +schema_extra = {'example': {'job_id': '123123123', 'path_to_mets': '/path/to/mets.xml', 'state': 'SUCCESS', 'workspace_id': 'c7f25615-fc17-4365-a74d-ad20e1ddbd0e'}}
    +
    + +
    + +
    + +
    +
    +class ocrd_network.models.PYWorkflowJobOutput(*, job_id: str, page_id: str, page_wise: bool = False, processing_job_ids: Dict, path_to_mets: str | None = None, workspace_id: str | None = None, description: str | None = None)[source]
    +

    Bases: BaseModel

    +

    Wraps output information for a workflow job-response

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +job_id: str
    +
    + +
    +
    +page_id: str
    +
    + +
    +
    +page_wise: bool
    +
    + +
    +
    +processing_job_ids: Dict
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +description: str | None
    +
    + +
    + +
    +
    +class ocrd_network.models.StateEnum(value)[source]
    +

    Bases: str, Enum

    +

    An enumeration.

    +
    +
    +cached = 'CACHED'
    +
    + +
    +
    +cancelled = 'CANCELLED'
    +
    + +
    +
    +queued = 'QUEUED'
    +
    + +
    +
    +running = 'RUNNING'
    +
    + +
    +
    +success = 'SUCCESS'
    +
    + +
    +
    +failed = 'FAILED'
    +
    + +
    + +
    +

    Submodules

    +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.models.job.html b/site/core/api/ocrd_network/ocrd_network.models.job.html new file mode 100644 index 000000000..778709aa4 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.models.job.html @@ -0,0 +1,537 @@ + + + + + + + + ocrd_network.models.job module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.models.job module

    +
    +
    +class ocrd_network.models.job.StateEnum(value)[source]
    +

    Bases: str, Enum

    +

    An enumeration.

    +
    +
    +cached = 'CACHED'
    +
    + +
    +
    +cancelled = 'CANCELLED'
    +
    + +
    +
    +queued = 'QUEUED'
    +
    + +
    +
    +running = 'RUNNING'
    +
    + +
    +
    +success = 'SUCCESS'
    +
    + +
    +
    +failed = 'FAILED'
    +
    + +
    + +
    +
    +class ocrd_network.models.job.PYJobInput(*, processor_name: str | None = None, path_to_mets: str | None = None, workspace_id: str | None = None, description: str | None = None, input_file_grps: List[str], output_file_grps: List[str] | None = None, page_id: str | None = None, parameters: dict = {}, result_queue_name: str | None = None, callback_url: str | None = None, agent_type: str | None = 'worker', job_id: str | None = None, depends_on: List[str] | None = None)[source]
    +

    Bases: BaseModel

    +

    Wraps the parameters required to make a run-processor-request

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +processor_name: str | None
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +description: str | None
    +
    + +
    +
    +input_file_grps: List[str]
    +
    + +
    +
    +output_file_grps: List[str] | None
    +
    + +
    +
    +page_id: str | None
    +
    + +
    +
    +parameters: dict
    +
    + +
    +
    +result_queue_name: str | None
    +
    + +
    +
    +callback_url: str | None
    +
    + +
    +
    +agent_type: str | None
    +
    + +
    +
    +job_id: str | None
    +
    + +
    +
    +depends_on: List[str] | None
    +
    + +
    +
    +class Config[source]
    +

    Bases: object

    +
    +
    +schema_extra = {'example': {'description': 'The description of this execution', 'input_file_grps': ['INPUT_FILE_GROUP'], 'output_file_grps': ['OUTPUT_FILE_GROUP'], 'page_id': 'PAGE_ID', 'parameters': {}, 'path_to_mets': '/path/to/mets.xml'}}
    +
    + +
    + +
    + +
    +
    +class ocrd_network.models.job.PYJobOutput(*, job_id: str, processor_name: str, state: StateEnum, path_to_mets: str | None = None, workspace_id: str | None = None, input_file_grps: List[str], output_file_grps: List[str] | None = None, page_id: str | None = None, log_file_path: str | None = None)[source]
    +

    Bases: BaseModel

    +

    Wraps output information for a job-response

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +job_id: str
    +
    + +
    +
    +processor_name: str
    +
    + +
    +
    +state: StateEnum
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +input_file_grps: List[str]
    +
    + +
    +
    +output_file_grps: List[str] | None
    +
    + +
    +
    +page_id: str | None
    +
    + +
    +
    +log_file_path: str | None
    +
    + +
    + +
    +
    +class ocrd_network.models.job.DBProcessorJob(*args, _id: PydanticObjectId | None = None, revision_id: UUID | None = None, job_id: str, processor_name: str, path_to_mets: str | None = None, workspace_id: str | None = None, description: str | None = None, state: StateEnum, input_file_grps: List[str], output_file_grps: List[str] | None = None, page_id: str | None = None, parameters: dict | None = None, depends_on: List[str] | None = None, result_queue_name: str | None = None, callback_url: str | None = None, internal_callback_url: str | None = None, start_time: datetime | None = None, end_time: datetime | None = None, exec_time: str | None = None, log_file_path: str | None = None)[source]
    +

    Bases: Document

    +

    Job representation in the database

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +job_id: str
    +
    + +
    +
    +processor_name: str
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +description: str | None
    +
    + +
    +
    +state: StateEnum
    +
    + +
    +
    +input_file_grps: List[str]
    +
    + +
    +
    +output_file_grps: List[str] | None
    +
    + +
    +
    +page_id: str | None
    +
    + +
    +
    +parameters: dict | None
    +
    + +
    +
    +depends_on: List[str] | None
    +
    + +
    +
    +result_queue_name: str | None
    +
    + +
    +
    +callback_url: str | None
    +
    + +
    +
    +internal_callback_url: str | None
    +
    + +
    +
    +start_time: datetime | None
    +
    + +
    +
    +end_time: datetime | None
    +
    + +
    +
    +exec_time: str | None
    +
    + +
    +
    +log_file_path: str | None
    +
    + +
    +
    +class Settings[source]
    +

    Bases: object

    +
    +
    +use_enum_values = True
    +
    + +
    + +
    +
    +to_job_output() PYJobOutput[source]
    +
    + +
    +
    +id: PydanticObjectId | None
    +
    + +
    +
    +revision_id: UUID | None
    +
    + +
    + +
    +
    +class ocrd_network.models.job.PYWorkflowJobOutput(*, job_id: str, page_id: str, page_wise: bool = False, processing_job_ids: Dict, path_to_mets: str | None = None, workspace_id: str | None = None, description: str | None = None)[source]
    +

    Bases: BaseModel

    +

    Wraps output information for a workflow job-response

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +job_id: str
    +
    + +
    +
    +page_id: str
    +
    + +
    +
    +page_wise: bool
    +
    + +
    +
    +processing_job_ids: Dict
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +description: str | None
    +
    + +
    + +
    +
    +class ocrd_network.models.job.DBWorkflowJob(*args, _id: PydanticObjectId | None = None, revision_id: UUID | None = None, job_id: str, page_id: str, page_wise: bool = False, processing_job_ids: Dict, path_to_mets: str | None = None, workspace_id: str | None = None, description: str | None = None, workflow_callback_url: str | None = None)[source]
    +

    Bases: Document

    +

    Workflow job representation in the database

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +job_id: str
    +
    + +
    +
    +page_id: str
    +
    + +
    +
    +page_wise: bool
    +
    + +
    +
    +processing_job_ids: Dict
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +description: str | None
    +
    + +
    +
    +workflow_callback_url: str | None
    +
    + +
    +
    +class Settings[source]
    +

    Bases: object

    +
    +
    +use_enum_values = True
    +
    + +
    + +
    +
    +to_job_output() PYWorkflowJobOutput[source]
    +
    + +
    +
    +id: PydanticObjectId | None
    +
    + +
    +
    +revision_id: UUID | None
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.models.messages.html b/site/core/api/ocrd_network/ocrd_network.models.messages.html new file mode 100644 index 000000000..cf3f3c165 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.models.messages.html @@ -0,0 +1,157 @@ + + + + + + + + ocrd_network.models.messages module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.models.messages module

    +
    +
    +class ocrd_network.models.messages.PYResultMessage(*, job_id: str, state: StateEnum, path_to_mets: str | None = None, workspace_id: str | None = None)[source]
    +

    Bases: BaseModel

    +

    Wraps the parameters required to make a result message request

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +job_id: str
    +
    + +
    +
    +state: StateEnum
    +
    + +
    +
    +path_to_mets: str | None
    +
    + +
    +
    +workspace_id: str | None
    +
    + +
    +
    +class Config[source]
    +

    Bases: object

    +
    +
    +schema_extra = {'example': {'job_id': '123123123', 'path_to_mets': '/path/to/mets.xml', 'state': 'SUCCESS', 'workspace_id': 'c7f25615-fc17-4365-a74d-ad20e1ddbd0e'}}
    +
    + +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.models.ocrd_tool.html b/site/core/api/ocrd_network/ocrd_network.models.ocrd_tool.html new file mode 100644 index 000000000..8ea168fae --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.models.ocrd_tool.html @@ -0,0 +1,160 @@ + + + + + + + + ocrd_network.models.ocrd_tool module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.models.ocrd_tool module

    +
    +
    +class ocrd_network.models.ocrd_tool.PYOcrdTool(*, executable: str, categories: List[str], description: str, input_file_grp: List[str], output_file_grp: List[str] | None = None, steps: List[str], parameters: dict | None = None)[source]
    +

    Bases: BaseModel

    +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +executable: str
    +
    + +
    +
    +categories: List[str]
    +
    + +
    +
    +description: str
    +
    + +
    +
    +input_file_grp: List[str]
    +
    + +
    +
    +output_file_grp: List[str] | None
    +
    + +
    +
    +steps: List[str]
    +
    + +
    +
    +parameters: dict | None
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.models.workspace.html b/site/core/api/ocrd_network/ocrd_network.models.workspace.html new file mode 100644 index 000000000..89bac103f --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.models.workspace.html @@ -0,0 +1,261 @@ + + + + + + + + ocrd_network.models.workspace module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.models.workspace module

    +
    +
    +class ocrd_network.models.workspace.DBWorkspace(*args, _id: PydanticObjectId | None = None, revision_id: UUID | None = None, workspace_id: str, workspace_mets_path: str, ocrd_identifier: str, bagit_profile_identifier: str, ocrd_base_version_checksum: str | None = None, ocrd_mets: str | None = None, bag_info_adds: dict | None = None, mets_server_url: str | None = None, deleted: bool = False)[source]
    +

    Bases: Document

    +

    Model to store a workspace in the mongo-database.

    +

    Information to handle workspaces and from bag-info.txt are stored here.

    +
    +
    +ocrd_identifier             Ocrd-Identifier
    +
    +
    Type:
    +

    mandatory

    +
    +
    +
    + +
    +
    +bagit_profile_identifier    BagIt-Profile-Identifier
    +
    +
    Type:
    +

    mandatory

    +
    +
    +
    + +
    +
    +ocrd_base_version_checksum  Ocrd-Base-Version-Checksum
    +
    +
    Type:
    +

    mandatory

    +
    +
    +
    + +
    +
    +ocrd_mets                   Ocrd-Mets
    +
    +
    Type:
    +

    optional

    +
    +
    +
    + +
    +
    +bag_info_adds               bag-info.txt can also
    +

    key-value-pairs which are saved here

    +
    +
    Type:
    +

    optionally

    +
    +
    +
    + +
    +
    +deleted                     the document is deleted if set, however, the record is still preserved
    +
    + +
    +
    +pages_locked                a data structure that holds output `fileGrp`s and their respective locked `page_id`
    +

    that are currently being processed by an OCR-D processor (server or worker). +If no page_id field is set, an identifier “all_pages” will be used.

    +
    + +
    +
    +mets_server_url             If set, the reading from and writing to the mets file happens through the METS Server
    +
    + +

    Create a new model by parsing and validating input data from keyword arguments.

    +

    Raises ValidationError if the input data cannot be parsed to form a valid model.

    +
    +
    +workspace_id: str
    +
    + +
    +
    +workspace_mets_path: str
    +
    + +
    +
    +ocrd_identifier: str
    +
    + +
    +
    +bagit_profile_identifier: str
    +
    + +
    +
    +ocrd_base_version_checksum: str | None
    +
    + +
    +
    +ocrd_mets: str | None
    +
    + +
    +
    +bag_info_adds: dict | None
    +
    + +
    +
    +mets_server_url: str | None
    +
    + +
    +
    +deleted: bool
    +
    + +
    +
    +class Settings[source]
    +

    Bases: object

    +
    +
    +name = 'workspace'
    +
    + +
    + +
    +
    +id: PydanticObjectId | None
    +
    + +
    +
    +revision_id: UUID | None
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.param_validators.html b/site/core/api/ocrd_network/ocrd_network.param_validators.html new file mode 100644 index 000000000..fec0bf0b9 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.param_validators.html @@ -0,0 +1,233 @@ + + + + + + + + ocrd_network.param_validators module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.param_validators module

    +
    +
    +class ocrd_network.param_validators.ServerAddressParamType[source]
    +

    Bases: ParamType

    +
    +
    +name: str = 'Server address string format'
    +

    the descriptive name of this type

    +
    + +
    +
    +expected_format = 'host:port'
    +
    + +
    +
    +convert(value, param, ctx)[source]
    +

    Convert the value to the correct type. This is not called if +the value is None (the missing value).

    +

    This must accept string values from the command line, as well as +values that are already the correct type. It may also convert +other compatible types.

    +

    The param and ctx arguments may be None in certain +situations, such as when converting prompt input.

    +

    If the value cannot be converted, call fail() with a +descriptive message.

    +
    +
    Parameters:
    +
      +
    • value – The value to convert.

    • +
    • param – The parameter that is using this type to convert +its value. May be None.

    • +
    • ctx – The current context that arrived at this value. May +be None.

    • +
    +
    +
    +
    + +
    + +
    +
    +class ocrd_network.param_validators.QueueServerParamType[source]
    +

    Bases: ParamType

    +
    +
    +name: str = 'Message queue server string format'
    +

    the descriptive name of this type

    +
    + +
    +
    +convert(value, param, ctx)[source]
    +

    Convert the value to the correct type. This is not called if +the value is None (the missing value).

    +

    This must accept string values from the command line, as well as +values that are already the correct type. It may also convert +other compatible types.

    +

    The param and ctx arguments may be None in certain +situations, such as when converting prompt input.

    +

    If the value cannot be converted, call fail() with a +descriptive message.

    +
    +
    Parameters:
    +
      +
    • value – The value to convert.

    • +
    • param – The parameter that is using this type to convert +its value. May be None.

    • +
    • ctx – The current context that arrived at this value. May +be None.

    • +
    +
    +
    +
    + +
    + +
    +
    +class ocrd_network.param_validators.DatabaseParamType[source]
    +

    Bases: ParamType

    +
    +
    +name: str = 'Database string format'
    +

    the descriptive name of this type

    +
    + +
    +
    +convert(value, param, ctx)[source]
    +

    Convert the value to the correct type. This is not called if +the value is None (the missing value).

    +

    This must accept string values from the command line, as well as +values that are already the correct type. It may also convert +other compatible types.

    +

    The param and ctx arguments may be None in certain +situations, such as when converting prompt input.

    +

    If the value cannot be converted, call fail() with a +descriptive message.

    +
    +
    Parameters:
    +
      +
    • value – The value to convert.

    • +
    • param – The parameter that is using this type to convert +its value. May be None.

    • +
    • ctx – The current context that arrived at this value. May +be None.

    • +
    +
    +
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.process_helpers.html b/site/core/api/ocrd_network/ocrd_network.process_helpers.html new file mode 100644 index 000000000..fb1a143ad --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.process_helpers.html @@ -0,0 +1,122 @@ + + + + + + + + ocrd_network.process_helpers module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.process_helpers module

    +
    +
    +ocrd_network.process_helpers.invoke_processor(processor_class, executable: str, abs_path_to_mets: str, input_file_grps: List[str], output_file_grps: List[str], page_id: str, parameters: dict, mets_server_url: str | None = None, log_filename: str | None = None) None[source]
    +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.processing_server.html b/site/core/api/ocrd_network/ocrd_network.processing_server.html new file mode 100644 index 000000000..2b8e92bc5 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.processing_server.html @@ -0,0 +1,240 @@ + + + + + + + + ocrd_network.processing_server module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.processing_server module

    +
    +
    +class ocrd_network.processing_server.ProcessingServer(config_path: str, host: str, port: int)[source]
    +

    Bases: FastAPI

    +

    FastAPI app to make ocr-d processor calls

    +

    The Processing-Server receives calls conforming to the ocr-d webapi regarding the processing +part. It can run ocrd-processors and provides endpoints to discover processors and watch the job +status. +The Processing-Server does not execute the processors itself but starts up a queue and a +database to delegate the calls to processing workers. They are started by the Processing-Server +and the communication goes through the queue.

    +
    +
    +start() None[source]
    +

    deploy agents (db, queue, workers) and start the processing server with uvicorn

    +
    + +
    +
    +async on_startup()[source]
    +
    + +
    +
    +async on_shutdown() None[source]
    +
      +
    • hosts and pids should be stored somewhere

    • +
    • ensure queue is empty or processor is not currently running

    • +
    • connect to hosts and kill pids

    • +
    +
    + +
    +
    +async stop_deployed_agents() None[source]
    +
    + +
    +
    +connect_publisher(enable_acks: bool = True) None[source]
    +
    + +
    +
    +create_message_queues() None[source]
    +

    Create the message queues based on the occurrence of +workers.name in the config file.

    +
    + +
    +
    +static create_processing_message(job: DBProcessorJob) OcrdProcessingMessage[source]
    +
    + +
    +
    +check_if_queue_exists(processor_name)[source]
    +
    + +
    +
    +query_ocrd_tool_json_from_server(processor_name)[source]
    +
    + +
    +
    +async push_processor_job(processor_name: str, data: PYJobInput) PYJobOutput[source]
    +
    + +
    +
    +async push_to_processing_queue(processor_name: str, processing_message: OcrdProcessingMessage)[source]
    +
    + +
    +
    +async push_to_processor_server(processor_name: str, processor_server_url: str, job_input: PYJobInput) PYJobOutput[source]
    +
    + +
    +
    +async get_processor_job(processor_name: str, job_id: str) PYJobOutput[source]
    +
    + +
    +
    +async get_processor_job_log(processor_name: str, job_id: str) FileResponse[source]
    +
    + +
    +
    +async remove_from_request_cache(result_message: PYResultMessage)[source]
    +
    + +
    +
    +async get_processor_info(processor_name) Dict[source]
    +

    Return a processor’s ocrd-tool.json

    +
    + +
    +
    +async list_processors() List[str][source]
    +
    + +
    +
    +async task_sequence_to_processing_jobs(tasks: List[ProcessorTask], mets_path: str, page_id: str, agent_type: str = 'worker') List[PYJobOutput][source]
    +
    + +
    +
    +async run_workflow(workflow: UploadFile, mets_path: str, agent_type: str = 'worker', page_id: str | None = None, page_wise: bool = False, workflow_callback_url: str | None = None) PYWorkflowJobOutput[source]
    +
    + +
    +
    +async get_workflow_info(workflow_job_id) Dict[source]
    +

    Return list of a workflow’s processor jobs

    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.processing_worker.html b/site/core/api/ocrd_network/ocrd_network.processing_worker.html new file mode 100644 index 000000000..e39e83469 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.processing_worker.html @@ -0,0 +1,167 @@ + + + + + + + + ocrd_network.processing_worker module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.processing_worker module

    +

    Abstraction for the Processing Server unit in this arch: +https://user-images.githubusercontent.com/7795705/203554094-62ce135a-b367-49ba-9960-ffe1b7d39b2c.jpg

    +

    Calls to native OCR-D processor should happen through +the Processing Worker wrapper to hide low level details. +According to the current requirements, each ProcessingWorker +is a single OCR-D Processor instance.

    +
    +
    +class ocrd_network.processing_worker.ProcessingWorker(rabbitmq_addr, mongodb_addr, processor_name, ocrd_tool: dict, processor_class=None)[source]
    +

    Bases: object

    +
    +
    +connect_consumer() None[source]
    +
    + +
    +
    +connect_publisher(enable_acks: bool = True) None[source]
    +
    + +
    +
    +on_consumed_message(channel: BlockingChannel, delivery: Deliver, properties: BasicProperties, body: bytes) None[source]
    +
    + +
    +
    +start_consuming() None[source]
    +
    + +
    +
    +process_message(processing_message: OcrdProcessingMessage) None[source]
    +
    + +
    +
    +publish_to_result_queue(result_queue: str, result_message: OcrdResultMessage)[source]
    +
    + +
    +
    +create_queue(connection_attempts: int = 3, retry_delay: int = 3) None[source]
    +

    Create the queue for this worker

    +

    Originally only the processing-server created the queues for the workers according to the +configuration file. This is intended to make external deployment of workers possible.

    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.processor_server.html b/site/core/api/ocrd_network/ocrd_network.processor_server.html new file mode 100644 index 000000000..03271084a --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.processor_server.html @@ -0,0 +1,174 @@ + + + + + + + + ocrd_network.processor_server module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.processor_server module

    +
    +
    +class ocrd_network.processor_server.ProcessorServer(mongodb_addr: str, processor_name: str = '', processor_class=None)[source]
    +

    Bases: FastAPI

    +
    +
    +async on_startup()[source]
    +
    + +
    +
    +async on_shutdown() None[source]
    +

    TODO: Perform graceful shutdown operations here

    +
    + +
    +
    +async get_processor_info()[source]
    +
    + +
    +
    +async create_processor_task(job_input: PYJobInput)[source]
    +
    + +
    +
    +async run_processor_task(job: DBProcessorJob)[source]
    +
    + +
    +
    +get_ocrd_tool()[source]
    +
    + +
    +
    +get_version() str[source]
    +
    + +
    +
    +run_server(host, port)[source]
    +
    + +
    +
    +async get_processor_job(job_id: str) PYJobOutput[source]
    +
    + +
    +
    +async get_processor_job_log(job_id: str) FileResponse[source]
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.connector.html b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.connector.html new file mode 100644 index 000000000..616744e97 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.connector.html @@ -0,0 +1,201 @@ + + + + + + + + ocrd_network.rabbitmq_utils.connector module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.rabbitmq_utils.connector module

    +

    The source code in this file is adapted by reusing +some part of the source code from the official +RabbitMQ documentation.

    +
    +
    +class ocrd_network.rabbitmq_utils.connector.RMQConnector(host: str = 'localhost', port: int = 5672, vhost: str = '/')[source]
    +

    Bases: object

    +
    +
    +static declare_and_bind_defaults(connection: BlockingConnection, channel: BlockingChannel) None[source]
    +
    + +
    +
    +static open_blocking_connection(credentials: PlainCredentials, host: str = 'localhost', port: int = 5672, vhost: str = '/') BlockingConnection[source]
    +
    + +
    +
    +static open_blocking_channel(connection: BlockingConnection) BlockingChannel | None[source]
    +
    + +
    +
    +static exchange_bind(channel: BlockingChannel, destination_exchange: str, source_exchange: str, routing_key: str, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static exchange_declare(channel: BlockingChannel, exchange_name: str, exchange_type: str, passive: bool = False, durable: bool = False, auto_delete: bool = False, internal: bool = False, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static exchange_delete(channel: BlockingChannel, exchange_name: str, if_unused: bool = False) None[source]
    +
    + +
    +
    +static exchange_unbind(channel: BlockingChannel, destination_exchange: str, source_exchange: str, routing_key: str, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static queue_bind(channel: BlockingChannel, queue_name: str, exchange_name: str, routing_key: str, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static queue_declare(channel: BlockingChannel, queue_name: str, passive: bool = False, durable: bool = False, exclusive: bool = False, auto_delete: bool = False, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static queue_delete(channel: BlockingChannel, queue_name: str, if_unused: bool = False, if_empty: bool = False) None[source]
    +
    + +
    +
    +static queue_purge(channel: BlockingChannel, queue_name: str) None[source]
    +
    + +
    +
    +static queue_unbind(channel: BlockingChannel, queue_name: str, exchange_name: str, routing_key: str, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static set_qos(channel: BlockingChannel, prefetch_size: int = 0, prefetch_count: int = 1, global_qos: bool = False) None[source]
    +
    + +
    +
    +static confirm_delivery(channel: BlockingChannel) None[source]
    +
    + +
    +
    +static basic_publish(channel: BlockingChannel, exchange_name: str, routing_key: str, message_body: bytes, properties: BasicProperties) None[source]
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.constants.html b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.constants.html new file mode 100644 index 000000000..a78debab4 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.constants.html @@ -0,0 +1,117 @@ + + + + + + + + ocrd_network.rabbitmq_utils.constants module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.rabbitmq_utils.constants module

    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.consumer.html b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.consumer.html new file mode 100644 index 000000000..d44258d76 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.consumer.html @@ -0,0 +1,161 @@ + + + + + + + + ocrd_network.rabbitmq_utils.consumer module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.rabbitmq_utils.consumer module

    +

    The source code in this file is adapted by reusing +some part of the source code from the official +RabbitMQ documentation.

    +
    +
    +class ocrd_network.rabbitmq_utils.consumer.RMQConsumer(host: str = 'localhost', port: int = 5672, vhost: str = '/')[source]
    +

    Bases: RMQConnector

    +
    +
    +authenticate_and_connect(username: str, password: str) None[source]
    +
    + +
    +
    +setup_defaults() None[source]
    +
    + +
    +
    +get_one_message(queue_name: str, auto_ack: bool = False) Any | None[source]
    +
    + +
    +
    +configure_consuming(queue_name: str, callback_method: Any) None[source]
    +
    + +
    +
    +start_consuming() None[source]
    +
    + +
    +
    +get_waiting_message_count() int | None[source]
    +
    + +
    +
    +ack_message(delivery_tag: int) None[source]
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.html b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.html new file mode 100644 index 000000000..d4114442a --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.html @@ -0,0 +1,368 @@ + + + + + + + + ocrd_network.rabbitmq_utils package — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.rabbitmq_utils package

    +
    +
    +class ocrd_network.rabbitmq_utils.RMQConsumer(host: str = 'localhost', port: int = 5672, vhost: str = '/')[source]
    +

    Bases: RMQConnector

    +
    +
    +authenticate_and_connect(username: str, password: str) None[source]
    +
    + +
    +
    +setup_defaults() None[source]
    +
    + +
    +
    +get_one_message(queue_name: str, auto_ack: bool = False) Any | None[source]
    +
    + +
    +
    +configure_consuming(queue_name: str, callback_method: Any) None[source]
    +
    + +
    +
    +start_consuming() None[source]
    +
    + +
    +
    +get_waiting_message_count() int | None[source]
    +
    + +
    +
    +ack_message(delivery_tag: int) None[source]
    +
    + +
    + +
    +
    +class ocrd_network.rabbitmq_utils.RMQConnector(host: str = 'localhost', port: int = 5672, vhost: str = '/')[source]
    +

    Bases: object

    +
    +
    +static declare_and_bind_defaults(connection: BlockingConnection, channel: BlockingChannel) None[source]
    +
    + +
    +
    +static open_blocking_connection(credentials: PlainCredentials, host: str = 'localhost', port: int = 5672, vhost: str = '/') BlockingConnection[source]
    +
    + +
    +
    +static open_blocking_channel(connection: BlockingConnection) BlockingChannel | None[source]
    +
    + +
    +
    +static exchange_bind(channel: BlockingChannel, destination_exchange: str, source_exchange: str, routing_key: str, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static exchange_declare(channel: BlockingChannel, exchange_name: str, exchange_type: str, passive: bool = False, durable: bool = False, auto_delete: bool = False, internal: bool = False, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static exchange_delete(channel: BlockingChannel, exchange_name: str, if_unused: bool = False) None[source]
    +
    + +
    +
    +static exchange_unbind(channel: BlockingChannel, destination_exchange: str, source_exchange: str, routing_key: str, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static queue_bind(channel: BlockingChannel, queue_name: str, exchange_name: str, routing_key: str, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static queue_declare(channel: BlockingChannel, queue_name: str, passive: bool = False, durable: bool = False, exclusive: bool = False, auto_delete: bool = False, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static queue_delete(channel: BlockingChannel, queue_name: str, if_unused: bool = False, if_empty: bool = False) None[source]
    +
    + +
    +
    +static queue_purge(channel: BlockingChannel, queue_name: str) None[source]
    +
    + +
    +
    +static queue_unbind(channel: BlockingChannel, queue_name: str, exchange_name: str, routing_key: str, arguments: Any | None = None) None[source]
    +
    + +
    +
    +static set_qos(channel: BlockingChannel, prefetch_size: int = 0, prefetch_count: int = 1, global_qos: bool = False) None[source]
    +
    + +
    +
    +static confirm_delivery(channel: BlockingChannel) None[source]
    +
    + +
    +
    +static basic_publish(channel: BlockingChannel, exchange_name: str, routing_key: str, message_body: bytes, properties: BasicProperties) None[source]
    +
    + +
    + +
    +
    +class ocrd_network.rabbitmq_utils.RMQPublisher(host: str = 'localhost', port: int = 5672, vhost: str = '/')[source]
    +

    Bases: RMQConnector

    +
    +
    +authenticate_and_connect(username: str, password: str) None[source]
    +
    + +
    +
    +setup_defaults() None[source]
    +
    + +
    +
    +create_queue(queue_name: str, exchange_name: str | None = None, exchange_type: str | None = None, passive: bool = False) None[source]
    +
    + +
    +
    +publish_to_queue(queue_name: str, message: bytes, exchange_name: str | None = None, properties: BasicProperties | None = None) None[source]
    +
    + +
    +
    +enable_delivery_confirmations() None[source]
    +
    + +
    + +
    +
    +class ocrd_network.rabbitmq_utils.OcrdProcessingMessage(job_id: str, processor_name: str, created_time: int, input_file_grps: List[str], output_file_grps: List[str] | None, path_to_mets: str | None, workspace_id: str | None, page_id: str | None, result_queue_name: str | None, callback_url: str | None, internal_callback_url: str | None, parameters: Dict[str, Any] | None = None)[source]
    +

    Bases: object

    +
    +
    +static encode_yml(ocrd_processing_message: OcrdProcessingMessage) bytes[source]
    +
    + +
    +
    +static decode_yml(ocrd_processing_message: bytes) OcrdProcessingMessage[source]
    +
    + +
    + +
    +
    +class ocrd_network.rabbitmq_utils.OcrdResultMessage(job_id: str, state: str, path_to_mets: str | None = None, workspace_id: str | None = None)[source]
    +

    Bases: object

    +
    +
    +static encode_yml(ocrd_result_message: OcrdResultMessage) bytes[source]
    +
    + +
    +
    +static decode_yml(ocrd_result_message: bytes) OcrdResultMessage[source]
    +
    + +
    + +
    +

    Submodules

    + +
    +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.ocrd_messages.html b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.ocrd_messages.html new file mode 100644 index 000000000..2e388628e --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.ocrd_messages.html @@ -0,0 +1,149 @@ + + + + + + + + ocrd_network.rabbitmq_utils.ocrd_messages module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.rabbitmq_utils.ocrd_messages module

    +
    +
    +class ocrd_network.rabbitmq_utils.ocrd_messages.OcrdProcessingMessage(job_id: str, processor_name: str, created_time: int, input_file_grps: List[str], output_file_grps: List[str] | None, path_to_mets: str | None, workspace_id: str | None, page_id: str | None, result_queue_name: str | None, callback_url: str | None, internal_callback_url: str | None, parameters: Dict[str, Any] | None = None)[source]
    +

    Bases: object

    +
    +
    +static encode_yml(ocrd_processing_message: OcrdProcessingMessage) bytes[source]
    +
    + +
    +
    +static decode_yml(ocrd_processing_message: bytes) OcrdProcessingMessage[source]
    +
    + +
    + +
    +
    +class ocrd_network.rabbitmq_utils.ocrd_messages.OcrdResultMessage(job_id: str, state: str, path_to_mets: str | None = None, workspace_id: str | None = None)[source]
    +

    Bases: object

    +
    +
    +static encode_yml(ocrd_result_message: OcrdResultMessage) bytes[source]
    +
    + +
    +
    +static decode_yml(ocrd_result_message: bytes) OcrdResultMessage[source]
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.publisher.html b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.publisher.html new file mode 100644 index 000000000..23e792bf7 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.rabbitmq_utils.publisher.html @@ -0,0 +1,151 @@ + + + + + + + + ocrd_network.rabbitmq_utils.publisher module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.rabbitmq_utils.publisher module

    +

    The source code in this file is adapted by reusing +some part of the source code from the official +RabbitMQ documentation.

    +
    +
    +class ocrd_network.rabbitmq_utils.publisher.RMQPublisher(host: str = 'localhost', port: int = 5672, vhost: str = '/')[source]
    +

    Bases: RMQConnector

    +
    +
    +authenticate_and_connect(username: str, password: str) None[source]
    +
    + +
    +
    +setup_defaults() None[source]
    +
    + +
    +
    +create_queue(queue_name: str, exchange_name: str | None = None, exchange_type: str | None = None, passive: bool = False) None[source]
    +
    + +
    +
    +publish_to_queue(queue_name: str, message: bytes, exchange_name: str | None = None, properties: BasicProperties | None = None) None[source]
    +
    + +
    +
    +enable_delivery_confirmations() None[source]
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.runtime_data.html b/site/core/api/ocrd_network/ocrd_network.runtime_data.html new file mode 100644 index 000000000..0217f2b6e --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.runtime_data.html @@ -0,0 +1,152 @@ + + + + + + + + ocrd_network.runtime_data module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.runtime_data module

    +
    +
    +class ocrd_network.runtime_data.DataHost(config: Dict)[source]
    +

    Bases: object

    +
    +
    +create_client(client_type: str)[source]
    +
    + +
    + +
    +
    +class ocrd_network.runtime_data.DataMongoDB(config: Dict)[source]
    +

    Bases: object

    +
    + +
    +
    +class ocrd_network.runtime_data.DataProcessingWorker(host: str, deploy_type: DeployType, processor_name: str)[source]
    +

    Bases: object

    +
    + +
    +
    +class ocrd_network.runtime_data.DataProcessorServer(host: str, port: int, deploy_type: DeployType, processor_name: str)[source]
    +

    Bases: object

    +
    + +
    +
    +class ocrd_network.runtime_data.DataRabbitMQ(config: Dict)[source]
    +

    Bases: object

    +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.server_cache.html b/site/core/api/ocrd_network/ocrd_network.server_cache.html new file mode 100644 index 000000000..3eb36f15b --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.server_cache.html @@ -0,0 +1,181 @@ + + + + + + + + ocrd_network.server_cache module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.server_cache module

    +
    +
    +class ocrd_network.server_cache.CacheLockedPages[source]
    +

    Bases: object

    +
    +
    +check_if_locked_pages_for_output_file_grps(workspace_key: str, output_file_grps: List[str], page_ids: List[str]) bool[source]
    +
    + +
    +
    +get_locked_pages(workspace_key: str) Dict[str, List[str]][source]
    +
    + +
    +
    +lock_pages(workspace_key: str, output_file_grps: List[str], page_ids: List[str]) None[source]
    +
    + +
    +
    +unlock_pages(workspace_key: str, output_file_grps: List[str], page_ids: List[str]) None[source]
    +
    + +
    + +
    +
    +class ocrd_network.server_cache.CacheProcessingRequests[source]
    +

    Bases: object

    +
    +
    +async consume_cached_requests(workspace_key: str) List[PYJobInput][source]
    +
    + +
    +
    +update_request_counter(workspace_key: str, by_value: int) int[source]
    +

    A method used to increase/decrease the internal counter of some workspace_key by by_value. +Returns the value of the updated counter.

    +
    + +
    +
    +cache_request(workspace_key: str, data: PYJobInput)[source]
    +
    + +
    +
    +async cancel_dependent_jobs(workspace_key: str, processing_job_id: str) List[PYJobInput][source]
    +
    + +
    +
    +async is_caching_required(job_dependencies: List[str]) bool[source]
    +
    + +
    +
    +has_workspace_cached_requests(workspace_key: str) bool[source]
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.server_utils.html b/site/core/api/ocrd_network/ocrd_network.server_utils.html new file mode 100644 index 000000000..e4b0f58d2 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.server_utils.html @@ -0,0 +1,132 @@ + + + + + + + + ocrd_network.server_utils module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.server_utils module

    +
    +
    +async ocrd_network.server_utils.validate_and_return_mets_path(logger, job_input: PYJobInput) str[source]
    +
    + +
    +
    +ocrd_network.server_utils.expand_page_ids(page_id: str) List[source]
    +
    + +
    +
    +ocrd_network.server_utils.validate_job_input(logger, processor_name: str, ocrd_tool: dict, job_input: PYJobInput) None[source]
    +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_network/ocrd_network.utils.html b/site/core/api/ocrd_network/ocrd_network.utils.html new file mode 100644 index 000000000..41f19c255 --- /dev/null +++ b/site/core/api/ocrd_network/ocrd_network.utils.html @@ -0,0 +1,189 @@ + + + + + + + + ocrd_network.utils module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_network.utils module

    +
    +
    +ocrd_network.utils.call_sync(func)[source]
    +
    + +
    +
    +ocrd_network.utils.calculate_execution_time(start: datetime, end: datetime) int[source]
    +

    Calculates the difference between start and end datetime. +Returns the result in milliseconds

    +
    + +
    +
    +ocrd_network.utils.generate_created_time() int[source]
    +
    + +
    +
    +ocrd_network.utils.generate_id() str[source]
    +

    Generate the id to be used for processing job ids. +Note, workspace_id and workflow_id in the reference +WebAPI implementation are produced in the same manner

    +
    + +
    +
    +ocrd_network.utils.validate_and_load_config(config_path: str) Dict[source]
    +
    + +
    +
    +ocrd_network.utils.verify_database_uri(mongodb_address: str) str[source]
    +
    + +
    +
    +ocrd_network.utils.verify_and_parse_mq_uri(rabbitmq_address: str)[source]
    +

    Check the full list of available parameters in the docs here: +https://pika.readthedocs.io/en/stable/_modules/pika/connection.html#URLParameters

    +
    + +
    +
    +ocrd_network.utils.download_ocrd_all_tool_json(ocrd_all_url: str)[source]
    +
    + +
    +
    +ocrd_network.utils.post_to_callback_url(logger, callback_url: str, result_message: OcrdResultMessage)[source]
    +
    + +
    +
    +ocrd_network.utils.get_ocrd_workspace_instance(mets_path: str, mets_server_url: str | None = None) Workspace[source]
    +
    + +
    +
    +ocrd_network.utils.get_ocrd_workspace_physical_pages(mets_path: str, mets_server_url: str | None = None) List[str][source]
    +
    + +
    +
    +ocrd_network.utils.is_mets_server_running(mets_server_url: str) bool[source]
    +
    + +
    +
    +ocrd_network.utils.stop_mets_server(mets_server_url: str) bool[source]
    +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_utils/modules.html b/site/core/api/ocrd_utils/modules.html index abb7bf960..efee244ba 100644 --- a/site/core/api/ocrd_utils/modules.html +++ b/site/core/api/ocrd_utils/modules.html @@ -1,19 +1,17 @@ - - + - - - ocrd_utils — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_utils — ocrd 2.58.1 documentation + + + + + + @@ -37,19 +35,94 @@
    -

    ocrd_utils

    +

    ocrd_utils

    - + @@ -129,8 +202,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | + + + + + + + ocrd_utils.config module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_utils.config module

    +

    Most behavior of OCR-D is controlled via command-line flags or keyword args. +Some behavior is global or too cumbersome to handle via explicit code and +better solved by using environment variables.

    +

    OcrdEnvConfig is a base class to make this more streamlined, to be subclassed +in the ocrd package for the actual values

    +
    +
    +class ocrd_utils.config.OcrdEnvVariable(name, description, parser=<class 'str'>, validator=<function OcrdEnvVariable.<lambda>>, default=[False, None])[source]
    +

    Bases: object

    +

    An environment variable for use in OCR-D.

    +
    +
    Parameters:
    +
      +
    • name (str) – Name of the environment vairable

    • +
    • description (str) – Description of what the variable is used for.

    • +
    +
    +
    Keyword Arguments:
    +
      +
    • parser (callable) – Function to transform the raw (string) value to whatever is needed.

    • +
    • validator (callable) – Function to validate that the raw (string) value is parseable.

    • +
    • default (tuple(bool, any)) – 2-tuple, first element is a bool whether there is a default +value defined and second element contains that default value, which can be a callable +for defered evaluation

    • +
    +
    +
    +
    +
    +describe(wrap_text=True, indent_text=True)[source]
    +
    + +
    + +
    +
    +class ocrd_utils.config.OcrdEnvConfig[source]
    +

    Bases: object

    +
    +
    +add(name, *args, **kwargs)[source]
    +
    + +
    +
    +has_default(name)[source]
    +
    + +
    +
    +describe(name, *args, **kwargs)[source]
    +
    + +
    +
    +is_set(name)[source]
    +
    + +
    +
    +raw_value(name)[source]
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_utils/ocrd_utils.constants.html b/site/core/api/ocrd_utils/ocrd_utils.constants.html index 4174b0657..519561cd1 100644 --- a/site/core/api/ocrd_utils/ocrd_utils.constants.html +++ b/site/core/api/ocrd_utils/ocrd_utils.constants.html @@ -1,23 +1,21 @@ - - + - - - ocrd_utils.constants module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_utils.constants module — ocrd 2.58.1 documentation + + + + + + - + @@ -37,7 +35,7 @@ - + @@ -129,8 +127,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_utils.deprecate module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_utils.deprecate module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,12 @@
    -

    ocrd_utils.deprecate module

    +

    ocrd_utils.deprecate module

    +
    +
    +ocrd_utils.deprecate.deprecation_warning(msg, stacklevel=2)[source]
    +
    +
    ocrd_utils.deprecate.deprecated_alias(**aliases)[source]
    @@ -47,7 +50,9 @@
    ocrd_utils.deprecate.rename_kwargs(func_name, kwargs, aliases)[source]
    -
    +

    https://stackoverflow.com/questions/49802412/how-to-implement-deprecation-in-python-with-argument-alias +by user2357112 supports Monica

    +
    @@ -81,13 +86,18 @@

    Navigation

  • ocrd_utils
  • - + @@ -139,8 +149,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - + - ocrd_utils package — ocrd 2.41.0 documentation - - - - - - - + ocrd_utils package — ocrd 2.58.1 documentation + + + + + + - + @@ -37,7 +35,7 @@
    -

    ocrd_utils package

    +

    ocrd_utils package

    Utility functions and constants usable in various circumstances.

    • coordinates_of_segment(), @@ -147,24 +145,111 @@

      Exports of ocrd_utils.logging

    • -
    • deprecated_alias()

      +
    • deprecated_alias()

    • +
    • rename_kwargs()

    • +
    • deprecation_warning()

      Decorator to mark a kwarg as deprecated

    -

    Submodules

    +

    Submodules

    @@ -200,13 +285,13 @@

    Navigation

  • ocrd_utils
  • - + @@ -256,8 +341,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_utils.image module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_utils.image module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@ - + @@ -417,8 +443,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_utils.introspect module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_utils.introspect module — ocrd 2.58.1 documentation + + + + + + @@ -37,8 +35,15 @@
    -

    ocrd_utils.introspect module

    +

    ocrd_utils.introspect module

    Utility functions to simplify access to data structures.

    +
    +
    +ocrd_utils.introspect.freeze_args(func)[source]
    +

    Transform mutable dictionary into immutable. Useful to be compatible with cache. +Code taken from this post

    +
    +
    ocrd_utils.introspect.membername(class_, val)[source]
    @@ -82,13 +87,18 @@

    Navigation

  • ocrd_utils
  • - + @@ -140,8 +150,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_utils.logging module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_utils.logging module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd_utils.logging module

    +

    ocrd_utils.logging module

    Logging setup

    By default: Log with lastResort logger, usually STDERR.

    Logging can be overridden either programmatically in code using the library or by creating one or more of

    @@ -47,10 +45,31 @@
  • $PWD/ocrd_logging.py

  • These files will be executed in the context of ocrd/ocrd_logging.py, with logging global set.

    +

    Changes as of 2023-08-20:

    +
    +
      +
    • Try to be less intrusive with OCR-D specific logging conventions to +make it easier and less surprising to define logging behavior when +using OCR-D/core as a library

    • +
    • Change setOverrideLogLevel to only override the log level of the ocrd +logger and its descendants

    • +
    • initLogging will set exactly one handler, for the root logger or for the +ocrd logger.

    • +
    • Child loggers should propagate to the ancestor logging (default +behavior of the logging library - no more PropagationShyLogger)

    • +
    • disableLogging only removes any handlers from the ocrd logger

    • +
    +
    -ocrd_utils.logging.disableLogging()[source]
    -
    +ocrd_utils.logging.disableLogging(silent=True)[source] +

    Disables all logging of the ocrd logger and descendants

    +
    +
    Keyword Arguments:
    +

    silent (-) – Whether to log logging behavior by printing to stderr

    +
    +
    +
    @@ -61,25 +80,42 @@
    ocrd_utils.logging.getLogger(*args, **kwargs)[source]
    -

    Wrapper around logging.getLogger that respects overrideLogLevel.

    +

    Wrapper around logging.getLogger that alls initLogging() if +that wasn’t explicitly called before.

    -ocrd_utils.logging.initLogging()[source]
    -

    Reset root logger, read logging configuration if exists, otherwise use basicConfig

    +ocrd_utils.logging.initLogging(builtin_only=False, force_reinit=False, silent=True)[source]
    +

    Reset ocrd logger, read logging configuration if exists, otherwise use basicConfig

    +
    +
    initLogging is to be called by OCR-D/core once, i.e.
      +
    • for the ocrd CLI

    • +
    • for the processor wrapper methods

    • +
    +
    +
    +

    Other processes that use OCR-D/core as a library can, but do not have to, use this functionality.

    +
    +
    Keyword Arguments:
    +
      +
    • builtin_only (-) – Whether to search for logging configuration +on-disk (False) or only use the +hard-coded config (True). For testing

    • +
    • force_reinit (-) – Whether to ignore the module-level +_initialized_flag. For testing only.

    • +
    • silent (-) – Whether to log logging behavior by printing to stderr

    • +
    +
    +
    -ocrd_utils.logging.setOverrideLogLevel(lvl, silent=False)[source]
    -

    Override all logger filter levels to include lvl and above.

    -
      -
    • Set root logger level

    • -
    • iterates all existing loggers and sets their log level to NOTSET.

    • -
    +ocrd_utils.logging.setOverrideLogLevel(lvl, silent=True)[source] +

    Override the output log level of the handlers attached to the ocrd logger.

    -
    Parameters
    +
    Parameters:
    - + @@ -178,8 +221,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_utils.os module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_utils.os module — ocrd 2.58.1 documentation + + + + + + - + @@ -37,7 +35,7 @@
    -

    ocrd_utils.os module

    +

    ocrd_utils.os module

    Operating system functions.

    @@ -77,6 +75,12 @@ designate that arbitrary files or directories are allowed).

    +
    +
    +ocrd_utils.os.guess_media_type(input_file: str, fallback: str | None = None, application_xml: str = 'application/xml')[source]
    +

    Guess the media type of a file path

    +
    +
    ocrd_utils.os.pushd_popd(newcwd=None, tempdir=False)[source]
    @@ -93,6 +97,11 @@ ocrd_utils.os.atomic_write(fpath)[source]
    +
    +
    +ocrd_utils.os.redirect_stderr_and_stdout_to_file(filename)[source]
    +
    +
    @@ -125,13 +134,26 @@

    Navigation

  • ocrd_utils
  • - + @@ -183,8 +205,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - - - - - - - ocrd_utils.package_resources module — ocrd 2.41.0 documentation - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - -
    - -
    -

    ocrd_utils.package_resources module

    -
    -
    -ocrd_utils.package_resources.resource_filename(package: str, resource: str) pathlib.Path[source]
    -

    Reimplementation of the function with the same name from pkg_resources

    -

    Using importlib for better performance

    -
    -
    packagestr

    The package from where to start looking for resource (often __name__)

    -
    -
    resourcestr

    The resource to look up

    -
    -
    -
    - -
    -
    -ocrd_utils.package_resources.resource_string(package: str, resource: str) bytes[source]
    -

    Reimplementation of the function with the same name from pkg_resources

    -

    Using importlib for better performance

    -
    -
    packagestr

    The package from where to start looking for resource (often __name__)

    -
    -
    resourcestr

    The resource to look up

    -
    -
    -
    - -
    -
    -ocrd_utils.package_resources.get_distribution(distribution_name)
    -

    Get the Distribution instance for the named package.

    -
    -
    Parameters
    -

    distribution_name – The name of the distribution package as a string.

    -
    -
    Returns
    -

    A Distribution instance (or subclass thereof).

    -
    -
    -
    - -
    - - -
    - -
    -
    - -
    -
    - - - - - - - \ No newline at end of file diff --git a/site/core/api/ocrd_utils/ocrd_utils.str.html b/site/core/api/ocrd_utils/ocrd_utils.str.html index 7e640d82c..b0837fd77 100644 --- a/site/core/api/ocrd_utils/ocrd_utils.str.html +++ b/site/core/api/ocrd_utils/ocrd_utils.str.html @@ -1,23 +1,21 @@ - - + - - - ocrd_utils.str module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_utils.str module — ocrd 2.58.1 documentation + + + + + + - + @@ -37,7 +35,7 @@
    -

    ocrd_utils.str module

    +

    ocrd_utils.str module

    Utility functions for strings, paths and URL.

    @@ -56,7 +54,7 @@ ocrd_utils.str.get_local_filename(url, start=None)[source]

    Return local filename, optionally relative to start

    -
    Parameters
    +
    Parameters:
    - + @@ -228,8 +239,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_validators — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_validators — ocrd 2.58.1 documentation + + + + + + @@ -37,22 +35,119 @@
    -

    ocrd_validators

    +

    ocrd_validators

    - + @@ -132,8 +227,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_validators.constants module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_validators.constants module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@ - + @@ -132,8 +143,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_validators package — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_validators package — ocrd 2.58.1 documentation + + + + + + @@ -37,16 +35,16 @@
    -

    ocrd_validators package

    +

    ocrd_validators package

    Validators for various OCR-D related data structures.

    class ocrd_validators.ParameterValidator(ocrd_tool)[source]
    -

    Bases: ocrd_validators.json_validator.JsonValidator

    +

    Bases: JsonValidator

    JsonValidator validating parametersagains ocrd-tool.json.

    Construct a ParameterValidator.

    -
    Parameters
    +
    Parameters:

    ocrd_tool (dict) – Parsed ocrd-tool.json.

    @@ -55,7 +53,7 @@ validate(*args, **kwargs)[source]

    Validate a parameter dict against a parameter schema from an ocrd-tool.json

    -
    Parameters
    +
    Parameters:
    - + @@ -427,8 +627,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_validators.json_validator module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_validators.json_validator module — ocrd 2.58.1 documentation + + + + + + - + @@ -37,7 +35,7 @@
    -

    ocrd_validators.json_validator module

    +

    ocrd_validators.json_validator module

    Validating JSON-Schema

    @@ -47,12 +45,12 @@
    -class ocrd_validators.json_validator.JsonValidator(schema, validator_class=<class 'jsonschema.validators.create.<locals>.Validator'>)[source]
    +class ocrd_validators.json_validator.JsonValidator(schema, validator_class=<class 'jsonschema.validators.Draft6Validator'>)[source]

    Bases: object

    JSON Schema validator.

    Construct a JsonValidator.

    -
    Parameters
    +
    Parameters:
    - + @@ -168,8 +183,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | + + + + + + + ocrd_validators.ocrd_network_message_validator module — ocrd 2.58.1 documentation + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    +

    ocrd_validators.ocrd_network_message_validator module

    +

    Validating ocrd-network messages

    +
    +
    +class ocrd_validators.ocrd_network_message_validator.OcrdNetworkMessageValidator(schema, validator_class=<class 'jsonschema.validators.Draft6Validator'>)[source]
    +

    Bases: JsonValidator

    +

    JsonValidator validating against the ocrd network message schemas

    +

    Construct a JsonValidator.

    +
    +
    Parameters:
    +
      +
    • schema (dict) –

    • +
    • validator_class (Draft6Validator|DefaultValidatingDraft6Validator) –

    • +
    +
    +
    +
    +
    +static validate_message_processing(obj)[source]
    +
    + +
    +
    +static validate_message_result(obj)[source]
    +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/site/core/api/ocrd_validators/ocrd_validators.ocrd_tool_validator.html b/site/core/api/ocrd_validators/ocrd_validators.ocrd_tool_validator.html index b6d71af9a..300036258 100644 --- a/site/core/api/ocrd_validators/ocrd_validators.ocrd_tool_validator.html +++ b/site/core/api/ocrd_validators/ocrd_validators.ocrd_tool_validator.html @@ -1,23 +1,21 @@ - - + - - - ocrd_validators.ocrd_tool_validator module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_validators.ocrd_tool_validator module — ocrd 2.58.1 documentation + + + + + + - + @@ -37,17 +35,17 @@
    -

    ocrd_validators.ocrd_tool_validator module

    +

    ocrd_validators.ocrd_tool_validator module

    Validating ocrd-tool.json.

    -

    See specs.

    +

    See specs.

    -class ocrd_validators.ocrd_tool_validator.OcrdToolValidator(schema, validator_class=<class 'jsonschema.validators.create.<locals>.Validator'>)[source]
    -

    Bases: ocrd_validators.json_validator.JsonValidator

    +class ocrd_validators.ocrd_tool_validator.OcrdToolValidator(schema, validator_class=<class 'jsonschema.validators.Draft6Validator'>)[source] +

    Bases: JsonValidator

    JsonValidator validating against the ocrd-tool.json schema.

    Construct a JsonValidator.

    -
    Parameters
    +
    Parameters:
    - + @@ -155,8 +169,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_validators.ocrd_zip_validator module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_validators.ocrd_zip_validator module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd_validators.ocrd_zip_validator module

    +

    ocrd_validators.ocrd_zip_validator module

    Validating OCRD-ZIP.

    See spec.

    @@ -54,7 +52,7 @@
    -
    Parameters
    +
    Parameters:
    - + @@ -173,8 +187,8 @@

    Quick search

    ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | - + - - - ocrd_validators.page_validator module — ocrd 2.41.0 documentation - - - - - - - + + + ocrd_validators.page_validator module — ocrd 2.58.1 documentation + + + + + + @@ -37,7 +35,7 @@
    -

    ocrd_validators.page_validator module

    +

    ocrd_validators.page_validator module

    API for validating OcrdPage.

    @@ -47,7 +45,7 @@ (Element text strings must be the concatenation of their children’s text strings, joined by white space.)

    Construct a new ConsistencyError.

    -
    Parameters
    +
    Parameters:
    • tag (string) – Level of the inconsistent element (parent)

    • ID (string) – ID of the inconsistent element (parent)

    • @@ -68,7 +66,7 @@ (Element coordinate polygons must be properly contained in their parents’ coordinate polygons.)

      Construct a new CoordinateConsistencyError.

      -
      Parameters
      +
      Parameters:
      • tag (string) – Level of the offending element (child)

      • ID (string) – ID of the offending element (child)

      • @@ -91,7 +89,7 @@

    Construct a new CoordinateValidityError.

    -
    Parameters
    +
    Parameters:
      -
    • workspace_from_url() (ocrd.resolver.Resolver method) +
    • workspace_mets_path (ocrd_network.models.DBWorkspace attribute) + +
    • +
    • workspace_path (ocrd.mets_server.ClientSideOcrdMets property)
    • WorkspaceBackup (class in ocrd.workspace_backup)
    • @@ -7098,7 +8877,7 @@

      Quick search

      - + @@ -7115,8 +8894,8 @@

      Quick search

      ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 diff --git a/site/core/index.html b/site/core/index.html index f8f87fece..7ed6065db 100644 --- a/site/core/index.html +++ b/site/core/index.html @@ -1,19 +1,17 @@ - - + - - - OCR-D/core — ocrd 2.41.0 documentation - - - - - - - + + + OCR-D/core — ocrd 2.58.1 documentation + + + + + + @@ -36,7 +34,7 @@
      -

      OCR-D/core

      +

      OCR-D/core

      Contents:

      @@ -76,14 +107,89 @@

      OCR-D/coreocrd_utils

      -

      Indices and tables

      +

      Indices and tables

      - + @@ -211,8 +506,8 @@

      Quick search

      ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 | J@jjZ&{tPPFq0XD_}M^iHgfU%jS5#ZY!*jU-x8#y=_83LRf%&biS z?v`fyG|;YVi}V~}wXDPpIr$JFH37VUwc+6MyEC86yna$y6`#)AsZSr_6WaQ(jSiCH zov#C*_Rr|@vu?xg4T#SX>JuFZn|8O`ebVb}GHco@Y-SX}VJMUnwEX66&xokzQ3NX^ z0#_mx9~_3?wk`+3;@Wxruqe6WT_QKjp(Yen*xv9T(OSqty#cwW>@W%}E+^gG#a}5@ znNf>Ltq!;sO77b&I)h66+JoZK!>)be-m?j@sE5I$G#`X*1C&ZQUR?oi1JV3@drXr} z=U#U|zII5>`zmki^oH-p6YHC^>lC$2^iB_#Z*}6YstuZqt`NRBcNN_S|8U4rgkq58 z({^_ZS^mv=lshMt<226iG94S4{1m$AzU;WJ38&qyGF9fdD(N$9z;;9;TQ>tiSYSar z&vP*DAKRUhibt5~ptU0Cg=CtYvn6Xc;i0a27awn)X}7wqeRaW{Wkz5DVv(!w zlPJILC_dX_da>=qkI7Go%8oq zhw;ze&RxKoM{9rsR;o@uNGcQF@3fhdjL®3SM=f^bE}KW%FU5+QZ~VD z0dlk!GnSjb`*o5=O+)t}{==u(cQdu0ck$$7V^Li*Lo1VB^IUi3bZVK5$&rZj@;C6> ze)Ol9e5>+uWdIdJ+Li?TAgd2fDfzGdNXKhyU(GYIX}(K*sXY%3~l zOab2_du?}?>_pUNFuPM8t!QG)T)a+KPfdRAX1ip9@Ar8B^jFFV3wB4Y|9R6Z*24Da zgr6g7z+P{{vTbhh@E0PKU@h?IeQgv{OVha}L%O;i*2HDvcX#@-9Nb1bqT8MF7iTps zwu3Icn|4I{iJvusIitW*yK@=m`1n#|7rJG@?`pWITJ~nrG%F0eQB^n^T6zr2hvncP zQU@tZ9PB3Be6Z3ig-y~~nv3K`?$E!rIo4J!=gbTjCxgS|r5W)W7Oh$Fo>BSpG!bza zJe)tMF#N+_lp7^iGCSz-E+jiI4h#EjI-L@ez7Pg!c@|@K!)8n-erJUqG`MTdAq_~w z9Eu+yU`(j*^Kp43=V)u!rq4x4=Ll&4@o3QObh~-)aDjyZ-#wg$0MNEfQ{YJ!6S3hS zF1hf+ogU7W(Ev?TquL}NU@1$UbRRhf0{*q^#7WI=ec=nZ!YE&Mte1~+&*ua#w6kJz zuIz?YMWk7to1w2Cd401FT9s!Lc;aty;+o#lK3p5onCEMl6&Mc}-tiq{@JT)Lf@|0! zZ~2AJ8fUjlX-mK5zl=Q-qdGh1S`&q>l3=B&Fc_)OaI1s`EI{FeEtTyi=v64S0w(QB zS%(W2e}u7tf5c}wPJ>>!b=0eyDlObFcEy-P?Z$^?vZc~uj0ORwsIu}JG#pg}vC;1o z3mDqj*#c_Pqt9-kcSbMIArR+JgTKy4Y{`tmu+J_hjg*&{DmUYszuei@1GfLpg;Hp0 zE4{oZfTci=Qok()*@TV6Rl}$K3^Ixsm8-&eYa90E8JG-6a~2d^mq#9iMraEN9)UYx z<<^+%bZo;jRAJiSR$tCF(D@^S)g|U*r3NoiG5k~Kqh`E|D`s5m51p8SJ5Ym7ZpAQC zd;HWZkH>?hQS($o)$!Mms@s~%@h3S3>trH2c%oI{Z-%MFke_d)2_F?t4iGW1{K<#i zBGBq&+!yp}IA1fx9Y5b(I@>meY`ww@52nmlSx75!G%a|;@p2V5}+929Ri+a69hig0wC6P-V_fNQK#8$ZnYS!l<2x<~{p#y04tXyuR# zKXlHocmhJhrfbE^QnhfIag4Q6GH7!VXvDcXl|5nfrnKAoVIy5O5#vms_5wgXpAcST z;huhbbH6Ig(S_hAda?2%332!3ewgRY zvja{!ia_+87gvIZ&>xH8WIS!oqv%iy4rVk2y~V7B-Ygt4dIL4L1yoRk=GnC$+ug zM4i;^Ipo?_7AjBHLKqSNa1T494l-B{R&-Pc)|2mf%reQZ7or_d$r%wFsT@dZ>C)8% zsKj8>iubHg1(Q<(V2oU(AO3t9i2M+)%^Jhjjy_L%{yS=gN=6xb<4Nx1{*&8nh6=Kln8JeXIdPmO3BZsJRWto_Hvv(<@@s>z`!}C zgjLdFgyn&cR=Xzz9R!q26I^Wu-X#Y5+(Ak*B?K#Ib{vhySW-44hkn+vxI0?9U&kRY zW|skJdBQX%W`<@3bTEt(C6=^A(sFlMV|Pj88&~tT^anFiL(m+_$Yd8%ZQ=AVxQUH6 zWwJ_o5a{iz%y3EfUSSI+j^}Mp^9K1xnLq-Ry-nSg{CW-5!u{rjxnO_KJn0^d1UoKJ zBPs$nijo}6>q8ftL)M!^mYeem2?v9sVNjz>D>l%jhlHlNXDh{6g}h3LQdi5uafTuM z95O8)W0Yibf}HX0?*HNZ$^=!E+6E~<+WR0M*;iVamg_WVmGDVr3)>)2A*Twg;GlY2 zNCthR1$CvRhb9#7zlg#FRZM2B!+ETp80DoHY%%~aXhsSN-`2t{`(kiN0Smo^YUfmS zSpm~qE=e&pQ@K_95M`w^v}C!ZDej;O?Dwb1rvpYADJhfiJ58gBAhB*!&28e;YvLqq z{?GK9IddC1OT;hwbL1Pt^G_CsKvO>bKhf;bEmPoi3Y^~Zq-8U=7^CA)yr7jeAKgUF zR`Yfl+kgeAggW?bcK`h79OOH@!-rkBd9vNHZWsh9A43l(`>CO*w}igCgig4OUW0sE z)5BjPBygI89zrQt*Qy@@St{8NDjE!Q!OTIW8?6?vo0lIBNW|5&T%gF9DZy$H62yaS zXgAH5Ef>VbtjH>1qoS5W36vuYP$3LZAgqbY9qk}})961=oZhm@^ zY@P;`yQDUVE7LR4Pw(`yY+1Y+ijAXZJn15|8B_voZC{`JI0@M5AELk;WSM)%wyOqn zZdP&U245LHl-0$>6uj~|{WaKo!Dg7pPkbD-gtB)tlX^U zz$#8Fd-ZT*H{)v|G$LGeU;`zSaN`}?_qKw7!oztQ{e-1@{ihW~KjM~M^qry_Ja2eH z3%Qw9E&nhLl7M-+JIuBHB7eXx;Ty1PdB*lP057zsg%hseCANc3m8=&R%oVd5I9xMRb6(m$61C?-_ zNPo~128^p`B*H)VFE^5FLRc!~=JI-kr0p4@2Gu(tFVJ9Y16{R+THyGfJyQ#WP=i#z zv$J-*S^$Sa*L*hBJjdrueDIc+rn;2kw8B&i0QjZyu z@EchmOR~=TbLy(X^Gn+=LzmPfc#Brao<$v-jF<)Il#}H2n?QKWs^Ou@+szTh+nk{? z^aaKj(?C(mn0~Zd7^VB4SFRO+;^_Pq#$KV3g;Ydb!i+<$@Z~SF=P$SCFR||{v6mfP z9N-;PhU*)xcz1=*Sc!SeO&)>xV~$N2hMilA-8+u0cZ$6Wg+oYzW0qYCS^UR?!R(?J zFIf9}msh}RZn@X&+Pkeb?$;hKz3Ty4=ll_1wGTX;5~a|GAN%zt0GTQPjVb_xDggT* zqEKC@X_)3|?3BGJ4FYDhRHqnSxP4x7vV5ce#BWjqDRVT*iXN!?*`~Ei?V#dl+a;6a z?9d>oYsz6uleKm-kijetJwq@8uctDJ`FQqFwO3Q>ZffX5uWBqZ#V}LZF&=3Akk}n} z=hb7<+-21CWzo!K(#&PltO2j2*M(B|>w#9ZMQ&ibO8*S;1S$bS%lm{Ns@zr8~eJR_v!!XA6=%3tc=SMKi`2w)5a$}YSWcwm0) zdfP>MP7RFxaW)^UHzRG133FZ*A*))i2aS4m1C()skgLg{t08Cg8>Re17ns2-*IpS-i|2>=g9h_BmcHv5@Ee?VKsNzx_*$pfCir0MbZKVv9%7{C+1bLi~YSp+Wr4 zYh=3op^qcfRPIz28Rv6pIzsx)au;>-P0*$l!{H#RSY z_w`szoxJ0^1d>kweZGaZ^wldJIy~lfYAllgpacJC3OhT1Q_CpwYf}8j;*Caxin;;X zWjr*kDm3*!V^D==QH5suXAG+HL3$H}nC{O`v4?Ukmm<1WZ#8nUP#|cJWB}PU7u%ZM z*w}t5(Puzue}7~=JK(ww5d;p~5suR`svBgW>@R#op&W;5t}+&(3YMM?TbvoI#TwWwobVPs9-SqEWgk$)>rs9JvFT>{4=-C5>MI?BURBdDF z*TSG}f8D3{aF-zTKM8n|wa}h|n0?3*P~#-fw&?r@?)6e22tCWbob%cAaO>)S$=?`+ zKr8QmV{OZ*kK|eeo&$!r%_+YgP6_I^!z*cO*$nt3jcB3*in+%cB=k6yqpPaN@4Ey! z7;IHA!605P#Y&SoRgQYvLOt;*f^*ZSW^H_sbs=mR&(z6(oGqaUHBQ~{96W`y6Ec$gK zrJ?cI*?5D6iWTRRn#fyS4YHo+R9fq?@QkxHz^Krq_3WJb{XQ~Bxu7Ju-JK{7Nleoe zu2tIaHExv#r8v{@^O-}lT&p`iA3s4vCXfcLQ7-G7@1)@LEy5!wX3=9=2DS!N zc&^yKsT@QF^7jlV7PY>qIK+8koPD8t6PXxKQ8U)`QlIa2SlCfV_8^x)6m%WeGV)jY ztL<$Rbi}+)u^s;TqfjPmPK8Ns&erhOOX0=~=){;gNMJzRq?PCsuP$9Ry8zNuskA76 z{Hc^nPr;BhjP6`MyGQL7c>@32ITu*Q(cEya02wCLxI1GJV#7lBaqFDoA&pBf5KU;k;unslVUP81twbr-z3l zsE_OxVWqoE0PAOtpCu9AW}d47snlLX;%{Vw3PnHs_+=oiCsl*r&qS5zW(0xLrl1re z3x3aS3}34VsE2fe+-Fz+t@dH({NpHEj#ckT?j0W>jjpZls=or<1 zND1pF%PS{%D)qBPP5qSC-b|lXfn_Ei21qo!_e^cTgRP}_65fnaV!~I^BMAUE6&X+r z3>ClzLTE~_2{;`|Q!JQ+2MU%S%CUC1GY9rrOq9yHX08H5*VBvi>?$#Up=w&-Mw2Oz zmxPqU&q05LsnDPtiA98oE@F}67dAx$7-{Rt4WTOg2~B?-Pp?}Ky!3#L=Hg|q?-uK9L0V8Mtg z|I~j$1F+zjZ)FA+JoCRM|2Ye=;OlSq9hCiF%bNeG|LeE&9sKV1e`@AieRr_^cHbZR zujTiLWWSZ&|AKD+Uw!xEZ3Z!w%~=Oh#N9ahLdzRd*(@sayBYM6qFP5zR{so=@H!s& zMZ*N&Nqdthw;nsS|Au%<5-M%j(nML)9kBuZxP zGSH+%r9>g6L`|hcS*0L3-c5CD_M)LdasMd3KtwoNqz0d`fPj?=!*b>jna%6kPX!Pr z5oxY8+Oaw<9~!=~3d(sRLPKK@t+Q50o7Jo8=SiV$wWD0N_dCaEp*JO4&f97kDX8(Y zkJA7xYNfG_$l8$o)%S`HK4pa9U8oau$>0K1oSnzE1*68sTvV=#$xhh+AckI@z5gSd zI+Gt8z#skVJ?*E)g5vI?qTaG%3B~W3oVt?XJt$)B-}N4j5TZ#Bgsf)F1AXFQgg@n# zFjH7lnIZF&e`!}?1a18>Xx_XAhLM_RI6G_Qnt?*X~*9kGj!IdGY z9%F{;)*9#%fywyxpTdRB0Di%iHSCx|H>K>9LB@IRJnk)gmy`}Rb4Ctt(&oit=hUT} zB!xbp&QS&NgKc!rEKhiVd;e#Am?tq$46qN1E)WnO^zB?eo`|a&+3X<~`sb@94#8uL z11h$}`GsyOt3Y@|g!E=BzKEdBfj%O2XgH`%)b)by?knSTT$p)+TVHqq257(@rNr=P9?29WLBy|Uv z^RDtAi%Xm!XDfs(DwHh76EO#rGS8Uw8A9r~T=}QZQ;Xk2Yo)8oxA)Nj4RU$dDJh-T zodX19@d_?4Cf5@&Ec}Fwq)Y|Z_`3?*R7gvy;hqN_k2mIX40Yo)6vWpTuFZBX%;8Id zg1+dM;+2=N=7(uT9tBSnZ7LCzRni0Je+YyUQ^KAEk$3bG!jGMkZ$(U*lk*%5@qu?Ub@+vOEXWkaGcdnpoH;7@Cd4rod5LQIrm8SjVR0!%8?%|`H-B_r~$ z7H%coDzHHkgS~LYa36d7tU~&1Linvh_`lIQ ze9T`l$Ck1$V~7b@fs~&@{N3~qkKD!}G<66RQwS8pKVu6S1?Q6-;gek9lQiXn<%#=C z`m>F7jUp^9M>Kz=eVg`^W#YQh43F9MOdy9iiW{DF!?ahopBW@jCE%J+BRmMFrjbsa zWeXyUz_0BD|6JnuYQ7wkVk0?#O!;|Y$COkuq=tG)Bhl5Hmr{6!@6roVQKZpy@3Yc!-6OUZ%_SR?s zWz@FGg2Ew691=Uye2OXYVs_6t6+%|+7QO+F0ERbRhrQRWkm`pY{E2SQxb8bM7EPa2 zsXLQvDYT1wwkGhoA3BH93yNyqe2yQ2Y%-35f@Rla$VFBSyeGxy(s3~h$pz`nUKshq zYGMK8CBhE`UQ8YLKBNGQWB7A4T!+Vf_ogqj0qo|x067Zi3x`kUqPSZO9310#-o2?L z_=PUNzzvO1fgC8~uS9a_n@mP$d&GxQbt+&cxVcTIJJ7$aZupnce6Rq2$e5(Q%<4{( zNWPOgHY4oUyKl%fI8h&V2&4soXuvlF5rT*xF9gyAK-A$IQuCd`41qKQ5KZ`o%zS6? zLm(XhMBjbB#kHlnKd4NR5|t%QWuIbPhoyCer?OO6wK_=l$BY@SC&De6-yux{ z;W}(XG+n0TGx!WI-%(_U4p5WX$Og{S8xKm1a>NX*=Fu+_Z3`N+ge6H)LMKzR5uPB_ zIDCwNPDB46*W^A_MR~Z8~!D;Jn7)L+uYGVp?;wyoe|E ziGpMDOZ|yMa&RKP%)NSZICSc5L*vutVP52V9=M;hzkUN5p;gP0=FySned7$te*}>< z&z3YVhBVI-fD}lB6!;6t2qu(bT~u&YkZ24XS?(BFP8As`>k4q`I8&tOfM4VVzjgeX z#PTvF)10!>5fC0aCEc3hsY|Z4mK~);Z}tlUbGy5rXx1!`0UPjf{r@V=ud*M-rIP_i7Tvv z>Ywm>#IMXhWyRti6HRQYDHiuo17l6GL4vX>P3QF=qz3aoPY4tTc0$8GOrVeV!FnrQ z(4na=2D*wOSle)QD0;@@fr2NsRN43UcJBe1%lV6p^4ZQ%3Ypm#ze3Xm@B#9E2hrWX zzMg+nQ(iZyMiLc;o0lLaX4)oZ#w29QCT4!~nS{*igv^-4OuEGXBHyGY;XhvUFJk*I z_|0ejk?RCJ&h$mW-gq@8*!1x-wteb$xEG?q$G5}!qlvdmcMBSHN?R?Srb>F_Xy9DFqE zkoK#hG2=mgn#@T1{22Rnfq>*m&{j**5hD;jcuJi&|=8+4!c=mnEDKax$?@#0Wfyp7PbZU8~ zb6hwswt6w;po}QOLp|n^!0ULx!Z`%TMXgwuLBHUzGFFt70?zsYW0RP%W$NGxl~=9R zmS0BA3W-9mjGSdc`U(+c@09S&JYxDj!AK~C{*a!(n$M>rk5g7QSMPN8YO(Z*4SjNU z(3v?60z=|9X%CstB;Z)G5DO~f>I7Jip&R6T%IZ7v@(|o;ut6v!hlKyR-2gOSixZpc zBF~6kSImTrBAqg!YF5%EtGlwAi66yudF30pO%$*~6tMLVSBYx!=Ku7YPvIj{u$=+3 zOI|UZAN_(&n}+ZqDd;)Zn{h9J7zoQHgQui^!!_pnZD!}kxxgkZi+N(e^epH%-xB!pn( zgkZk$yQPwl0Qnsb>M@n~V6V)!Lv-+!0vkmCQ|kor?wjMg-n9vB(!}{4>4Zj$ME}*8 zI8^Ot3Ul#0BkS_v{Nw!|DiGCG)K5jbS91jWyTfa0Jj^udh}JAHhObhS&7u4#DhO92 zB30MNcyjUVy}hmcBqJP|Iw{?a-3_zVrW-PxD`3vji#6BS zQAgEM$4U*?1UR|PcKP(i8^Xt_6BwnoO<>Iv_3YhPJr1g5n#Dtt=Ku$jDsn#uA>)_7 zS8`HiHd|xlU$z7pG#bdXE8Ja9a==Vw96iqeqKyS#3vD6-dzDm}%tL64-?TOxUW-Z(~`2;@lv1-C7k zxCYz}t;L7$xDQp?!T5NGdip+qXzeL~20YbPKk2ca-oW)0bNBRBx0edMX+AT9rk)Ti z(Q8Cs5;CAXF&GnHK3yT%S2J7e`Bzy)o7hBCgg05i*o2wQaZGH8PPZkB3`XJA2pf@1 z+`t~saq7rMt#}|Adh7w-O;xjYLw7W5t#=XR{$M&S8&i9_Dw@!Kn4sqW41?0$T{gL* zlx_YAc|YIs^!;Znkt?z}MXo<9RP6z|&i}SL85bFO_ZqJ&B(F(cXtFwyY61t}leAjv zOWx93wEj3rZ@#6}Ki<=uuq2qBQuAQyU`RkIc0Z){`hBUjGnQZU{aatR$=YlS>ddcq zhACIL+}wt^K0f|Cm6u7Dp0_qT2Lzz$3JLmXVSs1oQ(L|G4m_R4~-sxx1zxgdgh}Ok*qjW^VQztp1t&G{qxG{StZ!qt4t6U;C zqZ$@$ila{ypXT0?g9I8pDLQ&D!(KbnbcxzrX3}5P6g^nVcj-lu#ZvCof^!sg6782Z zKeI+pHhEx5eVV~jw{0RL{wg7;ZE{0pd~{iEC3YP))oq@UkV{3ccOaqRJ4e<zd9L}k?tmzoAxfNo0A*=6kXU$6SQLiVhWt#}}qs{#y z&MwtQ%xAzYIhuAMM)4p{I@7RvJsnznL4m)VW(8pjcDj4Kd?dKS2k#CQ((`eMZ1(ttpB(~}P$P0aJ(aNFkOnUO$GxvmrFo%26-rD7m(wrXfG=rBvd zI54@n)LEdJQ6itF9IJZ1yIe(>(>){oK2BG8;0xBqgE4%UgQRCR@n~xgbMB0g0VB!W zs;p0Ciz_4s#_?P$Aept7ii8waFk{L~QRVhF@1>^yl{xLW@-QbAka>|Vl6bs$#_zkK zDR`mi%61SOHPWH&2K-&82xNDBEX%(N=$Yx{_4%LQ;wki$EctTCCQZ$gczdtGqu&c$ zu#xa^>cnwAjK;sMyaaDVT~03%9uMS161Ucvh2!s>^$&*Y%cn4X|Xisa-QL{sJP`_m_)T zB%PWis)P}O==te?!OmzDl-pY^)x!61#B@5!aru7Dw&n(*xmhLa&CC>MruLQ7H{kPl zhYAvv_DO`6y3*!6pD_i(oQIqAp+)Prasq3-CUx;hYyPD~L;fTAVeQsvum>{Rz;w5S zZ|oRO3 zL>1)`v_VISj!I`rM}fH$x=$8{>I#j`e5;7)DoG(0kt18f%aA1n%8q(mUC1NyA|gUV z%xA`erVz?5Tw4u#!mYlih?@!CL2@9Dk6DDrom(Q^;9FM%UC<|*M<;hj7!RC1_biW# zvR60S5aAzWO$P4yz7+JA{frr6^Ps`3rYa|r&jliKRVRY~9C#+S9brJJhZ}~X3S2j( zAPOtkN*A1nu-D+PzQ$%gJl<8Gr|^oFM)|~+;V;wJsNw+IYCj+tw?|JpLYyrDs2fr$ zmQp^#{krAI0j|8~3a2fP%*30wwl?zV6fqeP*k@D*7r+CQ||Mmu3! zrRAygs?H(aC?&Wt6FZ*uM(*gzbYF$`c&e(%=8cYZsb@*?rzJ7$oXV zeM~maNYYy(&pfnOp~24x-%}KG35Pn`gXF5-8w_+vJ%(R-(C=@RbxppqzS;G}&2M&T z$F!q~WBuXW$~ueRLI=i$!5c+=Ha}CZR*=el6pm@4z=kxb^uv=o7RykX);=RrKQQT` zTrsI+88Ve1y;9QAN`K4()s0Qs@vgmMN+DidcCwF|yN`iVMw3b!ErAd8Cxn&064u)v4yjTqqg&!o!{PuT9ligldxN z%UtE#WSG&!okhF^Jf1f#c~1$3YAlsz^~Sx|Q?%_X#~24yi|!LOf9>+@MP7tMMcyn@xD3@)-*i{R+S8q^_vrvnIJT zd!l%Vm(dAr`78pX<#=Zsyelyem2T=N*7jwe6c^Lb)D9rG`sluf&}lXMy(q4339YeD z0UisX9M%Z!8&lxon|3Mo zVvfS^{lt2w=;q(rg7b2mcCJ#i$ZqzaH>;OQ%3M3033b#ZrA^*P^g?KM;PuIHVzcSz z(b+$kp5gw@6IX)ORj2z}d~G~RnFHS`21De%sf5zkzD-ieG;Qa&wotB`nP>C!DW6r5 zmdDD5*o8(9ZL#SFU@@$bn}1iun(**_#8qj9B8M!?Q|c>4IoP(E9gZE2Mz{L5{wwL^ z_FdaTOIuSLqo*3pqlv~Q4}a7}oR`sF=Ba&xz9XAr&U^H~f*QXkpoJGJm1|47+Fsecc47H~IdE36 ze2bP(rgXiLsviXqY}dxkp5GezKm`Rvl$JEv=f3bhgeCCGtAe=x!&sSv#p6XhB5FzlFQN&0ey3W+olu6f7fx z$@$(#IxTIx;b)z17WjUB;$wXWEQo3_-YnMUb~~`0EP(!(_;hxzo*;Wp&SR(e<{)uY z`b=SG(EKPccr!lx^C%~)^S%&f9_qp1>u;b)qFW7A3q?@miaXOf*|Ee3&CPK|-=+fM zMfd4$yfd+4ZxH-`cXlzj%3I8l4%0!zsWX^PgQ!{rMy0ZY$qdQyQv`ZlrjPSqj$ ztd|3L+wA)GM0TsXR3{0odtvFPIO!Q6+?3CeFdlqZVvUbBwM1QF+E|9ak#E){)NEP? z+X7<_xg}ttPG)`nU}8}K%=Knspa0g&Aq{^m@7G*VWcj0>p0_TOO5p2ywfNOl81SEB zrw}?kGs%&87~i#y$H|-hI=9rZfeNg&R~qvCwJ4PF<0|1c>kK=VSEoG$UBUAqdXap? z;i(FI8P+G0O}hSC4vS!5>kT{3(;(IZU6RWoT8w;$AAWO&PU|BLFBuYz>3H16}B z5@;6h)>J0vJs4B6)kud+ zY05!n#fN4uXQp{C;Jwi51wG4P7x~s6t9)-bHQo$*flLrd4gwYxh{=x4!%8r3& zAa`8-<2I%*2%6_4UE|Sz=7u#V-(}}h30`X0x=&@%N6@o6T&0u;_f>Z@HaDVk%hc>7_p@;YTxJ=ZZgr5TsO!@MIA!P70@G#^I1Qrp)W?i=U#c z{#(qHgN_UD)^(od(aJoPVGGGtyvNA3bD4#Gf*5;2H|vT#e5lb&Z$bZdngWrGiS{;K z-OhP9oagNBO7Mm`mb-E}2c<{SXY6DCK98$XJ|QSqhVFbDUOZ{!PNiCGMi5@Ft=n zvy(l>`0ki$vK*D@;_d75d=Yoyh2|}>-nMl}BHm#ym7X{b7lTI_+9^Ayz3md_<{sv~ z|K^rS++A`t1qV?r5;D%C-QCT~&>o%lyc29jI(GCWh$l06-t6!;TkmkU>O&8fwH&e0 zMB^EvS1`}>`TDv{;N$UuGt@FJzQUOC`o6r}{b76Jq&yIVv08J^8q;72vSm2mwyu(@ z!Hvd|!%Cm##NZC4f+mrXn&e0VRrmgvha7QSExW`;d00)xLsPQ!cnsV$tWjYfi6z3k;kE2YwUlSUIw|d(Kd3T$;Y4ikpzAd%@=R!JwW(TX(SjR) zU1(bo_YLCUT+Q!$sgleko$PJ*pgNnJjO#foP#4|k^~*&g0C-*`(Nl3-@p?Q%znLlH z)4?^*B36m#9z~G8U~#Xi1itj8LNH?`+H$yK_E?wYqx^})z%7c;A6!Dr@%E|xsy3Sf z;t<|D!|VOJ4dn{~1N;HjK^wNzOyqIRgNNg{x{V$BuTYxWt?H)-PU5VHlQRAb=H+VquHNsa$ zvXJ=#A6`63ljXrlqQRu**D8vfU8lTp^V9EI)aTHT^)fo}w>OFn53|h&cnBw3{aRI> zJ+RdI`qwM^dNZ#lhLB)!`_2bp?u#v#kY&@{>S{pcOvq)y4sVRF z_l6S+4OIReU(G&4tlNyR*B|(E%vX_-y@ktzFI$ky?L|nRF7UG>3e|stv5tVUD%d9$ zKl<;bFwUCOhbQv0e#k0*#r2aXhP?TmVh=q>h2m=UV{Q|AFLSe~)U`fg$&#SJ;0sGi zQ+b(crcz$oO!{SmnQwE)JKt@eM2G9NL2)Iwz86v#loNzPBfP8>)nbn_D%%3tR2i2u zUfm{hSzF&8$ZTBNI_mG0Xdq-pS$)D@(&A!O+H<9=YN>IpGoPOt9%U`|XYq-kd(?1B zPd*7vn^$>4QKL9t<#>&+)vm{2z})-_-=2%TYdiML!ieNZKATkW6yqrVIBRE}x;Y)z z&NOk9Fc}}(5=ahx=Ltkv)p$Z_gD6jEhdI1e?~3V)mNw~JEmjs_XSw?rlu=~v(Z~r! zf6KYU{CST|q*%-zrwDx;q83DWEg&R(YDCFt_?S<#q3RaQDPV`G&9;+8d;g?<(&UB5 zo_nv4ZLP$!Sg$v$_Hd=fv(9=vYLBrrFvB+G7`;!;J+FSJP9`PYU1)|9Rjg{2Ipo^@ z*QolsU7ZBE;KFMVhMWEeJzzLUw^7G@K)*l8|9<;7`)p(k$z?l0>BPlaExiHj zR-e#Y>tx!_P^)+P*WJ=x)z8ybgd+-wM*PmxPVAY3%CA(6PE9fU=W2n5?zXDQB%kri zwz=+7oB1#Lt^6;AZQI14`D(LD^KI99g!kR_d7dTkIthr#<2_aFA75r0s&;bgrcM^0 zG2rX32^VthCt!H#uSt9!g9EQEllD)3O`Eq%eCrQ<7x_!&kv?Z$9T;;nhUks zTkNJBi$=u;oYw5!MFy=cb~Cn%=E73RDozn9EC^}Up#3c$r*-f-U0yNQ!9MuSnc6e8 zWj6Hd<;ZjW=o+a<&W9It5V8NBusE)6f3y-w;oPPPo4i%i_dlHH*Vha^t73?B5OHeZ<6B!Jiv<_WNoSXPWDhZ4HG(PnlC$KGHDFNiYbf zW!*pu;|RJ5^*cMw=Zsn+AM6Ki*^N2gjlt&`4TOkuzN9gaZ`1z7Ju}cqW&&KSM}mgq zZ!CDo+;2Px`fZ7v+c(i^YntgN2$RVT&o<9?+5W#pnvd27=Sj8~9;3IPIl>#GPpW6UGtag#O`E%4}h8 zZu5M5SF%CIk;K&_aPw;lDZcl#%pcWLJ@2=MU@+sV;MFOE@bH>8kBx3@{j;r&S0>fw ziZi9w#4@g?j((u3h}GQxHV}_G{BGe<+8CKZD!T=?;6&8QIUuymFq`d5H;BLY#Sbru zRD>0jH;~lW?K^$h3lxSc-qE=x$%>y~=NSAM@ZXBqac!$GD&t40gr%l$OdO}SE~oUO z!A|4!edvI*;A7V=vi1Beb2}Gm#=%_a+MaSZDE}(&f^v|X;E#8o1H0;}NO({g z?uiu$S(T;?nD(9PH?8=Ksk-5=9lsO8-S&T!z<)yoG2 zw;bFD+ui#`jm67@%V5im6E6po#V)C-A18=TE(LTx71v*764jH!)t%3-nOI%c2K9Gl z)el4{t*zGYj+H!f4ts(ib{~2f+0gH2mZ?lYcoF&Kg$&lE#dhZ2b6j-;SN|`X31#*s z97sEyd~bjE=-T$E3p#XM`v-sn$0=|jApq#JCHlHNR|Me0{kRXhA52xpwcgX-J^cG9 z`~y9<+|k?CJ^hs)>1~J~s894DeWr(p@5uJ3``CRNmGv3iH=iEgKU%=b4;Z_krmak3 zWcC`MgL=9gT~IPZMugHEc)37ihKvY5e2!cYv>hWrA0}{JPhezc3$%pf2&Zr4S{uoJ zY%-EqFS>B>6qzC8V-zRTx_}g>OqjImstRa1AZ%F-U0Exp&93w1cGvab{<{7U=la?^ z9OCjD*>PxdL2MUn!Kz5}+|$eKud|bc2p-n3Sx%-QC(s|fT4j(pa7b(-hZ{E^XG2k+)NXg_RO>)3IwWA?+EwXU7#xt4D?eEs`HU6gGQU+ZF@ zImhJ>f4cU1_or(L$3I;gIQ{A3+4;}b81EnMZr?pV-aYIr=Nnh|^Qn^SKs)X>ZYvg0 zx>ia(!nJ4NgtsOA{>|sV?>^t{Zts5i`NMmhC;IKQQNykkOKz{PTOW!zbt^|)A8fqH zLOaZb-z{7?Y+3-nZ~5$yIMVmTI(np$1{*voz+mfbx`1gRwGW4BAG{5p|FGS2BP(X3 z3*oTB4=@~qEEPgQyIbesr{)jU59R}s~vivk+t0dS?<0# zZ^1=#&&DpW_*i==CA`9tM$j&?AK)NCU?u%r@=~0%h}-8yk&w$sItglnvzY)iQ%I zgBK3-f@tqmyDmBd2E)KGx<0&y-pSv)MZO(I&It-Lh|w@nA2fgMhiO&YzxdxAbMJ?_ zRaa-3teZhi2B~jZFY=yMjvlMI2drinvI0uPYGVnhdcXVEyW20H-~41H!{$_qv=?gF z9-vza(3#w(-YovE*Xmz;-#kC?o&uGI67@svFNyxa3BPUsT20{{cM~1_+X?*JEug%D zu4E19Jy-T8@f7IEKgRlV+)p3gKfL+;;qDhF(86lIB&o7okjp*bvr&RxouZGs(F^fZ zb{yX{zqPk~*MpYzuI*6|_WHm}LGTO91N7`deMp}A{o;SSZk}7`)Rz&CooABhmwLpy zRY8nC-M@MN&MiLA=DmMs;1!dJGOwSrWtY|mdOMRJcef93cY0O?A$7DCS9y&vUSwaqy=e-IbNR?Tt_EVnrT^p9Z_yCxP!2aqQ}4e)mJG;^S* zA)bABor60L;BHAR;XSDZ97*NolbYCxQ|*4XoWYob(vkV+<{U=-=lsYEJw!{=mX`(S zC=!*1uUHa?ZnQbq&(oefZ%O~@%|CE>{W>(D@5CkeTEw11{CXWhf%K1US&q`RYU3v5ZsmjG9jAA>faraJy9SZ0KbS`ko#uKhUGbBmGrA(J@jp_aE9$g=?jH%4pa&31A3>eF1;P>N1 z-}#gJgFwJwDkGi-iPgpeDscXsUk9n~hi)10I0(FihX_`4+s21n`0n|MYjS3D0QjEP zPL8zq=+m0wS6X8@5gNN6`Uy_|XzQjfJEuOgNNJb(?)LND!~ePl>Ylka-h-c1oG&qo z&ae6QVh$b1j5kdW;sM=b4u3zvbQ;HVq(6>)AD^#J-uYY}q2LnTwLj{}hXd4)hWTMP z98Y%_baS$}gaUL*&OHq?!)WUkmU^&BX{X#dtCHrid+U<={7vERrDBdgjw69ByJLRH zjrYVrek2yJPwXvDya1I=9_T$|oFl8LiOhNre~vGqs&}O_CSQk~K9y?!ev0w@3%H`JMx! zl2ik^E%e;xV4+uEH$d`J)#nl3C^`QeP=5&Mhx+PypZU#pW(+s!rX;byPeQx>0GGKo z`W@o1XG=emWI5@08D8a%j8Q#$Z5H-30#f_+la6Kg(|4LL>2|(G+=Qyq?G9-N6UcFr z=QPBa^NFS{?9(8u*l5!2!q6`U+$Zqkd;$A^0N1Y*qHg`+pVR7e%vz+R?N_A(z4Y?z zGef!9AX5uQSYi44sgIh|BB#tB`sS@>gQo2ICc7$3{Ab^4|IP*WE#t?O<&)X+oTxE{ z_|!)fo1G~aPw-pcyw(8vM+esb-M5~kzqTCxO<7NR);~cC{NIq0c!D(e1Eih%kXHB` zr2d{D?K(l!*SGH;KRd9SE#c6n8s_Ef2Z4_NO4hobnQB*x!ukPa`SIb_iRoxbJW z;Bqd8I&%`gW2D?*y_;DR65(t+s5^yqQ}rnz>)%6z(RmTgp|PV5tr`;jHUP@HwzSE( z;`}tmDTST0r@9@Z9aNxJ*X0WJb_{h1*QrP~0>uPH2Z0G1fC|1ZW(^n-zwnStqxQ8hOuax}Fuw6HZXbtJMgBXTyka3V6Zur?+7vc`5c_Kv1b zPNpVAE>0Gb31&6Tj5lw%mR4^L&;)?Xd%3ZD)J_ZMoiHjXI(8$87kvmv74^olD3b)56&G zJSCko-VqM}VF!p#eQ=xnKDt~(P8Oi-z^0h+v%Vz@7tbl^uKv`@kgxIvCOXj1xqa+MHX^GMJzHYjIXOV~k6(Yi()3CP z1=K;LL29d(`oQy#Z%m&IvDrA~^o$~{{i*AvX7=$Yt?B$7yO>n|gw}II%4jTzlhFHl zkcT&t)T=pz{fdj)Pq0xOaF^ZdG5|lJq__FuY1~=%%yuBuFQU&Wu zUPGR)Y|5rEcCl+9GUwKw&z`V}idS#)kT2V7`FOy^_S&I@HzSuf>@5fS$87V;5^D0*n7eGm=g{lPt5uwyNGnB;-EVbGL`OQbb+lD`FY<7%fq=%8Q`}{~})@ z^&%#8;LJ>)?4<26dNh*u?#iRjXf%K$@yJD(MUM$X9We%tdpRcgm&@vFMkq9H-h>sI zQ{|KmjqiF%j&CW9M(Ptn^T$KC>6ihUjmSHY!FBABQyPNhy>>Q0#ipqe_tb?Fw|ZBb zSrxwi{U)zG{+x$?x$t6AB?XV&AweMYhT!LOnwVXK= z$Nk7O;_n_3XY7V3OiOi**h2GkJ9HcR!B>RCuF-5yK#UU0SR*!?OQfKJ4fvaNQU3=p zSm_#z8itP5Ni<%4*gWk-@{|@42WbPQn2~*PzKTZBn&p%);sY{m$(QLaZ&4(u4)u7e z!~8B7(}FXK;={OQ+dA=ydc!U!F{t2LHuc$7n_zTYe4!_nh9K*px%v(k{WU>b*LT+M zGM1E}L**NLS@a~Kvij;4synT4%W$9jy?Teb>uy(ZbQG%}b`ET|ZH?n)ws;Adym$gd zPOy|8+v#|cdlY*8z_&TrKYlT7+9xE|NHRlQ6p>o*b#38XFatrC^3prhfH1kt)*(0t(b2 zEzIH)ZR0B(-(f#cFi9;vi6d-fJQApRkFl;2OsQUXR#6}4Zd?_07ahF>+K?_fAiO88 zK_7R6j_#2zvzyjXjRHdFNTlp9a;3-A<`gKK%jSBs?~#u_YZ_^Bik3+8(V0(6q~4VI zZ&8g)Y-*)~tBeqHj$qhS&K94KfxP)FGKV6xs~pe+g+q z*8h|c6|Z!co@W0d>cAr%^J;jF6iRs0GSxz*22lCQ?GOzQ5akpuwI{BF+KfB3&^54^ z1#-X=am9@NHm-*n0FTpRg$TF22!yfRF?5rXxrw~9@ze+{91hj>tSTOSh!F!o;{?*g zJ2s>~F^j{3{_N^_9|XFTfqO)xRO0=y!x3=!CxXjA4v3egZ>^MzwHkP(1gZ*`-4pnG zn;H(u9{vUj{$raO|IIeJxbfkg;*rSU6KUp-W^%{3K);iArjb(7s+|r!;7E07u&f0z z6&?FWAMXR)Lpk*YAW{zk_betP56xi3vWgcm8x5wHmSucfwAooVCN-yWW;iL!1yvrr%gQ79>{>g^?@dj- z&Z_jsnQ|7a>-6Eca_P*z%g3QZh;)Ch{FGSsfKYgsOr$FbC^gk02?wpp`x{D$|Kh!5 zOr+v6Bh#hJWK~hviA97@Gs(Y1eAVb+knu*^{}JvaXTrNJgioM=aLQp=jZ~k`NB>As zZGRSBdlo%&7L7+Zt~ui2Cs73#*2%kC%BvEg823=HRPV|k9LlPkoTZtDe?SxIg7{o) zD@#B?s?Cd%W`ANT1Zm5Nf#u{Qn-+EwIy;WRVCJoum3K2MJF`s@`q33gW%4FE*rdT2 zA2)+?9%M9>6g!Hl%HMo_R%L%y^`$G7?COlB6b1p@glJT!-mNLMk-2g8m#KoP=)+iC z%j_`;4tg-kX3iFzE{1iAj+2o2$%NWDT1;tl4OE;q3w=a9FGzH9!jgH-f{M^4@sfW= zi~uE;a1EAl6_$cxAtHeh2$3K(44@eX^Q_`k1fU*i_Pl}R7O>cxXkGFn%C%f>ASqGA zf7mA!`r8X4d~v!iRN4Mt&oZH%1?2&z_T3+|pFmC+928u1^g1dZ}nIIAROLXB1MJ-1VXjqjwO$8f9}jc8!neVnR6$3 zD+xFveOqnu@)!}(O6lJbN>zID=Q2?}NXTm+2E`9XM`BoxqnVAPIsPZE<7nFBLFEe! z-)PkI@Z@TmDS9W64;4nWYJIuAOx7U*LBx6!X?vrBXE#`futAUoRxZ zJgmPIrN08DzYIllZ07Lifv^aKGzdmmhhg8C1QP-Au2%-c5Su_bGlmTdrXrz_#5(5{ z-fMq#`_pp_xgdpHm#0lIE6`EOK70={@D_prKS(zGjy<% z^vC5sgI|Qi+@_7wc6u`v+B+fek=ng->Nl*i?C|qmPwWl{8QgDPJg^_K+*G>m)`C>= zJE)vPAt@MNpOq3PIQ(ql60GgVTCwggp_fV|08;;>ZHVy6Ce4h<2Tor_pN7(EvbsRs zTE0^2#S>D=48U9(jcMX zG^V9ZK@J$3z$`)f4qK#(%if(rn6xt1AB04t%UJ-KGH#40HMihO7*GKW zsObN%znl^n(C`02=<5HRVi?eue2po9$yaH&`R2^f0{)%CK_`8sy`9);ir`vA={0Xg zMVGBa?Wb8aKA3m;@?x7!THGQeks#rejH@xt;PYn*)Kvy;4Zbuu*m}qC_L*&bDSzh49RR_2aZw= zoDAxt@6GnFHaq{;`_EfUqkVNW-Ljds5Pe6pc;SLv7*IDm)B6J8sHk3xW@j){@fCx_8 zJ*v}I@ZAGuRcw|85)G;!Y$Rd?3CYB2=#KY9zKb0QM)!5R_{|{%eKm4ULXB?X@Zl5Y zl7L`{=wRV2!qa+yP#@TwXbIDAkbM(~X$Yja0E#;RDL#Pgp+Zn7Gu!E;w}rA-QOn~{ za}rRut<`Tn^6v12b43%IC}vC$>u9#ZS(dzt=&-hy@hj_Kn=s5ZI@*)Oh&1%gVTg8}Zy;W}C9#CG57jJAY@1b*(1^mXhqe1D?G z5cuv{-9nhYwaiw6HU7(U&sQ1bI zGrEmci6e$e!SzFj+Xk7wh$04L>LfZGc^6NnLFK_SIRserOdxD~bh$`>$Q%-q3$P;y z!iq6c3{4-XX5J*)+9c}U1XU@52h|MCzv#UKa&0z?I9YHscHVtr$%fzwQytJ zt`v1jSl~Eifqj7#MW?2vX%{?wNPYrm!O+y3x)`kVLbkoA%RZSP*ED6NB~_&*oQ4=3 zAC$WAkVRClZk912Mq3w_3DYfv1M%2Uet%o;0G*_>y_-iZ)>U9_uJFIvX6Q5NqGuLZ zIGMbspQB8>dqOJM3@GIVx>!=1t(y7laE2UkhU{>}Uz!81H0P{8uYPK1b|L#!?5u#C zXx^ICo2;Gl2QG<))i@RN8CcxuxX_M?2Bff*MrtoLd!w$6BvbwxQEiF(8lFjGy%blo zA2n9HF^@2@qR`4uN#$B_K-nMosz31gf8Y!M2$5^xLSpD3!cjK-nRfa+7_vgxCCU$` zIuEC`04KKyr@sWJvJ9uN0w=T@_AV#J35_>7$Q{HJ8FXwWA>zZn+-Gskxv4#-W}k=E z>6kdRd_=U`4~(QnD|!X7-tWN|HK3^fBJP|LF3kpAb0h3H1KlU-S!e0(7vIZxc% zF|fLE`FYgj_{aJuZUVt7@afT&xzvfW4x8b#j0R{gBcRYXF#5x2r3a|V+~SPt71=2^ z^5Iv0E>XOD1ZlZ$EB3ax^kVVxQE^zs{Nu%3JU}2-PrvsyV9aHI8Z;iK;t|D%_7ozN<)EUi1qJGOYty z%F~{|WT7)+$voMT?!5U6LOY8>ox&&?qW;s$pt|-yfmeo|u(l1?%0HRA2w@PF-!*@> z-U=HE`S}ksYPX_aD?60;Mh@7HAOGr433(*VpUqDN=uvFN%BfBGlxZ3siq$(OVlvRO z;_YzYX%+2^awAGCnR9Bgtp*JOWEhhwnbR}r`C+LQH?)_O3YH*+Xc&-@C>yP@q&r`z zI!Qz$)iPnw%GhD5*4kOkXX+dj`%DTYg~vhw4+rp%2SP#3k%2H)xFHC0xj}DQc}jEj zv5|=c-&{@E?mq!dlazDrc$vY zDy|}`w&I&6ek)Tgf2{*6ND#lbf|tqWQk;V;irWEf(pJ1r08tjfgKGxsk{rUgbv$T{ z_CKv3CylK=uB~;PD{68RGeT0jAksoz zI?&c3lbWWP@D+1^kGOupFnpx#Khp?asrfmAr-$P@vvccT7=s3&d9@nb_GLP6$P*LL zxMmsR7duWA<5&CZH0V>c!C)8)=d6@I2kt&XLXI79PmQ8S8R%XE$7J;R%if^rrE9LA zq`0%;bRTwfst+leIK!PZ<)3+xo>U&UZ}d$BoB9ra*)_LJzDtVm869X<3((SlZuyIP zVM;kIo7@y@7%wnC)Ih?*58(FvJXI~C+WF#I}xL+iCx`L+Low zNC86}Ft*)XE8n}%VGI^(q?iE}GxzHdW)s@9+xSMJZPJxSrQ_^tzc|#FV+jlI&xdzR z^F~~J#8D0T@V%vCre}C80~#!WKZw)hHv!aMpbMcZZW+*no?wFSPXi!cZy z=aI_8@$U~2M==0%$sICr{JL+*DzFgv)EiUFQo*!nkj%teQ4e^I3)_hE4MVUTK`BEw)UTS5j=EWOnB?rS60>F;U28GQun9mdeS1W^$g8g)*{XqncSaI=DZgL@B|6VW?wr|Y?#3F$Oy~E zR>om6ujddw$NjNqR{1o1l#4w2F}0hMFDf>aZsqYLw}}_n1+h1A$vPFJ$6o;nt11cv zoN^<~9i8r@F;$czqN7T)ucJH$_5RdqeH&UQWDaUm3 z92o0?DBVq-&7tB>j$}IG8SShG>!Un`Yb~mBXMK z%UU5uD8<&re`*5>dM(47_@mv6k&KP1V8%wNziO9~kVRl2 zOai(@LqG%tS8xl8cq=Vua9yB?`Il)56mkDDt^bF?S+=1>s+jLg7HEgI$}%zD3D90p#IxByA@=f zm!J*0J+e7s;6;`TT$WMLRd$tB>tq94!7rJ!>~v)jCxNeCCWA4P#Sb5q@n{?G1nJ*`H1wq91XRNj0MZ0Bh0foR#u*T6D~Y zDxk;9;MdDq@Htb%!ryWOpg+y^!B8@o{(w|pr22|SGzTA_&`>}IACaY20pu@OID~Bc zgx7cy)H(i)Y^WhR%Iku-fMUqtKfy@RWa!+wJIktCg~foHVn9c+uvmO3OtRS5VF=bu zLi%M1k6?WzLZ4IvKTuuyUMar3e_(K|Q6H;I_vY)!0a}_J*(Ub&n-?Q8F12S~?{uhp z`cL`;;<@{zQ2KpKGAmV5t$dsSP)sTukcWUm`8vy9vrFhZjtNL88Hgv>2Sn4w5K2Ja z;FL%FJ2=`UJ$g7SZ#hFIE@PSYdr;!1J(-Wz1gP(EgGcZ<AKlH z6lN3as#Z~FPw$)WcDqRMC6$}jDBl4RLVLxAVc(-T5AX4%c`Eb<;YD6APpS^n76F5MKHbLz~0_p`kVu!LL>-F*8QM z@Xc8?HfR<@aj4+a2+4M(*MYd3`|qzvEwrnJX&?8vsDaiF&3lUtev*4mTVxa;0yoTX zfw+!w(cIBZa){Xdf4x+{9NpTERqFXfubEf%NM5qe8R8ujT~j0YsnnL`=Ol#X{)<%J$N#UuSA@fd?CC!KD-t~P*_r%#ZTflO<|l~oiM#jrV45Dq zTCI4zx0=D(V)Ot+545#0gB7L~czc-uerpwO5bI+gauP%yV_q-!+CQWZeIg&d|6~rA zEZZ&k`O*gt;(>s|UBK5w;!Y?Afiv=3#AAg&0Ao@lteC0C0)Psdn*}o+V)<^7{bxYX zB0Zo`2i>fND$DjeZ)v^cUqiJ>5TPc#vkCdbO!*7KlhjNh?G92+FjqI~A269wQo4Mk zx?q-JOMZd@OAR_|dfs?in`E8$@8#g8i21ZBbL9LbC>14&6_jGua4I%=J@6`IZ%oRC z_1_TQ*}-rctkIct7l|}m-Tt>sgg$2kBiyhRY{k2m6^y=NBL=zVvBBf6TYaPbvm|KP z&5+;4U|nftSnE&?vtyLiumOd7!TU{h<4laW<5r)lTH%pcNvSS(h(Xo)_dT;A^E@nV zqM4H8ggdWE?8b;}y<({H4AD3&XxNT04t>nWoLGZID<5?XCmF7s=1s7)`N?knUNYUSZOB5v!E}J$|IT*YYz9XUBDGG`#j4mjJ2W&=qzdbU)gA^V< z&JKZx;sU?1Ti+?Vi@_1rYq4(lPxfPNx?@5cegn+ouPk$JoK|2_ZO97~()t?NN1;;O z*8!p%6b137-oEZwJ9uz<#$x z4#cnIq&im|3IvCx0hX}IhUc0GCBayIc)M7_n|E^YqOpsXMxUpyNVwr75%M=)kD1U4 zW2$KLT|`Lnx2H@o3i-k%+0&7gP80Pe8^6RbRXbX;l3jow5lLr2SS<`mKTa5&0};t! zK$s#dNk4WNoE;HKWk47c42kep#EFRHJ|HaaD}omW_my)W0LPoTMADaN!G@42Q^DLs zR+E8Co4Xiyb-L91YnvxJ=t^i+bVheyo@<r7Fyi#<|9j-?jV#^fe#H#W=`rCMiwpQ`Do|;Gcz(R zD*b@;o#)NLO-UI>(D#_W4Pud$(GsH|>JiV(Hv+8%`|uhKIX-XdMym-JnPPX#GP!O{ z6uz1ZOisl(38;_IC`DCDLsk0H=Kncis7kGTzMhsbT%eVf7)RNiJjsl_cLy zp~I=1!>Q=P;ilbC6u4_GR z{p;+iW+rNbRc!FnlN^YStpkGw4pDKievs}dyNivEjc7wTB^2J&Tk*K zDk#}kK9Z$ErDBDM*v*g%;`1AjqY}vm23;bs8I@i}1;#$po_x@g|1(!6;#Iuj(P^_E`8sxPasOgfNrZK83i$nnj#7@RKPoG$;6EV0`aoq zPDTRJSbY9spt4SSf_5?Qfs*UU!XaT(oPx7Z-*-xuRVXu&vCP)nyDSGh2u#>D0$muT{`#4=9!-rE43$-?I+VJi|Kf2BbM? z8ZPAuY${|Q{ZhET`}MC(<;7~^;Ow$JXM8~RpaW`UzlIPhyX>Ac;EoTU$ojA)bdX;D zsnaerEc4$*-UL*id~zu8CqxG(HY}`|F)?XXYMN8~SYT1dDJgVF_U6f7&AksK%_n-{ zFnZzR|8yEX1T8loXXW8JSU^GpcHY3f{jf8M+IwS+KW0tu!nlv}V8%W^Mnu72DQ zNG77*?4hW%3Zph=U}S7O+R2Vw4O*+Ed7ooYo>*vwq>!#vLtk$x| z(yeQB;Ox5fN-zwTHf>d;A}r7~b%+byUYG>G-JwEo!|y7d{s}`++!h ziamN%269_tK`sjf)B*(BK%eZnexjx-Xb3-%MZ=x$9Ls>~ZMi1<>)5a*)?={t;wOE3OZa^-QwJeK-w(|uJr7|DtP@CfESbjpYr)e*pu z2w>oUIw1o1B^eRGnEznoe@;pSupk2XrN2g&M}){9wouJzy=4UDb|3i?bjuugV|9<4 z`l5ErjQD-yNBluO!H>UJ4`Q@$YKbX`XqM5I8rNkt3 z-M;Ugc^pc+(_;Emz&}&rbu{7Xr6n{B{M7?hFyZE%@;F-0JCtZNB+wf>djO)1r_h?!?7luq&iL9KWbT-Tv$ z`g+s}Zz+L+?eN!Au+y(<%0MSEvu9LWCAo4d-vou7O9uFdQo@}$Q?CLJEP-NA#bB2O zT*qjI>yoq|I$Mdu=cGQwwF6?9M463C?)rxLQ)7fx{n z-t}?{x8#1nERNW@-hCa&U4U3@U4wxwV0!FOi$loEYn;>%A^e!eoo0Yl)+Ph@_( z9dxWmOy`qNFgq%kOno)$b+P~GcXS9%iv2W4ianiS)6-isnQ)Zn3$q7nv^UCT7! zG_ohsuHJ9JS$cvha>PQyq010BSM|05`tb81^%zp07d>+4;BLv1-;06%bE2>8SdiuF zO>5c93vnS&vY93BzGcDe%ZrqF=I5G?GcEk@8nO}2E`Ql{l|FXH_S`i_Q@+X;ny6F> zhYLlmBuuCdffyrs!I&QC`dNI@l>M)+k*I4MQ2gB)E!HJ5(Ozj{&-k|R{Kp)LAtEzg z*CjE-r~CUyXWD9&78&|*J8Jj|1$)82&;b2oy?==%Lz9@Fk<{1qW=YL*J0jmmvp;U` z&ZY%EUS2e!Zpdj3*K7YhA1(KMXwID#gb_2=n|kcT4AvvMC)%8icmJ8YC5}rSiUJyn z+i3fY85Nu2iV}@a@2DWv=?;n(p4czB3=Snllv(>1ucYa<;x{8QE~$-pq)3)GKdXAE zZ!?w7W>oyapIVe^nBQ>0dLN!#DiIKExxswU&gpBH>Mo;0aC15xV`7m0_iEY8ug_mn z5eg`2H^Gb;lk>JbS8!Y=xlh}wcuRaKF4#Uqe^niL5m0L`U1UOX5@kLdK@FdVSs+ofoI0lOsRn9t4R;}~3a>LhJv>NBehb%&l}8u$1KP>H&;835a! zgxEj8Z>bdSoN^wYPz$l&WJA3Ed?fSw-Z1Ck@!3(#*gS3dsyq(6uL2fvnp^)`>8RD6 zr#pbP&3rM=7IlNa>$c~lNfz8flnXBQBjJ{Si7VmFR!^(6*zO`Q7rNdqSE}R5;C-5- z$C=QR;qHR*BHHC-E<_!?zYw&8a}o9KzG;v#kz#dX4{+c=-}VVmh4`7TK7~?z6vW{I&nlSG4b3F`YGkkCNLSI+mKsk&M#kQ zuRLoAoL$Zg{uHFLjJbU_$TVO0bS&Bp>HRunoU}Rg>wHZ6w6Nvmp{K92>s%2x{G5Cl z85VS~sELmp5zHyPc34?CAz3%~v3iapSXZhiY_4Fmx6aVgRl2kkXqM<1!k`HjPxkV(Fwcoa122=WpL$^}V~kZf!_q-6{*5nwZ_E z%d@+V4D7hDRKR)J;yacEVN*x_!YHyV{dJ;yTBKpt$;x6M+g%nQQC)4mT5WgArZoYL z7s$C1n{I1xLPSTZuloP)eF8+5OzFdXI#QX4N1q`!B<-z+2V&bp2UeOa>7`yf-0UX`H~~%i^J() zII92p6K2`0Cifx}273B0BEEhP;FOP1!VB|AWo!~(&v|@JwfXBV=cI5ZuIDJIs_d_k z+&x}xTRyDrN(O*^%>uZxF$2k9EeDx{wI`|D&I>BB`tD<}V$W&4`rpRACF>5vhgz>c&dFDx{Z|54m_kY{=j#U1| zz0&e_YYnifuK4$7vc-K(ugsl2fOSBDa-Dr%Lc#3BI+$s^<#IP=73l@jAxqA1(!R;= zeMHtRRQ*SmoavPPdJBqC@wm_GLj!dscC{z!9Sh%ulxVIT(d7M|Pjoq@sn=Jz`DwQ{ z&c2QqV^1>tjD|u4eG~pE)38MY8Ihr#IRUoR>2rUQz|oLpsBle5F%}uz2+SxmXT5v5zq&N;QQY{pZ;nZKKdXtyv}lZY;w~ zsJ?j+?%kIKkP}g=@JAu(xqx@!qv!zliYnO-4BiwRDiyFVis=w5no^n z3n#s#UP9J8bAoABLCNm34$9#7&xTlY1M^BV-B{<#+d5B0M)vd59Ce>P2Y69Rwxzsz zr+UX0lC7M$;flszlEpaGv5`hBB(-d47hfje_j)i1#u!Xb?s!Mu?)v6%k=N@tbYL-^ z!VZr;U#iiz*>}+0mJ@Q7sH6$WzJwpHjH~Uo&Un7LV!}_rW_Gm-?p*_}K^51f@@k3V#An5OU z&O0AE$~=2THn6qz(}D7=*Pc>aOi|dkgf(QAo+;ABGyiF3uI6w&#kswfe(d>E%gqMa zQ_=gcILce%0fDDOJ{LeDy(S^IMWIA%Ar*Xzb()NW(IwWUBE;RN{nh^6L94T@0JO+( z#R^Y(x4WV0YT8A)_Wah`)!DO_ru97u7x8CrWC!viA-~;(Ec~BnVBf=l^<;Umbc8FP z!>(5bA?V?5x@&=}u!w7LN>w_P*GJqG$!&YQ;jx8Y!utGQoIr#AVUB8wO3AOoTJCw) z$tyF8c``MyY%!blZHsdhvUJg?1Wm;1K$?RVKJN)wXMd6f%e4`?zJWm#PtWJ5M{9E^zE=ZS01RLaKwHcSsBV==U0+y|=fxvU+pIC-Diz`{ za?rI!*~;q79?E^jmd56c&IRPV8vm@m^TYme=XUS#^pIdTK<>Cz$#0|MdA)dTiLExY_r`d`yiTK1 zgkwa_h^C=#W90%8Qrs2#$ukX$;p4X&AY^_K$RTZSFtqM6GL`%xTx{;i9 z<2=u|apJL~?t0=Z{Bl}HUD02Xsx8#lEUR*}zY(?~srhh9i-;w5Q;TH&pax)|Uy^+M z&V;&BkALT5tBb~S%U9FygS2T^rzYOXh3rgP!g@}EvdXR=pEn;RN8|Pl)v`%s9{bl5 zz==Qewu7K*HQP)*NPq2|{@yd6kBm#TW&s&y>|lzufs#IIa`DbJYtq#Wj^ng=U#oR; z?-Vx@ZW*R!@WJcf622E5C8mD7dIzb$y=sn86)AR1PNSVvKyp931j$>Orvf5EQ z=I;ydJWwL9z$5eFIWP6& z>+E7kIerwYw~$4{Yv#MmCSdVmGGTk%P_fJF4WP^xdjh`Rc;LvbuX35a7hCxlIT19x zHEiEziSvd$ZHQ&X^eM~m_7UpcQG9LIxTxu3wLUeLJ*z)?9hlh7_^vd20v1xH+X0CAMhN579sKWsTm=}qKHg9D{+mYGAdg?}PrmxZ7Hf2{oVtpET3 diff --git a/site/core/py-modindex.html b/site/core/py-modindex.html index ce72052e6..fa9814cb2 100644 --- a/site/core/py-modindex.html +++ b/site/core/py-modindex.html @@ -1,18 +1,16 @@ - - + - Python Module Index — ocrd 2.41.0 documentation - - - - - - - + Python Module Index — ocrd 2.58.1 documentation + + + + + + @@ -68,6 +66,11 @@

      Python Module Index

         
      ocrd.cli.log + + +     + ocrd.cli.network +     @@ -128,6 +131,11 @@

      Python Module Index

          ocrd.decorators.parameter_option + + +     + ocrd.mets_server +     @@ -143,6 +151,11 @@

      Python Module Index

          ocrd.processor.builtin + + +     + ocrd.processor.builtin.dummy +     @@ -243,105 +256,271 @@

      Python Module Index

      - ocrd_utils + ocrd_network     - ocrd_utils.constants + ocrd_network.cli     - ocrd_utils.deprecate + ocrd_network.cli.client     - ocrd_utils.image + ocrd_network.cli.processing_server     - ocrd_utils.introspect + ocrd_network.cli.processing_worker     - ocrd_utils.logging + ocrd_network.cli.processor_server     - ocrd_utils.os + ocrd_network.client     - ocrd_utils.package_resources + ocrd_network.database     - ocrd_utils.str + ocrd_network.deployer + + + +     + ocrd_network.deployment_utils + + + +     + ocrd_network.logging + + + +     + ocrd_network.models + + + +     + ocrd_network.models.job + + + +     + ocrd_network.models.messages + + + +     + ocrd_network.models.ocrd_tool + + + +     + ocrd_network.models.workspace + + + +     + ocrd_network.param_validators + + + +     + ocrd_network.process_helpers + + + +     + ocrd_network.processing_server + + + +     + ocrd_network.processing_worker + + + +     + ocrd_network.processor_server + + + +     + ocrd_network.rabbitmq_utils + + + +     + ocrd_network.rabbitmq_utils.connector + + + +     + ocrd_network.rabbitmq_utils.constants + + + +     + ocrd_network.rabbitmq_utils.consumer + + + +     + ocrd_network.rabbitmq_utils.ocrd_messages + + + +     + ocrd_network.rabbitmq_utils.publisher + + + +     + ocrd_network.runtime_data + + + +     + ocrd_network.server_cache + + + +     + ocrd_network.server_utils + + + +     + ocrd_network.utils - ocrd_validators + ocrd_utils     - ocrd_validators.constants + ocrd_utils.config     - ocrd_validators.json_validator + ocrd_utils.constants     - ocrd_validators.ocrd_tool_validator + ocrd_utils.deprecate     - ocrd_validators.ocrd_zip_validator + ocrd_utils.image     - ocrd_validators.page_validator + ocrd_utils.introspect     - ocrd_validators.parameter_validator + ocrd_utils.logging     - ocrd_validators.resource_list_validator + ocrd_utils.os + +     + ocrd_utils.str + + + + + ocrd_validators + + + +     + ocrd_validators.constants + + + +     + ocrd_validators.json_validator + + + +     + ocrd_validators.ocrd_network_message_validator + + + +     + ocrd_validators.ocrd_tool_validator + + + +     + ocrd_validators.ocrd_zip_validator + + + +     + ocrd_validators.page_validator + + + +     + ocrd_validators.parameter_validator + + + +     + ocrd_validators.processing_server_config_validator + + + +     + ocrd_validators.resource_list_validator + +     ocrd_validators.workspace_validator - +     ocrd_validators.xsd_mets_validator - +     ocrd_validators.xsd_page_validator - +     ocrd_validators.xsd_validator @@ -397,7 +576,7 @@

      Quick search

      - + @@ -414,8 +593,8 @@

      Quick search

      ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 diff --git a/site/core/search.html b/site/core/search.html index ab746524c..acfaef25a 100644 --- a/site/core/search.html +++ b/site/core/search.html @@ -1,19 +1,17 @@ - - + - Search — ocrd 2.41.0 documentation - - + Search — ocrd 2.58.1 documentation + + - - - - - + + + + @@ -125,8 +123,8 @@

      Related Topics

      ©2018-2021, OCR-D. | - Powered by Sphinx 4.5.0 - & Alabaster 0.7.12 + Powered by Sphinx 7.1.2 + & Alabaster 0.7.13 diff --git a/site/core/searchindex.js b/site/core/searchindex.js index a45f7a6bd..36cda68c5 100644 --- a/site/core/searchindex.js +++ b/site/core/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["api/ocrd/modules","api/ocrd/ocrd","api/ocrd/ocrd.cli","api/ocrd/ocrd.cli.bashlib","api/ocrd/ocrd.cli.log","api/ocrd/ocrd.cli.ocrd_tool","api/ocrd/ocrd.cli.process","api/ocrd/ocrd.cli.resmgr","api/ocrd/ocrd.cli.validate","api/ocrd/ocrd.cli.workspace","api/ocrd/ocrd.cli.zip","api/ocrd/ocrd.constants","api/ocrd/ocrd.decorators","api/ocrd/ocrd.decorators.loglevel_option","api/ocrd/ocrd.decorators.mets_find_options","api/ocrd/ocrd.decorators.ocrd_cli_options","api/ocrd/ocrd.decorators.parameter_option","api/ocrd/ocrd.processor","api/ocrd/ocrd.processor.base","api/ocrd/ocrd.processor.builtin","api/ocrd/ocrd.processor.builtin.dummy_processor","api/ocrd/ocrd.processor.helpers","api/ocrd/ocrd.resolver","api/ocrd/ocrd.resource_manager","api/ocrd/ocrd.task_sequence","api/ocrd/ocrd.workspace","api/ocrd/ocrd.workspace_backup","api/ocrd/ocrd.workspace_bagger","api/ocrd_modelfactory/modules","api/ocrd_modelfactory/ocrd_modelfactory","api/ocrd_models/modules","api/ocrd_models/ocrd_models","api/ocrd_models/ocrd_models.constants","api/ocrd_models/ocrd_models.ocrd_agent","api/ocrd_models/ocrd_models.ocrd_exif","api/ocrd_models/ocrd_models.ocrd_file","api/ocrd_models/ocrd_models.ocrd_mets","api/ocrd_models/ocrd_models.ocrd_page","api/ocrd_models/ocrd_models.ocrd_xml_base","api/ocrd_models/ocrd_models.report","api/ocrd_models/ocrd_models.utils","api/ocrd_utils/modules","api/ocrd_utils/ocrd_utils","api/ocrd_utils/ocrd_utils.constants","api/ocrd_utils/ocrd_utils.deprecate","api/ocrd_utils/ocrd_utils.image","api/ocrd_utils/ocrd_utils.introspect","api/ocrd_utils/ocrd_utils.logging","api/ocrd_utils/ocrd_utils.os","api/ocrd_utils/ocrd_utils.package_resources","api/ocrd_utils/ocrd_utils.str","api/ocrd_validators/modules","api/ocrd_validators/ocrd_validators","api/ocrd_validators/ocrd_validators.constants","api/ocrd_validators/ocrd_validators.json_validator","api/ocrd_validators/ocrd_validators.ocrd_tool_validator","api/ocrd_validators/ocrd_validators.ocrd_zip_validator","api/ocrd_validators/ocrd_validators.page_validator","api/ocrd_validators/ocrd_validators.parameter_validator","api/ocrd_validators/ocrd_validators.resource_list_validator","api/ocrd_validators/ocrd_validators.workspace_validator","api/ocrd_validators/ocrd_validators.xsd_mets_validator","api/ocrd_validators/ocrd_validators.xsd_page_validator","api/ocrd_validators/ocrd_validators.xsd_validator","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["api/ocrd/modules.rst","api/ocrd/ocrd.rst","api/ocrd/ocrd.cli.rst","api/ocrd/ocrd.cli.bashlib.rst","api/ocrd/ocrd.cli.log.rst","api/ocrd/ocrd.cli.ocrd_tool.rst","api/ocrd/ocrd.cli.process.rst","api/ocrd/ocrd.cli.resmgr.rst","api/ocrd/ocrd.cli.validate.rst","api/ocrd/ocrd.cli.workspace.rst","api/ocrd/ocrd.cli.zip.rst","api/ocrd/ocrd.constants.rst","api/ocrd/ocrd.decorators.rst","api/ocrd/ocrd.decorators.loglevel_option.rst","api/ocrd/ocrd.decorators.mets_find_options.rst","api/ocrd/ocrd.decorators.ocrd_cli_options.rst","api/ocrd/ocrd.decorators.parameter_option.rst","api/ocrd/ocrd.processor.rst","api/ocrd/ocrd.processor.base.rst","api/ocrd/ocrd.processor.builtin.rst","api/ocrd/ocrd.processor.builtin.dummy_processor.rst","api/ocrd/ocrd.processor.helpers.rst","api/ocrd/ocrd.resolver.rst","api/ocrd/ocrd.resource_manager.rst","api/ocrd/ocrd.task_sequence.rst","api/ocrd/ocrd.workspace.rst","api/ocrd/ocrd.workspace_backup.rst","api/ocrd/ocrd.workspace_bagger.rst","api/ocrd_modelfactory/modules.rst","api/ocrd_modelfactory/ocrd_modelfactory.rst","api/ocrd_models/modules.rst","api/ocrd_models/ocrd_models.rst","api/ocrd_models/ocrd_models.constants.rst","api/ocrd_models/ocrd_models.ocrd_agent.rst","api/ocrd_models/ocrd_models.ocrd_exif.rst","api/ocrd_models/ocrd_models.ocrd_file.rst","api/ocrd_models/ocrd_models.ocrd_mets.rst","api/ocrd_models/ocrd_models.ocrd_page.rst","api/ocrd_models/ocrd_models.ocrd_xml_base.rst","api/ocrd_models/ocrd_models.report.rst","api/ocrd_models/ocrd_models.utils.rst","api/ocrd_utils/modules.rst","api/ocrd_utils/ocrd_utils.rst","api/ocrd_utils/ocrd_utils.constants.rst","api/ocrd_utils/ocrd_utils.deprecate.rst","api/ocrd_utils/ocrd_utils.image.rst","api/ocrd_utils/ocrd_utils.introspect.rst","api/ocrd_utils/ocrd_utils.logging.rst","api/ocrd_utils/ocrd_utils.os.rst","api/ocrd_utils/ocrd_utils.package_resources.rst","api/ocrd_utils/ocrd_utils.str.rst","api/ocrd_validators/modules.rst","api/ocrd_validators/ocrd_validators.rst","api/ocrd_validators/ocrd_validators.constants.rst","api/ocrd_validators/ocrd_validators.json_validator.rst","api/ocrd_validators/ocrd_validators.ocrd_tool_validator.rst","api/ocrd_validators/ocrd_validators.ocrd_zip_validator.rst","api/ocrd_validators/ocrd_validators.page_validator.rst","api/ocrd_validators/ocrd_validators.parameter_validator.rst","api/ocrd_validators/ocrd_validators.resource_list_validator.rst","api/ocrd_validators/ocrd_validators.workspace_validator.rst","api/ocrd_validators/ocrd_validators.xsd_mets_validator.rst","api/ocrd_validators/ocrd_validators.xsd_page_validator.rst","api/ocrd_validators/ocrd_validators.xsd_validator.rst","index.rst"],objects:{"":[[1,0,0,"-","ocrd"],[29,0,0,"-","ocrd_modelfactory"],[31,0,0,"-","ocrd_models"],[42,0,0,"-","ocrd_utils"],[52,0,0,"-","ocrd_validators"]],"ocrd-bashlib-constants":[[3,7,1,"cmdoption-ocrd-bashlib-constants-arg-NAME","NAME"]],"ocrd-bashlib-input-files":[[3,7,1,"cmdoption-ocrd-bashlib-input-files-I","--input-file-grp"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-l","--log-level"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-m","--mets"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-O","--output-file-grp"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-overwrite","--overwrite"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-g","--page-id"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-p","--parameter"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-P","--parameter-override"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-w","--working-dir"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-I","-I"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-O","-O"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-P","-P"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-g","-g"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-l","-l"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-m","-m"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-p","-p"],[3,7,1,"cmdoption-ocrd-bashlib-input-files-w","-w"]],"ocrd-log":[[4,7,1,"cmdoption-ocrd-log-n","--name"],[4,7,1,"cmdoption-ocrd-log-n","-n"]],"ocrd-log-critical":[[4,7,1,"cmdoption-ocrd-log-critical-arg-MSGS","MSGS"]],"ocrd-log-debug":[[4,7,1,"cmdoption-ocrd-log-debug-arg-MSGS","MSGS"]],"ocrd-log-error":[[4,7,1,"cmdoption-ocrd-log-error-arg-MSGS","MSGS"]],"ocrd-log-info":[[4,7,1,"cmdoption-ocrd-log-info-arg-MSGS","MSGS"]],"ocrd-log-trace":[[4,7,1,"cmdoption-ocrd-log-trace-arg-MSGS","MSGS"]],"ocrd-log-warning":[[4,7,1,"cmdoption-ocrd-log-warning-arg-MSGS","MSGS"]],"ocrd-ocrd-tool":[[5,7,1,"cmdoption-ocrd-ocrd-tool-arg-JSON_FILE","JSON_FILE"]],"ocrd-ocrd-tool-tool":[[5,7,1,"cmdoption-ocrd-ocrd-tool-tool-arg-TOOL_NAME","TOOL_NAME"]],"ocrd-ocrd-tool-tool-parse-params":[[5,7,1,"cmdoption-ocrd-ocrd-tool-tool-parse-params-j","--json"],[5,7,1,"cmdoption-ocrd-ocrd-tool-tool-parse-params-p","--parameter"],[5,7,1,"cmdoption-ocrd-ocrd-tool-tool-parse-params-P","--parameter-override"],[5,7,1,"cmdoption-ocrd-ocrd-tool-tool-parse-params-P","-P"],[5,7,1,"cmdoption-ocrd-ocrd-tool-tool-parse-params-j","-j"],[5,7,1,"cmdoption-ocrd-ocrd-tool-tool-parse-params-p","-p"]],"ocrd-ocrd-tool-tool-show-resource":[[5,7,1,"cmdoption-ocrd-ocrd-tool-tool-show-resource-arg-RES_NAME","RES_NAME"]],"ocrd-process":[[6,7,1,"cmdoption-ocrd-process-l","--log-level"],[6,7,1,"cmdoption-ocrd-process-m","--mets"],[6,7,1,"cmdoption-ocrd-process-overwrite","--overwrite"],[6,7,1,"cmdoption-ocrd-process-g","--page-id"],[6,7,1,"cmdoption-ocrd-process-g","-g"],[6,7,1,"cmdoption-ocrd-process-l","-l"],[6,7,1,"cmdoption-ocrd-process-m","-m"],[6,7,1,"cmdoption-ocrd-process-arg-TASKS","TASKS"]],"ocrd-resmgr-download":[[7,7,1,"cmdoption-ocrd-resmgr-download-a","--allow-uninstalled"],[7,7,1,"cmdoption-ocrd-resmgr-download-n","--any-url"],[7,7,1,"cmdoption-ocrd-resmgr-download-l","--location"],[7,7,1,"cmdoption-ocrd-resmgr-download-D","--no-dynamic"],[7,7,1,"cmdoption-ocrd-resmgr-download-o","--overwrite"],[7,7,1,"cmdoption-ocrd-resmgr-download-P","--path-in-archive"],[7,7,1,"cmdoption-ocrd-resmgr-download-t","--resource-type"],[7,7,1,"cmdoption-ocrd-resmgr-download-D","-D"],[7,7,1,"cmdoption-ocrd-resmgr-download-P","-P"],[7,7,1,"cmdoption-ocrd-resmgr-download-a","-a"],[7,7,1,"cmdoption-ocrd-resmgr-download-l","-l"],[7,7,1,"cmdoption-ocrd-resmgr-download-n","-n"],[7,7,1,"cmdoption-ocrd-resmgr-download-o","-o"],[7,7,1,"cmdoption-ocrd-resmgr-download-t","-t"],[7,7,1,"cmdoption-ocrd-resmgr-download-arg-EXECUTABLE","EXECUTABLE"],[7,7,1,"cmdoption-ocrd-resmgr-download-arg-NAME","NAME"]],"ocrd-resmgr-list-available":[[7,7,1,"cmdoption-ocrd-resmgr-list-available-e","--executable"],[7,7,1,"cmdoption-ocrd-resmgr-list-available-D","--no-dynamic"],[7,7,1,"cmdoption-ocrd-resmgr-list-available-D","-D"],[7,7,1,"cmdoption-ocrd-resmgr-list-available-e","-e"]],"ocrd-resmgr-list-installed":[[7,7,1,"cmdoption-ocrd-resmgr-list-installed-e","--executable"],[7,7,1,"cmdoption-ocrd-resmgr-list-installed-e","-e"]],"ocrd-resmgr-migrate":[[7,7,1,"cmdoption-ocrd-resmgr-migrate-arg-MIGRATION","MIGRATION"]],"ocrd-validate-page":[[8,7,1,"cmdoption-ocrd-validate-page-check-baseline","--check-baseline"],[8,7,1,"cmdoption-ocrd-validate-page-check-coords","--check-coords"],[8,7,1,"cmdoption-ocrd-validate-page-page-textequiv-consistency","--page-textequiv-consistency"],[8,7,1,"cmdoption-ocrd-validate-page-page-textequiv-strategy","--page-textequiv-strategy"],[8,7,1,"cmdoption-ocrd-validate-page-arg-PAGE","PAGE"]],"ocrd-validate-parameters":[[8,7,1,"cmdoption-ocrd-validate-parameters-arg-EXECUTABLE","EXECUTABLE"],[8,7,1,"cmdoption-ocrd-validate-parameters-arg-OCRD_TOOL","OCRD_TOOL"],[8,7,1,"cmdoption-ocrd-validate-parameters-arg-PARAM_JSON","PARAM_JSON"]],"ocrd-validate-tasks":[[8,7,1,"cmdoption-ocrd-validate-tasks-M","--mets-basename"],[8,7,1,"cmdoption-ocrd-validate-tasks-overwrite","--overwrite"],[8,7,1,"cmdoption-ocrd-validate-tasks-g","--page-id"],[8,7,1,"cmdoption-ocrd-validate-tasks-workspace","--workspace"],[8,7,1,"cmdoption-ocrd-validate-tasks-M","-M"],[8,7,1,"cmdoption-ocrd-validate-tasks-g","-g"],[8,7,1,"cmdoption-ocrd-validate-tasks-arg-TASKS","TASKS"]],"ocrd-validate-tool-json":[[8,7,1,"cmdoption-ocrd-validate-tool-json-arg-OCRD_TOOL","OCRD_TOOL"]],"ocrd-workspace":[[9,7,1,"cmdoption-ocrd-workspace-backup","--backup"],[9,7,1,"cmdoption-ocrd-workspace-d","--directory"],[9,7,1,"cmdoption-ocrd-workspace-0","--mets"],[9,7,1,"cmdoption-ocrd-workspace-M","--mets-basename"],[9,7,1,"cmdoption-ocrd-workspace-M","-M"],[9,7,1,"cmdoption-ocrd-workspace-d","-d"],[9,7,1,"cmdoption-ocrd-workspace-0","-m"]],"ocrd-workspace-add":[[9,7,1,"cmdoption-ocrd-workspace-add-C","--check-file-exists"],[9,7,1,"cmdoption-ocrd-workspace-add-G","--file-grp"],[9,7,1,"cmdoption-ocrd-workspace-add-i","--file-id"],[9,7,1,"cmdoption-ocrd-workspace-add-force","--force"],[9,7,1,"cmdoption-ocrd-workspace-add-ignore","--ignore"],[9,7,1,"cmdoption-ocrd-workspace-add-m","--mimetype"],[9,7,1,"cmdoption-ocrd-workspace-add-0","--page-id"],[9,7,1,"cmdoption-ocrd-workspace-add-C","-C"],[9,7,1,"cmdoption-ocrd-workspace-add-G","-G"],[9,7,1,"cmdoption-ocrd-workspace-add-0","-g"],[9,7,1,"cmdoption-ocrd-workspace-add-i","-i"],[9,7,1,"cmdoption-ocrd-workspace-add-m","-m"],[9,7,1,"cmdoption-ocrd-workspace-add-arg-FNAME","FNAME"]],"ocrd-workspace-backup-restore":[[9,7,1,"cmdoption-ocrd-workspace-backup-restore-f","--choose-first"],[9,7,1,"cmdoption-ocrd-workspace-backup-restore-f","-f"],[9,7,1,"cmdoption-ocrd-workspace-backup-restore-arg-BAK","BAK"]],"ocrd-workspace-bulk-add":[[9,7,1,"cmdoption-ocrd-workspace-bulk-add-n","--dry-run"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-G","--file-grp"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-i","--file-id"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-f","--force"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-I","--ignore"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-m","--mimetype"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-g","--page-id"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-r","--regex"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-0","--skip"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-S","--source-path"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-u","--url"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-G","-G"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-I","-I"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-S","-S"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-f","-f"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-g","-g"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-i","-i"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-m","-m"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-n","-n"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-r","-r"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-0","-s"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-u","-u"],[9,7,1,"cmdoption-ocrd-workspace-bulk-add-arg-FILE_GLOB","FILE_GLOB"]],"ocrd-workspace-clone":[[9,7,1,"cmdoption-ocrd-workspace-clone-f","--clobber-mets"],[9,7,1,"cmdoption-ocrd-workspace-clone-a","--download"],[9,7,1,"cmdoption-ocrd-workspace-clone-a","-a"],[9,7,1,"cmdoption-ocrd-workspace-clone-f","-f"],[9,7,1,"cmdoption-ocrd-workspace-clone-arg-METS_URL","METS_URL"],[9,7,1,"cmdoption-ocrd-workspace-clone-arg-WORKSPACE_DIR","WORKSPACE_DIR"]],"ocrd-workspace-find":[[9,7,1,"cmdoption-ocrd-workspace-find-download","--download"],[9,7,1,"cmdoption-ocrd-workspace-find-G","--file-grp"],[9,7,1,"cmdoption-ocrd-workspace-find-i","--file-id"],[9,7,1,"cmdoption-ocrd-workspace-find-m","--mimetype"],[9,7,1,"cmdoption-ocrd-workspace-find-k","--output-field"],[9,7,1,"cmdoption-ocrd-workspace-find-g","--page-id"],[9,7,1,"cmdoption-ocrd-workspace-find-wait","--wait"],[9,7,1,"cmdoption-ocrd-workspace-find-G","-G"],[9,7,1,"cmdoption-ocrd-workspace-find-g","-g"],[9,7,1,"cmdoption-ocrd-workspace-find-i","-i"],[9,7,1,"cmdoption-ocrd-workspace-find-k","-k"],[9,7,1,"cmdoption-ocrd-workspace-find-m","-m"]],"ocrd-workspace-init":[[9,7,1,"cmdoption-ocrd-workspace-init-f","--clobber-mets"],[9,7,1,"cmdoption-ocrd-workspace-init-f","-f"],[9,7,1,"cmdoption-ocrd-workspace-init-arg-DIRECTORY","DIRECTORY"]],"ocrd-workspace-merge":[[9,7,1,"cmdoption-ocrd-workspace-merge-copy-files","--copy-files"],[9,7,1,"cmdoption-ocrd-workspace-merge-G","--file-grp"],[9,7,1,"cmdoption-ocrd-workspace-merge-i","--file-id"],[9,7,1,"cmdoption-ocrd-workspace-merge-fileGrp-mapping","--fileGrp-mapping"],[9,7,1,"cmdoption-ocrd-workspace-merge-fileId-mapping","--fileId-mapping"],[9,7,1,"cmdoption-ocrd-workspace-merge-force","--force"],[9,7,1,"cmdoption-ocrd-workspace-merge-m","--mimetype"],[9,7,1,"cmdoption-ocrd-workspace-merge-copy-files","--no-copy-files"],[9,7,1,"cmdoption-ocrd-workspace-merge-force","--no-force"],[9,7,1,"cmdoption-ocrd-workspace-merge-overwrite","--no-overwrite"],[9,7,1,"cmdoption-ocrd-workspace-merge-overwrite","--overwrite"],[9,7,1,"cmdoption-ocrd-workspace-merge-g","--page-id"],[9,7,1,"cmdoption-ocrd-workspace-merge-pageId-mapping","--pageId-mapping"],[9,7,1,"cmdoption-ocrd-workspace-merge-G","-G"],[9,7,1,"cmdoption-ocrd-workspace-merge-g","-g"],[9,7,1,"cmdoption-ocrd-workspace-merge-i","-i"],[9,7,1,"cmdoption-ocrd-workspace-merge-m","-m"],[9,7,1,"cmdoption-ocrd-workspace-merge-arg-METS_PATH","METS_PATH"]],"ocrd-workspace-prune-files":[[9,7,1,"cmdoption-ocrd-workspace-prune-files-G","--file-grp"],[9,7,1,"cmdoption-ocrd-workspace-prune-files-i","--file-id"],[9,7,1,"cmdoption-ocrd-workspace-prune-files-m","--mimetype"],[9,7,1,"cmdoption-ocrd-workspace-prune-files-0","--page-id"],[9,7,1,"cmdoption-ocrd-workspace-prune-files-G","-G"],[9,7,1,"cmdoption-ocrd-workspace-prune-files-0","-g"],[9,7,1,"cmdoption-ocrd-workspace-prune-files-i","-i"],[9,7,1,"cmdoption-ocrd-workspace-prune-files-m","-m"]],"ocrd-workspace-remove":[[9,7,1,"cmdoption-ocrd-workspace-remove-f","--force"],[9,7,1,"cmdoption-ocrd-workspace-remove-k","--keep-file"],[9,7,1,"cmdoption-ocrd-workspace-remove-f","-f"],[9,7,1,"cmdoption-ocrd-workspace-remove-k","-k"],[9,7,1,"cmdoption-ocrd-workspace-remove-arg-ID","ID"]],"ocrd-workspace-remove-group":[[9,7,1,"cmdoption-ocrd-workspace-remove-group-f","--force"],[9,7,1,"cmdoption-ocrd-workspace-remove-group-k","--keep-files"],[9,7,1,"cmdoption-ocrd-workspace-remove-group-r","--recursive"],[9,7,1,"cmdoption-ocrd-workspace-remove-group-f","-f"],[9,7,1,"cmdoption-ocrd-workspace-remove-group-k","-k"],[9,7,1,"cmdoption-ocrd-workspace-remove-group-r","-r"],[9,7,1,"cmdoption-ocrd-workspace-remove-group-arg-GROUP","GROUP"]],"ocrd-workspace-rename-group":[[9,7,1,"cmdoption-ocrd-workspace-rename-group-arg-NEW","NEW"],[9,7,1,"cmdoption-ocrd-workspace-rename-group-arg-OLD","OLD"]],"ocrd-workspace-set-id":[[9,7,1,"cmdoption-ocrd-workspace-set-id-arg-ID","ID"]],"ocrd-workspace-validate":[[9,7,1,"cmdoption-ocrd-workspace-validate-a","--download"],[9,7,1,"cmdoption-ocrd-workspace-validate-page-coordinate-consistency","--page-coordinate-consistency"],[9,7,1,"cmdoption-ocrd-workspace-validate-page-textequiv-consistency","--page-strictness"],[9,7,1,"cmdoption-ocrd-workspace-validate-page-textequiv-consistency","--page-textequiv-consistency"],[9,7,1,"cmdoption-ocrd-workspace-validate-s","--skip"],[9,7,1,"cmdoption-ocrd-workspace-validate-a","-a"],[9,7,1,"cmdoption-ocrd-workspace-validate-s","-s"],[9,7,1,"cmdoption-ocrd-workspace-validate-arg-METS_URL","METS_URL"]],"ocrd-zip-bag":[[10,7,1,"cmdoption-ocrd-zip-bag-b","--base-version-checksum"],[10,7,1,"cmdoption-ocrd-zip-bag-d","--directory"],[10,7,1,"cmdoption-ocrd-zip-bag-i","--id"],[10,7,1,"cmdoption-ocrd-zip-bag-i","--identifier"],[10,7,1,"cmdoption-ocrd-zip-bag-I","--in-place"],[10,7,1,"cmdoption-ocrd-zip-bag-0","--mets"],[10,7,1,"cmdoption-ocrd-zip-bag-M","--mets-basename"],[10,7,1,"cmdoption-ocrd-zip-bag-j","--processes"],[10,7,1,"cmdoption-ocrd-zip-bag-Z","--skip-zip"],[10,7,1,"cmdoption-ocrd-zip-bag-t","--tag-file"],[10,7,1,"cmdoption-ocrd-zip-bag-I","-I"],[10,7,1,"cmdoption-ocrd-zip-bag-M","-M"],[10,7,1,"cmdoption-ocrd-zip-bag-Z","-Z"],[10,7,1,"cmdoption-ocrd-zip-bag-b","-b"],[10,7,1,"cmdoption-ocrd-zip-bag-d","-d"],[10,7,1,"cmdoption-ocrd-zip-bag-i","-i"],[10,7,1,"cmdoption-ocrd-zip-bag-j","-j"],[10,7,1,"cmdoption-ocrd-zip-bag-0","-m"],[10,7,1,"cmdoption-ocrd-zip-bag-t","-t"],[10,7,1,"cmdoption-ocrd-zip-bag-arg-DEST","DEST"]],"ocrd-zip-spill":[[10,7,1,"cmdoption-ocrd-zip-spill-d","--dest"],[10,7,1,"cmdoption-ocrd-zip-spill-d","-d"],[10,7,1,"cmdoption-ocrd-zip-spill-arg-SRC","SRC"]],"ocrd-zip-validate":[[10,7,1,"cmdoption-ocrd-zip-validate-j","--processes"],[10,7,1,"cmdoption-ocrd-zip-validate-B","--skip-bag"],[10,7,1,"cmdoption-ocrd-zip-validate-C","--skip-checksums"],[10,7,1,"cmdoption-ocrd-zip-validate-D","--skip-delete"],[10,7,1,"cmdoption-ocrd-zip-validate-Z","--skip-unzip"],[10,7,1,"cmdoption-ocrd-zip-validate-B","-B"],[10,7,1,"cmdoption-ocrd-zip-validate-C","-C"],[10,7,1,"cmdoption-ocrd-zip-validate-D","-D"],[10,7,1,"cmdoption-ocrd-zip-validate-Z","-Z"],[10,7,1,"cmdoption-ocrd-zip-validate-j","-j"],[10,7,1,"cmdoption-ocrd-zip-validate-arg-SRC","SRC"]],"ocrd.cli":[[3,0,0,"-","bashlib"],[4,0,0,"-","log"],[5,0,0,"-","ocrd_tool"],[6,0,0,"-","process"],[7,0,0,"-","resmgr"],[8,0,0,"-","validate"],[9,0,0,"-","workspace"],[10,0,0,"-","zip"]],"ocrd.cli.log":[[4,1,1,"","LogCtx"]],"ocrd.cli.log.LogCtx":[[4,2,1,"","log"]],"ocrd.cli.ocrd_tool":[[5,1,1,"","OcrdToolCtx"]],"ocrd.cli.resmgr":[[7,3,1,"","print_resources"]],"ocrd.cli.workspace":[[9,1,1,"","WorkspaceCtx"]],"ocrd.decorators":[[13,0,0,"-","loglevel_option"],[14,0,0,"-","mets_find_options"],[15,0,0,"-","ocrd_cli_options"],[12,3,1,"","ocrd_cli_wrap_processor"],[16,0,0,"-","parameter_option"]],"ocrd.decorators.loglevel_option":[[13,3,1,"","ocrd_loglevel"]],"ocrd.decorators.mets_find_options":[[14,3,1,"","mets_find_options"]],"ocrd.decorators.ocrd_cli_options":[[15,3,1,"","ocrd_cli_options"]],"ocrd.decorators.parameter_option":[[16,3,1,"","parameter_option"],[16,3,1,"","parameter_override_option"]],"ocrd.processor":[[18,0,0,"-","base"],[19,0,0,"-","builtin"],[21,0,0,"-","helpers"]],"ocrd.processor.base":[[18,1,1,"","Processor"],[18,3,1,"","generate_processor_help"],[18,3,1,"","run_cli"],[18,3,1,"","run_processor"]],"ocrd.processor.base.Processor":[[18,2,1,"","add_metadata"],[18,4,1,"","input_files"],[18,2,1,"","list_all_resources"],[18,4,1,"","module"],[18,4,1,"","moduledir"],[18,2,1,"","process"],[18,2,1,"","resolve_resource"],[18,2,1,"","show_help"],[18,2,1,"","show_version"],[18,2,1,"","verify"],[18,2,1,"","zip_input_files"]],"ocrd.processor.builtin":[[20,0,0,"-","dummy_processor"]],"ocrd.processor.builtin.dummy_processor":[[20,1,1,"","DummyProcessor"]],"ocrd.processor.builtin.dummy_processor.DummyProcessor":[[20,2,1,"","process"]],"ocrd.processor.helpers":[[21,3,1,"","generate_processor_help"],[21,3,1,"","run_cli"],[21,3,1,"","run_processor"]],"ocrd.resolver":[[22,1,1,"","Resolver"]],"ocrd.resolver.Resolver":[[22,2,1,"","download_to_directory"],[22,2,1,"","resolve_mets_arguments"],[22,2,1,"","workspace_from_nothing"],[22,2,1,"","workspace_from_url"]],"ocrd.resource_manager":[[23,1,1,"","OcrdResourceManager"]],"ocrd.resource_manager.OcrdResourceManager":[[23,2,1,"","add_to_user_database"],[23,4,1,"","default_resource_dir"],[23,2,1,"","download"],[23,2,1,"","list_available"],[23,2,1,"","list_installed"],[23,2,1,"","load_resource_list"],[23,2,1,"","location_to_resource_dir"],[23,2,1,"","parameter_usage"],[23,2,1,"","resource_dir_to_location"],[23,2,1,"","save_user_list"],[23,4,1,"","userdir"],[23,4,1,"","xdg_config_home"],[23,4,1,"","xdg_data_home"]],"ocrd.task_sequence":[[24,1,1,"","ProcessorTask"],[24,3,1,"","run_tasks"],[24,3,1,"","validate_tasks"]],"ocrd.task_sequence.ProcessorTask":[[24,4,1,"","ocrd_tool_json"],[24,2,1,"","parse"],[24,2,1,"","validate"]],"ocrd.workspace":[[25,1,1,"","Workspace"]],"ocrd.workspace.Workspace":[[25,2,1,"","add_file"],[25,2,1,"","download_file"],[25,2,1,"","download_url"],[25,2,1,"","find_files"],[25,2,1,"","image_from_page"],[25,2,1,"","image_from_segment"],[25,2,1,"","merge"],[25,2,1,"","reload_mets"],[25,2,1,"","remove_file"],[25,2,1,"","remove_file_group"],[25,2,1,"","rename_file_group"],[25,2,1,"","resolve_image_as_pil"],[25,2,1,"","resolve_image_exif"],[25,2,1,"","save_image_file"],[25,2,1,"","save_mets"]],"ocrd.workspace_backup":[[26,1,1,"","WorkspaceBackup"],[26,1,1,"","WorkspaceBackupManager"]],"ocrd.workspace_backup.WorkspaceBackup":[[26,2,1,"","from_path"]],"ocrd.workspace_backup.WorkspaceBackupManager":[[26,2,1,"","add"],[26,2,1,"","list"],[26,2,1,"","restore"],[26,2,1,"","undo"]],"ocrd.workspace_bagger":[[27,1,1,"","WorkspaceBagger"]],"ocrd.workspace_bagger.WorkspaceBagger":[[27,2,1,"","bag"],[27,2,1,"","spill"],[27,2,1,"","validate"]],"ocrd_models.ocrd_agent":[[33,1,1,"","OcrdAgent"]],"ocrd_models.ocrd_agent.OcrdAgent":[[33,4,1,"","name"],[33,4,1,"","notes"],[33,4,1,"","otherrole"],[33,4,1,"","othertype"],[33,4,1,"","role"],[33,4,1,"","type"]],"ocrd_models.ocrd_exif":[[34,1,1,"","OcrdExif"]],"ocrd_models.ocrd_exif.OcrdExif":[[34,5,1,"","height"],[34,5,1,"","photometricInterpretation"],[34,5,1,"","resolution"],[34,5,1,"","resolutionUnit"],[34,2,1,"","run_identify"],[34,2,1,"","run_pil"],[34,2,1,"","to_xml"],[34,5,1,"","width"],[34,5,1,"","xResolution"],[34,5,1,"","yResolution"]],"ocrd_models.ocrd_file":[[35,1,1,"","OcrdFile"]],"ocrd_models.ocrd_file.OcrdFile":[[35,4,1,"","ID"],[35,4,1,"","basename"],[35,4,1,"","basename_without_extension"],[35,4,1,"","extension"],[35,4,1,"","fileGrp"],[35,4,1,"","loctype"],[35,4,1,"","mimetype"],[35,4,1,"","otherloctype"],[35,4,1,"","pageId"],[35,4,1,"","url"]],"ocrd_models.ocrd_mets":[[36,1,1,"","OcrdMets"]],"ocrd_models.ocrd_mets.OcrdMets":[[36,2,1,"","add_agent"],[36,2,1,"","add_file"],[36,2,1,"","add_file_group"],[36,4,1,"","agents"],[36,2,1,"","empty_mets"],[36,4,1,"","file_groups"],[36,2,1,"","find_all_files"],[36,2,1,"","find_files"],[36,2,1,"","get_physical_page_for_file"],[36,2,1,"","get_physical_pages"],[36,2,1,"","merge"],[36,4,1,"","physical_pages"],[36,2,1,"","remove_file"],[36,2,1,"","remove_file_group"],[36,2,1,"","remove_one_file"],[36,2,1,"","remove_physical_page"],[36,2,1,"","remove_physical_page_fptr"],[36,2,1,"","rename_file_group"],[36,2,1,"","set_physical_page_for_file"],[36,4,1,"","unique_identifier"]],"ocrd_models.ocrd_page":[[37,1,1,"","AdvertRegionType"],[37,1,1,"","AlternativeImageType"],[37,1,1,"","BaselineType"],[37,1,1,"","BorderType"],[37,1,1,"","ChartRegionType"],[37,1,1,"","ChemRegionType"],[37,1,1,"","CoordsType"],[37,1,1,"","CustomRegionType"],[37,1,1,"","GlyphType"],[37,1,1,"","GraphemeBaseType"],[37,1,1,"","GraphemeGroupType"],[37,1,1,"","GraphemeType"],[37,1,1,"","GraphemesType"],[37,1,1,"","GraphicRegionType"],[37,1,1,"","GridPointsType"],[37,1,1,"","GridType"],[37,1,1,"","ImageRegionType"],[37,1,1,"","LabelType"],[37,1,1,"","LabelsType"],[37,1,1,"","LayerType"],[37,1,1,"","LayersType"],[37,1,1,"","LineDrawingRegionType"],[37,1,1,"","MapRegionType"],[37,1,1,"","MathsRegionType"],[37,1,1,"","MetadataItemType"],[37,1,1,"","MetadataType"],[37,1,1,"","MusicRegionType"],[37,1,1,"","NoiseRegionType"],[37,1,1,"","NonPrintingCharType"],[37,5,1,"","OcrdPage"],[37,1,1,"","OrderedGroupIndexedType"],[37,1,1,"","OrderedGroupType"],[37,1,1,"","PageType"],[37,1,1,"","PcGtsType"],[37,1,1,"","PrintSpaceType"],[37,1,1,"","ReadingOrderType"],[37,1,1,"","RegionRefIndexedType"],[37,1,1,"","RegionRefType"],[37,1,1,"","RegionType"],[37,1,1,"","RelationType"],[37,1,1,"","RelationsType"],[37,1,1,"","RolesType"],[37,1,1,"","SeparatorRegionType"],[37,1,1,"","TableCellRoleType"],[37,1,1,"","TableRegionType"],[37,1,1,"","TextEquivType"],[37,1,1,"","TextLineType"],[37,1,1,"","TextRegionType"],[37,1,1,"","TextStyleType"],[37,1,1,"","UnknownRegionType"],[37,1,1,"","UnorderedGroupIndexedType"],[37,1,1,"","UnorderedGroupType"],[37,1,1,"","UserAttributeType"],[37,1,1,"","UserDefinedType"],[37,1,1,"","WordType"],[37,3,1,"","parse"],[37,3,1,"","parseEtree"],[37,3,1,"","parseString"],[37,3,1,"","to_xml"]],"ocrd_models.ocrd_page.AdvertRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_bgColour"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_bgColour"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ColourSimpleType"]],"ocrd_models.ocrd_page.AlternativeImageType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_comments"],[37,2,1,"","get_conf"],[37,2,1,"","get_filename"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_comments"],[37,2,1,"","set_conf"],[37,2,1,"","set_filename"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ConfSimpleType"]],"ocrd_models.ocrd_page.BaselineType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_conf"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_points"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_conf"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_points"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ConfSimpleType"],[37,2,1,"","validate_PointsType"],[37,5,1,"","validate_PointsType_patterns_"]],"ocrd_models.ocrd_page.BorderType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Coords"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_Coords"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.ChartRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_bgColour"],[37,2,1,"","get_embText"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_numColours"],[37,2,1,"","get_orientation"],[37,2,1,"","get_type"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_bgColour"],[37,2,1,"","set_embText"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_numColours"],[37,2,1,"","set_orientation"],[37,2,1,"","set_type"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ChartTypeSimpleType"],[37,2,1,"","validate_ColourSimpleType"]],"ocrd_models.ocrd_page.ChemRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_bgColour"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_bgColour"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ColourSimpleType"]],"ocrd_models.ocrd_page.CoordsType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_conf"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_points"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_conf"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_points"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ConfSimpleType"],[37,2,1,"","validate_PointsType"],[37,5,1,"","validate_PointsType_patterns_"]],"ocrd_models.ocrd_page.CustomRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_type"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_type"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.GlyphType":[[37,2,1,"","add_AlternativeImage"],[37,2,1,"","add_Labels"],[37,2,1,"","add_TextEquiv"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_AlternativeImage"],[37,2,1,"","get_Coords"],[37,2,1,"","get_Graphemes"],[37,2,1,"","get_Labels"],[37,2,1,"","get_TextEquiv"],[37,2,1,"","get_TextStyle"],[37,2,1,"","get_UserDefined"],[37,2,1,"","get_comments"],[37,2,1,"","get_custom"],[37,2,1,"","get_id"],[37,2,1,"","get_ligature"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_production"],[37,2,1,"","get_script"],[37,2,1,"","get_symbol"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_AlternativeImage_at"],[37,2,1,"","insert_Labels_at"],[37,2,1,"","insert_TextEquiv_at"],[37,2,1,"","invalidate_AlternativeImage"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_AlternativeImage_at"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","replace_TextEquiv_at"],[37,2,1,"","set_AlternativeImage"],[37,2,1,"","set_Coords"],[37,2,1,"","set_Graphemes"],[37,2,1,"","set_Labels"],[37,2,1,"","set_TextEquiv"],[37,2,1,"","set_TextStyle"],[37,2,1,"","set_UserDefined"],[37,2,1,"","set_comments"],[37,2,1,"","set_custom"],[37,2,1,"","set_id"],[37,2,1,"","set_ligature"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_production"],[37,2,1,"","set_script"],[37,2,1,"","set_symbol"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ProductionSimpleType"],[37,2,1,"","validate_ScriptSimpleType"]],"ocrd_models.ocrd_page.GraphemeBaseType":[[37,2,1,"","add_TextEquiv"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_TextEquiv"],[37,2,1,"","get_charType"],[37,2,1,"","get_comments"],[37,2,1,"","get_custom"],[37,2,1,"","get_extensiontype_"],[37,2,1,"","get_id"],[37,2,1,"","get_index"],[37,2,1,"","get_ligature"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_TextEquiv_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_TextEquiv_at"],[37,2,1,"","set_TextEquiv"],[37,2,1,"","set_charType"],[37,2,1,"","set_comments"],[37,2,1,"","set_custom"],[37,2,1,"","set_extensiontype_"],[37,2,1,"","set_id"],[37,2,1,"","set_index"],[37,2,1,"","set_ligature"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.GraphemeGroupType":[[37,2,1,"","add_Grapheme"],[37,2,1,"","add_NonPrintingChar"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Grapheme"],[37,2,1,"","get_NonPrintingChar"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_Grapheme_at"],[37,2,1,"","insert_NonPrintingChar_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_Grapheme_at"],[37,2,1,"","replace_NonPrintingChar_at"],[37,2,1,"","set_Grapheme"],[37,2,1,"","set_NonPrintingChar"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.GraphemeType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Coords"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_Coords"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.GraphemesType":[[37,2,1,"","add_Grapheme"],[37,2,1,"","add_GraphemeGroup"],[37,2,1,"","add_NonPrintingChar"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Grapheme"],[37,2,1,"","get_GraphemeGroup"],[37,2,1,"","get_NonPrintingChar"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_GraphemeGroup_at"],[37,2,1,"","insert_Grapheme_at"],[37,2,1,"","insert_NonPrintingChar_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_GraphemeGroup_at"],[37,2,1,"","replace_Grapheme_at"],[37,2,1,"","replace_NonPrintingChar_at"],[37,2,1,"","set_Grapheme"],[37,2,1,"","set_GraphemeGroup"],[37,2,1,"","set_NonPrintingChar"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.GraphicRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_embText"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_numColours"],[37,2,1,"","get_orientation"],[37,2,1,"","get_type"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_embText"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_numColours"],[37,2,1,"","set_orientation"],[37,2,1,"","set_type"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_GraphicsTypeSimpleType"]],"ocrd_models.ocrd_page.GridPointsType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_index"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_points"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_index"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_points"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_PointsType"],[37,5,1,"","validate_PointsType_patterns_"]],"ocrd_models.ocrd_page.GridType":[[37,2,1,"","add_GridPoints"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_GridPoints"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_GridPoints_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_GridPoints_at"],[37,2,1,"","set_GridPoints"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.ImageRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_bgColour"],[37,2,1,"","get_colourDepth"],[37,2,1,"","get_embText"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_bgColour"],[37,2,1,"","set_colourDepth"],[37,2,1,"","set_embText"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ColourDepthSimpleType"],[37,2,1,"","validate_ColourSimpleType"]],"ocrd_models.ocrd_page.LabelType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_comments"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_type"],[37,2,1,"","get_value"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_comments"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_type"],[37,2,1,"","set_value"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.LabelsType":[[37,2,1,"","add_Label"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Label"],[37,2,1,"","get_comments"],[37,2,1,"","get_externalId"],[37,2,1,"","get_externalModel"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_prefix"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_Label_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_Label_at"],[37,2,1,"","set_Label"],[37,2,1,"","set_comments"],[37,2,1,"","set_externalId"],[37,2,1,"","set_externalModel"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_prefix"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.LayerType":[[37,2,1,"","add_RegionRef"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_RegionRef"],[37,2,1,"","get_caption"],[37,2,1,"","get_id"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_zIndex"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_RegionRef_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_RegionRef_at"],[37,2,1,"","set_RegionRef"],[37,2,1,"","set_caption"],[37,2,1,"","set_id"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_zIndex"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.LayersType":[[37,2,1,"","add_Layer"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Layer"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_Layer_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_Layer_at"],[37,2,1,"","set_Layer"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.LineDrawingRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_bgColour"],[37,2,1,"","get_embText"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","get_penColour"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_bgColour"],[37,2,1,"","set_embText"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,2,1,"","set_penColour"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ColourSimpleType"]],"ocrd_models.ocrd_page.MapRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.MathsRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_bgColour"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_bgColour"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ColourSimpleType"]],"ocrd_models.ocrd_page.MetadataItemType":[[37,2,1,"","add_Labels"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Labels"],[37,2,1,"","get_date"],[37,2,1,"","get_name"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_type"],[37,2,1,"","get_value"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_Labels_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","set_Labels"],[37,2,1,"","set_date"],[37,2,1,"","set_name"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_type"],[37,2,1,"","set_value"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.MetadataType":[[37,2,1,"","add_MetadataItem"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Comments"],[37,2,1,"","get_Created"],[37,2,1,"","get_Creator"],[37,2,1,"","get_LastChange"],[37,2,1,"","get_MetadataItem"],[37,2,1,"","get_UserDefined"],[37,2,1,"","get_externalRef"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_MetadataItem_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_MetadataItem_at"],[37,2,1,"","set_Comments"],[37,2,1,"","set_Created"],[37,2,1,"","set_Creator"],[37,2,1,"","set_LastChange"],[37,2,1,"","set_MetadataItem"],[37,2,1,"","set_UserDefined"],[37,2,1,"","set_externalRef"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.MusicRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_bgColour"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_bgColour"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ColourSimpleType"]],"ocrd_models.ocrd_page.NoiseRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.NonPrintingCharType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.OrderedGroupIndexedType":[[37,2,1,"","add_Labels"],[37,2,1,"","add_OrderedGroupIndexed"],[37,2,1,"","add_RegionRefIndexed"],[37,2,1,"","add_UnorderedGroupIndexed"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","clear_AllIndexed"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","extend_AllIndexed"],[37,2,1,"","factory"],[37,2,1,"","get_AllIndexed"],[37,2,1,"","get_Labels"],[37,2,1,"","get_OrderedGroupIndexed"],[37,2,1,"","get_RegionRefIndexed"],[37,2,1,"","get_UnorderedGroupIndexed"],[37,2,1,"","get_UserDefined"],[37,2,1,"","get_caption"],[37,2,1,"","get_comments"],[37,2,1,"","get_continuation"],[37,2,1,"","get_custom"],[37,2,1,"","get_id"],[37,2,1,"","get_index"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_regionRef"],[37,2,1,"","get_type"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_Labels_at"],[37,2,1,"","insert_OrderedGroupIndexed_at"],[37,2,1,"","insert_RegionRefIndexed_at"],[37,2,1,"","insert_UnorderedGroupIndexed_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","replace_OrderedGroupIndexed_at"],[37,2,1,"","replace_RegionRefIndexed_at"],[37,2,1,"","replace_UnorderedGroupIndexed_at"],[37,2,1,"","set_Labels"],[37,2,1,"","set_OrderedGroupIndexed"],[37,2,1,"","set_RegionRefIndexed"],[37,2,1,"","set_UnorderedGroupIndexed"],[37,2,1,"","set_UserDefined"],[37,2,1,"","set_caption"],[37,2,1,"","set_comments"],[37,2,1,"","set_continuation"],[37,2,1,"","set_custom"],[37,2,1,"","set_id"],[37,2,1,"","set_index"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_regionRef"],[37,2,1,"","set_type"],[37,2,1,"","sort_AllIndexed"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_GroupTypeSimpleType"]],"ocrd_models.ocrd_page.OrderedGroupType":[[37,2,1,"","add_Labels"],[37,2,1,"","add_OrderedGroupIndexed"],[37,2,1,"","add_RegionRefIndexed"],[37,2,1,"","add_UnorderedGroupIndexed"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","clear_AllIndexed"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","extend_AllIndexed"],[37,2,1,"","factory"],[37,2,1,"","get_AllIndexed"],[37,2,1,"","get_Labels"],[37,2,1,"","get_OrderedGroupIndexed"],[37,2,1,"","get_RegionRefIndexed"],[37,2,1,"","get_UnorderedGroupIndexed"],[37,2,1,"","get_UserDefined"],[37,2,1,"","get_caption"],[37,2,1,"","get_comments"],[37,2,1,"","get_continuation"],[37,2,1,"","get_custom"],[37,2,1,"","get_id"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_regionRef"],[37,2,1,"","get_type"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_Labels_at"],[37,2,1,"","insert_OrderedGroupIndexed_at"],[37,2,1,"","insert_RegionRefIndexed_at"],[37,2,1,"","insert_UnorderedGroupIndexed_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","replace_OrderedGroupIndexed_at"],[37,2,1,"","replace_RegionRefIndexed_at"],[37,2,1,"","replace_UnorderedGroupIndexed_at"],[37,2,1,"","set_Labels"],[37,2,1,"","set_OrderedGroupIndexed"],[37,2,1,"","set_RegionRefIndexed"],[37,2,1,"","set_UnorderedGroupIndexed"],[37,2,1,"","set_UserDefined"],[37,2,1,"","set_caption"],[37,2,1,"","set_comments"],[37,2,1,"","set_continuation"],[37,2,1,"","set_custom"],[37,2,1,"","set_id"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_regionRef"],[37,2,1,"","set_type"],[37,2,1,"","sort_AllIndexed"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_GroupTypeSimpleType"]],"ocrd_models.ocrd_page.PageType":[[37,2,1,"","add_AdvertRegion"],[37,2,1,"","add_AlternativeImage"],[37,2,1,"","add_ChartRegion"],[37,2,1,"","add_ChemRegion"],[37,2,1,"","add_CustomRegion"],[37,2,1,"","add_GraphicRegion"],[37,2,1,"","add_ImageRegion"],[37,2,1,"","add_Labels"],[37,2,1,"","add_LineDrawingRegion"],[37,2,1,"","add_MapRegion"],[37,2,1,"","add_MathsRegion"],[37,2,1,"","add_MusicRegion"],[37,2,1,"","add_NoiseRegion"],[37,2,1,"","add_SeparatorRegion"],[37,2,1,"","add_TableRegion"],[37,2,1,"","add_TextRegion"],[37,2,1,"","add_UnknownRegion"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_AdvertRegion"],[37,2,1,"","get_AllAlternativeImages"],[37,2,1,"","get_AllRegions"],[37,2,1,"","get_AllTextLines"],[37,2,1,"","get_AlternativeImage"],[37,2,1,"","get_Border"],[37,2,1,"","get_ChartRegion"],[37,2,1,"","get_ChemRegion"],[37,2,1,"","get_CustomRegion"],[37,2,1,"","get_GraphicRegion"],[37,2,1,"","get_ImageRegion"],[37,2,1,"","get_Labels"],[37,2,1,"","get_Layers"],[37,2,1,"","get_LineDrawingRegion"],[37,2,1,"","get_MapRegion"],[37,2,1,"","get_MathsRegion"],[37,2,1,"","get_MusicRegion"],[37,2,1,"","get_NoiseRegion"],[37,2,1,"","get_PrintSpace"],[37,2,1,"","get_ReadingOrder"],[37,2,1,"","get_Relations"],[37,2,1,"","get_SeparatorRegion"],[37,2,1,"","get_TableRegion"],[37,2,1,"","get_TextRegion"],[37,2,1,"","get_TextStyle"],[37,2,1,"","get_UnknownRegion"],[37,2,1,"","get_UserDefined"],[37,2,1,"","get_conf"],[37,2,1,"","get_custom"],[37,2,1,"","get_imageFilename"],[37,2,1,"","get_imageHeight"],[37,2,1,"","get_imageResolutionUnit"],[37,2,1,"","get_imageWidth"],[37,2,1,"","get_imageXResolution"],[37,2,1,"","get_imageYResolution"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","get_primaryLanguage"],[37,2,1,"","get_primaryScript"],[37,2,1,"","get_readingDirection"],[37,2,1,"","get_secondaryLanguage"],[37,2,1,"","get_secondaryScript"],[37,2,1,"","get_textLineOrder"],[37,2,1,"","get_type"],[37,2,1,"","hasContent_"],[37,4,1,"","id"],[37,2,1,"","insert_AdvertRegion_at"],[37,2,1,"","insert_AlternativeImage_at"],[37,2,1,"","insert_ChartRegion_at"],[37,2,1,"","insert_ChemRegion_at"],[37,2,1,"","insert_CustomRegion_at"],[37,2,1,"","insert_GraphicRegion_at"],[37,2,1,"","insert_ImageRegion_at"],[37,2,1,"","insert_Labels_at"],[37,2,1,"","insert_LineDrawingRegion_at"],[37,2,1,"","insert_MapRegion_at"],[37,2,1,"","insert_MathsRegion_at"],[37,2,1,"","insert_MusicRegion_at"],[37,2,1,"","insert_NoiseRegion_at"],[37,2,1,"","insert_SeparatorRegion_at"],[37,2,1,"","insert_TableRegion_at"],[37,2,1,"","insert_TextRegion_at"],[37,2,1,"","insert_UnknownRegion_at"],[37,2,1,"","invalidate_AlternativeImage"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_AdvertRegion_at"],[37,2,1,"","replace_AlternativeImage_at"],[37,2,1,"","replace_ChartRegion_at"],[37,2,1,"","replace_ChemRegion_at"],[37,2,1,"","replace_CustomRegion_at"],[37,2,1,"","replace_GraphicRegion_at"],[37,2,1,"","replace_ImageRegion_at"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","replace_LineDrawingRegion_at"],[37,2,1,"","replace_MapRegion_at"],[37,2,1,"","replace_MathsRegion_at"],[37,2,1,"","replace_MusicRegion_at"],[37,2,1,"","replace_NoiseRegion_at"],[37,2,1,"","replace_SeparatorRegion_at"],[37,2,1,"","replace_TableRegion_at"],[37,2,1,"","replace_TextRegion_at"],[37,2,1,"","replace_UnknownRegion_at"],[37,2,1,"","set_AdvertRegion"],[37,2,1,"","set_AlternativeImage"],[37,2,1,"","set_Border"],[37,2,1,"","set_ChartRegion"],[37,2,1,"","set_ChemRegion"],[37,2,1,"","set_CustomRegion"],[37,2,1,"","set_GraphicRegion"],[37,2,1,"","set_ImageRegion"],[37,2,1,"","set_Labels"],[37,2,1,"","set_Layers"],[37,2,1,"","set_LineDrawingRegion"],[37,2,1,"","set_MapRegion"],[37,2,1,"","set_MathsRegion"],[37,2,1,"","set_MusicRegion"],[37,2,1,"","set_NoiseRegion"],[37,2,1,"","set_PrintSpace"],[37,2,1,"","set_ReadingOrder"],[37,2,1,"","set_Relations"],[37,2,1,"","set_SeparatorRegion"],[37,2,1,"","set_TableRegion"],[37,2,1,"","set_TextRegion"],[37,2,1,"","set_TextStyle"],[37,2,1,"","set_UnknownRegion"],[37,2,1,"","set_UserDefined"],[37,2,1,"","set_conf"],[37,2,1,"","set_custom"],[37,2,1,"","set_imageFilename"],[37,2,1,"","set_imageHeight"],[37,2,1,"","set_imageResolutionUnit"],[37,2,1,"","set_imageWidth"],[37,2,1,"","set_imageXResolution"],[37,2,1,"","set_imageYResolution"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,2,1,"","set_primaryLanguage"],[37,2,1,"","set_primaryScript"],[37,2,1,"","set_readingDirection"],[37,2,1,"","set_secondaryLanguage"],[37,2,1,"","set_secondaryScript"],[37,2,1,"","set_textLineOrder"],[37,2,1,"","set_type"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ConfSimpleType"],[37,2,1,"","validate_LanguageSimpleType"],[37,2,1,"","validate_PageTypeSimpleType"],[37,2,1,"","validate_ReadingDirectionSimpleType"],[37,2,1,"","validate_ScriptSimpleType"],[37,2,1,"","validate_TextLineOrderSimpleType"]],"ocrd_models.ocrd_page.PcGtsType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_AllAlternativeImagePaths"],[37,2,1,"","get_Metadata"],[37,2,1,"","get_Page"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_pcGtsId"],[37,2,1,"","hasContent_"],[37,4,1,"","id"],[37,5,1,"","member_data_items_"],[37,2,1,"","prune_ReadingOrder"],[37,2,1,"","set_Metadata"],[37,2,1,"","set_Page"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_pcGtsId"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.PrintSpaceType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Coords"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_Coords"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.ReadingOrderType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_OrderedGroup"],[37,2,1,"","get_UnorderedGroup"],[37,2,1,"","get_conf"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_OrderedGroup"],[37,2,1,"","set_UnorderedGroup"],[37,2,1,"","set_conf"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ConfSimpleType"]],"ocrd_models.ocrd_page.RegionRefIndexedType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_index"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_regionRef"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_index"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_regionRef"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.RegionRefType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_regionRef"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_regionRef"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.RegionType":[[37,2,1,"","add_AdvertRegion"],[37,2,1,"","add_AlternativeImage"],[37,2,1,"","add_ChartRegion"],[37,2,1,"","add_ChemRegion"],[37,2,1,"","add_CustomRegion"],[37,2,1,"","add_GraphicRegion"],[37,2,1,"","add_ImageRegion"],[37,2,1,"","add_Labels"],[37,2,1,"","add_LineDrawingRegion"],[37,2,1,"","add_MathsRegion"],[37,2,1,"","add_MusicRegion"],[37,2,1,"","add_NoiseRegion"],[37,2,1,"","add_SeparatorRegion"],[37,2,1,"","add_TableRegion"],[37,2,1,"","add_TextRegion"],[37,2,1,"","add_UnknownRegion"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_AdvertRegion"],[37,2,1,"","get_AlternativeImage"],[37,2,1,"","get_ChartRegion"],[37,2,1,"","get_ChemRegion"],[37,2,1,"","get_Coords"],[37,2,1,"","get_CustomRegion"],[37,2,1,"","get_GraphicRegion"],[37,2,1,"","get_ImageRegion"],[37,2,1,"","get_Labels"],[37,2,1,"","get_LineDrawingRegion"],[37,2,1,"","get_MathsRegion"],[37,2,1,"","get_MusicRegion"],[37,2,1,"","get_NoiseRegion"],[37,2,1,"","get_Roles"],[37,2,1,"","get_SeparatorRegion"],[37,2,1,"","get_TableRegion"],[37,2,1,"","get_TextRegion"],[37,2,1,"","get_UnknownRegion"],[37,2,1,"","get_UserDefined"],[37,2,1,"","get_comments"],[37,2,1,"","get_continuation"],[37,2,1,"","get_custom"],[37,2,1,"","get_extensiontype_"],[37,2,1,"","get_id"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_AdvertRegion_at"],[37,2,1,"","insert_AlternativeImage_at"],[37,2,1,"","insert_ChartRegion_at"],[37,2,1,"","insert_ChemRegion_at"],[37,2,1,"","insert_CustomRegion_at"],[37,2,1,"","insert_GraphicRegion_at"],[37,2,1,"","insert_ImageRegion_at"],[37,2,1,"","insert_Labels_at"],[37,2,1,"","insert_LineDrawingRegion_at"],[37,2,1,"","insert_MathsRegion_at"],[37,2,1,"","insert_MusicRegion_at"],[37,2,1,"","insert_NoiseRegion_at"],[37,2,1,"","insert_SeparatorRegion_at"],[37,2,1,"","insert_TableRegion_at"],[37,2,1,"","insert_TextRegion_at"],[37,2,1,"","insert_UnknownRegion_at"],[37,2,1,"","invalidate_AlternativeImage"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_AdvertRegion_at"],[37,2,1,"","replace_AlternativeImage_at"],[37,2,1,"","replace_ChartRegion_at"],[37,2,1,"","replace_ChemRegion_at"],[37,2,1,"","replace_CustomRegion_at"],[37,2,1,"","replace_GraphicRegion_at"],[37,2,1,"","replace_ImageRegion_at"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","replace_LineDrawingRegion_at"],[37,2,1,"","replace_MathsRegion_at"],[37,2,1,"","replace_MusicRegion_at"],[37,2,1,"","replace_NoiseRegion_at"],[37,2,1,"","replace_SeparatorRegion_at"],[37,2,1,"","replace_TableRegion_at"],[37,2,1,"","replace_TextRegion_at"],[37,2,1,"","replace_UnknownRegion_at"],[37,2,1,"","set_AdvertRegion"],[37,2,1,"","set_AlternativeImage"],[37,2,1,"","set_ChartRegion"],[37,2,1,"","set_ChemRegion"],[37,2,1,"","set_Coords"],[37,2,1,"","set_CustomRegion"],[37,2,1,"","set_GraphicRegion"],[37,2,1,"","set_ImageRegion"],[37,2,1,"","set_Labels"],[37,2,1,"","set_LineDrawingRegion"],[37,2,1,"","set_MathsRegion"],[37,2,1,"","set_MusicRegion"],[37,2,1,"","set_NoiseRegion"],[37,2,1,"","set_Roles"],[37,2,1,"","set_SeparatorRegion"],[37,2,1,"","set_TableRegion"],[37,2,1,"","set_TextRegion"],[37,2,1,"","set_UnknownRegion"],[37,2,1,"","set_UserDefined"],[37,2,1,"","set_comments"],[37,2,1,"","set_continuation"],[37,2,1,"","set_custom"],[37,2,1,"","set_extensiontype_"],[37,2,1,"","set_id"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.RelationType":[[37,2,1,"","add_Labels"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Labels"],[37,2,1,"","get_SourceRegionRef"],[37,2,1,"","get_TargetRegionRef"],[37,2,1,"","get_comments"],[37,2,1,"","get_custom"],[37,2,1,"","get_id"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_type"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_Labels_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","set_Labels"],[37,2,1,"","set_SourceRegionRef"],[37,2,1,"","set_TargetRegionRef"],[37,2,1,"","set_comments"],[37,2,1,"","set_custom"],[37,2,1,"","set_id"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_type"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.RelationsType":[[37,2,1,"","add_Relation"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Relation"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_Relation_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_Relation_at"],[37,2,1,"","set_Relation"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.RolesType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_TableCellRole"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_TableCellRole"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.SeparatorRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_colour"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_colour"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ColourSimpleType"]],"ocrd_models.ocrd_page.TableCellRoleType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_colSpan"],[37,2,1,"","get_columnIndex"],[37,2,1,"","get_header"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_rowIndex"],[37,2,1,"","get_rowSpan"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_colSpan"],[37,2,1,"","set_columnIndex"],[37,2,1,"","set_header"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_rowIndex"],[37,2,1,"","set_rowSpan"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.TableRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Grid"],[37,2,1,"","get_bgColour"],[37,2,1,"","get_columns"],[37,2,1,"","get_embText"],[37,2,1,"","get_lineColour"],[37,2,1,"","get_lineSeparators"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","get_rows"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_Grid"],[37,2,1,"","set_bgColour"],[37,2,1,"","set_columns"],[37,2,1,"","set_embText"],[37,2,1,"","set_lineColour"],[37,2,1,"","set_lineSeparators"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,2,1,"","set_rows"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ColourSimpleType"]],"ocrd_models.ocrd_page.TextEquivType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_PlainText"],[37,2,1,"","get_Unicode"],[37,2,1,"","get_comments"],[37,2,1,"","get_conf"],[37,2,1,"","get_dataType"],[37,2,1,"","get_dataTypeDetails"],[37,2,1,"","get_index"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_PlainText"],[37,2,1,"","set_Unicode"],[37,2,1,"","set_comments"],[37,2,1,"","set_conf"],[37,2,1,"","set_dataType"],[37,2,1,"","set_dataTypeDetails"],[37,2,1,"","set_index"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ConfSimpleType"],[37,2,1,"","validate_TextDataTypeSimpleType"]],"ocrd_models.ocrd_page.TextLineType":[[37,2,1,"","add_AlternativeImage"],[37,2,1,"","add_Labels"],[37,2,1,"","add_TextEquiv"],[37,2,1,"","add_Word"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_AlternativeImage"],[37,2,1,"","get_Baseline"],[37,2,1,"","get_Coords"],[37,2,1,"","get_Labels"],[37,2,1,"","get_TextEquiv"],[37,2,1,"","get_TextStyle"],[37,2,1,"","get_UserDefined"],[37,2,1,"","get_Word"],[37,2,1,"","get_comments"],[37,2,1,"","get_custom"],[37,2,1,"","get_id"],[37,2,1,"","get_index"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_primaryLanguage"],[37,2,1,"","get_primaryScript"],[37,2,1,"","get_production"],[37,2,1,"","get_readingDirection"],[37,2,1,"","get_secondaryScript"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_AlternativeImage_at"],[37,2,1,"","insert_Labels_at"],[37,2,1,"","insert_TextEquiv_at"],[37,2,1,"","insert_Word_at"],[37,2,1,"","invalidate_AlternativeImage"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_AlternativeImage_at"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","replace_TextEquiv_at"],[37,2,1,"","replace_Word_at"],[37,2,1,"","set_AlternativeImage"],[37,2,1,"","set_Baseline"],[37,2,1,"","set_Coords"],[37,2,1,"","set_Labels"],[37,2,1,"","set_TextEquiv"],[37,2,1,"","set_TextStyle"],[37,2,1,"","set_UserDefined"],[37,2,1,"","set_Word"],[37,2,1,"","set_comments"],[37,2,1,"","set_custom"],[37,2,1,"","set_id"],[37,2,1,"","set_index"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_primaryLanguage"],[37,2,1,"","set_primaryScript"],[37,2,1,"","set_production"],[37,2,1,"","set_readingDirection"],[37,2,1,"","set_secondaryScript"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_LanguageSimpleType"],[37,2,1,"","validate_ProductionSimpleType"],[37,2,1,"","validate_ReadingDirectionSimpleType"],[37,2,1,"","validate_ScriptSimpleType"]],"ocrd_models.ocrd_page.TextRegionType":[[37,2,1,"","add_TextEquiv"],[37,2,1,"","add_TextLine"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_TextEquiv"],[37,2,1,"","get_TextLine"],[37,2,1,"","get_TextStyle"],[37,2,1,"","get_align"],[37,2,1,"","get_indented"],[37,2,1,"","get_leading"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_orientation"],[37,2,1,"","get_primaryLanguage"],[37,2,1,"","get_primaryScript"],[37,2,1,"","get_production"],[37,2,1,"","get_readingDirection"],[37,2,1,"","get_readingOrientation"],[37,2,1,"","get_secondaryLanguage"],[37,2,1,"","get_secondaryScript"],[37,2,1,"","get_textLineOrder"],[37,2,1,"","get_type"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_TextEquiv_at"],[37,2,1,"","insert_TextLine_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_TextEquiv_at"],[37,2,1,"","replace_TextLine_at"],[37,2,1,"","set_TextEquiv"],[37,2,1,"","set_TextLine"],[37,2,1,"","set_TextStyle"],[37,2,1,"","set_align"],[37,2,1,"","set_indented"],[37,2,1,"","set_leading"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_orientation"],[37,2,1,"","set_primaryLanguage"],[37,2,1,"","set_primaryScript"],[37,2,1,"","set_production"],[37,2,1,"","set_readingDirection"],[37,2,1,"","set_readingOrientation"],[37,2,1,"","set_secondaryLanguage"],[37,2,1,"","set_secondaryScript"],[37,2,1,"","set_textLineOrder"],[37,2,1,"","set_type"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_AlignSimpleType"],[37,2,1,"","validate_LanguageSimpleType"],[37,2,1,"","validate_ProductionSimpleType"],[37,2,1,"","validate_ReadingDirectionSimpleType"],[37,2,1,"","validate_ScriptSimpleType"],[37,2,1,"","validate_TextLineOrderSimpleType"],[37,2,1,"","validate_TextTypeSimpleType"]],"ocrd_models.ocrd_page.TextStyleType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_bgColour"],[37,2,1,"","get_bgColourRgb"],[37,2,1,"","get_bold"],[37,2,1,"","get_fontFamily"],[37,2,1,"","get_fontSize"],[37,2,1,"","get_italic"],[37,2,1,"","get_kerning"],[37,2,1,"","get_letterSpaced"],[37,2,1,"","get_monospace"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_reverseVideo"],[37,2,1,"","get_serif"],[37,2,1,"","get_smallCaps"],[37,2,1,"","get_strikethrough"],[37,2,1,"","get_subscript"],[37,2,1,"","get_superscript"],[37,2,1,"","get_textColour"],[37,2,1,"","get_textColourRgb"],[37,2,1,"","get_underlineStyle"],[37,2,1,"","get_underlined"],[37,2,1,"","get_xHeight"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_bgColour"],[37,2,1,"","set_bgColourRgb"],[37,2,1,"","set_bold"],[37,2,1,"","set_fontFamily"],[37,2,1,"","set_fontSize"],[37,2,1,"","set_italic"],[37,2,1,"","set_kerning"],[37,2,1,"","set_letterSpaced"],[37,2,1,"","set_monospace"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_reverseVideo"],[37,2,1,"","set_serif"],[37,2,1,"","set_smallCaps"],[37,2,1,"","set_strikethrough"],[37,2,1,"","set_subscript"],[37,2,1,"","set_superscript"],[37,2,1,"","set_textColour"],[37,2,1,"","set_textColourRgb"],[37,2,1,"","set_underlineStyle"],[37,2,1,"","set_underlined"],[37,2,1,"","set_xHeight"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_ColourSimpleType"],[37,2,1,"","validate_UnderlineStyleSimpleType"]],"ocrd_models.ocrd_page.UnknownRegionType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.UnorderedGroupIndexedType":[[37,2,1,"","add_Labels"],[37,2,1,"","add_OrderedGroup"],[37,2,1,"","add_RegionRef"],[37,2,1,"","add_UnorderedGroup"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Labels"],[37,2,1,"","get_OrderedGroup"],[37,2,1,"","get_RegionRef"],[37,2,1,"","get_UnorderedGroup"],[37,2,1,"","get_UnorderedGroupChildren"],[37,2,1,"","get_UserDefined"],[37,2,1,"","get_caption"],[37,2,1,"","get_comments"],[37,2,1,"","get_continuation"],[37,2,1,"","get_custom"],[37,2,1,"","get_id"],[37,2,1,"","get_index"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_regionRef"],[37,2,1,"","get_type"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_Labels_at"],[37,2,1,"","insert_OrderedGroup_at"],[37,2,1,"","insert_RegionRef_at"],[37,2,1,"","insert_UnorderedGroup_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","replace_OrderedGroup_at"],[37,2,1,"","replace_RegionRef_at"],[37,2,1,"","replace_UnorderedGroup_at"],[37,2,1,"","set_Labels"],[37,2,1,"","set_OrderedGroup"],[37,2,1,"","set_RegionRef"],[37,2,1,"","set_UnorderedGroup"],[37,2,1,"","set_UserDefined"],[37,2,1,"","set_caption"],[37,2,1,"","set_comments"],[37,2,1,"","set_continuation"],[37,2,1,"","set_custom"],[37,2,1,"","set_id"],[37,2,1,"","set_index"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_regionRef"],[37,2,1,"","set_type"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_GroupTypeSimpleType"]],"ocrd_models.ocrd_page.UnorderedGroupType":[[37,2,1,"","add_Labels"],[37,2,1,"","add_OrderedGroup"],[37,2,1,"","add_RegionRef"],[37,2,1,"","add_UnorderedGroup"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_Labels"],[37,2,1,"","get_OrderedGroup"],[37,2,1,"","get_RegionRef"],[37,2,1,"","get_UnorderedGroup"],[37,2,1,"","get_UnorderedGroupChildren"],[37,2,1,"","get_UserDefined"],[37,2,1,"","get_caption"],[37,2,1,"","get_comments"],[37,2,1,"","get_continuation"],[37,2,1,"","get_custom"],[37,2,1,"","get_id"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_regionRef"],[37,2,1,"","get_type"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_Labels_at"],[37,2,1,"","insert_OrderedGroup_at"],[37,2,1,"","insert_RegionRef_at"],[37,2,1,"","insert_UnorderedGroup_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","replace_OrderedGroup_at"],[37,2,1,"","replace_RegionRef_at"],[37,2,1,"","replace_UnorderedGroup_at"],[37,2,1,"","set_Labels"],[37,2,1,"","set_OrderedGroup"],[37,2,1,"","set_RegionRef"],[37,2,1,"","set_UnorderedGroup"],[37,2,1,"","set_UserDefined"],[37,2,1,"","set_caption"],[37,2,1,"","set_comments"],[37,2,1,"","set_continuation"],[37,2,1,"","set_custom"],[37,2,1,"","set_id"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_regionRef"],[37,2,1,"","set_type"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_GroupTypeSimpleType"]],"ocrd_models.ocrd_page.UserAttributeType":[[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_description"],[37,2,1,"","get_name"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_type"],[37,2,1,"","get_value"],[37,2,1,"","hasContent_"],[37,5,1,"","member_data_items_"],[37,2,1,"","set_description"],[37,2,1,"","set_name"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_type"],[37,2,1,"","set_value"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.UserDefinedType":[[37,2,1,"","add_UserAttribute"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_UserAttribute"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_UserAttribute_at"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_UserAttribute_at"],[37,2,1,"","set_UserAttribute"],[37,2,1,"","set_ns_prefix_"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"]],"ocrd_models.ocrd_page.WordType":[[37,2,1,"","add_AlternativeImage"],[37,2,1,"","add_Glyph"],[37,2,1,"","add_Labels"],[37,2,1,"","add_TextEquiv"],[37,2,1,"","build"],[37,2,1,"","buildAttributes"],[37,2,1,"","buildChildren"],[37,2,1,"","export"],[37,2,1,"","exportAttributes"],[37,2,1,"","exportChildren"],[37,2,1,"","factory"],[37,2,1,"","get_AlternativeImage"],[37,2,1,"","get_Coords"],[37,2,1,"","get_Glyph"],[37,2,1,"","get_Labels"],[37,2,1,"","get_TextEquiv"],[37,2,1,"","get_TextStyle"],[37,2,1,"","get_UserDefined"],[37,2,1,"","get_comments"],[37,2,1,"","get_custom"],[37,2,1,"","get_id"],[37,2,1,"","get_language"],[37,2,1,"","get_ns_prefix_"],[37,2,1,"","get_primaryScript"],[37,2,1,"","get_production"],[37,2,1,"","get_readingDirection"],[37,2,1,"","get_secondaryScript"],[37,2,1,"","hasContent_"],[37,2,1,"","insert_AlternativeImage_at"],[37,2,1,"","insert_Glyph_at"],[37,2,1,"","insert_Labels_at"],[37,2,1,"","insert_TextEquiv_at"],[37,2,1,"","invalidate_AlternativeImage"],[37,5,1,"","member_data_items_"],[37,2,1,"","replace_AlternativeImage_at"],[37,2,1,"","replace_Glyph_at"],[37,2,1,"","replace_Labels_at"],[37,2,1,"","replace_TextEquiv_at"],[37,2,1,"","set_AlternativeImage"],[37,2,1,"","set_Coords"],[37,2,1,"","set_Glyph"],[37,2,1,"","set_Labels"],[37,2,1,"","set_TextEquiv"],[37,2,1,"","set_TextStyle"],[37,2,1,"","set_UserDefined"],[37,2,1,"","set_comments"],[37,2,1,"","set_custom"],[37,2,1,"","set_id"],[37,2,1,"","set_language"],[37,2,1,"","set_ns_prefix_"],[37,2,1,"","set_primaryScript"],[37,2,1,"","set_production"],[37,2,1,"","set_readingDirection"],[37,2,1,"","set_secondaryScript"],[37,5,1,"","subclass"],[37,5,1,"","superclass"],[37,2,1,"","to_etree"],[37,2,1,"","validate_LanguageSimpleType"],[37,2,1,"","validate_ProductionSimpleType"],[37,2,1,"","validate_ReadingDirectionSimpleType"],[37,2,1,"","validate_ScriptSimpleType"]],"ocrd_models.ocrd_xml_base":[[38,1,1,"","OcrdXmlDocument"]],"ocrd_models.ocrd_xml_base.OcrdXmlDocument":[[38,2,1,"","to_xml"]],"ocrd_models.report":[[39,1,1,"","ValidationReport"]],"ocrd_models.report.ValidationReport":[[39,2,1,"","add_error"],[39,2,1,"","add_notice"],[39,2,1,"","add_warning"],[39,4,1,"","is_valid"],[39,2,1,"","merge_report"],[39,2,1,"","to_xml"]],"ocrd_models.utils":[[40,3,1,"","extract_mets_from_oai_content"],[40,3,1,"","handle_oai_response"],[40,3,1,"","is_oai_content"],[40,3,1,"","xmllint_format"]],"ocrd_utils.deprecate":[[44,3,1,"","deprecated_alias"],[44,3,1,"","rename_kwargs"]],"ocrd_utils.image":[[45,3,1,"","adjust_canvas_to_rotation"],[45,3,1,"","adjust_canvas_to_transposition"],[45,3,1,"","bbox_from_points"],[45,3,1,"","bbox_from_polygon"],[45,3,1,"","bbox_from_xywh"],[45,3,1,"","coordinates_for_segment"],[45,3,1,"","coordinates_of_segment"],[45,3,1,"","image_from_polygon"],[45,3,1,"","points_from_bbox"],[45,3,1,"","points_from_polygon"],[45,3,1,"","points_from_x0y0x1y1"],[45,3,1,"","points_from_xywh"],[45,3,1,"","points_from_y0x0y1x1"],[45,3,1,"","polygon_from_bbox"],[45,3,1,"","polygon_from_points"],[45,3,1,"","polygon_from_x0y0x1y1"],[45,3,1,"","polygon_from_xywh"],[45,3,1,"","polygon_mask"],[45,3,1,"","rotate_coordinates"],[45,3,1,"","scale_coordinates"],[45,3,1,"","shift_coordinates"],[45,3,1,"","transform_coordinates"],[45,3,1,"","transpose_coordinates"],[45,3,1,"","xywh_from_bbox"],[45,3,1,"","xywh_from_points"],[45,3,1,"","xywh_from_polygon"]],"ocrd_utils.introspect":[[46,3,1,"","membername"],[46,3,1,"","set_json_key_value_overrides"]],"ocrd_utils.logging":[[47,3,1,"","disableLogging"],[47,3,1,"","getLevelName"],[47,3,1,"","getLogger"],[47,3,1,"","initLogging"],[47,3,1,"","setOverrideLogLevel"]],"ocrd_utils.os":[[48,3,1,"","abspath"],[48,3,1,"","atomic_write"],[48,3,1,"","directory_size"],[48,3,1,"","get_moduledir"],[48,3,1,"","get_ocrd_tool_json"],[48,3,1,"","get_processor_resource_types"],[48,3,1,"","is_file_in_directory"],[48,3,1,"","pushd_popd"],[48,3,1,"","unzip_file_to_dir"]],"ocrd_utils.package_resources":[[49,3,1,"","get_distribution"],[49,3,1,"","resource_filename"],[49,3,1,"","resource_string"]],"ocrd_utils.str":[[50,3,1,"","assert_file_grp_cardinality"],[50,3,1,"","concat_padded"],[50,3,1,"","get_local_filename"],[50,3,1,"","is_local_filename"],[50,3,1,"","is_string"],[50,3,1,"","make_file_id"],[50,3,1,"","nth_url_segment"],[50,3,1,"","parse_json_string_or_file"],[50,3,1,"","parse_json_string_with_comments"],[50,3,1,"","remove_non_path_from_url"],[50,3,1,"","safe_filename"]],"ocrd_validators.OcrdResourceListValidator":[[52,2,1,"","validate"]],"ocrd_validators.OcrdToolValidator":[[52,2,1,"","validate"]],"ocrd_validators.OcrdZipValidator":[[52,2,1,"","validate"]],"ocrd_validators.PageValidator":[[52,2,1,"","validate"]],"ocrd_validators.ParameterValidator":[[52,2,1,"","validate"]],"ocrd_validators.WorkspaceValidator":[[52,2,1,"","check_file_grp"],[52,2,1,"","validate"]],"ocrd_validators.XsdMetsValidator":[[52,2,1,"","validate"]],"ocrd_validators.XsdPageValidator":[[52,2,1,"","validate"]],"ocrd_validators.XsdValidator":[[52,2,1,"","instance"],[52,2,1,"","validate"]],"ocrd_validators.json_validator":[[54,1,1,"","JsonValidator"],[54,3,1,"","extend_with_default"]],"ocrd_validators.json_validator.JsonValidator":[[54,2,1,"","validate"]],"ocrd_validators.ocrd_tool_validator":[[55,1,1,"","OcrdToolValidator"]],"ocrd_validators.ocrd_tool_validator.OcrdToolValidator":[[55,2,1,"","validate"]],"ocrd_validators.ocrd_zip_validator":[[56,1,1,"","OcrdZipValidator"]],"ocrd_validators.ocrd_zip_validator.OcrdZipValidator":[[56,2,1,"","validate"]],"ocrd_validators.page_validator":[[57,6,1,"","ConsistencyError"],[57,6,1,"","CoordinateConsistencyError"],[57,6,1,"","CoordinateValidityError"],[57,1,1,"","PageValidator"],[57,3,1,"","compare_without_whitespace"],[57,3,1,"","concatenate"],[57,3,1,"","get_text"],[57,3,1,"","make_line"],[57,3,1,"","make_poly"],[57,3,1,"","page_get_reading_order"],[57,3,1,"","set_text"],[57,3,1,"","validate_consistency"]],"ocrd_validators.page_validator.PageValidator":[[57,2,1,"","validate"]],"ocrd_validators.parameter_validator":[[58,1,1,"","ParameterValidator"]],"ocrd_validators.parameter_validator.ParameterValidator":[[58,2,1,"","validate"]],"ocrd_validators.resource_list_validator":[[59,1,1,"","OcrdResourceListValidator"]],"ocrd_validators.resource_list_validator.OcrdResourceListValidator":[[59,2,1,"","validate"]],"ocrd_validators.workspace_validator":[[60,1,1,"","WorkspaceValidator"]],"ocrd_validators.workspace_validator.WorkspaceValidator":[[60,2,1,"","check_file_grp"],[60,2,1,"","validate"]],"ocrd_validators.xsd_mets_validator":[[61,1,1,"","XsdMetsValidator"]],"ocrd_validators.xsd_mets_validator.XsdMetsValidator":[[61,2,1,"","validate"]],"ocrd_validators.xsd_page_validator":[[62,1,1,"","XsdPageValidator"]],"ocrd_validators.xsd_page_validator.XsdPageValidator":[[62,2,1,"","validate"]],"ocrd_validators.xsd_validator":[[63,1,1,"","XsdValidator"]],"ocrd_validators.xsd_validator.XsdValidator":[[63,2,1,"","instance"],[63,2,1,"","validate"]],ocrd:[[2,0,0,"-","cli"],[11,0,0,"-","constants"],[12,0,0,"-","decorators"],[17,0,0,"-","processor"],[22,0,0,"-","resolver"],[23,0,0,"-","resource_manager"],[24,0,0,"-","task_sequence"],[25,0,0,"-","workspace"],[26,0,0,"-","workspace_backup"],[27,0,0,"-","workspace_bagger"],[2,7,1,"cmdoption-ocrd-l","--log-level"],[2,7,1,"cmdoption-ocrd-version","--version"],[2,7,1,"cmdoption-ocrd-l","-l"]],ocrd_modelfactory:[[29,3,1,"","exif_from_filename"],[29,3,1,"","page_from_file"],[29,3,1,"","page_from_image"]],ocrd_models:[[32,0,0,"-","constants"],[33,0,0,"-","ocrd_agent"],[34,0,0,"-","ocrd_exif"],[35,0,0,"-","ocrd_file"],[36,0,0,"-","ocrd_mets"],[37,0,0,"-","ocrd_page"],[38,0,0,"-","ocrd_xml_base"],[39,0,0,"-","report"],[40,0,0,"-","utils"]],ocrd_utils:[[43,0,0,"-","constants"],[44,0,0,"-","deprecate"],[45,0,0,"-","image"],[46,0,0,"-","introspect"],[47,0,0,"-","logging"],[48,0,0,"-","os"],[49,0,0,"-","package_resources"],[50,0,0,"-","str"]],ocrd_validators:[[52,1,1,"","OcrdResourceListValidator"],[52,1,1,"","OcrdToolValidator"],[52,1,1,"","OcrdZipValidator"],[52,1,1,"","PageValidator"],[52,1,1,"","ParameterValidator"],[52,1,1,"","WorkspaceValidator"],[52,1,1,"","XsdMetsValidator"],[52,1,1,"","XsdPageValidator"],[52,1,1,"","XsdValidator"],[53,0,0,"-","constants"],[54,0,0,"-","json_validator"],[55,0,0,"-","ocrd_tool_validator"],[56,0,0,"-","ocrd_zip_validator"],[57,0,0,"-","page_validator"],[58,0,0,"-","parameter_validator"],[59,0,0,"-","resource_list_validator"],[60,0,0,"-","workspace_validator"],[61,0,0,"-","xsd_mets_validator"],[62,0,0,"-","xsd_page_validator"],[63,0,0,"-","xsd_validator"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","property","Python property"],"5":["py","attribute","Python attribute"],"6":["py","exception","Python exception"],"7":["std","cmdoption","program option"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function","4":"py:property","5":"py:attribute","6":"py:exception","7":"std:cmdoption"},terms:{"0":[7,25,37,40,42,45,52,55,57,59],"07":37,"0cell":37,"0number":37,"1":[25,27,34,37,40,50,52,55,59],"100":42,"15":37,"179":37,"180":[25,37],"2":[7,42,52,56],"2001":37,"2019":37,"24":34,"255":[25,45],"256":37,"270":[25,45],"2d":45,"3":[37,57],"32":34,"37":7,"3d":45,"4":[42,50],"440":[52,55,59],"45":25,"517":22,"57":18,"65536":37,"656336593":18,"8":[34,40],"9":[37,52,55],"90":[25,45],"999":37,"boolean":[18,20,22,25,27,29,36,37,38,47,52,55,56,60],"byte":[25,49,52,55,59,61,62,63],"case":[7,9,18,37,40],"class":[1,4,5,9,18,20,21,22,23,24,25,26,27,33,34,35,36,37,38,39,52,54,55,56,57,58,59,60,61,62,63],"default":[4,5,7,9,10,18,22,25,37,45,47,50,52,54,55,59],"do":[9,10,18,20,22,36,45],"enum":[52,55,59],"export":[3,37,42],"final":[7,18,21,45],"float":[34,37,52,55],"function":[3,18,20,21,25,36,42,46,48,49,50,52,55],"import":15,"int":[34,37],"long":[52,55],"new":[9,22,25,29,35,36,37,39,45,50,52,57,60],"return":[9,18,22,25,29,36,37,40,45,48,49,50,52,57,60],"static":[36,37,52,54,55,57,59,60],"true":[9,18,20,23,25,37,40,45,48,52,57],"try":9,"var":5,"while":[52,55],A:[18,25,37,49,52,55,59],AND:25,But:18,By:[22,47],For:[3,18,36,37,50,52,55,57],If:[7,8,9,18,20,21,22,25,36,37,50,52,55,57],In:[18,40],Is:37,It:[18,25,37],Its:37,NOT:37,No:[9,37],OR:25,One:[22,37,52,60],That:[18,45],The:[3,9,18,20,22,25,35,36,37,45,49,50,52,55],Then:3,These:[25,37,42,47],To:[37,52,60],Will:[18,21],With:37,_:[9,18],__name__:49,_recursion_count:25,_type:33,abid:9,abl:5,abort:18,about:[18,25,34,39,45],abov:[25,47],absolut:[9,18,25,42,45],abspath:[42,48],accept:[7,36],access:[22,46],accommod:45,accord:[18,22,25,45,57],accordingli:[9,37],across:[18,37,57],actual:[9,37,50,57],ad:[18,21,36,50],add:[2,10,13,18,23,25,26,36,37,39,45,54,57],add_advertregion:37,add_ag:36,add_alternativeimag:37,add_chartregion:37,add_chemregion:37,add_customregion:37,add_error:39,add_fil:[25,36,50],add_file_group:36,add_glyph:37,add_graphem:37,add_graphemegroup:37,add_graphicregion:37,add_gridpoint:37,add_imageregion:37,add_label:37,add_lay:37,add_linedrawingregion:37,add_mapregion:37,add_mathsregion:37,add_metadata:18,add_metadataitem:37,add_musicregion:37,add_noiseregion:37,add_nonprintingchar:37,add_notic:39,add_orderedgroup:37,add_orderedgroupindex:37,add_regionref:37,add_regionrefindex:37,add_rel:37,add_separatorregion:37,add_tableregion:37,add_textequiv:37,add_textlin:37,add_textregion:37,add_to_user_databas:23,add_unknownregion:37,add_unorderedgroup:37,add_unorderedgroupindex:37,add_userattribut:37,add_warn:39,add_word:37,addit:[27,37,38,45,57],additionalproperti:[52,55,59],adjust_canvas_to_rot:45,adjust_canvas_to_transposit:45,advert:37,advertis:37,advertregion:37,advertregiontyp:37,affin:[25,42,45],after:[7,9,10,18,21,25,36,37,45,50,52,56],after_add_cb:36,afterward:[18,20,25],against:[8,9,36,37,52,54,55,58,59,60,61,62,63],agent:[33,36],algorithm:18,alia:37,alias:44,align:[18,37],all:[2,7,8,9,10,18,20,22,25,26,34,36,37,38,42,45,47,48,50,52,55,56,57,59],allow:[7,37,48,52,55],alnum:22,along:[42,45],alpha:[25,45],alreadi:[3,6,9,22,25,36,45],already_process:37,also:[9,18,22,25,37],alternativeimag:[25,37,50],alternativeimagetyp:37,alwai:[18,37],among:[25,57],amount:45,an:[5,8,9,10,13,18,21,22,25,29,36,37,39,40,42,45,50,52,54,55,56,57,58,60,61,62,63],analysi:[52,55],angl:[25,37,45],ani:[7,9,18,21,25,35,37,45],annot:[25,45],anoth:[37,39,44],anti:37,antiqua:37,any_url:7,anyth:9,anywher:37,api:[31,33,35,36,37,57],appear:37,appli:[18,21,25,42,45],applic:[52,55],approxim:37,ar:[8,9,18,36,37,42,48,50,52,55,57,60],arbitrari:[9,48],archiv:[7,48,52,55,59],area:[25,37],arg:[2,3,4,5,7,8,9,10,20,25,36,47,50,52,58,60],args_:37,argstr:24,argument:[3,4,5,6,7,8,9,10,18,20,22,25,29,35,36],arial:37,around:[45,47],arrai:[3,25,45,52,55,59],articl:37,artifact:37,ascertain:37,assert:50,assert_file_grp_cardin:[42,50],assign:[5,37],associ:[3,25],assum:[22,37],assur:[52,55],asterisk:7,atomic_writ:48,attr:37,attribut:[9,33,37],augment:45,author:37,automatic_backup:[9,25],avail:[2,18,23,25],avoid:[25,50],axi:45,b:[10,34,57],back:[9,18,21,25,27,45],backend:42,background:[25,37,45],backup:[2,26],backup_dir:26,backup_directori:26,bag:[2,27,52,56],bagit:[1,10,27,52,56],bak:9,bare:20,base:[1,4,5,9,10,17,20,22,23,24,25,26,27,33,34,35,36,37,38,39,42,50,52,54,55,56,57,58,59,60,61,62,63],base_version_checksum:10,basedir:23,baselin:[8,9,37,52,57,60],baselinetyp:37,basenam:[8,9,10,22,25,35,50],basename_without_extens:[9,35],baseurl:25,bash:[2,3],bashlib:[1,2],basic:[10,52,56],basicconfig:47,bbox:[37,42],bbox_from_point:45,bbox_from_polygon:45,bbox_from_xywh:45,becaus:[37,52,55],been:37,befor:[9,18,20,25,52,60],begin:7,behaviour:18,being:25,belong:[18,37,52,55],below:[18,42],best:57,better:49,between:[9,37,42],bgcolour:37,bgcolourrgb:37,bin:9,binar:[25,52,55],bit:[34,37],black:45,blacklett:37,block:37,blue:37,bodi:37,bold:37,bone:20,book:37,bool:[52,57],border:[8,25,37,52,57],bordertyp:37,both:[9,42,45,52,60],bottom:42,bound:[25,37,42,45],box:[25,42,45],build:37,buildattribut:37,buildchildren:37,builtin:[1,17],bulk:2,bundl:36,c:[9,10],cach:[52,55],cacheabl:[52,55],calcul:[1,45],calculc:48,call:[25,47],callback:36,caller:50,can:[7,9,18,20,22,25,36,37,42,45,47,50,52,55],candid:36,cannot:[18,37,50],canva:45,cap:37,capit:37,caption:37,captur:9,categori:[2,52,55],cell:37,center:[25,45],centimet:37,cf:29,chang:[9,18,36,37,52,55],channel:[25,45],charact:[22,37],character:[52,55],chart:37,chartregion:37,chartregiontyp:37,chartyp:37,check:[8,9,10,37,48,52,56,57],check_baselin:[52,57],check_coord:[52,57],check_file_grp:[52,60],checksum:[10,27,52,56],chem:37,chemic:37,chemregion:37,chemregiontyp:37,child:57,child_:37,children:[37,57],chksum:26,choic:[18,20],choos:9,choose_first:26,chosen:25,circumst:42,cisocrgroup:18,clash:9,class_:46,classif:[52,55],classmethod:[24,26,52,61,62,63],clear_allindex:37,cli:[0,1,15,18,20,21,52,55,64],click:15,clobber:9,clobber_met:22,clockwis:[37,45],clone:[2,18,21,22],close:[37,42],cm:34,code:[1,37,47],coher:22,color:[25,45],colour:[37,45],colourdepth:37,colspan:37,column:[37,45],columnindex:37,com:[18,22,27],combin:18,come:37,comma:[18,20,25,50],command:[2,3,4,5,7,8,9,10,15,18,21],comment:[25,37,50],compani:37,compar:57,compare_without_whitespac:57,comparison:36,compens:25,complain:18,complex:37,compon:[37,48,52,55,59],compos:[42,45],composit:45,concat_pad:[42,50],concaten:[50,57],concatenate_with:57,concept:34,concis:[52,55],concret:8,condit:37,conf:37,confid:[37,57],configur:[7,47],confin:57,conflict:[9,50],conform:[10,27,52,56],conjunct:8,connect:37,consid:37,consist:[8,9,18,50,52,57],consistencyerror:57,constant:[0,1,2,22,30,31,41,42,46,51,52,64],construct:[45,52,54,55,57,58,59,60,61,62,63],consum:[25,45],contain:[1,8,9,18,20,25,35,37,39,50,52,55,57,60],content:[9,18,20,25,37,38,52,55],context:[42,47],contigu:57,continu:[9,25,37],control:37,convent:[8,37],convert:[25,42,45,46],coord:[8,25,37,52,57],coordin:[1,9,25,37,42,45,57],coordinateconsistencyerror:57,coordinates_for_seg:[42,45],coordinates_of_seg:[42,45],coordinatevalidityerror:57,coordstyp:37,copi:[7,9,20,25],copy_fil:25,core:[7,22],corpu:37,correct:[8,37,42,52,55],correspond:[35,36,42,45],could:9,counter:45,cover:37,creat:[9,10,18,21,22,25,26,29,35,36,37,39,45,47,52,54,55,59],creator:37,critic:2,crop:[25,37,42,45,52,55],crop_imag:42,current:[25,37,52,57],custom:37,customregion:37,customregiontyp:37,cut:25,cv2:42,cwd:[7,52,55],d:[1,2,3,4,5,6,7,8,9,10,18,20,22,26,27,52,55,56,57,60],data:[1,7,9,10,18,27,29,37,40,46,52,55],databas:23,datatyp:37,datatypedetail:37,date:37,dd:37,de:[18,27],debug:[2,3,6],decor:[0,1,42,64],def:15,default_resource_dir:23,defaultvalidatingdraft6valid:[52,54,55,59],defin:[9,37,47,52,55,59],definit:[8,37],degre:[37,45],deleg:25,delet:[9,10,25,36,52,56],delimit:50,denot:9,densiti:34,depend:[1,57],deprec:[9,25,41,42,64],deprecated_alia:[42,44],depth:[34,37],deriv:[25,37,50],descend:26,describ:[5,18,21,45,52,55],descript:[2,18,20,37,48,52,55,57,59],design:48,deskew:[25,37,52,55],despeckl:[52,55],dest:[9,10,27],detail:[36,37],determin:[8,37,48],dev:9,dewarp:[52,55],dict:[18,21,25,33,36,42,45,52,54,55,57,58,59],dictionari:57,differ:[9,37,39,57],digit:50,dimens:[9,34,45,52,60],dir:[3,7,10,52,56],direct:[37,45],directli:[52,57],directori:[3,7,8,9,10,18,20,22,25,26,27,48,52,55,56,59,60],directory_s:48,disabl:9,disablelog:47,disk:[9,22,25],distanc:37,distribut:49,distribution_nam:49,div:36,doc:[52,61,62,63],dockerhub:[52,55],docstr:[18,20,21],document:[21,25,36,37,38,52,61,62,63],doe:[9,10,25,36,37,40,52,55],dom:29,domain:31,don:9,done:36,doubl:[36,37],down:[25,42],download:[2,9,22,23,25,52,60],download_fil:25,download_to_directori:22,download_url:25,draft6valid:[52,54,55,59],draw:37,drop:37,dropcap:37,dry:9,dst_dir:22,due:37,dummy_processor:[17,19],dummyprocessor:20,dump:[2,3,7],dump_json:[12,18,20],dump_module_dir:[12,18,20],duplic:36,dure:37,dynam:[7,23],e:[1,7,9,18,21,22,25,27,29,34,37,42,45,52,55,56],each:[3,7,8,9,18,36,37,52,57],earli:22,echo:9,edit:9,effect:[9,25,37],either:[3,5,9,10,18,25,34,36,38,47,50],el:[33,35,37],element:[29,33,35,37,42,45,50,57],elementtre:[52,61,62,63],els:[18,25,45,50],embtext:37,empti:[9,18,20,22,36,37,50,57],empty_met:36,en:18,encapsul:37,encod:[37,40,42,45],encompass:45,end:37,enlarg:[37,45],ensur:[9,37,50],entail:45,enter:[18,20],entir:18,entri:[2,9,23,25,35,36,40,50],environ:[4,9],equal:[18,36,37],equat:37,equival:[36,50],error:[2,3,6,18,25,36,39,57],esp:[18,20],etc:[1,42,47],etre:[35,52,61,62,63],eval:5,even:[9,18,20,25,36],everyth:[45,50],exactli:50,exampl:[9,25,36,37],except:[18,22,36,37,50,57],exclud:[52,55],exclusivemaximum:[52,55],exclusiveminimum:[52,55],exec:7,execut:[7,8,18,21,23,24,47,48,52,55],exif:[1,25],exif_from_filenam:29,exist:[1,3,6,7,9,10,22,25,36,45,47,50],exit:[2,18,20],expand:36,expect:[18,52,55,57],explan:9,explicitli:[52,55],exportattribut:37,exportchildren:37,express:[9,36,37,52,55],ext:9,ext_to_mim:42,extend_allindex:37,extend_with_default:54,extens:[9,25,35,37,52,55,59],extensiontype_:37,extern:37,externalid:37,externalmodel:37,externalref:37,extra:45,extract:[7,25,40,45,48],extract_mets_from_oai_cont:40,eynollah:[52,55],f:[9,13,14,15,16,25,34],factor:45,factori:[29,37],fail:9,fall:18,fallback:5,fals:[12,18,21,22,23,24,25,26,27,29,36,37,38,45,47,48,52,55,56,59,60],far:25,faster:9,favor:44,featur:25,feature_filt:25,feature_selector:[25,37],field:9,fierc:9,file:[1,2,5,7,8,10,18,20,21,22,23,25,27,29,31,35,36,37,47,48,50,52,55,56,57,59,60],file_0001_bin:9,file_0002_bin:9,file_:9,file_glob:9,file_group:36,file_grp:[9,25],file_id:[9,25,57],filegrp:[3,9,18,20,22,25,35,36,50,52,55],filegrp_map:[9,36],fileid:[9,36],fileid_map:[9,36],filenam:[2,5,9,18,22,25,35,37,38,50,52,57],filesystem:[9,18,21,22,25,36,42,52,55],fill:[25,45],filter:[9,18,25,47],find:[2,18,20,36],find_all_fil:36,find_fil:[25,36],first:[7,8,9,18,25,37,40,52,57],fix:[8,9,18,36,37,52,55,57,60],flip:45,flip_left_right:45,flip_top_bottom:45,flocat:[35,36],fname:9,folder:[9,10,25,27],follow:[18,45],font:[37,52,55],fontfamili:37,fontsiz:37,footnot:37,for_fileid:36,forc:[9,25,36],foreground:37,forget:18,form:[37,42],format:[1,3,25,31,37,38,52,55],former:22,formula:37,found:[9,18,25],fpath:48,fptr:36,fragment:37,free:37,from:[1,3,7,9,15,18,20,22,25,27,29,36,37,38,40,45,49,50,52,57,58],from_path:26,fromsubclass_:37,front:37,fulfil:18,full:[18,21,25,37,45,48,50],fulli:[8,25,52,57],fullmatch:36,func_nam:44,further:[37,52,55],g:[1,3,6,8,9,25,34,37,45,52,55],gds_collector_:37,gener:[5,18,21,25,27,37,50],generate_processor_help:[18,21],generate_rang:42,generatedssup:37,get:[2,7,25,33,35,36,37,45,47,48,49,57],get_advertregion:37,get_align:37,get_allalternativeimag:37,get_allalternativeimagepath:37,get_allindex:37,get_allregion:37,get_alltextlin:37,get_alternativeimag:37,get_baselin:37,get_bgcolour:37,get_bgcolourrgb:37,get_bold:37,get_bord:37,get_capt:37,get_chartregion:37,get_chartyp:37,get_chemregion:37,get_colour:37,get_colourdepth:37,get_colspan:37,get_column:37,get_columnindex:37,get_com:37,get_conf:37,get_continu:37,get_coord:37,get_creat:37,get_custom:37,get_customregion:37,get_dat:37,get_datatyp:37,get_datatypedetail:37,get_descript:37,get_distribut:49,get_embtext:37,get_extensiontype_:37,get_externalid:37,get_externalmodel:37,get_externalref:37,get_filenam:37,get_fontfamili:37,get_fonts:37,get_glyph:37,get_graphem:37,get_graphemegroup:37,get_graphicregion:37,get_grid:37,get_gridpoint:37,get_head:37,get_id:37,get_imagefilenam:37,get_imageheight:37,get_imageregion:37,get_imageresolutionunit:37,get_imagewidth:37,get_imagexresolut:37,get_imageyresolut:37,get_ind:37,get_index:37,get_ital:37,get_kern:37,get_label:37,get_languag:37,get_lastchang:37,get_lay:37,get_lead:37,get_letterspac:37,get_ligatur:37,get_linecolour:37,get_linedrawingregion:37,get_linesepar:37,get_local_filenam:[42,50],get_mapregion:37,get_mathsregion:37,get_metadata:37,get_metadataitem:37,get_moduledir:48,get_monospac:37,get_musicregion:37,get_nam:37,get_noiseregion:37,get_nonprintingchar:37,get_ns_prefix_:37,get_numcolour:37,get_ocrd_tool_json:48,get_orderedgroup:37,get_orderedgroupindex:37,get_orient:37,get_pag:37,get_pcgtsid:37,get_pencolour:37,get_physical_pag:36,get_physical_page_for_fil:36,get_plaintext:37,get_point:37,get_prefix:37,get_primarylanguag:37,get_primaryscript:37,get_printspac:37,get_processor_resource_typ:48,get_product:37,get_readingdirect:37,get_readingord:37,get_readingorient:37,get_regionref:37,get_regionrefindex:37,get_rel:37,get_reversevideo:37,get_rol:37,get_row:37,get_rowindex:37,get_rowspan:37,get_script:37,get_secondarylanguag:37,get_secondaryscript:37,get_separatorregion:37,get_serif:37,get_smallcap:37,get_sourceregionref:37,get_strikethrough:37,get_subscript:37,get_superscript:37,get_symbol:37,get_tablecellrol:37,get_tableregion:37,get_targetregionref:37,get_text:57,get_textcolour:37,get_textcolourrgb:37,get_textequiv:37,get_textlin:37,get_textlineord:37,get_textregion:37,get_textstyl:37,get_typ:37,get_underlin:37,get_underlinestyl:37,get_unicod:37,get_unknownregion:37,get_unorderedgroup:37,get_unorderedgroupchildren:37,get_unorderedgroupindex:37,get_userattribut:37,get_userdefin:37,get_valu:37,get_word:37,get_xheight:37,get_zindex:37,getlevelnam:[42,47],getlogg:[42,47],getrecord:[9,40],git_url:[52,55],github:[18,22,27,52,55,56,57],gitlab:[52,55],given:[3,7,9,18,20,22,25,37,45,57],glob:9,global:[25,47],glyph:[8,37,42,52,57],glyphtyp:[25,37,45],graph:37,graphem:37,graphemebasetyp:37,graphemegroup:37,graphemegrouptyp:37,graphemestyp:37,graphemetyp:37,graphic:37,graphicregion:37,graphicregiontyp:37,grayscal:34,grayscale_norm:[25,52,55],greater:37,green:37,grid:37,gridpoint:37,gridpointstyp:37,gridtyp:37,group:[2,3,18,20,25,36,37,57],grp:[3,9,50],gt:37,guarante:50,guess:9,h:42,ha:[25,37,50],handl:[18,22],handle_oai_respons:40,hascontent_:37,have:[9,18,25,29,37,42,45,57],head:37,header:37,height:[34,37,42,45],help:[2,9,12],helper:[1,17,18],hierarchi:[25,37,42],higher:[25,42],highest:57,home:47,homogen:45,how:[8,9,52,55,59],howev:[25,45],href:[25,35,36],html:[52,57],http:[9,18,22,27,37,52,56,57],hull:45,i:[3,9,10,18,21,22,25,27,29,34,37,42,45,52,56],id:[2,3,6,8,10,18,20,25,35,36,37,50,57],ident:[22,45],identif:[52,55],identifi:[9,10,27,36,37],if_exist:22,ignor:[9,36,57],illustr:37,imag:[3,6,18,25,29,34,37,41,42,52,55,64],image_filenam:29,image_from_pag:[25,42],image_from_polygon:[42,45],image_from_seg:[25,42],image_url:25,imagefilenam:[9,25,37],imageheight:37,imagephotometricinterpret:37,imageregion:37,imageregiontyp:37,imageresolutionunit:37,imagewidth:37,imagexresolut:37,imageyresolut:37,img:[9,34,50],implement:[1,15,18,21],implicitli:42,importlib:49,in_plac:27,inch:[34,37],includ:[18,20,21,37,42,47,52,55],inconsist:57,increas:[37,45],indent:37,index:[37,50,57,64],index_sort:37,indic:37,infilenam:37,info:[2,3,6,27],inform:[18,20,25,37],init:2,initi:3,initlog:[42,47],inner:57,input:[2,18,20,50,52,55],input_fil:[18,29],input_file_grp:[3,18,20,21,24,52,55,60],insert_advertregion_at:37,insert_alternativeimage_at:37,insert_chartregion_at:37,insert_chemregion_at:37,insert_customregion_at:37,insert_glyph_at:37,insert_grapheme_at:37,insert_graphemegroup_at:37,insert_graphicregion_at:37,insert_gridpoints_at:37,insert_imageregion_at:37,insert_label_at:37,insert_labels_at:37,insert_layer_at:37,insert_linedrawingregion_at:37,insert_mapregion_at:37,insert_mathsregion_at:37,insert_metadataitem_at:37,insert_musicregion_at:37,insert_noiseregion_at:37,insert_nonprintingchar_at:37,insert_orderedgroup_at:37,insert_orderedgroupindexed_at:37,insert_regionref_at:37,insert_regionrefindexed_at:37,insert_relation_at:37,insert_separatorregion_at:37,insert_tableregion_at:37,insert_textequiv_at:37,insert_textline_at:37,insert_textregion_at:37,insert_unknownregion_at:37,insert_unorderedgroup_at:37,insert_unorderedgroupindexed_at:37,insert_userattribute_at:37,insert_word_at:37,insid:45,inspect:25,instal:[2,18,20,23],instanc:[25,37,49,52,57,63],instanti:[1,3,18,20,21,25,36,57],instead:[5,9,18,20],instr:37,integ:[27,34,42,50,52,56],interfac:[2,18,25],interpret:[9,25,37,45],intersect:[37,57],interspers:50,interv:25,intric:37,introspect:[41,42,64],invalid:37,invalidate_alternativeimag:37,invari:42,invers:[25,45],involv:[9,45],io:[27,52,56,57],is_file_in_directori:[42,48],is_local_filenam:[42,50],is_oai_cont:40,is_str:[42,50],is_valid:39,issu:22,issuecom:18,ital:37,item:[37,52,55,59],iter:47,its:[3,7,9,18,20,22,25,27,29,37,45,57],itself:[9,25],j:[5,10],join:[9,37,57],joinrel:57,json:[1,2,3,5,7,9,18,20,21,27,50,52,54,55,56,58],json_fil:[2,5],json_valid:[51,52,55,58,59,64],jsonschema:[52,54,55,59],jsonvalid:[52,54,55,58,59],just:[9,25],k:9,keep:[9,22,25],keep_fil:25,kei:[42,52,55],kern:37,keyword:[18,20,22,25,29,35,36],kind:37,know:22,known:7,kvpair:46,kwarg:[4,12,20,25,36,42,44,47,52,58,60],kwargs_:37,l:[2,3,6,7,34],label:37,labelstyp:37,labeltyp:37,languag:37,larg:[52,55],last:[9,18,22,25,26,37,50],lastchang:37,lastmod:26,lastresort:47,latter:[22,45],lax:[8,9,52,57,60],layer:37,layerstyp:37,layertyp:37,layout:[37,52,55,57],lead:[25,36,37,50],least:[37,57],leav:27,left:45,letter:37,letterspac:37,level:[2,3,6,7,8,9,13,18,25,37,39,42,47,57],li:37,librari:[2,3,47],lie:37,ligatur:37,like:[10,36,37,40,50,52,55,59],likewis:25,line:[2,3,18,21,37,42,50,52,55],line_point:57,linecolour:37,linedrawingregion:37,linedrawingregiontyp:37,linesepar:37,linestr:57,link:[36,37],list:[2,3,18,20,23,25,26,27,36,37,42,45,48,52,55,57,60],list_all_resourc:18,list_avail:23,list_filenam:23,list_instal:23,list_resourc:[12,18,20,21],liter:[18,36,50],live:37,load:[25,38],load_resource_list:23,local:[9,18,21,22,25,29,35,36,50,52,54,55,59],local_filenam:[9,35,36],local_onli:36,locat:[7,9,10,22,23,52,55,59],location_to_resource_dir:23,loctyp:35,log:[1,2,3,6,13,41,42,64],log_level:[2,3,6,18,21,24],logctx:4,logger:[4,47],logger_nam:4,logic:37,loglevel_opt:[1,12],logo:37,look:[7,9,36,37,49],lookup:[52,55],loop:3,loos:37,lower:[25,37],lowest:[37,57],lvl:[4,47],lxmlelement:[33,35],m:[3,6,8,9,10],made:7,mai:[18,37,50,52,55],main:[18,20,37],major:[52,55],make:18,make_file_id:[3,42,50],make_lin:57,make_poli:57,manag:[2,5,7,9,10,22,23,26],mandatori:18,mani:9,manifest:[10,35,52,56],map:[9,29,36,37],mapping_:37,mapregion:37,mapregiontyp:37,margin:37,mark:[37,42],mask:[25,42,45],match:[9,18,23,36,37],math:37,mathemat:37,mathsregion:37,mathsregiontyp:37,matrix:[37,45],maxi:45,maximum:[52,55],maxx:45,md:3,mean:37,measur:[34,37],mechan:[9,54],media:[9,52,55],median:[25,45],member:[37,46],member_data_items_:37,membernam:[42,46],memberspec_:37,mere:[25,45],merg:[2,25,36,39],merge_report:39,messag:[4,39],met:[1,3,6,8,9,10,12,18,20,21,22,24,25,26,27,29,33,35,36,40,52,57,60],metadata:[1,25,29,34,37],metadataitem:[18,37],metadataitemtyp:[18,37],metadatatyp:37,meth:36,method:[21,29,42,45],mets_basenam:[8,9,10,22,25],mets_fil:[9,52,60],mets_file_group_nam:[9,52,60],mets_find_opt:[1,12],mets_path:9,mets_unique_identifi:[9,52,60],mets_url:[9,15,18,21,22,25,52,60],mets_xml:26,mets_xsd:9,metshdr:36,migrat:2,mime:[18,25,48],mime_to_ext:42,mimetyp:[3,9,18,25,29,35,36],mimetype_pag:42,mini:45,minimum:[52,55],minor:[52,55],minx:45,mm:37,mod:[9,36],mode:[34,45],model:[1,18,23,29,37,52,55],modul:[0,1,2,12,17,19,30,31,41,42,51,52,64],moduledir:[18,20],monospac:37,more:[9,37,47,52,60],moreov:[25,37,45],most:[52,55,57],mp:[15,52,55],msg:[4,39,50],much:25,multi:[2,8,9,18],multipag:37,multipl:[9,18,20,36,37,45,52,55],multipleof:[52,55],multipli:45,music:37,musicregion:37,musicregiontyp:37,must:[8,10,18,37,45,52,55,57],n:[4,7,9,37,50,52,55],name:[3,4,7,9,18,20,21,22,23,25,27,29,33,37,46,47,49,50,52,55,59],name_:37,namespacedef_:37,namespaceprefix_:37,natur:37,necessari:[36,37,45],necessarili:45,need:[18,20,25,48,50],neg:[37,57],neither:39,nest:37,newcwd:48,next:25,no_subdir:23,node:[29,37,57],nodename_:37,nois:37,noiseregion:37,noiseregiontyp:37,non:[9,10,37,57],none:[12,18,20,21,22,23,24,25,27,33,35,36,37,38,45,48,50,52,57,60],nonprintingchar:37,nonprintingchartyp:37,nontext:[52,55],nor:39,normal:1,notat:37,note:[33,50],notic:39,notset:47,now:36,ns_prefix:37,nsmap:37,nsmap_:37,nth_url_seg:[42,50],number:[10,18,27,37,50,52,55,56,59],numcolour:37,numer:[36,45],numpi:[25,45],o:[3,7],oai:[9,40],obj:[46,52,54,55,58,59],object:[4,5,9,18,21,22,23,24,25,26,27,33,34,35,36,37,38,39,42,45,50,52,54,55,56,57,59,60,63],ocr:[1,2,3,4,5,6,7,8,9,10,18,20,22,27,31,37,52,55,56,57,60],ocrd:[36,42,47,48,52,55,56,58,59,60,64],ocrd_ag:[30,31,36,64],ocrd_base_version_checksum:27,ocrd_ci:18,ocrd_cli_opt:[1,12],ocrd_cli_wrap_processor:12,ocrd_click_cli:15,ocrd_exif:[25,30,31,64],ocrd_fil:[18,25,30,31,36,50,52,57,64],ocrd_identifi:27,ocrd_log:47,ocrd_loglevel:13,ocrd_met:[25,27,30,31,35,50,64],ocrd_model:[1,3,18,25,29,50,52,57,64],ocrd_modelfactori:[1,64],ocrd_pag:[25,29,30,31,52,57,64],ocrd_page_gener:37,ocrd_tool:[1,2,8,12,18,20,21,48,52,58],ocrd_tool_json:24,ocrd_tool_nam:4,ocrd_tool_valid:[51,52,64],ocrd_util:[1,3,64],ocrd_valid:[1,64],ocrd_xml_bas:[30,31,36,64],ocrd_zip:[27,52,56],ocrd_zip_valid:[51,52,64],ocrdag:[33,36],ocrdexif:[25,29,34],ocrdfil:[18,25,29,35,36,52,57],ocrdmet:[25,35,36,50],ocrdpag:[29,37,52,57],ocrdresourcelistvalid:[52,59],ocrdresourcemanag:23,ocrdtoolctx:5,ocrdtoolvalid:[52,55],ocrdxmldocu:[36,38],ocrdzipvalid:[52,56],octet:[52,55],off:[2,3,6,8,9,52,57,60],offend:57,offset:[42,45],often:49,old:[9,25,36,37],omit:[8,10,37,52,56],on_error:18,one:[2,3,8,9,25,37,39,47,57],ones:45,onli:[7,8,18,20,25,37,52,57],ontolog:37,oop:42,opaqu:25,open:[18,21,29,42],oper:[25,36,42,48],opposit:45,optim:[52,55],option:[2,3,4,5,6,7,8,9,10,13,18,21,25,36,37,50],ord_base_version_checksum:27,ord_identifi:27,ord_met:27,order:[9,25,36,37,57],orderedgroup:37,orderedgroupindex:37,orderedgroupindexedtyp:37,orderedgrouptyp:37,orderlabel:36,org:37,orient:[25,37],orig:45,origin:[25,45],ornat:37,os:[35,41,42,64],other:[9,18,35,37,52,55],other_met:36,other_workspac:25,otherloctyp:35,otherrol:33,otherself:39,othertyp:33,otherwis:[9,18,21,25,37,45,47,50],out:25,outer:57,outfil:37,outlin:[37,42],output:[3,5,6,8,9,18,20,21,50,52,55],output_directori:48,output_field:9,output_file_grp:[3,18,20,21,24,50,52,55,60],outputfileid:3,outsid:[25,37,45],overlap:37,overrid:[3,5,37,47],overridden:[18,20,47],overrideloglevel:47,overwrit:[3,6,7,8,9,12,18,21,22,23,24,25,36],overwrite_mod:25,p:[3,5,7,9],pack:27,packag:[0,28,30,41,49,51,64],package_resourc:[41,42,64],pad:50,page:[1,2,3,6,18,20,25,29,35,36,37,42,45,50,52,57,64],page_:9,page_coord:25,page_coordinate_consist:[9,52,60],page_from_fil:29,page_from_imag:29,page_get_reading_ord:57,page_id:[3,6,8,9,18,20,21,24,25,52,60],page_imag:25,page_image_info:25,page_p0001:9,page_recurs:25,page_same_group:25,page_strict:[52,60],page_textequiv_consist:[8,9,52,57],page_textequiv_strategi:[8,52,57],page_valid:[51,52,64],page_xsd:9,page_xywh:25,pagecont:37,pageid:[3,9,35,36,50],pageid_map:[9,36],pagenumb:37,pagetyp:[25,37,45],pagevalid:[52,57],pair:57,paper:37,paragraph:37,parallel:[10,27],param:[2,18,21],param_json:8,paramet:[1,2,3,5,9,18,20,21,22,24,25,27,29,33,34,35,36,37,38,40,47,48,49,50,52,54,55,56,57,58,59,60,61,62,63],parameter_opt:[1,12],parameter_overrid:[3,5,18,21],parameter_override_opt:16,parameter_usag:[23,52,55,59],parameter_valid:[51,52,64],parametersagain:[52,58],parametervalid:[52,58],parent:[25,37,45,57],parent_coord:[25,45],parent_el:37,parent_imag:[25,45],pars:[2,18,20,24,37,50,52,58],parse_json_string_or_fil:[42,50],parse_json_string_with_com:[42,50],parseetre:[29,37],parsestr:37,part:[22,37,48],pass:[9,18,21,25,42,52,57],passabl:8,passiv:[25,45],patch:[52,55],path:[1,3,5,7,9,18,20,22,25,27,29,35,36,37,42,48,49,50,52,55,56,57],path_in_arch:[7,23,52,55,59],path_to_zip:[48,52,56],pathlib:49,pattern:[52,55],patternproperti:[52,55,59],payload:10,pc:[37,50],pcgt:[18,37],pcgtsid:37,pcgtstype:[18,37],pen:37,pencolour:37,pep:[52,55,59],per:[3,18,37],perform:49,person:37,photo:37,photometricinterpret:34,phys_0001:[9,36],phys_0002:[9,36],phys_0003:36,phys_:9,physic:[9,18,20,25,35,36],physical_pag:36,pick:25,pictur:37,pil:[25,29,34,42,45],pitch:37,pixel:[34,37,45],pixel_dens:[9,52,60],pkg_resourc:49,place:[10,37],plaintext:37,planar:37,pmh:[9,40],png:[9,25],point:[2,9,34,37,42,45,57],points_from_bbox:45,points_from_polygon:45,points_from_x0y0x1y1:45,points_from_xywh:[42,45],points_from_y0x0y1x1:45,poli:[9,52,60],polygon:[25,37,42,45,57],polygon_from_bbox:45,polygon_from_point:[42,45],polygon_from_x0y0x1y1:45,polygon_from_xywh:45,polygon_mask:[42,45],polygon_point:57,posit:[37,42],possibl:25,post:[52,55],practic:37,pragraph:37,preambl:40,predic:37,prefer:18,prefix:[18,25,36,37,50],preprocess:[52,55],presenc:37,present:[18,37],preserv:[52,55],pretti:[38,40],pretty_print:37,prevent:36,preview:[9,37],previou:[25,26,37],primaresearch:37,primari:37,primarylanguag:37,primaryscript:37,print:[3,15,18,20,37,38,40],print_resourc:7,print_warn:37,printspac:37,printspacetyp:37,problem:57,process:[1,2,3,8,10,18,20,27,52,56,60],processor:[0,1,2,3,5,7,23,25,48,50,52,55,59,64],processor_inst:[18,21],processorclass:[12,18,21],processortask:24,produc:[25,29,42,52,55],product:37,profil:[12,27,52,56],profile_fil:12,programmat:47,progress_cb:23,project:[52,55],properli:57,properti:[18,23,24,33,34,35,36,37,38,39,52,55,59],proport:[37,45],provid:[4,9,35,37,52,55],prune:2,prune_readingord:37,pull:18,pure:[37,45],purl:9,purpos:2,pushd_popd:48,pwd:[9,47],py:[10,25,36,47],python:[18,21,47],qualiti:[52,55],queri:[3,36],r:[9,42],rais:[18,22,25,36,37,50],rang:[8,36,37,52,55,59],raw:25,rdf:37,re:36,read:[9,18,29,37,47,57],readingdirect:[37,57],readingord:[37,57],readingordertyp:37,readingorient:37,readm:3,real:37,reason:57,receiv:36,recogn:[52,55],recognit:[52,55],recommend:3,rectangl:[25,37,42,45],recurs:[9,25,36,37,42,45,57],red:37,refer:[1,9,25,36,37,52,55,57],referenc:[9,22,25,37],refin:37,reflect:[25,42,45],regardless:[7,25],regex:[9,18,36],region:[8,25,37,42,52,55,57],region_ord:37,regionposit:37,regionref:37,regionrefindex:37,regionrefindexedtyp:37,regionreftyp:37,regiontyp:[37,45],regist:7,registri:23,regular:[9,36,37],reimplement:49,rel:[9,22,25,29,37,42,45,50],relat:[1,37,42,52],relationstyp:37,relationtyp:37,reload:25,reload_met:25,remaind:9,remot:22,remov:[2,3,6,25,35,36,37,45,50],remove_fil:[25,36],remove_file_group:[25,36],remove_non_path_from_url:[42,50],remove_one_fil:36,remove_physical_pag:36,remove_physical_page_fptr:36,renam:[2,7,25,36],rename_file_group:[25,36],rename_kwarg:44,repeat:9,replac:[7,9,10,25,27,42,50],replace_advertregion_at:37,replace_alternativeimage_at:37,replace_chartregion_at:37,replace_chemregion_at:37,replace_customregion_at:37,replace_glyph_at:37,replace_grapheme_at:37,replace_graphemegroup_at:37,replace_graphicregion_at:37,replace_gridpoints_at:37,replace_imageregion_at:37,replace_label_at:37,replace_labels_at:37,replace_layer_at:37,replace_linedrawingregion_at:37,replace_mapregion_at:37,replace_mathsregion_at:37,replace_metadataitem_at:37,replace_musicregion_at:37,replace_noiseregion_at:37,replace_nonprintingchar_at:37,replace_orderedgroup_at:37,replace_orderedgroupindexed_at:37,replace_regionref_at:37,replace_regionrefindexed_at:37,replace_relation_at:37,replace_separatorregion_at:37,replace_tableregion_at:37,replace_textequiv_at:37,replace_textline_at:37,replace_textregion_at:37,replace_unknownregion_at:37,replace_unorderedgroup_at:37,replace_unorderedgroupindexed_at:37,replace_userattribute_at:37,replace_word_at:37,report:[30,31,52,57,60,64],repositori:22,repres:[18,25,29,33,34,35,37,45,50,52,55,57],represent:[37,45],request:[9,18,40],requir:[3,5,6,7,8,9,10,18,25,37,52,55,59],require_first:18,res_filenam:23,res_nam:5,reset:47,reslist:7,resmgr:[1,2],resolut:[34,37],resolutionunit:34,resolv:[0,1,18,20,21,25,27,52,56,60,64],resolve_image_as_pil:25,resolve_image_exif:25,resolve_mets_argu:22,resolve_resourc:18,resourc:[2,7,18,20,23,37,48,49,52,55,59],resource_dir_to_loc:23,resource_filenam:49,resource_list:[52,59],resource_list_valid:[51,52,64],resource_loc:[7,52,55],resource_manag:[0,1,64],resource_path:23,resource_str:49,resource_typ:[7,23],resp:[8,52,57],respect:[9,18,37,45,47],respect_textline_ord:37,respons:[36,40,50],restor:[2,26],restrict:36,result:[9,22,25,36,45,57],retriev:[22,25],reus:[18,21],reusabl:9,revers:[29,37],reversevideo:37,revert:25,rgb:[34,37],richest:25,ro:57,rogroup:57,role:[33,37],rolestyp:37,roman:37,root:[27,37,47],rotat:[25,37,42,45],rotate_180:45,rotate_270:45,rotate_90:45,rotate_coordin:[42,45],rotate_imag:42,round:45,routin:1,row:37,rowindex:37,rowspan:37,rtype:36,run:[6,8,9,18,20,21,37,52,60],run_cli:[18,21],run_identifi:34,run_pil:34,run_processor:[18,21],run_task:24,runtim:[18,20],s:[3,4,5,6,7,8,9,10,18,20,21,22,25,36,37,50,57],safe:[42,50],safe_filenam:[42,50],same:[9,25,36,42,45,49],san:37,sanit:50,save:[9,18,21,25],save_image_fil:25,save_met:25,save_user_list:23,scale:45,scale_coordin:45,scan:37,scanner:37,schema:[1,31,37,52,54,55,58,59,61,62,63],schema_url:[52,61,62,63],score:57,script:[3,37],search:[18,20,25,36,64],second:[9,37],secondari:37,secondarylanguag:37,secondaryscript:37,section:[18,21],see:[3,9,18,25,27,34,36,45,48,52,55,56,59],seg:9,segment:[22,25,37,45,50,52,55],select:[18,25],self:[26,36,37,57],semant:[9,37,52,55],separ:[18,20,25,37,50],separatorregion:37,separatorregiontyp:37,sequenc:[6,8],seri:[2,6],serial:[25,27,34,37,38,39,40],serif:37,set:[2,7,13,18,20,21,22,25,36,37,42,45,47,52,54,55,57],set_advertregion:37,set_align:37,set_alternativeimag:37,set_baselin:37,set_bgcolour:37,set_bgcolourrgb:37,set_bold:37,set_bord:37,set_capt:37,set_chartregion:37,set_chartyp:37,set_chemregion:37,set_colour:37,set_colourdepth:37,set_colspan:37,set_column:37,set_columnindex:37,set_com:37,set_conf:37,set_continu:37,set_coord:37,set_creat:37,set_custom:37,set_customregion:37,set_dat:37,set_datatyp:37,set_datatypedetail:37,set_descript:37,set_embtext:37,set_extensiontype_:37,set_externalid:37,set_externalmodel:37,set_externalref:37,set_filenam:37,set_fontfamili:37,set_fonts:37,set_glyph:37,set_graphem:37,set_graphemegroup:37,set_graphicregion:37,set_grid:37,set_gridpoint:37,set_head:37,set_id:37,set_imagefilenam:37,set_imageheight:37,set_imageregion:37,set_imageresolutionunit:37,set_imagewidth:37,set_imagexresolut:37,set_imageyresolut:37,set_ind:37,set_index:37,set_ital:37,set_json_key_value_overrid:[42,46],set_kern:37,set_label:37,set_languag:37,set_lastchang:37,set_lay:37,set_lead:37,set_letterspac:37,set_ligatur:37,set_linecolour:37,set_linedrawingregion:37,set_linesepar:37,set_mapregion:37,set_mathsregion:37,set_metadata:37,set_metadataitem:37,set_monospac:37,set_musicregion:37,set_nam:37,set_noiseregion:37,set_nonprintingchar:37,set_ns_prefix_:37,set_numcolour:37,set_orderedgroup:37,set_orderedgroupindex:37,set_orient:37,set_pag:37,set_pcgtsid:37,set_pencolour:37,set_physical_page_for_fil:36,set_plaintext:37,set_point:37,set_prefix:37,set_primarylanguag:37,set_primaryscript:37,set_printspac:37,set_product:37,set_readingdirect:37,set_readingord:37,set_readingorient:37,set_regionref:37,set_regionrefindex:37,set_rel:37,set_reversevideo:37,set_rol:37,set_row:37,set_rowindex:37,set_rowspan:37,set_script:37,set_secondarylanguag:37,set_secondaryscript:37,set_separatorregion:37,set_serif:37,set_smallcap:37,set_sourceregionref:37,set_strikethrough:37,set_subscript:37,set_superscript:37,set_symbol:37,set_tablecellrol:37,set_tableregion:37,set_targetregionref:37,set_text:57,set_textcolour:37,set_textcolourrgb:37,set_textequiv:37,set_textlin:37,set_textlineord:37,set_textregion:37,set_textstyl:37,set_typ:37,set_underlin:37,set_underlinestyl:37,set_unicod:37,set_unknownregion:37,set_unorderedgroup:37,set_unorderedgroupindex:37,set_userattribut:37,set_userdefin:37,set_valu:37,set_word:37,set_xheight:37,set_zindex:37,setoverrideloglevel:[42,47],setup:[18,20,47],sever:39,shall:37,share:42,she:22,shell:[3,5,9],shift:[36,45],shift_coordin:[42,45],shortcut:22,should:[29,37,52,55],show:[2,7],show_help:[18,20],show_resourc:[12,18,20,21],show_vers:[18,20],shrunk:45,sign:34,signatur:37,silenc:37,silent:[18,37,47],simpl:37,simplifi:46,simul:8,sinc:[25,45],singl:[5,18,35,36,37],size:[23,26,37,45,48,52,55,59],skew:37,skip:[7,9,10,18,22,52,56,60],skip_bag:[52,56],skip_checksum:[52,56],skip_declar:37,skip_delet:[52,56],skip_init:23,skip_unzip:[52,56],skip_zip:27,slash:36,smallcap:37,smallest:37,so:25,solid:37,someth:37,sort:[26,37],sort_allindex:37,sourc:[3,4,5,7,9,12,13,14,15,18,20,21,22,23,24,25,26,27,29,33,34,35,36,37,38,39,40,44,45,46,47,48,49,50,52,54,55,56,57,58,59,60,61,62,63],sourceregionref:37,space:[37,57],span:37,spec:[18,36,47,52,55,56,59,60],special:48,specif:[9,50],specifi:[18,25,37],spill:[2,27],split:37,src:[9,10,27],src_baseurl:22,src_dir:[52,60],src_path_opt:9,standard:[18,20],standardis:37,start:[9,25,29,36,37,49,50],state:[25,26],stderr:47,stdin:9,stdout:[18,20],step:[2,18,52,55],still:[10,18,52,56],store:[7,25,52,55,59],str:[29,34,37,41,42,49,52,61,62,63,64],strategi:[8,57],stream:[52,55],strict:[8,9,27,52,57,60],strikethrough:37,string:[3,5,9,18,20,21,22,25,27,33,34,35,36,37,38,40,42,45,46,47,49,50,52,55,56,57,59,60],strong:37,structmap:[25,35,36],structur:[36,37,46,52,55],stub:23,style:37,sub:[37,50,52,55],subclass:[18,20,37,49],subdir:22,subdirectori:22,subject:37,submodul:[0,30,41,51,64],subpackag:[0,64],subscript:37,subsequ:[7,45],subset:36,subtyp:[52,55],suffix:18,superclass:37,superscript:37,support:[9,36,52,55,59],swap:42,symbol:37,syntax:[8,42,52,55,59],system:[7,9,42,45,48,52,55],t:[7,9,10,42,52,55],tab:9,tabl:37,tablecellrol:37,tablecellroletyp:37,tableregion:37,tableregiontyp:37,tabular:37,tag:[10,27,37,57],tag_fil:[10,27],take:18,target:22,targetregionref:37,task:[2,6,24],task_sequ:[0,1,64],task_str:24,technic:34,tempdir:48,templat:36,temporari:[22,25],term:[52,55],tesserocr:[42,52,55],test:[9,52,60],text:[33,37,52,55,57],textcolour:37,textcolourrgb:37,textequiv:[8,9,37,57],textequivtyp:37,textlin:[8,37,52,57],textlineord:[37,57],textlinetyp:[25,37,45],textregion:37,textregiontyp:[25,37],textstyl:37,textstyletyp:37,textual:57,than:[9,37],thei:[3,6,18,37,42],them:[18,42],themselv:9,thereof:49,thi:[7,9,18,20,21,25,35,36,37,39,42,45,50,52,55,59],think:22,those:[25,37,45,52,55],through:[3,36],thu:[25,45],time:[18,37],titl:37,titlepag:37,tmp_prefix:22,to_etre:37,to_xml:[34,37,38,39],too:[9,29,37],tool:[1,2,18,20,21,48,52,55,58],tool_nam:5,top:[18,42],touch:45,trace:[2,3,6],train:[52,55],traineddata:[52,55],transcript:57,transform:[25,42,45],transform_coordin:[42,45],translat:[25,45],transpar:[25,45],transpos:[42,45],transpose_coordin:[42,45],transpose_imag:[42,45],transposit:[25,45],transvers:45,travers:[42,57],treat:10,tree:[29,37],tri:18,tripl:37,truecolor:34,tupl:[18,25,33,37,42],turn:27,two:[25,57],txt:27,type:[7,9,18,25,33,34,36,37,48,52,55,59],type_:37,typefac:37,u:9,ultim:50,under:[18,20,22],underlin:37,underlinestyl:37,undo:[2,26],unexpos:25,unicod:[37,57],uniform:18,uninstal:7,uniqu:[36,50],unique_identifi:36,unit:[34,37],unknown:[7,37,57],unknownregion:37,unknownregiontyp:37,unless:[18,20,22,25,37],unord:37,unorderedgroup:37,unorderedgroupindex:37,unorderedgroupindexedtyp:37,unorderedgrouptyp:37,unpack:[7,10,27,52,56],unregist:7,unzip:[10,27,52,56],unzip_file_to_dir:48,up:[25,49],updat:[7,18,21],upload:[22,25],upper:45,uri:[37,52,55,61,62,63],url:[3,7,9,22,23,25,29,35,36,48,50,52,55,59,60],us:[3,7,8,9,18,20,21,22,25,35,36,37,42,45,47,49,50,52,55,56,57,59],usabl:[9,42],usag:[15,18,20,23],usefor:37,user:[22,23,36,37,52,55],userattribut:37,userattributetyp:37,userdefin:37,userdefinedtyp:37,userdir:23,usual:47,utf:40,util:[1,15,30,31,42,46,50,64],val:[18,46,50],valdiat:[10,52,56],valid:[1,2,18,20,24,27,37,39,40,52,54,55,56,57,58,59,60,61,62,63],validate_alignsimpletyp:37,validate_charttypesimpletyp:37,validate_colourdepthsimpletyp:37,validate_coloursimpletyp:37,validate_confsimpletyp:37,validate_consist:57,validate_continu:37,validate_graphicstypesimpletyp:37,validate_grouptypesimpletyp:37,validate_languagesimpletyp:37,validate_pagetypesimpletyp:37,validate_pointstyp:37,validate_pointstype_patterns_:37,validate_productionsimpletyp:37,validate_readingdirectionsimpletyp:37,validate_scriptsimpletyp:37,validate_task:24,validate_textdatatypesimpletyp:37,validate_textlineordersimpletyp:37,validate_texttypesimpletyp:37,validate_underlinestylesimpletyp:37,validate_uniqu:37,validationreport:[39,52,57,60],validator_class:[52,54,55,59],valu:[9,18,33,37,48,50,52,55,57],variabl:[4,5,9,46],variant:27,variou:[31,42,52],vector:45,verifi:18,version:[2,9,10,12,18,20,25,26,27,40,42,52,55,59],version_rang:[52,55,59],via:[18,22,25,37],visual:37,w3:37,w:[3,34,42],wa:[18,45],wait:9,warn:[2,3,6,39],warrant:18,well:[3,9,45],were:36,what:[22,48,52,55],when:[8,9,25,37,42,52,55],whenev:[9,18,45],where:[7,18,25,37,42,49],whether:[7,8,9,10,22,25,27,29,36,37,39,47,50,52,55,56,57,60],which:[9,25,37,45],white:[25,45,57],whitespac:57,whole:37,width:[34,37,42,45],with_tre:29,within:[8,22,37,45,50,52,55,57],without:[37,52,55,59],wolf:9,won:[52,55],word:[8,37,42,52,55,57],wordtyp:[25,37,45],work:[2,3,5,9,25],workflow:[6,18],working_dir:[3,12,18,21],workspac:[0,1,2,3,8,10,18,20,21,22,24,26,27,29,39,42,52,56,60,64],workspace_backup:[0,1,64],workspace_bagg:[0,1,64],workspace_dir:9,workspace_from_noth:22,workspace_from_url:[18,21,22],workspace_valid:[51,52,64],workspacebackup:26,workspacebackupmanag:26,workspacebagg:27,workspacec:[52,60],workspacectx:9,workspacevalid:[52,60],wrap:[9,25,52,57],wrapper:[1,47],write:[18,21,25],www:37,x0:[42,45],x0y0x1y1:[42,45],x1:[42,45],x:[37,42,45],x_from_i:42,xdg_config_hom:23,xdg_data_hom:23,xheight:37,xlink:[35,36],xml:[1,9,10,18,22,25,26,27,29,34,37,38,39,40,42,52,57,61,62,63],xmllint:[38,40],xmllint_format:40,xmln:37,xmlschema:37,xresolut:34,xsd_mets_valid:[51,52,64],xsd_page_valid:[51,52,64],xsd_valid:[51,52,61,62,64],xsdmetsvalid:[52,61],xsdpagevalid:[52,62],xsdvalid:[52,61,62,63],xywh:[25,42,45],xywh_from_bbox:45,xywh_from_point:[42,45],xywh_from_polygon:45,xyxi:45,y0:[42,45],y0x0y1x1:42,y1:[42,45],y:[37,42,45],yet:25,yield:[25,36],yml:[23,27,52,56,59],yresolut:34,yxyx:45,yyyi:37,z:[10,37],zero:50,zindex:37,zip:[1,2,18,27,48,52,56],zip_input_fil:18},titles:["ocrd","ocrd package","ocrd.cli package","ocrd.cli.bashlib module","ocrd.cli.log module","ocrd.cli.ocrd_tool module","ocrd.cli.process module","ocrd.cli.resmgr module","ocrd.cli.validate module","ocrd.cli.workspace module","ocrd.cli.zip module","ocrd.constants module","ocrd.decorators package","ocrd.decorators.loglevel_option module","ocrd.decorators.mets_find_options module","ocrd.decorators.ocrd_cli_options module","ocrd.decorators.parameter_option module","ocrd.processor package","ocrd.processor.base module","ocrd.processor.builtin package","ocrd.processor.builtin.dummy_processor module","ocrd.processor.helpers module","ocrd.resolver module","ocrd.resource_manager module","ocrd.task_sequence module","ocrd.workspace module","ocrd.workspace_backup module","ocrd.workspace_bagger module","ocrd_modelfactory","ocrd_modelfactory package","ocrd_models","ocrd_models package","ocrd_models.constants module","ocrd_models.ocrd_agent module","ocrd_models.ocrd_exif module","ocrd_models.ocrd_file module","ocrd_models.ocrd_mets module","ocrd_models.ocrd_page module","ocrd_models.ocrd_xml_base module","ocrd_models.report module","ocrd_models.utils module","ocrd_utils","ocrd_utils package","ocrd_utils.constants module","ocrd_utils.deprecate module","ocrd_utils.image module","ocrd_utils.introspect module","ocrd_utils.logging module","ocrd_utils.os module","ocrd_utils.package_resources module","ocrd_utils.str module","ocrd_validators","ocrd_validators package","ocrd_validators.constants module","ocrd_validators.json_validator module","ocrd_validators.ocrd_tool_validator module","ocrd_validators.ocrd_zip_validator module","ocrd_validators.page_validator module","ocrd_validators.parameter_validator module","ocrd_validators.resource_list_validator module","ocrd_validators.workspace_validator module","ocrd_validators.xsd_mets_validator module","ocrd_validators.xsd_page_validator module","ocrd_validators.xsd_validator module","OCR-D/core"],titleterms:{add:9,avail:7,backup:9,bag:10,base:18,bashlib:3,builtin:[19,20],bulk:9,categori:5,cli:[2,3,4,5,6,7,8,9,10],clone:9,constant:[3,11,32,43,53],content:64,core:64,critic:4,d:64,debug:4,decor:[12,13,14,15,16],deprec:44,descript:5,download:7,dummy_processor:20,dump:5,error:4,file:[3,9],filenam:3,find:9,get:9,group:9,help:5,helper:21,id:9,imag:45,indic:64,info:4,init:9,input:3,instal:7,introspect:46,json:8,json_valid:54,list:[5,7,9],log:[4,47],loglevel_opt:13,merg:9,mets_find_opt:14,migrat:7,modul:[3,4,5,6,7,8,9,10,11,13,14,15,16,18,20,21,22,23,24,25,26,27,32,33,34,35,36,37,38,39,40,43,44,45,46,47,48,49,50,53,54,55,56,57,58,59,60,61,62,63],ocr:64,ocrd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],ocrd_ag:33,ocrd_cli_opt:15,ocrd_exif:34,ocrd_fil:35,ocrd_met:36,ocrd_model:[30,31,32,33,34,35,36,37,38,39,40],ocrd_modelfactori:[28,29],ocrd_pag:37,ocrd_tool:5,ocrd_tool_valid:55,ocrd_util:[41,42,43,44,45,46,47,48,49,50],ocrd_valid:[51,52,53,54,55,56,57,58,59,60,61,62,63],ocrd_xml_bas:38,ocrd_zip_valid:56,os:48,packag:[1,2,12,17,19,29,31,42,52],package_resourc:49,page:[8,9],page_valid:57,param:5,paramet:8,parameter_opt:16,parameter_valid:58,pars:5,process:6,processor:[17,18,19,20,21],prune:9,remov:9,renam:9,report:39,resmgr:7,resolv:22,resourc:5,resource_list_valid:59,resource_manag:23,restor:9,set:9,show:5,spill:10,step:5,str:50,submodul:[1,2,12,17,19,31,42,52],subpackag:[1,17],tabl:64,task:8,task_sequ:24,tool:[5,8],trace:4,undo:9,util:40,valid:[5,8,9,10],version:5,warn:4,workspac:[9,25],workspace_backup:26,workspace_bagg:27,workspace_valid:60,xsd_mets_valid:61,xsd_page_valid:62,xsd_valid:63,zip:10}}) \ No newline at end of file +Search.setIndex({"docnames": ["api/ocrd/modules", "api/ocrd/ocrd", "api/ocrd/ocrd.cli", "api/ocrd/ocrd.cli.bashlib", "api/ocrd/ocrd.cli.log", "api/ocrd/ocrd.cli.network", "api/ocrd/ocrd.cli.ocrd_tool", "api/ocrd/ocrd.cli.process", "api/ocrd/ocrd.cli.resmgr", "api/ocrd/ocrd.cli.validate", "api/ocrd/ocrd.cli.workspace", "api/ocrd/ocrd.cli.zip", "api/ocrd/ocrd.constants", "api/ocrd/ocrd.decorators", "api/ocrd/ocrd.decorators.loglevel_option", "api/ocrd/ocrd.decorators.mets_find_options", "api/ocrd/ocrd.decorators.ocrd_cli_options", "api/ocrd/ocrd.decorators.parameter_option", "api/ocrd/ocrd.mets_server", "api/ocrd/ocrd.processor", "api/ocrd/ocrd.processor.base", "api/ocrd/ocrd.processor.builtin", "api/ocrd/ocrd.processor.builtin.dummy", "api/ocrd/ocrd.processor.builtin.dummy_processor", "api/ocrd/ocrd.processor.helpers", "api/ocrd/ocrd.resolver", "api/ocrd/ocrd.resource_manager", "api/ocrd/ocrd.task_sequence", "api/ocrd/ocrd.workspace", "api/ocrd/ocrd.workspace_backup", "api/ocrd/ocrd.workspace_bagger", "api/ocrd_modelfactory/modules", "api/ocrd_modelfactory/ocrd_modelfactory", "api/ocrd_models/modules", "api/ocrd_models/ocrd_models", "api/ocrd_models/ocrd_models.constants", "api/ocrd_models/ocrd_models.ocrd_agent", "api/ocrd_models/ocrd_models.ocrd_exif", "api/ocrd_models/ocrd_models.ocrd_file", "api/ocrd_models/ocrd_models.ocrd_mets", "api/ocrd_models/ocrd_models.ocrd_page", "api/ocrd_models/ocrd_models.ocrd_xml_base", "api/ocrd_models/ocrd_models.report", "api/ocrd_models/ocrd_models.utils", "api/ocrd_network/modules", "api/ocrd_network/ocrd_network", "api/ocrd_network/ocrd_network.cli", "api/ocrd_network/ocrd_network.cli.client", "api/ocrd_network/ocrd_network.cli.processing_server", "api/ocrd_network/ocrd_network.cli.processing_worker", "api/ocrd_network/ocrd_network.cli.processor_server", "api/ocrd_network/ocrd_network.client", "api/ocrd_network/ocrd_network.database", "api/ocrd_network/ocrd_network.deployer", "api/ocrd_network/ocrd_network.deployment_utils", "api/ocrd_network/ocrd_network.logging", "api/ocrd_network/ocrd_network.models", "api/ocrd_network/ocrd_network.models.job", "api/ocrd_network/ocrd_network.models.messages", "api/ocrd_network/ocrd_network.models.ocrd_tool", "api/ocrd_network/ocrd_network.models.workspace", "api/ocrd_network/ocrd_network.param_validators", "api/ocrd_network/ocrd_network.process_helpers", "api/ocrd_network/ocrd_network.processing_server", "api/ocrd_network/ocrd_network.processing_worker", "api/ocrd_network/ocrd_network.processor_server", "api/ocrd_network/ocrd_network.rabbitmq_utils", "api/ocrd_network/ocrd_network.rabbitmq_utils.connector", "api/ocrd_network/ocrd_network.rabbitmq_utils.constants", "api/ocrd_network/ocrd_network.rabbitmq_utils.consumer", "api/ocrd_network/ocrd_network.rabbitmq_utils.ocrd_messages", "api/ocrd_network/ocrd_network.rabbitmq_utils.publisher", "api/ocrd_network/ocrd_network.runtime_data", "api/ocrd_network/ocrd_network.server_cache", "api/ocrd_network/ocrd_network.server_utils", "api/ocrd_network/ocrd_network.utils", "api/ocrd_utils/modules", "api/ocrd_utils/ocrd_utils", "api/ocrd_utils/ocrd_utils.config", "api/ocrd_utils/ocrd_utils.constants", "api/ocrd_utils/ocrd_utils.deprecate", "api/ocrd_utils/ocrd_utils.image", "api/ocrd_utils/ocrd_utils.introspect", "api/ocrd_utils/ocrd_utils.logging", "api/ocrd_utils/ocrd_utils.os", "api/ocrd_utils/ocrd_utils.str", "api/ocrd_validators/modules", "api/ocrd_validators/ocrd_validators", "api/ocrd_validators/ocrd_validators.constants", "api/ocrd_validators/ocrd_validators.json_validator", "api/ocrd_validators/ocrd_validators.ocrd_network_message_validator", "api/ocrd_validators/ocrd_validators.ocrd_tool_validator", "api/ocrd_validators/ocrd_validators.ocrd_zip_validator", "api/ocrd_validators/ocrd_validators.page_validator", "api/ocrd_validators/ocrd_validators.parameter_validator", "api/ocrd_validators/ocrd_validators.processing_server_config_validator", "api/ocrd_validators/ocrd_validators.resource_list_validator", "api/ocrd_validators/ocrd_validators.workspace_validator", "api/ocrd_validators/ocrd_validators.xsd_mets_validator", "api/ocrd_validators/ocrd_validators.xsd_page_validator", "api/ocrd_validators/ocrd_validators.xsd_validator", "index"], "filenames": ["api/ocrd/modules.rst", "api/ocrd/ocrd.rst", "api/ocrd/ocrd.cli.rst", "api/ocrd/ocrd.cli.bashlib.rst", "api/ocrd/ocrd.cli.log.rst", "api/ocrd/ocrd.cli.network.rst", "api/ocrd/ocrd.cli.ocrd_tool.rst", "api/ocrd/ocrd.cli.process.rst", "api/ocrd/ocrd.cli.resmgr.rst", "api/ocrd/ocrd.cli.validate.rst", "api/ocrd/ocrd.cli.workspace.rst", "api/ocrd/ocrd.cli.zip.rst", "api/ocrd/ocrd.constants.rst", "api/ocrd/ocrd.decorators.rst", "api/ocrd/ocrd.decorators.loglevel_option.rst", "api/ocrd/ocrd.decorators.mets_find_options.rst", "api/ocrd/ocrd.decorators.ocrd_cli_options.rst", "api/ocrd/ocrd.decorators.parameter_option.rst", "api/ocrd/ocrd.mets_server.rst", "api/ocrd/ocrd.processor.rst", "api/ocrd/ocrd.processor.base.rst", "api/ocrd/ocrd.processor.builtin.rst", "api/ocrd/ocrd.processor.builtin.dummy.rst", "api/ocrd/ocrd.processor.builtin.dummy_processor.rst", "api/ocrd/ocrd.processor.helpers.rst", "api/ocrd/ocrd.resolver.rst", "api/ocrd/ocrd.resource_manager.rst", "api/ocrd/ocrd.task_sequence.rst", "api/ocrd/ocrd.workspace.rst", "api/ocrd/ocrd.workspace_backup.rst", "api/ocrd/ocrd.workspace_bagger.rst", "api/ocrd_modelfactory/modules.rst", "api/ocrd_modelfactory/ocrd_modelfactory.rst", "api/ocrd_models/modules.rst", "api/ocrd_models/ocrd_models.rst", "api/ocrd_models/ocrd_models.constants.rst", "api/ocrd_models/ocrd_models.ocrd_agent.rst", "api/ocrd_models/ocrd_models.ocrd_exif.rst", "api/ocrd_models/ocrd_models.ocrd_file.rst", "api/ocrd_models/ocrd_models.ocrd_mets.rst", "api/ocrd_models/ocrd_models.ocrd_page.rst", "api/ocrd_models/ocrd_models.ocrd_xml_base.rst", "api/ocrd_models/ocrd_models.report.rst", "api/ocrd_models/ocrd_models.utils.rst", "api/ocrd_network/modules.rst", "api/ocrd_network/ocrd_network.rst", "api/ocrd_network/ocrd_network.cli.rst", "api/ocrd_network/ocrd_network.cli.client.rst", "api/ocrd_network/ocrd_network.cli.processing_server.rst", "api/ocrd_network/ocrd_network.cli.processing_worker.rst", "api/ocrd_network/ocrd_network.cli.processor_server.rst", "api/ocrd_network/ocrd_network.client.rst", "api/ocrd_network/ocrd_network.database.rst", "api/ocrd_network/ocrd_network.deployer.rst", "api/ocrd_network/ocrd_network.deployment_utils.rst", "api/ocrd_network/ocrd_network.logging.rst", "api/ocrd_network/ocrd_network.models.rst", "api/ocrd_network/ocrd_network.models.job.rst", "api/ocrd_network/ocrd_network.models.messages.rst", "api/ocrd_network/ocrd_network.models.ocrd_tool.rst", "api/ocrd_network/ocrd_network.models.workspace.rst", "api/ocrd_network/ocrd_network.param_validators.rst", "api/ocrd_network/ocrd_network.process_helpers.rst", "api/ocrd_network/ocrd_network.processing_server.rst", "api/ocrd_network/ocrd_network.processing_worker.rst", "api/ocrd_network/ocrd_network.processor_server.rst", "api/ocrd_network/ocrd_network.rabbitmq_utils.rst", "api/ocrd_network/ocrd_network.rabbitmq_utils.connector.rst", "api/ocrd_network/ocrd_network.rabbitmq_utils.constants.rst", "api/ocrd_network/ocrd_network.rabbitmq_utils.consumer.rst", "api/ocrd_network/ocrd_network.rabbitmq_utils.ocrd_messages.rst", "api/ocrd_network/ocrd_network.rabbitmq_utils.publisher.rst", "api/ocrd_network/ocrd_network.runtime_data.rst", "api/ocrd_network/ocrd_network.server_cache.rst", "api/ocrd_network/ocrd_network.server_utils.rst", "api/ocrd_network/ocrd_network.utils.rst", "api/ocrd_utils/modules.rst", "api/ocrd_utils/ocrd_utils.rst", "api/ocrd_utils/ocrd_utils.config.rst", "api/ocrd_utils/ocrd_utils.constants.rst", "api/ocrd_utils/ocrd_utils.deprecate.rst", "api/ocrd_utils/ocrd_utils.image.rst", "api/ocrd_utils/ocrd_utils.introspect.rst", "api/ocrd_utils/ocrd_utils.logging.rst", "api/ocrd_utils/ocrd_utils.os.rst", "api/ocrd_utils/ocrd_utils.str.rst", "api/ocrd_validators/modules.rst", "api/ocrd_validators/ocrd_validators.rst", "api/ocrd_validators/ocrd_validators.constants.rst", "api/ocrd_validators/ocrd_validators.json_validator.rst", "api/ocrd_validators/ocrd_validators.ocrd_network_message_validator.rst", "api/ocrd_validators/ocrd_validators.ocrd_tool_validator.rst", "api/ocrd_validators/ocrd_validators.ocrd_zip_validator.rst", "api/ocrd_validators/ocrd_validators.page_validator.rst", "api/ocrd_validators/ocrd_validators.parameter_validator.rst", "api/ocrd_validators/ocrd_validators.processing_server_config_validator.rst", "api/ocrd_validators/ocrd_validators.resource_list_validator.rst", "api/ocrd_validators/ocrd_validators.workspace_validator.rst", "api/ocrd_validators/ocrd_validators.xsd_mets_validator.rst", "api/ocrd_validators/ocrd_validators.xsd_page_validator.rst", "api/ocrd_validators/ocrd_validators.xsd_validator.rst", "index.rst"], "titles": ["ocrd", "ocrd package", "ocrd.cli package", "ocrd.cli.bashlib module", "ocrd.cli.log module", "ocrd.cli.network module", "ocrd.cli.ocrd_tool module", "ocrd.cli.process module", "ocrd.cli.resmgr module", "ocrd.cli.validate module", "ocrd.cli.workspace module", "ocrd.cli.zip module", "ocrd.constants module", "ocrd.decorators package", "ocrd.decorators.loglevel_option module", "ocrd.decorators.mets_find_options module", "ocrd.decorators.ocrd_cli_options module", "ocrd.decorators.parameter_option module", "ocrd.mets_server module", "ocrd.processor package", "ocrd.processor.base module", "ocrd.processor.builtin package", "ocrd.processor.builtin.dummy package", "ocrd.processor.builtin.dummy_processor module", "ocrd.processor.helpers module", "ocrd.resolver module", "ocrd.resource_manager module", "ocrd.task_sequence module", "ocrd.workspace module", "ocrd.workspace_backup module", "ocrd.workspace_bagger module", "ocrd_modelfactory", "ocrd_modelfactory package", "ocrd_models", "ocrd_models package", "ocrd_models.constants module", "ocrd_models.ocrd_agent module", "ocrd_models.ocrd_exif module", "ocrd_models.ocrd_file module", "ocrd_models.ocrd_mets module", "ocrd_models.ocrd_page module", "ocrd_models.ocrd_xml_base module", "ocrd_models.report module", "ocrd_models.utils module", "ocrd_network", "ocrd_network package", "ocrd_network.cli package", "ocrd_network.cli.client module", "ocrd_network.cli.processing_server module", "ocrd_network.cli.processing_worker module", "ocrd_network.cli.processor_server module", "ocrd_network.client module", "ocrd_network.database module", "ocrd_network.deployer module", "ocrd_network.deployment_utils module", "ocrd_network.logging module", "ocrd_network.models package", "ocrd_network.models.job module", "ocrd_network.models.messages module", "ocrd_network.models.ocrd_tool module", "ocrd_network.models.workspace module", "ocrd_network.param_validators module", "ocrd_network.process_helpers module", "ocrd_network.processing_server module", "ocrd_network.processing_worker module", "ocrd_network.processor_server module", "ocrd_network.rabbitmq_utils package", "ocrd_network.rabbitmq_utils.connector module", "ocrd_network.rabbitmq_utils.constants module", "ocrd_network.rabbitmq_utils.consumer module", "ocrd_network.rabbitmq_utils.ocrd_messages module", "ocrd_network.rabbitmq_utils.publisher module", "ocrd_network.runtime_data module", "ocrd_network.server_cache module", "ocrd_network.server_utils module", "ocrd_network.utils module", "ocrd_utils", "ocrd_utils package", "ocrd_utils.config module", "ocrd_utils.constants module", "ocrd_utils.deprecate module", "ocrd_utils.image module", "ocrd_utils.introspect module", "ocrd_utils.logging module", "ocrd_utils.os module", "ocrd_utils.str module", "ocrd_validators", "ocrd_validators package", "ocrd_validators.constants module", "ocrd_validators.json_validator module", "ocrd_validators.ocrd_network_message_validator module", "ocrd_validators.ocrd_tool_validator module", "ocrd_validators.ocrd_zip_validator module", "ocrd_validators.page_validator module", "ocrd_validators.parameter_validator module", "ocrd_validators.processing_server_config_validator module", "ocrd_validators.resource_list_validator module", "ocrd_validators.workspace_validator module", "ocrd_validators.xsd_mets_validator module", "ocrd_validators.xsd_page_validator module", "ocrd_validators.xsd_validator module", "OCR-D/core"], "terms": {"packag": [0, 31, 33, 44, 76, 78, 86, 101], "subpackag": [0, 44, 101], "cli": [0, 1, 16, 20, 23, 24, 44, 45, 83, 87, 91, 101], "submodul": [0, 33, 44, 76, 86, 101], "decor": [0, 1, 77, 101], "ocrd_cli_wrap_processor": [0, 1, 13, 101], "check_and_run_network_ag": [0, 1, 13, 101], "processor": [0, 1, 2, 3, 4, 6, 8, 26, 28, 52, 53, 54, 56, 57, 60, 63, 64, 83, 84, 85, 87, 91, 95, 96, 97, 101], "constant": [0, 1, 2, 25, 33, 34, 45, 66, 76, 77, 82, 86, 87, 101], "modul": [0, 1, 2, 13, 19, 21, 33, 34, 44, 45, 46, 56, 66, 76, 77, 86, 87, 101], "mets_serv": [0, 1, 36, 38, 101], "ocrdfilemodel": [0, 1, 18, 101], "ocrdagentmodel": [0, 1, 18, 101], "ocrdfilelistmodel": [0, 1, 18, 101], "ocrdfilegrouplistmodel": [0, 1, 18, 101], "ocrdagentlistmodel": [0, 1, 18, 101], "clientsideocrdmet": [0, 1, 18, 101], "ocrdmetsserv": [0, 1, 18, 36, 38, 101], "resolv": [0, 1, 20, 23, 24, 28, 30, 87, 92, 97, 101], "resource_manag": [0, 1, 101], "ocrdresourcemanag": [0, 1, 26, 101], "task_sequ": [0, 1, 101], "processortask": [0, 1, 27, 63, 101], "validate_task": [0, 1, 27, 101], "run_task": [0, 1, 27, 101], "workspac": [0, 1, 2, 3, 9, 11, 18, 20, 23, 24, 25, 27, 29, 30, 32, 38, 42, 45, 52, 56, 75, 77, 87, 92, 97, 101], "workspace_backup": [0, 1, 101], "workspacebackup": [0, 1, 29, 101], "workspacebackupmanag": [0, 1, 29, 101], "workspace_bagg": [0, 1, 101], "workspacebagg": [0, 1, 30, 101], "ocr": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 23, 25, 30, 34, 40, 53, 56, 60, 63, 64, 78, 83, 87, 91, 92, 93, 95], "d": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 23, 25, 29, 30, 53, 56, 60, 63, 64, 78, 83, 87, 91, 92, 93, 95], "refer": [1, 10, 28, 39, 40, 75, 87, 91, 93, 97], "implement": [1, 16, 20, 24, 75, 80], "base": [1, 4, 6, 10, 11, 18, 19, 23, 25, 26, 27, 28, 29, 30, 36, 37, 38, 39, 40, 41, 42, 51, 53, 54, 56, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 77, 78, 85, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], "class": [1, 4, 6, 10, 18, 20, 23, 24, 25, 26, 27, 28, 29, 30, 36, 37, 38, 39, 40, 41, 42, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 78, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], "relat": [1, 2, 40, 77, 87], "depend": [1, 25, 93], "ocrd_util": [1, 3, 101], "contain": [1, 9, 10, 11, 20, 23, 28, 30, 38, 39, 40, 42, 78, 85, 87, 91, 93, 97], "util": [1, 16, 33, 34, 44, 45, 77, 82, 85, 101], "e": [1, 2, 8, 10, 20, 24, 25, 28, 30, 32, 37, 40, 77, 81, 83, 87, 91, 92], "g": [1, 3, 5, 7, 9, 10, 28, 37, 40, 81, 87, 91], "log": [1, 2, 3, 7, 14, 44, 45, 76, 77, 101], "path": [1, 2, 3, 5, 6, 8, 10, 18, 20, 23, 25, 28, 30, 32, 38, 39, 40, 52, 53, 55, 56, 57, 58, 77, 84, 85, 87, 91, 92, 93, 95], "normal": [1, 4], "coordin": [1, 10, 28, 40, 77, 81, 87, 93, 97], "calcul": [1, 75, 81], "etc": [1, 77, 83], "ocrd_model": [1, 3, 18, 20, 28, 32, 85, 87, 93, 97, 101], "file": [1, 2, 5, 6, 8, 9, 11, 18, 20, 23, 24, 25, 26, 28, 30, 32, 34, 38, 39, 40, 52, 56, 60, 63, 64, 67, 69, 71, 83, 84, 85, 87, 91, 92, 93, 95, 96, 97], "format": [1, 3, 5, 28, 34, 40, 41, 61, 87, 91, 95], "wrapper": [1, 64, 83], "page": [1, 2, 3, 5, 7, 20, 23, 28, 32, 38, 39, 40, 77, 81, 85, 87, 93, 97, 101], "xml": [1, 10, 11, 20, 23, 25, 28, 29, 30, 32, 37, 40, 41, 42, 43, 56, 57, 58, 77, 84, 87, 93, 97, 98, 99, 100], "met": [1, 2, 3, 5, 7, 9, 10, 11, 13, 18, 20, 23, 24, 25, 27, 28, 29, 30, 36, 38, 39, 43, 52, 56, 57, 58, 60, 87, 93, 97], "exif": [1, 28], "metadata": [1, 28, 32, 37, 40], "ocrd_modelfactori": [1, 101], "code": [1, 40, 67, 69, 71, 78, 82, 83], "instanti": [1, 3, 20, 23, 24, 28, 39, 93], "model": [1, 2, 18, 20, 26, 32, 40, 44, 45, 52, 87, 91], "from": [1, 3, 5, 8, 10, 16, 18, 20, 23, 25, 28, 30, 32, 39, 40, 41, 43, 52, 53, 56, 57, 58, 59, 60, 61, 67, 69, 71, 81, 82, 83, 85, 87, 93, 94], "exist": [1, 3, 7, 8, 10, 11, 25, 28, 39, 81, 83, 85], "data": [1, 2, 8, 10, 11, 18, 20, 25, 30, 32, 40, 43, 53, 56, 57, 58, 59, 60, 63, 73, 82, 87, 91], "ocrd_valid": [1, 101], "schema": [1, 34, 40, 87, 89, 90, 91, 94, 95, 96, 98, 99, 100], "routin": 1, "valid": [1, 2, 18, 20, 23, 27, 30, 40, 42, 43, 56, 57, 58, 59, 60, 78, 86, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101], "bagit": [1, 11, 30, 56, 60, 87, 92], "tool": [1, 2, 20, 23, 24, 63, 84, 87, 91, 94], "json": [1, 2, 3, 5, 6, 8, 10, 20, 23, 24, 30, 63, 85, 87, 89, 91, 92, 94, 95], "paramet": [1, 2, 3, 5, 6, 10, 20, 23, 24, 25, 27, 28, 30, 32, 36, 37, 38, 39, 40, 41, 43, 45, 52, 53, 56, 57, 58, 59, 61, 62, 66, 70, 75, 78, 83, 84, 85, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], "bashlib": [1, 2, 4], "logctx": [1, 2, 4], "network": [1, 2, 10, 25, 87, 90], "ocrd_tool": [1, 2, 9, 20, 23, 24, 45, 56, 64, 74, 84, 87, 94], "ocrdtoolctx": [1, 2, 6], "process": [1, 2, 3, 9, 11, 19, 20, 21, 23, 30, 52, 53, 54, 56, 60, 63, 64, 75, 83, 87, 92, 95, 97], "resmgr": [1, 2], "print_resourc": [1, 2, 8], "workspacectx": [1, 2, 10], "zip": [1, 2, 20, 30, 84, 87, 92], "loglevel_opt": [1, 13], "ocrd_loglevel": [1, 13, 14], "mets_find_opt": [1, 13], "ocrd_cli_opt": [1, 13], "parameter_opt": [1, 13], "parameter_override_opt": [1, 13, 17], "builtin": [1, 19], "generate_processor_help": [1, 19, 20, 24], "run_cli": [1, 19, 20, 24], "run_processor": [1, 19, 20, 24], "helper": [1, 19, 20], "file_grp": [1, 10, 18, 28], "file_id": [1, 10, 18, 28, 93], "mimetyp": [1, 3, 10, 18, 20, 28, 32, 34, 38, 39], "page_id": [1, 3, 5, 7, 9, 10, 18, 20, 23, 24, 27, 28, 45, 56, 57, 60, 62, 63, 66, 70, 73, 74, 87, 97], "url": [1, 3, 5, 8, 10, 18, 25, 26, 28, 32, 34, 38, 39, 53, 84, 85, 87, 91, 96, 97], "local_filenam": [1, 10, 18, 34, 38, 39], "creat": [1, 2, 10, 11, 18, 20, 23, 24, 25, 28, 29, 30, 32, 38, 39, 40, 42, 52, 56, 57, 58, 59, 60, 63, 64, 81, 83], "name": [1, 3, 4, 5, 8, 10, 18, 20, 23, 24, 25, 26, 28, 30, 32, 34, 36, 38, 40, 45, 53, 56, 60, 61, 63, 78, 82, 83, 85, 87, 91, 95, 96], "type": [1, 5, 8, 10, 18, 20, 28, 34, 36, 37, 39, 40, 53, 54, 56, 60, 61, 84, 87, 91, 95, 96], "role": [1, 18, 34, 36, 40], "otherrol": [1, 18, 34, 36], "othertyp": [1, 18, 34, 36], "note": [1, 18, 25, 34, 36, 75, 85], "file_group": [1, 18, 34, 39], "agent": [1, 5, 18, 34, 36, 39, 53, 63], "workspace_path": [1, 18], "reload": [1, 18, 28], "find_fil": [1, 18, 28, 34, 39], "find_all_fil": [1, 18, 34, 39], "add_ag": [1, 18, 34, 39], "unique_identifi": [1, 18, 34, 39], "add_fil": [1, 18, 28, 34, 39, 85], "save": [1, 10, 18, 20, 24, 28, 56, 60], "stop": [1, 2, 18], "shutdown": [1, 18, 53, 65], "startup": [1, 18], "download_to_directori": [1, 25], "workspace_from_url": [1, 20, 24, 25], "workspace_from_noth": [1, 25], "resolve_mets_argu": [1, 25], "userdir": [1, 26], "xdg_data_hom": [1, 2, 26], "xdg_config_hom": [1, 2, 26], "save_user_list": [1, 26], "load_resource_list": [1, 26], "list_avail": [1, 26], "list_instal": [1, 26], "add_to_user_databas": [1, 26], "default_resource_dir": [1, 26], "location_to_resource_dir": [1, 26], "resource_dir_to_loc": [1, 26], "parameter_usag": [1, 26, 87, 91, 96], "download": [1, 2, 10, 25, 26, 28, 87, 97], "pars": [1, 2, 18, 20, 23, 27, 33, 34, 40, 56, 57, 58, 59, 60, 85, 87, 94, 101], "ocrd_tool_json": [1, 27], "reload_met": [1, 28], "merg": [1, 2, 28, 34, 39, 42], "download_url": [1, 28], "download_fil": [1, 28], "remove_fil": [1, 28, 34, 39], "remove_file_group": [1, 28, 34, 39], "rename_file_group": [1, 28, 34, 39], "save_met": [1, 28], "resolve_image_exif": [1, 28], "resolve_image_as_pil": [1, 28], "image_from_pag": [1, 28, 77], "image_from_seg": [1, 28, 77], "save_image_fil": [1, 28], "from_path": [1, 29], "restor": [1, 2, 29], "add": [1, 2, 11, 14, 20, 26, 28, 29, 39, 40, 42, 77, 78, 81, 89, 93], "list": [1, 2, 3, 18, 20, 23, 26, 28, 29, 30, 39, 40, 52, 53, 56, 57, 59, 62, 63, 66, 70, 73, 74, 75, 77, 81, 84, 87, 91, 93, 95, 97], "undo": [1, 2, 29], "bag": [1, 2, 30, 56, 60, 87, 92], "spill": [1, 2, 30], "recreate_checksum": [1, 30], "command": [2, 3, 4, 5, 6, 8, 9, 10, 11, 16, 20, 24, 53, 61, 78], "line": [2, 3, 20, 24, 40, 61, 77, 78, 85, 87, 91], "interfac": [2, 10, 20, 28, 36, 38], "entri": [2, 10, 26, 28, 38, 39, 43, 52, 85], "point": [2, 10, 37, 38, 40, 77, 81, 93], "multi": [2, 9, 10, 20, 87, 97], "purpos": 2, "option": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 20, 23, 28, 39, 40, 56, 60, 85, 87, 95], "arg": [2, 3, 4, 5, 6, 8, 9, 10, 11, 18, 23, 28, 39, 56, 57, 60, 78, 83, 85, 87, 94, 97], "version": [2, 10, 11, 13, 20, 23, 28, 29, 30, 38, 43, 56, 60, 77, 87, 91, 96], "show": [2, 8], "exit": [2, 20, 23], "l": [2, 3, 7, 8, 10, 37], "level": [2, 3, 7, 8, 9, 10, 14, 20, 28, 40, 42, 64, 77, 83, 87, 93, 97], "log_level": [2, 3, 7, 20, 24, 27], "off": [2, 3, 7, 9, 10, 87, 93, 97], "error": [2, 3, 7, 20, 28, 39, 42, 93], "warn": [2, 3, 7, 20, 24, 42], "info": [2, 3, 7, 11, 30, 56, 60], "debug": [2, 3, 7], "trace": [2, 3, 7], "variabl": [2, 4, 6, 10, 78, 82], "search": [2, 20, 23, 28, 39, 83, 101], "execut": [2, 8, 9, 20, 24, 26, 27, 45, 53, 56, 57, 59, 62, 63, 83, 84, 87, 91], "affect": 2, "home": [2, 83], "directori": [2, 3, 8, 9, 10, 11, 20, 23, 25, 28, 29, 30, 84, 87, 91, 92, 96, 97], "look": [2, 8, 10, 25, 39, 40], "ocrd_log": [2, 83], "conf": [2, 40], "fallback": [2, 6, 84], "unset": [2, 25], "xdg": 2, "default": [2, 4, 6, 8, 10, 11, 20, 25, 28, 40, 78, 81, 83, 85, 87, 89, 91, 95, 96], "kba": 2, "resourc": [2, 8, 20, 23, 26, 40, 84, 87, 91, 96], "i": [2, 3, 4, 5, 8, 10, 11, 20, 23, 24, 25, 26, 28, 30, 32, 37, 39, 40, 43, 52, 53, 56, 60, 61, 63, 64, 67, 69, 71, 77, 78, 81, 83, 84, 85, 87, 91, 92, 93, 95, 96, 97], "locat": [2, 8, 10, 11, 25, 26, 87, 91, 96], "config": [2, 45, 56, 57, 58, 63, 72, 76, 77, 83, 87, 95, 101], "yml": [2, 26, 30, 87, 92, 95, 96], "user": [2, 5, 26, 39, 40, 64, 87, 91], "databas": [2, 5, 13, 26, 44, 45, 53, 56, 57, 60, 61, 63, 87, 95], "local": [2, 10, 20, 24, 25, 28, 32, 38, 39, 85], "share": [2, 77], "ocrd_download_retri": 2, "number": [2, 11, 20, 25, 30, 40, 85, 87, 91, 92, 95, 96], "time": [2, 20, 25, 40], "retri": [2, 25], "fail": [2, 10, 45, 56, 57, 61], "attempt": [2, 25], "ocrd_download_timeout": 2, "timeout": [2, 25], "second": [2, 10, 25, 40, 78], "connect": [2, 25, 40, 63, 66, 67, 75, 87, 95], "read": [2, 10, 20, 25, 32, 40, 56, 60, 83, 93], "comma": [2, 20, 23, 28, 85], "separ": [2, 20, 23, 28, 40, 85], "when": [2, 4, 9, 10, 11, 28, 40, 61, 77, 83, 87, 91], "ocrd_mets_cach": 2, "If": [2, 8, 9, 10, 20, 23, 24, 25, 28, 39, 40, 53, 56, 60, 61, 85, 87, 91, 93], "set": [2, 8, 14, 20, 23, 24, 25, 28, 30, 39, 40, 45, 52, 56, 57, 60, 77, 81, 83, 87, 89, 91, 93, 95], "true": [2, 10, 20, 23, 24, 26, 28, 40, 43, 56, 57, 63, 64, 78, 81, 83, 84, 87, 93, 95], "access": [2, 25, 82], "cach": [2, 38, 39, 45, 56, 57, 82, 87, 91], "speed": 2, "memori": 2, "modif": 2, "ocrd_max_processor_cach": 2, "maximum": [2, 87, 91, 95], "instanc": [2, 28, 40, 53, 64, 86, 87, 93, 95, 100, 101], "each": [2, 3, 8, 9, 10, 20, 39, 40, 53, 64, 87, 93, 97], "kept": 2, "includ": [2, 20, 23, 24, 40, 77, 87, 91], "load": [2, 28, 41], "worker": [2, 20, 23, 53, 54, 56, 57, 60, 63, 64, 87, 95], "server": [2, 18, 20, 23, 25, 52, 53, 54, 56, 60, 61, 63, 64, 87, 95], "128": 2, "ocrd_network_server_addr_process": 2, "address": [2, 5, 13, 51, 54, 61, 87, 95], "client": [2, 44, 45, 46], "ocrd_network_server_addr_workflow": 2, "workflow": [2, 7, 20, 56, 57, 63], "ocrd_network_server_addr_workspac": 2, "ocrd_network_worker_queue_connect_attempt": 2, "its": [2, 3, 8, 10, 11, 20, 23, 25, 28, 32, 40, 61, 81, 83, 87, 93, 97], "queue": [2, 5, 13, 53, 61, 63, 64, 87, 95], "helpful": 2, "rabbitmq": [2, 5, 53, 67, 69, 71], "need": [2, 20, 23, 28, 30, 52, 78, 84, 85], "fulli": [2, 9, 28, 87, 93, 97], "start": [2, 5, 28, 32, 39, 40, 45, 53, 63, 75, 85], "3": [2, 40, 64, 93], "ocrd_profile_fil": 2, "cpu": 2, "profil": [2, 13, 30, 56, 60, 87, 92], "written": 2, "thi": [2, 8, 10, 20, 23, 24, 25, 28, 30, 36, 38, 39, 40, 42, 52, 56, 57, 61, 64, 67, 69, 71, 77, 78, 81, 82, 83, 85, 87, 91, 96], "later": 2, "perus": 2, "analysi": [2, 87, 91], "like": [2, 20, 24, 25, 39, 40, 43, 52, 85, 87, 91, 96, 97], "snakeviz": 2, "ocrd_profil": 2, "whether": [2, 8, 9, 10, 11, 25, 28, 30, 32, 39, 40, 42, 78, 83, 85, 87, 91, 92, 93, 97], "enabl": 2, "gather": 2, "runtim": [2, 20, 23], "statist": 2, "logger": [2, 4, 74, 75, 83], "yield": [2, 28, 39], "wall": 2, "rss": 2, "also": [2, 10, 11, 20, 25, 28, 30, 39, 40, 56, 60, 61], "peak": 2, "resid": 2, "size": [2, 29, 40, 81, 84, 87, 91, 96], "pss": 2, "proport": [2, 40, 81], "ocrd_network_sockets_root_dir": 2, "The": [2, 3, 5, 10, 20, 23, 25, 28, 38, 39, 40, 52, 53, 56, 57, 61, 63, 67, 69, 71, 81, 85, 87, 91, 95], "root": [2, 30, 40, 83], "where": [2, 4, 8, 20, 28, 30, 40, 52, 77, 87, 95], "all": [2, 8, 9, 10, 11, 20, 23, 25, 28, 29, 37, 39, 40, 41, 53, 77, 81, 83, 84, 85, 87, 91, 92, 93, 96], "socket": 2, "ar": [2, 9, 10, 20, 39, 40, 52, 53, 56, 60, 61, 63, 75, 77, 84, 85, 87, 91, 93, 97], "tmp": 2, "ocrd_network_socket": 2, "ocrd_network_logs_root_dir": 2, "ocrd_network": 2, "store": [2, 8, 28, 30, 52, 56, 60, 63, 87, 91, 96], "ocrd_network_log": 2, "ocrd_logging_debug": 2, "print": [2, 3, 16, 20, 23, 40, 41, 43, 83], "inform": [2, 20, 23, 28, 40, 52, 56, 57, 60, 87, 95], "about": [2, 20, 28, 37, 42, 52, 81, 87, 95], "setup": [2, 20, 23, 83], "stderr": [2, 83], "fals": [2, 13, 20, 24, 25, 26, 27, 28, 29, 30, 32, 39, 40, 41, 53, 56, 57, 60, 63, 66, 67, 69, 71, 78, 81, 83, 84, 87, 91, 92, 95, 96, 97], "work": [2, 3, 6, 28], "bash": [2, 3], "librari": [2, 3, 83], "manag": [2, 5, 6, 8, 10, 11, 25, 26, 29], "compon": [2, 5, 40, 84, 87, 91, 96], "json_fil": [2, 6], "seri": [2, 7], "task": [2, 5, 7, 27, 63], "one": [2, 3, 9, 10, 28, 40, 42, 83, 87, 93, 95], "filenam": [2, 6, 10, 20, 25, 28, 38, 39, 40, 41, 84, 85, 87, 93], "input": [2, 5, 18, 20, 23, 56, 57, 58, 59, 60, 61, 85, 87, 91], "critic": 2, "discoveri": 2, "categori": [2, 45, 56, 59, 87, 91], "descript": [2, 20, 23, 40, 45, 56, 57, 59, 61, 78, 84, 87, 91, 93, 95, 96], "dump": [2, 3, 8], "help": [2, 10, 13, 20, 23], "param": [2, 20, 24, 39, 61], "step": [2, 20, 45, 56, 59, 87, 91], "avail": [2, 20, 26, 28, 52, 75], "instal": [2, 20, 23, 26], "migrat": 2, "backup": [2, 29], "bulk": 2, "clone": [2, 20, 24, 25], "find": [2, 20, 23, 39, 53], "get": [2, 8, 28, 36, 38, 39, 40, 81, 83, 84, 93], "id": [2, 3, 5, 7, 9, 11, 20, 23, 28, 34, 38, 39, 40, 56, 57, 60, 75, 85, 87, 93, 95], "init": 2, "group": [2, 3, 20, 23, 28, 39, 40, 52, 93], "prune": 2, "remov": [2, 3, 7, 28, 38, 39, 40, 53, 81, 83, 85], "renam": [2, 8, 28, 39], "updat": [2, 8, 20, 24, 73], "queri": [3, 18, 39, 52], "argument": [3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 20, 23, 25, 28, 32, 36, 38, 39, 56, 57, 58, 59, 60, 61, 66, 67, 78, 80, 83], "requir": [3, 5, 6, 7, 8, 9, 10, 11, 20, 28, 40, 56, 57, 58, 64, 87, 91, 95, 96], "sourc": [3, 4, 6, 8, 10, 13, 14, 15, 16, 18, 20, 23, 24, 25, 26, 27, 28, 29, 30, 32, 36, 37, 38, 39, 40, 41, 42, 43, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 78, 80, 81, 82, 83, 84, 85, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], "shell": [3, 6, 10], "script": [3, 40], "For": [3, 10, 20, 39, 40, 83, 85, 87, 91, 93], "function": [3, 18, 20, 23, 24, 28, 30, 39, 53, 77, 78, 82, 83, 84, 85, 87, 91], "export": [3, 34, 40, 77], "see": [3, 10, 20, 28, 30, 37, 39, 81, 84, 87, 91, 92, 96], "readm": 3, "md": 3, "given": [3, 8, 10, 11, 20, 23, 25, 28, 40, 81, 93], "Then": 3, "loop": 3, "through": [3, 39, 56, 60, 63, 64], "filegrp": [3, 10, 20, 23, 25, 28, 34, 38, 39, 56, 60, 85, 87, 91], "pageid": [3, 10, 34, 38, 39, 85], "well": [3, 10, 61, 81], "recommend": 3, "outputfileid": 3, "make_file_id": [3, 76, 77, 85, 101], "associ": [3, 28], "arrai": [3, 28, 81, 87, 91, 95, 96], "initi": 3, "per": [3, 20, 40], "m": [3, 5, 7, 9, 10, 11], "w": [3, 37, 77], "dir": [3, 8, 11, 87, 92], "working_dir": [3, 13, 20, 24], "grp": [3, 5, 10, 85], "input_file_grp": [3, 5, 20, 23, 24, 27, 45, 56, 57, 59, 62, 66, 70, 87, 91, 97], "": [3, 4, 5, 6, 7, 8, 9, 10, 11, 20, 23, 24, 28, 38, 39, 40, 56, 60, 63, 85, 87, 93, 97], "us": [3, 4, 8, 9, 10, 20, 23, 24, 25, 28, 30, 38, 39, 40, 52, 56, 60, 61, 73, 75, 77, 78, 81, 82, 83, 85, 87, 91, 92, 93, 96], "o": [3, 5, 8, 11, 38, 76, 77, 101], "output": [3, 5, 6, 7, 9, 10, 11, 20, 23, 24, 56, 57, 60, 83, 85, 87, 91], "output_file_grp": [3, 5, 20, 23, 24, 27, 45, 56, 57, 59, 62, 66, 70, 73, 85, 87, 91, 97], "overwrit": [3, 7, 8, 9, 10, 11, 13, 20, 24, 25, 26, 27, 28, 30, 39], "imag": [3, 7, 20, 28, 32, 37, 40, 53, 64, 76, 77, 87, 91, 101], "thei": [3, 7, 20, 40, 63, 77], "alreadi": [3, 7, 10, 25, 28, 39, 61, 81], "p": [3, 5, 6, 8, 10], "either": [3, 5, 6, 10, 11, 20, 28, 32, 37, 39, 41, 83, 85], "string": [3, 5, 6, 10, 20, 23, 24, 25, 28, 30, 36, 37, 38, 39, 40, 41, 43, 61, 77, 78, 81, 82, 83, 85, 87, 91, 92, 93, 95, 96, 97], "overrid": [3, 6, 40, 83], "parameter_overrid": [3, 6, 20, 24], "ocrd_tool_nam": 4, "n": [4, 8, 10, 40, 85, 87, 91], "logger_nam": 4, "log_cli": 4, "environ": [4, 10, 78], "provid": [4, 10, 18, 36, 38, 40, 52, 53, 63, 87, 91], "messag": [4, 42, 45, 56, 61, 63, 66, 71, 87, 90, 95], "msg": [4, 42, 80, 85], "object": [4, 6, 10, 18, 20, 24, 25, 26, 27, 28, 29, 30, 36, 37, 38, 39, 40, 41, 42, 51, 53, 56, 57, 58, 60, 64, 66, 67, 70, 72, 73, 77, 78, 81, 85, 87, 89, 91, 92, 93, 95, 96, 97, 100], "lvl": [4, 83], "kwarg": [4, 13, 18, 23, 28, 39, 52, 77, 78, 80, 83, 87, 94, 97], "A": [5, 10, 20, 28, 40, 52, 73, 87, 91, 95, 96], "interact": 5, "mimic": 5, "webapi": [5, 63, 75], "endpoint": [5, 63], "processor_nam": [5, 45, 51, 53, 55, 56, 57, 63, 64, 65, 66, 70, 72, 74], "result": [5, 10, 25, 28, 30, 39, 56, 58, 75, 81, 93], "result_queue_nam": [5, 45, 56, 57, 66, 70], "callback": [5, 39], "callback_url": [5, 45, 56, 57, 66, 70, 75], "agent_typ": [5, 45, 56, 57, 63], "proxi": 5, "between": [5, 10, 25, 40, 75, 77], "path_to_config": 5, "host": [5, 10, 53, 54, 61, 63, 65, 66, 67, 69, 71, 72, 87, 95], "port": [5, 54, 61, 63, 65, 66, 67, 69, 71, 72, 87, 95], "specif": [5, 10, 83, 85], "consum": [5, 28, 45, 66, 81], "q": 5, "amqp": 5, "usernam": [5, 54, 66, 69, 71, 87, 95], "password": [5, 54, 66, 69, 71, 87, 95], "vhost": [5, 54, 66, 67, 69, 71], "mongodb": [5, 53, 87, 95], "standalon": 5, "rest": 5, "api": [5, 34, 36, 38, 39, 40, 87, 93, 95], "singl": [6, 20, 38, 39, 40, 64], "tool_nam": 6, "describ": [6, 20, 24, 77, 78, 81, 87, 91], "gener": [6, 20, 24, 28, 30, 32, 40, 75, 85], "subcommand": [6, 10, 13, 20, 23, 24], "eval": 6, "abl": 6, "assign": [6, 40], "var": 6, "j": [6, 11], "instead": [6, 10, 20, 23, 53], "res_nam": 6, "an": [6, 9, 10, 11, 14, 20, 24, 25, 28, 30, 32, 39, 40, 42, 43, 52, 53, 56, 57, 60, 77, 78, 81, 85, 87, 89, 91, 92, 93, 94, 95, 98, 99, 100], "run": [7, 9, 10, 20, 23, 24, 40, 45, 52, 53, 56, 57, 63, 87, 97], "sequenc": [7, 9], "made": 8, "copi": [8, 10, 23, 25, 28], "asterisk": 8, "known": 8, "regist": 8, "ani": [8, 10, 20, 24, 28, 38, 40, 66, 67, 69, 70, 78, 81, 83], "accept": [8, 39, 61], "regardless": [8, 28], "can": [8, 10, 20, 23, 25, 28, 39, 40, 52, 56, 60, 63, 77, 78, 81, 83, 85, 87, 91], "unknown": [8, 40, 93], "replac": [8, 10, 28, 30, 77, 85], "archiv": [8, 84, 87, 91, 96], "unpack": [8, 11, 30, 87, 92], "after": [8, 10, 11, 20, 24, 28, 39, 40, 52, 81, 85, 87, 92], "subsequ": [8, 81], "any_url": 8, "unregist": 8, "dynam": [8, 26], "skip": [8, 10, 11, 20, 25, 87, 92, 97], "t": [8, 10, 11, 77, 83, 87, 91], "resource_typ": [8, 26], "path_in_arch": [8, 26, 87, 91, 96], "extract": [8, 28, 43, 81, 84], "case": [8, 10, 20, 40, 43], "allow": [8, 40, 53, 84, 87, 91], "uninstal": 8, "first": [8, 9, 10, 20, 28, 40, 43, 78, 87, 93], "resource_loc": [8, 87, 91], "final": [8, 20, 24, 81], "cwd": [8, 87, 91], "system": [8, 10, 77, 81, 84, 87, 91], "exec": 8, "onli": [8, 9, 20, 23, 28, 39, 40, 52, 53, 64, 83, 87, 93], "begin": 8, "configur": [8, 53, 64, 83, 87, 95], "core": [8, 25, 83], "2": [8, 54, 77, 78, 80, 87, 92], "37": 8, "0": [8, 28, 40, 43, 66, 67, 77, 81, 87, 91, 93, 95, 96], "reslist": 8, "syntax": [9, 77, 87, 91, 96], "against": [9, 10, 39, 40, 87, 89, 90, 91, 94, 95, 96, 97, 98, 99, 100], "convent": [9, 40, 83], "textequiv": [9, 10, 40, 87, 93, 97], "consist": [9, 10, 20, 85, 87, 93, 97], "page_textequiv_consist": [9, 10, 87, 93], "how": [9, 10, 80, 87, 91, 96, 97], "strict": [9, 10, 30, 87, 93, 97], "check": [9, 10, 11, 25, 40, 75, 84, 87, 92, 93, 97], "lax": [9, 10, 87, 93, 97], "fix": [9, 10, 20, 39, 40, 87, 91, 93, 97], "strategi": [9, 93], "page_textequiv_strategi": [9, 87, 93], "determin": [9, 40, 84], "correct": [9, 40, 61, 77, 87, 91], "baselin": [9, 10, 40, 87, 93, 97], "must": [9, 11, 20, 40, 61, 81, 87, 91, 93], "within": [9, 25, 40, 81, 85, 87, 91, 93, 97], "textlin": [9, 40, 87, 93, 97], "coord": [9, 28, 40, 87, 93, 97], "region": [9, 28, 40, 77, 87, 91, 93, 97], "word": [9, 40, 77, 87, 91, 93, 97], "glyph": [9, 40, 77, 87, 93, 97], "border": [9, 28, 40, 87, 93, 97], "resp": [9, 87, 93], "param_json": 9, "definit": [9, 40], "passabl": 9, "omit": [9, 11, 40, 87, 92, 97], "basenam": [9, 10, 11, 25, 28, 34, 38, 85], "mets_basenam": [9, 10, 11, 25, 28], "conjunct": 9, "concret": 9, "simul": 9, "rang": [9, 39, 40, 87, 91, 96], "compris": 10, "oper": [10, 28, 39, 65, 77, 84], "directli": [10, 87, 93], "via": [10, 18, 20, 25, 28, 39, 40, 53, 78], "some": [10, 67, 69, 71, 73, 78], "prior": 10, "workspace_dir": 10, "chang": [10, 20, 39, 40, 83, 87, 91], "folder": [10, 11, 28, 30], "mets_url": [10, 16, 20, 24, 25, 28, 87, 97], "deprec": [10, 28, 38, 76, 77, 101], "u": 10, "mets_server_url": [10, 13, 20, 24, 25, 28, 45, 53, 56, 60, 62, 75], "tcp": 10, "whenev": [10, 20, 81], "http": [10, 18, 20, 25, 30, 40, 64, 75, 80, 87, 92, 93, 95], "fname": 10, "try": [10, 25, 83], "media": [10, 84, 87, 91], "guess": [10, 84], "extens": [10, 28, 34, 38, 40, 87, 91, 96], "physic": [10, 20, 23, 28, 38, 39], "c": [10, 11], "ensur": [10, 40, 63, 85], "ignor": [10, 36, 38, 39, 83, 93], "do": [10, 11, 20, 23, 25, 38, 39, 81, 83], "forc": [10, 28, 39], "No": [10, 40], "effect": [10, 20, 24, 28, 40], "back": [10, 20, 24, 28, 30, 81], "dev": 10, "edit": 10, "new": [10, 18, 25, 28, 30, 38, 39, 40, 42, 56, 57, 58, 59, 60, 81, 85, 87, 93, 97], "bak": 10, "f": [10, 14, 15, 16, 17, 28, 37], "choos": 10, "match": [10, 20, 26, 39, 40, 53], "more": [10, 40, 78, 83, 87, 97], "than": [10, 40], "last": [10, 20, 25, 28, 29, 40, 85], "file_glob": 10, "glob": 10, "express": [10, 39, 40, 87, 91], "which": [10, 18, 28, 40, 56, 60, 78, 81], "stdin": 10, "regex": [10, 20, 39], "defin": [10, 40, 78, 83, 87, 91, 96], "reusabl": 10, "referenc": [10, 25, 28, 40], "denot": 10, "themselv": 10, "arbitrari": [10, 84], "actual": [10, 40, 78, 85, 93], "could": 10, "involv": [10, 81], "exampl": [10, 28, 39, 40, 56, 57, 58, 87, 95], "page_": 10, "phys_": 10, "echo": 10, "src": [10, 11, 30], "seg": 10, "page_p0001": 10, "ext": 10, "file_": 10, "_": [10, 20], "phys_0001": [10, 39], "bin": 10, "file_0001_bin": 10, "img": [10, 37, 85], "wolf": 10, "png": [10, 28], "phys_0002": [10, 39], "file_0002_bin": 10, "r": [10, 77], "fileid": [10, 39], "regular": [10, 39, 40], "filesystem": [10, 20, 24, 25, 28, 39, 77, 87, 91], "captur": 10, "usabl": [10, 77], "other": [10, 20, 38, 40, 53, 61, 83, 87, 91], "deriv": [10, 28, 40, 85], "remot": [10, 25, 38, 39, 87, 97], "differ": [10, 40, 42, 75, 93], "dry": 10, "don": 10, "anyth": 10, "just": [10, 28], "preview": [10, 40], "src_path_opt": 10, "valu": [10, 20, 30, 36, 40, 54, 56, 57, 60, 61, 73, 78, 84, 85, 87, 91, 93], "disabl": [10, 83], "faster": 10, "same": [10, 28, 36, 38, 39, 75, 77, 81], "too": [10, 32, 40, 78], "return": [10, 20, 25, 28, 32, 39, 40, 43, 53, 63, 73, 75, 81, 84, 85, 87, 93, 97], "absolut": [10, 20, 28, 52, 77, 81], "rel": [10, 25, 28, 32, 40, 77, 81, 85], "pwd": [10, 83], "accordingli": [10, 40], "oai": [10, 43], "pmh": [10, 43], "getrecord": [10, 43], "wrap": [10, 28, 56, 57, 58, 87, 93], "clobber": 10, "filter": [10, 20, 28], "remaind": 10, "interpret": [10, 28, 40, 81], "k": 10, "field": [10, 56, 60], "output_field": 10, "repeat": 10, "multipl": [10, 20, 23, 39, 40, 81, 87, 91], "join": [10, 40, 93], "tab": 10, "basename_without_extens": [10, 34, 38], "found": [10, 20, 28], "wait": 10, "mani": [10, 87, 95], "request": [10, 20, 43, 52, 56, 57, 58], "empti": [10, 20, 23, 25, 39, 40, 63, 85, 93], "attribut": [10, 36, 40], "mets_path": [10, 52, 53, 55, 63, 75], "pass": [10, 20, 24, 28, 77, 87, 93], "map": [10, 32, 39, 40], "order": [10, 28, 39, 40, 53, 93], "respect": [10, 20, 40, 56, 60, 81], "have": [10, 20, 24, 28, 32, 38, 40, 53, 77, 81, 83, 93], "semant": [10, 40, 87, 91], "explan": 10, "disk": [10, 25, 28, 83], "conflict": [10, 85], "clash": 10, "filegrp_map": [10, 39], "dest": [10, 11, 30], "fileid_map": [10, 39], "pageid_map": [10, 39], "non": [10, 11, 40, 93], "delet": [10, 11, 28, 39, 45, 52, 56, 60, 87, 92], "keep": [10, 28], "continu": [10, 28, 40], "even": [10, 20, 23, 28, 39], "doe": [10, 25, 28, 39, 40, 43, 63, 87, 91], "recurs": [10, 28, 39, 40, 77, 81, 93], "befor": [10, 20, 23, 28, 53, 83, 87, 97], "itself": [10, 28, 63], "old": [10, 28, 39, 40], "control": [10, 40, 78], "backend": [10, 77], "bind": 10, "support": [10, 39, 80, 87, 91, 96], "identifi": [10, 11, 30, 39, 40, 56, 60], "mechan": [10, 89], "otherwis": [10, 20, 24, 28, 40, 81, 83, 85], "mod": [10, 39], "purl": 10, "content": [10, 18, 20, 23, 28, 40, 41, 87, 91], "abid": 10, "test": [10, 83], "imagefilenam": [10, 28, 40], "dimens": [10, 37, 81, 87, 97], "pixel_dens": [10, 87, 97], "page_xsd": [10, 87, 97], "mets_fileid_page_pcgtsid": [10, 87, 97], "mets_unique_identifi": [10, 87, 97], "mets_file_group_nam": [10, 87, 97], "mets_fil": [10, 87, 97], "mets_xsd": [10, 87, 97], "page_coordinate_consist": [10, 87, 97], "fierc": 10, "poli": [10, 87, 97], "both": [10, 77, 81, 87, 97], "automatic_backup": [10, 28], "b": [11, 37, 93], "checksum": [11, 30, 56, 60, 87, 92], "base_version_checksum": 11, "tag": [11, 30, 40, 93], "tag_fil": [11, 30], "payload": [11, 30], "z": [11, 40], "parallel": [11, 30], "recreat": 11, "manifest": [11, 30, 38, 87, 92], "sha512": [11, 30], "txt": [11, 30, 56, 60], "tagmanifest": 11, "oxum": [11, 30], "open": [11, 20, 24, 32, 77], "It": [11, 20, 24, 28, 40, 52, 61, 63], "possibl": [11, 28, 64], "place": [11, 40], "flag": [11, 20, 24, 78], "unzip": [11, 30, 87, 92], "treat": 11, "still": [11, 20, 56, 60, 87, 92], "basic": [11, 87, 92], "conform": [11, 30, 63, 87, 92], "valdiat": [11, 87, 92], "processorclass": [13, 20, 24], "none": [13, 18, 20, 23, 24, 25, 26, 27, 28, 30, 36, 38, 39, 40, 41, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 73, 74, 75, 78, 81, 84, 85, 87, 93, 97], "dump_json": [13, 20, 23], "dump_module_dir": [13, 20, 23], "profile_fil": 13, "show_resourc": [13, 20, 23, 24], "list_resourc": [13, 20, 23, 24], "log_filenam": [13, 20, 24, 62], "str": [13, 18, 32, 37, 40, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 84, 87, 98, 99, 100, 101], "mp": [16, 87, 91], "usag": [16, 20, 23, 26], "import": [16, 53], "ocrd_click_cli": 16, "click": 16, "def": [16, 87, 95], "fc": 17, "basemodel": [18, 56, 57, 58, 59], "keyword": [18, 20, 23, 25, 28, 32, 36, 38, 39, 56, 57, 58, 59, 60, 78, 83], "rais": [18, 20, 25, 28, 39, 40, 56, 57, 58, 59, 60, 85], "validationerror": [18, 56, 57, 58, 59, 60], "cannot": [18, 20, 40, 56, 57, 58, 59, 60, 61, 85], "form": [18, 40, 56, 57, 58, 59, 60, 77], "static": [18, 39, 40, 63, 66, 67, 70, 87, 89, 90, 91, 93, 95, 96, 97], "tupl": [18, 20, 25, 28, 36, 40, 77, 78], "dict": [18, 20, 24, 28, 36, 39, 51, 53, 56, 57, 59, 60, 62, 63, 64, 66, 70, 72, 73, 74, 75, 77, 81, 87, 89, 90, 91, 93, 94, 95, 96], "_type": [18, 36], "ocrdfil": [18, 20, 28, 32, 33, 34, 38, 39, 87, 93, 101], "ocrdag": [18, 33, 34, 36, 39, 101], "partial": 18, "substitut": 18, "ocrd_met": [18, 28, 30, 33, 34, 36, 38, 45, 56, 60, 85, 87, 97, 101], "ocrdmet": [18, 28, 33, 34, 36, 38, 39, 85, 87, 97, 101], "properti": [18, 20, 26, 27, 36, 37, 38, 39, 40, 41, 42, 64, 66, 67, 71, 87, 91, 95, 96], "dummi": [19, 21], "dummy_processor": [19, 21], "dummyprocessor": [19, 21, 23], "show_help": [19, 20, 23], "show_vers": [19, 20, 23], "verifi": [19, 20], "add_metadata": [19, 20], "resolve_resourc": [19, 20], "list_all_resourc": [19, 20], "moduledir": [19, 20, 23], "input_fil": [19, 20, 32, 84], "zip_input_fil": [19, 20], "uniform": 20, "That": [20, 81], "combin": 20, "repres": [20, 28, 32, 36, 37, 38, 40, 81, 85, 87, 91, 93], "write": [20, 24, 28, 56, 60], "them": [20, 77], "mai": [20, 24, 30, 40, 53, 61, 85, 87, 91], "take": 20, "mandatori": [20, 56, 60], "unless": [20, 23, 25, 28, 40], "enter": [20, 23], "esp": [20, 23], "choic": [20, 23], "stdout": [20, 23], "boolean": [20, 23, 25, 28, 30, 32, 39, 40, 41, 83, 87, 91, 92, 95, 97], "standard": [20, 23], "docstr": [20, 23, 24], "here": [20, 23, 56, 60, 65, 75], "right": [20, 23], "afterward": [20, 23, 28], "fulfil": 20, "under": [20, 23, 25], "main": [20, 23, 40], "overridden": [20, 23, 83], "subclass": [20, 23, 34, 40, 78], "pcgt": [20, 40], "metadataitemtyp": [20, 33, 34, 40, 101], "metadataitem": [20, 40], "pcgtstype": [20, 33, 34, 40, 101], "val": [20, 82, 85], "algorithm": 20, "de": [20, 30, 87, 95], "en": [20, 75], "spec": [20, 39, 83, 87, 91, 92, 95, 96, 97], "suffix": 20, "top": [20, 77], "belong": [20, 40, 87, 91], "forget": 20, "els": [20, 28, 81, 85], "complain": 20, "warrant": 20, "github": [20, 25, 30, 87, 91, 92, 93], "com": [20, 25, 30, 64, 80], "cisocrgroup": 20, "ocrd_ci": 20, "pull": 20, "57": 20, "issuecom": 20, "656336593": 20, "ocrd_fil": [20, 28, 33, 34, 36, 39, 85, 87, 93, 101], "require_first": 20, "on_error": 20, "expect": [20, 87, 91, 93], "align": [20, 40], "across": [20, 40, 93], "equal": [20, 39, 40], "present": [20, 40], "make": [20, 56, 57, 58, 63, 64, 78, 83], "select": [20, 28], "follow": [20, 81], "tri": 20, "fall": 20, "In": [20, 43], "handl": [20, 25, 56, 60, 78], "below": [20, 77], "behaviour": 20, "mime": [20, 28, 84], "But": 20, "accord": [20, 25, 28, 64, 81, 93], "silent": [20, 40, 83], "wa": [20, 81], "abort": 20, "except": [20, 25, 39, 40, 85, 93], "alwai": [20, 40, 52], "entir": 20, "specifi": [20, 28, 40], "liter": [20, 39, 85], "prefix": [20, 28, 39, 40, 56, 85], "prefer": 20, "processor_inst": [20, 24], "full": [20, 24, 28, 40, 75, 81, 84, 85], "section": [20, 24], "ad": [20, 24, 39, 85], "reus": [20, 24, 67, 69, 71], "appli": [20, 24, 28, 77, 81], "Will": [20, 24], "instance_cach": [20, 24], "python": [20, 24, 80, 83], "avoid": [20, 24, 28, 39, 85], "unexpect": [20, 24], "side": [20, 24], "experiment": [20, 24], "featur": [20, 24, 28], "we": [20, 24, 38], "would": [20, 24, 87, 97], "adopt": [20, 24], "futur": [20, 24, 53], "bare": 23, "bone": 23, "method": [24, 32, 73, 77, 81, 83], "document": [24, 28, 39, 40, 41, 56, 57, 60, 67, 69, 71, 87, 98, 99, 100], "upload": [25, 28], "repositori": 25, "temporari": [25, 28], "if_exist": 25, "subdir": 25, "earli": 25, "outsid": [25, 28, 40, 81], "appear": [25, 40], "call": [25, 28, 61, 63, 64, 83], "segment": [25, 28, 40, 81, 85, 87, 91, 97], "target": [25, 87, 95], "behavior": [25, 78, 83], "noth": 25, "fileexistserror": 25, "part": [25, 40, 63, 67, 69, 71, 84], "what": [25, 78, 84, 87, 91], "One": [25, 40, 87, 97], "subdirectori": 25, "think": 25, "int": [25, 37, 40, 54, 55, 63, 64, 66, 67, 69, 70, 71, 72, 73, 75], "failur": 25, "establish": 25, "next": [25, 28], "chunk": 25, "dst_dir": 25, "clobber_met": 25, "src_baseurl": 25, "By": [25, 83], "tmp_prefix": 25, "retriev": [25, 28], "former": 25, "latter": [25, 52, 81], "ident": [25, 81], "coher": 25, "issu": 25, "517": 25, "skip_init": 26, "list_filenam": 26, "registri": 26, "res_filenam": 26, "stub": 26, "resource_path": 26, "basedir": 26, "no_subdir": 26, "progress_cb": 26, "classmethod": [27, 29, 87, 98, 99, 100], "argstr": 27, "task_str": 27, "baseurl": 28, "up": [28, 63], "deleg": [28, 63], "overwrite_mod": 28, "global": [28, 78, 83], "other_workspac": 28, "copy_fil": 28, "sinc": [28, 36, 38, 81], "1": [28, 30, 37, 40, 43, 54, 66, 67, 85, 87, 91, 95, 96], "_recursion_count": 28, "keep_fil": 28, "page_recurs": 28, "page_same_group": 28, "py": [28, 30, 39, 56, 83], "ha": [28, 40, 52, 85], "byte": [28, 64, 66, 67, 70, 71, 87, 91, 96, 98, 99, 100], "out": 28, "current": [28, 40, 52, 56, 60, 61, 63, 64, 87, 93], "state": [28, 29, 45, 52, 53, 56, 57, 58, 66, 70], "image_url": 28, "ocrd_exif": [28, 33, 34, 101], "ocrdexif": [28, 32, 33, 34, 37, 101], "href": [28, 38, 39], "inspect": 28, "pil": [28, 32, 37, 77, 81], "bound": [28, 40, 77, 81], "box": [28, 77, 81], "cut": 28, "crop": [28, 40, 77, 81, 87, 91], "fill": [28, 81], "background": [28, 40, 81], "transpar": [28, 81], "feature_selector": [28, 40], "feature_filt": 28, "ocrd_pag": [28, 32, 33, 34, 87, 93, 101], "pagetyp": [28, 33, 34, 40, 81, 101], "structmap": [28, 38, 39], "color": [28, 81], "alpha": [28, 81], "channel": [28, 64, 66, 67, 81], "mask": [28, 77, 81], "comment": [28, 40, 85], "alternativeimag": [28, 40, 85], "rotat": [28, 40, 77, 81], "orient": [28, 40], "angl": [28, 40, 81], "annot": [28, 81], "among": [28, 93], "pick": 28, "richest": 28, "produc": [28, 32, 75, 77, 87, 91], "so": [28, 52], "mere": [28, 81], "AND": 28, "OR": 28, "chosen": 28, "yet": 28, "being": [28, 56, 60], "likewis": 28, "deskew": [28, 40, 87, 91], "howev": [28, 56, 60, 81], "abov": 28, "45": 28, "interv": 28, "much": 28, "transposit": [28, 81], "90": [28, 81], "180": [28, 40], "270": [28, 81], "polygon": [28, 40, 77, 81, 93], "rectangl": [28, 40, 77, 81], "area": [28, 40], "median": [28, 81], "revert": 28, "white": [28, 81, 93], "255": [28, 81], "moreov": [28, 40, 81], "opaqu": 28, "thu": [28, 81], "unexpos": 28, "transform": [28, 77, 78, 81, 82], "numpi": [28, 81], "affin": [28, 77, 81], "convert": [28, 45, 52, 61, 77, 81, 82], "those": [28, 40, 81, 87, 91], "reflect": [28, 77, 81], "far": 28, "lead": [28, 39, 40, 85], "origin": [28, 38, 39, 64, 81], "two": [28, 93], "down": [28, 52, 77], "raw": [28, 78], "page_imag": 28, "page_coord": 28, "page_image_info": 28, "binar": [28, 87, 91, 95], "grayscale_norm": [28, 87, 91], "parent_imag": [28, 81], "parent_coord": [28, 81], "hierarchi": [28, 40, 77], "parent": [28, 40, 81, 87, 93, 97], "textregiontyp": [28, 33, 34, 40, 101], "textlinetyp": [28, 33, 34, 40, 81, 101], "wordtyp": [28, 33, 34, 40, 81, 101], "glyphtyp": [28, 33, 34, 40, 81, 101], "higher": [28, 77], "compens": 28, "invers": [28, 81], "translat": [28, 81], "center": [28, 81], "passiv": [28, 66, 67, 71, 81], "previou": [28, 29, 40], "These": [28, 40, 77, 83], "lower": [28, 40], "xywh": [28, 77, 81], "page_xywh": 28, "serial": [28, 30, 37, 40, 41, 42, 43], "chksum": 29, "lastmod": 29, "mets_xml": 29, "backup_dir": 29, "choose_first": 29, "self": [29, 39, 40, 93], "backup_directori": 29, "sort": [29, 40], "descend": [29, 83], "ocrd_identifi": [30, 45, 56, 60], "ocrd_base_version_checksum": [30, 45, 56, 60], "skip_zip": 30, "ocrd_zip": [30, 87, 92], "pack": 30, "ord_identifi": 30, "ord_met": 30, "ord_base_version_checksum": 30, "integ": [30, 37, 77, 85, 87, 92, 95], "leav": [30, 53], "addit": [30, 40, 41, 81, 93], "turn": 30, "io": [30, 75, 87, 92, 93], "re": [30, 39], "tagminifest": 30, "appropri": 30, "should": [30, 32, 40, 63, 64, 83, 87, 91, 95], "Not": 30, "bool": [30, 41, 53, 56, 57, 60, 63, 64, 66, 67, 69, 71, 73, 75, 78, 87, 93], "newli": 30, "exif_from_filenam": [31, 32, 101], "page_from_fil": [31, 32, 101], "page_from_imag": [31, 32, 101], "factori": [32, 34, 40], "image_filenam": 32, "with_tre": 32, "ocrdpag": [32, 33, 34, 40, 87, 93, 101], "dom": 32, "node": [32, 40, 93], "tree": [32, 40], "element": [32, 36, 38, 40, 77, 78, 81, 85, 93], "revers": [32, 40], "cf": 32, "parseetre": [32, 33, 34, 40, 101], "ocrd_ag": [33, 34, 39, 101], "clientsideocrdag": [33, 34, 36, 101], "clientsideocrdfil": [33, 34, 38, 101], "parsestr": [33, 34, 40, 101], "advertregiontyp": [33, 34, 40, 101], "alternativeimagetyp": [33, 34, 40, 101], "baselinetyp": [33, 34, 40, 101], "bordertyp": [33, 34, 40, 101], "chartregiontyp": [33, 34, 40, 101], "chemregiontyp": [33, 34, 40, 101], "coordstyp": [33, 34, 40, 101], "customregiontyp": [33, 34, 40, 101], "graphemebasetyp": [33, 34, 40, 101], "graphemegrouptyp": [33, 34, 40, 101], "graphemetyp": [33, 34, 40, 101], "graphemestyp": [33, 34, 40, 101], "graphicregiontyp": [33, 34, 40, 101], "gridpointstyp": [33, 34, 40, 101], "gridtyp": [33, 34, 40, 101], "imageregiontyp": [33, 34, 40, 101], "labeltyp": [33, 34, 40, 101], "labelstyp": [33, 34, 40, 101], "layertyp": [33, 34, 40, 101], "layerstyp": [33, 34, 40, 101], "linedrawingregiontyp": [33, 34, 40, 101], "mapregiontyp": [33, 34, 40, 101], "mathsregiontyp": [33, 34, 40, 101], "metadatatyp": [33, 34, 40, 101], "musicregiontyp": [33, 34, 40, 101], "noiseregiontyp": [33, 34, 40, 101], "nonprintingchartyp": [33, 34, 40, 101], "orderedgroupindexedtyp": [33, 34, 40, 101], "orderedgrouptyp": [33, 34, 40, 101], "printspacetyp": [33, 34, 40, 101], "readingordertyp": [33, 34, 40, 101], "regionrefindexedtyp": [33, 34, 40, 101], "regionreftyp": [33, 34, 40, 101], "regiontyp": [33, 34, 40, 81, 101], "relationtyp": [33, 34, 40, 101], "relationstyp": [33, 34, 40, 101], "rolestyp": [33, 34, 40, 101], "separatorregiontyp": [33, 34, 40, 101], "tablecellroletyp": [33, 34, 40, 101], "tableregiontyp": [33, 34, 40, 101], "textequivtyp": [33, 34, 40, 101], "textstyletyp": [33, 34, 40, 101], "unknownregiontyp": [33, 34, 40, 101], "unorderedgroupindexedtyp": [33, 34, 40, 101], "unorderedgrouptyp": [33, 34, 40, 101], "userattributetyp": [33, 34, 40, 101], "userdefinedtyp": [33, 34, 40, 101], "to_xml": [33, 34, 37, 40, 41, 42, 101], "ocrd_xml_bas": [33, 34, 101], "ocrdxmldocu": [33, 34, 39, 41, 101], "report": [33, 34, 87, 93, 97, 101], "validationreport": [33, 34, 42, 87, 93, 97, 101], "xmllint_format": [33, 34, 43, 101], "handle_oai_respons": [33, 34, 43, 101], "is_oai_cont": [33, 34, 43, 101], "extract_mets_from_oai_cont": [33, 34, 43, 101], "variou": [34, 77, 87], "domain": [34, 87, 95], "width": [34, 37, 40, 77, 81], "height": [34, 37, 40, 77, 81], "photometricinterpret": [34, 37], "resolut": [34, 37, 40], "xresolut": [34, 37], "yresolut": [34, 37], "resolutionunit": [34, 37], "run_identifi": [34, 37], "run_pil": [34, 37], "loctyp": [34, 38], "empty_met": [34, 39], "refresh_cach": [34, 39], "add_file_group": [34, 39], "remove_one_fil": [34, 39], "physical_pag": [34, 39], "get_physical_pag": [34, 39], "set_physical_page_for_fil": [34, 39], "get_physical_page_for_fil": [34, 39], "remove_physical_pag": [34, 39], "remove_physical_page_fptr": [34, 39], "member_data_items_": [34, 40], "superclass": [34, 40], "get_ns_prefix_": [34, 40], "set_ns_prefix_": [34, 40], "get_orient": [34, 40], "get_bgcolour": [34, 40], "set_bgcolour": [34, 40], "validate_coloursimpletyp": [34, 40], "hascontent_": [34, 40], "exportattribut": [34, 40], "exportchildren": [34, 40], "to_etre": [34, 40], "build": [34, 40], "buildattribut": [34, 40], "buildchildren": [34, 40], "set_orient": [34, 40], "get_filenam": [34, 40], "set_filenam": [34, 40], "get_com": [34, 40], "set_com": [34, 40], "get_conf": [34, 40], "set_conf": [34, 40], "validate_confsimpletyp": [34, 40], "get_point": [34, 40], "set_point": [34, 40], "validate_pointstyp": [34, 40], "validate_pointstype_patterns_": [34, 40], "get_coord": [34, 40], "set_coord": [34, 40], "get_typ": [34, 40], "set_typ": [34, 40], "get_numcolour": [34, 40], "set_numcolour": [34, 40], "get_embtext": [34, 40], "set_embtext": [34, 40], "validate_charttypesimpletyp": [34, 40], "get_alternativeimag": [34, 40], "set_alternativeimag": [34, 40], "add_alternativeimag": [34, 40], "insert_alternativeimage_at": [34, 40], "replace_alternativeimage_at": [34, 40], "get_graphem": [34, 40], "set_graphem": [34, 40], "get_textequiv": [34, 40], "set_textequiv": [34, 40], "add_textequiv": [34, 40], "insert_textequiv_at": [34, 40], "replace_textequiv_at": [34, 40], "get_textstyl": [34, 40], "set_textstyl": [34, 40], "get_userdefin": [34, 40], "set_userdefin": [34, 40], "get_label": [34, 40], "set_label": [34, 40], "add_label": [34, 40], "insert_labels_at": [34, 40], "replace_labels_at": [34, 40], "get_id": [34, 40], "set_id": [34, 40], "get_ligatur": [34, 40], "set_ligatur": [34, 40], "get_symbol": [34, 40], "set_symbol": [34, 40], "get_script": [34, 40], "set_script": [34, 40], "get_product": [34, 40], "set_product": [34, 40], "get_custom": [34, 40], "set_custom": [34, 40], "validate_scriptsimpletyp": [34, 40], "validate_productionsimpletyp": [34, 40], "invalidate_alternativeimag": [34, 40], "get_index": [34, 40], "set_index": [34, 40], "get_chartyp": [34, 40], "set_chartyp": [34, 40], "get_extensiontype_": [34, 40], "set_extensiontype_": [34, 40], "add_graphem": [34, 40], "insert_grapheme_at": [34, 40], "replace_grapheme_at": [34, 40], "get_nonprintingchar": [34, 40], "set_nonprintingchar": [34, 40], "add_nonprintingchar": [34, 40], "insert_nonprintingchar_at": [34, 40], "replace_nonprintingchar_at": [34, 40], "get_graphemegroup": [34, 40], "set_graphemegroup": [34, 40], "add_graphemegroup": [34, 40], "insert_graphemegroup_at": [34, 40], "replace_graphemegroup_at": [34, 40], "validate_graphicstypesimpletyp": [34, 40], "get_gridpoint": [34, 40], "set_gridpoint": [34, 40], "add_gridpoint": [34, 40], "insert_gridpoints_at": [34, 40], "replace_gridpoints_at": [34, 40], "get_colourdepth": [34, 40], "set_colourdepth": [34, 40], "validate_colourdepthsimpletyp": [34, 40], "get_valu": [34, 40], "set_valu": [34, 40], "insert_label_at": [34, 40], "replace_label_at": [34, 40], "get_externalmodel": [34, 40], "set_externalmodel": [34, 40], "get_externalid": [34, 40], "set_externalid": [34, 40], "get_prefix": [34, 40], "set_prefix": [34, 40], "get_regionref": [34, 40], "set_regionref": [34, 40], "add_regionref": [34, 40], "insert_regionref_at": [34, 40], "replace_regionref_at": [34, 40], "get_zindex": [34, 40], "set_zindex": [34, 40], "get_capt": [34, 40], "set_capt": [34, 40], "get_lay": [34, 40], "set_lay": [34, 40], "add_lay": [34, 40], "insert_layer_at": [34, 40], "replace_layer_at": [34, 40], "get_pencolour": [34, 40], "set_pencolour": [34, 40], "get_nam": [34, 40], "set_nam": [34, 40], "get_dat": [34, 40], "set_dat": [34, 40], "get_creat": [34, 40], "set_creat": [34, 40], "get_lastchang": [34, 40], "set_lastchang": [34, 40], "get_metadataitem": [34, 40], "set_metadataitem": [34, 40], "add_metadataitem": [34, 40], "insert_metadataitem_at": [34, 40], "replace_metadataitem_at": [34, 40], "get_externalref": [34, 40], "set_externalref": [34, 40], "get_regionrefindex": [34, 40], "set_regionrefindex": [34, 40], "add_regionrefindex": [34, 40], "insert_regionrefindexed_at": [34, 40], "replace_regionrefindexed_at": [34, 40], "get_orderedgroupindex": [34, 40], "set_orderedgroupindex": [34, 40], "add_orderedgroupindex": [34, 40], "insert_orderedgroupindexed_at": [34, 40], "replace_orderedgroupindexed_at": [34, 40], "get_unorderedgroupindex": [34, 40], "set_unorderedgroupindex": [34, 40], "add_unorderedgroupindex": [34, 40], "insert_unorderedgroupindexed_at": [34, 40], "replace_unorderedgroupindexed_at": [34, 40], "get_continu": [34, 40], "set_continu": [34, 40], "validate_grouptypesimpletyp": [34, 40], "get_allindex": [34, 40], "clear_allindex": [34, 40], "extend_allindex": [34, 40], "sort_allindex": [34, 40], "get_bord": [34, 40], "get_printspac": [34, 40], "set_printspac": [34, 40], "get_readingord": [34, 40], "set_readingord": [34, 40], "get_rel": [34, 40], "set_rel": [34, 40], "get_textregion": [34, 40], "set_textregion": [34, 40], "add_textregion": [34, 40], "insert_textregion_at": [34, 40], "replace_textregion_at": [34, 40], "get_imageregion": [34, 40], "set_imageregion": [34, 40], "add_imageregion": [34, 40], "insert_imageregion_at": [34, 40], "replace_imageregion_at": [34, 40], "get_linedrawingregion": [34, 40], "set_linedrawingregion": [34, 40], "add_linedrawingregion": [34, 40], "insert_linedrawingregion_at": [34, 40], "replace_linedrawingregion_at": [34, 40], "get_graphicregion": [34, 40], "set_graphicregion": [34, 40], "add_graphicregion": [34, 40], "insert_graphicregion_at": [34, 40], "replace_graphicregion_at": [34, 40], "get_tableregion": [34, 40], "set_tableregion": [34, 40], "add_tableregion": [34, 40], "insert_tableregion_at": [34, 40], "replace_tableregion_at": [34, 40], "get_chartregion": [34, 40], "set_chartregion": [34, 40], "add_chartregion": [34, 40], "insert_chartregion_at": [34, 40], "replace_chartregion_at": [34, 40], "get_mapregion": [34, 40], "set_mapregion": [34, 40], "add_mapregion": [34, 40], "insert_mapregion_at": [34, 40], "replace_mapregion_at": [34, 40], "get_separatorregion": [34, 40], "set_separatorregion": [34, 40], "add_separatorregion": [34, 40], "insert_separatorregion_at": [34, 40], "replace_separatorregion_at": [34, 40], "get_mathsregion": [34, 40], "set_mathsregion": [34, 40], "add_mathsregion": [34, 40], "insert_mathsregion_at": [34, 40], "replace_mathsregion_at": [34, 40], "get_chemregion": [34, 40], "set_chemregion": [34, 40], "add_chemregion": [34, 40], "insert_chemregion_at": [34, 40], "replace_chemregion_at": [34, 40], "get_musicregion": [34, 40], "set_musicregion": [34, 40], "add_musicregion": [34, 40], "insert_musicregion_at": [34, 40], "replace_musicregion_at": [34, 40], "get_advertregion": [34, 40], "set_advertregion": [34, 40], "add_advertregion": [34, 40], "insert_advertregion_at": [34, 40], "replace_advertregion_at": [34, 40], "get_noiseregion": [34, 40], "set_noiseregion": [34, 40], "add_noiseregion": [34, 40], "insert_noiseregion_at": [34, 40], "replace_noiseregion_at": [34, 40], "get_unknownregion": [34, 40], "set_unknownregion": [34, 40], "add_unknownregion": [34, 40], "insert_unknownregion_at": [34, 40], "replace_unknownregion_at": [34, 40], "get_customregion": [34, 40], "set_customregion": [34, 40], "add_customregion": [34, 40], "insert_customregion_at": [34, 40], "replace_customregion_at": [34, 40], "get_imagefilenam": [34, 40], "set_imagefilenam": [34, 40], "get_imagewidth": [34, 40], "set_imagewidth": [34, 40], "get_imageheight": [34, 40], "set_imageheight": [34, 40], "get_imagexresolut": [34, 40], "set_imagexresolut": [34, 40], "get_imageyresolut": [34, 40], "set_imageyresolut": [34, 40], "get_imageresolutionunit": [34, 40], "set_imageresolutionunit": [34, 40], "get_primarylanguag": [34, 40], "set_primarylanguag": [34, 40], "get_secondarylanguag": [34, 40], "set_secondarylanguag": [34, 40], "get_primaryscript": [34, 40], "set_primaryscript": [34, 40], "get_secondaryscript": [34, 40], "set_secondaryscript": [34, 40], "get_readingdirect": [34, 40], "set_readingdirect": [34, 40], "get_textlineord": [34, 40], "set_textlineord": [34, 40], "validate_pagetypesimpletyp": [34, 40], "validate_languagesimpletyp": [34, 40], "validate_readingdirectionsimpletyp": [34, 40], "validate_textlineordersimpletyp": [34, 40], "get_allregion": [34, 40], "get_allalternativeimag": [34, 40], "set_bord": [34, 40], "get_alltextlin": [34, 40], "get_metadata": [34, 40], "set_metadata": [34, 40], "get_pag": [34, 40], "set_pag": [34, 40], "get_pcgtsid": [34, 40], "set_pcgtsid": [34, 40], "get_allalternativeimagepath": [34, 40], "prune_readingord": [34, 40], "get_orderedgroup": [34, 40], "set_orderedgroup": [34, 40], "get_unorderedgroup": [34, 40], "set_unorderedgroup": [34, 40], "get_rol": [34, 40], "set_rol": [34, 40], "get_sourceregionref": [34, 40], "set_sourceregionref": [34, 40], "get_targetregionref": [34, 40], "set_targetregionref": [34, 40], "add_rel": [34, 40], "insert_relation_at": [34, 40], "replace_relation_at": [34, 40], "get_tablecellrol": [34, 40], "set_tablecellrol": [34, 40], "get_colour": [34, 40], "set_colour": [34, 40], "get_rowindex": [34, 40], "set_rowindex": [34, 40], "get_columnindex": [34, 40], "set_columnindex": [34, 40], "get_rowspan": [34, 40], "set_rowspan": [34, 40], "get_colspan": [34, 40], "set_colspan": [34, 40], "get_head": [34, 40], "set_head": [34, 40], "get_grid": [34, 40], "set_grid": [34, 40], "get_row": [34, 40], "set_row": [34, 40], "get_column": [34, 40], "set_column": [34, 40], "get_linecolour": [34, 40], "set_linecolour": [34, 40], "get_linesepar": [34, 40], "set_linesepar": [34, 40], "get_plaintext": [34, 40], "set_plaintext": [34, 40], "get_unicod": [34, 40], "set_unicod": [34, 40], "get_datatyp": [34, 40], "set_datatyp": [34, 40], "get_datatypedetail": [34, 40], "set_datatypedetail": [34, 40], "validate_textdatatypesimpletyp": [34, 40], "get_baselin": [34, 40], "set_baselin": [34, 40], "get_word": [34, 40], "set_word": [34, 40], "add_word": [34, 40], "insert_word_at": [34, 40], "replace_word_at": [34, 40], "get_textlin": [34, 40], "set_textlin": [34, 40], "add_textlin": [34, 40], "insert_textline_at": [34, 40], "replace_textline_at": [34, 40], "get_lead": [34, 40], "set_lead": [34, 40], "get_readingorient": [34, 40], "set_readingorient": [34, 40], "get_ind": [34, 40], "set_ind": [34, 40], "get_align": [34, 40], "set_align": [34, 40], "validate_texttypesimpletyp": [34, 40], "validate_alignsimpletyp": [34, 40], "get_fontfamili": [34, 40], "set_fontfamili": [34, 40], "get_serif": [34, 40], "set_serif": [34, 40], "get_monospac": [34, 40], "set_monospac": [34, 40], "get_fonts": [34, 40], "set_fonts": [34, 40], "get_xheight": [34, 40], "set_xheight": [34, 40], "get_kern": [34, 40], "set_kern": [34, 40], "get_textcolour": [34, 40], "set_textcolour": [34, 40], "get_textcolourrgb": [34, 40], "set_textcolourrgb": [34, 40], "get_bgcolourrgb": [34, 40], "set_bgcolourrgb": [34, 40], "get_reversevideo": [34, 40], "set_reversevideo": [34, 40], "get_bold": [34, 40], "set_bold": [34, 40], "get_ital": [34, 40], "set_ital": [34, 40], "get_underlin": [34, 40], "set_underlin": [34, 40], "get_underlinestyl": [34, 40], "set_underlinestyl": [34, 40], "get_subscript": [34, 40], "set_subscript": [34, 40], "get_superscript": [34, 40], "set_superscript": [34, 40], "get_strikethrough": [34, 40], "set_strikethrough": [34, 40], "get_smallcap": [34, 40], "set_smallcap": [34, 40], "get_letterspac": [34, 40], "set_letterspac": [34, 40], "validate_underlinestylesimpletyp": [34, 40], "add_orderedgroup": [34, 40], "insert_orderedgroup_at": [34, 40], "replace_orderedgroup_at": [34, 40], "add_unorderedgroup": [34, 40], "insert_unorderedgroup_at": [34, 40], "replace_unorderedgroup_at": [34, 40], "get_unorderedgroupchildren": [34, 40], "get_descript": [34, 40], "set_descript": [34, 40], "get_userattribut": [34, 40], "set_userattribut": [34, 40], "add_userattribut": [34, 40], "insert_userattribute_at": [34, 40], "replace_userattribute_at": [34, 40], "get_glyph": [34, 40], "set_glyph": [34, 40], "add_glyph": [34, 40], "insert_glyph_at": [34, 40], "replace_glyph_at": [34, 40], "get_languag": [34, 40], "set_languag": [34, 40], "is_valid": [34, 42], "add_warn": [34, 42], "add_error": [34, 42], "add_notic": [34, 42], "merge_report": [34, 42], "el": [36, 38, 40], "lxmlelement": [36, 38], "text": [36, 40, 87, 91, 93], "without": [36, 38, 40, 87, 91, 96], "attach": [36, 38, 83], "respons": [36, 38, 39, 43, 56, 57, 85], "ocrd": [36, 38, 39, 56, 60, 63, 77, 78, 83, 84, 87, 90, 91, 92, 94, 95, 96, 97, 101], "technic": 37, "pixel": [37, 40, 81], "depth": [37, 40], "8": [37, 43], "bit": [37, 40], "grayscal": 37, "rgb": [37, 40], "24": 37, "truecolor": 37, "32": 37, "sign": 37, "float": [37, 40, 87, 91], "concept": 37, "mode": [37, 81], "densiti": 37, "unit": [37, 40, 64], "measur": [37, 40], "inch": [37, 40], "cm": 37, "flocat": [38, 39], "etre": [38, 87, 98, 99, 100], "correspond": [38, 39, 77, 81], "xlink": [38, 39], "xxx": [38, 52], "onc": [38, 83], "proper": 38, "bookkeep": 38, "now": 39, "cache_flag": [39, 41], "bundl": 39, "templat": 39, "uniqu": [39, 85], "detail": [39, 40, 64], "metshdr": 39, "equival": [39, 85], "local_onli": 39, "doubl": [39, 40], "slash": 39, "candid": 39, "fullmatch": 39, "comparison": 39, "done": 39, "numer": [39, 81], "phys_0003": 39, "expand": 39, "kwtype": 39, "restrict": 39, "link": [39, 40], "shift": [39, 81], "prevent": 39, "duplic": [39, 53], "optim": [39, 53, 87, 91], "div": 39, "for_fileid": 39, "subset": 39, "orderlabel": 39, "structur": [39, 40, 56, 60, 82, 87, 91], "necessari": [39, 40, 81], "fptr": 39, "were": 39, "rtype": 39, "other_met": 39, "after_add_cb": 39, "attr": [39, 40], "receiv": [39, 63], "infilenam": 40, "silenc": 40, "print_warn": 40, "nsmap": 40, "instr": 40, "alia": [40, 80], "custom": 40, "userdefin": 40, "label": 40, "textregion": 40, "imageregion": 40, "linedrawingregion": 40, "graphicregion": 40, "tableregion": 40, "chartregion": 40, "separatorregion": 40, "mathsregion": 40, "chemregion": 40, "musicregion": 40, "advertregion": 40, "noiseregion": 40, "unknownregion": 40, "customregion": 40, "bgcolour": 40, "gds_collector_": 40, "kwargs_": 40, "advertis": 40, "encapsul": 40, "clockwis": [40, 81], "direct": [40, 81], "skew": 40, "neg": [40, 93], "indic": 40, "anti": 40, "179": 40, "999": 40, "colour": [40, 81], "ocrd_page_gener": 40, "memberspec_": 40, "args_": 40, "ns_prefix": 40, "outfil": 40, "namespaceprefix_": 40, "namespacedef_": 40, "name_": 40, "pretty_print": 40, "already_process": 40, "fromsubclass_": 40, "parent_el": 40, "mapping_": 40, "nsmap_": 40, "child_": 40, "nodename_": 40, "invalid": 40, "pc": [40, 85], "becaus": [40, 87, 91], "been": 40, "enlarg": [40, 81], "generatedssup": 40, "confid": [40, 93], "xmln": 40, "primaresearch": 40, "org": [40, 87, 95], "gt": 40, "pagecont": 40, "2019": 40, "07": 40, "15": 40, "9": [40, 87, 91], "scan": 40, "bbox": [40, 77], "type_": 40, "numcolour": 40, "embtext": 40, "chart": 40, "graph": 40, "mark": [40, 77], "approxim": 40, "chemic": 40, "formula": 40, "outlin": [40, 77], "lie": 40, "close": [40, 77], "logic": 40, "least": [40, 93], "span": 40, "planar": 40, "intersect": [40, 93], "cover": 40, "graphic": 40, "draw": 40, "tabl": 40, "math": 40, "music": 40, "chem": 40, "advert": 40, "nois": 40, "ligatur": 40, "symbol": 40, "product": 40, "graphem": 40, "textstyl": 40, "index": [40, 85, 93, 101], "due": 40, "chartyp": 40, "extensiontype_": 40, "charact": 40, "usefor": 40, "nonprintingchar": 40, "sub": [40, 85, 87, 91], "smallest": 40, "unicod": [40, 93], "graphemegroup": 40, "simpl": 40, "compani": 40, "logo": 40, "x": [40, 77, 81], "y": [40, 77, 81], "grid": 40, "row": 40, "gridpoint": 40, "matrix": [40, 81], "colourdepth": 40, "consid": 40, "intric": 40, "complex": 40, "photo": 40, "person": 40, "rdf": 40, "tripl": 40, "yyyi": 40, "mm": 40, "dd": 40, "date": 40, "predic": 40, "externalmodel": 40, "externalid": 40, "extern": [40, 64], "ontologi": 40, "subject": 40, "uri": [40, 87, 91, 98, 99, 100], "zindex": 40, "caption": 40, "regionref": 40, "layer": 40, "overlap": 40, "greater": 40, "front": 40, "anoth": [40, 42, 80], "pencolour": 40, "illustr": 40, "solid": 40, "pen": 40, "foreground": 40, "equat": 40, "mathemat": 40, "author": 40, "imagephotometricinterpret": 40, "externalref": 40, "creator": 40, "lastchang": 40, "kind": 40, "www": 40, "w3": 40, "2001": 40, "xmlschema": 40, "notat": 40, "real": 40, "li": 40, "artifact": 40, "scanner": 40, "visual": 40, "represent": [40, 56, 57, 81], "regionrefindex": 40, "orderedgroupindex": 40, "unorderedgroupindex": 40, "nest": 40, "member": [40, 82], "posit": [40, 77], "item": [40, 87, 91, 95, 96], "column": [40, 81], "index_sort": 40, "children": [40, 93], "san": 40, "orderedgroup": 40, "unorderedgroup": 40, "validate_continu": 40, "With": [40, 52], "come": 40, "condit": 40, "increas": [40, 73, 81], "validate_uniqu": 40, "imagewidth": 40, "imageheight": 40, "imagexresolut": 40, "imageyresolut": 40, "imageresolutionunit": 40, "primarylanguag": 40, "secondarylanguag": 40, "primaryscript": 40, "secondaryscript": 40, "readingdirect": [40, 93], "textlineord": [40, 93], "printspac": 40, "readingord": [40, 93], "mapregion": 40, "standardis": 40, "centimet": 40, "further": [40, 87, 91], "primari": 40, "languag": 40, "secondari": 40, "block": 40, "whole": 40, "shall": 40, "end": [40, 75], "anywher": 40, "region_ord": 40, "respect_textline_ord": 40, "pcgtsid": 40, "paper": 40, "Its": 40, "book": 40, "titlepag": 40, "multipag": [40, 87, 97], "pictur": 40, "live": 40, "margin": 40, "bodi": [40, 64], "footnot": 40, "head": 40, "titl": 40, "pagenumb": 40, "signatur": 40, "To": [40, 87, 97], "regionposit": 40, "sourceregionref": 40, "targetregionref": 40, "layout": [40, 87, 91, 93], "loos": 40, "strong": 40, "someth": 40, "fragment": 40, "paragraph": 40, "split": 40, "NOT": 40, "drop": 40, "cap": 40, "pragraph": 40, "dropcap": 40, "tablecellrol": 40, "articl": 40, "rowindex": 40, "columnindex": 40, "rowspan": 40, "colspan": 40, "header": 40, "cell": 40, "0cell": 40, "0number": 40, "linecolour": 40, "linesepar": 40, "tabular": 40, "presenc": 40, "datatyp": 40, "datatypedetail": 40, "plaintext": 40, "lowest": [40, 93], "free": 40, "dure": [40, 87, 97], "refin": 40, "readingorient": 40, "indent": 40, "pure": [40, 81], "capit": 40, "practic": 40, "ornat": 40, "natur": 40, "degre": [40, 81], "space": [40, 93], "fontfamili": 40, "serif": 40, "monospac": 40, "fontsiz": 40, "xheight": 40, "kern": 40, "textcolour": 40, "textcolourrgb": 40, "bgcolourrgb": 40, "reversevideo": 40, "bold": 40, "ital": 40, "underlin": 40, "underlinestyl": 40, "subscript": 40, "superscript": 40, "strikethrough": 40, "smallcap": 40, "letterspac": 40, "pitch": 40, "font": [40, 87, 91], "arial": 40, "roman": 40, "blacklett": 40, "antiqua": 40, "typefac": 40, "corpu": 40, "distanc": 40, "mean": 40, "letter": 40, "assum": 40, "encod": [40, 43, 77, 81], "red": 40, "256": 40, "green": 40, "65536": 40, "blue": 40, "style": 40, "ascertain": 40, "unord": 40, "userattribut": 40, "skip_declar": 40, "xmllint": [41, 43], "pretti": [41, 43], "sever": [42, 53], "notic": 42, "neither": 42, "nor": 42, "otherself": 42, "preambl": 43, "utf": 43, "dbprocessorjob": [44, 45, 52, 56, 57, 63, 65], "dbworkflowjob": [44, 45, 52, 56, 57], "dbworkspac": [44, 45, 52, 56, 60], "pyjobinput": [44, 45, 56, 57, 63, 65, 73, 74], "pyjoboutput": [44, 45, 56, 57, 63, 65], "pyocrdtool": [44, 45, 56, 59], "pyresultmessag": [44, 45, 56, 58, 63], "pyworkflowjoboutput": [44, 45, 56, 57, 63], "stateenum": [44, 45, 52, 56, 57, 58], "rabbitmq_util": [44, 45], "rmqconsum": [44, 45, 66, 69], "rmqconnector": [44, 45, 66, 67, 69, 71], "rmqpublish": [44, 45, 66, 71], "ocrdprocessingmessag": [44, 45, 63, 64, 66, 70], "ocrdresultmessag": [44, 45, 64, 66, 70, 75], "verify_server_protocol": [44, 45, 51], "initiate_databas": [44, 45, 52], "sync_initiate_databas": [44, 45, 52], "db_create_workspac": [44, 45, 52], "db_get_workspac": [44, 45, 52], "sync_db_get_workspac": [44, 45, 52], "db_update_workspac": [44, 45, 52], "sync_db_update_workspac": [44, 45, 52], "db_get_processing_job": [44, 45, 52], "sync_db_get_processing_job": [44, 45, 52], "db_update_processing_job": [44, 45, 52], "sync_db_update_processing_job": [44, 45, 52], "db_get_workflow_job": [44, 45, 52], "sync_db_get_workflow_job": [44, 45, 52], "deploy": [44, 45, 64], "deployment_util": [44, 45], "create_docker_cli": [44, 45, 54], "create_ssh_cli": [44, 45, 54], "deploytyp": [44, 45, 54, 72], "verify_mongodb_avail": [44, 45, 54], "verify_rabbitmq_avail": [44, 45, 54], "get_root_logging_dir": [44, 45, 55], "get_cache_locked_pages_logging_file_path": [44, 45, 55], "get_cache_processing_requests_logging_file_path": [44, 45, 55], "get_processing_job_logging_file_path": [44, 45, 55], "get_processing_server_logging_file_path": [44, 45, 55], "get_processing_worker_logging_file_path": [44, 45, 55], "get_processor_server_logging_file_path": [44, 45, 55], "get_mets_server_logging_file_path": [44, 45, 55], "param_valid": [44, 45], "serveraddressparamtyp": [44, 45, 61], "queueserverparamtyp": [44, 45, 61], "databaseparamtyp": [44, 45, 61], "process_help": [44, 45], "invoke_processor": [44, 45, 62], "processing_serv": [44, 45, 46], "processingserv": [44, 45, 63], "processing_work": [44, 45, 46], "processingwork": [44, 45, 64], "processor_serv": [44, 45, 46], "processorserv": [44, 45, 65], "runtime_data": [44, 45], "datahost": [44, 45, 53, 72], "datamongodb": [44, 45, 72], "dataprocessingwork": [44, 45, 53, 72], "dataprocessorserv": [44, 45, 53, 72], "datarabbitmq": [44, 45, 72], "server_cach": [44, 45], "cachelockedpag": [44, 45, 73], "cacheprocessingrequest": [44, 45, 73], "server_util": [44, 45], "validate_and_return_mets_path": [44, 45, 74], "expand_page_id": [44, 45, 74], "validate_job_input": [44, 45, 74], "call_sync": [44, 45, 75], "calculate_execution_tim": [44, 45, 75], "generate_created_tim": [44, 45, 75], "generate_id": [44, 45, 75], "validate_and_load_config": [44, 45, 75], "verify_database_uri": [44, 45, 75], "verify_and_parse_mq_uri": [44, 45, 75], "download_ocrd_all_tool_json": [44, 45, 75], "post_to_callback_url": [44, 45, 75], "get_ocrd_workspace_inst": [44, 45, 75], "get_ocrd_workspace_physical_pag": [44, 45, 75], "is_mets_server_run": [44, 45, 75], "stop_mets_serv": [44, 45, 75], "job_id": [45, 52, 55, 56, 57, 58, 63, 65, 66, 70], "path_to_met": [45, 56, 57, 58, 66, 70], "workspace_id": [45, 52, 56, 57, 58, 60, 66, 70, 75], "depends_on": [45, 56, 57], "internal_callback_url": [45, 56, 57, 66, 70, 87, 95], "start_tim": [45, 56, 57], "end_tim": [45, 56, 57], "exec_tim": [45, 56, 57], "log_file_path": [45, 56, 57], "use_enum_valu": [45, 56, 57], "to_job_output": [45, 56, 57], "page_wis": [45, 56, 57, 63], "processing_job_id": [45, 56, 57, 73], "workflow_callback_url": [45, 56, 57, 63], "workspace_mets_path": [45, 52, 56, 60], "bagit_profile_identifi": [45, 56, 60], "bag_info_add": [45, 56, 60], "schema_extra": [45, 56, 57, 58], "cancel": [45, 56, 57], "queu": [45, 56, 57], "success": [45, 56, 57, 58], "job": [45, 52, 56, 63, 65, 75], "authenticate_and_connect": [45, 66, 69, 71], "setup_default": [45, 66, 69, 71], "get_one_messag": [45, 66, 69], "configure_consum": [45, 66, 69], "start_consum": [45, 64, 66, 69], "get_waiting_message_count": [45, 66, 69], "ack_messag": [45, 66, 69], "declare_and_bind_default": [45, 66, 67], "open_blocking_connect": [45, 66, 67], "open_blocking_channel": [45, 66, 67], "exchange_bind": [45, 66, 67], "exchange_declar": [45, 66, 67], "exchange_delet": [45, 66, 67], "exchange_unbind": [45, 66, 67], "queue_bind": [45, 66, 67], "queue_declar": [45, 66, 67], "queue_delet": [45, 66, 67], "queue_purg": [45, 66, 67], "queue_unbind": [45, 66, 67], "set_qo": [45, 66, 67], "confirm_deliveri": [45, 66, 67], "basic_publish": [45, 66, 67], "create_queu": [45, 64, 66, 71], "publish_to_queu": [45, 66, 71], "enable_delivery_confirm": [45, 66, 71], "encode_yml": [45, 66, 70], "decode_yml": [45, 66, 70], "connector": [45, 66], "ocrd_messag": [45, 66], "publish": [45, 66], "send_processing_request": [45, 51], "find_matching_processor": [45, 53], "resolve_processor_server_url": [45, 53], "kill_al": [45, 53], "deploy_host": [45, 53], "deploy_rabbitmq": [45, 53], "deploy_mongodb": [45, 53], "kill_rabbitmq": [45, 53], "kill_mongodb": [45, 53], "kill_host": [45, 53], "kill_processing_work": [45, 53], "kill_processor_serv": [45, 53], "start_native_processor": [45, 53], "start_docker_processor": [45, 53], "start_native_processor_serv": [45, 53], "start_unix_mets_serv": [45, 53], "stop_unix_mets_serv": [45, 53], "docker": [45, 52, 53, 54, 87, 95], "nativ": [45, 53, 54, 64, 87, 95], "expected_format": [45, 61], "on_startup": [45, 63, 65], "on_shutdown": [45, 63, 65], "stop_deployed_ag": [45, 63], "connect_publish": [45, 63, 64], "create_message_queu": [45, 63], "create_processing_messag": [45, 63], "check_if_queue_exist": [45, 63], "query_ocrd_tool_json_from_serv": [45, 63], "push_processor_job": [45, 63], "push_to_processing_queu": [45, 63], "push_to_processor_serv": [45, 63], "get_processor_job": [45, 63, 65], "get_processor_job_log": [45, 63, 65], "remove_from_request_cach": [45, 63], "get_processor_info": [45, 63, 65], "list_processor": [45, 63], "task_sequence_to_processing_job": [45, 63], "run_workflow": [45, 63], "get_workflow_info": [45, 63], "connect_consum": [45, 64], "on_consumed_messag": [45, 64], "process_messag": [45, 64], "publish_to_result_queu": [45, 64], "create_processor_task": [45, 65], "run_processor_task": [45, 65], "get_ocrd_tool": [45, 65], "get_vers": [45, 65], "run_serv": [45, 65], "create_cli": [45, 72], "check_if_locked_pages_for_output_file_grp": [45, 73], "get_locked_pag": [45, 73], "lock_pag": [45, 73], "unlock_pag": [45, 73], "consume_cached_request": [45, 73], "update_request_count": [45, 73], "cache_request": [45, 73], "cancel_dependent_job": [45, 73], "is_caching_requir": [45, 73], "has_workspace_cached_request": [45, 73], "server_addr_process": 51, "server_addr_workflow": 51, "server_addr_workspac": 51, "req_param": 51, "regard": [52, 63], "everi": 52, "insert": 52, "uuid": [52, 56, 57, 60], "statu": [52, 53, 63], "mainli": 52, "track": 52, "finish": 52, "preserv": [52, 56, 60, 87, 91], "shut": 52, "volum": 52, "async": [52, 63, 65, 73, 74], "db_url": 52, "abstract": [53, 64], "config_path": [53, 63, 75], "worker_onli": 53, "server_onli": 53, "docker_onli": 53, "native_onli": 53, "str_names_onli": 53, "unique_onli": 53, "str_onli": 53, "mutual": 53, "exclus": [53, 66, 67], "togeth": 53, "kill": [53, 63], "servic": 53, "grace": [53, 65], "bad": 53, "outcom": 53, "unpredict": 53, "mongodb_url": 53, "rabbitmq_url": 53, "detach": 53, "ports_map": 53, "host_data": 53, "ssh_client": 53, "queue_url": 53, "database_url": 53, "ssh": [53, 87, 95], "paramiko": 53, "sshclient": [53, 54], "pid": [53, 55, 63], "docker_cli": 53, "_queue_url": 53, "_database_url": 53, "agent_address": 53, "keypath": 54, "customdockercli": 54, "enum": [54, 56, 57, 87, 91, 95, 96], "deploi": [54, 63, 87, 95], "mongo_url": 54, "module_nam": 55, "db": [56, 63], "stand": 56, "pydant": 56, "_id": [56, 57, 60], "pydanticobjectid": [56, 57, 60], "revision_id": [56, 57, 60], "datetim": [56, 57, 75], "mongo": [56, 60], "kei": [56, 60, 77, 87, 91, 95], "pair": [56, 60, 93], "record": [56, 60], "pages_lock": [56, 60], "hold": [56, 60], "lock": [56, 60], "all_pag": [56, 60], "happen": [56, 60, 64], "input_file_group": [56, 57], "output_file_group": [56, 57], "123123123": [56, 58], "c7f25615": [56, 58], "fc17": [56, 58], "4365": [56, 58], "a74d": [56, 58], "ad20e1ddbd0": [56, 58], "enumer": [56, 57], "paramtyp": 61, "ctx": 61, "miss": 61, "compat": [61, 82], "certain": 61, "situat": 61, "prompt": 61, "context": [61, 77, 83], "arriv": 61, "processor_class": [62, 64, 65], "abs_path_to_met": 62, "fastapi": [63, 65], "app": 63, "discov": 63, "watch": 63, "commun": 63, "goe": 63, "uvicorn": 63, "somewher": 63, "enable_ack": [63, 64], "occurr": 63, "processing_messag": [63, 64], "processor_server_url": 63, "job_input": [63, 65, 74], "filerespons": [63, 65], "result_messag": [63, 64, 75], "uploadfil": 63, "workflow_job_id": 63, "arch": 64, "githubusercont": 64, "7795705": 64, "203554094": 64, "62ce135a": 64, "b367": 64, "49ba": 64, "9960": 64, "ffe1b7d39b2c": 64, "jpg": 64, "hide": 64, "low": 64, "rabbitmq_addr": 64, "mongodb_addr": [64, 65], "blockingchannel": [64, 66, 67], "deliveri": 64, "deliv": 64, "basicproperti": [64, 66, 67, 71], "result_queu": 64, "connection_attempt": 64, "retry_delai": 64, "intend": 64, "todo": 65, "perform": 65, "localhost": [66, 67, 69, 71], "5672": [66, 67, 69, 71], "queue_nam": [66, 67, 69, 71], "auto_ack": [66, 69], "callback_method": [66, 69], "delivery_tag": [66, 69], "blockingconnect": [66, 67], "credenti": [66, 67, 87, 95], "plaincredenti": [66, 67], "destination_exchang": [66, 67], "source_exchang": [66, 67], "routing_kei": [66, 67], "exchange_nam": [66, 67, 71], "exchange_typ": [66, 67, 71], "durabl": [66, 67], "auto_delet": [66, 67], "intern": [66, 67, 73], "if_unus": [66, 67], "if_empti": [66, 67], "prefetch_s": [66, 67], "prefetch_count": [66, 67], "global_qo": [66, 67], "message_bodi": [66, 67], "created_tim": [66, 70], "ocrd_processing_messag": [66, 70], "ocrd_result_messag": [66, 70], "adapt": [67, 69, 71], "offici": [67, 69, 71], "client_typ": 72, "deploy_typ": [72, 87, 95], "workspace_kei": 73, "by_valu": 73, "decreas": 73, "counter": [73, 81], "job_depend": 73, "func": [75, 82], "millisecond": 75, "workflow_id": 75, "manner": 75, "mongodb_address": 75, "rabbitmq_address": 75, "doc": [75, 87, 98, 99, 100], "pika": 75, "readthedoc": 75, "stabl": 75, "_modul": 75, "html": [75, 87, 93, 97], "urlparamet": 75, "ocrd_all_url": 75, "ocrdenvvari": [76, 77, 78, 101], "ocrdenvconfig": [76, 77, 78, 101], "deprecation_warn": [76, 77, 80, 101], "deprecated_alia": [76, 77, 80, 101], "rename_kwarg": [76, 77, 80, 101], "adjust_canvas_to_rot": [76, 77, 81, 101], "adjust_canvas_to_transposit": [76, 77, 81, 101], "bbox_from_point": [76, 77, 81, 101], "bbox_from_polygon": [76, 77, 81, 101], "bbox_from_xywh": [76, 77, 81, 101], "coordinates_for_seg": [76, 77, 81, 101], "coordinates_of_seg": [76, 77, 81, 101], "image_from_polygon": [76, 77, 81, 101], "points_from_bbox": [76, 77, 81, 101], "points_from_polygon": [76, 77, 81, 101], "points_from_x0y0x1y1": [76, 77, 81, 101], "points_from_xywh": [76, 77, 81, 101], "points_from_y0x0y1x1": [76, 77, 81, 101], "polygon_from_bbox": [76, 77, 81, 101], "polygon_from_point": [76, 77, 81, 101], "polygon_from_x0y0x1y1": [76, 77, 81, 101], "polygon_from_xywh": [76, 77, 81, 101], "polygon_mask": [76, 77, 81, 101], "rotate_coordin": [76, 77, 81, 101], "shift_coordin": [76, 77, 81, 101], "scale_coordin": [76, 77, 81, 101], "transform_coordin": [76, 77, 81, 101], "transpose_coordin": [76, 77, 81, 101], "xywh_from_bbox": [76, 77, 81, 101], "xywh_from_point": [76, 77, 81, 101], "xywh_from_polygon": [76, 77, 81, 101], "introspect": [76, 77, 101], "freeze_arg": [76, 77, 82, 101], "membernam": [76, 77, 82, 101], "set_json_key_value_overrid": [76, 77, 82, 101], "disablelog": [76, 77, 83, 101], "getlevelnam": [76, 77, 83, 101], "getlogg": [76, 77, 83, 101], "initlog": [76, 77, 83, 101], "setoverrideloglevel": [76, 77, 83, 101], "abspath": [76, 77, 84, 101], "directory_s": [76, 77, 84, 101], "is_file_in_directori": [76, 77, 84, 101], "get_ocrd_tool_json": [76, 77, 84, 101], "get_moduledir": [76, 77, 84, 101], "get_processor_resource_typ": [76, 77, 84, 101], "guess_media_typ": [76, 77, 84, 101], "pushd_popd": [76, 77, 84, 101], "unzip_file_to_dir": [76, 77, 84, 101], "atomic_writ": [76, 77, 84, 101], "redirect_stderr_and_stdout_to_fil": [76, 77, 84, 101], "assert_file_grp_cardin": [76, 77, 85, 101], "concat_pad": [76, 77, 85, 101], "get_local_filenam": [76, 77, 85, 101], "is_local_filenam": [76, 77, 85, 101], "is_str": [76, 77, 85, 101], "nth_url_seg": [76, 77, 85, 101], "parse_json_string_or_fil": [76, 77, 85, 101], "parse_json_string_with_com": [76, 77, 85, 101], "remove_non_path_from_url": [76, 77, 85, 101], "safe_filenam": [76, 77, 85, 101], "circumst": 77, "offset": [77, 81], "compos": [77, 81], "along": [77, 81], "invari": 77, "travers": [77, 93], "bottom": 77, "rotate_imag": 77, "crop_imag": 77, "transpose_imag": [77, 81], "safe": [77, 85], "transpos": [77, 81], "x_from_i": 77, "4": [77, 85], "x0": [77, 81], "y0": [77, 81], "x1": [77, 81], "y1": [77, 81], "100": 77, "implicitli": 77, "cv2": 77, "h": 77, "tesserocr": [77, 87, 91], "x0y0x1y1": [77, 81], "y0x0y1x1": 77, "swap": 77, "generate_rang": 77, "oop": 77, "mimetype_pag": 77, "ext_to_mim": 77, "mime_to_ext": 77, "has_default": [77, 78], "is_set": [77, 78], "raw_valu": [77, 78], "most": [78, 87, 91, 93], "cumbersom": 78, "explicit": 78, "better": 78, "solv": 78, "streamlin": 78, "parser": 78, "lambda": 78, "vairabl": 78, "callabl": 78, "whatev": 78, "parseabl": 78, "defer": 78, "evalu": 78, "wrap_text": 78, "indent_text": 78, "stacklevel": 80, "alias": 80, "favor": 80, "func_nam": 80, "stackoverflow": 80, "question": 80, "49802412": 80, "user2357112": 80, "monica": 80, "canva": 81, "encompass": 81, "flip": 81, "construct": [81, 87, 89, 90, 91, 93, 94, 95, 96, 97, 98, 99, 100], "opposit": 81, "upper": 81, "left": 81, "around": [81, 83], "accommod": 81, "round": 81, "everyth": [81, 85], "hull": 81, "touch": 81, "shrunk": 81, "minx": 81, "mini": 81, "maxx": 81, "maxi": 81, "xyxi": 81, "yxyx": 81, "black": 81, "insid": 81, "orig": 81, "homogen": 81, "3d": 81, "composit": 81, "entail": 81, "necessarili": 81, "amount": 81, "vector": 81, "factor": 81, "scale": 81, "augment": 81, "2d": 81, "extra": 81, "ones": 81, "multipli": 81, "flip_left_right": 81, "axi": 81, "flip_top_bottom": 81, "rotate_180": 81, "rotate_90": 81, "rotate_270": 81, "transvers": 81, "simplifi": 82, "mutabl": 82, "dictionari": [82, 93], "immut": 82, "taken": 82, "post": [82, 87, 91], "class_": 82, "obj": [82, 87, 89, 90, 91, 94, 95, 96], "kvpair": 82, "lastresort": 83, "usual": 83, "programmat": 83, "2023": 83, "08": 83, "20": 83, "less": 83, "intrus": 83, "easier": 83, "surpris": 83, "exactli": [83, 85], "handler": 83, "child": [83, 93], "propag": 83, "ancestor": 83, "propagationshylogg": 83, "wasn": 83, "explicitli": [83, 87, 91], "builtin_onli": 83, "force_reinit": 83, "reset": 83, "basicconfig": 83, "hard": 83, "_initialized_flag": 83, "calculc": 84, "special": 84, "design": 84, "application_xml": 84, "applic": [84, 87, 91], "newcwd": 84, "tempdir": 84, "path_to_zip": [84, 87, 92], "output_directori": 84, "fpath": 84, "assert": 85, "concaten": [85, 86, 87, 93, 101], "zero": 85, "pad": 85, "digit": 85, "guarante": 85, "caller": 85, "ultim": 85, "delimit": 85, "interspers": 85, "sanit": 85, "parametervalid": [86, 87, 94, 101], "workspacevalid": [86, 87, 97, 101], "check_file_grp": [86, 87, 97, 101], "pagevalid": [86, 87, 93, 101], "ocrdtoolvalid": [86, 87, 91, 101], "ocrdresourcelistvalid": [86, 87, 96, 101], "ocrdzipvalid": [86, 87, 92, 101], "xsdvalid": [86, 87, 98, 99, 100, 101], "xsdmetsvalid": [86, 87, 98, 101], "xsdpagevalid": [86, 87, 99, 101], "processingserverconfigvalid": [86, 87, 95, 101], "ocrdnetworkmessagevalid": [86, 87, 90, 101], "validate_message_process": [86, 87, 90, 101], "validate_message_result": [86, 87, 90, 101], "json_valid": [86, 87, 101], "extend_with_default": [86, 87, 89, 101], "jsonvalid": [86, 87, 89, 90, 91, 94, 95, 96, 101], "ocrd_network_message_valid": [86, 87, 101], "ocrd_tool_valid": [86, 87, 101], "ocrd_zip_valid": [86, 87, 101], "page_valid": [86, 87, 101], "consistencyerror": [86, 87, 93, 101], "coordinateconsistencyerror": [86, 87, 93, 101], "coordinatevalidityerror": [86, 87, 93, 101], "compare_without_whitespac": [86, 87, 93, 101], "page_get_reading_ord": [86, 87, 93, 101], "make_poli": [86, 87, 93, 101], "make_lin": [86, 87, 93, 101], "validate_consist": [86, 87, 93, 101], "get_text": [86, 87, 93, 101], "set_text": [86, 87, 93, 101], "parameter_valid": [86, 87, 101], "processing_server_config_valid": [86, 87, 101], "resource_list_valid": [86, 87, 101], "workspace_valid": [86, 87, 101], "xsd_mets_valid": [86, 87, 101], "xsd_page_valid": [86, 87, 101], "xsd_valid": [86, 87, 101], "parametersagain": [87, 94], "src_dir": [87, 97], "page_strict": [87, 97], "workspacec": [87, 97], "temporarili": [87, 97], "check_baselin": [87, 93], "check_coord": [87, 93], "validator_class": [87, 89, 90, 91, 95, 96], "jsonschema": [87, 89, 90, 91, 95, 96], "draft6valid": [87, 89, 90, 91, 95, 96], "defaultvalidatingdraft6valid": [87, 89, 90, 91, 95, 96], "additionalproperti": [87, 91, 95, 96], "dockerhub": [87, 91], "git_url": [87, 91], "gitlab": [87, 91], "patternproperti": [87, 91, 96], "project": [87, 91], "preprocess": [87, 91], "recognit": [87, 91], "train": [87, 91], "long": [87, 91], "term": [87, 91], "qualiti": [87, 91], "assur": [87, 91], "concis": [87, 91], "cacheabl": [87, 91], "larg": [87, 91], "won": [87, 91], "octet": [87, 91], "stream": [87, 91], "traineddata": [87, 91], "recogn": [87, 91], "while": [87, 91], "eynollah": [87, 91], "exclusivemaximum": [87, 91], "exclud": [87, 91], "exclusiveminimum": [87, 91], "minimum": [87, 91, 95], "subtyp": [87, 91], "multipleof": [87, 91], "lookup": [87, 91], "version_rang": [87, 91, 96], "pep": [87, 91, 96], "440": [87, 91, 96], "character": [87, 91], "despeckl": [87, 91], "dewarp": [87, 91], "identif": [87, 91], "nontext": [87, 91], "classif": [87, 91], "major": [87, 91], "minor": [87, 91], "patch": [87, 91], "pattern": [87, 91, 95], "resource_list": [87, 96], "skip_checksum": [87, 92], "skip_bag": [87, 92], "skip_unzip": [87, 92], "skip_delet": [87, 92], "schema_url": [87, 98, 99, 100], "elementtre": [87, 98, 99, 100], "anyof": [87, 95], "hostnam": [87, 95], "ipv4": [87, 95], "65535": [87, 95], "oneof": [87, 95], "path_to_privkei": [87, 95], "privat": [87, 95], "web": [87, 95], "draft": [87, 95], "2020": [87, 95], "12": [87, 95], "broker": [87, 95], "ref": [87, 95], "ip": [87, 95], "machin": [87, 95], "skip_deploy": [87, 95], "yourself": [87, 95], "ci": [87, 95], "ocropi": [87, 95], "olena": [87, 95], "minitem": [87, 95], "number_of_inst": [87, 95], "172": [87, 95], "17": [87, 95], "8080": [87, 95], "process_queu": [87, 95], "textual": 93, "transcript": 93, "inconsist": 93, "outer": 93, "inner": 93, "confin": 93, "properli": 93, "offend": 93, "reason": 93, "contigu": 93, "problem": 93, "compar": 93, "whitespac": 93, "ro": 93, "rogroup": 93, "polygon_point": 93, "line_point": 93, "linestr": 93, "joinrel": 93, "concatenate_with": 93, "best": 93, "highest": 93, "score": 93}, "objects": {"": [[1, 0, 0, "-", "ocrd"], [32, 0, 0, "-", "ocrd_modelfactory"], [34, 0, 0, "-", "ocrd_models"], [45, 0, 0, "-", "ocrd_network"], [77, 0, 0, "-", "ocrd_utils"], [87, 0, 0, "-", "ocrd_validators"]], "ocrd": [[2, 0, 0, "-", "cli"], [12, 0, 0, "-", "constants"], [13, 0, 0, "-", "decorators"], [18, 0, 0, "-", "mets_server"], [19, 0, 0, "-", "processor"], [25, 0, 0, "-", "resolver"], [26, 0, 0, "-", "resource_manager"], [27, 0, 0, "-", "task_sequence"], [28, 0, 0, "-", "workspace"], [29, 0, 0, "-", "workspace_backup"], [30, 0, 0, "-", "workspace_bagger"], [2, 7, 1, "cmdoption-ocrd-l", "--log-level"], [2, 7, 1, "cmdoption-ocrd-version", "--version"], [2, 7, 1, "cmdoption-ocrd-l", "-l"]], "ocrd.cli": [[3, 0, 0, "-", "bashlib"], [4, 0, 0, "-", "log"], [5, 0, 0, "-", "network"], [6, 0, 0, "-", "ocrd_tool"], [7, 0, 0, "-", "process"], [8, 0, 0, "-", "resmgr"], [9, 0, 0, "-", "validate"], [10, 0, 0, "-", "workspace"], [11, 0, 0, "-", "zip"]], "ocrd.cli.log": [[4, 1, 1, "", "LogCtx"]], "ocrd.cli.log.LogCtx": [[4, 2, 1, "", "log"]], "ocrd.cli.ocrd_tool": [[6, 1, 1, "", "OcrdToolCtx"]], "ocrd.cli.resmgr": [[8, 3, 1, "", "print_resources"]], "ocrd.cli.workspace": [[10, 1, 1, "", "WorkspaceCtx"]], "ocrd.decorators": [[13, 3, 1, "", "check_and_run_network_agent"], [14, 0, 0, "-", "loglevel_option"], [15, 0, 0, "-", "mets_find_options"], [16, 0, 0, "-", "ocrd_cli_options"], [13, 3, 1, "", "ocrd_cli_wrap_processor"], [17, 0, 0, "-", "parameter_option"]], "ocrd.decorators.loglevel_option": [[14, 3, 1, "", "ocrd_loglevel"]], "ocrd.decorators.mets_find_options": [[15, 3, 1, "", "mets_find_options"]], "ocrd.decorators.ocrd_cli_options": [[16, 3, 1, "", "ocrd_cli_options"]], "ocrd.decorators.parameter_option": [[17, 3, 1, "", "parameter_option"], [17, 3, 1, "", "parameter_override_option"]], "ocrd.mets_server": [[18, 1, 1, "", "ClientSideOcrdMets"], [18, 1, 1, "", "OcrdAgentListModel"], [18, 1, 1, "", "OcrdAgentModel"], [18, 1, 1, "", "OcrdFileGroupListModel"], [18, 1, 1, "", "OcrdFileListModel"], [18, 1, 1, "", "OcrdFileModel"], [18, 1, 1, "", "OcrdMetsServer"]], "ocrd.mets_server.ClientSideOcrdMets": [[18, 2, 1, "", "add_agent"], [18, 2, 1, "", "add_file"], [18, 4, 1, "", "agents"], [18, 4, 1, "", "file_groups"], [18, 2, 1, "", "find_all_files"], [18, 2, 1, "", "find_files"], [18, 2, 1, "", "reload"], [18, 2, 1, "", "save"], [18, 2, 1, "", "stop"], [18, 4, 1, "", "unique_identifier"], [18, 4, 1, "", "workspace_path"]], "ocrd.mets_server.OcrdAgentListModel": [[18, 5, 1, "", "agents"], [18, 2, 1, "", "create"]], "ocrd.mets_server.OcrdAgentModel": [[18, 2, 1, "", "create"], [18, 5, 1, "", "name"], [18, 5, 1, "", "notes"], [18, 5, 1, "", "otherrole"], [18, 5, 1, "", "othertype"], [18, 5, 1, "", "role"], [18, 5, 1, "", "type"]], "ocrd.mets_server.OcrdFileGroupListModel": [[18, 2, 1, "", "create"], [18, 5, 1, "", "file_groups"]], "ocrd.mets_server.OcrdFileListModel": [[18, 2, 1, "", "create"], [18, 5, 1, "", "files"]], "ocrd.mets_server.OcrdFileModel": [[18, 2, 1, "", "create"], [18, 5, 1, "", "file_grp"], [18, 5, 1, "", "file_id"], [18, 5, 1, "", "local_filename"], [18, 5, 1, "", "mimetype"], [18, 5, 1, "", "page_id"], [18, 5, 1, "", "url"]], "ocrd.mets_server.OcrdMetsServer": [[18, 2, 1, "", "shutdown"], [18, 2, 1, "", "startup"]], "ocrd.processor": [[20, 0, 0, "-", "base"], [21, 0, 0, "-", "builtin"], [24, 0, 0, "-", "helpers"]], "ocrd.processor.base": [[20, 1, 1, "", "Processor"], [20, 3, 1, "", "generate_processor_help"], [20, 3, 1, "", "run_cli"], [20, 3, 1, "", "run_processor"]], "ocrd.processor.base.Processor": [[20, 2, 1, "", "add_metadata"], [20, 4, 1, "", "input_files"], [20, 2, 1, "", "list_all_resources"], [20, 4, 1, "", "module"], [20, 4, 1, "", "moduledir"], [20, 2, 1, "", "process"], [20, 2, 1, "", "resolve_resource"], [20, 2, 1, "", "show_help"], [20, 2, 1, "", "show_version"], [20, 2, 1, "", "verify"], [20, 2, 1, "", "zip_input_files"]], "ocrd.processor.builtin": [[22, 0, 0, "-", "dummy"], [23, 0, 0, "-", "dummy_processor"]], "ocrd.processor.builtin.dummy_processor": [[23, 1, 1, "", "DummyProcessor"]], "ocrd.processor.builtin.dummy_processor.DummyProcessor": [[23, 2, 1, "", "process"]], "ocrd.processor.helpers": [[24, 3, 1, "", "generate_processor_help"], [24, 3, 1, "", "run_cli"], [24, 3, 1, "", "run_processor"]], "ocrd.resolver": [[25, 1, 1, "", "Resolver"]], "ocrd.resolver.Resolver": [[25, 2, 1, "", "download_to_directory"], [25, 2, 1, "", "resolve_mets_arguments"], [25, 2, 1, "", "workspace_from_nothing"], [25, 2, 1, "", "workspace_from_url"]], "ocrd.resource_manager": [[26, 1, 1, "", "OcrdResourceManager"]], "ocrd.resource_manager.OcrdResourceManager": [[26, 2, 1, "", "add_to_user_database"], [26, 4, 1, "", "default_resource_dir"], [26, 2, 1, "", "download"], [26, 2, 1, "", "list_available"], [26, 2, 1, "", "list_installed"], [26, 2, 1, "", "load_resource_list"], [26, 2, 1, "", "location_to_resource_dir"], [26, 2, 1, "", "parameter_usage"], [26, 2, 1, "", "resource_dir_to_location"], [26, 2, 1, "", "save_user_list"], [26, 4, 1, "", "userdir"], [26, 4, 1, "", "xdg_config_home"], [26, 4, 1, "", "xdg_data_home"]], "ocrd.task_sequence": [[27, 1, 1, "", "ProcessorTask"], [27, 3, 1, "", "run_tasks"], [27, 3, 1, "", "validate_tasks"]], "ocrd.task_sequence.ProcessorTask": [[27, 4, 1, "", "ocrd_tool_json"], [27, 2, 1, "", "parse"], [27, 2, 1, "", "validate"]], "ocrd.workspace": [[28, 1, 1, "", "Workspace"]], "ocrd.workspace.Workspace": [[28, 2, 1, "", "add_file"], [28, 2, 1, "", "download_file"], [28, 2, 1, "", "download_url"], [28, 2, 1, "", "find_files"], [28, 2, 1, "", "image_from_page"], [28, 2, 1, "", "image_from_segment"], [28, 2, 1, "", "merge"], [28, 2, 1, "", "reload_mets"], [28, 2, 1, "", "remove_file"], [28, 2, 1, "", "remove_file_group"], [28, 2, 1, "", "rename_file_group"], [28, 2, 1, "", "resolve_image_as_pil"], [28, 2, 1, "", "resolve_image_exif"], [28, 2, 1, "", "save_image_file"], [28, 2, 1, "", "save_mets"]], "ocrd.workspace_backup": [[29, 1, 1, "", "WorkspaceBackup"], [29, 1, 1, "", "WorkspaceBackupManager"]], "ocrd.workspace_backup.WorkspaceBackup": [[29, 2, 1, "", "from_path"]], "ocrd.workspace_backup.WorkspaceBackupManager": [[29, 2, 1, "", "add"], [29, 2, 1, "", "list"], [29, 2, 1, "", "restore"], [29, 2, 1, "", "undo"]], "ocrd.workspace_bagger": [[30, 1, 1, "", "WorkspaceBagger"]], "ocrd.workspace_bagger.WorkspaceBagger": [[30, 2, 1, "", "bag"], [30, 2, 1, "", "recreate_checksums"], [30, 2, 1, "", "spill"], [30, 2, 1, "", "validate"]], "ocrd_modelfactory": [[32, 3, 1, "", "exif_from_filename"], [32, 3, 1, "", "page_from_file"], [32, 3, 1, "", "page_from_image"]], "ocrd_models": [[35, 0, 0, "-", "constants"], [36, 0, 0, "-", "ocrd_agent"], [37, 0, 0, "-", "ocrd_exif"], [38, 0, 0, "-", "ocrd_file"], [39, 0, 0, "-", "ocrd_mets"], [40, 0, 0, "-", "ocrd_page"], [41, 0, 0, "-", "ocrd_xml_base"], [42, 0, 0, "-", "report"], [43, 0, 0, "-", "utils"]], "ocrd_models.ocrd_agent": [[36, 1, 1, "", "ClientSideOcrdAgent"], [36, 1, 1, "", "OcrdAgent"]], "ocrd_models.ocrd_agent.OcrdAgent": [[36, 4, 1, "", "name"], [36, 4, 1, "", "notes"], [36, 4, 1, "", "otherrole"], [36, 4, 1, "", "othertype"], [36, 4, 1, "", "role"], [36, 4, 1, "", "type"]], "ocrd_models.ocrd_exif": [[37, 1, 1, "", "OcrdExif"]], "ocrd_models.ocrd_exif.OcrdExif": [[37, 5, 1, "", "height"], [37, 5, 1, "", "photometricInterpretation"], [37, 5, 1, "", "resolution"], [37, 5, 1, "", "resolutionUnit"], [37, 2, 1, "", "run_identify"], [37, 2, 1, "", "run_pil"], [37, 2, 1, "", "to_xml"], [37, 5, 1, "", "width"], [37, 5, 1, "", "xResolution"], [37, 5, 1, "", "yResolution"]], "ocrd_models.ocrd_file": [[38, 1, 1, "", "ClientSideOcrdFile"], [38, 1, 1, "", "OcrdFile"]], "ocrd_models.ocrd_file.OcrdFile": [[38, 4, 1, "", "ID"], [38, 4, 1, "", "basename"], [38, 4, 1, "", "basename_without_extension"], [38, 4, 1, "", "extension"], [38, 4, 1, "", "fileGrp"], [38, 4, 1, "", "local_filename"], [38, 4, 1, "", "loctypes"], [38, 4, 1, "", "mimetype"], [38, 4, 1, "", "pageId"], [38, 4, 1, "", "url"]], "ocrd_models.ocrd_mets": [[39, 1, 1, "", "OcrdMets"]], "ocrd_models.ocrd_mets.OcrdMets": [[39, 2, 1, "", "add_agent"], [39, 2, 1, "", "add_file"], [39, 2, 1, "", "add_file_group"], [39, 4, 1, "", "agents"], [39, 2, 1, "", "empty_mets"], [39, 4, 1, "", "file_groups"], [39, 2, 1, "", "find_all_files"], [39, 2, 1, "", "find_files"], [39, 2, 1, "", "get_physical_page_for_file"], [39, 2, 1, "", "get_physical_pages"], [39, 2, 1, "", "merge"], [39, 4, 1, "", "physical_pages"], [39, 2, 1, "", "refresh_caches"], [39, 2, 1, "", "remove_file"], [39, 2, 1, "", "remove_file_group"], [39, 2, 1, "", "remove_one_file"], [39, 2, 1, "", "remove_physical_page"], [39, 2, 1, "", "remove_physical_page_fptr"], [39, 2, 1, "", "rename_file_group"], [39, 2, 1, "", "set_physical_page_for_file"], [39, 4, 1, "", "unique_identifier"]], "ocrd_models.ocrd_page": [[40, 1, 1, "", "AdvertRegionType"], [40, 1, 1, "", "AlternativeImageType"], [40, 1, 1, "", "BaselineType"], [40, 1, 1, "", "BorderType"], [40, 1, 1, "", "ChartRegionType"], [40, 1, 1, "", "ChemRegionType"], [40, 1, 1, "", "CoordsType"], [40, 1, 1, "", "CustomRegionType"], [40, 1, 1, "", "GlyphType"], [40, 1, 1, "", "GraphemeBaseType"], [40, 1, 1, "", "GraphemeGroupType"], [40, 1, 1, "", "GraphemeType"], [40, 1, 1, "", "GraphemesType"], [40, 1, 1, "", "GraphicRegionType"], [40, 1, 1, "", "GridPointsType"], [40, 1, 1, "", "GridType"], [40, 1, 1, "", "ImageRegionType"], [40, 1, 1, "", "LabelType"], [40, 1, 1, "", "LabelsType"], [40, 1, 1, "", "LayerType"], [40, 1, 1, "", "LayersType"], [40, 1, 1, "", "LineDrawingRegionType"], [40, 1, 1, "", "MapRegionType"], [40, 1, 1, "", "MathsRegionType"], [40, 1, 1, "", "MetadataItemType"], [40, 1, 1, "", "MetadataType"], [40, 1, 1, "", "MusicRegionType"], [40, 1, 1, "", "NoiseRegionType"], [40, 1, 1, "", "NonPrintingCharType"], [40, 5, 1, "", "OcrdPage"], [40, 1, 1, "", "OrderedGroupIndexedType"], [40, 1, 1, "", "OrderedGroupType"], [40, 1, 1, "", "PageType"], [40, 1, 1, "", "PcGtsType"], [40, 1, 1, "", "PrintSpaceType"], [40, 1, 1, "", "ReadingOrderType"], [40, 1, 1, "", "RegionRefIndexedType"], [40, 1, 1, "", "RegionRefType"], [40, 1, 1, "", "RegionType"], [40, 1, 1, "", "RelationType"], [40, 1, 1, "", "RelationsType"], [40, 1, 1, "", "RolesType"], [40, 1, 1, "", "SeparatorRegionType"], [40, 1, 1, "", "TableCellRoleType"], [40, 1, 1, "", "TableRegionType"], [40, 1, 1, "", "TextEquivType"], [40, 1, 1, "", "TextLineType"], [40, 1, 1, "", "TextRegionType"], [40, 1, 1, "", "TextStyleType"], [40, 1, 1, "", "UnknownRegionType"], [40, 1, 1, "", "UnorderedGroupIndexedType"], [40, 1, 1, "", "UnorderedGroupType"], [40, 1, 1, "", "UserAttributeType"], [40, 1, 1, "", "UserDefinedType"], [40, 1, 1, "", "WordType"], [40, 3, 1, "", "parse"], [40, 3, 1, "", "parseEtree"], [40, 3, 1, "", "parseString"], [40, 3, 1, "", "to_xml"]], "ocrd_models.ocrd_page.AdvertRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_bgColour"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_bgColour"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ColourSimpleType"]], "ocrd_models.ocrd_page.AlternativeImageType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_conf"], [40, 2, 1, "", "get_filename"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_conf"], [40, 2, 1, "", "set_filename"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ConfSimpleType"]], "ocrd_models.ocrd_page.BaselineType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_conf"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_points"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_conf"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_points"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ConfSimpleType"], [40, 2, 1, "", "validate_PointsType"], [40, 5, 1, "", "validate_PointsType_patterns_"]], "ocrd_models.ocrd_page.BorderType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Coords"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_Coords"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.ChartRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_bgColour"], [40, 2, 1, "", "get_embText"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_numColours"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_bgColour"], [40, 2, 1, "", "set_embText"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_numColours"], [40, 2, 1, "", "set_orientation"], [40, 2, 1, "", "set_type"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ChartTypeSimpleType"], [40, 2, 1, "", "validate_ColourSimpleType"]], "ocrd_models.ocrd_page.ChemRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_bgColour"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_bgColour"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ColourSimpleType"]], "ocrd_models.ocrd_page.CoordsType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_conf"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_points"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_conf"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_points"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ConfSimpleType"], [40, 2, 1, "", "validate_PointsType"], [40, 5, 1, "", "validate_PointsType_patterns_"]], "ocrd_models.ocrd_page.CustomRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_type"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.GlyphType": [[40, 2, 1, "", "add_AlternativeImage"], [40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "add_TextEquiv"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_AlternativeImage"], [40, 2, 1, "", "get_Coords"], [40, 2, 1, "", "get_Graphemes"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_TextEquiv"], [40, 2, 1, "", "get_TextStyle"], [40, 2, 1, "", "get_UserDefined"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_ligature"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_production"], [40, 2, 1, "", "get_script"], [40, 2, 1, "", "get_symbol"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_AlternativeImage_at"], [40, 2, 1, "", "insert_Labels_at"], [40, 2, 1, "", "insert_TextEquiv_at"], [40, 2, 1, "", "invalidate_AlternativeImage"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_AlternativeImage_at"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "replace_TextEquiv_at"], [40, 2, 1, "", "set_AlternativeImage"], [40, 2, 1, "", "set_Coords"], [40, 2, 1, "", "set_Graphemes"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_TextEquiv"], [40, 2, 1, "", "set_TextStyle"], [40, 2, 1, "", "set_UserDefined"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_ligature"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_production"], [40, 2, 1, "", "set_script"], [40, 2, 1, "", "set_symbol"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ProductionSimpleType"], [40, 2, 1, "", "validate_ScriptSimpleType"]], "ocrd_models.ocrd_page.GraphemeBaseType": [[40, 2, 1, "", "add_TextEquiv"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_TextEquiv"], [40, 2, 1, "", "get_charType"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_extensiontype_"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_index"], [40, 2, 1, "", "get_ligature"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_TextEquiv_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_TextEquiv_at"], [40, 2, 1, "", "set_TextEquiv"], [40, 2, 1, "", "set_charType"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_extensiontype_"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_index"], [40, 2, 1, "", "set_ligature"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.GraphemeGroupType": [[40, 2, 1, "", "add_Grapheme"], [40, 2, 1, "", "add_NonPrintingChar"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Grapheme"], [40, 2, 1, "", "get_NonPrintingChar"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_Grapheme_at"], [40, 2, 1, "", "insert_NonPrintingChar_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_Grapheme_at"], [40, 2, 1, "", "replace_NonPrintingChar_at"], [40, 2, 1, "", "set_Grapheme"], [40, 2, 1, "", "set_NonPrintingChar"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.GraphemeType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Coords"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_Coords"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.GraphemesType": [[40, 2, 1, "", "add_Grapheme"], [40, 2, 1, "", "add_GraphemeGroup"], [40, 2, 1, "", "add_NonPrintingChar"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Grapheme"], [40, 2, 1, "", "get_GraphemeGroup"], [40, 2, 1, "", "get_NonPrintingChar"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_GraphemeGroup_at"], [40, 2, 1, "", "insert_Grapheme_at"], [40, 2, 1, "", "insert_NonPrintingChar_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_GraphemeGroup_at"], [40, 2, 1, "", "replace_Grapheme_at"], [40, 2, 1, "", "replace_NonPrintingChar_at"], [40, 2, 1, "", "set_Grapheme"], [40, 2, 1, "", "set_GraphemeGroup"], [40, 2, 1, "", "set_NonPrintingChar"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.GraphicRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_embText"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_numColours"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_embText"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_numColours"], [40, 2, 1, "", "set_orientation"], [40, 2, 1, "", "set_type"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_GraphicsTypeSimpleType"]], "ocrd_models.ocrd_page.GridPointsType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_index"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_points"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_index"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_points"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_PointsType"], [40, 5, 1, "", "validate_PointsType_patterns_"]], "ocrd_models.ocrd_page.GridType": [[40, 2, 1, "", "add_GridPoints"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_GridPoints"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_GridPoints_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_GridPoints_at"], [40, 2, 1, "", "set_GridPoints"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.ImageRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_bgColour"], [40, 2, 1, "", "get_colourDepth"], [40, 2, 1, "", "get_embText"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_bgColour"], [40, 2, 1, "", "set_colourDepth"], [40, 2, 1, "", "set_embText"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ColourDepthSimpleType"], [40, 2, 1, "", "validate_ColourSimpleType"]], "ocrd_models.ocrd_page.LabelType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "get_value"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_type"], [40, 2, 1, "", "set_value"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.LabelsType": [[40, 2, 1, "", "add_Label"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Label"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_externalId"], [40, 2, 1, "", "get_externalModel"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_prefix"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_Label_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_Label_at"], [40, 2, 1, "", "set_Label"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_externalId"], [40, 2, 1, "", "set_externalModel"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_prefix"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.LayerType": [[40, 2, 1, "", "add_RegionRef"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_RegionRef"], [40, 2, 1, "", "get_caption"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_zIndex"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_RegionRef_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_RegionRef_at"], [40, 2, 1, "", "set_RegionRef"], [40, 2, 1, "", "set_caption"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_zIndex"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.LayersType": [[40, 2, 1, "", "add_Layer"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Layer"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_Layer_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_Layer_at"], [40, 2, 1, "", "set_Layer"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.LineDrawingRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_bgColour"], [40, 2, 1, "", "get_embText"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "get_penColour"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_bgColour"], [40, 2, 1, "", "set_embText"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 2, 1, "", "set_penColour"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ColourSimpleType"]], "ocrd_models.ocrd_page.MapRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.MathsRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_bgColour"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_bgColour"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ColourSimpleType"]], "ocrd_models.ocrd_page.MetadataItemType": [[40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_date"], [40, 2, 1, "", "get_name"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "get_value"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_Labels_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_date"], [40, 2, 1, "", "set_name"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_type"], [40, 2, 1, "", "set_value"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.MetadataType": [[40, 2, 1, "", "add_MetadataItem"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Comments"], [40, 2, 1, "", "get_Created"], [40, 2, 1, "", "get_Creator"], [40, 2, 1, "", "get_LastChange"], [40, 2, 1, "", "get_MetadataItem"], [40, 2, 1, "", "get_UserDefined"], [40, 2, 1, "", "get_externalRef"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_MetadataItem_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_MetadataItem_at"], [40, 2, 1, "", "set_Comments"], [40, 2, 1, "", "set_Created"], [40, 2, 1, "", "set_Creator"], [40, 2, 1, "", "set_LastChange"], [40, 2, 1, "", "set_MetadataItem"], [40, 2, 1, "", "set_UserDefined"], [40, 2, 1, "", "set_externalRef"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.MusicRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_bgColour"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_bgColour"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ColourSimpleType"]], "ocrd_models.ocrd_page.NoiseRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.NonPrintingCharType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.OrderedGroupIndexedType": [[40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "add_OrderedGroupIndexed"], [40, 2, 1, "", "add_RegionRefIndexed"], [40, 2, 1, "", "add_UnorderedGroupIndexed"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "clear_AllIndexed"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "extend_AllIndexed"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_AllIndexed"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_OrderedGroupIndexed"], [40, 2, 1, "", "get_RegionRefIndexed"], [40, 2, 1, "", "get_UnorderedGroupIndexed"], [40, 2, 1, "", "get_UserDefined"], [40, 2, 1, "", "get_caption"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_continuation"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_index"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_regionRef"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_Labels_at"], [40, 2, 1, "", "insert_OrderedGroupIndexed_at"], [40, 2, 1, "", "insert_RegionRefIndexed_at"], [40, 2, 1, "", "insert_UnorderedGroupIndexed_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "replace_OrderedGroupIndexed_at"], [40, 2, 1, "", "replace_RegionRefIndexed_at"], [40, 2, 1, "", "replace_UnorderedGroupIndexed_at"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_OrderedGroupIndexed"], [40, 2, 1, "", "set_RegionRefIndexed"], [40, 2, 1, "", "set_UnorderedGroupIndexed"], [40, 2, 1, "", "set_UserDefined"], [40, 2, 1, "", "set_caption"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_continuation"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_index"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_regionRef"], [40, 2, 1, "", "set_type"], [40, 2, 1, "", "sort_AllIndexed"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_GroupTypeSimpleType"]], "ocrd_models.ocrd_page.OrderedGroupType": [[40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "add_OrderedGroupIndexed"], [40, 2, 1, "", "add_RegionRefIndexed"], [40, 2, 1, "", "add_UnorderedGroupIndexed"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "clear_AllIndexed"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "extend_AllIndexed"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_AllIndexed"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_OrderedGroupIndexed"], [40, 2, 1, "", "get_RegionRefIndexed"], [40, 2, 1, "", "get_UnorderedGroupIndexed"], [40, 2, 1, "", "get_UserDefined"], [40, 2, 1, "", "get_caption"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_continuation"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_regionRef"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_Labels_at"], [40, 2, 1, "", "insert_OrderedGroupIndexed_at"], [40, 2, 1, "", "insert_RegionRefIndexed_at"], [40, 2, 1, "", "insert_UnorderedGroupIndexed_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "replace_OrderedGroupIndexed_at"], [40, 2, 1, "", "replace_RegionRefIndexed_at"], [40, 2, 1, "", "replace_UnorderedGroupIndexed_at"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_OrderedGroupIndexed"], [40, 2, 1, "", "set_RegionRefIndexed"], [40, 2, 1, "", "set_UnorderedGroupIndexed"], [40, 2, 1, "", "set_UserDefined"], [40, 2, 1, "", "set_caption"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_continuation"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_regionRef"], [40, 2, 1, "", "set_type"], [40, 2, 1, "", "sort_AllIndexed"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_GroupTypeSimpleType"]], "ocrd_models.ocrd_page.PageType": [[40, 2, 1, "", "add_AdvertRegion"], [40, 2, 1, "", "add_AlternativeImage"], [40, 2, 1, "", "add_ChartRegion"], [40, 2, 1, "", "add_ChemRegion"], [40, 2, 1, "", "add_CustomRegion"], [40, 2, 1, "", "add_GraphicRegion"], [40, 2, 1, "", "add_ImageRegion"], [40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "add_LineDrawingRegion"], [40, 2, 1, "", "add_MapRegion"], [40, 2, 1, "", "add_MathsRegion"], [40, 2, 1, "", "add_MusicRegion"], [40, 2, 1, "", "add_NoiseRegion"], [40, 2, 1, "", "add_SeparatorRegion"], [40, 2, 1, "", "add_TableRegion"], [40, 2, 1, "", "add_TextRegion"], [40, 2, 1, "", "add_UnknownRegion"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_AdvertRegion"], [40, 2, 1, "", "get_AllAlternativeImages"], [40, 2, 1, "", "get_AllRegions"], [40, 2, 1, "", "get_AllTextLines"], [40, 2, 1, "", "get_AlternativeImage"], [40, 2, 1, "", "get_Border"], [40, 2, 1, "", "get_ChartRegion"], [40, 2, 1, "", "get_ChemRegion"], [40, 2, 1, "", "get_CustomRegion"], [40, 2, 1, "", "get_GraphicRegion"], [40, 2, 1, "", "get_ImageRegion"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_Layers"], [40, 2, 1, "", "get_LineDrawingRegion"], [40, 2, 1, "", "get_MapRegion"], [40, 2, 1, "", "get_MathsRegion"], [40, 2, 1, "", "get_MusicRegion"], [40, 2, 1, "", "get_NoiseRegion"], [40, 2, 1, "", "get_PrintSpace"], [40, 2, 1, "", "get_ReadingOrder"], [40, 2, 1, "", "get_Relations"], [40, 2, 1, "", "get_SeparatorRegion"], [40, 2, 1, "", "get_TableRegion"], [40, 2, 1, "", "get_TextRegion"], [40, 2, 1, "", "get_TextStyle"], [40, 2, 1, "", "get_UnknownRegion"], [40, 2, 1, "", "get_UserDefined"], [40, 2, 1, "", "get_conf"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_imageFilename"], [40, 2, 1, "", "get_imageHeight"], [40, 2, 1, "", "get_imageResolutionUnit"], [40, 2, 1, "", "get_imageWidth"], [40, 2, 1, "", "get_imageXResolution"], [40, 2, 1, "", "get_imageYResolution"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "get_primaryLanguage"], [40, 2, 1, "", "get_primaryScript"], [40, 2, 1, "", "get_readingDirection"], [40, 2, 1, "", "get_secondaryLanguage"], [40, 2, 1, "", "get_secondaryScript"], [40, 2, 1, "", "get_textLineOrder"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "hasContent_"], [40, 4, 1, "", "id"], [40, 2, 1, "", "insert_AdvertRegion_at"], [40, 2, 1, "", "insert_AlternativeImage_at"], [40, 2, 1, "", "insert_ChartRegion_at"], [40, 2, 1, "", "insert_ChemRegion_at"], [40, 2, 1, "", "insert_CustomRegion_at"], [40, 2, 1, "", "insert_GraphicRegion_at"], [40, 2, 1, "", "insert_ImageRegion_at"], [40, 2, 1, "", "insert_Labels_at"], [40, 2, 1, "", "insert_LineDrawingRegion_at"], [40, 2, 1, "", "insert_MapRegion_at"], [40, 2, 1, "", "insert_MathsRegion_at"], [40, 2, 1, "", "insert_MusicRegion_at"], [40, 2, 1, "", "insert_NoiseRegion_at"], [40, 2, 1, "", "insert_SeparatorRegion_at"], [40, 2, 1, "", "insert_TableRegion_at"], [40, 2, 1, "", "insert_TextRegion_at"], [40, 2, 1, "", "insert_UnknownRegion_at"], [40, 2, 1, "", "invalidate_AlternativeImage"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_AdvertRegion_at"], [40, 2, 1, "", "replace_AlternativeImage_at"], [40, 2, 1, "", "replace_ChartRegion_at"], [40, 2, 1, "", "replace_ChemRegion_at"], [40, 2, 1, "", "replace_CustomRegion_at"], [40, 2, 1, "", "replace_GraphicRegion_at"], [40, 2, 1, "", "replace_ImageRegion_at"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "replace_LineDrawingRegion_at"], [40, 2, 1, "", "replace_MapRegion_at"], [40, 2, 1, "", "replace_MathsRegion_at"], [40, 2, 1, "", "replace_MusicRegion_at"], [40, 2, 1, "", "replace_NoiseRegion_at"], [40, 2, 1, "", "replace_SeparatorRegion_at"], [40, 2, 1, "", "replace_TableRegion_at"], [40, 2, 1, "", "replace_TextRegion_at"], [40, 2, 1, "", "replace_UnknownRegion_at"], [40, 2, 1, "", "set_AdvertRegion"], [40, 2, 1, "", "set_AlternativeImage"], [40, 2, 1, "", "set_Border"], [40, 2, 1, "", "set_ChartRegion"], [40, 2, 1, "", "set_ChemRegion"], [40, 2, 1, "", "set_CustomRegion"], [40, 2, 1, "", "set_GraphicRegion"], [40, 2, 1, "", "set_ImageRegion"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_Layers"], [40, 2, 1, "", "set_LineDrawingRegion"], [40, 2, 1, "", "set_MapRegion"], [40, 2, 1, "", "set_MathsRegion"], [40, 2, 1, "", "set_MusicRegion"], [40, 2, 1, "", "set_NoiseRegion"], [40, 2, 1, "", "set_PrintSpace"], [40, 2, 1, "", "set_ReadingOrder"], [40, 2, 1, "", "set_Relations"], [40, 2, 1, "", "set_SeparatorRegion"], [40, 2, 1, "", "set_TableRegion"], [40, 2, 1, "", "set_TextRegion"], [40, 2, 1, "", "set_TextStyle"], [40, 2, 1, "", "set_UnknownRegion"], [40, 2, 1, "", "set_UserDefined"], [40, 2, 1, "", "set_conf"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_imageFilename"], [40, 2, 1, "", "set_imageHeight"], [40, 2, 1, "", "set_imageResolutionUnit"], [40, 2, 1, "", "set_imageWidth"], [40, 2, 1, "", "set_imageXResolution"], [40, 2, 1, "", "set_imageYResolution"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 2, 1, "", "set_primaryLanguage"], [40, 2, 1, "", "set_primaryScript"], [40, 2, 1, "", "set_readingDirection"], [40, 2, 1, "", "set_secondaryLanguage"], [40, 2, 1, "", "set_secondaryScript"], [40, 2, 1, "", "set_textLineOrder"], [40, 2, 1, "", "set_type"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ConfSimpleType"], [40, 2, 1, "", "validate_LanguageSimpleType"], [40, 2, 1, "", "validate_PageTypeSimpleType"], [40, 2, 1, "", "validate_ReadingDirectionSimpleType"], [40, 2, 1, "", "validate_ScriptSimpleType"], [40, 2, 1, "", "validate_TextLineOrderSimpleType"]], "ocrd_models.ocrd_page.PcGtsType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_AllAlternativeImagePaths"], [40, 2, 1, "", "get_Metadata"], [40, 2, 1, "", "get_Page"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_pcGtsId"], [40, 2, 1, "", "hasContent_"], [40, 4, 1, "", "id"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "prune_ReadingOrder"], [40, 2, 1, "", "set_Metadata"], [40, 2, 1, "", "set_Page"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_pcGtsId"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.PrintSpaceType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Coords"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_Coords"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.ReadingOrderType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_OrderedGroup"], [40, 2, 1, "", "get_UnorderedGroup"], [40, 2, 1, "", "get_conf"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_OrderedGroup"], [40, 2, 1, "", "set_UnorderedGroup"], [40, 2, 1, "", "set_conf"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ConfSimpleType"]], "ocrd_models.ocrd_page.RegionRefIndexedType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_index"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_regionRef"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_index"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_regionRef"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.RegionRefType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_regionRef"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_regionRef"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.RegionType": [[40, 2, 1, "", "add_AdvertRegion"], [40, 2, 1, "", "add_AlternativeImage"], [40, 2, 1, "", "add_ChartRegion"], [40, 2, 1, "", "add_ChemRegion"], [40, 2, 1, "", "add_CustomRegion"], [40, 2, 1, "", "add_GraphicRegion"], [40, 2, 1, "", "add_ImageRegion"], [40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "add_LineDrawingRegion"], [40, 2, 1, "", "add_MathsRegion"], [40, 2, 1, "", "add_MusicRegion"], [40, 2, 1, "", "add_NoiseRegion"], [40, 2, 1, "", "add_SeparatorRegion"], [40, 2, 1, "", "add_TableRegion"], [40, 2, 1, "", "add_TextRegion"], [40, 2, 1, "", "add_UnknownRegion"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_AdvertRegion"], [40, 2, 1, "", "get_AlternativeImage"], [40, 2, 1, "", "get_ChartRegion"], [40, 2, 1, "", "get_ChemRegion"], [40, 2, 1, "", "get_Coords"], [40, 2, 1, "", "get_CustomRegion"], [40, 2, 1, "", "get_GraphicRegion"], [40, 2, 1, "", "get_ImageRegion"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_LineDrawingRegion"], [40, 2, 1, "", "get_MathsRegion"], [40, 2, 1, "", "get_MusicRegion"], [40, 2, 1, "", "get_NoiseRegion"], [40, 2, 1, "", "get_Roles"], [40, 2, 1, "", "get_SeparatorRegion"], [40, 2, 1, "", "get_TableRegion"], [40, 2, 1, "", "get_TextRegion"], [40, 2, 1, "", "get_UnknownRegion"], [40, 2, 1, "", "get_UserDefined"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_continuation"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_extensiontype_"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_AdvertRegion_at"], [40, 2, 1, "", "insert_AlternativeImage_at"], [40, 2, 1, "", "insert_ChartRegion_at"], [40, 2, 1, "", "insert_ChemRegion_at"], [40, 2, 1, "", "insert_CustomRegion_at"], [40, 2, 1, "", "insert_GraphicRegion_at"], [40, 2, 1, "", "insert_ImageRegion_at"], [40, 2, 1, "", "insert_Labels_at"], [40, 2, 1, "", "insert_LineDrawingRegion_at"], [40, 2, 1, "", "insert_MathsRegion_at"], [40, 2, 1, "", "insert_MusicRegion_at"], [40, 2, 1, "", "insert_NoiseRegion_at"], [40, 2, 1, "", "insert_SeparatorRegion_at"], [40, 2, 1, "", "insert_TableRegion_at"], [40, 2, 1, "", "insert_TextRegion_at"], [40, 2, 1, "", "insert_UnknownRegion_at"], [40, 2, 1, "", "invalidate_AlternativeImage"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_AdvertRegion_at"], [40, 2, 1, "", "replace_AlternativeImage_at"], [40, 2, 1, "", "replace_ChartRegion_at"], [40, 2, 1, "", "replace_ChemRegion_at"], [40, 2, 1, "", "replace_CustomRegion_at"], [40, 2, 1, "", "replace_GraphicRegion_at"], [40, 2, 1, "", "replace_ImageRegion_at"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "replace_LineDrawingRegion_at"], [40, 2, 1, "", "replace_MathsRegion_at"], [40, 2, 1, "", "replace_MusicRegion_at"], [40, 2, 1, "", "replace_NoiseRegion_at"], [40, 2, 1, "", "replace_SeparatorRegion_at"], [40, 2, 1, "", "replace_TableRegion_at"], [40, 2, 1, "", "replace_TextRegion_at"], [40, 2, 1, "", "replace_UnknownRegion_at"], [40, 2, 1, "", "set_AdvertRegion"], [40, 2, 1, "", "set_AlternativeImage"], [40, 2, 1, "", "set_ChartRegion"], [40, 2, 1, "", "set_ChemRegion"], [40, 2, 1, "", "set_Coords"], [40, 2, 1, "", "set_CustomRegion"], [40, 2, 1, "", "set_GraphicRegion"], [40, 2, 1, "", "set_ImageRegion"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_LineDrawingRegion"], [40, 2, 1, "", "set_MathsRegion"], [40, 2, 1, "", "set_MusicRegion"], [40, 2, 1, "", "set_NoiseRegion"], [40, 2, 1, "", "set_Roles"], [40, 2, 1, "", "set_SeparatorRegion"], [40, 2, 1, "", "set_TableRegion"], [40, 2, 1, "", "set_TextRegion"], [40, 2, 1, "", "set_UnknownRegion"], [40, 2, 1, "", "set_UserDefined"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_continuation"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_extensiontype_"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.RelationType": [[40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_SourceRegionRef"], [40, 2, 1, "", "get_TargetRegionRef"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_Labels_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_SourceRegionRef"], [40, 2, 1, "", "set_TargetRegionRef"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_type"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.RelationsType": [[40, 2, 1, "", "add_Relation"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Relation"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_Relation_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_Relation_at"], [40, 2, 1, "", "set_Relation"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.RolesType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_TableCellRole"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_TableCellRole"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.SeparatorRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_colour"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_colour"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ColourSimpleType"]], "ocrd_models.ocrd_page.TableCellRoleType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_colSpan"], [40, 2, 1, "", "get_columnIndex"], [40, 2, 1, "", "get_header"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_rowIndex"], [40, 2, 1, "", "get_rowSpan"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_colSpan"], [40, 2, 1, "", "set_columnIndex"], [40, 2, 1, "", "set_header"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_rowIndex"], [40, 2, 1, "", "set_rowSpan"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.TableRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Grid"], [40, 2, 1, "", "get_bgColour"], [40, 2, 1, "", "get_columns"], [40, 2, 1, "", "get_embText"], [40, 2, 1, "", "get_lineColour"], [40, 2, 1, "", "get_lineSeparators"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "get_rows"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_Grid"], [40, 2, 1, "", "set_bgColour"], [40, 2, 1, "", "set_columns"], [40, 2, 1, "", "set_embText"], [40, 2, 1, "", "set_lineColour"], [40, 2, 1, "", "set_lineSeparators"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 2, 1, "", "set_rows"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ColourSimpleType"]], "ocrd_models.ocrd_page.TextEquivType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_PlainText"], [40, 2, 1, "", "get_Unicode"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_conf"], [40, 2, 1, "", "get_dataType"], [40, 2, 1, "", "get_dataTypeDetails"], [40, 2, 1, "", "get_index"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_PlainText"], [40, 2, 1, "", "set_Unicode"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_conf"], [40, 2, 1, "", "set_dataType"], [40, 2, 1, "", "set_dataTypeDetails"], [40, 2, 1, "", "set_index"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ConfSimpleType"], [40, 2, 1, "", "validate_TextDataTypeSimpleType"]], "ocrd_models.ocrd_page.TextLineType": [[40, 2, 1, "", "add_AlternativeImage"], [40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "add_TextEquiv"], [40, 2, 1, "", "add_Word"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_AlternativeImage"], [40, 2, 1, "", "get_Baseline"], [40, 2, 1, "", "get_Coords"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_TextEquiv"], [40, 2, 1, "", "get_TextStyle"], [40, 2, 1, "", "get_UserDefined"], [40, 2, 1, "", "get_Word"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_index"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_primaryLanguage"], [40, 2, 1, "", "get_primaryScript"], [40, 2, 1, "", "get_production"], [40, 2, 1, "", "get_readingDirection"], [40, 2, 1, "", "get_secondaryScript"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_AlternativeImage_at"], [40, 2, 1, "", "insert_Labels_at"], [40, 2, 1, "", "insert_TextEquiv_at"], [40, 2, 1, "", "insert_Word_at"], [40, 2, 1, "", "invalidate_AlternativeImage"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_AlternativeImage_at"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "replace_TextEquiv_at"], [40, 2, 1, "", "replace_Word_at"], [40, 2, 1, "", "set_AlternativeImage"], [40, 2, 1, "", "set_Baseline"], [40, 2, 1, "", "set_Coords"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_TextEquiv"], [40, 2, 1, "", "set_TextStyle"], [40, 2, 1, "", "set_UserDefined"], [40, 2, 1, "", "set_Word"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_index"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_primaryLanguage"], [40, 2, 1, "", "set_primaryScript"], [40, 2, 1, "", "set_production"], [40, 2, 1, "", "set_readingDirection"], [40, 2, 1, "", "set_secondaryScript"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_LanguageSimpleType"], [40, 2, 1, "", "validate_ProductionSimpleType"], [40, 2, 1, "", "validate_ReadingDirectionSimpleType"], [40, 2, 1, "", "validate_ScriptSimpleType"]], "ocrd_models.ocrd_page.TextRegionType": [[40, 2, 1, "", "add_TextEquiv"], [40, 2, 1, "", "add_TextLine"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_TextEquiv"], [40, 2, 1, "", "get_TextLine"], [40, 2, 1, "", "get_TextStyle"], [40, 2, 1, "", "get_align"], [40, 2, 1, "", "get_indented"], [40, 2, 1, "", "get_leading"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_orientation"], [40, 2, 1, "", "get_primaryLanguage"], [40, 2, 1, "", "get_primaryScript"], [40, 2, 1, "", "get_production"], [40, 2, 1, "", "get_readingDirection"], [40, 2, 1, "", "get_readingOrientation"], [40, 2, 1, "", "get_secondaryLanguage"], [40, 2, 1, "", "get_secondaryScript"], [40, 2, 1, "", "get_textLineOrder"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_TextEquiv_at"], [40, 2, 1, "", "insert_TextLine_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_TextEquiv_at"], [40, 2, 1, "", "replace_TextLine_at"], [40, 2, 1, "", "set_TextEquiv"], [40, 2, 1, "", "set_TextLine"], [40, 2, 1, "", "set_TextStyle"], [40, 2, 1, "", "set_align"], [40, 2, 1, "", "set_indented"], [40, 2, 1, "", "set_leading"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_orientation"], [40, 2, 1, "", "set_primaryLanguage"], [40, 2, 1, "", "set_primaryScript"], [40, 2, 1, "", "set_production"], [40, 2, 1, "", "set_readingDirection"], [40, 2, 1, "", "set_readingOrientation"], [40, 2, 1, "", "set_secondaryLanguage"], [40, 2, 1, "", "set_secondaryScript"], [40, 2, 1, "", "set_textLineOrder"], [40, 2, 1, "", "set_type"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_AlignSimpleType"], [40, 2, 1, "", "validate_LanguageSimpleType"], [40, 2, 1, "", "validate_ProductionSimpleType"], [40, 2, 1, "", "validate_ReadingDirectionSimpleType"], [40, 2, 1, "", "validate_ScriptSimpleType"], [40, 2, 1, "", "validate_TextLineOrderSimpleType"], [40, 2, 1, "", "validate_TextTypeSimpleType"]], "ocrd_models.ocrd_page.TextStyleType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_bgColour"], [40, 2, 1, "", "get_bgColourRgb"], [40, 2, 1, "", "get_bold"], [40, 2, 1, "", "get_fontFamily"], [40, 2, 1, "", "get_fontSize"], [40, 2, 1, "", "get_italic"], [40, 2, 1, "", "get_kerning"], [40, 2, 1, "", "get_letterSpaced"], [40, 2, 1, "", "get_monospace"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_reverseVideo"], [40, 2, 1, "", "get_serif"], [40, 2, 1, "", "get_smallCaps"], [40, 2, 1, "", "get_strikethrough"], [40, 2, 1, "", "get_subscript"], [40, 2, 1, "", "get_superscript"], [40, 2, 1, "", "get_textColour"], [40, 2, 1, "", "get_textColourRgb"], [40, 2, 1, "", "get_underlineStyle"], [40, 2, 1, "", "get_underlined"], [40, 2, 1, "", "get_xHeight"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_bgColour"], [40, 2, 1, "", "set_bgColourRgb"], [40, 2, 1, "", "set_bold"], [40, 2, 1, "", "set_fontFamily"], [40, 2, 1, "", "set_fontSize"], [40, 2, 1, "", "set_italic"], [40, 2, 1, "", "set_kerning"], [40, 2, 1, "", "set_letterSpaced"], [40, 2, 1, "", "set_monospace"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_reverseVideo"], [40, 2, 1, "", "set_serif"], [40, 2, 1, "", "set_smallCaps"], [40, 2, 1, "", "set_strikethrough"], [40, 2, 1, "", "set_subscript"], [40, 2, 1, "", "set_superscript"], [40, 2, 1, "", "set_textColour"], [40, 2, 1, "", "set_textColourRgb"], [40, 2, 1, "", "set_underlineStyle"], [40, 2, 1, "", "set_underlined"], [40, 2, 1, "", "set_xHeight"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_ColourSimpleType"], [40, 2, 1, "", "validate_UnderlineStyleSimpleType"]], "ocrd_models.ocrd_page.UnknownRegionType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.UnorderedGroupIndexedType": [[40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "add_OrderedGroup"], [40, 2, 1, "", "add_RegionRef"], [40, 2, 1, "", "add_UnorderedGroup"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_OrderedGroup"], [40, 2, 1, "", "get_RegionRef"], [40, 2, 1, "", "get_UnorderedGroup"], [40, 2, 1, "", "get_UnorderedGroupChildren"], [40, 2, 1, "", "get_UserDefined"], [40, 2, 1, "", "get_caption"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_continuation"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_index"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_regionRef"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_Labels_at"], [40, 2, 1, "", "insert_OrderedGroup_at"], [40, 2, 1, "", "insert_RegionRef_at"], [40, 2, 1, "", "insert_UnorderedGroup_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "replace_OrderedGroup_at"], [40, 2, 1, "", "replace_RegionRef_at"], [40, 2, 1, "", "replace_UnorderedGroup_at"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_OrderedGroup"], [40, 2, 1, "", "set_RegionRef"], [40, 2, 1, "", "set_UnorderedGroup"], [40, 2, 1, "", "set_UserDefined"], [40, 2, 1, "", "set_caption"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_continuation"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_index"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_regionRef"], [40, 2, 1, "", "set_type"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_GroupTypeSimpleType"]], "ocrd_models.ocrd_page.UnorderedGroupType": [[40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "add_OrderedGroup"], [40, 2, 1, "", "add_RegionRef"], [40, 2, 1, "", "add_UnorderedGroup"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_OrderedGroup"], [40, 2, 1, "", "get_RegionRef"], [40, 2, 1, "", "get_UnorderedGroup"], [40, 2, 1, "", "get_UnorderedGroupChildren"], [40, 2, 1, "", "get_UserDefined"], [40, 2, 1, "", "get_caption"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_continuation"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_regionRef"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_Labels_at"], [40, 2, 1, "", "insert_OrderedGroup_at"], [40, 2, 1, "", "insert_RegionRef_at"], [40, 2, 1, "", "insert_UnorderedGroup_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "replace_OrderedGroup_at"], [40, 2, 1, "", "replace_RegionRef_at"], [40, 2, 1, "", "replace_UnorderedGroup_at"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_OrderedGroup"], [40, 2, 1, "", "set_RegionRef"], [40, 2, 1, "", "set_UnorderedGroup"], [40, 2, 1, "", "set_UserDefined"], [40, 2, 1, "", "set_caption"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_continuation"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_regionRef"], [40, 2, 1, "", "set_type"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_GroupTypeSimpleType"]], "ocrd_models.ocrd_page.UserAttributeType": [[40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_description"], [40, 2, 1, "", "get_name"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_type"], [40, 2, 1, "", "get_value"], [40, 2, 1, "", "hasContent_"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "set_description"], [40, 2, 1, "", "set_name"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_type"], [40, 2, 1, "", "set_value"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.UserDefinedType": [[40, 2, 1, "", "add_UserAttribute"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_UserAttribute"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_UserAttribute_at"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_UserAttribute_at"], [40, 2, 1, "", "set_UserAttribute"], [40, 2, 1, "", "set_ns_prefix_"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"]], "ocrd_models.ocrd_page.WordType": [[40, 2, 1, "", "add_AlternativeImage"], [40, 2, 1, "", "add_Glyph"], [40, 2, 1, "", "add_Labels"], [40, 2, 1, "", "add_TextEquiv"], [40, 2, 1, "", "build"], [40, 2, 1, "", "buildAttributes"], [40, 2, 1, "", "buildChildren"], [40, 2, 1, "", "export"], [40, 2, 1, "", "exportAttributes"], [40, 2, 1, "", "exportChildren"], [40, 2, 1, "", "factory"], [40, 2, 1, "", "get_AlternativeImage"], [40, 2, 1, "", "get_Coords"], [40, 2, 1, "", "get_Glyph"], [40, 2, 1, "", "get_Labels"], [40, 2, 1, "", "get_TextEquiv"], [40, 2, 1, "", "get_TextStyle"], [40, 2, 1, "", "get_UserDefined"], [40, 2, 1, "", "get_comments"], [40, 2, 1, "", "get_custom"], [40, 2, 1, "", "get_id"], [40, 2, 1, "", "get_language"], [40, 2, 1, "", "get_ns_prefix_"], [40, 2, 1, "", "get_primaryScript"], [40, 2, 1, "", "get_production"], [40, 2, 1, "", "get_readingDirection"], [40, 2, 1, "", "get_secondaryScript"], [40, 2, 1, "", "hasContent_"], [40, 2, 1, "", "insert_AlternativeImage_at"], [40, 2, 1, "", "insert_Glyph_at"], [40, 2, 1, "", "insert_Labels_at"], [40, 2, 1, "", "insert_TextEquiv_at"], [40, 2, 1, "", "invalidate_AlternativeImage"], [40, 5, 1, "", "member_data_items_"], [40, 2, 1, "", "replace_AlternativeImage_at"], [40, 2, 1, "", "replace_Glyph_at"], [40, 2, 1, "", "replace_Labels_at"], [40, 2, 1, "", "replace_TextEquiv_at"], [40, 2, 1, "", "set_AlternativeImage"], [40, 2, 1, "", "set_Coords"], [40, 2, 1, "", "set_Glyph"], [40, 2, 1, "", "set_Labels"], [40, 2, 1, "", "set_TextEquiv"], [40, 2, 1, "", "set_TextStyle"], [40, 2, 1, "", "set_UserDefined"], [40, 2, 1, "", "set_comments"], [40, 2, 1, "", "set_custom"], [40, 2, 1, "", "set_id"], [40, 2, 1, "", "set_language"], [40, 2, 1, "", "set_ns_prefix_"], [40, 2, 1, "", "set_primaryScript"], [40, 2, 1, "", "set_production"], [40, 2, 1, "", "set_readingDirection"], [40, 2, 1, "", "set_secondaryScript"], [40, 5, 1, "", "subclass"], [40, 5, 1, "", "superclass"], [40, 2, 1, "", "to_etree"], [40, 2, 1, "", "validate_LanguageSimpleType"], [40, 2, 1, "", "validate_ProductionSimpleType"], [40, 2, 1, "", "validate_ReadingDirectionSimpleType"], [40, 2, 1, "", "validate_ScriptSimpleType"]], "ocrd_models.ocrd_xml_base": [[41, 1, 1, "", "OcrdXmlDocument"]], "ocrd_models.ocrd_xml_base.OcrdXmlDocument": [[41, 2, 1, "", "to_xml"]], "ocrd_models.report": [[42, 1, 1, "", "ValidationReport"]], "ocrd_models.report.ValidationReport": [[42, 2, 1, "", "add_error"], [42, 2, 1, "", "add_notice"], [42, 2, 1, "", "add_warning"], [42, 4, 1, "", "is_valid"], [42, 2, 1, "", "merge_report"], [42, 2, 1, "", "to_xml"]], "ocrd_models.utils": [[43, 3, 1, "", "extract_mets_from_oai_content"], [43, 3, 1, "", "handle_oai_response"], [43, 3, 1, "", "is_oai_content"], [43, 3, 1, "", "xmllint_format"]], "ocrd_network": [[46, 0, 0, "-", "cli"], [51, 0, 0, "-", "client"], [52, 0, 0, "-", "database"], [53, 0, 0, "-", "deployer"], [54, 0, 0, "-", "deployment_utils"], [55, 0, 0, "-", "logging"], [56, 0, 0, "-", "models"], [61, 0, 0, "-", "param_validators"], [62, 0, 0, "-", "process_helpers"], [63, 0, 0, "-", "processing_server"], [64, 0, 0, "-", "processing_worker"], [65, 0, 0, "-", "processor_server"], [66, 0, 0, "-", "rabbitmq_utils"], [72, 0, 0, "-", "runtime_data"], [73, 0, 0, "-", "server_cache"], [74, 0, 0, "-", "server_utils"], [75, 0, 0, "-", "utils"]], "ocrd_network.cli": [[47, 0, 0, "-", "client"], [48, 0, 0, "-", "processing_server"], [49, 0, 0, "-", "processing_worker"], [50, 0, 0, "-", "processor_server"]], "ocrd_network.client": [[51, 1, 1, "", "Client"], [51, 3, 1, "", "verify_server_protocol"]], "ocrd_network.client.Client": [[51, 2, 1, "", "send_processing_request"]], "ocrd_network.database": [[52, 3, 1, "", "db_create_workspace"], [52, 3, 1, "", "db_get_processing_job"], [52, 3, 1, "", "db_get_processing_jobs"], [52, 3, 1, "", "db_get_workflow_job"], [52, 3, 1, "", "db_get_workspace"], [52, 3, 1, "", "db_update_processing_job"], [52, 3, 1, "", "db_update_workspace"], [52, 3, 1, "", "initiate_database"], [52, 3, 1, "", "sync_db_get_processing_job"], [52, 3, 1, "", "sync_db_get_processing_jobs"], [52, 3, 1, "", "sync_db_get_workflow_job"], [52, 3, 1, "", "sync_db_get_workspace"], [52, 3, 1, "", "sync_db_update_processing_job"], [52, 3, 1, "", "sync_db_update_workspace"], [52, 3, 1, "", "sync_initiate_database"]], "ocrd_network.deployer": [[53, 1, 1, "", "Deployer"]], "ocrd_network.deployer.Deployer": [[53, 2, 1, "", "deploy_hosts"], [53, 2, 1, "", "deploy_mongodb"], [53, 2, 1, "", "deploy_rabbitmq"], [53, 2, 1, "", "find_matching_processors"], [53, 2, 1, "", "kill_all"], [53, 2, 1, "", "kill_hosts"], [53, 2, 1, "", "kill_mongodb"], [53, 2, 1, "", "kill_processing_workers"], [53, 2, 1, "", "kill_processor_servers"], [53, 2, 1, "", "kill_rabbitmq"], [53, 2, 1, "", "resolve_processor_server_url"], [53, 2, 1, "", "start_docker_processor"], [53, 2, 1, "", "start_native_processor"], [53, 2, 1, "", "start_native_processor_server"], [53, 2, 1, "", "start_unix_mets_server"], [53, 2, 1, "", "stop_unix_mets_server"]], "ocrd_network.deployment_utils": [[54, 1, 1, "", "DeployType"], [54, 3, 1, "", "create_docker_client"], [54, 3, 1, "", "create_ssh_client"], [54, 3, 1, "", "verify_mongodb_available"], [54, 3, 1, "", "verify_rabbitmq_available"]], "ocrd_network.deployment_utils.DeployType": [[54, 5, 1, "", "DOCKER"], [54, 5, 1, "", "NATIVE"]], "ocrd_network.logging": [[55, 3, 1, "", "get_cache_locked_pages_logging_file_path"], [55, 3, 1, "", "get_cache_processing_requests_logging_file_path"], [55, 3, 1, "", "get_mets_server_logging_file_path"], [55, 3, 1, "", "get_processing_job_logging_file_path"], [55, 3, 1, "", "get_processing_server_logging_file_path"], [55, 3, 1, "", "get_processing_worker_logging_file_path"], [55, 3, 1, "", "get_processor_server_logging_file_path"], [55, 3, 1, "", "get_root_logging_dir"]], "ocrd_network.models": [[56, 1, 1, "", "DBProcessorJob"], [56, 1, 1, "", "DBWorkflowJob"], [56, 1, 1, "", "DBWorkspace"], [56, 1, 1, "", "PYJobInput"], [56, 1, 1, "", "PYJobOutput"], [56, 1, 1, "", "PYOcrdTool"], [56, 1, 1, "", "PYResultMessage"], [56, 1, 1, "", "PYWorkflowJobOutput"], [56, 1, 1, "", "StateEnum"], [57, 0, 0, "-", "job"], [58, 0, 0, "-", "messages"], [59, 0, 0, "-", "ocrd_tool"], [60, 0, 0, "-", "workspace"]], "ocrd_network.models.DBProcessorJob": [[56, 1, 1, "", "Settings"], [56, 5, 1, "", "callback_url"], [56, 5, 1, "", "depends_on"], [56, 5, 1, "", "description"], [56, 5, 1, "", "end_time"], [56, 5, 1, "", "exec_time"], [56, 5, 1, "", "input_file_grps"], [56, 5, 1, "", "internal_callback_url"], [56, 5, 1, "", "job_id"], [56, 5, 1, "", "log_file_path"], [56, 5, 1, "", "output_file_grps"], [56, 5, 1, "", "page_id"], [56, 5, 1, "", "parameters"], [56, 5, 1, "", "path_to_mets"], [56, 5, 1, "", "processor_name"], [56, 5, 1, "", "result_queue_name"], [56, 5, 1, "", "start_time"], [56, 5, 1, "", "state"], [56, 2, 1, "", "to_job_output"], [56, 5, 1, "", "workspace_id"]], "ocrd_network.models.DBProcessorJob.Settings": [[56, 5, 1, "", "use_enum_values"]], "ocrd_network.models.DBWorkflowJob": [[56, 1, 1, "", "Settings"], [56, 5, 1, "", "description"], [56, 5, 1, "", "job_id"], [56, 5, 1, "", "page_id"], [56, 5, 1, "", "page_wise"], [56, 5, 1, "", "path_to_mets"], [56, 5, 1, "", "processing_job_ids"], [56, 2, 1, "", "to_job_output"], [56, 5, 1, "", "workflow_callback_url"], [56, 5, 1, "", "workspace_id"]], "ocrd_network.models.DBWorkflowJob.Settings": [[56, 5, 1, "", "use_enum_values"]], "ocrd_network.models.DBWorkspace": [[56, 1, 1, "", "Settings"], [56, 5, 1, "", "bag_info_adds"], [56, 5, 1, "", "bagit_profile_identifier"], [56, 5, 1, "", "deleted"], [56, 5, 1, "", "mets_server_url"], [56, 5, 1, "", "ocrd_base_version_checksum"], [56, 5, 1, "", "ocrd_identifier"], [56, 5, 1, "", "ocrd_mets"], [56, 5, 1, "", "workspace_id"], [56, 5, 1, "", "workspace_mets_path"]], "ocrd_network.models.DBWorkspace.Settings": [[56, 5, 1, "", "name"]], "ocrd_network.models.PYJobInput": [[56, 1, 1, "", "Config"], [56, 5, 1, "", "agent_type"], [56, 5, 1, "", "callback_url"], [56, 5, 1, "", "depends_on"], [56, 5, 1, "", "description"], [56, 5, 1, "", "input_file_grps"], [56, 5, 1, "", "job_id"], [56, 5, 1, "", "output_file_grps"], [56, 5, 1, "", "page_id"], [56, 5, 1, "", "parameters"], [56, 5, 1, "", "path_to_mets"], [56, 5, 1, "", "processor_name"], [56, 5, 1, "", "result_queue_name"], [56, 5, 1, "", "workspace_id"]], "ocrd_network.models.PYJobInput.Config": [[56, 5, 1, "", "schema_extra"]], "ocrd_network.models.PYJobOutput": [[56, 5, 1, "", "input_file_grps"], [56, 5, 1, "", "job_id"], [56, 5, 1, "", "log_file_path"], [56, 5, 1, "", "output_file_grps"], [56, 5, 1, "", "page_id"], [56, 5, 1, "", "path_to_mets"], [56, 5, 1, "", "processor_name"], [56, 5, 1, "", "state"], [56, 5, 1, "", "workspace_id"]], "ocrd_network.models.PYOcrdTool": [[56, 5, 1, "", "categories"], [56, 5, 1, "", "description"], [56, 5, 1, "", "executable"], [56, 5, 1, "", "input_file_grp"], [56, 5, 1, "", "output_file_grp"], [56, 5, 1, "", "parameters"], [56, 5, 1, "", "steps"]], "ocrd_network.models.PYResultMessage": [[56, 1, 1, "", "Config"], [56, 5, 1, "", "job_id"], [56, 5, 1, "", "path_to_mets"], [56, 5, 1, "", "state"], [56, 5, 1, "", "workspace_id"]], "ocrd_network.models.PYResultMessage.Config": [[56, 5, 1, "", "schema_extra"]], "ocrd_network.models.PYWorkflowJobOutput": [[56, 5, 1, "", "description"], [56, 5, 1, "", "job_id"], [56, 5, 1, "", "page_id"], [56, 5, 1, "", "page_wise"], [56, 5, 1, "", "path_to_mets"], [56, 5, 1, "", "processing_job_ids"], [56, 5, 1, "", "workspace_id"]], "ocrd_network.models.StateEnum": [[56, 5, 1, "", "cached"], [56, 5, 1, "", "cancelled"], [56, 5, 1, "", "failed"], [56, 5, 1, "", "queued"], [56, 5, 1, "", "running"], [56, 5, 1, "", "success"]], "ocrd_network.models.job": [[57, 1, 1, "", "DBProcessorJob"], [57, 1, 1, "", "DBWorkflowJob"], [57, 1, 1, "", "PYJobInput"], [57, 1, 1, "", "PYJobOutput"], [57, 1, 1, "", "PYWorkflowJobOutput"], [57, 1, 1, "", "StateEnum"]], "ocrd_network.models.job.DBProcessorJob": [[57, 1, 1, "", "Settings"], [57, 5, 1, "", "callback_url"], [57, 5, 1, "", "depends_on"], [57, 5, 1, "", "description"], [57, 5, 1, "", "end_time"], [57, 5, 1, "", "exec_time"], [57, 5, 1, "", "id"], [57, 5, 1, "", "input_file_grps"], [57, 5, 1, "", "internal_callback_url"], [57, 5, 1, "", "job_id"], [57, 5, 1, "", "log_file_path"], [57, 5, 1, "", "output_file_grps"], [57, 5, 1, "", "page_id"], [57, 5, 1, "", "parameters"], [57, 5, 1, "", "path_to_mets"], [57, 5, 1, "", "processor_name"], [57, 5, 1, "", "result_queue_name"], [57, 5, 1, "", "revision_id"], [57, 5, 1, "", "start_time"], [57, 5, 1, "", "state"], [57, 2, 1, "", "to_job_output"], [57, 5, 1, "", "workspace_id"]], "ocrd_network.models.job.DBProcessorJob.Settings": [[57, 5, 1, "", "use_enum_values"]], "ocrd_network.models.job.DBWorkflowJob": [[57, 1, 1, "", "Settings"], [57, 5, 1, "", "description"], [57, 5, 1, "", "id"], [57, 5, 1, "", "job_id"], [57, 5, 1, "", "page_id"], [57, 5, 1, "", "page_wise"], [57, 5, 1, "", "path_to_mets"], [57, 5, 1, "", "processing_job_ids"], [57, 5, 1, "", "revision_id"], [57, 2, 1, "", "to_job_output"], [57, 5, 1, "", "workflow_callback_url"], [57, 5, 1, "", "workspace_id"]], "ocrd_network.models.job.DBWorkflowJob.Settings": [[57, 5, 1, "", "use_enum_values"]], "ocrd_network.models.job.PYJobInput": [[57, 1, 1, "", "Config"], [57, 5, 1, "", "agent_type"], [57, 5, 1, "", "callback_url"], [57, 5, 1, "", "depends_on"], [57, 5, 1, "", "description"], [57, 5, 1, "", "input_file_grps"], [57, 5, 1, "", "job_id"], [57, 5, 1, "", "output_file_grps"], [57, 5, 1, "", "page_id"], [57, 5, 1, "", "parameters"], [57, 5, 1, "", "path_to_mets"], [57, 5, 1, "", "processor_name"], [57, 5, 1, "", "result_queue_name"], [57, 5, 1, "", "workspace_id"]], "ocrd_network.models.job.PYJobInput.Config": [[57, 5, 1, "", "schema_extra"]], "ocrd_network.models.job.PYJobOutput": [[57, 5, 1, "", "input_file_grps"], [57, 5, 1, "", "job_id"], [57, 5, 1, "", "log_file_path"], [57, 5, 1, "", "output_file_grps"], [57, 5, 1, "", "page_id"], [57, 5, 1, "", "path_to_mets"], [57, 5, 1, "", "processor_name"], [57, 5, 1, "", "state"], [57, 5, 1, "", "workspace_id"]], "ocrd_network.models.job.PYWorkflowJobOutput": [[57, 5, 1, "", "description"], [57, 5, 1, "", "job_id"], [57, 5, 1, "", "page_id"], [57, 5, 1, "", "page_wise"], [57, 5, 1, "", "path_to_mets"], [57, 5, 1, "", "processing_job_ids"], [57, 5, 1, "", "workspace_id"]], "ocrd_network.models.job.StateEnum": [[57, 5, 1, "", "cached"], [57, 5, 1, "", "cancelled"], [57, 5, 1, "", "failed"], [57, 5, 1, "", "queued"], [57, 5, 1, "", "running"], [57, 5, 1, "", "success"]], "ocrd_network.models.messages": [[58, 1, 1, "", "PYResultMessage"]], "ocrd_network.models.messages.PYResultMessage": [[58, 1, 1, "", "Config"], [58, 5, 1, "", "job_id"], [58, 5, 1, "", "path_to_mets"], [58, 5, 1, "", "state"], [58, 5, 1, "", "workspace_id"]], "ocrd_network.models.messages.PYResultMessage.Config": [[58, 5, 1, "", "schema_extra"]], "ocrd_network.models.ocrd_tool": [[59, 1, 1, "", "PYOcrdTool"]], "ocrd_network.models.ocrd_tool.PYOcrdTool": [[59, 5, 1, "", "categories"], [59, 5, 1, "", "description"], [59, 5, 1, "", "executable"], [59, 5, 1, "", "input_file_grp"], [59, 5, 1, "", "output_file_grp"], [59, 5, 1, "", "parameters"], [59, 5, 1, "", "steps"]], "ocrd_network.models.workspace": [[60, 1, 1, "", "DBWorkspace"]], "ocrd_network.models.workspace.DBWorkspace": [[60, 1, 1, "", "Settings"], [60, 5, 1, "", "bag_info_adds"], [60, 5, 1, "", "bagit_profile_identifier"], [60, 5, 1, "", "deleted"], [60, 5, 1, "", "id"], [60, 5, 1, "", "mets_server_url"], [60, 5, 1, "", "ocrd_base_version_checksum"], [60, 5, 1, "", "ocrd_identifier"], [60, 5, 1, "", "ocrd_mets"], [60, 5, 1, "", "revision_id"], [60, 5, 1, "", "workspace_id"], [60, 5, 1, "", "workspace_mets_path"]], "ocrd_network.models.workspace.DBWorkspace.Settings": [[60, 5, 1, "", "name"]], "ocrd_network.param_validators": [[61, 1, 1, "", "DatabaseParamType"], [61, 1, 1, "", "QueueServerParamType"], [61, 1, 1, "", "ServerAddressParamType"]], "ocrd_network.param_validators.DatabaseParamType": [[61, 2, 1, "", "convert"], [61, 5, 1, "", "name"]], "ocrd_network.param_validators.QueueServerParamType": [[61, 2, 1, "", "convert"], [61, 5, 1, "", "name"]], "ocrd_network.param_validators.ServerAddressParamType": [[61, 2, 1, "", "convert"], [61, 5, 1, "", "expected_format"], [61, 5, 1, "", "name"]], "ocrd_network.process_helpers": [[62, 3, 1, "", "invoke_processor"]], "ocrd_network.processing_server": [[63, 1, 1, "", "ProcessingServer"]], "ocrd_network.processing_server.ProcessingServer": [[63, 2, 1, "", "check_if_queue_exists"], [63, 2, 1, "", "connect_publisher"], [63, 2, 1, "", "create_message_queues"], [63, 2, 1, "", "create_processing_message"], [63, 2, 1, "", "get_processor_info"], [63, 2, 1, "", "get_processor_job"], [63, 2, 1, "", "get_processor_job_log"], [63, 2, 1, "", "get_workflow_info"], [63, 2, 1, "", "list_processors"], [63, 2, 1, "", "on_shutdown"], [63, 2, 1, "", "on_startup"], [63, 2, 1, "", "push_processor_job"], [63, 2, 1, "", "push_to_processing_queue"], [63, 2, 1, "", "push_to_processor_server"], [63, 2, 1, "", "query_ocrd_tool_json_from_server"], [63, 2, 1, "", "remove_from_request_cache"], [63, 2, 1, "", "run_workflow"], [63, 2, 1, "", "start"], [63, 2, 1, "", "stop_deployed_agents"], [63, 2, 1, "", "task_sequence_to_processing_jobs"]], "ocrd_network.processing_worker": [[64, 1, 1, "", "ProcessingWorker"]], "ocrd_network.processing_worker.ProcessingWorker": [[64, 2, 1, "", "connect_consumer"], [64, 2, 1, "", "connect_publisher"], [64, 2, 1, "", "create_queue"], [64, 2, 1, "", "on_consumed_message"], [64, 2, 1, "", "process_message"], [64, 2, 1, "", "publish_to_result_queue"], [64, 2, 1, "", "start_consuming"]], "ocrd_network.processor_server": [[65, 1, 1, "", "ProcessorServer"]], "ocrd_network.processor_server.ProcessorServer": [[65, 2, 1, "", "create_processor_task"], [65, 2, 1, "", "get_ocrd_tool"], [65, 2, 1, "", "get_processor_info"], [65, 2, 1, "", "get_processor_job"], [65, 2, 1, "", "get_processor_job_log"], [65, 2, 1, "", "get_version"], [65, 2, 1, "", "on_shutdown"], [65, 2, 1, "", "on_startup"], [65, 2, 1, "", "run_processor_task"], [65, 2, 1, "", "run_server"]], "ocrd_network.rabbitmq_utils": [[66, 1, 1, "", "OcrdProcessingMessage"], [66, 1, 1, "", "OcrdResultMessage"], [66, 1, 1, "", "RMQConnector"], [66, 1, 1, "", "RMQConsumer"], [66, 1, 1, "", "RMQPublisher"], [67, 0, 0, "-", "connector"], [68, 0, 0, "-", "constants"], [69, 0, 0, "-", "consumer"], [70, 0, 0, "-", "ocrd_messages"], [71, 0, 0, "-", "publisher"]], "ocrd_network.rabbitmq_utils.OcrdProcessingMessage": [[66, 2, 1, "", "decode_yml"], [66, 2, 1, "", "encode_yml"]], "ocrd_network.rabbitmq_utils.OcrdResultMessage": [[66, 2, 1, "", "decode_yml"], [66, 2, 1, "", "encode_yml"]], "ocrd_network.rabbitmq_utils.RMQConnector": [[66, 2, 1, "", "basic_publish"], [66, 2, 1, "", "confirm_delivery"], [66, 2, 1, "", "declare_and_bind_defaults"], [66, 2, 1, "", "exchange_bind"], [66, 2, 1, "", "exchange_declare"], [66, 2, 1, "", "exchange_delete"], [66, 2, 1, "", "exchange_unbind"], [66, 2, 1, "", "open_blocking_channel"], [66, 2, 1, "", "open_blocking_connection"], [66, 2, 1, "", "queue_bind"], [66, 2, 1, "", "queue_declare"], [66, 2, 1, "", "queue_delete"], [66, 2, 1, "", "queue_purge"], [66, 2, 1, "", "queue_unbind"], [66, 2, 1, "", "set_qos"]], "ocrd_network.rabbitmq_utils.RMQConsumer": [[66, 2, 1, "", "ack_message"], [66, 2, 1, "", "authenticate_and_connect"], [66, 2, 1, "", "configure_consuming"], [66, 2, 1, "", "get_one_message"], [66, 2, 1, "", "get_waiting_message_count"], [66, 2, 1, "", "setup_defaults"], [66, 2, 1, "", "start_consuming"]], "ocrd_network.rabbitmq_utils.RMQPublisher": [[66, 2, 1, "", "authenticate_and_connect"], [66, 2, 1, "", "create_queue"], [66, 2, 1, "", "enable_delivery_confirmations"], [66, 2, 1, "", "publish_to_queue"], [66, 2, 1, "", "setup_defaults"]], "ocrd_network.rabbitmq_utils.connector": [[67, 1, 1, "", "RMQConnector"]], "ocrd_network.rabbitmq_utils.connector.RMQConnector": [[67, 2, 1, "", "basic_publish"], [67, 2, 1, "", "confirm_delivery"], [67, 2, 1, "", "declare_and_bind_defaults"], [67, 2, 1, "", "exchange_bind"], [67, 2, 1, "", "exchange_declare"], [67, 2, 1, "", "exchange_delete"], [67, 2, 1, "", "exchange_unbind"], [67, 2, 1, "", "open_blocking_channel"], [67, 2, 1, "", "open_blocking_connection"], [67, 2, 1, "", "queue_bind"], [67, 2, 1, "", "queue_declare"], [67, 2, 1, "", "queue_delete"], [67, 2, 1, "", "queue_purge"], [67, 2, 1, "", "queue_unbind"], [67, 2, 1, "", "set_qos"]], "ocrd_network.rabbitmq_utils.consumer": [[69, 1, 1, "", "RMQConsumer"]], "ocrd_network.rabbitmq_utils.consumer.RMQConsumer": [[69, 2, 1, "", "ack_message"], [69, 2, 1, "", "authenticate_and_connect"], [69, 2, 1, "", "configure_consuming"], [69, 2, 1, "", "get_one_message"], [69, 2, 1, "", "get_waiting_message_count"], [69, 2, 1, "", "setup_defaults"], [69, 2, 1, "", "start_consuming"]], "ocrd_network.rabbitmq_utils.ocrd_messages": [[70, 1, 1, "", "OcrdProcessingMessage"], [70, 1, 1, "", "OcrdResultMessage"]], "ocrd_network.rabbitmq_utils.ocrd_messages.OcrdProcessingMessage": [[70, 2, 1, "", "decode_yml"], [70, 2, 1, "", "encode_yml"]], "ocrd_network.rabbitmq_utils.ocrd_messages.OcrdResultMessage": [[70, 2, 1, "", "decode_yml"], [70, 2, 1, "", "encode_yml"]], "ocrd_network.rabbitmq_utils.publisher": [[71, 1, 1, "", "RMQPublisher"]], "ocrd_network.rabbitmq_utils.publisher.RMQPublisher": [[71, 2, 1, "", "authenticate_and_connect"], [71, 2, 1, "", "create_queue"], [71, 2, 1, "", "enable_delivery_confirmations"], [71, 2, 1, "", "publish_to_queue"], [71, 2, 1, "", "setup_defaults"]], "ocrd_network.runtime_data": [[72, 1, 1, "", "DataHost"], [72, 1, 1, "", "DataMongoDB"], [72, 1, 1, "", "DataProcessingWorker"], [72, 1, 1, "", "DataProcessorServer"], [72, 1, 1, "", "DataRabbitMQ"]], "ocrd_network.runtime_data.DataHost": [[72, 2, 1, "", "create_client"]], "ocrd_network.server_cache": [[73, 1, 1, "", "CacheLockedPages"], [73, 1, 1, "", "CacheProcessingRequests"]], "ocrd_network.server_cache.CacheLockedPages": [[73, 2, 1, "", "check_if_locked_pages_for_output_file_grps"], [73, 2, 1, "", "get_locked_pages"], [73, 2, 1, "", "lock_pages"], [73, 2, 1, "", "unlock_pages"]], "ocrd_network.server_cache.CacheProcessingRequests": [[73, 2, 1, "", "cache_request"], [73, 2, 1, "", "cancel_dependent_jobs"], [73, 2, 1, "", "consume_cached_requests"], [73, 2, 1, "", "has_workspace_cached_requests"], [73, 2, 1, "", "is_caching_required"], [73, 2, 1, "", "update_request_counter"]], "ocrd_network.server_utils": [[74, 3, 1, "", "expand_page_ids"], [74, 3, 1, "", "validate_and_return_mets_path"], [74, 3, 1, "", "validate_job_input"]], "ocrd_network.utils": [[75, 3, 1, "", "calculate_execution_time"], [75, 3, 1, "", "call_sync"], [75, 3, 1, "", "download_ocrd_all_tool_json"], [75, 3, 1, "", "generate_created_time"], [75, 3, 1, "", "generate_id"], [75, 3, 1, "", "get_ocrd_workspace_instance"], [75, 3, 1, "", "get_ocrd_workspace_physical_pages"], [75, 3, 1, "", "is_mets_server_running"], [75, 3, 1, "", "post_to_callback_url"], [75, 3, 1, "", "stop_mets_server"], [75, 3, 1, "", "validate_and_load_config"], [75, 3, 1, "", "verify_and_parse_mq_uri"], [75, 3, 1, "", "verify_database_uri"]], "ocrd_utils": [[78, 0, 0, "-", "config"], [79, 0, 0, "-", "constants"], [80, 0, 0, "-", "deprecate"], [81, 0, 0, "-", "image"], [82, 0, 0, "-", "introspect"], [83, 0, 0, "-", "logging"], [84, 0, 0, "-", "os"], [85, 0, 0, "-", "str"]], "ocrd_utils.config": [[78, 1, 1, "", "OcrdEnvConfig"], [78, 1, 1, "", "OcrdEnvVariable"]], "ocrd_utils.config.OcrdEnvConfig": [[78, 2, 1, "", "add"], [78, 2, 1, "", "describe"], [78, 2, 1, "", "has_default"], [78, 2, 1, "", "is_set"], [78, 2, 1, "", "raw_value"]], "ocrd_utils.config.OcrdEnvVariable": [[78, 2, 1, "", "describe"]], "ocrd_utils.deprecate": [[80, 3, 1, "", "deprecated_alias"], [80, 3, 1, "", "deprecation_warning"], [80, 3, 1, "", "rename_kwargs"]], "ocrd_utils.image": [[81, 3, 1, "", "adjust_canvas_to_rotation"], [81, 3, 1, "", "adjust_canvas_to_transposition"], [81, 3, 1, "", "bbox_from_points"], [81, 3, 1, "", "bbox_from_polygon"], [81, 3, 1, "", "bbox_from_xywh"], [81, 3, 1, "", "coordinates_for_segment"], [81, 3, 1, "", "coordinates_of_segment"], [81, 3, 1, "", "image_from_polygon"], [81, 3, 1, "", "points_from_bbox"], [81, 3, 1, "", "points_from_polygon"], [81, 3, 1, "", "points_from_x0y0x1y1"], [81, 3, 1, "", "points_from_xywh"], [81, 3, 1, "", "points_from_y0x0y1x1"], [81, 3, 1, "", "polygon_from_bbox"], [81, 3, 1, "", "polygon_from_points"], [81, 3, 1, "", "polygon_from_x0y0x1y1"], [81, 3, 1, "", "polygon_from_xywh"], [81, 3, 1, "", "polygon_mask"], [81, 3, 1, "", "rotate_coordinates"], [81, 3, 1, "", "scale_coordinates"], [81, 3, 1, "", "shift_coordinates"], [81, 3, 1, "", "transform_coordinates"], [81, 3, 1, "", "transpose_coordinates"], [81, 3, 1, "", "xywh_from_bbox"], [81, 3, 1, "", "xywh_from_points"], [81, 3, 1, "", "xywh_from_polygon"]], "ocrd_utils.introspect": [[82, 3, 1, "", "freeze_args"], [82, 3, 1, "", "membername"], [82, 3, 1, "", "set_json_key_value_overrides"]], "ocrd_utils.logging": [[83, 3, 1, "", "disableLogging"], [83, 3, 1, "", "getLevelName"], [83, 3, 1, "", "getLogger"], [83, 3, 1, "", "initLogging"], [83, 3, 1, "", "setOverrideLogLevel"]], "ocrd_utils.os": [[84, 3, 1, "", "abspath"], [84, 3, 1, "", "atomic_write"], [84, 3, 1, "", "directory_size"], [84, 3, 1, "", "get_moduledir"], [84, 3, 1, "", "get_ocrd_tool_json"], [84, 3, 1, "", "get_processor_resource_types"], [84, 3, 1, "", "guess_media_type"], [84, 3, 1, "", "is_file_in_directory"], [84, 3, 1, "", "pushd_popd"], [84, 3, 1, "", "redirect_stderr_and_stdout_to_file"], [84, 3, 1, "", "unzip_file_to_dir"]], "ocrd_utils.str": [[85, 3, 1, "", "assert_file_grp_cardinality"], [85, 3, 1, "", "concat_padded"], [85, 3, 1, "", "get_local_filename"], [85, 3, 1, "", "is_local_filename"], [85, 3, 1, "", "is_string"], [85, 3, 1, "", "make_file_id"], [85, 3, 1, "", "nth_url_segment"], [85, 3, 1, "", "parse_json_string_or_file"], [85, 3, 1, "", "parse_json_string_with_comments"], [85, 3, 1, "", "remove_non_path_from_url"], [85, 3, 1, "", "safe_filename"]], "ocrd_validators": [[87, 1, 1, "", "OcrdNetworkMessageValidator"], [87, 1, 1, "", "OcrdResourceListValidator"], [87, 1, 1, "", "OcrdToolValidator"], [87, 1, 1, "", "OcrdZipValidator"], [87, 1, 1, "", "PageValidator"], [87, 1, 1, "", "ParameterValidator"], [87, 1, 1, "", "ProcessingServerConfigValidator"], [87, 1, 1, "", "WorkspaceValidator"], [87, 1, 1, "", "XsdMetsValidator"], [87, 1, 1, "", "XsdPageValidator"], [87, 1, 1, "", "XsdValidator"], [88, 0, 0, "-", "constants"], [89, 0, 0, "-", "json_validator"], [90, 0, 0, "-", "ocrd_network_message_validator"], [91, 0, 0, "-", "ocrd_tool_validator"], [92, 0, 0, "-", "ocrd_zip_validator"], [93, 0, 0, "-", "page_validator"], [94, 0, 0, "-", "parameter_validator"], [95, 0, 0, "-", "processing_server_config_validator"], [96, 0, 0, "-", "resource_list_validator"], [97, 0, 0, "-", "workspace_validator"], [98, 0, 0, "-", "xsd_mets_validator"], [99, 0, 0, "-", "xsd_page_validator"], [100, 0, 0, "-", "xsd_validator"]], "ocrd_validators.OcrdNetworkMessageValidator": [[87, 2, 1, "", "validate_message_processing"], [87, 2, 1, "", "validate_message_result"]], "ocrd_validators.OcrdResourceListValidator": [[87, 2, 1, "", "validate"]], "ocrd_validators.OcrdToolValidator": [[87, 2, 1, "", "validate"]], "ocrd_validators.OcrdZipValidator": [[87, 2, 1, "", "validate"]], "ocrd_validators.PageValidator": [[87, 2, 1, "", "validate"]], "ocrd_validators.ParameterValidator": [[87, 2, 1, "", "validate"]], "ocrd_validators.ProcessingServerConfigValidator": [[87, 2, 1, "", "validate"]], "ocrd_validators.WorkspaceValidator": [[87, 2, 1, "", "check_file_grp"], [87, 2, 1, "", "validate"]], "ocrd_validators.XsdMetsValidator": [[87, 2, 1, "", "validate"]], "ocrd_validators.XsdPageValidator": [[87, 2, 1, "", "validate"]], "ocrd_validators.XsdValidator": [[87, 2, 1, "", "instance"], [87, 2, 1, "", "validate"]], "ocrd_validators.json_validator": [[89, 1, 1, "", "JsonValidator"], [89, 3, 1, "", "extend_with_default"]], "ocrd_validators.json_validator.JsonValidator": [[89, 2, 1, "", "validate"]], "ocrd_validators.ocrd_network_message_validator": [[90, 1, 1, "", "OcrdNetworkMessageValidator"]], "ocrd_validators.ocrd_network_message_validator.OcrdNetworkMessageValidator": [[90, 2, 1, "", "validate_message_processing"], [90, 2, 1, "", "validate_message_result"]], "ocrd_validators.ocrd_tool_validator": [[91, 1, 1, "", "OcrdToolValidator"]], "ocrd_validators.ocrd_tool_validator.OcrdToolValidator": [[91, 2, 1, "", "validate"]], "ocrd_validators.ocrd_zip_validator": [[92, 1, 1, "", "OcrdZipValidator"]], "ocrd_validators.ocrd_zip_validator.OcrdZipValidator": [[92, 2, 1, "", "validate"]], "ocrd_validators.page_validator": [[93, 6, 1, "", "ConsistencyError"], [93, 6, 1, "", "CoordinateConsistencyError"], [93, 6, 1, "", "CoordinateValidityError"], [93, 1, 1, "", "PageValidator"], [93, 3, 1, "", "compare_without_whitespace"], [93, 3, 1, "", "concatenate"], [93, 3, 1, "", "get_text"], [93, 3, 1, "", "make_line"], [93, 3, 1, "", "make_poly"], [93, 3, 1, "", "page_get_reading_order"], [93, 3, 1, "", "set_text"], [93, 3, 1, "", "validate_consistency"]], "ocrd_validators.page_validator.PageValidator": [[93, 2, 1, "", "validate"]], "ocrd_validators.parameter_validator": [[94, 1, 1, "", "ParameterValidator"]], "ocrd_validators.parameter_validator.ParameterValidator": [[94, 2, 1, "", "validate"]], "ocrd_validators.processing_server_config_validator": [[95, 1, 1, "", "ProcessingServerConfigValidator"]], "ocrd_validators.processing_server_config_validator.ProcessingServerConfigValidator": [[95, 2, 1, "", "validate"]], "ocrd_validators.resource_list_validator": [[96, 1, 1, "", "OcrdResourceListValidator"]], "ocrd_validators.resource_list_validator.OcrdResourceListValidator": [[96, 2, 1, "", "validate"]], "ocrd_validators.workspace_validator": [[97, 1, 1, "", "WorkspaceValidator"]], "ocrd_validators.workspace_validator.WorkspaceValidator": [[97, 2, 1, "", "check_file_grp"], [97, 2, 1, "", "validate"]], "ocrd_validators.xsd_mets_validator": [[98, 1, 1, "", "XsdMetsValidator"]], "ocrd_validators.xsd_mets_validator.XsdMetsValidator": [[98, 2, 1, "", "validate"]], "ocrd_validators.xsd_page_validator": [[99, 1, 1, "", "XsdPageValidator"]], "ocrd_validators.xsd_page_validator.XsdPageValidator": [[99, 2, 1, "", "validate"]], "ocrd_validators.xsd_validator": [[100, 1, 1, "", "XsdValidator"]], "ocrd_validators.xsd_validator.XsdValidator": [[100, 2, 1, "", "instance"], [100, 2, 1, "", "validate"]], "ocrd-bashlib-constants": [[3, 7, 1, "cmdoption-ocrd-bashlib-constants-arg-NAME", "NAME"]], "ocrd-bashlib-input-files": [[3, 7, 1, "cmdoption-ocrd-bashlib-input-files-I", "--input-file-grp"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-l", "--log-level"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-m", "--mets"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-O", "--output-file-grp"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-overwrite", "--overwrite"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-g", "--page-id"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-p", "--parameter"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-P", "--parameter-override"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-w", "--working-dir"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-I", "-I"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-O", "-O"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-P", "-P"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-g", "-g"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-l", "-l"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-m", "-m"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-p", "-p"], [3, 7, 1, "cmdoption-ocrd-bashlib-input-files-w", "-w"]], "ocrd-log-critical": [[4, 7, 1, "cmdoption-ocrd-log-critical-arg-MSGS", "MSGS"]], "ocrd-log-debug": [[4, 7, 1, "cmdoption-ocrd-log-debug-arg-MSGS", "MSGS"]], "ocrd-log-error": [[4, 7, 1, "cmdoption-ocrd-log-error-arg-MSGS", "MSGS"]], "ocrd-log-info": [[4, 7, 1, "cmdoption-ocrd-log-info-arg-MSGS", "MSGS"]], "ocrd-log-trace": [[4, 7, 1, "cmdoption-ocrd-log-trace-arg-MSGS", "MSGS"]], "ocrd-log-warning": [[4, 7, 1, "cmdoption-ocrd-log-warning-arg-MSGS", "MSGS"]], "ocrd-log": [[4, 7, 1, "cmdoption-ocrd-log-n", "--name"], [4, 7, 1, "cmdoption-ocrd-log-n", "-n"]], "ocrd-network-client-processing-processor": [[5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-address", "--address"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-agent-type", "--agent-type"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-callback-url", "--callback-url"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-I", "--input-file-grp"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-m", "--mets"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-O", "--output-file-grp"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-g", "--page-id"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-p", "--parameter"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-result-queue-name", "--result-queue-name"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-I", "-I"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-O", "-O"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-g", "-g"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-m", "-m"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-p", "-p"], [5, 7, 1, "cmdoption-ocrd-network-client-processing-processor-arg-PROCESSOR_NAME", "PROCESSOR_NAME"]], "ocrd-network-processing-server": [[5, 7, 1, "cmdoption-ocrd-network-processing-server-a", "--address"], [5, 7, 1, "cmdoption-ocrd-network-processing-server-a", "-a"], [5, 7, 1, "cmdoption-ocrd-network-processing-server-arg-PATH_TO_CONFIG", "PATH_TO_CONFIG"]], "ocrd-network-processing-worker": [[5, 7, 1, "cmdoption-ocrd-network-processing-worker-d", "--database"], [5, 7, 1, "cmdoption-ocrd-network-processing-worker-q", "--queue"], [5, 7, 1, "cmdoption-ocrd-network-processing-worker-d", "-d"], [5, 7, 1, "cmdoption-ocrd-network-processing-worker-q", "-q"], [5, 7, 1, "cmdoption-ocrd-network-processing-worker-arg-PROCESSOR_NAME", "PROCESSOR_NAME"]], "ocrd-network-processor-server": [[5, 7, 1, "cmdoption-ocrd-network-processor-server-a", "--address"], [5, 7, 1, "cmdoption-ocrd-network-processor-server-d", "--database"], [5, 7, 1, "cmdoption-ocrd-network-processor-server-a", "-a"], [5, 7, 1, "cmdoption-ocrd-network-processor-server-d", "-d"], [5, 7, 1, "cmdoption-ocrd-network-processor-server-arg-PROCESSOR_NAME", "PROCESSOR_NAME"]], "ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-help": [[6, 7, 1, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-help-arg-SUBCOMMAND", "SUBCOMMAND"]], "ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params": [[6, 7, 1, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-j", "--json"], [6, 7, 1, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-p", "--parameter"], [6, 7, 1, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-P", "--parameter-override"], [6, 7, 1, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-P", "-P"], [6, 7, 1, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-j", "-j"], [6, 7, 1, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-p", "-p"]], "ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-show-resource": [[6, 7, 1, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-show-resource-arg-RES_NAME", "RES_NAME"]], "ocrd-ocrd-tool-JSON_FILE-tool": [[6, 7, 1, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-arg-TOOL_NAME", "TOOL_NAME"]], "ocrd-ocrd-tool": [[6, 7, 1, "cmdoption-ocrd-ocrd-tool-arg-JSON_FILE", "JSON_FILE"]], "ocrd-process": [[7, 7, 1, "cmdoption-ocrd-process-l", "--log-level"], [7, 7, 1, "cmdoption-ocrd-process-m", "--mets"], [7, 7, 1, "cmdoption-ocrd-process-overwrite", "--overwrite"], [7, 7, 1, "cmdoption-ocrd-process-g", "--page-id"], [7, 7, 1, "cmdoption-ocrd-process-g", "-g"], [7, 7, 1, "cmdoption-ocrd-process-l", "-l"], [7, 7, 1, "cmdoption-ocrd-process-m", "-m"], [7, 7, 1, "cmdoption-ocrd-process-arg-TASKS", "TASKS"]], "ocrd-resmgr-download": [[8, 7, 1, "cmdoption-ocrd-resmgr-download-a", "--allow-uninstalled"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-n", "--any-url"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-l", "--location"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-D", "--no-dynamic"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-o", "--overwrite"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-P", "--path-in-archive"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-t", "--resource-type"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-D", "-D"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-P", "-P"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-a", "-a"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-l", "-l"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-n", "-n"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-o", "-o"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-t", "-t"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-arg-EXECUTABLE", "EXECUTABLE"], [8, 7, 1, "cmdoption-ocrd-resmgr-download-arg-NAME", "NAME"]], "ocrd-resmgr-list-available": [[8, 7, 1, "cmdoption-ocrd-resmgr-list-available-e", "--executable"], [8, 7, 1, "cmdoption-ocrd-resmgr-list-available-D", "--no-dynamic"], [8, 7, 1, "cmdoption-ocrd-resmgr-list-available-D", "-D"], [8, 7, 1, "cmdoption-ocrd-resmgr-list-available-e", "-e"]], "ocrd-resmgr-list-installed": [[8, 7, 1, "cmdoption-ocrd-resmgr-list-installed-e", "--executable"], [8, 7, 1, "cmdoption-ocrd-resmgr-list-installed-e", "-e"]], "ocrd-resmgr-migrate": [[8, 7, 1, "cmdoption-ocrd-resmgr-migrate-arg-MIGRATION", "MIGRATION"]], "ocrd-validate-page": [[9, 7, 1, "cmdoption-ocrd-validate-page-check-baseline", "--check-baseline"], [9, 7, 1, "cmdoption-ocrd-validate-page-check-coords", "--check-coords"], [9, 7, 1, "cmdoption-ocrd-validate-page-page-textequiv-consistency", "--page-textequiv-consistency"], [9, 7, 1, "cmdoption-ocrd-validate-page-page-textequiv-strategy", "--page-textequiv-strategy"], [9, 7, 1, "cmdoption-ocrd-validate-page-arg-PAGE", "PAGE"]], "ocrd-validate-parameters": [[9, 7, 1, "cmdoption-ocrd-validate-parameters-arg-EXECUTABLE", "EXECUTABLE"], [9, 7, 1, "cmdoption-ocrd-validate-parameters-arg-OCRD_TOOL", "OCRD_TOOL"], [9, 7, 1, "cmdoption-ocrd-validate-parameters-arg-PARAM_JSON", "PARAM_JSON"]], "ocrd-validate-tasks": [[9, 7, 1, "cmdoption-ocrd-validate-tasks-M", "--mets-basename"], [9, 7, 1, "cmdoption-ocrd-validate-tasks-overwrite", "--overwrite"], [9, 7, 1, "cmdoption-ocrd-validate-tasks-g", "--page-id"], [9, 7, 1, "cmdoption-ocrd-validate-tasks-workspace", "--workspace"], [9, 7, 1, "cmdoption-ocrd-validate-tasks-M", "-M"], [9, 7, 1, "cmdoption-ocrd-validate-tasks-g", "-g"], [9, 7, 1, "cmdoption-ocrd-validate-tasks-arg-TASKS", "TASKS"]], "ocrd-validate-tool-json": [[9, 7, 1, "cmdoption-ocrd-validate-tool-json-arg-OCRD_TOOL", "OCRD_TOOL"]], "ocrd-workspace-add": [[10, 7, 1, "cmdoption-ocrd-workspace-add-C", "--check-file-exists"], [10, 7, 1, "cmdoption-ocrd-workspace-add-G", "--file-grp"], [10, 7, 1, "cmdoption-ocrd-workspace-add-i", "--file-id"], [10, 7, 1, "cmdoption-ocrd-workspace-add-force", "--force"], [10, 7, 1, "cmdoption-ocrd-workspace-add-ignore", "--ignore"], [10, 7, 1, "cmdoption-ocrd-workspace-add-m", "--mimetype"], [10, 7, 1, "cmdoption-ocrd-workspace-add-g", "--page-id"], [10, 7, 1, "cmdoption-ocrd-workspace-add-C", "-C"], [10, 7, 1, "cmdoption-ocrd-workspace-add-G", "-G"], [10, 7, 1, "cmdoption-ocrd-workspace-add-g", "-g"], [10, 7, 1, "cmdoption-ocrd-workspace-add-i", "-i"], [10, 7, 1, "cmdoption-ocrd-workspace-add-m", "-m"], [10, 7, 1, "cmdoption-ocrd-workspace-add-arg-FNAME", "FNAME"]], "ocrd-workspace-backup-restore": [[10, 7, 1, "cmdoption-ocrd-workspace-backup-restore-f", "--choose-first"], [10, 7, 1, "cmdoption-ocrd-workspace-backup-restore-f", "-f"], [10, 7, 1, "cmdoption-ocrd-workspace-backup-restore-arg-BAK", "BAK"]], "ocrd-workspace-bulk-add": [[10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-n", "--dry-run"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-G", "--file-grp"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-i", "--file-id"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-f", "--force"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-I", "--ignore"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-l", "--local-filename"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-m", "--mimetype"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-g", "--page-id"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-r", "--regex"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-s", "--skip"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-S", "--source-path"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-u", "--url"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-G", "-G"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-I", "-I"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-S", "-S"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-f", "-f"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-g", "-g"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-i", "-i"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-l", "-l"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-m", "-m"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-n", "-n"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-r", "-r"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-s", "-s"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-u", "-u"], [10, 7, 1, "cmdoption-ocrd-workspace-bulk-add-arg-FILE_GLOB", "FILE_GLOB"]], "ocrd-workspace-clone": [[10, 7, 1, "cmdoption-ocrd-workspace-clone-f", "--clobber-mets"], [10, 7, 1, "cmdoption-ocrd-workspace-clone-a", "--download"], [10, 7, 1, "cmdoption-ocrd-workspace-clone-a", "-a"], [10, 7, 1, "cmdoption-ocrd-workspace-clone-f", "-f"], [10, 7, 1, "cmdoption-ocrd-workspace-clone-arg-METS_URL", "METS_URL"], [10, 7, 1, "cmdoption-ocrd-workspace-clone-arg-WORKSPACE_DIR", "WORKSPACE_DIR"]], "ocrd-workspace-find": [[10, 7, 1, "cmdoption-ocrd-workspace-find-download", "--download"], [10, 7, 1, "cmdoption-ocrd-workspace-find-G", "--file-grp"], [10, 7, 1, "cmdoption-ocrd-workspace-find-i", "--file-id"], [10, 7, 1, "cmdoption-ocrd-workspace-find-m", "--mimetype"], [10, 7, 1, "cmdoption-ocrd-workspace-find-k", "--output-field"], [10, 7, 1, "cmdoption-ocrd-workspace-find-g", "--page-id"], [10, 7, 1, "cmdoption-ocrd-workspace-find-undo-download", "--undo-download"], [10, 7, 1, "cmdoption-ocrd-workspace-find-wait", "--wait"], [10, 7, 1, "cmdoption-ocrd-workspace-find-G", "-G"], [10, 7, 1, "cmdoption-ocrd-workspace-find-g", "-g"], [10, 7, 1, "cmdoption-ocrd-workspace-find-i", "-i"], [10, 7, 1, "cmdoption-ocrd-workspace-find-k", "-k"], [10, 7, 1, "cmdoption-ocrd-workspace-find-m", "-m"]], "ocrd-workspace-init": [[10, 7, 1, "cmdoption-ocrd-workspace-init-f", "--clobber-mets"], [10, 7, 1, "cmdoption-ocrd-workspace-init-f", "-f"], [10, 7, 1, "cmdoption-ocrd-workspace-init-arg-DIRECTORY", "DIRECTORY"]], "ocrd-workspace-merge": [[10, 7, 1, "cmdoption-ocrd-workspace-merge-copy-files", "--copy-files"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-G", "--file-grp"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-i", "--file-id"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-fileGrp-mapping", "--fileGrp-mapping"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-fileId-mapping", "--fileId-mapping"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-force", "--force"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-m", "--mimetype"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-copy-files", "--no-copy-files"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-force", "--no-force"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-overwrite", "--no-overwrite"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-overwrite", "--overwrite"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-g", "--page-id"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-pageId-mapping", "--pageId-mapping"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-G", "-G"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-g", "-g"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-i", "-i"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-m", "-m"], [10, 7, 1, "cmdoption-ocrd-workspace-merge-arg-METS_PATH", "METS_PATH"]], "ocrd-workspace-prune-files": [[10, 7, 1, "cmdoption-ocrd-workspace-prune-files-G", "--file-grp"], [10, 7, 1, "cmdoption-ocrd-workspace-prune-files-i", "--file-id"], [10, 7, 1, "cmdoption-ocrd-workspace-prune-files-m", "--mimetype"], [10, 7, 1, "cmdoption-ocrd-workspace-prune-files-g", "--page-id"], [10, 7, 1, "cmdoption-ocrd-workspace-prune-files-G", "-G"], [10, 7, 1, "cmdoption-ocrd-workspace-prune-files-g", "-g"], [10, 7, 1, "cmdoption-ocrd-workspace-prune-files-i", "-i"], [10, 7, 1, "cmdoption-ocrd-workspace-prune-files-m", "-m"]], "ocrd-workspace-remove-group": [[10, 7, 1, "cmdoption-ocrd-workspace-remove-group-f", "--force"], [10, 7, 1, "cmdoption-ocrd-workspace-remove-group-k", "--keep-files"], [10, 7, 1, "cmdoption-ocrd-workspace-remove-group-r", "--recursive"], [10, 7, 1, "cmdoption-ocrd-workspace-remove-group-f", "-f"], [10, 7, 1, "cmdoption-ocrd-workspace-remove-group-k", "-k"], [10, 7, 1, "cmdoption-ocrd-workspace-remove-group-r", "-r"], [10, 7, 1, "cmdoption-ocrd-workspace-remove-group-arg-GROUP", "GROUP"]], "ocrd-workspace-remove": [[10, 7, 1, "cmdoption-ocrd-workspace-remove-f", "--force"], [10, 7, 1, "cmdoption-ocrd-workspace-remove-k", "--keep-file"], [10, 7, 1, "cmdoption-ocrd-workspace-remove-f", "-f"], [10, 7, 1, "cmdoption-ocrd-workspace-remove-k", "-k"], [10, 7, 1, "cmdoption-ocrd-workspace-remove-arg-ID", "ID"]], "ocrd-workspace-rename-group": [[10, 7, 1, "cmdoption-ocrd-workspace-rename-group-arg-NEW", "NEW"], [10, 7, 1, "cmdoption-ocrd-workspace-rename-group-arg-OLD", "OLD"]], "ocrd-workspace-set-id": [[10, 7, 1, "cmdoption-ocrd-workspace-set-id-arg-ID", "ID"]], "ocrd-workspace-validate": [[10, 7, 1, "cmdoption-ocrd-workspace-validate-a", "--download"], [10, 7, 1, "cmdoption-ocrd-workspace-validate-page-coordinate-consistency", "--page-coordinate-consistency"], [10, 7, 1, "cmdoption-ocrd-workspace-validate-page-textequiv-consistency", "--page-strictness"], [10, 7, 1, "cmdoption-ocrd-workspace-validate-page-textequiv-consistency", "--page-textequiv-consistency"], [10, 7, 1, "cmdoption-ocrd-workspace-validate-s", "--skip"], [10, 7, 1, "cmdoption-ocrd-workspace-validate-a", "-a"], [10, 7, 1, "cmdoption-ocrd-workspace-validate-s", "-s"], [10, 7, 1, "cmdoption-ocrd-workspace-validate-arg-METS_URL", "METS_URL"]], "ocrd-workspace": [[10, 7, 1, "cmdoption-ocrd-workspace-backup", "--backup"], [10, 7, 1, "cmdoption-ocrd-workspace-d", "--directory"], [10, 7, 1, "cmdoption-ocrd-workspace-m", "--mets"], [10, 7, 1, "cmdoption-ocrd-workspace-M", "--mets-basename"], [10, 7, 1, "cmdoption-ocrd-workspace-U", "--mets-server-url"], [10, 7, 1, "cmdoption-ocrd-workspace-M", "-M"], [10, 7, 1, "cmdoption-ocrd-workspace-U", "-U"], [10, 7, 1, "cmdoption-ocrd-workspace-d", "-d"], [10, 7, 1, "cmdoption-ocrd-workspace-m", "-m"]], "ocrd-zip-bag": [[11, 7, 1, "cmdoption-ocrd-zip-bag-b", "--base-version-checksum"], [11, 7, 1, "cmdoption-ocrd-zip-bag-d", "--directory"], [11, 7, 1, "cmdoption-ocrd-zip-bag-i", "--id"], [11, 7, 1, "cmdoption-ocrd-zip-bag-i", "--identifier"], [11, 7, 1, "cmdoption-ocrd-zip-bag-m", "--mets"], [11, 7, 1, "cmdoption-ocrd-zip-bag-M", "--mets-basename"], [11, 7, 1, "cmdoption-ocrd-zip-bag-j", "--processes"], [11, 7, 1, "cmdoption-ocrd-zip-bag-Z", "--skip-zip"], [11, 7, 1, "cmdoption-ocrd-zip-bag-t", "--tag-file"], [11, 7, 1, "cmdoption-ocrd-zip-bag-M", "-M"], [11, 7, 1, "cmdoption-ocrd-zip-bag-Z", "-Z"], [11, 7, 1, "cmdoption-ocrd-zip-bag-b", "-b"], [11, 7, 1, "cmdoption-ocrd-zip-bag-d", "-d"], [11, 7, 1, "cmdoption-ocrd-zip-bag-i", "-i"], [11, 7, 1, "cmdoption-ocrd-zip-bag-j", "-j"], [11, 7, 1, "cmdoption-ocrd-zip-bag-m", "-m"], [11, 7, 1, "cmdoption-ocrd-zip-bag-t", "-t"], [11, 7, 1, "cmdoption-ocrd-zip-bag-arg-DEST", "DEST"]], "ocrd-zip-spill": [[11, 7, 1, "cmdoption-ocrd-zip-spill-d", "--dest"], [11, 7, 1, "cmdoption-ocrd-zip-spill-d", "-d"], [11, 7, 1, "cmdoption-ocrd-zip-spill-arg-SRC", "SRC"]], "ocrd-zip-update": [[11, 7, 1, "cmdoption-ocrd-zip-update-o", "--overwrite"], [11, 7, 1, "cmdoption-ocrd-zip-update-o", "-o"], [11, 7, 1, "cmdoption-ocrd-zip-update-arg-DEST", "DEST"], [11, 7, 1, "cmdoption-ocrd-zip-update-arg-SRC", "SRC"]], "ocrd-zip-validate": [[11, 7, 1, "cmdoption-ocrd-zip-validate-j", "--processes"], [11, 7, 1, "cmdoption-ocrd-zip-validate-B", "--skip-bag"], [11, 7, 1, "cmdoption-ocrd-zip-validate-C", "--skip-checksums"], [11, 7, 1, "cmdoption-ocrd-zip-validate-D", "--skip-delete"], [11, 7, 1, "cmdoption-ocrd-zip-validate-Z", "--skip-unzip"], [11, 7, 1, "cmdoption-ocrd-zip-validate-B", "-B"], [11, 7, 1, "cmdoption-ocrd-zip-validate-C", "-C"], [11, 7, 1, "cmdoption-ocrd-zip-validate-D", "-D"], [11, 7, 1, "cmdoption-ocrd-zip-validate-Z", "-Z"], [11, 7, 1, "cmdoption-ocrd-zip-validate-j", "-j"], [11, 7, 1, "cmdoption-ocrd-zip-validate-arg-SRC", "SRC"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:function", "4": "py:property", "5": "py:attribute", "6": "py:exception", "7": "std:cmdoption"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "function", "Python function"], "4": ["py", "property", "Python property"], "5": ["py", "attribute", "Python attribute"], "6": ["py", "exception", "Python exception"], "7": ["std", "cmdoption", "program option"]}, "titleterms": {"ocrd": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], "packag": [1, 2, 13, 19, 21, 22, 32, 34, 45, 46, 56, 66, 77, 87], "subpackag": [1, 19, 21, 45], "submodul": [1, 2, 13, 19, 21, 34, 45, 46, 56, 66, 77, 87], "cli": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 46, 47, 48, 49, 50], "bashlib": 3, "modul": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 20, 23, 24, 25, 26, 27, 28, 29, 30, 35, 36, 37, 38, 39, 40, 41, 42, 43, 47, 48, 49, 50, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 81, 82, 83, 84, 85, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], "constant": [3, 12, 35, 68, 79, 88], "filenam": 3, "input": 3, "file": [3, 10], "log": [4, 55, 83], "critic": 4, "debug": 4, "error": 4, "info": 4, "trace": 4, "warn": 4, "network": 5, "client": [5, 47, 51], "discoveri": 5, "process": [5, 7], "processor": [5, 19, 20, 21, 22, 23, 24], "workflow": 5, "workspac": [5, 10, 28, 60], "server": [5, 10], "worker": 5, "ocrd_tool": [6, 59], "tool": [6, 9], "list": [6, 8, 10], "categori": 6, "descript": 6, "dump": 6, "help": 6, "resourc": 6, "pars": 6, "param": 6, "show": 6, "step": 6, "valid": [6, 9, 10, 11], "version": 6, "resmgr": 8, "download": 8, "avail": 8, "instal": 8, "migrat": 8, "page": [9, 10], "paramet": 9, "task": 9, "json": 9, "add": 10, "backup": 10, "restor": 10, "undo": 10, "bulk": 10, "clone": 10, "find": 10, "get": 10, "id": 10, "init": 10, "group": 10, "merg": 10, "prune": 10, "remov": 10, "renam": 10, "start": 10, "stop": 10, "set": 10, "zip": 11, "bag": 11, "spill": 11, "updat": 11, "decor": [13, 14, 15, 16, 17], "loglevel_opt": 14, "mets_find_opt": 15, "ocrd_cli_opt": 16, "parameter_opt": 17, "mets_serv": 18, "base": 20, "builtin": [21, 22, 23], "dummi": 22, "dummy_processor": 23, "helper": 24, "resolv": 25, "resource_manag": 26, "task_sequ": 27, "workspace_backup": 29, "workspace_bagg": 30, "ocrd_modelfactori": [31, 32], "ocrd_model": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43], "ocrd_ag": 36, "ocrd_exif": 37, "ocrd_fil": 38, "ocrd_met": 39, "ocrd_pag": 40, "ocrd_xml_bas": 41, "report": 42, "util": [43, 75], "ocrd_network": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75], "processing_serv": [48, 63], "processing_work": [49, 64], "processor_serv": [50, 65], "databas": 52, "deploy": 53, "deployment_util": 54, "model": [56, 57, 58, 59, 60], "job": 57, "messag": 58, "param_valid": 61, "process_help": 62, "rabbitmq_util": [66, 67, 68, 69, 70, 71], "connector": 67, "consum": 69, "ocrd_messag": 70, "publish": 71, "runtime_data": 72, "server_cach": 73, "server_util": 74, "ocrd_util": [76, 77, 78, 79, 80, 81, 82, 83, 84, 85], "config": 78, "deprec": 80, "imag": 81, "introspect": 82, "o": 84, "str": 85, "ocrd_valid": [86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], "json_valid": 89, "ocrd_network_message_valid": 90, "ocrd_tool_valid": 91, "ocrd_zip_valid": 92, "page_valid": 93, "parameter_valid": 94, "processing_server_config_valid": 95, "resource_list_valid": 96, "workspace_valid": 97, "xsd_mets_valid": 98, "xsd_page_valid": 99, "xsd_valid": 100, "ocr": 101, "d": 101, "core": 101, "content": 101, "indic": 101, "tabl": 101}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 58}, "alltitles": {"ocrd": [[0, "ocrd"], [2, "ocrd"]], "ocrd package": [[1, "module-ocrd"]], "Subpackages": [[1, "subpackages"], [19, "subpackages"], [21, "subpackages"], [45, "subpackages"]], "Submodules": [[1, "submodules"], [2, "submodules"], [13, "submodules"], [19, "submodules"], [21, "submodules"], [34, "submodules"], [45, "submodules"], [46, "submodules"], [56, "submodules"], [66, "submodules"], [77, "submodules"], [87, "submodules"]], "ocrd.cli package": [[2, "module-ocrd.cli"]], "ocrd.cli.bashlib module": [[3, "module-ocrd.cli.bashlib"]], "ocrd bashlib": [[3, "ocrd-bashlib"]], "constants": [[3, "ocrd-bashlib-constants"]], "filename": [[3, "ocrd-bashlib-filename"]], "input-files": [[3, "ocrd-bashlib-input-files"]], "ocrd.cli.log module": [[4, "module-ocrd.cli.log"]], "ocrd log": [[4, "ocrd-log"]], "critical": [[4, "ocrd-log-critical"]], "debug": [[4, "ocrd-log-debug"]], "error": [[4, "ocrd-log-error"]], "info": [[4, "ocrd-log-info"]], "trace": [[4, "ocrd-log-trace"]], "warning": [[4, "ocrd-log-warning"]], "ocrd.cli.network module": [[5, "module-ocrd.cli.network"]], "ocrd network": [[5, "ocrd-network"]], "client": [[5, "ocrd-network-client"]], "discovery": [[5, "ocrd-network-client-discovery"]], "processing": [[5, "ocrd-network-client-processing"]], "processor": [[5, "ocrd-network-client-processing-processor"]], "workflow": [[5, "ocrd-network-client-workflow"]], "workspace": [[5, "ocrd-network-client-workspace"]], "processing-server": [[5, "ocrd-network-processing-server"]], "processing-worker": [[5, "ocrd-network-processing-worker"]], "processor-server": [[5, "ocrd-network-processor-server"]], "ocrd.cli.ocrd_tool module": [[6, "module-ocrd.cli.ocrd_tool"]], "ocrd ocrd-tool": [[6, "ocrd-ocrd-tool"]], "list-tools": [[6, "ocrd-ocrd-tool-json-file-list-tools"]], "tool": [[6, "ocrd-ocrd-tool-json-file-tool"]], "categories": [[6, "ocrd-ocrd-tool-json-file-tool-tool-name-categories"]], "description": [[6, "ocrd-ocrd-tool-json-file-tool-tool-name-description"]], "dump": [[6, "ocrd-ocrd-tool-json-file-tool-tool-name-dump"]], "help": [[6, "ocrd-ocrd-tool-json-file-tool-tool-name-help"]], "list-resources": [[6, "ocrd-ocrd-tool-json-file-tool-tool-name-list-resources"]], "parse-params": [[6, "ocrd-ocrd-tool-json-file-tool-tool-name-parse-params"]], "show-resource": [[6, "ocrd-ocrd-tool-json-file-tool-tool-name-show-resource"]], "steps": [[6, "ocrd-ocrd-tool-json-file-tool-tool-name-steps"]], "validate": [[6, "ocrd-ocrd-tool-json-file-validate"], [10, "ocrd-workspace-validate"], [11, "ocrd-zip-validate"]], "version": [[6, "ocrd-ocrd-tool-json-file-version"]], "ocrd.cli.process module": [[7, "module-ocrd.cli.process"]], "ocrd process": [[7, "ocrd-process"]], "ocrd.cli.resmgr module": [[8, "module-ocrd.cli.resmgr"]], "ocrd resmgr": [[8, "ocrd-resmgr"]], "download": [[8, "ocrd-resmgr-download"]], "list-available": [[8, "ocrd-resmgr-list-available"]], "list-installed": [[8, "ocrd-resmgr-list-installed"]], "migrate": [[8, "ocrd-resmgr-migrate"]], "ocrd.cli.validate module": [[9, "module-ocrd.cli.validate"]], "ocrd validate": [[9, "ocrd-validate"]], "page": [[9, "ocrd-validate-page"]], "parameters": [[9, "ocrd-validate-parameters"]], "tasks": [[9, "ocrd-validate-tasks"]], "tool-json": [[9, "ocrd-validate-tool-json"]], "ocrd.cli.workspace module": [[10, "module-ocrd.cli.workspace"]], "ocrd workspace": [[10, "ocrd-workspace"]], "add": [[10, "ocrd-workspace-add"], [10, "ocrd-workspace-backup-add"]], "backup": [[10, "ocrd-workspace-backup"]], "list": [[10, "ocrd-workspace-backup-list"]], "restore": [[10, "ocrd-workspace-backup-restore"]], "undo": [[10, "ocrd-workspace-backup-undo"]], "bulk-add": [[10, "ocrd-workspace-bulk-add"]], "clone": [[10, "ocrd-workspace-clone"]], "find": [[10, "ocrd-workspace-find"]], "get-id": [[10, "ocrd-workspace-get-id"]], "init": [[10, "ocrd-workspace-init"]], "list-group": [[10, "ocrd-workspace-list-group"]], "list-page": [[10, "ocrd-workspace-list-page"]], "merge": [[10, "ocrd-workspace-merge"]], "prune-files": [[10, "ocrd-workspace-prune-files"]], "remove": [[10, "ocrd-workspace-remove"]], "remove-group": [[10, "ocrd-workspace-remove-group"]], "rename-group": [[10, "ocrd-workspace-rename-group"]], "server": [[10, "ocrd-workspace-server"]], "start": [[10, "ocrd-workspace-server-start"]], "stop": [[10, "ocrd-workspace-server-stop"]], "set-id": [[10, "ocrd-workspace-set-id"]], "ocrd.cli.zip module": [[11, "module-ocrd.cli.zip"]], "ocrd zip": [[11, "ocrd-zip"]], "bag": [[11, "ocrd-zip-bag"]], "spill": [[11, "ocrd-zip-spill"]], "update": [[11, "ocrd-zip-update"]], "ocrd.constants module": [[12, "module-ocrd.constants"]], "ocrd.decorators package": [[13, "module-ocrd.decorators"]], "ocrd.decorators.loglevel_option module": [[14, "module-ocrd.decorators.loglevel_option"]], "ocrd.decorators.mets_find_options module": [[15, "module-ocrd.decorators.mets_find_options"]], "ocrd.decorators.ocrd_cli_options module": [[16, "module-ocrd.decorators.ocrd_cli_options"]], "ocrd.decorators.parameter_option module": [[17, "module-ocrd.decorators.parameter_option"]], "ocrd.mets_server module": [[18, "module-ocrd.mets_server"]], "ocrd.processor package": [[19, "module-ocrd.processor"]], "ocrd.processor.base module": [[20, "module-ocrd.processor.base"]], "ocrd.processor.builtin package": [[21, "module-ocrd.processor.builtin"]], "ocrd.processor.builtin.dummy package": [[22, "module-ocrd.processor.builtin.dummy"]], "ocrd.processor.builtin.dummy_processor module": [[23, "module-ocrd.processor.builtin.dummy_processor"]], "ocrd.processor.helpers module": [[24, "module-ocrd.processor.helpers"]], "ocrd.resolver module": [[25, "module-ocrd.resolver"]], "ocrd.resource_manager module": [[26, "module-ocrd.resource_manager"]], "ocrd.task_sequence module": [[27, "module-ocrd.task_sequence"]], "ocrd.workspace module": [[28, "module-ocrd.workspace"]], "ocrd.workspace_backup module": [[29, "module-ocrd.workspace_backup"]], "ocrd.workspace_bagger module": [[30, "module-ocrd.workspace_bagger"]], "ocrd_modelfactory": [[31, "ocrd-modelfactory"]], "ocrd_modelfactory package": [[32, "module-ocrd_modelfactory"]], "ocrd_models": [[33, "ocrd-models"]], "ocrd_models package": [[34, "module-ocrd_models"]], "ocrd_models.constants module": [[35, "module-ocrd_models.constants"]], "ocrd_models.ocrd_agent module": [[36, "module-ocrd_models.ocrd_agent"]], "ocrd_models.ocrd_exif module": [[37, "module-ocrd_models.ocrd_exif"]], "ocrd_models.ocrd_file module": [[38, "module-ocrd_models.ocrd_file"]], "ocrd_models.ocrd_mets module": [[39, "module-ocrd_models.ocrd_mets"]], "ocrd_models.ocrd_page module": [[40, "module-ocrd_models.ocrd_page"]], "ocrd_models.ocrd_xml_base module": [[41, "module-ocrd_models.ocrd_xml_base"]], "ocrd_models.report module": [[42, "module-ocrd_models.report"]], "ocrd_models.utils module": [[43, "module-ocrd_models.utils"]], "ocrd_network": [[44, "ocrd-network"]], "ocrd_network package": [[45, "module-ocrd_network"]], "ocrd_network.cli package": [[46, "module-ocrd_network.cli"]], "ocrd_network.cli.client module": [[47, "module-ocrd_network.cli.client"]], "ocrd_network.cli.processing_server module": [[48, "module-ocrd_network.cli.processing_server"]], "ocrd_network.cli.processing_worker module": [[49, "module-ocrd_network.cli.processing_worker"]], "ocrd_network.cli.processor_server module": [[50, "module-ocrd_network.cli.processor_server"]], "ocrd_network.client module": [[51, "module-ocrd_network.client"]], "ocrd_network.database module": [[52, "module-ocrd_network.database"]], "ocrd_network.deployer module": [[53, "module-ocrd_network.deployer"]], "ocrd_network.deployment_utils module": [[54, "module-ocrd_network.deployment_utils"]], "ocrd_network.logging module": [[55, "module-ocrd_network.logging"]], "ocrd_network.models package": [[56, "module-ocrd_network.models"]], "ocrd_network.models.job module": [[57, "module-ocrd_network.models.job"]], "ocrd_network.models.messages module": [[58, "module-ocrd_network.models.messages"]], "ocrd_network.models.ocrd_tool module": [[59, "module-ocrd_network.models.ocrd_tool"]], "ocrd_network.models.workspace module": [[60, "module-ocrd_network.models.workspace"]], "ocrd_network.param_validators module": [[61, "module-ocrd_network.param_validators"]], "ocrd_network.process_helpers module": [[62, "module-ocrd_network.process_helpers"]], "ocrd_network.processing_server module": [[63, "module-ocrd_network.processing_server"]], "ocrd_network.processing_worker module": [[64, "module-ocrd_network.processing_worker"]], "ocrd_network.processor_server module": [[65, "module-ocrd_network.processor_server"]], "ocrd_network.rabbitmq_utils package": [[66, "module-ocrd_network.rabbitmq_utils"]], "ocrd_network.rabbitmq_utils.connector module": [[67, "module-ocrd_network.rabbitmq_utils.connector"]], "ocrd_network.rabbitmq_utils.constants module": [[68, "module-ocrd_network.rabbitmq_utils.constants"]], "ocrd_network.rabbitmq_utils.consumer module": [[69, "module-ocrd_network.rabbitmq_utils.consumer"]], "ocrd_network.rabbitmq_utils.ocrd_messages module": [[70, "module-ocrd_network.rabbitmq_utils.ocrd_messages"]], "ocrd_network.rabbitmq_utils.publisher module": [[71, "module-ocrd_network.rabbitmq_utils.publisher"]], "ocrd_network.runtime_data module": [[72, "module-ocrd_network.runtime_data"]], "ocrd_network.server_cache module": [[73, "module-ocrd_network.server_cache"]], "ocrd_network.server_utils module": [[74, "module-ocrd_network.server_utils"]], "ocrd_network.utils module": [[75, "module-ocrd_network.utils"]], "ocrd_utils": [[76, "ocrd-utils"]], "ocrd_utils package": [[77, "module-ocrd_utils"]], "ocrd_utils.config module": [[78, "module-ocrd_utils.config"]], "ocrd_utils.constants module": [[79, "module-ocrd_utils.constants"]], "ocrd_utils.deprecate module": [[80, "module-ocrd_utils.deprecate"]], "ocrd_utils.image module": [[81, "module-ocrd_utils.image"]], "ocrd_utils.introspect module": [[82, "module-ocrd_utils.introspect"]], "ocrd_utils.logging module": [[83, "module-ocrd_utils.logging"]], "ocrd_utils.os module": [[84, "module-ocrd_utils.os"]], "ocrd_utils.str module": [[85, "module-ocrd_utils.str"]], "ocrd_validators": [[86, "ocrd-validators"]], "ocrd_validators package": [[87, "module-ocrd_validators"]], "ocrd_validators.constants module": [[88, "module-ocrd_validators.constants"]], "ocrd_validators.json_validator module": [[89, "module-ocrd_validators.json_validator"]], "ocrd_validators.ocrd_network_message_validator module": [[90, "module-ocrd_validators.ocrd_network_message_validator"]], "ocrd_validators.ocrd_tool_validator module": [[91, "module-ocrd_validators.ocrd_tool_validator"]], "ocrd_validators.ocrd_zip_validator module": [[92, "module-ocrd_validators.ocrd_zip_validator"]], "ocrd_validators.page_validator module": [[93, "module-ocrd_validators.page_validator"]], "ocrd_validators.parameter_validator module": [[94, "module-ocrd_validators.parameter_validator"]], "ocrd_validators.processing_server_config_validator module": [[95, "module-ocrd_validators.processing_server_config_validator"]], "ocrd_validators.resource_list_validator module": [[96, "module-ocrd_validators.resource_list_validator"]], "ocrd_validators.workspace_validator module": [[97, "module-ocrd_validators.workspace_validator"]], "ocrd_validators.xsd_mets_validator module": [[98, "module-ocrd_validators.xsd_mets_validator"]], "ocrd_validators.xsd_page_validator module": [[99, "module-ocrd_validators.xsd_page_validator"]], "ocrd_validators.xsd_validator module": [[100, "module-ocrd_validators.xsd_validator"]], "OCR-D/core": [[101, "ocr-d-core"]], "Contents:": [[101, null]], "Indices and tables": [[101, "indices-and-tables"]]}, "indexentries": {"module": [[1, "module-ocrd"], [2, "module-ocrd.cli"], [3, "module-ocrd.cli.bashlib"], [4, "module-ocrd.cli.log"], [5, "module-ocrd.cli.network"], [6, "module-ocrd.cli.ocrd_tool"], [7, "module-ocrd.cli.process"], [8, "module-ocrd.cli.resmgr"], [9, "module-ocrd.cli.validate"], [10, "module-ocrd.cli.workspace"], [11, "module-ocrd.cli.zip"], [12, "module-ocrd.constants"], [13, "module-ocrd.decorators"], [14, "module-ocrd.decorators.loglevel_option"], [15, "module-ocrd.decorators.mets_find_options"], [16, "module-ocrd.decorators.ocrd_cli_options"], [17, "module-ocrd.decorators.parameter_option"], [18, "module-ocrd.mets_server"], [19, "module-ocrd.processor"], [20, "module-ocrd.processor.base"], [21, "module-ocrd.processor.builtin"], [22, "module-ocrd.processor.builtin.dummy"], [23, "module-ocrd.processor.builtin.dummy_processor"], [24, "module-ocrd.processor.helpers"], [25, "module-ocrd.resolver"], [26, "module-ocrd.resource_manager"], [27, "module-ocrd.task_sequence"], [28, "module-ocrd.workspace"], [29, "module-ocrd.workspace_backup"], [30, "module-ocrd.workspace_bagger"], [32, "module-ocrd_modelfactory"], [34, "module-ocrd_models"], [35, "module-ocrd_models.constants"], [36, "module-ocrd_models.ocrd_agent"], [37, "module-ocrd_models.ocrd_exif"], [38, "module-ocrd_models.ocrd_file"], [39, "module-ocrd_models.ocrd_mets"], [40, "module-ocrd_models.ocrd_page"], [41, "module-ocrd_models.ocrd_xml_base"], [42, "module-ocrd_models.report"], [43, "module-ocrd_models.utils"], [45, "module-ocrd_network"], [46, "module-ocrd_network.cli"], [47, "module-ocrd_network.cli.client"], [48, "module-ocrd_network.cli.processing_server"], [49, "module-ocrd_network.cli.processing_worker"], [50, "module-ocrd_network.cli.processor_server"], [51, "module-ocrd_network.client"], [52, "module-ocrd_network.database"], [53, "module-ocrd_network.deployer"], [54, "module-ocrd_network.deployment_utils"], [55, "module-ocrd_network.logging"], [56, "module-ocrd_network.models"], [57, "module-ocrd_network.models.job"], [58, "module-ocrd_network.models.messages"], [59, "module-ocrd_network.models.ocrd_tool"], [60, "module-ocrd_network.models.workspace"], [61, "module-ocrd_network.param_validators"], [62, "module-ocrd_network.process_helpers"], [63, "module-ocrd_network.processing_server"], [64, "module-ocrd_network.processing_worker"], [65, "module-ocrd_network.processor_server"], [66, "module-ocrd_network.rabbitmq_utils"], [67, "module-ocrd_network.rabbitmq_utils.connector"], [68, "module-ocrd_network.rabbitmq_utils.constants"], [69, "module-ocrd_network.rabbitmq_utils.consumer"], [70, "module-ocrd_network.rabbitmq_utils.ocrd_messages"], [71, "module-ocrd_network.rabbitmq_utils.publisher"], [72, "module-ocrd_network.runtime_data"], [73, "module-ocrd_network.server_cache"], [74, "module-ocrd_network.server_utils"], [75, "module-ocrd_network.utils"], [77, "module-ocrd_utils"], [78, "module-ocrd_utils.config"], [79, "module-ocrd_utils.constants"], [80, "module-ocrd_utils.deprecate"], [81, "module-ocrd_utils.image"], [82, "module-ocrd_utils.introspect"], [83, "module-ocrd_utils.logging"], [84, "module-ocrd_utils.os"], [85, "module-ocrd_utils.str"], [87, "module-ocrd_validators"], [88, "module-ocrd_validators.constants"], [89, "module-ocrd_validators.json_validator"], [90, "module-ocrd_validators.ocrd_network_message_validator"], [91, "module-ocrd_validators.ocrd_tool_validator"], [92, "module-ocrd_validators.ocrd_zip_validator"], [93, "module-ocrd_validators.page_validator"], [94, "module-ocrd_validators.parameter_validator"], [95, "module-ocrd_validators.processing_server_config_validator"], [96, "module-ocrd_validators.resource_list_validator"], [97, "module-ocrd_validators.workspace_validator"], [98, "module-ocrd_validators.xsd_mets_validator"], [99, "module-ocrd_validators.xsd_page_validator"], [100, "module-ocrd_validators.xsd_validator"]], "ocrd": [[1, "module-ocrd"]], "--log-level": [[2, "cmdoption-ocrd-l"], [3, "cmdoption-ocrd-bashlib-input-files-l"], [7, "cmdoption-ocrd-process-l"]], "--version": [[2, "cmdoption-ocrd-version"]], "-l": [[2, "cmdoption-ocrd-l"], [3, "cmdoption-ocrd-bashlib-input-files-l"], [7, "cmdoption-ocrd-process-l"], [8, "cmdoption-ocrd-resmgr-download-l"], [10, "cmdoption-ocrd-workspace-bulk-add-l"]], "ocrd command line option": [[2, "cmdoption-ocrd-l"], [2, "cmdoption-ocrd-version"]], "ocrd.cli": [[2, "module-ocrd.cli"]], "--input-file-grp": [[3, "cmdoption-ocrd-bashlib-input-files-I"], [5, "cmdoption-ocrd-network-client-processing-processor-I"]], "--mets": [[3, "cmdoption-ocrd-bashlib-input-files-m"], [5, "cmdoption-ocrd-network-client-processing-processor-m"], [7, "cmdoption-ocrd-process-m"], [10, "cmdoption-ocrd-workspace-m"], [11, "cmdoption-ocrd-zip-bag-m"]], "--output-file-grp": [[3, "cmdoption-ocrd-bashlib-input-files-O"], [5, "cmdoption-ocrd-network-client-processing-processor-O"]], "--overwrite": [[3, "cmdoption-ocrd-bashlib-input-files-overwrite"], [7, "cmdoption-ocrd-process-overwrite"], [8, "cmdoption-ocrd-resmgr-download-o"], [9, "cmdoption-ocrd-validate-tasks-overwrite"], [10, "cmdoption-ocrd-workspace-merge-overwrite"], [11, "cmdoption-ocrd-zip-update-o"]], "--page-id": [[3, "cmdoption-ocrd-bashlib-input-files-g"], [5, "cmdoption-ocrd-network-client-processing-processor-g"], [7, "cmdoption-ocrd-process-g"], [9, "cmdoption-ocrd-validate-tasks-g"], [10, "cmdoption-ocrd-workspace-add-g"], [10, "cmdoption-ocrd-workspace-bulk-add-g"], [10, "cmdoption-ocrd-workspace-find-g"], [10, "cmdoption-ocrd-workspace-merge-g"], [10, "cmdoption-ocrd-workspace-prune-files-g"]], "--parameter": [[3, "cmdoption-ocrd-bashlib-input-files-p"], [5, "cmdoption-ocrd-network-client-processing-processor-p"], [6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-p"]], "--parameter-override": [[3, "cmdoption-ocrd-bashlib-input-files-P"], [6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-P"]], "--working-dir": [[3, "cmdoption-ocrd-bashlib-input-files-w"]], "-i": [[3, "cmdoption-ocrd-bashlib-input-files-I"], [5, "cmdoption-ocrd-network-client-processing-processor-I"], [10, "cmdoption-ocrd-workspace-bulk-add-I"], [10, "cmdoption-ocrd-workspace-add-i"], [10, "cmdoption-ocrd-workspace-bulk-add-i"], [10, "cmdoption-ocrd-workspace-find-i"], [10, "cmdoption-ocrd-workspace-merge-i"], [10, "cmdoption-ocrd-workspace-prune-files-i"], [11, "cmdoption-ocrd-zip-bag-i"]], "-o": [[3, "cmdoption-ocrd-bashlib-input-files-O"], [5, "cmdoption-ocrd-network-client-processing-processor-O"], [8, "cmdoption-ocrd-resmgr-download-o"], [11, "cmdoption-ocrd-zip-update-o"]], "-p": [[3, "cmdoption-ocrd-bashlib-input-files-P"], [3, "cmdoption-ocrd-bashlib-input-files-p"], [5, "cmdoption-ocrd-network-client-processing-processor-p"], [6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-P"], [6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-p"], [8, "cmdoption-ocrd-resmgr-download-P"]], "-g": [[3, "cmdoption-ocrd-bashlib-input-files-g"], [5, "cmdoption-ocrd-network-client-processing-processor-g"], [7, "cmdoption-ocrd-process-g"], [9, "cmdoption-ocrd-validate-tasks-g"], [10, "cmdoption-ocrd-workspace-add-G"], [10, "cmdoption-ocrd-workspace-bulk-add-G"], [10, "cmdoption-ocrd-workspace-find-G"], [10, "cmdoption-ocrd-workspace-merge-G"], [10, "cmdoption-ocrd-workspace-prune-files-G"], [10, "cmdoption-ocrd-workspace-add-g"], [10, "cmdoption-ocrd-workspace-bulk-add-g"], [10, "cmdoption-ocrd-workspace-find-g"], [10, "cmdoption-ocrd-workspace-merge-g"], [10, "cmdoption-ocrd-workspace-prune-files-g"]], "-m": [[3, "cmdoption-ocrd-bashlib-input-files-m"], [5, "cmdoption-ocrd-network-client-processing-processor-m"], [7, "cmdoption-ocrd-process-m"], [9, "cmdoption-ocrd-validate-tasks-M"], [10, "cmdoption-ocrd-workspace-M"], [10, "cmdoption-ocrd-workspace-add-m"], [10, "cmdoption-ocrd-workspace-bulk-add-m"], [10, "cmdoption-ocrd-workspace-find-m"], [10, "cmdoption-ocrd-workspace-m"], [10, "cmdoption-ocrd-workspace-merge-m"], [10, "cmdoption-ocrd-workspace-prune-files-m"], [11, "cmdoption-ocrd-zip-bag-M"], [11, "cmdoption-ocrd-zip-bag-m"]], "-w": [[3, "cmdoption-ocrd-bashlib-input-files-w"]], "name": [[3, "cmdoption-ocrd-bashlib-constants-arg-NAME"], [8, "cmdoption-ocrd-resmgr-download-arg-NAME"]], "ocrd-bashlib-constants command line option": [[3, "cmdoption-ocrd-bashlib-constants-arg-NAME"]], "ocrd-bashlib-input-files command line option": [[3, "cmdoption-ocrd-bashlib-input-files-I"], [3, "cmdoption-ocrd-bashlib-input-files-O"], [3, "cmdoption-ocrd-bashlib-input-files-P"], [3, "cmdoption-ocrd-bashlib-input-files-g"], [3, "cmdoption-ocrd-bashlib-input-files-l"], [3, "cmdoption-ocrd-bashlib-input-files-m"], [3, "cmdoption-ocrd-bashlib-input-files-overwrite"], [3, "cmdoption-ocrd-bashlib-input-files-p"], [3, "cmdoption-ocrd-bashlib-input-files-w"]], "ocrd.cli.bashlib": [[3, "module-ocrd.cli.bashlib"]], "--name": [[4, "cmdoption-ocrd-log-n"]], "-n": [[4, "cmdoption-ocrd-log-n"], [8, "cmdoption-ocrd-resmgr-download-n"], [10, "cmdoption-ocrd-workspace-bulk-add-n"]], "logctx (class in ocrd.cli.log)": [[4, "ocrd.cli.log.LogCtx"]], "msgs": [[4, "cmdoption-ocrd-log-critical-arg-MSGS"], [4, "cmdoption-ocrd-log-debug-arg-MSGS"], [4, "cmdoption-ocrd-log-error-arg-MSGS"], [4, "cmdoption-ocrd-log-info-arg-MSGS"], [4, "cmdoption-ocrd-log-trace-arg-MSGS"], [4, "cmdoption-ocrd-log-warning-arg-MSGS"]], "log() (ocrd.cli.log.logctx method)": [[4, "ocrd.cli.log.LogCtx.log"]], "ocrd-log command line option": [[4, "cmdoption-ocrd-log-n"]], "ocrd-log-critical command line option": [[4, "cmdoption-ocrd-log-critical-arg-MSGS"]], "ocrd-log-debug command line option": [[4, "cmdoption-ocrd-log-debug-arg-MSGS"]], "ocrd-log-error command line option": [[4, "cmdoption-ocrd-log-error-arg-MSGS"]], "ocrd-log-info command line option": [[4, "cmdoption-ocrd-log-info-arg-MSGS"]], "ocrd-log-trace command line option": [[4, "cmdoption-ocrd-log-trace-arg-MSGS"]], "ocrd-log-warning command line option": [[4, "cmdoption-ocrd-log-warning-arg-MSGS"]], "ocrd.cli.log": [[4, "module-ocrd.cli.log"]], "--address": [[5, "cmdoption-ocrd-network-client-processing-processor-address"], [5, "cmdoption-ocrd-network-processing-server-a"], [5, "cmdoption-ocrd-network-processor-server-a"]], "--agent-type": [[5, "cmdoption-ocrd-network-client-processing-processor-agent-type"]], "--callback-url": [[5, "cmdoption-ocrd-network-client-processing-processor-callback-url"]], "--database": [[5, "cmdoption-ocrd-network-processing-worker-d"], [5, "cmdoption-ocrd-network-processor-server-d"]], "--queue": [[5, "cmdoption-ocrd-network-processing-worker-q"]], "--result-queue-name": [[5, "cmdoption-ocrd-network-client-processing-processor-result-queue-name"]], "-a": [[5, "cmdoption-ocrd-network-processing-server-a"], [5, "cmdoption-ocrd-network-processor-server-a"], [8, "cmdoption-ocrd-resmgr-download-a"], [10, "cmdoption-ocrd-workspace-clone-a"], [10, "cmdoption-ocrd-workspace-validate-a"]], "-d": [[5, "cmdoption-ocrd-network-processing-worker-d"], [5, "cmdoption-ocrd-network-processor-server-d"], [8, "cmdoption-ocrd-resmgr-download-D"], [8, "cmdoption-ocrd-resmgr-list-available-D"], [10, "cmdoption-ocrd-workspace-d"], [11, "cmdoption-ocrd-zip-validate-D"], [11, "cmdoption-ocrd-zip-bag-d"], [11, "cmdoption-ocrd-zip-spill-d"]], "-q": [[5, "cmdoption-ocrd-network-processing-worker-q"]], "path_to_config": [[5, "cmdoption-ocrd-network-processing-server-arg-PATH_TO_CONFIG"]], "processor_name": [[5, "cmdoption-ocrd-network-client-processing-processor-arg-PROCESSOR_NAME"], [5, "cmdoption-ocrd-network-processing-worker-arg-PROCESSOR_NAME"], [5, "cmdoption-ocrd-network-processor-server-arg-PROCESSOR_NAME"]], "ocrd-network-client-processing-processor command line option": [[5, "cmdoption-ocrd-network-client-processing-processor-I"], [5, "cmdoption-ocrd-network-client-processing-processor-O"], [5, "cmdoption-ocrd-network-client-processing-processor-address"], [5, "cmdoption-ocrd-network-client-processing-processor-agent-type"], [5, "cmdoption-ocrd-network-client-processing-processor-arg-PROCESSOR_NAME"], [5, "cmdoption-ocrd-network-client-processing-processor-callback-url"], [5, "cmdoption-ocrd-network-client-processing-processor-g"], [5, "cmdoption-ocrd-network-client-processing-processor-m"], [5, "cmdoption-ocrd-network-client-processing-processor-p"], [5, "cmdoption-ocrd-network-client-processing-processor-result-queue-name"]], "ocrd-network-processing-server command line option": [[5, "cmdoption-ocrd-network-processing-server-a"], [5, "cmdoption-ocrd-network-processing-server-arg-PATH_TO_CONFIG"]], "ocrd-network-processing-worker command line option": [[5, "cmdoption-ocrd-network-processing-worker-arg-PROCESSOR_NAME"], [5, "cmdoption-ocrd-network-processing-worker-d"], [5, "cmdoption-ocrd-network-processing-worker-q"]], "ocrd-network-processor-server command line option": [[5, "cmdoption-ocrd-network-processor-server-a"], [5, "cmdoption-ocrd-network-processor-server-arg-PROCESSOR_NAME"], [5, "cmdoption-ocrd-network-processor-server-d"]], "ocrd.cli.network": [[5, "module-ocrd.cli.network"]], "--json": [[6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-j"]], "-j": [[6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-j"], [11, "cmdoption-ocrd-zip-bag-j"], [11, "cmdoption-ocrd-zip-validate-j"]], "json_file": [[6, "cmdoption-ocrd-ocrd-tool-arg-JSON_FILE"]], "ocrdtoolctx (class in ocrd.cli.ocrd_tool)": [[6, "ocrd.cli.ocrd_tool.OcrdToolCtx"]], "res_name": [[6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-show-resource-arg-RES_NAME"]], "subcommand": [[6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-help-arg-SUBCOMMAND"]], "tool_name": [[6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-arg-TOOL_NAME"]], "ocrd-ocrd-tool command line option": [[6, "cmdoption-ocrd-ocrd-tool-arg-JSON_FILE"]], "ocrd-ocrd-tool-json_file-tool command line option": [[6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-arg-TOOL_NAME"]], "ocrd-ocrd-tool-json_file-tool-tool_name-help command line option": [[6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-help-arg-SUBCOMMAND"]], "ocrd-ocrd-tool-json_file-tool-tool_name-parse-params command line option": [[6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-P"], [6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-j"], [6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-parse-params-p"]], "ocrd-ocrd-tool-json_file-tool-tool_name-show-resource command line option": [[6, "cmdoption-ocrd-ocrd-tool-JSON_FILE-tool-TOOL_NAME-show-resource-arg-RES_NAME"]], "ocrd.cli.ocrd_tool": [[6, "module-ocrd.cli.ocrd_tool"]], "tasks": [[7, "cmdoption-ocrd-process-arg-TASKS"], [9, "cmdoption-ocrd-validate-tasks-arg-TASKS"]], "ocrd-process command line option": [[7, "cmdoption-ocrd-process-arg-TASKS"], [7, "cmdoption-ocrd-process-g"], [7, "cmdoption-ocrd-process-l"], [7, "cmdoption-ocrd-process-m"], [7, "cmdoption-ocrd-process-overwrite"]], "ocrd.cli.process": [[7, "module-ocrd.cli.process"]], "--allow-uninstalled": [[8, "cmdoption-ocrd-resmgr-download-a"]], "--any-url": [[8, "cmdoption-ocrd-resmgr-download-n"]], "--executable": [[8, "cmdoption-ocrd-resmgr-list-available-e"], [8, "cmdoption-ocrd-resmgr-list-installed-e"]], "--location": [[8, "cmdoption-ocrd-resmgr-download-l"]], "--no-dynamic": [[8, "cmdoption-ocrd-resmgr-download-D"], [8, "cmdoption-ocrd-resmgr-list-available-D"]], "--path-in-archive": [[8, "cmdoption-ocrd-resmgr-download-P"]], "--resource-type": [[8, "cmdoption-ocrd-resmgr-download-t"]], "-e": [[8, "cmdoption-ocrd-resmgr-list-available-e"], [8, "cmdoption-ocrd-resmgr-list-installed-e"]], "-t": [[8, "cmdoption-ocrd-resmgr-download-t"], [11, "cmdoption-ocrd-zip-bag-t"]], "executable": [[8, "cmdoption-ocrd-resmgr-download-arg-EXECUTABLE"], [9, "cmdoption-ocrd-validate-parameters-arg-EXECUTABLE"]], "migration": [[8, "cmdoption-ocrd-resmgr-migrate-arg-MIGRATION"]], "ocrd-resmgr-download command line option": [[8, "cmdoption-ocrd-resmgr-download-D"], [8, "cmdoption-ocrd-resmgr-download-P"], [8, "cmdoption-ocrd-resmgr-download-a"], [8, "cmdoption-ocrd-resmgr-download-arg-EXECUTABLE"], [8, "cmdoption-ocrd-resmgr-download-arg-NAME"], [8, "cmdoption-ocrd-resmgr-download-l"], [8, "cmdoption-ocrd-resmgr-download-n"], [8, "cmdoption-ocrd-resmgr-download-o"], [8, "cmdoption-ocrd-resmgr-download-t"]], "ocrd-resmgr-list-available command line option": [[8, "cmdoption-ocrd-resmgr-list-available-D"], [8, "cmdoption-ocrd-resmgr-list-available-e"]], "ocrd-resmgr-list-installed command line option": [[8, "cmdoption-ocrd-resmgr-list-installed-e"]], "ocrd-resmgr-migrate command line option": [[8, "cmdoption-ocrd-resmgr-migrate-arg-MIGRATION"]], "ocrd.cli.resmgr": [[8, "module-ocrd.cli.resmgr"]], "print_resources() (in module ocrd.cli.resmgr)": [[8, "ocrd.cli.resmgr.print_resources"]], "--check-baseline": [[9, "cmdoption-ocrd-validate-page-check-baseline"]], "--check-coords": [[9, "cmdoption-ocrd-validate-page-check-coords"]], "--mets-basename": [[9, "cmdoption-ocrd-validate-tasks-M"], [10, "cmdoption-ocrd-workspace-M"], [11, "cmdoption-ocrd-zip-bag-M"]], "--page-textequiv-consistency": [[9, "cmdoption-ocrd-validate-page-page-textequiv-consistency"], [10, "cmdoption-ocrd-workspace-validate-page-textequiv-consistency"]], "--page-textequiv-strategy": [[9, "cmdoption-ocrd-validate-page-page-textequiv-strategy"]], "--workspace": [[9, "cmdoption-ocrd-validate-tasks-workspace"]], "ocrd_tool": [[9, "cmdoption-ocrd-validate-parameters-arg-OCRD_TOOL"], [9, "cmdoption-ocrd-validate-tool-json-arg-OCRD_TOOL"]], "page": [[9, "cmdoption-ocrd-validate-page-arg-PAGE"]], "param_json": [[9, "cmdoption-ocrd-validate-parameters-arg-PARAM_JSON"]], "ocrd-validate-page command line option": [[9, "cmdoption-ocrd-validate-page-arg-PAGE"], [9, "cmdoption-ocrd-validate-page-check-baseline"], [9, "cmdoption-ocrd-validate-page-check-coords"], [9, "cmdoption-ocrd-validate-page-page-textequiv-consistency"], [9, "cmdoption-ocrd-validate-page-page-textequiv-strategy"]], "ocrd-validate-parameters command line option": [[9, "cmdoption-ocrd-validate-parameters-arg-EXECUTABLE"], [9, "cmdoption-ocrd-validate-parameters-arg-OCRD_TOOL"], [9, "cmdoption-ocrd-validate-parameters-arg-PARAM_JSON"]], "ocrd-validate-tasks command line option": [[9, "cmdoption-ocrd-validate-tasks-M"], [9, "cmdoption-ocrd-validate-tasks-arg-TASKS"], [9, "cmdoption-ocrd-validate-tasks-g"], [9, "cmdoption-ocrd-validate-tasks-overwrite"], [9, "cmdoption-ocrd-validate-tasks-workspace"]], "ocrd-validate-tool-json command line option": [[9, "cmdoption-ocrd-validate-tool-json-arg-OCRD_TOOL"]], "ocrd.cli.validate": [[9, "module-ocrd.cli.validate"]], "--backup": [[10, "cmdoption-ocrd-workspace-backup"]], "--check-file-exists": [[10, "cmdoption-ocrd-workspace-add-C"]], "--choose-first": [[10, "cmdoption-ocrd-workspace-backup-restore-f"]], "--clobber-mets": [[10, "cmdoption-ocrd-workspace-clone-f"], [10, "cmdoption-ocrd-workspace-init-f"]], "--copy-files": [[10, "cmdoption-ocrd-workspace-merge-copy-files"]], "--directory": [[10, "cmdoption-ocrd-workspace-d"], [11, "cmdoption-ocrd-zip-bag-d"]], "--download": [[10, "cmdoption-ocrd-workspace-clone-a"], [10, "cmdoption-ocrd-workspace-find-download"], [10, "cmdoption-ocrd-workspace-validate-a"]], "--dry-run": [[10, "cmdoption-ocrd-workspace-bulk-add-n"]], "--file-grp": [[10, "cmdoption-ocrd-workspace-add-G"], [10, "cmdoption-ocrd-workspace-bulk-add-G"], [10, "cmdoption-ocrd-workspace-find-G"], [10, "cmdoption-ocrd-workspace-merge-G"], [10, "cmdoption-ocrd-workspace-prune-files-G"]], "--file-id": [[10, "cmdoption-ocrd-workspace-add-i"], [10, "cmdoption-ocrd-workspace-bulk-add-i"], [10, "cmdoption-ocrd-workspace-find-i"], [10, "cmdoption-ocrd-workspace-merge-i"], [10, "cmdoption-ocrd-workspace-prune-files-i"]], "--filegrp-mapping": [[10, "cmdoption-ocrd-workspace-merge-fileGrp-mapping"]], "--fileid-mapping": [[10, "cmdoption-ocrd-workspace-merge-fileId-mapping"]], "--force": [[10, "cmdoption-ocrd-workspace-add-force"], [10, "cmdoption-ocrd-workspace-bulk-add-f"], [10, "cmdoption-ocrd-workspace-merge-force"], [10, "cmdoption-ocrd-workspace-remove-f"], [10, "cmdoption-ocrd-workspace-remove-group-f"]], "--ignore": [[10, "cmdoption-ocrd-workspace-add-ignore"], [10, "cmdoption-ocrd-workspace-bulk-add-I"]], "--keep-file": [[10, "cmdoption-ocrd-workspace-remove-k"]], "--keep-files": [[10, "cmdoption-ocrd-workspace-remove-group-k"]], "--local-filename": [[10, "cmdoption-ocrd-workspace-bulk-add-l"]], "--mets-server-url": [[10, "cmdoption-ocrd-workspace-U"]], "--mimetype": [[10, "cmdoption-ocrd-workspace-add-m"], [10, "cmdoption-ocrd-workspace-bulk-add-m"], [10, "cmdoption-ocrd-workspace-find-m"], [10, "cmdoption-ocrd-workspace-merge-m"], [10, "cmdoption-ocrd-workspace-prune-files-m"]], "--no-copy-files": [[10, "cmdoption-ocrd-workspace-merge-copy-files"]], "--no-force": [[10, "cmdoption-ocrd-workspace-merge-force"]], "--no-overwrite": [[10, "cmdoption-ocrd-workspace-merge-overwrite"]], "--output-field": [[10, "cmdoption-ocrd-workspace-find-k"]], "--page-coordinate-consistency": [[10, "cmdoption-ocrd-workspace-validate-page-coordinate-consistency"]], "--page-strictness": [[10, "cmdoption-ocrd-workspace-validate-page-textequiv-consistency"]], "--pageid-mapping": [[10, "cmdoption-ocrd-workspace-merge-pageId-mapping"]], "--recursive": [[10, "cmdoption-ocrd-workspace-remove-group-r"]], "--regex": [[10, "cmdoption-ocrd-workspace-bulk-add-r"]], "--skip": [[10, "cmdoption-ocrd-workspace-bulk-add-s"], [10, "cmdoption-ocrd-workspace-validate-s"]], "--source-path": [[10, "cmdoption-ocrd-workspace-bulk-add-S"]], "--undo-download": [[10, "cmdoption-ocrd-workspace-find-undo-download"]], "--url": [[10, "cmdoption-ocrd-workspace-bulk-add-u"]], "--wait": [[10, "cmdoption-ocrd-workspace-find-wait"]], "-c": [[10, "cmdoption-ocrd-workspace-add-C"], [11, "cmdoption-ocrd-zip-validate-C"]], "-s": [[10, "cmdoption-ocrd-workspace-bulk-add-S"], [10, "cmdoption-ocrd-workspace-bulk-add-s"], [10, "cmdoption-ocrd-workspace-validate-s"]], "-u": [[10, "cmdoption-ocrd-workspace-U"], [10, "cmdoption-ocrd-workspace-bulk-add-u"]], "-f": [[10, "cmdoption-ocrd-workspace-backup-restore-f"], [10, "cmdoption-ocrd-workspace-bulk-add-f"], [10, "cmdoption-ocrd-workspace-clone-f"], [10, "cmdoption-ocrd-workspace-init-f"], [10, "cmdoption-ocrd-workspace-remove-f"], [10, "cmdoption-ocrd-workspace-remove-group-f"]], "-k": [[10, "cmdoption-ocrd-workspace-find-k"], [10, "cmdoption-ocrd-workspace-remove-group-k"], [10, "cmdoption-ocrd-workspace-remove-k"]], "-r": [[10, "cmdoption-ocrd-workspace-bulk-add-r"], [10, "cmdoption-ocrd-workspace-remove-group-r"]], "bak": [[10, "cmdoption-ocrd-workspace-backup-restore-arg-BAK"]], "directory": [[10, "cmdoption-ocrd-workspace-init-arg-DIRECTORY"]], "file_glob": [[10, "cmdoption-ocrd-workspace-bulk-add-arg-FILE_GLOB"]], "fname": [[10, "cmdoption-ocrd-workspace-add-arg-FNAME"]], "group": [[10, "cmdoption-ocrd-workspace-remove-group-arg-GROUP"]], "id": [[10, "cmdoption-ocrd-workspace-remove-arg-ID"], [10, "cmdoption-ocrd-workspace-set-id-arg-ID"]], "mets_path": [[10, "cmdoption-ocrd-workspace-merge-arg-METS_PATH"]], "mets_url": [[10, "cmdoption-ocrd-workspace-clone-arg-METS_URL"], [10, "cmdoption-ocrd-workspace-validate-arg-METS_URL"]], "new": [[10, "cmdoption-ocrd-workspace-rename-group-arg-NEW"]], "old": [[10, "cmdoption-ocrd-workspace-rename-group-arg-OLD"]], "workspace_dir": [[10, "cmdoption-ocrd-workspace-clone-arg-WORKSPACE_DIR"]], "workspacectx (class in ocrd.cli.workspace)": [[10, "ocrd.cli.workspace.WorkspaceCtx"]], "ocrd-workspace command line option": [[10, "cmdoption-ocrd-workspace-M"], [10, "cmdoption-ocrd-workspace-U"], [10, "cmdoption-ocrd-workspace-backup"], [10, "cmdoption-ocrd-workspace-d"], [10, "cmdoption-ocrd-workspace-m"]], "ocrd-workspace-add command line option": [[10, "cmdoption-ocrd-workspace-add-C"], [10, "cmdoption-ocrd-workspace-add-G"], [10, "cmdoption-ocrd-workspace-add-arg-FNAME"], [10, "cmdoption-ocrd-workspace-add-force"], [10, "cmdoption-ocrd-workspace-add-g"], [10, "cmdoption-ocrd-workspace-add-i"], [10, "cmdoption-ocrd-workspace-add-ignore"], [10, "cmdoption-ocrd-workspace-add-m"]], "ocrd-workspace-backup-restore command line option": [[10, "cmdoption-ocrd-workspace-backup-restore-arg-BAK"], [10, "cmdoption-ocrd-workspace-backup-restore-f"]], "ocrd-workspace-bulk-add command line option": [[10, "cmdoption-ocrd-workspace-bulk-add-G"], [10, "cmdoption-ocrd-workspace-bulk-add-I"], [10, "cmdoption-ocrd-workspace-bulk-add-S"], [10, "cmdoption-ocrd-workspace-bulk-add-arg-FILE_GLOB"], [10, "cmdoption-ocrd-workspace-bulk-add-f"], [10, "cmdoption-ocrd-workspace-bulk-add-g"], [10, "cmdoption-ocrd-workspace-bulk-add-i"], [10, "cmdoption-ocrd-workspace-bulk-add-l"], [10, "cmdoption-ocrd-workspace-bulk-add-m"], [10, "cmdoption-ocrd-workspace-bulk-add-n"], [10, "cmdoption-ocrd-workspace-bulk-add-r"], [10, "cmdoption-ocrd-workspace-bulk-add-s"], [10, "cmdoption-ocrd-workspace-bulk-add-u"]], "ocrd-workspace-clone command line option": [[10, "cmdoption-ocrd-workspace-clone-a"], [10, "cmdoption-ocrd-workspace-clone-arg-METS_URL"], [10, "cmdoption-ocrd-workspace-clone-arg-WORKSPACE_DIR"], [10, "cmdoption-ocrd-workspace-clone-f"]], "ocrd-workspace-find command line option": [[10, "cmdoption-ocrd-workspace-find-G"], [10, "cmdoption-ocrd-workspace-find-download"], [10, "cmdoption-ocrd-workspace-find-g"], [10, "cmdoption-ocrd-workspace-find-i"], [10, "cmdoption-ocrd-workspace-find-k"], [10, "cmdoption-ocrd-workspace-find-m"], [10, "cmdoption-ocrd-workspace-find-undo-download"], [10, "cmdoption-ocrd-workspace-find-wait"]], "ocrd-workspace-init command line option": [[10, "cmdoption-ocrd-workspace-init-arg-DIRECTORY"], [10, "cmdoption-ocrd-workspace-init-f"]], "ocrd-workspace-merge command line option": [[10, "cmdoption-ocrd-workspace-merge-G"], [10, "cmdoption-ocrd-workspace-merge-arg-METS_PATH"], [10, "cmdoption-ocrd-workspace-merge-copy-files"], [10, "cmdoption-ocrd-workspace-merge-fileGrp-mapping"], [10, "cmdoption-ocrd-workspace-merge-fileId-mapping"], [10, "cmdoption-ocrd-workspace-merge-force"], [10, "cmdoption-ocrd-workspace-merge-g"], [10, "cmdoption-ocrd-workspace-merge-i"], [10, "cmdoption-ocrd-workspace-merge-m"], [10, "cmdoption-ocrd-workspace-merge-overwrite"], [10, "cmdoption-ocrd-workspace-merge-pageId-mapping"]], "ocrd-workspace-prune-files command line option": [[10, "cmdoption-ocrd-workspace-prune-files-G"], [10, "cmdoption-ocrd-workspace-prune-files-g"], [10, "cmdoption-ocrd-workspace-prune-files-i"], [10, "cmdoption-ocrd-workspace-prune-files-m"]], "ocrd-workspace-remove command line option": [[10, "cmdoption-ocrd-workspace-remove-arg-ID"], [10, "cmdoption-ocrd-workspace-remove-f"], [10, "cmdoption-ocrd-workspace-remove-k"]], "ocrd-workspace-remove-group command line option": [[10, "cmdoption-ocrd-workspace-remove-group-arg-GROUP"], [10, "cmdoption-ocrd-workspace-remove-group-f"], [10, "cmdoption-ocrd-workspace-remove-group-k"], [10, "cmdoption-ocrd-workspace-remove-group-r"]], "ocrd-workspace-rename-group command line option": [[10, "cmdoption-ocrd-workspace-rename-group-arg-NEW"], [10, "cmdoption-ocrd-workspace-rename-group-arg-OLD"]], "ocrd-workspace-set-id command line option": [[10, "cmdoption-ocrd-workspace-set-id-arg-ID"]], "ocrd-workspace-validate command line option": [[10, "cmdoption-ocrd-workspace-validate-a"], [10, "cmdoption-ocrd-workspace-validate-arg-METS_URL"], [10, "cmdoption-ocrd-workspace-validate-page-coordinate-consistency"], [10, "cmdoption-ocrd-workspace-validate-page-textequiv-consistency"], [10, "cmdoption-ocrd-workspace-validate-s"]], "ocrd.cli.workspace": [[10, "module-ocrd.cli.workspace"]], "--base-version-checksum": [[11, "cmdoption-ocrd-zip-bag-b"]], "--dest": [[11, "cmdoption-ocrd-zip-spill-d"]], "--id": [[11, "cmdoption-ocrd-zip-bag-i"]], "--identifier": [[11, "cmdoption-ocrd-zip-bag-i"]], "--processes": [[11, "cmdoption-ocrd-zip-bag-j"], [11, "cmdoption-ocrd-zip-validate-j"]], "--skip-bag": [[11, "cmdoption-ocrd-zip-validate-B"]], "--skip-checksums": [[11, "cmdoption-ocrd-zip-validate-C"]], "--skip-delete": [[11, "cmdoption-ocrd-zip-validate-D"]], "--skip-unzip": [[11, "cmdoption-ocrd-zip-validate-Z"]], "--skip-zip": [[11, "cmdoption-ocrd-zip-bag-Z"]], "--tag-file": [[11, "cmdoption-ocrd-zip-bag-t"]], "-b": [[11, "cmdoption-ocrd-zip-validate-B"], [11, "cmdoption-ocrd-zip-bag-b"]], "-z": [[11, "cmdoption-ocrd-zip-bag-Z"], [11, "cmdoption-ocrd-zip-validate-Z"]], "dest": [[11, "cmdoption-ocrd-zip-bag-arg-DEST"], [11, "cmdoption-ocrd-zip-update-arg-DEST"]], "src": [[11, "cmdoption-ocrd-zip-spill-arg-SRC"], [11, "cmdoption-ocrd-zip-update-arg-SRC"], [11, "cmdoption-ocrd-zip-validate-arg-SRC"]], "ocrd-zip-bag command line option": [[11, "cmdoption-ocrd-zip-bag-M"], [11, "cmdoption-ocrd-zip-bag-Z"], [11, "cmdoption-ocrd-zip-bag-arg-DEST"], [11, "cmdoption-ocrd-zip-bag-b"], [11, "cmdoption-ocrd-zip-bag-d"], [11, "cmdoption-ocrd-zip-bag-i"], [11, "cmdoption-ocrd-zip-bag-j"], [11, "cmdoption-ocrd-zip-bag-m"], [11, "cmdoption-ocrd-zip-bag-t"]], "ocrd-zip-spill command line option": [[11, "cmdoption-ocrd-zip-spill-arg-SRC"], [11, "cmdoption-ocrd-zip-spill-d"]], "ocrd-zip-update command line option": [[11, "cmdoption-ocrd-zip-update-arg-DEST"], [11, "cmdoption-ocrd-zip-update-arg-SRC"], [11, "cmdoption-ocrd-zip-update-o"]], "ocrd-zip-validate command line option": [[11, "cmdoption-ocrd-zip-validate-B"], [11, "cmdoption-ocrd-zip-validate-C"], [11, "cmdoption-ocrd-zip-validate-D"], [11, "cmdoption-ocrd-zip-validate-Z"], [11, "cmdoption-ocrd-zip-validate-arg-SRC"], [11, "cmdoption-ocrd-zip-validate-j"]], "ocrd.cli.zip": [[11, "module-ocrd.cli.zip"]], "ocrd.constants": [[12, "module-ocrd.constants"]], "check_and_run_network_agent() (in module ocrd.decorators)": [[13, "ocrd.decorators.check_and_run_network_agent"]], "ocrd.decorators": [[13, "module-ocrd.decorators"]], "ocrd_cli_wrap_processor() (in module ocrd.decorators)": [[13, "ocrd.decorators.ocrd_cli_wrap_processor"]], "ocrd.decorators.loglevel_option": [[14, "module-ocrd.decorators.loglevel_option"]], "ocrd_loglevel() (in module ocrd.decorators.loglevel_option)": [[14, "ocrd.decorators.loglevel_option.ocrd_loglevel"]], "mets_find_options() (in module ocrd.decorators.mets_find_options)": [[15, "ocrd.decorators.mets_find_options.mets_find_options"]], "ocrd.decorators.mets_find_options": [[15, "module-ocrd.decorators.mets_find_options"]], "ocrd.decorators.ocrd_cli_options": [[16, "module-ocrd.decorators.ocrd_cli_options"]], "ocrd_cli_options() (in module ocrd.decorators.ocrd_cli_options)": [[16, "ocrd.decorators.ocrd_cli_options.ocrd_cli_options"]], "ocrd.decorators.parameter_option": [[17, "module-ocrd.decorators.parameter_option"]], "parameter_option() (in module ocrd.decorators.parameter_option)": [[17, "ocrd.decorators.parameter_option.parameter_option"]], "parameter_override_option() (in module ocrd.decorators.parameter_option)": [[17, "ocrd.decorators.parameter_option.parameter_override_option"]], "clientsideocrdmets (class in ocrd.mets_server)": [[18, "ocrd.mets_server.ClientSideOcrdMets"]], "ocrdagentlistmodel (class in ocrd.mets_server)": [[18, "ocrd.mets_server.OcrdAgentListModel"]], "ocrdagentmodel (class in ocrd.mets_server)": [[18, "ocrd.mets_server.OcrdAgentModel"]], "ocrdfilegrouplistmodel (class in ocrd.mets_server)": [[18, "ocrd.mets_server.OcrdFileGroupListModel"]], "ocrdfilelistmodel (class in ocrd.mets_server)": [[18, "ocrd.mets_server.OcrdFileListModel"]], "ocrdfilemodel (class in ocrd.mets_server)": [[18, "ocrd.mets_server.OcrdFileModel"]], "ocrdmetsserver (class in ocrd.mets_server)": [[18, "ocrd.mets_server.OcrdMetsServer"]], "add_agent() (ocrd.mets_server.clientsideocrdmets method)": [[18, "ocrd.mets_server.ClientSideOcrdMets.add_agent"]], "add_file() (ocrd.mets_server.clientsideocrdmets method)": [[18, "ocrd.mets_server.ClientSideOcrdMets.add_file"]], "agents (ocrd.mets_server.clientsideocrdmets property)": [[18, "ocrd.mets_server.ClientSideOcrdMets.agents"]], "agents (ocrd.mets_server.ocrdagentlistmodel attribute)": [[18, "ocrd.mets_server.OcrdAgentListModel.agents"]], "create() (ocrd.mets_server.ocrdagentlistmodel static method)": [[18, "ocrd.mets_server.OcrdAgentListModel.create"]], "create() (ocrd.mets_server.ocrdagentmodel static method)": [[18, "ocrd.mets_server.OcrdAgentModel.create"]], "create() (ocrd.mets_server.ocrdfilegrouplistmodel static method)": [[18, "ocrd.mets_server.OcrdFileGroupListModel.create"]], "create() (ocrd.mets_server.ocrdfilelistmodel static method)": [[18, "ocrd.mets_server.OcrdFileListModel.create"]], "create() (ocrd.mets_server.ocrdfilemodel static method)": [[18, "ocrd.mets_server.OcrdFileModel.create"]], "file_groups (ocrd.mets_server.clientsideocrdmets property)": [[18, "ocrd.mets_server.ClientSideOcrdMets.file_groups"]], "file_groups (ocrd.mets_server.ocrdfilegrouplistmodel attribute)": [[18, "ocrd.mets_server.OcrdFileGroupListModel.file_groups"]], "file_grp (ocrd.mets_server.ocrdfilemodel attribute)": [[18, "ocrd.mets_server.OcrdFileModel.file_grp"]], "file_id (ocrd.mets_server.ocrdfilemodel attribute)": [[18, "ocrd.mets_server.OcrdFileModel.file_id"]], "files (ocrd.mets_server.ocrdfilelistmodel attribute)": [[18, "ocrd.mets_server.OcrdFileListModel.files"]], "find_all_files() (ocrd.mets_server.clientsideocrdmets method)": [[18, "ocrd.mets_server.ClientSideOcrdMets.find_all_files"]], "find_files() (ocrd.mets_server.clientsideocrdmets method)": [[18, "ocrd.mets_server.ClientSideOcrdMets.find_files"]], "local_filename (ocrd.mets_server.ocrdfilemodel attribute)": [[18, "ocrd.mets_server.OcrdFileModel.local_filename"]], "mimetype (ocrd.mets_server.ocrdfilemodel attribute)": [[18, "ocrd.mets_server.OcrdFileModel.mimetype"]], "name (ocrd.mets_server.ocrdagentmodel attribute)": [[18, "ocrd.mets_server.OcrdAgentModel.name"]], "notes (ocrd.mets_server.ocrdagentmodel attribute)": [[18, "ocrd.mets_server.OcrdAgentModel.notes"]], "ocrd.mets_server": [[18, "module-ocrd.mets_server"]], "otherrole (ocrd.mets_server.ocrdagentmodel attribute)": [[18, "ocrd.mets_server.OcrdAgentModel.otherrole"]], "othertype (ocrd.mets_server.ocrdagentmodel attribute)": [[18, "ocrd.mets_server.OcrdAgentModel.othertype"]], "page_id (ocrd.mets_server.ocrdfilemodel attribute)": [[18, "ocrd.mets_server.OcrdFileModel.page_id"]], "reload() (ocrd.mets_server.clientsideocrdmets method)": [[18, "ocrd.mets_server.ClientSideOcrdMets.reload"]], "role (ocrd.mets_server.ocrdagentmodel attribute)": [[18, "ocrd.mets_server.OcrdAgentModel.role"]], "save() (ocrd.mets_server.clientsideocrdmets method)": [[18, "ocrd.mets_server.ClientSideOcrdMets.save"]], "shutdown() (ocrd.mets_server.ocrdmetsserver method)": [[18, "ocrd.mets_server.OcrdMetsServer.shutdown"]], "startup() (ocrd.mets_server.ocrdmetsserver method)": [[18, "ocrd.mets_server.OcrdMetsServer.startup"]], "stop() (ocrd.mets_server.clientsideocrdmets method)": [[18, "ocrd.mets_server.ClientSideOcrdMets.stop"]], "type (ocrd.mets_server.ocrdagentmodel attribute)": [[18, "ocrd.mets_server.OcrdAgentModel.type"]], "unique_identifier (ocrd.mets_server.clientsideocrdmets property)": [[18, "ocrd.mets_server.ClientSideOcrdMets.unique_identifier"]], "url (ocrd.mets_server.ocrdfilemodel attribute)": [[18, "ocrd.mets_server.OcrdFileModel.url"]], "workspace_path (ocrd.mets_server.clientsideocrdmets property)": [[18, "ocrd.mets_server.ClientSideOcrdMets.workspace_path"]], "ocrd.processor": [[19, "module-ocrd.processor"]], "processor (class in ocrd.processor.base)": [[20, "ocrd.processor.base.Processor"]], "add_metadata() (ocrd.processor.base.processor method)": [[20, "ocrd.processor.base.Processor.add_metadata"]], "generate_processor_help() (in module ocrd.processor.base)": [[20, "ocrd.processor.base.generate_processor_help"]], "input_files (ocrd.processor.base.processor property)": [[20, "ocrd.processor.base.Processor.input_files"]], "list_all_resources() (ocrd.processor.base.processor method)": [[20, "ocrd.processor.base.Processor.list_all_resources"]], "module (ocrd.processor.base.processor property)": [[20, "ocrd.processor.base.Processor.module"]], "moduledir (ocrd.processor.base.processor property)": [[20, "ocrd.processor.base.Processor.moduledir"]], "ocrd.processor.base": [[20, "module-ocrd.processor.base"]], "process() (ocrd.processor.base.processor method)": [[20, "ocrd.processor.base.Processor.process"]], "resolve_resource() (ocrd.processor.base.processor method)": [[20, "ocrd.processor.base.Processor.resolve_resource"]], "run_cli() (in module ocrd.processor.base)": [[20, "ocrd.processor.base.run_cli"]], "run_processor() (in module ocrd.processor.base)": [[20, "ocrd.processor.base.run_processor"]], "show_help() (ocrd.processor.base.processor method)": [[20, "ocrd.processor.base.Processor.show_help"]], "show_version() (ocrd.processor.base.processor method)": [[20, "ocrd.processor.base.Processor.show_version"]], "verify() (ocrd.processor.base.processor method)": [[20, "ocrd.processor.base.Processor.verify"]], "zip_input_files() (ocrd.processor.base.processor method)": [[20, "ocrd.processor.base.Processor.zip_input_files"]], "ocrd.processor.builtin": [[21, "module-ocrd.processor.builtin"]], "ocrd.processor.builtin.dummy": [[22, "module-ocrd.processor.builtin.dummy"]], "dummyprocessor (class in ocrd.processor.builtin.dummy_processor)": [[23, "ocrd.processor.builtin.dummy_processor.DummyProcessor"]], "ocrd.processor.builtin.dummy_processor": [[23, "module-ocrd.processor.builtin.dummy_processor"]], "process() (ocrd.processor.builtin.dummy_processor.dummyprocessor method)": [[23, "ocrd.processor.builtin.dummy_processor.DummyProcessor.process"]], "generate_processor_help() (in module ocrd.processor.helpers)": [[24, "ocrd.processor.helpers.generate_processor_help"]], "ocrd.processor.helpers": [[24, "module-ocrd.processor.helpers"]], "run_cli() (in module ocrd.processor.helpers)": [[24, "ocrd.processor.helpers.run_cli"]], "run_processor() (in module ocrd.processor.helpers)": [[24, "ocrd.processor.helpers.run_processor"]], "resolver (class in ocrd.resolver)": [[25, "ocrd.resolver.Resolver"]], "download_to_directory() (ocrd.resolver.resolver method)": [[25, "ocrd.resolver.Resolver.download_to_directory"]], "ocrd.resolver": [[25, "module-ocrd.resolver"]], "resolve_mets_arguments() (ocrd.resolver.resolver method)": [[25, "ocrd.resolver.Resolver.resolve_mets_arguments"]], "workspace_from_nothing() (ocrd.resolver.resolver method)": [[25, "ocrd.resolver.Resolver.workspace_from_nothing"]], "workspace_from_url() (ocrd.resolver.resolver method)": [[25, "ocrd.resolver.Resolver.workspace_from_url"]], "ocrdresourcemanager (class in ocrd.resource_manager)": [[26, "ocrd.resource_manager.OcrdResourceManager"]], "add_to_user_database() (ocrd.resource_manager.ocrdresourcemanager method)": [[26, "ocrd.resource_manager.OcrdResourceManager.add_to_user_database"]], "default_resource_dir (ocrd.resource_manager.ocrdresourcemanager property)": [[26, "ocrd.resource_manager.OcrdResourceManager.default_resource_dir"]], "download() (ocrd.resource_manager.ocrdresourcemanager method)": [[26, "ocrd.resource_manager.OcrdResourceManager.download"]], "list_available() (ocrd.resource_manager.ocrdresourcemanager method)": [[26, "ocrd.resource_manager.OcrdResourceManager.list_available"]], "list_installed() (ocrd.resource_manager.ocrdresourcemanager method)": [[26, "ocrd.resource_manager.OcrdResourceManager.list_installed"]], "load_resource_list() (ocrd.resource_manager.ocrdresourcemanager method)": [[26, "ocrd.resource_manager.OcrdResourceManager.load_resource_list"]], "location_to_resource_dir() (ocrd.resource_manager.ocrdresourcemanager method)": [[26, "ocrd.resource_manager.OcrdResourceManager.location_to_resource_dir"]], "ocrd.resource_manager": [[26, "module-ocrd.resource_manager"]], "parameter_usage() (ocrd.resource_manager.ocrdresourcemanager method)": [[26, "ocrd.resource_manager.OcrdResourceManager.parameter_usage"]], "resource_dir_to_location() (ocrd.resource_manager.ocrdresourcemanager method)": [[26, "ocrd.resource_manager.OcrdResourceManager.resource_dir_to_location"]], "save_user_list() (ocrd.resource_manager.ocrdresourcemanager method)": [[26, "ocrd.resource_manager.OcrdResourceManager.save_user_list"]], "userdir (ocrd.resource_manager.ocrdresourcemanager property)": [[26, "ocrd.resource_manager.OcrdResourceManager.userdir"]], "xdg_config_home (ocrd.resource_manager.ocrdresourcemanager property)": [[26, "ocrd.resource_manager.OcrdResourceManager.xdg_config_home"]], "xdg_data_home (ocrd.resource_manager.ocrdresourcemanager property)": [[26, "ocrd.resource_manager.OcrdResourceManager.xdg_data_home"]], "processortask (class in ocrd.task_sequence)": [[27, "ocrd.task_sequence.ProcessorTask"]], "ocrd.task_sequence": [[27, "module-ocrd.task_sequence"]], "ocrd_tool_json (ocrd.task_sequence.processortask property)": [[27, "ocrd.task_sequence.ProcessorTask.ocrd_tool_json"]], "parse() (ocrd.task_sequence.processortask class method)": [[27, "ocrd.task_sequence.ProcessorTask.parse"]], "run_tasks() (in module ocrd.task_sequence)": [[27, "ocrd.task_sequence.run_tasks"]], "validate() (ocrd.task_sequence.processortask method)": [[27, "ocrd.task_sequence.ProcessorTask.validate"]], "validate_tasks() (in module ocrd.task_sequence)": [[27, "ocrd.task_sequence.validate_tasks"]], "workspace (class in ocrd.workspace)": [[28, "ocrd.workspace.Workspace"]], "add_file() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.add_file"]], "download_file() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.download_file"]], "download_url() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.download_url"]], "find_files() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.find_files"]], "image_from_page() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.image_from_page"]], "image_from_segment() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.image_from_segment"]], "merge() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.merge"]], "ocrd.workspace": [[28, "module-ocrd.workspace"]], "reload_mets() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.reload_mets"]], "remove_file() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.remove_file"]], "remove_file_group() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.remove_file_group"]], "rename_file_group() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.rename_file_group"]], "resolve_image_as_pil() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.resolve_image_as_pil"]], "resolve_image_exif() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.resolve_image_exif"]], "save_image_file() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.save_image_file"]], "save_mets() (ocrd.workspace.workspace method)": [[28, "ocrd.workspace.Workspace.save_mets"]], "workspacebackup (class in ocrd.workspace_backup)": [[29, "ocrd.workspace_backup.WorkspaceBackup"]], "workspacebackupmanager (class in ocrd.workspace_backup)": [[29, "ocrd.workspace_backup.WorkspaceBackupManager"]], "add() (ocrd.workspace_backup.workspacebackupmanager method)": [[29, "ocrd.workspace_backup.WorkspaceBackupManager.add"]], "from_path() (ocrd.workspace_backup.workspacebackup class method)": [[29, "ocrd.workspace_backup.WorkspaceBackup.from_path"]], "list() (ocrd.workspace_backup.workspacebackupmanager method)": [[29, "ocrd.workspace_backup.WorkspaceBackupManager.list"]], "ocrd.workspace_backup": [[29, "module-ocrd.workspace_backup"]], "restore() (ocrd.workspace_backup.workspacebackupmanager method)": [[29, "ocrd.workspace_backup.WorkspaceBackupManager.restore"]], "undo() (ocrd.workspace_backup.workspacebackupmanager method)": [[29, "ocrd.workspace_backup.WorkspaceBackupManager.undo"]], "workspacebagger (class in ocrd.workspace_bagger)": [[30, "ocrd.workspace_bagger.WorkspaceBagger"]], "bag() (ocrd.workspace_bagger.workspacebagger method)": [[30, "ocrd.workspace_bagger.WorkspaceBagger.bag"]], "ocrd.workspace_bagger": [[30, "module-ocrd.workspace_bagger"]], "recreate_checksums() (ocrd.workspace_bagger.workspacebagger method)": [[30, "ocrd.workspace_bagger.WorkspaceBagger.recreate_checksums"]], "spill() (ocrd.workspace_bagger.workspacebagger method)": [[30, "ocrd.workspace_bagger.WorkspaceBagger.spill"]], "validate() (ocrd.workspace_bagger.workspacebagger method)": [[30, "ocrd.workspace_bagger.WorkspaceBagger.validate"]], "exif_from_filename() (in module ocrd_modelfactory)": [[32, "ocrd_modelfactory.exif_from_filename"]], "ocrd_modelfactory": [[32, "module-ocrd_modelfactory"]], "page_from_file() (in module ocrd_modelfactory)": [[32, "ocrd_modelfactory.page_from_file"]], "page_from_image() (in module ocrd_modelfactory)": [[32, "ocrd_modelfactory.page_from_image"]], "ocrd_models": [[34, "module-ocrd_models"]], "ocrd_models.constants": [[35, "module-ocrd_models.constants"]], "clientsideocrdagent (class in ocrd_models.ocrd_agent)": [[36, "ocrd_models.ocrd_agent.ClientSideOcrdAgent"]], "ocrdagent (class in ocrd_models.ocrd_agent)": [[36, "ocrd_models.ocrd_agent.OcrdAgent"]], "name (ocrd_models.ocrd_agent.ocrdagent property)": [[36, "ocrd_models.ocrd_agent.OcrdAgent.name"]], "notes (ocrd_models.ocrd_agent.ocrdagent property)": [[36, "ocrd_models.ocrd_agent.OcrdAgent.notes"]], "ocrd_models.ocrd_agent": [[36, "module-ocrd_models.ocrd_agent"]], "otherrole (ocrd_models.ocrd_agent.ocrdagent property)": [[36, "ocrd_models.ocrd_agent.OcrdAgent.otherrole"]], "othertype (ocrd_models.ocrd_agent.ocrdagent property)": [[36, "ocrd_models.ocrd_agent.OcrdAgent.othertype"]], "role (ocrd_models.ocrd_agent.ocrdagent property)": [[36, "ocrd_models.ocrd_agent.OcrdAgent.role"]], "type (ocrd_models.ocrd_agent.ocrdagent property)": [[36, "ocrd_models.ocrd_agent.OcrdAgent.type"]], "ocrdexif (class in ocrd_models.ocrd_exif)": [[37, "ocrd_models.ocrd_exif.OcrdExif"]], "height (ocrd_models.ocrd_exif.ocrdexif attribute)": [[37, "ocrd_models.ocrd_exif.OcrdExif.height"]], "ocrd_models.ocrd_exif": [[37, "module-ocrd_models.ocrd_exif"]], "photometricinterpretation (ocrd_models.ocrd_exif.ocrdexif attribute)": [[37, "ocrd_models.ocrd_exif.OcrdExif.photometricInterpretation"]], "resolution (ocrd_models.ocrd_exif.ocrdexif attribute)": [[37, "ocrd_models.ocrd_exif.OcrdExif.resolution"]], "resolutionunit (ocrd_models.ocrd_exif.ocrdexif attribute)": [[37, "ocrd_models.ocrd_exif.OcrdExif.resolutionUnit"]], "run_identify() (ocrd_models.ocrd_exif.ocrdexif method)": [[37, "ocrd_models.ocrd_exif.OcrdExif.run_identify"]], "run_pil() (ocrd_models.ocrd_exif.ocrdexif method)": [[37, "ocrd_models.ocrd_exif.OcrdExif.run_pil"]], "to_xml() (ocrd_models.ocrd_exif.ocrdexif method)": [[37, "ocrd_models.ocrd_exif.OcrdExif.to_xml"]], "width (ocrd_models.ocrd_exif.ocrdexif attribute)": [[37, "ocrd_models.ocrd_exif.OcrdExif.width"]], "xresolution (ocrd_models.ocrd_exif.ocrdexif attribute)": [[37, "ocrd_models.ocrd_exif.OcrdExif.xResolution"]], "yresolution (ocrd_models.ocrd_exif.ocrdexif attribute)": [[37, "ocrd_models.ocrd_exif.OcrdExif.yResolution"]], "clientsideocrdfile (class in ocrd_models.ocrd_file)": [[38, "ocrd_models.ocrd_file.ClientSideOcrdFile"]], "id (ocrd_models.ocrd_file.ocrdfile property)": [[38, "ocrd_models.ocrd_file.OcrdFile.ID"]], "ocrdfile (class in ocrd_models.ocrd_file)": [[38, "ocrd_models.ocrd_file.OcrdFile"]], "basename (ocrd_models.ocrd_file.ocrdfile property)": [[38, "ocrd_models.ocrd_file.OcrdFile.basename"]], "basename_without_extension (ocrd_models.ocrd_file.ocrdfile property)": [[38, "ocrd_models.ocrd_file.OcrdFile.basename_without_extension"]], "extension (ocrd_models.ocrd_file.ocrdfile property)": [[38, "ocrd_models.ocrd_file.OcrdFile.extension"]], "filegrp (ocrd_models.ocrd_file.ocrdfile property)": [[38, "ocrd_models.ocrd_file.OcrdFile.fileGrp"]], "local_filename (ocrd_models.ocrd_file.ocrdfile property)": [[38, "ocrd_models.ocrd_file.OcrdFile.local_filename"]], "loctypes (ocrd_models.ocrd_file.ocrdfile property)": [[38, "ocrd_models.ocrd_file.OcrdFile.loctypes"]], "mimetype (ocrd_models.ocrd_file.ocrdfile property)": [[38, "ocrd_models.ocrd_file.OcrdFile.mimetype"]], "ocrd_models.ocrd_file": [[38, "module-ocrd_models.ocrd_file"]], "pageid (ocrd_models.ocrd_file.ocrdfile property)": [[38, "ocrd_models.ocrd_file.OcrdFile.pageId"]], "url (ocrd_models.ocrd_file.ocrdfile property)": [[38, "ocrd_models.ocrd_file.OcrdFile.url"]], "ocrdmets (class in ocrd_models.ocrd_mets)": [[39, "ocrd_models.ocrd_mets.OcrdMets"]], "add_agent() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.add_agent"]], "add_file() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.add_file"]], "add_file_group() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.add_file_group"]], "agents (ocrd_models.ocrd_mets.ocrdmets property)": [[39, "ocrd_models.ocrd_mets.OcrdMets.agents"]], "empty_mets() (ocrd_models.ocrd_mets.ocrdmets static method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.empty_mets"]], "file_groups (ocrd_models.ocrd_mets.ocrdmets property)": [[39, "ocrd_models.ocrd_mets.OcrdMets.file_groups"]], "find_all_files() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.find_all_files"]], "find_files() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.find_files"]], "get_physical_page_for_file() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.get_physical_page_for_file"]], "get_physical_pages() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.get_physical_pages"]], "merge() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.merge"]], "ocrd_models.ocrd_mets": [[39, "module-ocrd_models.ocrd_mets"]], "physical_pages (ocrd_models.ocrd_mets.ocrdmets property)": [[39, "ocrd_models.ocrd_mets.OcrdMets.physical_pages"]], "refresh_caches() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.refresh_caches"]], "remove_file() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.remove_file"]], "remove_file_group() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.remove_file_group"]], "remove_one_file() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.remove_one_file"]], "remove_physical_page() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.remove_physical_page"]], "remove_physical_page_fptr() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.remove_physical_page_fptr"]], "rename_file_group() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.rename_file_group"]], "set_physical_page_for_file() (ocrd_models.ocrd_mets.ocrdmets method)": [[39, "ocrd_models.ocrd_mets.OcrdMets.set_physical_page_for_file"]], "unique_identifier (ocrd_models.ocrd_mets.ocrdmets property)": [[39, "ocrd_models.ocrd_mets.OcrdMets.unique_identifier"]], "advertregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.AdvertRegionType"]], "alternativeimagetype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.AlternativeImageType"]], "baselinetype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.BaselineType"]], "bordertype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.BorderType"]], "chartregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.ChartRegionType"]], "chemregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.ChemRegionType"]], "coordstype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.CoordsType"]], "customregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.CustomRegionType"]], "glyphtype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.GlyphType"]], "graphemebasetype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType"]], "graphemegrouptype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType"]], "graphemetype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.GraphemeType"]], "graphemestype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.GraphemesType"]], "graphicregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.GraphicRegionType"]], "gridpointstype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.GridPointsType"]], "gridtype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.GridType"]], "imageregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.ImageRegionType"]], "labeltype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.LabelType"]], "labelstype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.LabelsType"]], "layertype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.LayerType"]], "layerstype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.LayersType"]], "linedrawingregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType"]], "mapregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.MapRegionType"]], "mathsregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.MathsRegionType"]], "metadataitemtype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.MetadataItemType"]], "metadatatype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.MetadataType"]], "musicregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.MusicRegionType"]], "noiseregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.NoiseRegionType"]], "nonprintingchartype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType"]], "ocrdpage (in module ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.OcrdPage"]], "orderedgroupindexedtype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType"]], "orderedgrouptype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.OrderedGroupType"]], "pagetype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.PageType"]], "pcgtstype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.PcGtsType"]], "printspacetype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.PrintSpaceType"]], "readingordertype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.ReadingOrderType"]], "regionrefindexedtype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType"]], "regionreftype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.RegionRefType"]], "regiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.RegionType"]], "relationtype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.RelationType"]], "relationstype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.RelationsType"]], "rolestype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.RolesType"]], "separatorregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType"]], "tablecellroletype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.TableCellRoleType"]], "tableregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.TableRegionType"]], "textequivtype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.TextEquivType"]], "textlinetype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.TextLineType"]], "textregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.TextRegionType"]], "textstyletype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.TextStyleType"]], "unknownregiontype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.UnknownRegionType"]], "unorderedgroupindexedtype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType"]], "unorderedgrouptype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType"]], "userattributetype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.UserAttributeType"]], "userdefinedtype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.UserDefinedType"]], "wordtype (class in ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.WordType"]], "add_advertregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_AdvertRegion"]], "add_advertregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_AdvertRegion"]], "add_alternativeimage() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.add_AlternativeImage"]], "add_alternativeimage() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_AlternativeImage"]], "add_alternativeimage() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_AlternativeImage"]], "add_alternativeimage() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.add_AlternativeImage"]], "add_alternativeimage() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.add_AlternativeImage"]], "add_chartregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_ChartRegion"]], "add_chartregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_ChartRegion"]], "add_chemregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_ChemRegion"]], "add_chemregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_ChemRegion"]], "add_customregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_CustomRegion"]], "add_customregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_CustomRegion"]], "add_glyph() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.add_Glyph"]], "add_grapheme() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.add_Grapheme"]], "add_grapheme() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.add_Grapheme"]], "add_graphemegroup() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.add_GraphemeGroup"]], "add_graphicregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_GraphicRegion"]], "add_graphicregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_GraphicRegion"]], "add_gridpoints() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.add_GridPoints"]], "add_imageregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_ImageRegion"]], "add_imageregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_ImageRegion"]], "add_label() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.add_Label"]], "add_labels() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.add_Labels"]], "add_labels() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.add_Labels"]], "add_labels() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.add_Labels"]], "add_labels() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.add_Labels"]], "add_labels() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_Labels"]], "add_labels() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_Labels"]], "add_labels() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.add_Labels"]], "add_labels() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.add_Labels"]], "add_labels() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.add_Labels"]], "add_labels() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.add_Labels"]], "add_labels() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.add_Labels"]], "add_layer() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.add_Layer"]], "add_linedrawingregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_LineDrawingRegion"]], "add_linedrawingregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_LineDrawingRegion"]], "add_mapregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_MapRegion"]], "add_mathsregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_MathsRegion"]], "add_mathsregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_MathsRegion"]], "add_metadataitem() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.add_MetadataItem"]], "add_musicregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_MusicRegion"]], "add_musicregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_MusicRegion"]], "add_noiseregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_NoiseRegion"]], "add_noiseregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_NoiseRegion"]], "add_nonprintingchar() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.add_NonPrintingChar"]], "add_nonprintingchar() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.add_NonPrintingChar"]], "add_orderedgroup() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.add_OrderedGroup"]], "add_orderedgroup() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.add_OrderedGroup"]], "add_orderedgroupindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.add_OrderedGroupIndexed"]], "add_orderedgroupindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.add_OrderedGroupIndexed"]], "add_regionref() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.add_RegionRef"]], "add_regionref() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.add_RegionRef"]], "add_regionref() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.add_RegionRef"]], "add_regionrefindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.add_RegionRefIndexed"]], "add_regionrefindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.add_RegionRefIndexed"]], "add_relation() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.add_Relation"]], "add_separatorregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_SeparatorRegion"]], "add_separatorregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_SeparatorRegion"]], "add_tableregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_TableRegion"]], "add_tableregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_TableRegion"]], "add_textequiv() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.add_TextEquiv"]], "add_textequiv() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.add_TextEquiv"]], "add_textequiv() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.add_TextEquiv"]], "add_textequiv() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.add_TextEquiv"]], "add_textequiv() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.add_TextEquiv"]], "add_textline() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.add_TextLine"]], "add_textregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_TextRegion"]], "add_textregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_TextRegion"]], "add_unknownregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.add_UnknownRegion"]], "add_unknownregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.add_UnknownRegion"]], "add_unorderedgroup() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.add_UnorderedGroup"]], "add_unorderedgroup() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.add_UnorderedGroup"]], "add_unorderedgroupindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.add_UnorderedGroupIndexed"]], "add_unorderedgroupindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.add_UnorderedGroupIndexed"]], "add_userattribute() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.add_UserAttribute"]], "add_word() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.add_Word"]], "build() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.build"]], "build() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.build"]], "build() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.build"]], "build() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.build"]], "build() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.build"]], "build() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.build"]], "build() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.build"]], "build() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.build"]], "build() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.build"]], "build() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.build"]], "build() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.build"]], "build() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.build"]], "build() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.build"]], "build() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.build"]], "build() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.build"]], "build() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.build"]], "build() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.build"]], "build() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.build"]], "build() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.build"]], "build() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.build"]], "build() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.build"]], "build() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.build"]], "build() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.build"]], "build() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.build"]], "build() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.build"]], "build() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.build"]], "build() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.build"]], "build() (ocrd_models.ocrd_page.noiseregiontype method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.build"]], "build() (ocrd_models.ocrd_page.nonprintingchartype method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.build"]], "build() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.build"]], "build() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.build"]], "build() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.build"]], "build() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.build"]], "build() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.build"]], "build() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.build"]], "build() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.build"]], "build() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.build"]], "build() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.build"]], "build() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.build"]], "build() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.build"]], "build() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.build"]], "build() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.build"]], "build() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.build"]], "build() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.build"]], "build() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.build"]], "build() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.build"]], "build() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.build"]], "build() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.build"]], "build() (ocrd_models.ocrd_page.unknownregiontype method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.build"]], "build() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.build"]], "build() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.build"]], "build() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.build"]], "build() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.build"]], "build() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.build"]], "buildattributes() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.noiseregiontype method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.nonprintingchartype method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.unknownregiontype method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.buildAttributes"]], "buildattributes() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.buildAttributes"]], "buildchildren() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.noiseregiontype method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.nonprintingchartype method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.unknownregiontype method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.buildChildren"]], "buildchildren() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.buildChildren"]], "clear_allindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.clear_AllIndexed"]], "clear_allindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.clear_AllIndexed"]], "export() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.export"]], "export() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.export"]], "export() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.export"]], "export() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.export"]], "export() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.export"]], "export() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.export"]], "export() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.export"]], "export() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.export"]], "export() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.export"]], "export() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.export"]], "export() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.export"]], "export() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.export"]], "export() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.export"]], "export() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.export"]], "export() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.export"]], "export() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.export"]], "export() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.export"]], "export() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.export"]], "export() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.export"]], "export() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.export"]], "export() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.export"]], "export() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.export"]], "export() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.export"]], "export() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.export"]], "export() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.export"]], "export() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.export"]], "export() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.export"]], "export() (ocrd_models.ocrd_page.noiseregiontype method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.export"]], "export() (ocrd_models.ocrd_page.nonprintingchartype method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.export"]], "export() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.export"]], "export() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.export"]], "export() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.export"]], "export() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.export"]], "export() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.export"]], "export() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.export"]], "export() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.export"]], "export() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.export"]], "export() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.export"]], "export() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.export"]], "export() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.export"]], "export() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.export"]], "export() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.export"]], "export() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.export"]], "export() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.export"]], "export() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.export"]], "export() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.export"]], "export() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.export"]], "export() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.export"]], "export() (ocrd_models.ocrd_page.unknownregiontype method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.export"]], "export() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.export"]], "export() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.export"]], "export() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.export"]], "export() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.export"]], "export() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.export"]], "exportattributes() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.noiseregiontype method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.nonprintingchartype method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.unknownregiontype method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.exportAttributes"]], "exportattributes() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.exportAttributes"]], "exportchildren() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.noiseregiontype method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.nonprintingchartype method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.unknownregiontype method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.exportChildren"]], "exportchildren() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.exportChildren"]], "extend_allindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.extend_AllIndexed"]], "extend_allindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.extend_AllIndexed"]], "factory() (ocrd_models.ocrd_page.advertregiontype static method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.factory"]], "factory() (ocrd_models.ocrd_page.alternativeimagetype static method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.factory"]], "factory() (ocrd_models.ocrd_page.baselinetype static method)": [[40, "ocrd_models.ocrd_page.BaselineType.factory"]], "factory() (ocrd_models.ocrd_page.bordertype static method)": [[40, "ocrd_models.ocrd_page.BorderType.factory"]], "factory() (ocrd_models.ocrd_page.chartregiontype static method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.factory"]], "factory() (ocrd_models.ocrd_page.chemregiontype static method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.factory"]], "factory() (ocrd_models.ocrd_page.coordstype static method)": [[40, "ocrd_models.ocrd_page.CoordsType.factory"]], "factory() (ocrd_models.ocrd_page.customregiontype static method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.factory"]], "factory() (ocrd_models.ocrd_page.glyphtype static method)": [[40, "ocrd_models.ocrd_page.GlyphType.factory"]], "factory() (ocrd_models.ocrd_page.graphemebasetype static method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.factory"]], "factory() (ocrd_models.ocrd_page.graphemegrouptype static method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.factory"]], "factory() (ocrd_models.ocrd_page.graphemetype static method)": [[40, "ocrd_models.ocrd_page.GraphemeType.factory"]], "factory() (ocrd_models.ocrd_page.graphemestype static method)": [[40, "ocrd_models.ocrd_page.GraphemesType.factory"]], "factory() (ocrd_models.ocrd_page.graphicregiontype static method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.factory"]], "factory() (ocrd_models.ocrd_page.gridpointstype static method)": [[40, "ocrd_models.ocrd_page.GridPointsType.factory"]], "factory() (ocrd_models.ocrd_page.gridtype static method)": [[40, "ocrd_models.ocrd_page.GridType.factory"]], "factory() (ocrd_models.ocrd_page.imageregiontype static method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.factory"]], "factory() (ocrd_models.ocrd_page.labeltype static method)": [[40, "ocrd_models.ocrd_page.LabelType.factory"]], "factory() (ocrd_models.ocrd_page.labelstype static method)": [[40, "ocrd_models.ocrd_page.LabelsType.factory"]], "factory() (ocrd_models.ocrd_page.layertype static method)": [[40, "ocrd_models.ocrd_page.LayerType.factory"]], "factory() (ocrd_models.ocrd_page.layerstype static method)": [[40, "ocrd_models.ocrd_page.LayersType.factory"]], "factory() (ocrd_models.ocrd_page.linedrawingregiontype static method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.factory"]], "factory() (ocrd_models.ocrd_page.mapregiontype static method)": [[40, "ocrd_models.ocrd_page.MapRegionType.factory"]], "factory() (ocrd_models.ocrd_page.mathsregiontype static method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.factory"]], "factory() (ocrd_models.ocrd_page.metadataitemtype static method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.factory"]], "factory() (ocrd_models.ocrd_page.metadatatype static method)": [[40, "ocrd_models.ocrd_page.MetadataType.factory"]], "factory() (ocrd_models.ocrd_page.musicregiontype static method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.factory"]], "factory() (ocrd_models.ocrd_page.noiseregiontype static method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.factory"]], "factory() (ocrd_models.ocrd_page.nonprintingchartype static method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.factory"]], "factory() (ocrd_models.ocrd_page.orderedgroupindexedtype static method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.factory"]], "factory() (ocrd_models.ocrd_page.orderedgrouptype static method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.factory"]], "factory() (ocrd_models.ocrd_page.pagetype static method)": [[40, "ocrd_models.ocrd_page.PageType.factory"]], "factory() (ocrd_models.ocrd_page.pcgtstype static method)": [[40, "ocrd_models.ocrd_page.PcGtsType.factory"]], "factory() (ocrd_models.ocrd_page.printspacetype static method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.factory"]], "factory() (ocrd_models.ocrd_page.readingordertype static method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.factory"]], "factory() (ocrd_models.ocrd_page.regionrefindexedtype static method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.factory"]], "factory() (ocrd_models.ocrd_page.regionreftype static method)": [[40, "ocrd_models.ocrd_page.RegionRefType.factory"]], "factory() (ocrd_models.ocrd_page.regiontype static method)": [[40, "ocrd_models.ocrd_page.RegionType.factory"]], "factory() (ocrd_models.ocrd_page.relationtype static method)": [[40, "ocrd_models.ocrd_page.RelationType.factory"]], "factory() (ocrd_models.ocrd_page.relationstype static method)": [[40, "ocrd_models.ocrd_page.RelationsType.factory"]], "factory() (ocrd_models.ocrd_page.rolestype static method)": [[40, "ocrd_models.ocrd_page.RolesType.factory"]], "factory() (ocrd_models.ocrd_page.separatorregiontype static method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.factory"]], "factory() (ocrd_models.ocrd_page.tablecellroletype static method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.factory"]], "factory() (ocrd_models.ocrd_page.tableregiontype static method)": [[40, "ocrd_models.ocrd_page.TableRegionType.factory"]], "factory() (ocrd_models.ocrd_page.textequivtype static method)": [[40, "ocrd_models.ocrd_page.TextEquivType.factory"]], "factory() (ocrd_models.ocrd_page.textlinetype static method)": [[40, "ocrd_models.ocrd_page.TextLineType.factory"]], "factory() (ocrd_models.ocrd_page.textregiontype static method)": [[40, "ocrd_models.ocrd_page.TextRegionType.factory"]], "factory() (ocrd_models.ocrd_page.textstyletype static method)": [[40, "ocrd_models.ocrd_page.TextStyleType.factory"]], "factory() (ocrd_models.ocrd_page.unknownregiontype static method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.factory"]], "factory() (ocrd_models.ocrd_page.unorderedgroupindexedtype static method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.factory"]], "factory() (ocrd_models.ocrd_page.unorderedgrouptype static method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.factory"]], "factory() (ocrd_models.ocrd_page.userattributetype static method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.factory"]], "factory() (ocrd_models.ocrd_page.userdefinedtype static method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.factory"]], "factory() (ocrd_models.ocrd_page.wordtype static method)": [[40, "ocrd_models.ocrd_page.WordType.factory"]], "get_advertregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_AdvertRegion"]], "get_advertregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_AdvertRegion"]], "get_allalternativeimagepaths() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.get_AllAlternativeImagePaths"]], "get_allalternativeimages() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_AllAlternativeImages"]], "get_allindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_AllIndexed"]], "get_allindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_AllIndexed"]], "get_allregions() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_AllRegions"]], "get_alltextlines() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_AllTextLines"]], "get_alternativeimage() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_AlternativeImage"]], "get_alternativeimage() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_AlternativeImage"]], "get_alternativeimage() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_AlternativeImage"]], "get_alternativeimage() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_AlternativeImage"]], "get_alternativeimage() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_AlternativeImage"]], "get_baseline() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_Baseline"]], "get_border() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_Border"]], "get_chartregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_ChartRegion"]], "get_chartregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_ChartRegion"]], "get_chemregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_ChemRegion"]], "get_chemregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_ChemRegion"]], "get_comments() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.get_Comments"]], "get_coords() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.get_Coords"]], "get_coords() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_Coords"]], "get_coords() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.get_Coords"]], "get_coords() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.get_Coords"]], "get_coords() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_Coords"]], "get_coords() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_Coords"]], "get_coords() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_Coords"]], "get_created() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.get_Created"]], "get_creator() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.get_Creator"]], "get_customregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_CustomRegion"]], "get_customregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_CustomRegion"]], "get_glyph() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_Glyph"]], "get_grapheme() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.get_Grapheme"]], "get_grapheme() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.get_Grapheme"]], "get_graphemegroup() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.get_GraphemeGroup"]], "get_graphemes() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_Graphemes"]], "get_graphicregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_GraphicRegion"]], "get_graphicregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_GraphicRegion"]], "get_grid() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.get_Grid"]], "get_gridpoints() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.get_GridPoints"]], "get_imageregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_ImageRegion"]], "get_imageregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_ImageRegion"]], "get_label() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.get_Label"]], "get_labels() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_Labels"]], "get_labels() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.get_Labels"]], "get_labels() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_Labels"]], "get_labels() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_Labels"]], "get_labels() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_Labels"]], "get_labels() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_Labels"]], "get_labels() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.get_Labels"]], "get_labels() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_Labels"]], "get_labels() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_Labels"]], "get_labels() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_Labels"]], "get_labels() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_Labels"]], "get_lastchange() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.get_LastChange"]], "get_layer() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.get_Layer"]], "get_layers() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_Layers"]], "get_linedrawingregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_LineDrawingRegion"]], "get_linedrawingregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_LineDrawingRegion"]], "get_mapregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_MapRegion"]], "get_mathsregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_MathsRegion"]], "get_mathsregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_MathsRegion"]], "get_metadata() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.get_Metadata"]], "get_metadataitem() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.get_MetadataItem"]], "get_musicregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_MusicRegion"]], "get_musicregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_MusicRegion"]], "get_noiseregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_NoiseRegion"]], "get_noiseregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_NoiseRegion"]], "get_nonprintingchar() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.get_NonPrintingChar"]], "get_nonprintingchar() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.get_NonPrintingChar"]], "get_orderedgroup() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.get_OrderedGroup"]], "get_orderedgroup() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_OrderedGroup"]], "get_orderedgroup() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_OrderedGroup"]], "get_orderedgroupindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_OrderedGroupIndexed"]], "get_orderedgroupindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_OrderedGroupIndexed"]], "get_page() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.get_Page"]], "get_plaintext() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.get_PlainText"]], "get_printspace() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_PrintSpace"]], "get_readingorder() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_ReadingOrder"]], "get_regionref() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.get_RegionRef"]], "get_regionref() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_RegionRef"], [40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_regionRef"]], "get_regionref() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_RegionRef"], [40, "ocrd_models.ocrd_page.UnorderedGroupType.get_regionRef"]], "get_regionrefindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_RegionRefIndexed"]], "get_regionrefindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_RegionRefIndexed"]], "get_relation() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.get_Relation"]], "get_relations() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_Relations"]], "get_roles() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_Roles"]], "get_separatorregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_SeparatorRegion"]], "get_separatorregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_SeparatorRegion"]], "get_sourceregionref() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.get_SourceRegionRef"]], "get_tablecellrole() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.get_TableCellRole"]], "get_tableregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_TableRegion"]], "get_tableregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_TableRegion"]], "get_targetregionref() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.get_TargetRegionRef"]], "get_textequiv() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_TextEquiv"]], "get_textequiv() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.get_TextEquiv"]], "get_textequiv() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_TextEquiv"]], "get_textequiv() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_TextEquiv"]], "get_textequiv() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_TextEquiv"]], "get_textline() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_TextLine"]], "get_textregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_TextRegion"]], "get_textregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_TextRegion"]], "get_textstyle() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_TextStyle"]], "get_textstyle() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_TextStyle"]], "get_textstyle() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_TextStyle"]], "get_textstyle() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_TextStyle"]], "get_textstyle() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_TextStyle"]], "get_unicode() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.get_Unicode"]], "get_unknownregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_UnknownRegion"]], "get_unknownregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_UnknownRegion"]], "get_unorderedgroup() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.get_UnorderedGroup"]], "get_unorderedgroup() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_UnorderedGroup"]], "get_unorderedgroup() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_UnorderedGroup"]], "get_unorderedgroupchildren() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_UnorderedGroupChildren"]], "get_unorderedgroupchildren() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_UnorderedGroupChildren"]], "get_unorderedgroupindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_UnorderedGroupIndexed"]], "get_unorderedgroupindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_UnorderedGroupIndexed"]], "get_userattribute() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.get_UserAttribute"]], "get_userdefined() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_UserDefined"]], "get_userdefined() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.get_UserDefined"]], "get_userdefined() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_UserDefined"]], "get_userdefined() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_UserDefined"]], "get_userdefined() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_UserDefined"]], "get_userdefined() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_UserDefined"]], "get_userdefined() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_UserDefined"]], "get_userdefined() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_UserDefined"]], "get_userdefined() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_UserDefined"]], "get_userdefined() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_UserDefined"]], "get_word() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_Word"]], "get_align() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_align"]], "get_bgcolour() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.get_bgColour"]], "get_bgcolour() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.get_bgColour"]], "get_bgcolour() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.get_bgColour"]], "get_bgcolour() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.get_bgColour"]], "get_bgcolour() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.get_bgColour"]], "get_bgcolour() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.get_bgColour"]], "get_bgcolour() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.get_bgColour"]], "get_bgcolour() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.get_bgColour"]], "get_bgcolour() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_bgColour"]], "get_bgcolourrgb() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_bgColourRgb"]], "get_bold() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_bold"]], "get_caption() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.get_caption"]], "get_caption() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_caption"]], "get_caption() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_caption"]], "get_caption() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_caption"]], "get_caption() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_caption"]], "get_chartype() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.get_charType"]], "get_colspan() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.get_colSpan"]], "get_colour() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.get_colour"]], "get_colourdepth() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.get_colourDepth"]], "get_columnindex() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.get_columnIndex"]], "get_columns() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.get_columns"]], "get_comments() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_comments"]], "get_comments() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_comments"]], "get_conf() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.get_conf"]], "get_conf() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.get_conf"]], "get_conf() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.get_conf"]], "get_conf() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_conf"]], "get_conf() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.get_conf"]], "get_conf() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.get_conf"]], "get_continuation() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_continuation"]], "get_continuation() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_continuation"]], "get_continuation() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_continuation"]], "get_continuation() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_continuation"]], "get_continuation() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_continuation"]], "get_custom() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_custom"]], "get_custom() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.get_custom"]], "get_custom() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_custom"]], "get_custom() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_custom"]], "get_custom() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_custom"]], "get_custom() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_custom"]], "get_custom() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.get_custom"]], "get_custom() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_custom"]], "get_custom() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_custom"]], "get_custom() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_custom"]], "get_custom() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_custom"]], "get_datatype() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.get_dataType"]], "get_datatypedetails() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.get_dataTypeDetails"]], "get_date() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.get_date"]], "get_description() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.get_description"]], "get_embtext() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.get_embText"]], "get_embtext() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.get_embText"]], "get_embtext() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.get_embText"]], "get_embtext() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.get_embText"]], "get_embtext() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.get_embText"]], "get_extensiontype_() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.get_extensiontype_"]], "get_extensiontype_() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_extensiontype_"]], "get_externalid() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.get_externalId"]], "get_externalmodel() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.get_externalModel"]], "get_externalref() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.get_externalRef"]], "get_filename() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.get_filename"]], "get_fontfamily() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_fontFamily"]], "get_fontsize() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_fontSize"]], "get_header() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.get_header"]], "get_id() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_id"]], "get_id() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.get_id"]], "get_id() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.get_id"]], "get_id() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_id"]], "get_id() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_id"]], "get_id() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_id"]], "get_id() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.get_id"]], "get_id() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_id"]], "get_id() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_id"]], "get_id() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_id"]], "get_id() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_id"]], "get_imagefilename() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_imageFilename"]], "get_imageheight() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_imageHeight"]], "get_imageresolutionunit() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_imageResolutionUnit"]], "get_imagewidth() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_imageWidth"]], "get_imagexresolution() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_imageXResolution"]], "get_imageyresolution() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_imageYResolution"]], "get_indented() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_indented"]], "get_index() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.get_index"]], "get_index() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.get_index"]], "get_index() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_index"]], "get_index() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.get_index"]], "get_index() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.get_index"]], "get_index() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_index"]], "get_index() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_index"]], "get_italic() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_italic"]], "get_kerning() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_kerning"]], "get_language() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_language"]], "get_leading() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_leading"]], "get_letterspaced() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_letterSpaced"]], "get_ligature() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_ligature"]], "get_ligature() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.get_ligature"]], "get_linecolour() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.get_lineColour"]], "get_lineseparators() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.get_lineSeparators"]], "get_monospace() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_monospace"]], "get_name() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.get_name"]], "get_name() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.get_name"]], "get_ns_prefix_() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.noiseregiontype method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.nonprintingchartype method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.unknownregiontype method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.get_ns_prefix_"]], "get_ns_prefix_() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_ns_prefix_"]], "get_numcolours() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.get_numColours"]], "get_numcolours() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.get_numColours"]], "get_orientation() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.get_orientation"]], "get_orientation() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_orientation"]], "get_pcgtsid() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.get_pcGtsId"]], "get_pencolour() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.get_penColour"]], "get_points() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.get_points"]], "get_points() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.get_points"]], "get_points() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.get_points"]], "get_prefix() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.get_prefix"]], "get_primarylanguage() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_primaryLanguage"]], "get_primarylanguage() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_primaryLanguage"]], "get_primarylanguage() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_primaryLanguage"]], "get_primaryscript() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_primaryScript"]], "get_primaryscript() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_primaryScript"]], "get_primaryscript() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_primaryScript"]], "get_primaryscript() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_primaryScript"]], "get_production() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_production"]], "get_production() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_production"]], "get_production() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_production"]], "get_production() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_production"]], "get_readingdirection() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_readingDirection"]], "get_readingdirection() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_readingDirection"]], "get_readingdirection() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_readingDirection"]], "get_readingdirection() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_readingDirection"]], "get_readingorientation() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_readingOrientation"]], "get_regionref() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_regionRef"]], "get_regionref() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_regionRef"]], "get_regionref() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.get_regionRef"]], "get_regionref() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.get_regionRef"]], "get_reversevideo() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_reverseVideo"]], "get_rowindex() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.get_rowIndex"]], "get_rowspan() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.get_rowSpan"]], "get_rows() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.get_rows"]], "get_script() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_script"]], "get_secondarylanguage() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_secondaryLanguage"]], "get_secondarylanguage() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_secondaryLanguage"]], "get_secondaryscript() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_secondaryScript"]], "get_secondaryscript() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.get_secondaryScript"]], "get_secondaryscript() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_secondaryScript"]], "get_secondaryscript() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.get_secondaryScript"]], "get_serif() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_serif"]], "get_smallcaps() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_smallCaps"]], "get_strikethrough() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_strikethrough"]], "get_subscript() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_subscript"]], "get_superscript() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_superscript"]], "get_symbol() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.get_symbol"]], "get_textcolour() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_textColour"]], "get_textcolourrgb() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_textColourRgb"]], "get_textlineorder() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_textLineOrder"]], "get_textlineorder() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_textLineOrder"]], "get_type() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.get_type"]], "get_type() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.get_type"]], "get_type() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.get_type"]], "get_type() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.get_type"]], "get_type() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.get_type"]], "get_type() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.get_type"]], "get_type() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.get_type"]], "get_type() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.get_type"]], "get_type() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.get_type"]], "get_type() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.get_type"]], "get_type() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.get_type"]], "get_type() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.get_type"]], "get_type() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.get_type"]], "get_underlinestyle() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_underlineStyle"]], "get_underlined() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_underlined"]], "get_value() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.get_value"]], "get_value() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.get_value"]], "get_value() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.get_value"]], "get_xheight() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.get_xHeight"]], "get_zindex() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.get_zIndex"]], "hascontent_() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.noiseregiontype method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.nonprintingchartype method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.unknownregiontype method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.hasContent_"]], "hascontent_() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.hasContent_"]], "id (ocrd_models.ocrd_page.pagetype property)": [[40, "ocrd_models.ocrd_page.PageType.id"]], "id (ocrd_models.ocrd_page.pcgtstype property)": [[40, "ocrd_models.ocrd_page.PcGtsType.id"]], "insert_advertregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_AdvertRegion_at"]], "insert_advertregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_AdvertRegion_at"]], "insert_alternativeimage_at() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.insert_AlternativeImage_at"]], "insert_alternativeimage_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_AlternativeImage_at"]], "insert_alternativeimage_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_AlternativeImage_at"]], "insert_alternativeimage_at() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.insert_AlternativeImage_at"]], "insert_alternativeimage_at() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.insert_AlternativeImage_at"]], "insert_chartregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_ChartRegion_at"]], "insert_chartregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_ChartRegion_at"]], "insert_chemregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_ChemRegion_at"]], "insert_chemregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_ChemRegion_at"]], "insert_customregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_CustomRegion_at"]], "insert_customregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_CustomRegion_at"]], "insert_glyph_at() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.insert_Glyph_at"]], "insert_graphemegroup_at() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.insert_GraphemeGroup_at"]], "insert_grapheme_at() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.insert_Grapheme_at"]], "insert_grapheme_at() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.insert_Grapheme_at"]], "insert_graphicregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_GraphicRegion_at"]], "insert_graphicregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_GraphicRegion_at"]], "insert_gridpoints_at() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.insert_GridPoints_at"]], "insert_imageregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_ImageRegion_at"]], "insert_imageregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_ImageRegion_at"]], "insert_label_at() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.insert_Label_at"]], "insert_labels_at() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.insert_Labels_at"]], "insert_labels_at() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.insert_Labels_at"]], "insert_labels_at() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.insert_Labels_at"]], "insert_labels_at() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.insert_Labels_at"]], "insert_labels_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_Labels_at"]], "insert_labels_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_Labels_at"]], "insert_labels_at() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.insert_Labels_at"]], "insert_labels_at() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.insert_Labels_at"]], "insert_labels_at() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.insert_Labels_at"]], "insert_labels_at() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.insert_Labels_at"]], "insert_labels_at() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.insert_Labels_at"]], "insert_layer_at() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.insert_Layer_at"]], "insert_linedrawingregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_LineDrawingRegion_at"]], "insert_linedrawingregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_LineDrawingRegion_at"]], "insert_mapregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_MapRegion_at"]], "insert_mathsregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_MathsRegion_at"]], "insert_mathsregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_MathsRegion_at"]], "insert_metadataitem_at() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.insert_MetadataItem_at"]], "insert_musicregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_MusicRegion_at"]], "insert_musicregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_MusicRegion_at"]], "insert_noiseregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_NoiseRegion_at"]], "insert_noiseregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_NoiseRegion_at"]], "insert_nonprintingchar_at() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.insert_NonPrintingChar_at"]], "insert_nonprintingchar_at() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.insert_NonPrintingChar_at"]], "insert_orderedgroupindexed_at() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.insert_OrderedGroupIndexed_at"]], "insert_orderedgroupindexed_at() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.insert_OrderedGroupIndexed_at"]], "insert_orderedgroup_at() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.insert_OrderedGroup_at"]], "insert_orderedgroup_at() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.insert_OrderedGroup_at"]], "insert_regionrefindexed_at() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.insert_RegionRefIndexed_at"]], "insert_regionrefindexed_at() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.insert_RegionRefIndexed_at"]], "insert_regionref_at() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.insert_RegionRef_at"]], "insert_regionref_at() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.insert_RegionRef_at"]], "insert_regionref_at() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.insert_RegionRef_at"]], "insert_relation_at() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.insert_Relation_at"]], "insert_separatorregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_SeparatorRegion_at"]], "insert_separatorregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_SeparatorRegion_at"]], "insert_tableregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_TableRegion_at"]], "insert_tableregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_TableRegion_at"]], "insert_textequiv_at() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.insert_TextEquiv_at"]], "insert_textequiv_at() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.insert_TextEquiv_at"]], "insert_textequiv_at() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.insert_TextEquiv_at"]], "insert_textequiv_at() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.insert_TextEquiv_at"]], "insert_textequiv_at() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.insert_TextEquiv_at"]], "insert_textline_at() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.insert_TextLine_at"]], "insert_textregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_TextRegion_at"]], "insert_textregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_TextRegion_at"]], "insert_unknownregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.insert_UnknownRegion_at"]], "insert_unknownregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.insert_UnknownRegion_at"]], "insert_unorderedgroupindexed_at() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.insert_UnorderedGroupIndexed_at"]], "insert_unorderedgroupindexed_at() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.insert_UnorderedGroupIndexed_at"]], "insert_unorderedgroup_at() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.insert_UnorderedGroup_at"]], "insert_unorderedgroup_at() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.insert_UnorderedGroup_at"]], "insert_userattribute_at() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.insert_UserAttribute_at"]], "insert_word_at() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.insert_Word_at"]], "invalidate_alternativeimage() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.invalidate_AlternativeImage"]], "invalidate_alternativeimage() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.invalidate_AlternativeImage"]], "invalidate_alternativeimage() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.invalidate_AlternativeImage"]], "invalidate_alternativeimage() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.invalidate_AlternativeImage"]], "invalidate_alternativeimage() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.invalidate_AlternativeImage"]], "member_data_items_ (ocrd_models.ocrd_page.advertregiontype attribute)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.alternativeimagetype attribute)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.baselinetype attribute)": [[40, "ocrd_models.ocrd_page.BaselineType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.bordertype attribute)": [[40, "ocrd_models.ocrd_page.BorderType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.chartregiontype attribute)": [[40, "ocrd_models.ocrd_page.ChartRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.chemregiontype attribute)": [[40, "ocrd_models.ocrd_page.ChemRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.coordstype attribute)": [[40, "ocrd_models.ocrd_page.CoordsType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.customregiontype attribute)": [[40, "ocrd_models.ocrd_page.CustomRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.glyphtype attribute)": [[40, "ocrd_models.ocrd_page.GlyphType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.graphemebasetype attribute)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.graphemegrouptype attribute)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.graphemetype attribute)": [[40, "ocrd_models.ocrd_page.GraphemeType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.graphemestype attribute)": [[40, "ocrd_models.ocrd_page.GraphemesType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.graphicregiontype attribute)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.gridpointstype attribute)": [[40, "ocrd_models.ocrd_page.GridPointsType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.gridtype attribute)": [[40, "ocrd_models.ocrd_page.GridType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.imageregiontype attribute)": [[40, "ocrd_models.ocrd_page.ImageRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.labeltype attribute)": [[40, "ocrd_models.ocrd_page.LabelType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.labelstype attribute)": [[40, "ocrd_models.ocrd_page.LabelsType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.layertype attribute)": [[40, "ocrd_models.ocrd_page.LayerType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.layerstype attribute)": [[40, "ocrd_models.ocrd_page.LayersType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.linedrawingregiontype attribute)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.mapregiontype attribute)": [[40, "ocrd_models.ocrd_page.MapRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.mathsregiontype attribute)": [[40, "ocrd_models.ocrd_page.MathsRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.metadataitemtype attribute)": [[40, "ocrd_models.ocrd_page.MetadataItemType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.metadatatype attribute)": [[40, "ocrd_models.ocrd_page.MetadataType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.musicregiontype attribute)": [[40, "ocrd_models.ocrd_page.MusicRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.noiseregiontype attribute)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.nonprintingchartype attribute)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.orderedgroupindexedtype attribute)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.orderedgrouptype attribute)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.pagetype attribute)": [[40, "ocrd_models.ocrd_page.PageType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.pcgtstype attribute)": [[40, "ocrd_models.ocrd_page.PcGtsType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.printspacetype attribute)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.readingordertype attribute)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.regionrefindexedtype attribute)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.regionreftype attribute)": [[40, "ocrd_models.ocrd_page.RegionRefType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.regiontype attribute)": [[40, "ocrd_models.ocrd_page.RegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.relationtype attribute)": [[40, "ocrd_models.ocrd_page.RelationType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.relationstype attribute)": [[40, "ocrd_models.ocrd_page.RelationsType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.rolestype attribute)": [[40, "ocrd_models.ocrd_page.RolesType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.separatorregiontype attribute)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.tablecellroletype attribute)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.tableregiontype attribute)": [[40, "ocrd_models.ocrd_page.TableRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.textequivtype attribute)": [[40, "ocrd_models.ocrd_page.TextEquivType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.textlinetype attribute)": [[40, "ocrd_models.ocrd_page.TextLineType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.textregiontype attribute)": [[40, "ocrd_models.ocrd_page.TextRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.textstyletype attribute)": [[40, "ocrd_models.ocrd_page.TextStyleType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.unknownregiontype attribute)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.unorderedgroupindexedtype attribute)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.unorderedgrouptype attribute)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.userattributetype attribute)": [[40, "ocrd_models.ocrd_page.UserAttributeType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.userdefinedtype attribute)": [[40, "ocrd_models.ocrd_page.UserDefinedType.member_data_items_"]], "member_data_items_ (ocrd_models.ocrd_page.wordtype attribute)": [[40, "ocrd_models.ocrd_page.WordType.member_data_items_"]], "ocrd_models.ocrd_page": [[40, "module-ocrd_models.ocrd_page"]], "parse() (in module ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.parse"]], "parseetree() (in module ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.parseEtree"]], "parsestring() (in module ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.parseString"]], "prune_readingorder() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.prune_ReadingOrder"]], "replace_advertregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_AdvertRegion_at"]], "replace_advertregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_AdvertRegion_at"]], "replace_alternativeimage_at() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.replace_AlternativeImage_at"]], "replace_alternativeimage_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_AlternativeImage_at"]], "replace_alternativeimage_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_AlternativeImage_at"]], "replace_alternativeimage_at() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.replace_AlternativeImage_at"]], "replace_alternativeimage_at() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.replace_AlternativeImage_at"]], "replace_chartregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_ChartRegion_at"]], "replace_chartregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_ChartRegion_at"]], "replace_chemregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_ChemRegion_at"]], "replace_chemregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_ChemRegion_at"]], "replace_customregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_CustomRegion_at"]], "replace_customregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_CustomRegion_at"]], "replace_glyph_at() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.replace_Glyph_at"]], "replace_graphemegroup_at() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.replace_GraphemeGroup_at"]], "replace_grapheme_at() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.replace_Grapheme_at"]], "replace_grapheme_at() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.replace_Grapheme_at"]], "replace_graphicregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_GraphicRegion_at"]], "replace_graphicregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_GraphicRegion_at"]], "replace_gridpoints_at() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.replace_GridPoints_at"]], "replace_imageregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_ImageRegion_at"]], "replace_imageregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_ImageRegion_at"]], "replace_label_at() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.replace_Label_at"]], "replace_labels_at() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.replace_Labels_at"]], "replace_labels_at() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.replace_Labels_at"]], "replace_labels_at() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.replace_Labels_at"]], "replace_labels_at() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.replace_Labels_at"]], "replace_labels_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_Labels_at"]], "replace_labels_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_Labels_at"]], "replace_labels_at() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.replace_Labels_at"]], "replace_labels_at() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.replace_Labels_at"]], "replace_labels_at() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.replace_Labels_at"]], "replace_labels_at() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.replace_Labels_at"]], "replace_labels_at() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.replace_Labels_at"]], "replace_layer_at() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.replace_Layer_at"]], "replace_linedrawingregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_LineDrawingRegion_at"]], "replace_linedrawingregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_LineDrawingRegion_at"]], "replace_mapregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_MapRegion_at"]], "replace_mathsregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_MathsRegion_at"]], "replace_mathsregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_MathsRegion_at"]], "replace_metadataitem_at() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.replace_MetadataItem_at"]], "replace_musicregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_MusicRegion_at"]], "replace_musicregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_MusicRegion_at"]], "replace_noiseregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_NoiseRegion_at"]], "replace_noiseregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_NoiseRegion_at"]], "replace_nonprintingchar_at() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.replace_NonPrintingChar_at"]], "replace_nonprintingchar_at() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.replace_NonPrintingChar_at"]], "replace_orderedgroupindexed_at() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.replace_OrderedGroupIndexed_at"]], "replace_orderedgroupindexed_at() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.replace_OrderedGroupIndexed_at"]], "replace_orderedgroup_at() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.replace_OrderedGroup_at"]], "replace_orderedgroup_at() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.replace_OrderedGroup_at"]], "replace_regionrefindexed_at() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.replace_RegionRefIndexed_at"]], "replace_regionrefindexed_at() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.replace_RegionRefIndexed_at"]], "replace_regionref_at() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.replace_RegionRef_at"]], "replace_regionref_at() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.replace_RegionRef_at"]], "replace_regionref_at() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.replace_RegionRef_at"]], "replace_relation_at() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.replace_Relation_at"]], "replace_separatorregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_SeparatorRegion_at"]], "replace_separatorregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_SeparatorRegion_at"]], "replace_tableregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_TableRegion_at"]], "replace_tableregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_TableRegion_at"]], "replace_textequiv_at() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.replace_TextEquiv_at"]], "replace_textequiv_at() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.replace_TextEquiv_at"]], "replace_textequiv_at() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.replace_TextEquiv_at"]], "replace_textequiv_at() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.replace_TextEquiv_at"]], "replace_textequiv_at() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.replace_TextEquiv_at"]], "replace_textline_at() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.replace_TextLine_at"]], "replace_textregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_TextRegion_at"]], "replace_textregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_TextRegion_at"]], "replace_unknownregion_at() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.replace_UnknownRegion_at"]], "replace_unknownregion_at() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.replace_UnknownRegion_at"]], "replace_unorderedgroupindexed_at() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.replace_UnorderedGroupIndexed_at"]], "replace_unorderedgroupindexed_at() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.replace_UnorderedGroupIndexed_at"]], "replace_unorderedgroup_at() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.replace_UnorderedGroup_at"]], "replace_unorderedgroup_at() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.replace_UnorderedGroup_at"]], "replace_userattribute_at() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.replace_UserAttribute_at"]], "replace_word_at() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.replace_Word_at"]], "set_advertregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_AdvertRegion"]], "set_advertregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_AdvertRegion"]], "set_alternativeimage() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_AlternativeImage"]], "set_alternativeimage() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_AlternativeImage"]], "set_alternativeimage() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_AlternativeImage"]], "set_alternativeimage() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_AlternativeImage"]], "set_alternativeimage() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_AlternativeImage"]], "set_baseline() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_Baseline"]], "set_border() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_Border"]], "set_chartregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_ChartRegion"]], "set_chartregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_ChartRegion"]], "set_chemregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_ChemRegion"]], "set_chemregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_ChemRegion"]], "set_comments() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.set_Comments"]], "set_coords() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.set_Coords"]], "set_coords() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_Coords"]], "set_coords() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.set_Coords"]], "set_coords() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.set_Coords"]], "set_coords() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_Coords"]], "set_coords() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_Coords"]], "set_coords() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_Coords"]], "set_created() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.set_Created"]], "set_creator() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.set_Creator"]], "set_customregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_CustomRegion"]], "set_customregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_CustomRegion"]], "set_glyph() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_Glyph"]], "set_grapheme() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.set_Grapheme"]], "set_grapheme() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.set_Grapheme"]], "set_graphemegroup() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.set_GraphemeGroup"]], "set_graphemes() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_Graphemes"]], "set_graphicregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_GraphicRegion"]], "set_graphicregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_GraphicRegion"]], "set_grid() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.set_Grid"]], "set_gridpoints() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.set_GridPoints"]], "set_imageregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_ImageRegion"]], "set_imageregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_ImageRegion"]], "set_label() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.set_Label"]], "set_labels() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_Labels"]], "set_labels() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.set_Labels"]], "set_labels() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_Labels"]], "set_labels() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_Labels"]], "set_labels() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_Labels"]], "set_labels() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_Labels"]], "set_labels() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.set_Labels"]], "set_labels() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_Labels"]], "set_labels() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_Labels"]], "set_labels() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_Labels"]], "set_labels() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_Labels"]], "set_lastchange() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.set_LastChange"]], "set_layer() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.set_Layer"]], "set_layers() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_Layers"]], "set_linedrawingregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_LineDrawingRegion"]], "set_linedrawingregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_LineDrawingRegion"]], "set_mapregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_MapRegion"]], "set_mathsregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_MathsRegion"]], "set_mathsregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_MathsRegion"]], "set_metadata() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.set_Metadata"]], "set_metadataitem() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.set_MetadataItem"]], "set_musicregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_MusicRegion"]], "set_musicregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_MusicRegion"]], "set_noiseregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_NoiseRegion"]], "set_noiseregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_NoiseRegion"]], "set_nonprintingchar() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.set_NonPrintingChar"]], "set_nonprintingchar() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.set_NonPrintingChar"]], "set_orderedgroup() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.set_OrderedGroup"]], "set_orderedgroup() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_OrderedGroup"]], "set_orderedgroup() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_OrderedGroup"]], "set_orderedgroupindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_OrderedGroupIndexed"]], "set_orderedgroupindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_OrderedGroupIndexed"]], "set_page() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.set_Page"]], "set_plaintext() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.set_PlainText"]], "set_printspace() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_PrintSpace"]], "set_readingorder() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_ReadingOrder"]], "set_regionref() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.set_RegionRef"]], "set_regionref() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_RegionRef"], [40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_regionRef"]], "set_regionref() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_RegionRef"], [40, "ocrd_models.ocrd_page.UnorderedGroupType.set_regionRef"]], "set_regionrefindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_RegionRefIndexed"]], "set_regionrefindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_RegionRefIndexed"]], "set_relation() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.set_Relation"]], "set_relations() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_Relations"]], "set_roles() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_Roles"]], "set_separatorregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_SeparatorRegion"]], "set_separatorregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_SeparatorRegion"]], "set_sourceregionref() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.set_SourceRegionRef"]], "set_tablecellrole() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.set_TableCellRole"]], "set_tableregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_TableRegion"]], "set_tableregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_TableRegion"]], "set_targetregionref() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.set_TargetRegionRef"]], "set_textequiv() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_TextEquiv"]], "set_textequiv() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.set_TextEquiv"]], "set_textequiv() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_TextEquiv"]], "set_textequiv() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_TextEquiv"]], "set_textequiv() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_TextEquiv"]], "set_textline() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_TextLine"]], "set_textregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_TextRegion"]], "set_textregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_TextRegion"]], "set_textstyle() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_TextStyle"]], "set_textstyle() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_TextStyle"]], "set_textstyle() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_TextStyle"]], "set_textstyle() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_TextStyle"]], "set_textstyle() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_TextStyle"]], "set_unicode() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.set_Unicode"]], "set_unknownregion() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_UnknownRegion"]], "set_unknownregion() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_UnknownRegion"]], "set_unorderedgroup() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.set_UnorderedGroup"]], "set_unorderedgroup() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_UnorderedGroup"]], "set_unorderedgroup() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_UnorderedGroup"]], "set_unorderedgroupindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_UnorderedGroupIndexed"]], "set_unorderedgroupindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_UnorderedGroupIndexed"]], "set_userattribute() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.set_UserAttribute"]], "set_userdefined() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_UserDefined"]], "set_userdefined() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.set_UserDefined"]], "set_userdefined() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_UserDefined"]], "set_userdefined() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_UserDefined"]], "set_userdefined() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_UserDefined"]], "set_userdefined() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_UserDefined"]], "set_userdefined() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_UserDefined"]], "set_userdefined() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_UserDefined"]], "set_userdefined() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_UserDefined"]], "set_userdefined() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_UserDefined"]], "set_word() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_Word"]], "set_align() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_align"]], "set_bgcolour() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.set_bgColour"]], "set_bgcolour() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.set_bgColour"]], "set_bgcolour() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.set_bgColour"]], "set_bgcolour() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.set_bgColour"]], "set_bgcolour() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.set_bgColour"]], "set_bgcolour() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.set_bgColour"]], "set_bgcolour() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.set_bgColour"]], "set_bgcolour() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.set_bgColour"]], "set_bgcolour() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_bgColour"]], "set_bgcolourrgb() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_bgColourRgb"]], "set_bold() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_bold"]], "set_caption() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.set_caption"]], "set_caption() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_caption"]], "set_caption() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_caption"]], "set_caption() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_caption"]], "set_caption() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_caption"]], "set_chartype() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.set_charType"]], "set_colspan() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.set_colSpan"]], "set_colour() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.set_colour"]], "set_colourdepth() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.set_colourDepth"]], "set_columnindex() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.set_columnIndex"]], "set_columns() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.set_columns"]], "set_comments() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_comments"]], "set_comments() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_comments"]], "set_conf() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.set_conf"]], "set_conf() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.set_conf"]], "set_conf() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.set_conf"]], "set_conf() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_conf"]], "set_conf() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.set_conf"]], "set_conf() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.set_conf"]], "set_continuation() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_continuation"]], "set_continuation() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_continuation"]], "set_continuation() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_continuation"]], "set_continuation() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_continuation"]], "set_continuation() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_continuation"]], "set_custom() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_custom"]], "set_custom() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.set_custom"]], "set_custom() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_custom"]], "set_custom() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_custom"]], "set_custom() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_custom"]], "set_custom() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_custom"]], "set_custom() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.set_custom"]], "set_custom() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_custom"]], "set_custom() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_custom"]], "set_custom() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_custom"]], "set_custom() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_custom"]], "set_datatype() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.set_dataType"]], "set_datatypedetails() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.set_dataTypeDetails"]], "set_date() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.set_date"]], "set_description() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.set_description"]], "set_embtext() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.set_embText"]], "set_embtext() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.set_embText"]], "set_embtext() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.set_embText"]], "set_embtext() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.set_embText"]], "set_embtext() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.set_embText"]], "set_extensiontype_() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.set_extensiontype_"]], "set_extensiontype_() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_extensiontype_"]], "set_externalid() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.set_externalId"]], "set_externalmodel() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.set_externalModel"]], "set_externalref() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.set_externalRef"]], "set_filename() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.set_filename"]], "set_fontfamily() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_fontFamily"]], "set_fontsize() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_fontSize"]], "set_header() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.set_header"]], "set_id() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_id"]], "set_id() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.set_id"]], "set_id() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.set_id"]], "set_id() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_id"]], "set_id() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_id"]], "set_id() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_id"]], "set_id() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.set_id"]], "set_id() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_id"]], "set_id() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_id"]], "set_id() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_id"]], "set_id() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_id"]], "set_imagefilename() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_imageFilename"]], "set_imageheight() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_imageHeight"]], "set_imageresolutionunit() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_imageResolutionUnit"]], "set_imagewidth() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_imageWidth"]], "set_imagexresolution() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_imageXResolution"]], "set_imageyresolution() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_imageYResolution"]], "set_indented() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_indented"]], "set_index() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.set_index"]], "set_index() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.set_index"]], "set_index() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_index"]], "set_index() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.set_index"]], "set_index() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.set_index"]], "set_index() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_index"]], "set_index() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_index"]], "set_italic() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_italic"]], "set_kerning() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_kerning"]], "set_language() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_language"]], "set_leading() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_leading"]], "set_letterspaced() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_letterSpaced"]], "set_ligature() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_ligature"]], "set_ligature() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.set_ligature"]], "set_linecolour() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.set_lineColour"]], "set_lineseparators() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.set_lineSeparators"]], "set_monospace() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_monospace"]], "set_name() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.set_name"]], "set_name() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.set_name"]], "set_ns_prefix_() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.noiseregiontype method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.nonprintingchartype method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.unknownregiontype method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.set_ns_prefix_"]], "set_ns_prefix_() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_ns_prefix_"]], "set_numcolours() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.set_numColours"]], "set_numcolours() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.set_numColours"]], "set_orientation() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.set_orientation"]], "set_orientation() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_orientation"]], "set_pcgtsid() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.set_pcGtsId"]], "set_pencolour() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.set_penColour"]], "set_points() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.set_points"]], "set_points() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.set_points"]], "set_points() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.set_points"]], "set_prefix() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.set_prefix"]], "set_primarylanguage() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_primaryLanguage"]], "set_primarylanguage() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_primaryLanguage"]], "set_primarylanguage() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_primaryLanguage"]], "set_primaryscript() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_primaryScript"]], "set_primaryscript() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_primaryScript"]], "set_primaryscript() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_primaryScript"]], "set_primaryscript() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_primaryScript"]], "set_production() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_production"]], "set_production() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_production"]], "set_production() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_production"]], "set_production() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_production"]], "set_readingdirection() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_readingDirection"]], "set_readingdirection() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_readingDirection"]], "set_readingdirection() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_readingDirection"]], "set_readingdirection() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_readingDirection"]], "set_readingorientation() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_readingOrientation"]], "set_regionref() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_regionRef"]], "set_regionref() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_regionRef"]], "set_regionref() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.set_regionRef"]], "set_regionref() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.set_regionRef"]], "set_reversevideo() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_reverseVideo"]], "set_rowindex() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.set_rowIndex"]], "set_rowspan() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.set_rowSpan"]], "set_rows() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.set_rows"]], "set_script() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_script"]], "set_secondarylanguage() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_secondaryLanguage"]], "set_secondarylanguage() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_secondaryLanguage"]], "set_secondaryscript() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_secondaryScript"]], "set_secondaryscript() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.set_secondaryScript"]], "set_secondaryscript() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_secondaryScript"]], "set_secondaryscript() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.set_secondaryScript"]], "set_serif() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_serif"]], "set_smallcaps() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_smallCaps"]], "set_strikethrough() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_strikethrough"]], "set_subscript() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_subscript"]], "set_superscript() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_superscript"]], "set_symbol() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.set_symbol"]], "set_textcolour() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_textColour"]], "set_textcolourrgb() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_textColourRgb"]], "set_textlineorder() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_textLineOrder"]], "set_textlineorder() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_textLineOrder"]], "set_type() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.set_type"]], "set_type() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.set_type"]], "set_type() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.set_type"]], "set_type() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.set_type"]], "set_type() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.set_type"]], "set_type() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.set_type"]], "set_type() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.set_type"]], "set_type() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.set_type"]], "set_type() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.set_type"]], "set_type() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.set_type"]], "set_type() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.set_type"]], "set_type() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.set_type"]], "set_type() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.set_type"]], "set_underlinestyle() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_underlineStyle"]], "set_underlined() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_underlined"]], "set_value() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.set_value"]], "set_value() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.set_value"]], "set_value() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.set_value"]], "set_xheight() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.set_xHeight"]], "set_zindex() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.set_zIndex"]], "sort_allindexed() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.sort_AllIndexed"]], "sort_allindexed() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.sort_AllIndexed"]], "subclass (ocrd_models.ocrd_page.advertregiontype attribute)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.alternativeimagetype attribute)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.subclass"]], "subclass (ocrd_models.ocrd_page.baselinetype attribute)": [[40, "ocrd_models.ocrd_page.BaselineType.subclass"]], "subclass (ocrd_models.ocrd_page.bordertype attribute)": [[40, "ocrd_models.ocrd_page.BorderType.subclass"]], "subclass (ocrd_models.ocrd_page.chartregiontype attribute)": [[40, "ocrd_models.ocrd_page.ChartRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.chemregiontype attribute)": [[40, "ocrd_models.ocrd_page.ChemRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.coordstype attribute)": [[40, "ocrd_models.ocrd_page.CoordsType.subclass"]], "subclass (ocrd_models.ocrd_page.customregiontype attribute)": [[40, "ocrd_models.ocrd_page.CustomRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.glyphtype attribute)": [[40, "ocrd_models.ocrd_page.GlyphType.subclass"]], "subclass (ocrd_models.ocrd_page.graphemebasetype attribute)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.subclass"]], "subclass (ocrd_models.ocrd_page.graphemegrouptype attribute)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.subclass"]], "subclass (ocrd_models.ocrd_page.graphemetype attribute)": [[40, "ocrd_models.ocrd_page.GraphemeType.subclass"]], "subclass (ocrd_models.ocrd_page.graphemestype attribute)": [[40, "ocrd_models.ocrd_page.GraphemesType.subclass"]], "subclass (ocrd_models.ocrd_page.graphicregiontype attribute)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.gridpointstype attribute)": [[40, "ocrd_models.ocrd_page.GridPointsType.subclass"]], "subclass (ocrd_models.ocrd_page.gridtype attribute)": [[40, "ocrd_models.ocrd_page.GridType.subclass"]], "subclass (ocrd_models.ocrd_page.imageregiontype attribute)": [[40, "ocrd_models.ocrd_page.ImageRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.labeltype attribute)": [[40, "ocrd_models.ocrd_page.LabelType.subclass"]], "subclass (ocrd_models.ocrd_page.labelstype attribute)": [[40, "ocrd_models.ocrd_page.LabelsType.subclass"]], "subclass (ocrd_models.ocrd_page.layertype attribute)": [[40, "ocrd_models.ocrd_page.LayerType.subclass"]], "subclass (ocrd_models.ocrd_page.layerstype attribute)": [[40, "ocrd_models.ocrd_page.LayersType.subclass"]], "subclass (ocrd_models.ocrd_page.linedrawingregiontype attribute)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.mapregiontype attribute)": [[40, "ocrd_models.ocrd_page.MapRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.mathsregiontype attribute)": [[40, "ocrd_models.ocrd_page.MathsRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.metadataitemtype attribute)": [[40, "ocrd_models.ocrd_page.MetadataItemType.subclass"]], "subclass (ocrd_models.ocrd_page.metadatatype attribute)": [[40, "ocrd_models.ocrd_page.MetadataType.subclass"]], "subclass (ocrd_models.ocrd_page.musicregiontype attribute)": [[40, "ocrd_models.ocrd_page.MusicRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.noiseregiontype attribute)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.nonprintingchartype attribute)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.subclass"]], "subclass (ocrd_models.ocrd_page.orderedgroupindexedtype attribute)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.subclass"]], "subclass (ocrd_models.ocrd_page.orderedgrouptype attribute)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.subclass"]], "subclass (ocrd_models.ocrd_page.pagetype attribute)": [[40, "ocrd_models.ocrd_page.PageType.subclass"]], "subclass (ocrd_models.ocrd_page.pcgtstype attribute)": [[40, "ocrd_models.ocrd_page.PcGtsType.subclass"]], "subclass (ocrd_models.ocrd_page.printspacetype attribute)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.subclass"]], "subclass (ocrd_models.ocrd_page.readingordertype attribute)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.subclass"]], "subclass (ocrd_models.ocrd_page.regionrefindexedtype attribute)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.subclass"]], "subclass (ocrd_models.ocrd_page.regionreftype attribute)": [[40, "ocrd_models.ocrd_page.RegionRefType.subclass"]], "subclass (ocrd_models.ocrd_page.regiontype attribute)": [[40, "ocrd_models.ocrd_page.RegionType.subclass"]], "subclass (ocrd_models.ocrd_page.relationtype attribute)": [[40, "ocrd_models.ocrd_page.RelationType.subclass"]], "subclass (ocrd_models.ocrd_page.relationstype attribute)": [[40, "ocrd_models.ocrd_page.RelationsType.subclass"]], "subclass (ocrd_models.ocrd_page.rolestype attribute)": [[40, "ocrd_models.ocrd_page.RolesType.subclass"]], "subclass (ocrd_models.ocrd_page.separatorregiontype attribute)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.tablecellroletype attribute)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.subclass"]], "subclass (ocrd_models.ocrd_page.tableregiontype attribute)": [[40, "ocrd_models.ocrd_page.TableRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.textequivtype attribute)": [[40, "ocrd_models.ocrd_page.TextEquivType.subclass"]], "subclass (ocrd_models.ocrd_page.textlinetype attribute)": [[40, "ocrd_models.ocrd_page.TextLineType.subclass"]], "subclass (ocrd_models.ocrd_page.textregiontype attribute)": [[40, "ocrd_models.ocrd_page.TextRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.textstyletype attribute)": [[40, "ocrd_models.ocrd_page.TextStyleType.subclass"]], "subclass (ocrd_models.ocrd_page.unknownregiontype attribute)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.subclass"]], "subclass (ocrd_models.ocrd_page.unorderedgroupindexedtype attribute)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.subclass"]], "subclass (ocrd_models.ocrd_page.unorderedgrouptype attribute)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.subclass"]], "subclass (ocrd_models.ocrd_page.userattributetype attribute)": [[40, "ocrd_models.ocrd_page.UserAttributeType.subclass"]], "subclass (ocrd_models.ocrd_page.userdefinedtype attribute)": [[40, "ocrd_models.ocrd_page.UserDefinedType.subclass"]], "subclass (ocrd_models.ocrd_page.wordtype attribute)": [[40, "ocrd_models.ocrd_page.WordType.subclass"]], "superclass (ocrd_models.ocrd_page.advertregiontype attribute)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.alternativeimagetype attribute)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.superclass"]], "superclass (ocrd_models.ocrd_page.baselinetype attribute)": [[40, "ocrd_models.ocrd_page.BaselineType.superclass"]], "superclass (ocrd_models.ocrd_page.bordertype attribute)": [[40, "ocrd_models.ocrd_page.BorderType.superclass"]], "superclass (ocrd_models.ocrd_page.chartregiontype attribute)": [[40, "ocrd_models.ocrd_page.ChartRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.chemregiontype attribute)": [[40, "ocrd_models.ocrd_page.ChemRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.coordstype attribute)": [[40, "ocrd_models.ocrd_page.CoordsType.superclass"]], "superclass (ocrd_models.ocrd_page.customregiontype attribute)": [[40, "ocrd_models.ocrd_page.CustomRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.glyphtype attribute)": [[40, "ocrd_models.ocrd_page.GlyphType.superclass"]], "superclass (ocrd_models.ocrd_page.graphemebasetype attribute)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.superclass"]], "superclass (ocrd_models.ocrd_page.graphemegrouptype attribute)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.superclass"]], "superclass (ocrd_models.ocrd_page.graphemetype attribute)": [[40, "ocrd_models.ocrd_page.GraphemeType.superclass"]], "superclass (ocrd_models.ocrd_page.graphemestype attribute)": [[40, "ocrd_models.ocrd_page.GraphemesType.superclass"]], "superclass (ocrd_models.ocrd_page.graphicregiontype attribute)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.gridpointstype attribute)": [[40, "ocrd_models.ocrd_page.GridPointsType.superclass"]], "superclass (ocrd_models.ocrd_page.gridtype attribute)": [[40, "ocrd_models.ocrd_page.GridType.superclass"]], "superclass (ocrd_models.ocrd_page.imageregiontype attribute)": [[40, "ocrd_models.ocrd_page.ImageRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.labeltype attribute)": [[40, "ocrd_models.ocrd_page.LabelType.superclass"]], "superclass (ocrd_models.ocrd_page.labelstype attribute)": [[40, "ocrd_models.ocrd_page.LabelsType.superclass"]], "superclass (ocrd_models.ocrd_page.layertype attribute)": [[40, "ocrd_models.ocrd_page.LayerType.superclass"]], "superclass (ocrd_models.ocrd_page.layerstype attribute)": [[40, "ocrd_models.ocrd_page.LayersType.superclass"]], "superclass (ocrd_models.ocrd_page.linedrawingregiontype attribute)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.mapregiontype attribute)": [[40, "ocrd_models.ocrd_page.MapRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.mathsregiontype attribute)": [[40, "ocrd_models.ocrd_page.MathsRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.metadataitemtype attribute)": [[40, "ocrd_models.ocrd_page.MetadataItemType.superclass"]], "superclass (ocrd_models.ocrd_page.metadatatype attribute)": [[40, "ocrd_models.ocrd_page.MetadataType.superclass"]], "superclass (ocrd_models.ocrd_page.musicregiontype attribute)": [[40, "ocrd_models.ocrd_page.MusicRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.noiseregiontype attribute)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.nonprintingchartype attribute)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.superclass"]], "superclass (ocrd_models.ocrd_page.orderedgroupindexedtype attribute)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.superclass"]], "superclass (ocrd_models.ocrd_page.orderedgrouptype attribute)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.superclass"]], "superclass (ocrd_models.ocrd_page.pagetype attribute)": [[40, "ocrd_models.ocrd_page.PageType.superclass"]], "superclass (ocrd_models.ocrd_page.pcgtstype attribute)": [[40, "ocrd_models.ocrd_page.PcGtsType.superclass"]], "superclass (ocrd_models.ocrd_page.printspacetype attribute)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.superclass"]], "superclass (ocrd_models.ocrd_page.readingordertype attribute)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.superclass"]], "superclass (ocrd_models.ocrd_page.regionrefindexedtype attribute)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.superclass"]], "superclass (ocrd_models.ocrd_page.regionreftype attribute)": [[40, "ocrd_models.ocrd_page.RegionRefType.superclass"]], "superclass (ocrd_models.ocrd_page.regiontype attribute)": [[40, "ocrd_models.ocrd_page.RegionType.superclass"]], "superclass (ocrd_models.ocrd_page.relationtype attribute)": [[40, "ocrd_models.ocrd_page.RelationType.superclass"]], "superclass (ocrd_models.ocrd_page.relationstype attribute)": [[40, "ocrd_models.ocrd_page.RelationsType.superclass"]], "superclass (ocrd_models.ocrd_page.rolestype attribute)": [[40, "ocrd_models.ocrd_page.RolesType.superclass"]], "superclass (ocrd_models.ocrd_page.separatorregiontype attribute)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.tablecellroletype attribute)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.superclass"]], "superclass (ocrd_models.ocrd_page.tableregiontype attribute)": [[40, "ocrd_models.ocrd_page.TableRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.textequivtype attribute)": [[40, "ocrd_models.ocrd_page.TextEquivType.superclass"]], "superclass (ocrd_models.ocrd_page.textlinetype attribute)": [[40, "ocrd_models.ocrd_page.TextLineType.superclass"]], "superclass (ocrd_models.ocrd_page.textregiontype attribute)": [[40, "ocrd_models.ocrd_page.TextRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.textstyletype attribute)": [[40, "ocrd_models.ocrd_page.TextStyleType.superclass"]], "superclass (ocrd_models.ocrd_page.unknownregiontype attribute)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.superclass"]], "superclass (ocrd_models.ocrd_page.unorderedgroupindexedtype attribute)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.superclass"]], "superclass (ocrd_models.ocrd_page.unorderedgrouptype attribute)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.superclass"]], "superclass (ocrd_models.ocrd_page.userattributetype attribute)": [[40, "ocrd_models.ocrd_page.UserAttributeType.superclass"]], "superclass (ocrd_models.ocrd_page.userdefinedtype attribute)": [[40, "ocrd_models.ocrd_page.UserDefinedType.superclass"]], "superclass (ocrd_models.ocrd_page.wordtype attribute)": [[40, "ocrd_models.ocrd_page.WordType.superclass"]], "to_etree() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.bordertype method)": [[40, "ocrd_models.ocrd_page.BorderType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.customregiontype method)": [[40, "ocrd_models.ocrd_page.CustomRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.graphemebasetype method)": [[40, "ocrd_models.ocrd_page.GraphemeBaseType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.graphemegrouptype method)": [[40, "ocrd_models.ocrd_page.GraphemeGroupType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.graphemetype method)": [[40, "ocrd_models.ocrd_page.GraphemeType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.graphemestype method)": [[40, "ocrd_models.ocrd_page.GraphemesType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.gridtype method)": [[40, "ocrd_models.ocrd_page.GridType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.labeltype method)": [[40, "ocrd_models.ocrd_page.LabelType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.labelstype method)": [[40, "ocrd_models.ocrd_page.LabelsType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.layertype method)": [[40, "ocrd_models.ocrd_page.LayerType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.layerstype method)": [[40, "ocrd_models.ocrd_page.LayersType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.mapregiontype method)": [[40, "ocrd_models.ocrd_page.MapRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.metadataitemtype method)": [[40, "ocrd_models.ocrd_page.MetadataItemType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.metadatatype method)": [[40, "ocrd_models.ocrd_page.MetadataType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.noiseregiontype method)": [[40, "ocrd_models.ocrd_page.NoiseRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.nonprintingchartype method)": [[40, "ocrd_models.ocrd_page.NonPrintingCharType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.pcgtstype method)": [[40, "ocrd_models.ocrd_page.PcGtsType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.printspacetype method)": [[40, "ocrd_models.ocrd_page.PrintSpaceType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.regionrefindexedtype method)": [[40, "ocrd_models.ocrd_page.RegionRefIndexedType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.regionreftype method)": [[40, "ocrd_models.ocrd_page.RegionRefType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.regiontype method)": [[40, "ocrd_models.ocrd_page.RegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.relationtype method)": [[40, "ocrd_models.ocrd_page.RelationType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.relationstype method)": [[40, "ocrd_models.ocrd_page.RelationsType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.rolestype method)": [[40, "ocrd_models.ocrd_page.RolesType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.tablecellroletype method)": [[40, "ocrd_models.ocrd_page.TableCellRoleType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.unknownregiontype method)": [[40, "ocrd_models.ocrd_page.UnknownRegionType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.userattributetype method)": [[40, "ocrd_models.ocrd_page.UserAttributeType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.userdefinedtype method)": [[40, "ocrd_models.ocrd_page.UserDefinedType.to_etree"]], "to_etree() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.to_etree"]], "to_xml() (in module ocrd_models.ocrd_page)": [[40, "ocrd_models.ocrd_page.to_xml"]], "validate_alignsimpletype() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.validate_AlignSimpleType"]], "validate_charttypesimpletype() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.validate_ChartTypeSimpleType"]], "validate_colourdepthsimpletype() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.validate_ColourDepthSimpleType"]], "validate_coloursimpletype() (ocrd_models.ocrd_page.advertregiontype method)": [[40, "ocrd_models.ocrd_page.AdvertRegionType.validate_ColourSimpleType"]], "validate_coloursimpletype() (ocrd_models.ocrd_page.chartregiontype method)": [[40, "ocrd_models.ocrd_page.ChartRegionType.validate_ColourSimpleType"]], "validate_coloursimpletype() (ocrd_models.ocrd_page.chemregiontype method)": [[40, "ocrd_models.ocrd_page.ChemRegionType.validate_ColourSimpleType"]], "validate_coloursimpletype() (ocrd_models.ocrd_page.imageregiontype method)": [[40, "ocrd_models.ocrd_page.ImageRegionType.validate_ColourSimpleType"]], "validate_coloursimpletype() (ocrd_models.ocrd_page.linedrawingregiontype method)": [[40, "ocrd_models.ocrd_page.LineDrawingRegionType.validate_ColourSimpleType"]], "validate_coloursimpletype() (ocrd_models.ocrd_page.mathsregiontype method)": [[40, "ocrd_models.ocrd_page.MathsRegionType.validate_ColourSimpleType"]], "validate_coloursimpletype() (ocrd_models.ocrd_page.musicregiontype method)": [[40, "ocrd_models.ocrd_page.MusicRegionType.validate_ColourSimpleType"]], "validate_coloursimpletype() (ocrd_models.ocrd_page.separatorregiontype method)": [[40, "ocrd_models.ocrd_page.SeparatorRegionType.validate_ColourSimpleType"]], "validate_coloursimpletype() (ocrd_models.ocrd_page.tableregiontype method)": [[40, "ocrd_models.ocrd_page.TableRegionType.validate_ColourSimpleType"]], "validate_coloursimpletype() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.validate_ColourSimpleType"]], "validate_confsimpletype() (ocrd_models.ocrd_page.alternativeimagetype method)": [[40, "ocrd_models.ocrd_page.AlternativeImageType.validate_ConfSimpleType"]], "validate_confsimpletype() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.validate_ConfSimpleType"]], "validate_confsimpletype() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.validate_ConfSimpleType"]], "validate_confsimpletype() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.validate_ConfSimpleType"]], "validate_confsimpletype() (ocrd_models.ocrd_page.readingordertype method)": [[40, "ocrd_models.ocrd_page.ReadingOrderType.validate_ConfSimpleType"]], "validate_confsimpletype() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.validate_ConfSimpleType"]], "validate_graphicstypesimpletype() (ocrd_models.ocrd_page.graphicregiontype method)": [[40, "ocrd_models.ocrd_page.GraphicRegionType.validate_GraphicsTypeSimpleType"]], "validate_grouptypesimpletype() (ocrd_models.ocrd_page.orderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupIndexedType.validate_GroupTypeSimpleType"]], "validate_grouptypesimpletype() (ocrd_models.ocrd_page.orderedgrouptype method)": [[40, "ocrd_models.ocrd_page.OrderedGroupType.validate_GroupTypeSimpleType"]], "validate_grouptypesimpletype() (ocrd_models.ocrd_page.unorderedgroupindexedtype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupIndexedType.validate_GroupTypeSimpleType"]], "validate_grouptypesimpletype() (ocrd_models.ocrd_page.unorderedgrouptype method)": [[40, "ocrd_models.ocrd_page.UnorderedGroupType.validate_GroupTypeSimpleType"]], "validate_languagesimpletype() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.validate_LanguageSimpleType"]], "validate_languagesimpletype() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.validate_LanguageSimpleType"]], "validate_languagesimpletype() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.validate_LanguageSimpleType"]], "validate_languagesimpletype() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.validate_LanguageSimpleType"]], "validate_pagetypesimpletype() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.validate_PageTypeSimpleType"]], "validate_pointstype() (ocrd_models.ocrd_page.baselinetype method)": [[40, "ocrd_models.ocrd_page.BaselineType.validate_PointsType"]], "validate_pointstype() (ocrd_models.ocrd_page.coordstype method)": [[40, "ocrd_models.ocrd_page.CoordsType.validate_PointsType"]], "validate_pointstype() (ocrd_models.ocrd_page.gridpointstype method)": [[40, "ocrd_models.ocrd_page.GridPointsType.validate_PointsType"]], "validate_pointstype_patterns_ (ocrd_models.ocrd_page.baselinetype attribute)": [[40, "ocrd_models.ocrd_page.BaselineType.validate_PointsType_patterns_"]], "validate_pointstype_patterns_ (ocrd_models.ocrd_page.coordstype attribute)": [[40, "ocrd_models.ocrd_page.CoordsType.validate_PointsType_patterns_"]], "validate_pointstype_patterns_ (ocrd_models.ocrd_page.gridpointstype attribute)": [[40, "ocrd_models.ocrd_page.GridPointsType.validate_PointsType_patterns_"]], "validate_productionsimpletype() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.validate_ProductionSimpleType"]], "validate_productionsimpletype() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.validate_ProductionSimpleType"]], "validate_productionsimpletype() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.validate_ProductionSimpleType"]], "validate_productionsimpletype() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.validate_ProductionSimpleType"]], "validate_readingdirectionsimpletype() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.validate_ReadingDirectionSimpleType"]], "validate_readingdirectionsimpletype() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.validate_ReadingDirectionSimpleType"]], "validate_readingdirectionsimpletype() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.validate_ReadingDirectionSimpleType"]], "validate_readingdirectionsimpletype() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.validate_ReadingDirectionSimpleType"]], "validate_scriptsimpletype() (ocrd_models.ocrd_page.glyphtype method)": [[40, "ocrd_models.ocrd_page.GlyphType.validate_ScriptSimpleType"]], "validate_scriptsimpletype() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.validate_ScriptSimpleType"]], "validate_scriptsimpletype() (ocrd_models.ocrd_page.textlinetype method)": [[40, "ocrd_models.ocrd_page.TextLineType.validate_ScriptSimpleType"]], "validate_scriptsimpletype() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.validate_ScriptSimpleType"]], "validate_scriptsimpletype() (ocrd_models.ocrd_page.wordtype method)": [[40, "ocrd_models.ocrd_page.WordType.validate_ScriptSimpleType"]], "validate_textdatatypesimpletype() (ocrd_models.ocrd_page.textequivtype method)": [[40, "ocrd_models.ocrd_page.TextEquivType.validate_TextDataTypeSimpleType"]], "validate_textlineordersimpletype() (ocrd_models.ocrd_page.pagetype method)": [[40, "ocrd_models.ocrd_page.PageType.validate_TextLineOrderSimpleType"]], "validate_textlineordersimpletype() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.validate_TextLineOrderSimpleType"]], "validate_texttypesimpletype() (ocrd_models.ocrd_page.textregiontype method)": [[40, "ocrd_models.ocrd_page.TextRegionType.validate_TextTypeSimpleType"]], "validate_underlinestylesimpletype() (ocrd_models.ocrd_page.textstyletype method)": [[40, "ocrd_models.ocrd_page.TextStyleType.validate_UnderlineStyleSimpleType"]], "ocrdxmldocument (class in ocrd_models.ocrd_xml_base)": [[41, "ocrd_models.ocrd_xml_base.OcrdXmlDocument"]], "ocrd_models.ocrd_xml_base": [[41, "module-ocrd_models.ocrd_xml_base"]], "to_xml() (ocrd_models.ocrd_xml_base.ocrdxmldocument method)": [[41, "ocrd_models.ocrd_xml_base.OcrdXmlDocument.to_xml"]], "validationreport (class in ocrd_models.report)": [[42, "ocrd_models.report.ValidationReport"]], "add_error() (ocrd_models.report.validationreport method)": [[42, "ocrd_models.report.ValidationReport.add_error"]], "add_notice() (ocrd_models.report.validationreport method)": [[42, "ocrd_models.report.ValidationReport.add_notice"]], "add_warning() (ocrd_models.report.validationreport method)": [[42, "ocrd_models.report.ValidationReport.add_warning"]], "is_valid (ocrd_models.report.validationreport property)": [[42, "ocrd_models.report.ValidationReport.is_valid"]], "merge_report() (ocrd_models.report.validationreport method)": [[42, "ocrd_models.report.ValidationReport.merge_report"]], "ocrd_models.report": [[42, "module-ocrd_models.report"]], "to_xml() (ocrd_models.report.validationreport method)": [[42, "ocrd_models.report.ValidationReport.to_xml"]], "extract_mets_from_oai_content() (in module ocrd_models.utils)": [[43, "ocrd_models.utils.extract_mets_from_oai_content"]], "handle_oai_response() (in module ocrd_models.utils)": [[43, "ocrd_models.utils.handle_oai_response"]], "is_oai_content() (in module ocrd_models.utils)": [[43, "ocrd_models.utils.is_oai_content"]], "ocrd_models.utils": [[43, "module-ocrd_models.utils"]], "xmllint_format() (in module ocrd_models.utils)": [[43, "ocrd_models.utils.xmllint_format"]], "ocrd_network": [[45, "module-ocrd_network"]], "ocrd_network.cli": [[46, "module-ocrd_network.cli"]], "ocrd_network.cli.client": [[47, "module-ocrd_network.cli.client"]], "ocrd_network.cli.processing_server": [[48, "module-ocrd_network.cli.processing_server"]], "ocrd_network.cli.processing_worker": [[49, "module-ocrd_network.cli.processing_worker"]], "ocrd_network.cli.processor_server": [[50, "module-ocrd_network.cli.processor_server"]], "client (class in ocrd_network.client)": [[51, "ocrd_network.client.Client"]], "ocrd_network.client": [[51, "module-ocrd_network.client"]], "send_processing_request() (ocrd_network.client.client method)": [[51, "ocrd_network.client.Client.send_processing_request"]], "verify_server_protocol() (in module ocrd_network.client)": [[51, "ocrd_network.client.verify_server_protocol"]], "db_create_workspace() (in module ocrd_network.database)": [[52, "ocrd_network.database.db_create_workspace"]], "db_get_processing_job() (in module ocrd_network.database)": [[52, "ocrd_network.database.db_get_processing_job"]], "db_get_processing_jobs() (in module ocrd_network.database)": [[52, "ocrd_network.database.db_get_processing_jobs"]], "db_get_workflow_job() (in module ocrd_network.database)": [[52, "ocrd_network.database.db_get_workflow_job"]], "db_get_workspace() (in module ocrd_network.database)": [[52, "ocrd_network.database.db_get_workspace"]], "db_update_processing_job() (in module ocrd_network.database)": [[52, "ocrd_network.database.db_update_processing_job"]], "db_update_workspace() (in module ocrd_network.database)": [[52, "ocrd_network.database.db_update_workspace"]], "initiate_database() (in module ocrd_network.database)": [[52, "ocrd_network.database.initiate_database"]], "ocrd_network.database": [[52, "module-ocrd_network.database"]], "sync_db_get_processing_job() (in module ocrd_network.database)": [[52, "ocrd_network.database.sync_db_get_processing_job"]], "sync_db_get_processing_jobs() (in module ocrd_network.database)": [[52, "ocrd_network.database.sync_db_get_processing_jobs"]], "sync_db_get_workflow_job() (in module ocrd_network.database)": [[52, "ocrd_network.database.sync_db_get_workflow_job"]], "sync_db_get_workspace() (in module ocrd_network.database)": [[52, "ocrd_network.database.sync_db_get_workspace"]], "sync_db_update_processing_job() (in module ocrd_network.database)": [[52, "ocrd_network.database.sync_db_update_processing_job"]], "sync_db_update_workspace() (in module ocrd_network.database)": [[52, "ocrd_network.database.sync_db_update_workspace"]], "sync_initiate_database() (in module ocrd_network.database)": [[52, "ocrd_network.database.sync_initiate_database"]], "deployer (class in ocrd_network.deployer)": [[53, "ocrd_network.deployer.Deployer"]], "deploy_hosts() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.deploy_hosts"]], "deploy_mongodb() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.deploy_mongodb"]], "deploy_rabbitmq() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.deploy_rabbitmq"]], "find_matching_processors() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.find_matching_processors"]], "kill_all() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.kill_all"]], "kill_hosts() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.kill_hosts"]], "kill_mongodb() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.kill_mongodb"]], "kill_processing_workers() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.kill_processing_workers"]], "kill_processor_servers() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.kill_processor_servers"]], "kill_rabbitmq() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.kill_rabbitmq"]], "ocrd_network.deployer": [[53, "module-ocrd_network.deployer"]], "resolve_processor_server_url() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.resolve_processor_server_url"]], "start_docker_processor() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.start_docker_processor"]], "start_native_processor() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.start_native_processor"]], "start_native_processor_server() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.start_native_processor_server"]], "start_unix_mets_server() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.start_unix_mets_server"]], "stop_unix_mets_server() (ocrd_network.deployer.deployer method)": [[53, "ocrd_network.deployer.Deployer.stop_unix_mets_server"]], "docker (ocrd_network.deployment_utils.deploytype attribute)": [[54, "ocrd_network.deployment_utils.DeployType.DOCKER"]], "deploytype (class in ocrd_network.deployment_utils)": [[54, "ocrd_network.deployment_utils.DeployType"]], "native (ocrd_network.deployment_utils.deploytype attribute)": [[54, "ocrd_network.deployment_utils.DeployType.NATIVE"]], "create_docker_client() (in module ocrd_network.deployment_utils)": [[54, "ocrd_network.deployment_utils.create_docker_client"]], "create_ssh_client() (in module ocrd_network.deployment_utils)": [[54, "ocrd_network.deployment_utils.create_ssh_client"]], "ocrd_network.deployment_utils": [[54, "module-ocrd_network.deployment_utils"]], "verify_mongodb_available() (in module ocrd_network.deployment_utils)": [[54, "ocrd_network.deployment_utils.verify_mongodb_available"]], "verify_rabbitmq_available() (in module ocrd_network.deployment_utils)": [[54, "ocrd_network.deployment_utils.verify_rabbitmq_available"]], "get_cache_locked_pages_logging_file_path() (in module ocrd_network.logging)": [[55, "ocrd_network.logging.get_cache_locked_pages_logging_file_path"]], "get_cache_processing_requests_logging_file_path() (in module ocrd_network.logging)": [[55, "ocrd_network.logging.get_cache_processing_requests_logging_file_path"]], "get_mets_server_logging_file_path() (in module ocrd_network.logging)": [[55, "ocrd_network.logging.get_mets_server_logging_file_path"]], "get_processing_job_logging_file_path() (in module ocrd_network.logging)": [[55, "ocrd_network.logging.get_processing_job_logging_file_path"]], "get_processing_server_logging_file_path() (in module ocrd_network.logging)": [[55, "ocrd_network.logging.get_processing_server_logging_file_path"]], "get_processing_worker_logging_file_path() (in module ocrd_network.logging)": [[55, "ocrd_network.logging.get_processing_worker_logging_file_path"]], "get_processor_server_logging_file_path() (in module ocrd_network.logging)": [[55, "ocrd_network.logging.get_processor_server_logging_file_path"]], "get_root_logging_dir() (in module ocrd_network.logging)": [[55, "ocrd_network.logging.get_root_logging_dir"]], "ocrd_network.logging": [[55, "module-ocrd_network.logging"]], "dbprocessorjob (class in ocrd_network.models)": [[56, "ocrd_network.models.DBProcessorJob"]], "dbprocessorjob.settings (class in ocrd_network.models)": [[56, "ocrd_network.models.DBProcessorJob.Settings"]], "dbworkflowjob (class in ocrd_network.models)": [[56, "ocrd_network.models.DBWorkflowJob"]], "dbworkflowjob.settings (class in ocrd_network.models)": [[56, "ocrd_network.models.DBWorkflowJob.Settings"]], "dbworkspace (class in ocrd_network.models)": [[56, "ocrd_network.models.DBWorkspace"]], "dbworkspace.settings (class in ocrd_network.models)": [[56, "ocrd_network.models.DBWorkspace.Settings"]], "pyjobinput (class in ocrd_network.models)": [[56, "ocrd_network.models.PYJobInput"]], "pyjobinput.config (class in ocrd_network.models)": [[56, "ocrd_network.models.PYJobInput.Config"]], "pyjoboutput (class in ocrd_network.models)": [[56, "ocrd_network.models.PYJobOutput"]], "pyocrdtool (class in ocrd_network.models)": [[56, "ocrd_network.models.PYOcrdTool"]], "pyresultmessage (class in ocrd_network.models)": [[56, "ocrd_network.models.PYResultMessage"]], "pyresultmessage.config (class in ocrd_network.models)": [[56, "ocrd_network.models.PYResultMessage.Config"]], "pyworkflowjoboutput (class in ocrd_network.models)": [[56, "ocrd_network.models.PYWorkflowJobOutput"]], "stateenum (class in ocrd_network.models)": [[56, "ocrd_network.models.StateEnum"]], "agent_type (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.agent_type"]], "bag_info_adds (ocrd_network.models.dbworkspace attribute)": [[56, "ocrd_network.models.DBWorkspace.bag_info_adds"]], "bagit_profile_identifier (ocrd_network.models.dbworkspace attribute)": [[56, "ocrd_network.models.DBWorkspace.bagit_profile_identifier"]], "cached (ocrd_network.models.stateenum attribute)": [[56, "ocrd_network.models.StateEnum.cached"]], "callback_url (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.callback_url"]], "callback_url (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.callback_url"]], "cancelled (ocrd_network.models.stateenum attribute)": [[56, "ocrd_network.models.StateEnum.cancelled"]], "categories (ocrd_network.models.pyocrdtool attribute)": [[56, "ocrd_network.models.PYOcrdTool.categories"]], "deleted (ocrd_network.models.dbworkspace attribute)": [[56, "ocrd_network.models.DBWorkspace.deleted"]], "depends_on (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.depends_on"]], "depends_on (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.depends_on"]], "description (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.description"]], "description (ocrd_network.models.dbworkflowjob attribute)": [[56, "ocrd_network.models.DBWorkflowJob.description"]], "description (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.description"]], "description (ocrd_network.models.pyocrdtool attribute)": [[56, "ocrd_network.models.PYOcrdTool.description"]], "description (ocrd_network.models.pyworkflowjoboutput attribute)": [[56, "ocrd_network.models.PYWorkflowJobOutput.description"]], "end_time (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.end_time"]], "exec_time (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.exec_time"]], "executable (ocrd_network.models.pyocrdtool attribute)": [[56, "ocrd_network.models.PYOcrdTool.executable"]], "failed (ocrd_network.models.stateenum attribute)": [[56, "ocrd_network.models.StateEnum.failed"]], "input_file_grp (ocrd_network.models.pyocrdtool attribute)": [[56, "ocrd_network.models.PYOcrdTool.input_file_grp"]], "input_file_grps (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.input_file_grps"]], "input_file_grps (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.input_file_grps"]], "input_file_grps (ocrd_network.models.pyjoboutput attribute)": [[56, "ocrd_network.models.PYJobOutput.input_file_grps"]], "internal_callback_url (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.internal_callback_url"]], "job_id (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.job_id"]], "job_id (ocrd_network.models.dbworkflowjob attribute)": [[56, "ocrd_network.models.DBWorkflowJob.job_id"]], "job_id (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.job_id"]], "job_id (ocrd_network.models.pyjoboutput attribute)": [[56, "ocrd_network.models.PYJobOutput.job_id"]], "job_id (ocrd_network.models.pyresultmessage attribute)": [[56, "ocrd_network.models.PYResultMessage.job_id"]], "job_id (ocrd_network.models.pyworkflowjoboutput attribute)": [[56, "ocrd_network.models.PYWorkflowJobOutput.job_id"]], "log_file_path (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.log_file_path"]], "log_file_path (ocrd_network.models.pyjoboutput attribute)": [[56, "ocrd_network.models.PYJobOutput.log_file_path"]], "mets_server_url (ocrd_network.models.dbworkspace attribute)": [[56, "ocrd_network.models.DBWorkspace.mets_server_url"]], "name (ocrd_network.models.dbworkspace.settings attribute)": [[56, "ocrd_network.models.DBWorkspace.Settings.name"]], "ocrd_base_version_checksum (ocrd_network.models.dbworkspace attribute)": [[56, "ocrd_network.models.DBWorkspace.ocrd_base_version_checksum"]], "ocrd_identifier (ocrd_network.models.dbworkspace attribute)": [[56, "ocrd_network.models.DBWorkspace.ocrd_identifier"]], "ocrd_mets (ocrd_network.models.dbworkspace attribute)": [[56, "ocrd_network.models.DBWorkspace.ocrd_mets"]], "ocrd_network.models": [[56, "module-ocrd_network.models"]], "output_file_grp (ocrd_network.models.pyocrdtool attribute)": [[56, "ocrd_network.models.PYOcrdTool.output_file_grp"]], "output_file_grps (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.output_file_grps"]], "output_file_grps (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.output_file_grps"]], "output_file_grps (ocrd_network.models.pyjoboutput attribute)": [[56, "ocrd_network.models.PYJobOutput.output_file_grps"]], "page_id (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.page_id"]], "page_id (ocrd_network.models.dbworkflowjob attribute)": [[56, "ocrd_network.models.DBWorkflowJob.page_id"]], "page_id (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.page_id"]], "page_id (ocrd_network.models.pyjoboutput attribute)": [[56, "ocrd_network.models.PYJobOutput.page_id"]], "page_id (ocrd_network.models.pyworkflowjoboutput attribute)": [[56, "ocrd_network.models.PYWorkflowJobOutput.page_id"]], "page_wise (ocrd_network.models.dbworkflowjob attribute)": [[56, "ocrd_network.models.DBWorkflowJob.page_wise"]], "page_wise (ocrd_network.models.pyworkflowjoboutput attribute)": [[56, "ocrd_network.models.PYWorkflowJobOutput.page_wise"]], "parameters (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.parameters"]], "parameters (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.parameters"]], "parameters (ocrd_network.models.pyocrdtool attribute)": [[56, "ocrd_network.models.PYOcrdTool.parameters"]], "path_to_mets (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.path_to_mets"]], "path_to_mets (ocrd_network.models.dbworkflowjob attribute)": [[56, "ocrd_network.models.DBWorkflowJob.path_to_mets"]], "path_to_mets (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.path_to_mets"]], "path_to_mets (ocrd_network.models.pyjoboutput attribute)": [[56, "ocrd_network.models.PYJobOutput.path_to_mets"]], "path_to_mets (ocrd_network.models.pyresultmessage attribute)": [[56, "ocrd_network.models.PYResultMessage.path_to_mets"]], "path_to_mets (ocrd_network.models.pyworkflowjoboutput attribute)": [[56, "ocrd_network.models.PYWorkflowJobOutput.path_to_mets"]], "processing_job_ids (ocrd_network.models.dbworkflowjob attribute)": [[56, "ocrd_network.models.DBWorkflowJob.processing_job_ids"]], "processing_job_ids (ocrd_network.models.pyworkflowjoboutput attribute)": [[56, "ocrd_network.models.PYWorkflowJobOutput.processing_job_ids"]], "processor_name (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.processor_name"]], "processor_name (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.processor_name"]], "processor_name (ocrd_network.models.pyjoboutput attribute)": [[56, "ocrd_network.models.PYJobOutput.processor_name"]], "queued (ocrd_network.models.stateenum attribute)": [[56, "ocrd_network.models.StateEnum.queued"]], "result_queue_name (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.result_queue_name"]], "result_queue_name (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.result_queue_name"]], "running (ocrd_network.models.stateenum attribute)": [[56, "ocrd_network.models.StateEnum.running"]], "schema_extra (ocrd_network.models.pyjobinput.config attribute)": [[56, "ocrd_network.models.PYJobInput.Config.schema_extra"]], "schema_extra (ocrd_network.models.pyresultmessage.config attribute)": [[56, "ocrd_network.models.PYResultMessage.Config.schema_extra"]], "start_time (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.start_time"]], "state (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.state"]], "state (ocrd_network.models.pyjoboutput attribute)": [[56, "ocrd_network.models.PYJobOutput.state"]], "state (ocrd_network.models.pyresultmessage attribute)": [[56, "ocrd_network.models.PYResultMessage.state"]], "steps (ocrd_network.models.pyocrdtool attribute)": [[56, "ocrd_network.models.PYOcrdTool.steps"]], "success (ocrd_network.models.stateenum attribute)": [[56, "ocrd_network.models.StateEnum.success"]], "to_job_output() (ocrd_network.models.dbprocessorjob method)": [[56, "ocrd_network.models.DBProcessorJob.to_job_output"]], "to_job_output() (ocrd_network.models.dbworkflowjob method)": [[56, "ocrd_network.models.DBWorkflowJob.to_job_output"]], "use_enum_values (ocrd_network.models.dbprocessorjob.settings attribute)": [[56, "ocrd_network.models.DBProcessorJob.Settings.use_enum_values"]], "use_enum_values (ocrd_network.models.dbworkflowjob.settings attribute)": [[56, "ocrd_network.models.DBWorkflowJob.Settings.use_enum_values"]], "workflow_callback_url (ocrd_network.models.dbworkflowjob attribute)": [[56, "ocrd_network.models.DBWorkflowJob.workflow_callback_url"]], "workspace_id (ocrd_network.models.dbprocessorjob attribute)": [[56, "ocrd_network.models.DBProcessorJob.workspace_id"]], "workspace_id (ocrd_network.models.dbworkflowjob attribute)": [[56, "ocrd_network.models.DBWorkflowJob.workspace_id"]], "workspace_id (ocrd_network.models.dbworkspace attribute)": [[56, "ocrd_network.models.DBWorkspace.workspace_id"]], "workspace_id (ocrd_network.models.pyjobinput attribute)": [[56, "ocrd_network.models.PYJobInput.workspace_id"]], "workspace_id (ocrd_network.models.pyjoboutput attribute)": [[56, "ocrd_network.models.PYJobOutput.workspace_id"]], "workspace_id (ocrd_network.models.pyresultmessage attribute)": [[56, "ocrd_network.models.PYResultMessage.workspace_id"]], "workspace_id (ocrd_network.models.pyworkflowjoboutput attribute)": [[56, "ocrd_network.models.PYWorkflowJobOutput.workspace_id"]], "workspace_mets_path (ocrd_network.models.dbworkspace attribute)": [[56, "ocrd_network.models.DBWorkspace.workspace_mets_path"]], "dbprocessorjob (class in ocrd_network.models.job)": [[57, "ocrd_network.models.job.DBProcessorJob"]], "dbprocessorjob.settings (class in ocrd_network.models.job)": [[57, "ocrd_network.models.job.DBProcessorJob.Settings"]], "dbworkflowjob (class in ocrd_network.models.job)": [[57, "ocrd_network.models.job.DBWorkflowJob"]], "dbworkflowjob.settings (class in ocrd_network.models.job)": [[57, "ocrd_network.models.job.DBWorkflowJob.Settings"]], "pyjobinput (class in ocrd_network.models.job)": [[57, "ocrd_network.models.job.PYJobInput"]], "pyjobinput.config (class in ocrd_network.models.job)": [[57, "ocrd_network.models.job.PYJobInput.Config"]], "pyjoboutput (class in ocrd_network.models.job)": [[57, "ocrd_network.models.job.PYJobOutput"]], "pyworkflowjoboutput (class in ocrd_network.models.job)": [[57, "ocrd_network.models.job.PYWorkflowJobOutput"]], "stateenum (class in ocrd_network.models.job)": [[57, "ocrd_network.models.job.StateEnum"]], "agent_type (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.agent_type"]], "cached (ocrd_network.models.job.stateenum attribute)": [[57, "ocrd_network.models.job.StateEnum.cached"]], "callback_url (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.callback_url"]], "callback_url (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.callback_url"]], "cancelled (ocrd_network.models.job.stateenum attribute)": [[57, "ocrd_network.models.job.StateEnum.cancelled"]], "depends_on (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.depends_on"]], "depends_on (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.depends_on"]], "description (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.description"]], "description (ocrd_network.models.job.dbworkflowjob attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.description"]], "description (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.description"]], "description (ocrd_network.models.job.pyworkflowjoboutput attribute)": [[57, "ocrd_network.models.job.PYWorkflowJobOutput.description"]], "end_time (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.end_time"]], "exec_time (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.exec_time"]], "failed (ocrd_network.models.job.stateenum attribute)": [[57, "ocrd_network.models.job.StateEnum.failed"]], "id (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.id"]], "id (ocrd_network.models.job.dbworkflowjob attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.id"]], "input_file_grps (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.input_file_grps"]], "input_file_grps (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.input_file_grps"]], "input_file_grps (ocrd_network.models.job.pyjoboutput attribute)": [[57, "ocrd_network.models.job.PYJobOutput.input_file_grps"]], "internal_callback_url (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.internal_callback_url"]], "job_id (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.job_id"]], "job_id (ocrd_network.models.job.dbworkflowjob attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.job_id"]], "job_id (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.job_id"]], "job_id (ocrd_network.models.job.pyjoboutput attribute)": [[57, "ocrd_network.models.job.PYJobOutput.job_id"]], "job_id (ocrd_network.models.job.pyworkflowjoboutput attribute)": [[57, "ocrd_network.models.job.PYWorkflowJobOutput.job_id"]], "log_file_path (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.log_file_path"]], "log_file_path (ocrd_network.models.job.pyjoboutput attribute)": [[57, "ocrd_network.models.job.PYJobOutput.log_file_path"]], "ocrd_network.models.job": [[57, "module-ocrd_network.models.job"]], "output_file_grps (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.output_file_grps"]], "output_file_grps (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.output_file_grps"]], "output_file_grps (ocrd_network.models.job.pyjoboutput attribute)": [[57, "ocrd_network.models.job.PYJobOutput.output_file_grps"]], "page_id (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.page_id"]], "page_id (ocrd_network.models.job.dbworkflowjob attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.page_id"]], "page_id (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.page_id"]], "page_id (ocrd_network.models.job.pyjoboutput attribute)": [[57, "ocrd_network.models.job.PYJobOutput.page_id"]], "page_id (ocrd_network.models.job.pyworkflowjoboutput attribute)": [[57, "ocrd_network.models.job.PYWorkflowJobOutput.page_id"]], "page_wise (ocrd_network.models.job.dbworkflowjob attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.page_wise"]], "page_wise (ocrd_network.models.job.pyworkflowjoboutput attribute)": [[57, "ocrd_network.models.job.PYWorkflowJobOutput.page_wise"]], "parameters (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.parameters"]], "parameters (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.parameters"]], "path_to_mets (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.path_to_mets"]], "path_to_mets (ocrd_network.models.job.dbworkflowjob attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.path_to_mets"]], "path_to_mets (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.path_to_mets"]], "path_to_mets (ocrd_network.models.job.pyjoboutput attribute)": [[57, "ocrd_network.models.job.PYJobOutput.path_to_mets"]], "path_to_mets (ocrd_network.models.job.pyworkflowjoboutput attribute)": [[57, "ocrd_network.models.job.PYWorkflowJobOutput.path_to_mets"]], "processing_job_ids (ocrd_network.models.job.dbworkflowjob attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.processing_job_ids"]], "processing_job_ids (ocrd_network.models.job.pyworkflowjoboutput attribute)": [[57, "ocrd_network.models.job.PYWorkflowJobOutput.processing_job_ids"]], "processor_name (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.processor_name"]], "processor_name (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.processor_name"]], "processor_name (ocrd_network.models.job.pyjoboutput attribute)": [[57, "ocrd_network.models.job.PYJobOutput.processor_name"]], "queued (ocrd_network.models.job.stateenum attribute)": [[57, "ocrd_network.models.job.StateEnum.queued"]], "result_queue_name (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.result_queue_name"]], "result_queue_name (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.result_queue_name"]], "revision_id (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.revision_id"]], "revision_id (ocrd_network.models.job.dbworkflowjob attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.revision_id"]], "running (ocrd_network.models.job.stateenum attribute)": [[57, "ocrd_network.models.job.StateEnum.running"]], "schema_extra (ocrd_network.models.job.pyjobinput.config attribute)": [[57, "ocrd_network.models.job.PYJobInput.Config.schema_extra"]], "start_time (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.start_time"]], "state (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.state"]], "state (ocrd_network.models.job.pyjoboutput attribute)": [[57, "ocrd_network.models.job.PYJobOutput.state"]], "success (ocrd_network.models.job.stateenum attribute)": [[57, "ocrd_network.models.job.StateEnum.success"]], "to_job_output() (ocrd_network.models.job.dbprocessorjob method)": [[57, "ocrd_network.models.job.DBProcessorJob.to_job_output"]], "to_job_output() (ocrd_network.models.job.dbworkflowjob method)": [[57, "ocrd_network.models.job.DBWorkflowJob.to_job_output"]], "use_enum_values (ocrd_network.models.job.dbprocessorjob.settings attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.Settings.use_enum_values"]], "use_enum_values (ocrd_network.models.job.dbworkflowjob.settings attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.Settings.use_enum_values"]], "workflow_callback_url (ocrd_network.models.job.dbworkflowjob attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.workflow_callback_url"]], "workspace_id (ocrd_network.models.job.dbprocessorjob attribute)": [[57, "ocrd_network.models.job.DBProcessorJob.workspace_id"]], "workspace_id (ocrd_network.models.job.dbworkflowjob attribute)": [[57, "ocrd_network.models.job.DBWorkflowJob.workspace_id"]], "workspace_id (ocrd_network.models.job.pyjobinput attribute)": [[57, "ocrd_network.models.job.PYJobInput.workspace_id"]], "workspace_id (ocrd_network.models.job.pyjoboutput attribute)": [[57, "ocrd_network.models.job.PYJobOutput.workspace_id"]], "workspace_id (ocrd_network.models.job.pyworkflowjoboutput attribute)": [[57, "ocrd_network.models.job.PYWorkflowJobOutput.workspace_id"]], "pyresultmessage (class in ocrd_network.models.messages)": [[58, "ocrd_network.models.messages.PYResultMessage"]], "pyresultmessage.config (class in ocrd_network.models.messages)": [[58, "ocrd_network.models.messages.PYResultMessage.Config"]], "job_id (ocrd_network.models.messages.pyresultmessage attribute)": [[58, "ocrd_network.models.messages.PYResultMessage.job_id"]], "ocrd_network.models.messages": [[58, "module-ocrd_network.models.messages"]], "path_to_mets (ocrd_network.models.messages.pyresultmessage attribute)": [[58, "ocrd_network.models.messages.PYResultMessage.path_to_mets"]], "schema_extra (ocrd_network.models.messages.pyresultmessage.config attribute)": [[58, "ocrd_network.models.messages.PYResultMessage.Config.schema_extra"]], "state (ocrd_network.models.messages.pyresultmessage attribute)": [[58, "ocrd_network.models.messages.PYResultMessage.state"]], "workspace_id (ocrd_network.models.messages.pyresultmessage attribute)": [[58, "ocrd_network.models.messages.PYResultMessage.workspace_id"]], "pyocrdtool (class in ocrd_network.models.ocrd_tool)": [[59, "ocrd_network.models.ocrd_tool.PYOcrdTool"]], "categories (ocrd_network.models.ocrd_tool.pyocrdtool attribute)": [[59, "ocrd_network.models.ocrd_tool.PYOcrdTool.categories"]], "description (ocrd_network.models.ocrd_tool.pyocrdtool attribute)": [[59, "ocrd_network.models.ocrd_tool.PYOcrdTool.description"]], "executable (ocrd_network.models.ocrd_tool.pyocrdtool attribute)": [[59, "ocrd_network.models.ocrd_tool.PYOcrdTool.executable"]], "input_file_grp (ocrd_network.models.ocrd_tool.pyocrdtool attribute)": [[59, "ocrd_network.models.ocrd_tool.PYOcrdTool.input_file_grp"]], "ocrd_network.models.ocrd_tool": [[59, "module-ocrd_network.models.ocrd_tool"]], "output_file_grp (ocrd_network.models.ocrd_tool.pyocrdtool attribute)": [[59, "ocrd_network.models.ocrd_tool.PYOcrdTool.output_file_grp"]], "parameters (ocrd_network.models.ocrd_tool.pyocrdtool attribute)": [[59, "ocrd_network.models.ocrd_tool.PYOcrdTool.parameters"]], "steps (ocrd_network.models.ocrd_tool.pyocrdtool attribute)": [[59, "ocrd_network.models.ocrd_tool.PYOcrdTool.steps"]], "dbworkspace (class in ocrd_network.models.workspace)": [[60, "ocrd_network.models.workspace.DBWorkspace"]], "dbworkspace.settings (class in ocrd_network.models.workspace)": [[60, "ocrd_network.models.workspace.DBWorkspace.Settings"]], "bag_info_adds (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.bag_info_adds"]], "bagit_profile_identifier (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.bagit_profile_identifier"]], "deleted (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.deleted"]], "id (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.id"]], "mets_server_url (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.mets_server_url"]], "name (ocrd_network.models.workspace.dbworkspace.settings attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.Settings.name"]], "ocrd_base_version_checksum (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.ocrd_base_version_checksum"]], "ocrd_identifier (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.ocrd_identifier"]], "ocrd_mets (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.ocrd_mets"]], "ocrd_network.models.workspace": [[60, "module-ocrd_network.models.workspace"]], "revision_id (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.revision_id"]], "workspace_id (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.workspace_id"]], "workspace_mets_path (ocrd_network.models.workspace.dbworkspace attribute)": [[60, "ocrd_network.models.workspace.DBWorkspace.workspace_mets_path"]], "databaseparamtype (class in ocrd_network.param_validators)": [[61, "ocrd_network.param_validators.DatabaseParamType"]], "queueserverparamtype (class in ocrd_network.param_validators)": [[61, "ocrd_network.param_validators.QueueServerParamType"]], "serveraddressparamtype (class in ocrd_network.param_validators)": [[61, "ocrd_network.param_validators.ServerAddressParamType"]], "convert() (ocrd_network.param_validators.databaseparamtype method)": [[61, "ocrd_network.param_validators.DatabaseParamType.convert"]], "convert() (ocrd_network.param_validators.queueserverparamtype method)": [[61, "ocrd_network.param_validators.QueueServerParamType.convert"]], "convert() (ocrd_network.param_validators.serveraddressparamtype method)": [[61, "ocrd_network.param_validators.ServerAddressParamType.convert"]], "expected_format (ocrd_network.param_validators.serveraddressparamtype attribute)": [[61, "ocrd_network.param_validators.ServerAddressParamType.expected_format"]], "name (ocrd_network.param_validators.databaseparamtype attribute)": [[61, "ocrd_network.param_validators.DatabaseParamType.name"]], "name (ocrd_network.param_validators.queueserverparamtype attribute)": [[61, "ocrd_network.param_validators.QueueServerParamType.name"]], "name (ocrd_network.param_validators.serveraddressparamtype attribute)": [[61, "ocrd_network.param_validators.ServerAddressParamType.name"]], "ocrd_network.param_validators": [[61, "module-ocrd_network.param_validators"]], "invoke_processor() (in module ocrd_network.process_helpers)": [[62, "ocrd_network.process_helpers.invoke_processor"]], "ocrd_network.process_helpers": [[62, "module-ocrd_network.process_helpers"]], "processingserver (class in ocrd_network.processing_server)": [[63, "ocrd_network.processing_server.ProcessingServer"]], "check_if_queue_exists() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.check_if_queue_exists"]], "connect_publisher() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.connect_publisher"]], "create_message_queues() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.create_message_queues"]], "create_processing_message() (ocrd_network.processing_server.processingserver static method)": [[63, "ocrd_network.processing_server.ProcessingServer.create_processing_message"]], "get_processor_info() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.get_processor_info"]], "get_processor_job() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.get_processor_job"]], "get_processor_job_log() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.get_processor_job_log"]], "get_workflow_info() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.get_workflow_info"]], "list_processors() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.list_processors"]], "ocrd_network.processing_server": [[63, "module-ocrd_network.processing_server"]], "on_shutdown() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.on_shutdown"]], "on_startup() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.on_startup"]], "push_processor_job() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.push_processor_job"]], "push_to_processing_queue() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.push_to_processing_queue"]], "push_to_processor_server() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.push_to_processor_server"]], "query_ocrd_tool_json_from_server() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.query_ocrd_tool_json_from_server"]], "remove_from_request_cache() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.remove_from_request_cache"]], "run_workflow() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.run_workflow"]], "start() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.start"]], "stop_deployed_agents() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.stop_deployed_agents"]], "task_sequence_to_processing_jobs() (ocrd_network.processing_server.processingserver method)": [[63, "ocrd_network.processing_server.ProcessingServer.task_sequence_to_processing_jobs"]], "processingworker (class in ocrd_network.processing_worker)": [[64, "ocrd_network.processing_worker.ProcessingWorker"]], "connect_consumer() (ocrd_network.processing_worker.processingworker method)": [[64, "ocrd_network.processing_worker.ProcessingWorker.connect_consumer"]], "connect_publisher() (ocrd_network.processing_worker.processingworker method)": [[64, "ocrd_network.processing_worker.ProcessingWorker.connect_publisher"]], "create_queue() (ocrd_network.processing_worker.processingworker method)": [[64, "ocrd_network.processing_worker.ProcessingWorker.create_queue"]], "ocrd_network.processing_worker": [[64, "module-ocrd_network.processing_worker"]], "on_consumed_message() (ocrd_network.processing_worker.processingworker method)": [[64, "ocrd_network.processing_worker.ProcessingWorker.on_consumed_message"]], "process_message() (ocrd_network.processing_worker.processingworker method)": [[64, "ocrd_network.processing_worker.ProcessingWorker.process_message"]], "publish_to_result_queue() (ocrd_network.processing_worker.processingworker method)": [[64, "ocrd_network.processing_worker.ProcessingWorker.publish_to_result_queue"]], "start_consuming() (ocrd_network.processing_worker.processingworker method)": [[64, "ocrd_network.processing_worker.ProcessingWorker.start_consuming"]], "processorserver (class in ocrd_network.processor_server)": [[65, "ocrd_network.processor_server.ProcessorServer"]], "create_processor_task() (ocrd_network.processor_server.processorserver method)": [[65, "ocrd_network.processor_server.ProcessorServer.create_processor_task"]], "get_ocrd_tool() (ocrd_network.processor_server.processorserver method)": [[65, "ocrd_network.processor_server.ProcessorServer.get_ocrd_tool"]], "get_processor_info() (ocrd_network.processor_server.processorserver method)": [[65, "ocrd_network.processor_server.ProcessorServer.get_processor_info"]], "get_processor_job() (ocrd_network.processor_server.processorserver method)": [[65, "ocrd_network.processor_server.ProcessorServer.get_processor_job"]], "get_processor_job_log() (ocrd_network.processor_server.processorserver method)": [[65, "ocrd_network.processor_server.ProcessorServer.get_processor_job_log"]], "get_version() (ocrd_network.processor_server.processorserver method)": [[65, "ocrd_network.processor_server.ProcessorServer.get_version"]], "ocrd_network.processor_server": [[65, "module-ocrd_network.processor_server"]], "on_shutdown() (ocrd_network.processor_server.processorserver method)": [[65, "ocrd_network.processor_server.ProcessorServer.on_shutdown"]], "on_startup() (ocrd_network.processor_server.processorserver method)": [[65, "ocrd_network.processor_server.ProcessorServer.on_startup"]], "run_processor_task() (ocrd_network.processor_server.processorserver method)": [[65, "ocrd_network.processor_server.ProcessorServer.run_processor_task"]], "run_server() (ocrd_network.processor_server.processorserver method)": [[65, "ocrd_network.processor_server.ProcessorServer.run_server"]], "ocrdprocessingmessage (class in ocrd_network.rabbitmq_utils)": [[66, "ocrd_network.rabbitmq_utils.OcrdProcessingMessage"]], "ocrdresultmessage (class in ocrd_network.rabbitmq_utils)": [[66, "ocrd_network.rabbitmq_utils.OcrdResultMessage"]], "rmqconnector (class in ocrd_network.rabbitmq_utils)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector"]], "rmqconsumer (class in ocrd_network.rabbitmq_utils)": [[66, "ocrd_network.rabbitmq_utils.RMQConsumer"]], "rmqpublisher (class in ocrd_network.rabbitmq_utils)": [[66, "ocrd_network.rabbitmq_utils.RMQPublisher"]], "ack_message() (ocrd_network.rabbitmq_utils.rmqconsumer method)": [[66, "ocrd_network.rabbitmq_utils.RMQConsumer.ack_message"]], "authenticate_and_connect() (ocrd_network.rabbitmq_utils.rmqconsumer method)": [[66, "ocrd_network.rabbitmq_utils.RMQConsumer.authenticate_and_connect"]], "authenticate_and_connect() (ocrd_network.rabbitmq_utils.rmqpublisher method)": [[66, "ocrd_network.rabbitmq_utils.RMQPublisher.authenticate_and_connect"]], "basic_publish() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.basic_publish"]], "configure_consuming() (ocrd_network.rabbitmq_utils.rmqconsumer method)": [[66, "ocrd_network.rabbitmq_utils.RMQConsumer.configure_consuming"]], "confirm_delivery() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.confirm_delivery"]], "create_queue() (ocrd_network.rabbitmq_utils.rmqpublisher method)": [[66, "ocrd_network.rabbitmq_utils.RMQPublisher.create_queue"]], "declare_and_bind_defaults() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.declare_and_bind_defaults"]], "decode_yml() (ocrd_network.rabbitmq_utils.ocrdprocessingmessage static method)": [[66, "ocrd_network.rabbitmq_utils.OcrdProcessingMessage.decode_yml"]], "decode_yml() (ocrd_network.rabbitmq_utils.ocrdresultmessage static method)": [[66, "ocrd_network.rabbitmq_utils.OcrdResultMessage.decode_yml"]], "enable_delivery_confirmations() (ocrd_network.rabbitmq_utils.rmqpublisher method)": [[66, "ocrd_network.rabbitmq_utils.RMQPublisher.enable_delivery_confirmations"]], "encode_yml() (ocrd_network.rabbitmq_utils.ocrdprocessingmessage static method)": [[66, "ocrd_network.rabbitmq_utils.OcrdProcessingMessage.encode_yml"]], "encode_yml() (ocrd_network.rabbitmq_utils.ocrdresultmessage static method)": [[66, "ocrd_network.rabbitmq_utils.OcrdResultMessage.encode_yml"]], "exchange_bind() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.exchange_bind"]], "exchange_declare() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.exchange_declare"]], "exchange_delete() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.exchange_delete"]], "exchange_unbind() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.exchange_unbind"]], "get_one_message() (ocrd_network.rabbitmq_utils.rmqconsumer method)": [[66, "ocrd_network.rabbitmq_utils.RMQConsumer.get_one_message"]], "get_waiting_message_count() (ocrd_network.rabbitmq_utils.rmqconsumer method)": [[66, "ocrd_network.rabbitmq_utils.RMQConsumer.get_waiting_message_count"]], "ocrd_network.rabbitmq_utils": [[66, "module-ocrd_network.rabbitmq_utils"]], "open_blocking_channel() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.open_blocking_channel"]], "open_blocking_connection() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.open_blocking_connection"]], "publish_to_queue() (ocrd_network.rabbitmq_utils.rmqpublisher method)": [[66, "ocrd_network.rabbitmq_utils.RMQPublisher.publish_to_queue"]], "queue_bind() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.queue_bind"]], "queue_declare() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.queue_declare"]], "queue_delete() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.queue_delete"]], "queue_purge() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.queue_purge"]], "queue_unbind() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.queue_unbind"]], "set_qos() (ocrd_network.rabbitmq_utils.rmqconnector static method)": [[66, "ocrd_network.rabbitmq_utils.RMQConnector.set_qos"]], "setup_defaults() (ocrd_network.rabbitmq_utils.rmqconsumer method)": [[66, "ocrd_network.rabbitmq_utils.RMQConsumer.setup_defaults"]], "setup_defaults() (ocrd_network.rabbitmq_utils.rmqpublisher method)": [[66, "ocrd_network.rabbitmq_utils.RMQPublisher.setup_defaults"]], "start_consuming() (ocrd_network.rabbitmq_utils.rmqconsumer method)": [[66, "ocrd_network.rabbitmq_utils.RMQConsumer.start_consuming"]], "rmqconnector (class in ocrd_network.rabbitmq_utils.connector)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector"]], "basic_publish() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.basic_publish"]], "confirm_delivery() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.confirm_delivery"]], "declare_and_bind_defaults() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.declare_and_bind_defaults"]], "exchange_bind() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.exchange_bind"]], "exchange_declare() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.exchange_declare"]], "exchange_delete() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.exchange_delete"]], "exchange_unbind() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.exchange_unbind"]], "ocrd_network.rabbitmq_utils.connector": [[67, "module-ocrd_network.rabbitmq_utils.connector"]], "open_blocking_channel() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.open_blocking_channel"]], "open_blocking_connection() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.open_blocking_connection"]], "queue_bind() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.queue_bind"]], "queue_declare() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.queue_declare"]], "queue_delete() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.queue_delete"]], "queue_purge() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.queue_purge"]], "queue_unbind() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.queue_unbind"]], "set_qos() (ocrd_network.rabbitmq_utils.connector.rmqconnector static method)": [[67, "ocrd_network.rabbitmq_utils.connector.RMQConnector.set_qos"]], "ocrd_network.rabbitmq_utils.constants": [[68, "module-ocrd_network.rabbitmq_utils.constants"]], "rmqconsumer (class in ocrd_network.rabbitmq_utils.consumer)": [[69, "ocrd_network.rabbitmq_utils.consumer.RMQConsumer"]], "ack_message() (ocrd_network.rabbitmq_utils.consumer.rmqconsumer method)": [[69, "ocrd_network.rabbitmq_utils.consumer.RMQConsumer.ack_message"]], "authenticate_and_connect() (ocrd_network.rabbitmq_utils.consumer.rmqconsumer method)": [[69, "ocrd_network.rabbitmq_utils.consumer.RMQConsumer.authenticate_and_connect"]], "configure_consuming() (ocrd_network.rabbitmq_utils.consumer.rmqconsumer method)": [[69, "ocrd_network.rabbitmq_utils.consumer.RMQConsumer.configure_consuming"]], "get_one_message() (ocrd_network.rabbitmq_utils.consumer.rmqconsumer method)": [[69, "ocrd_network.rabbitmq_utils.consumer.RMQConsumer.get_one_message"]], "get_waiting_message_count() (ocrd_network.rabbitmq_utils.consumer.rmqconsumer method)": [[69, "ocrd_network.rabbitmq_utils.consumer.RMQConsumer.get_waiting_message_count"]], "ocrd_network.rabbitmq_utils.consumer": [[69, "module-ocrd_network.rabbitmq_utils.consumer"]], "setup_defaults() (ocrd_network.rabbitmq_utils.consumer.rmqconsumer method)": [[69, "ocrd_network.rabbitmq_utils.consumer.RMQConsumer.setup_defaults"]], "start_consuming() (ocrd_network.rabbitmq_utils.consumer.rmqconsumer method)": [[69, "ocrd_network.rabbitmq_utils.consumer.RMQConsumer.start_consuming"]], "ocrdprocessingmessage (class in ocrd_network.rabbitmq_utils.ocrd_messages)": [[70, "ocrd_network.rabbitmq_utils.ocrd_messages.OcrdProcessingMessage"]], "ocrdresultmessage (class in ocrd_network.rabbitmq_utils.ocrd_messages)": [[70, "ocrd_network.rabbitmq_utils.ocrd_messages.OcrdResultMessage"]], "decode_yml() (ocrd_network.rabbitmq_utils.ocrd_messages.ocrdprocessingmessage static method)": [[70, "ocrd_network.rabbitmq_utils.ocrd_messages.OcrdProcessingMessage.decode_yml"]], "decode_yml() (ocrd_network.rabbitmq_utils.ocrd_messages.ocrdresultmessage static method)": [[70, "ocrd_network.rabbitmq_utils.ocrd_messages.OcrdResultMessage.decode_yml"]], "encode_yml() (ocrd_network.rabbitmq_utils.ocrd_messages.ocrdprocessingmessage static method)": [[70, "ocrd_network.rabbitmq_utils.ocrd_messages.OcrdProcessingMessage.encode_yml"]], "encode_yml() (ocrd_network.rabbitmq_utils.ocrd_messages.ocrdresultmessage static method)": [[70, "ocrd_network.rabbitmq_utils.ocrd_messages.OcrdResultMessage.encode_yml"]], "ocrd_network.rabbitmq_utils.ocrd_messages": [[70, "module-ocrd_network.rabbitmq_utils.ocrd_messages"]], "rmqpublisher (class in ocrd_network.rabbitmq_utils.publisher)": [[71, "ocrd_network.rabbitmq_utils.publisher.RMQPublisher"]], "authenticate_and_connect() (ocrd_network.rabbitmq_utils.publisher.rmqpublisher method)": [[71, "ocrd_network.rabbitmq_utils.publisher.RMQPublisher.authenticate_and_connect"]], "create_queue() (ocrd_network.rabbitmq_utils.publisher.rmqpublisher method)": [[71, "ocrd_network.rabbitmq_utils.publisher.RMQPublisher.create_queue"]], "enable_delivery_confirmations() (ocrd_network.rabbitmq_utils.publisher.rmqpublisher method)": [[71, "ocrd_network.rabbitmq_utils.publisher.RMQPublisher.enable_delivery_confirmations"]], "ocrd_network.rabbitmq_utils.publisher": [[71, "module-ocrd_network.rabbitmq_utils.publisher"]], "publish_to_queue() (ocrd_network.rabbitmq_utils.publisher.rmqpublisher method)": [[71, "ocrd_network.rabbitmq_utils.publisher.RMQPublisher.publish_to_queue"]], "setup_defaults() (ocrd_network.rabbitmq_utils.publisher.rmqpublisher method)": [[71, "ocrd_network.rabbitmq_utils.publisher.RMQPublisher.setup_defaults"]], "datahost (class in ocrd_network.runtime_data)": [[72, "ocrd_network.runtime_data.DataHost"]], "datamongodb (class in ocrd_network.runtime_data)": [[72, "ocrd_network.runtime_data.DataMongoDB"]], "dataprocessingworker (class in ocrd_network.runtime_data)": [[72, "ocrd_network.runtime_data.DataProcessingWorker"]], "dataprocessorserver (class in ocrd_network.runtime_data)": [[72, "ocrd_network.runtime_data.DataProcessorServer"]], "datarabbitmq (class in ocrd_network.runtime_data)": [[72, "ocrd_network.runtime_data.DataRabbitMQ"]], "create_client() (ocrd_network.runtime_data.datahost method)": [[72, "ocrd_network.runtime_data.DataHost.create_client"]], "ocrd_network.runtime_data": [[72, "module-ocrd_network.runtime_data"]], "cachelockedpages (class in ocrd_network.server_cache)": [[73, "ocrd_network.server_cache.CacheLockedPages"]], "cacheprocessingrequests (class in ocrd_network.server_cache)": [[73, "ocrd_network.server_cache.CacheProcessingRequests"]], "cache_request() (ocrd_network.server_cache.cacheprocessingrequests method)": [[73, "ocrd_network.server_cache.CacheProcessingRequests.cache_request"]], "cancel_dependent_jobs() (ocrd_network.server_cache.cacheprocessingrequests method)": [[73, "ocrd_network.server_cache.CacheProcessingRequests.cancel_dependent_jobs"]], "check_if_locked_pages_for_output_file_grps() (ocrd_network.server_cache.cachelockedpages method)": [[73, "ocrd_network.server_cache.CacheLockedPages.check_if_locked_pages_for_output_file_grps"]], "consume_cached_requests() (ocrd_network.server_cache.cacheprocessingrequests method)": [[73, "ocrd_network.server_cache.CacheProcessingRequests.consume_cached_requests"]], "get_locked_pages() (ocrd_network.server_cache.cachelockedpages method)": [[73, "ocrd_network.server_cache.CacheLockedPages.get_locked_pages"]], "has_workspace_cached_requests() (ocrd_network.server_cache.cacheprocessingrequests method)": [[73, "ocrd_network.server_cache.CacheProcessingRequests.has_workspace_cached_requests"]], "is_caching_required() (ocrd_network.server_cache.cacheprocessingrequests method)": [[73, "ocrd_network.server_cache.CacheProcessingRequests.is_caching_required"]], "lock_pages() (ocrd_network.server_cache.cachelockedpages method)": [[73, "ocrd_network.server_cache.CacheLockedPages.lock_pages"]], "ocrd_network.server_cache": [[73, "module-ocrd_network.server_cache"]], "unlock_pages() (ocrd_network.server_cache.cachelockedpages method)": [[73, "ocrd_network.server_cache.CacheLockedPages.unlock_pages"]], "update_request_counter() (ocrd_network.server_cache.cacheprocessingrequests method)": [[73, "ocrd_network.server_cache.CacheProcessingRequests.update_request_counter"]], "expand_page_ids() (in module ocrd_network.server_utils)": [[74, "ocrd_network.server_utils.expand_page_ids"]], "ocrd_network.server_utils": [[74, "module-ocrd_network.server_utils"]], "validate_and_return_mets_path() (in module ocrd_network.server_utils)": [[74, "ocrd_network.server_utils.validate_and_return_mets_path"]], "validate_job_input() (in module ocrd_network.server_utils)": [[74, "ocrd_network.server_utils.validate_job_input"]], "calculate_execution_time() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.calculate_execution_time"]], "call_sync() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.call_sync"]], "download_ocrd_all_tool_json() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.download_ocrd_all_tool_json"]], "generate_created_time() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.generate_created_time"]], "generate_id() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.generate_id"]], "get_ocrd_workspace_instance() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.get_ocrd_workspace_instance"]], "get_ocrd_workspace_physical_pages() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.get_ocrd_workspace_physical_pages"]], "is_mets_server_running() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.is_mets_server_running"]], "ocrd_network.utils": [[75, "module-ocrd_network.utils"]], "post_to_callback_url() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.post_to_callback_url"]], "stop_mets_server() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.stop_mets_server"]], "validate_and_load_config() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.validate_and_load_config"]], "verify_and_parse_mq_uri() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.verify_and_parse_mq_uri"]], "verify_database_uri() (in module ocrd_network.utils)": [[75, "ocrd_network.utils.verify_database_uri"]], "ocrd_utils": [[77, "module-ocrd_utils"]], "ocrdenvconfig (class in ocrd_utils.config)": [[78, "ocrd_utils.config.OcrdEnvConfig"]], "ocrdenvvariable (class in ocrd_utils.config)": [[78, "ocrd_utils.config.OcrdEnvVariable"]], "add() (ocrd_utils.config.ocrdenvconfig method)": [[78, "ocrd_utils.config.OcrdEnvConfig.add"]], "describe() (ocrd_utils.config.ocrdenvconfig method)": [[78, "ocrd_utils.config.OcrdEnvConfig.describe"]], "describe() (ocrd_utils.config.ocrdenvvariable method)": [[78, "ocrd_utils.config.OcrdEnvVariable.describe"]], "has_default() (ocrd_utils.config.ocrdenvconfig method)": [[78, "ocrd_utils.config.OcrdEnvConfig.has_default"]], "is_set() (ocrd_utils.config.ocrdenvconfig method)": [[78, "ocrd_utils.config.OcrdEnvConfig.is_set"]], "ocrd_utils.config": [[78, "module-ocrd_utils.config"]], "raw_value() (ocrd_utils.config.ocrdenvconfig method)": [[78, "ocrd_utils.config.OcrdEnvConfig.raw_value"]], "ocrd_utils.constants": [[79, "module-ocrd_utils.constants"]], "deprecated_alias() (in module ocrd_utils.deprecate)": [[80, "ocrd_utils.deprecate.deprecated_alias"]], "deprecation_warning() (in module ocrd_utils.deprecate)": [[80, "ocrd_utils.deprecate.deprecation_warning"]], "ocrd_utils.deprecate": [[80, "module-ocrd_utils.deprecate"]], "rename_kwargs() (in module ocrd_utils.deprecate)": [[80, "ocrd_utils.deprecate.rename_kwargs"]], "adjust_canvas_to_rotation() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.adjust_canvas_to_rotation"]], "adjust_canvas_to_transposition() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.adjust_canvas_to_transposition"]], "bbox_from_points() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.bbox_from_points"]], "bbox_from_polygon() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.bbox_from_polygon"]], "bbox_from_xywh() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.bbox_from_xywh"]], "coordinates_for_segment() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.coordinates_for_segment"]], "coordinates_of_segment() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.coordinates_of_segment"]], "image_from_polygon() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.image_from_polygon"]], "ocrd_utils.image": [[81, "module-ocrd_utils.image"]], "points_from_bbox() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.points_from_bbox"]], "points_from_polygon() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.points_from_polygon"]], "points_from_x0y0x1y1() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.points_from_x0y0x1y1"]], "points_from_xywh() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.points_from_xywh"]], "points_from_y0x0y1x1() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.points_from_y0x0y1x1"]], "polygon_from_bbox() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.polygon_from_bbox"]], "polygon_from_points() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.polygon_from_points"]], "polygon_from_x0y0x1y1() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.polygon_from_x0y0x1y1"]], "polygon_from_xywh() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.polygon_from_xywh"]], "polygon_mask() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.polygon_mask"]], "rotate_coordinates() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.rotate_coordinates"]], "scale_coordinates() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.scale_coordinates"]], "shift_coordinates() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.shift_coordinates"]], "transform_coordinates() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.transform_coordinates"]], "transpose_coordinates() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.transpose_coordinates"]], "xywh_from_bbox() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.xywh_from_bbox"]], "xywh_from_points() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.xywh_from_points"]], "xywh_from_polygon() (in module ocrd_utils.image)": [[81, "ocrd_utils.image.xywh_from_polygon"]], "freeze_args() (in module ocrd_utils.introspect)": [[82, "ocrd_utils.introspect.freeze_args"]], "membername() (in module ocrd_utils.introspect)": [[82, "ocrd_utils.introspect.membername"]], "ocrd_utils.introspect": [[82, "module-ocrd_utils.introspect"]], "set_json_key_value_overrides() (in module ocrd_utils.introspect)": [[82, "ocrd_utils.introspect.set_json_key_value_overrides"]], "disablelogging() (in module ocrd_utils.logging)": [[83, "ocrd_utils.logging.disableLogging"]], "getlevelname() (in module ocrd_utils.logging)": [[83, "ocrd_utils.logging.getLevelName"]], "getlogger() (in module ocrd_utils.logging)": [[83, "ocrd_utils.logging.getLogger"]], "initlogging() (in module ocrd_utils.logging)": [[83, "ocrd_utils.logging.initLogging"]], "ocrd_utils.logging": [[83, "module-ocrd_utils.logging"]], "setoverrideloglevel() (in module ocrd_utils.logging)": [[83, "ocrd_utils.logging.setOverrideLogLevel"]], "abspath() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.abspath"]], "atomic_write() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.atomic_write"]], "directory_size() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.directory_size"]], "get_moduledir() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.get_moduledir"]], "get_ocrd_tool_json() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.get_ocrd_tool_json"]], "get_processor_resource_types() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.get_processor_resource_types"]], "guess_media_type() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.guess_media_type"]], "is_file_in_directory() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.is_file_in_directory"]], "ocrd_utils.os": [[84, "module-ocrd_utils.os"]], "pushd_popd() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.pushd_popd"]], "redirect_stderr_and_stdout_to_file() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.redirect_stderr_and_stdout_to_file"]], "unzip_file_to_dir() (in module ocrd_utils.os)": [[84, "ocrd_utils.os.unzip_file_to_dir"]], "assert_file_grp_cardinality() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.assert_file_grp_cardinality"]], "concat_padded() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.concat_padded"]], "get_local_filename() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.get_local_filename"]], "is_local_filename() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.is_local_filename"]], "is_string() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.is_string"]], "make_file_id() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.make_file_id"]], "nth_url_segment() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.nth_url_segment"]], "ocrd_utils.str": [[85, "module-ocrd_utils.str"]], "parse_json_string_or_file() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.parse_json_string_or_file"]], "parse_json_string_with_comments() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.parse_json_string_with_comments"]], "remove_non_path_from_url() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.remove_non_path_from_url"]], "safe_filename() (in module ocrd_utils.str)": [[85, "ocrd_utils.str.safe_filename"]], "ocrdnetworkmessagevalidator (class in ocrd_validators)": [[87, "ocrd_validators.OcrdNetworkMessageValidator"]], "ocrdresourcelistvalidator (class in ocrd_validators)": [[87, "ocrd_validators.OcrdResourceListValidator"]], "ocrdtoolvalidator (class in ocrd_validators)": [[87, "ocrd_validators.OcrdToolValidator"]], "ocrdzipvalidator (class in ocrd_validators)": [[87, "ocrd_validators.OcrdZipValidator"]], "pagevalidator (class in ocrd_validators)": [[87, "ocrd_validators.PageValidator"]], "parametervalidator (class in ocrd_validators)": [[87, "ocrd_validators.ParameterValidator"]], "processingserverconfigvalidator (class in ocrd_validators)": [[87, "ocrd_validators.ProcessingServerConfigValidator"]], "workspacevalidator (class in ocrd_validators)": [[87, "ocrd_validators.WorkspaceValidator"]], "xsdmetsvalidator (class in ocrd_validators)": [[87, "ocrd_validators.XsdMetsValidator"]], "xsdpagevalidator (class in ocrd_validators)": [[87, "ocrd_validators.XsdPageValidator"]], "xsdvalidator (class in ocrd_validators)": [[87, "ocrd_validators.XsdValidator"]], "check_file_grp() (ocrd_validators.workspacevalidator static method)": [[87, "ocrd_validators.WorkspaceValidator.check_file_grp"]], "instance() (ocrd_validators.xsdvalidator class method)": [[87, "ocrd_validators.XsdValidator.instance"]], "ocrd_validators": [[87, "module-ocrd_validators"]], "validate() (ocrd_validators.ocrdresourcelistvalidator static method)": [[87, "ocrd_validators.OcrdResourceListValidator.validate"]], "validate() (ocrd_validators.ocrdtoolvalidator static method)": [[87, "ocrd_validators.OcrdToolValidator.validate"]], "validate() (ocrd_validators.ocrdzipvalidator method)": [[87, "ocrd_validators.OcrdZipValidator.validate"]], "validate() (ocrd_validators.pagevalidator static method)": [[87, "ocrd_validators.PageValidator.validate"]], "validate() (ocrd_validators.parametervalidator method)": [[87, "ocrd_validators.ParameterValidator.validate"]], "validate() (ocrd_validators.processingserverconfigvalidator static method)": [[87, "ocrd_validators.ProcessingServerConfigValidator.validate"]], "validate() (ocrd_validators.workspacevalidator static method)": [[87, "ocrd_validators.WorkspaceValidator.validate"]], "validate() (ocrd_validators.xsdmetsvalidator class method)": [[87, "ocrd_validators.XsdMetsValidator.validate"]], "validate() (ocrd_validators.xsdpagevalidator class method)": [[87, "ocrd_validators.XsdPageValidator.validate"]], "validate() (ocrd_validators.xsdvalidator class method)": [[87, "ocrd_validators.XsdValidator.validate"]], "validate_message_processing() (ocrd_validators.ocrdnetworkmessagevalidator static method)": [[87, "ocrd_validators.OcrdNetworkMessageValidator.validate_message_processing"]], "validate_message_result() (ocrd_validators.ocrdnetworkmessagevalidator static method)": [[87, "ocrd_validators.OcrdNetworkMessageValidator.validate_message_result"]], "ocrd_validators.constants": [[88, "module-ocrd_validators.constants"]], "jsonvalidator (class in ocrd_validators.json_validator)": [[89, "ocrd_validators.json_validator.JsonValidator"]], "extend_with_default() (in module ocrd_validators.json_validator)": [[89, "ocrd_validators.json_validator.extend_with_default"]], "ocrd_validators.json_validator": [[89, "module-ocrd_validators.json_validator"]], "validate() (ocrd_validators.json_validator.jsonvalidator static method)": [[89, "ocrd_validators.json_validator.JsonValidator.validate"]], "ocrdnetworkmessagevalidator (class in ocrd_validators.ocrd_network_message_validator)": [[90, "ocrd_validators.ocrd_network_message_validator.OcrdNetworkMessageValidator"]], "ocrd_validators.ocrd_network_message_validator": [[90, "module-ocrd_validators.ocrd_network_message_validator"]], "validate_message_processing() (ocrd_validators.ocrd_network_message_validator.ocrdnetworkmessagevalidator static method)": [[90, "ocrd_validators.ocrd_network_message_validator.OcrdNetworkMessageValidator.validate_message_processing"]], "validate_message_result() (ocrd_validators.ocrd_network_message_validator.ocrdnetworkmessagevalidator static method)": [[90, "ocrd_validators.ocrd_network_message_validator.OcrdNetworkMessageValidator.validate_message_result"]], "ocrdtoolvalidator (class in ocrd_validators.ocrd_tool_validator)": [[91, "ocrd_validators.ocrd_tool_validator.OcrdToolValidator"]], "ocrd_validators.ocrd_tool_validator": [[91, "module-ocrd_validators.ocrd_tool_validator"]], "validate() (ocrd_validators.ocrd_tool_validator.ocrdtoolvalidator static method)": [[91, "ocrd_validators.ocrd_tool_validator.OcrdToolValidator.validate"]], "ocrdzipvalidator (class in ocrd_validators.ocrd_zip_validator)": [[92, "ocrd_validators.ocrd_zip_validator.OcrdZipValidator"]], "ocrd_validators.ocrd_zip_validator": [[92, "module-ocrd_validators.ocrd_zip_validator"]], "validate() (ocrd_validators.ocrd_zip_validator.ocrdzipvalidator method)": [[92, "ocrd_validators.ocrd_zip_validator.OcrdZipValidator.validate"]], "consistencyerror": [[93, "ocrd_validators.page_validator.ConsistencyError"]], "coordinateconsistencyerror": [[93, "ocrd_validators.page_validator.CoordinateConsistencyError"]], "coordinatevalidityerror": [[93, "ocrd_validators.page_validator.CoordinateValidityError"]], "pagevalidator (class in ocrd_validators.page_validator)": [[93, "ocrd_validators.page_validator.PageValidator"]], "compare_without_whitespace() (in module ocrd_validators.page_validator)": [[93, "ocrd_validators.page_validator.compare_without_whitespace"]], "concatenate() (in module ocrd_validators.page_validator)": [[93, "ocrd_validators.page_validator.concatenate"]], "get_text() (in module ocrd_validators.page_validator)": [[93, "ocrd_validators.page_validator.get_text"]], "make_line() (in module ocrd_validators.page_validator)": [[93, "ocrd_validators.page_validator.make_line"]], "make_poly() (in module ocrd_validators.page_validator)": [[93, "ocrd_validators.page_validator.make_poly"]], "ocrd_validators.page_validator": [[93, "module-ocrd_validators.page_validator"]], "page_get_reading_order() (in module ocrd_validators.page_validator)": [[93, "ocrd_validators.page_validator.page_get_reading_order"]], "set_text() (in module ocrd_validators.page_validator)": [[93, "ocrd_validators.page_validator.set_text"]], "validate() (ocrd_validators.page_validator.pagevalidator static method)": [[93, "ocrd_validators.page_validator.PageValidator.validate"]], "validate_consistency() (in module ocrd_validators.page_validator)": [[93, "ocrd_validators.page_validator.validate_consistency"]], "parametervalidator (class in ocrd_validators.parameter_validator)": [[94, "ocrd_validators.parameter_validator.ParameterValidator"]], "ocrd_validators.parameter_validator": [[94, "module-ocrd_validators.parameter_validator"]], "validate() (ocrd_validators.parameter_validator.parametervalidator method)": [[94, "ocrd_validators.parameter_validator.ParameterValidator.validate"]], "processingserverconfigvalidator (class in ocrd_validators.processing_server_config_validator)": [[95, "ocrd_validators.processing_server_config_validator.ProcessingServerConfigValidator"]], "ocrd_validators.processing_server_config_validator": [[95, "module-ocrd_validators.processing_server_config_validator"]], "validate() (ocrd_validators.processing_server_config_validator.processingserverconfigvalidator static method)": [[95, "ocrd_validators.processing_server_config_validator.ProcessingServerConfigValidator.validate"]], "ocrdresourcelistvalidator (class in ocrd_validators.resource_list_validator)": [[96, "ocrd_validators.resource_list_validator.OcrdResourceListValidator"]], "ocrd_validators.resource_list_validator": [[96, "module-ocrd_validators.resource_list_validator"]], "validate() (ocrd_validators.resource_list_validator.ocrdresourcelistvalidator static method)": [[96, "ocrd_validators.resource_list_validator.OcrdResourceListValidator.validate"]], "workspacevalidator (class in ocrd_validators.workspace_validator)": [[97, "ocrd_validators.workspace_validator.WorkspaceValidator"]], "check_file_grp() (ocrd_validators.workspace_validator.workspacevalidator static method)": [[97, "ocrd_validators.workspace_validator.WorkspaceValidator.check_file_grp"]], "ocrd_validators.workspace_validator": [[97, "module-ocrd_validators.workspace_validator"]], "validate() (ocrd_validators.workspace_validator.workspacevalidator static method)": [[97, "ocrd_validators.workspace_validator.WorkspaceValidator.validate"]], "xsdmetsvalidator (class in ocrd_validators.xsd_mets_validator)": [[98, "ocrd_validators.xsd_mets_validator.XsdMetsValidator"]], "ocrd_validators.xsd_mets_validator": [[98, "module-ocrd_validators.xsd_mets_validator"]], "validate() (ocrd_validators.xsd_mets_validator.xsdmetsvalidator class method)": [[98, "ocrd_validators.xsd_mets_validator.XsdMetsValidator.validate"]], "xsdpagevalidator (class in ocrd_validators.xsd_page_validator)": [[99, "ocrd_validators.xsd_page_validator.XsdPageValidator"]], "ocrd_validators.xsd_page_validator": [[99, "module-ocrd_validators.xsd_page_validator"]], "validate() (ocrd_validators.xsd_page_validator.xsdpagevalidator class method)": [[99, "ocrd_validators.xsd_page_validator.XsdPageValidator.validate"]], "xsdvalidator (class in ocrd_validators.xsd_validator)": [[100, "ocrd_validators.xsd_validator.XsdValidator"]], "instance() (ocrd_validators.xsd_validator.xsdvalidator class method)": [[100, "ocrd_validators.xsd_validator.XsdValidator.instance"]], "ocrd_validators.xsd_validator": [[100, "module-ocrd_validators.xsd_validator"]], "validate() (ocrd_validators.xsd_validator.xsdvalidator class method)": [[100, "ocrd_validators.xsd_validator.XsdValidator.validate"]]}}) \ No newline at end of file