ocrd 3.5.1__py3-none-any.whl → 3.7.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. ocrd/cli/__init__.py +8 -6
  2. ocrd/cli/bashlib.py +8 -114
  3. ocrd/cli/network.py +0 -2
  4. ocrd/cli/ocrd_tool.py +26 -4
  5. ocrd/cli/process.py +1 -0
  6. ocrd/cli/resmgr.py +0 -1
  7. ocrd/cli/validate.py +32 -13
  8. ocrd/cli/workspace.py +125 -52
  9. ocrd/cli/zip.py +13 -4
  10. ocrd/decorators/__init__.py +28 -52
  11. ocrd/decorators/loglevel_option.py +4 -0
  12. ocrd/decorators/mets_find_options.py +2 -1
  13. ocrd/decorators/ocrd_cli_options.py +3 -7
  14. ocrd/decorators/parameter_option.py +12 -11
  15. ocrd/mets_server.py +11 -15
  16. ocrd/processor/base.py +88 -71
  17. ocrd/processor/builtin/dummy_processor.py +7 -4
  18. ocrd/processor/builtin/filter_processor.py +3 -2
  19. ocrd/processor/helpers.py +5 -6
  20. ocrd/processor/ocrd_page_result.py +7 -5
  21. ocrd/resolver.py +42 -32
  22. ocrd/task_sequence.py +11 -4
  23. ocrd/workspace.py +64 -54
  24. ocrd/workspace_backup.py +3 -0
  25. ocrd/workspace_bagger.py +15 -8
  26. {ocrd-3.5.1.dist-info → ocrd-3.7.0.dist-info}/METADATA +2 -8
  27. ocrd-3.7.0.dist-info/RECORD +123 -0
  28. ocrd_modelfactory/__init__.py +4 -2
  29. ocrd_models/constants.py +18 -1
  30. ocrd_models/ocrd_agent.py +1 -1
  31. ocrd_models/ocrd_exif.py +7 -3
  32. ocrd_models/ocrd_file.py +24 -19
  33. ocrd_models/ocrd_mets.py +90 -67
  34. ocrd_models/ocrd_page.py +17 -13
  35. ocrd_models/ocrd_xml_base.py +1 -0
  36. ocrd_models/report.py +2 -1
  37. ocrd_models/utils.py +4 -3
  38. ocrd_models/xpath_functions.py +3 -1
  39. ocrd_network/__init__.py +1 -2
  40. ocrd_network/cli/__init__.py +0 -2
  41. ocrd_network/cli/client.py +122 -50
  42. ocrd_network/cli/processing_server.py +1 -2
  43. ocrd_network/client.py +2 -2
  44. ocrd_network/client_utils.py +30 -13
  45. ocrd_network/constants.py +1 -6
  46. ocrd_network/database.py +3 -3
  47. ocrd_network/logging_utils.py +2 -7
  48. ocrd_network/models/__init__.py +0 -2
  49. ocrd_network/models/job.py +31 -33
  50. ocrd_network/models/messages.py +3 -2
  51. ocrd_network/models/workspace.py +5 -5
  52. ocrd_network/process_helpers.py +54 -17
  53. ocrd_network/processing_server.py +63 -114
  54. ocrd_network/processing_worker.py +6 -5
  55. ocrd_network/rabbitmq_utils/__init__.py +2 -0
  56. ocrd_network/rabbitmq_utils/helpers.py +24 -7
  57. ocrd_network/runtime_data/__init__.py +1 -2
  58. ocrd_network/runtime_data/deployer.py +12 -85
  59. ocrd_network/runtime_data/hosts.py +61 -130
  60. ocrd_network/runtime_data/network_agents.py +7 -31
  61. ocrd_network/runtime_data/network_services.py +1 -1
  62. ocrd_network/server_cache.py +1 -1
  63. ocrd_network/server_utils.py +13 -52
  64. ocrd_network/utils.py +1 -0
  65. ocrd_utils/__init__.py +4 -4
  66. ocrd_utils/config.py +86 -76
  67. ocrd_utils/deprecate.py +3 -0
  68. ocrd_utils/image.py +51 -23
  69. ocrd_utils/introspect.py +8 -3
  70. ocrd_utils/logging.py +15 -7
  71. ocrd_utils/os.py +17 -4
  72. ocrd_utils/str.py +32 -16
  73. ocrd_validators/json_validator.py +4 -1
  74. ocrd_validators/ocrd_tool_validator.py +2 -1
  75. ocrd_validators/ocrd_zip_validator.py +5 -4
  76. ocrd_validators/page_validator.py +21 -9
  77. ocrd_validators/parameter_validator.py +3 -2
  78. ocrd_validators/processing_server_config.schema.yml +1 -33
  79. ocrd_validators/resource_list_validator.py +3 -1
  80. ocrd_validators/workspace_validator.py +30 -20
  81. ocrd_validators/xsd_mets_validator.py +2 -1
  82. ocrd_validators/xsd_page_validator.py +2 -1
  83. ocrd_validators/xsd_validator.py +4 -2
  84. ocrd/cli/log.py +0 -51
  85. ocrd/lib.bash +0 -317
  86. ocrd-3.5.1.dist-info/RECORD +0 -128
  87. ocrd_network/cli/processor_server.py +0 -31
  88. ocrd_network/models/ocrd_tool.py +0 -12
  89. ocrd_network/processor_server.py +0 -255
  90. {ocrd-3.5.1.dist-info → ocrd-3.7.0.dist-info}/LICENSE +0 -0
  91. {ocrd-3.5.1.dist-info → ocrd-3.7.0.dist-info}/WHEEL +0 -0
  92. {ocrd-3.5.1.dist-info → ocrd-3.7.0.dist-info}/entry_points.txt +0 -0
  93. {ocrd-3.5.1.dist-info → ocrd-3.7.0.dist-info}/top_level.txt +0 -0
@@ -9,6 +9,7 @@ from ocrd_models import ValidationReport
9
9
 
10
10
  from .constants import XSD_PATHS
11
11
 
12
+
12
13
  #
13
14
  # -------------------------------------------------
14
15
  #
@@ -35,7 +36,7 @@ class XsdValidator():
35
36
  doc (etree.ElementTree|str|bytes):
36
37
  schema_url (str): URI of XML schema to validate against.
37
38
  """
38
- return cls.instance(schema_url)._validate(doc) # pylint: disable=protected-access
39
+ return cls.instance(schema_url)._validate(doc) # pylint: disable=protected-access
39
40
 
40
41
  def __init__(self, schema_url):
41
42
  """
@@ -55,7 +56,8 @@ class XsdValidator():
55
56
  Do the actual validation.
56
57
 
57
58
  Arguments:
58
- doc (etree.ElementTree|str|bytes|pathlib.Path): the document. if etree: us as-is. if str/bytes: parse as XML string. If Path: read_text on it
59
+ doc (etree.ElementTree|str|bytes|pathlib.Path): the document.
60
+ (If etree: us as-is. If str/bytes: parse as XML string. If Path: read_text on it.)
59
61
 
60
62
  Returns: ValidationReport
61
63
  """
ocrd/cli/log.py DELETED
@@ -1,51 +0,0 @@
1
- """
2
- OCR-D CLI: Logging
3
-
4
- .. click:: ocrd.cli.log:log_cli
5
- :prog: ocrd log
6
- :nested: full
7
- """
8
- import click
9
- from ocrd_utils import initLogging, getLogger, getLevelName
10
- import logging
11
-
12
- class LogCtx():
13
-
14
- def __init__(self, name):
15
- self.name = name
16
-
17
- def log(self, lvl, *args, **kwargs):
18
- logger = getLogger(self.name)
19
- logger.log(getLevelName(lvl), *args, **kwargs)
20
-
21
- pass_log = click.make_pass_decorator(LogCtx)
22
-
23
- @click.group("log")
24
- @click.option('-n', '--name', envvar='OCRD_TOOL_NAME', default='log_cli', metavar='LOGGER_NAME', help='Name of the logger', show_default=True)
25
- @click.pass_context
26
- def log_cli(ctx, name, *args, **kwargs):
27
- """
28
- Logging
29
-
30
- Logger name will be ocrd.OCRD_TOOL_NAME where OCRD_TOOL_NAME is normally
31
- (when using bashlib) the name of the processor.
32
- """
33
- initLogging()
34
- ctx.obj = LogCtx('ocrd.' + name)
35
-
36
- def _bind_log_command(lvl):
37
- @click.argument('msgs', nargs=-1)
38
- @pass_log
39
- def _log_wrapper(ctx, msgs):
40
- if not msgs:
41
- ctx.log(lvl.upper(), '')
42
- elif len(msgs) == 1 and msgs[0] == '-':
43
- for stdin_line in click.get_text_stream('stdin'):
44
- ctx.log(lvl.upper(), stdin_line.rstrip('\n'))
45
- else:
46
- msg = list(msgs) if '%s' in msgs[0] else ' '.join([x.replace('%', '%%') for x in msgs])
47
- ctx.log(lvl.upper(), msg)
48
- return _log_wrapper
49
-
50
- for _lvl in ['trace', 'debug', 'info', 'warning', 'error', 'critical']:
51
- log_cli.command(_lvl, help="Log a %s message" % _lvl.upper())(_bind_log_command(_lvl))
ocrd/lib.bash DELETED
@@ -1,317 +0,0 @@
1
- ((BASH_VERSINFO<4 || BASH_VERSINFO==4 && BASH_VERSINFO[1]<4)) && \
2
- echo >&2 "bash $BASH_VERSION is too old. Please install bash 4.4 or newer." && \
3
- exit 1
4
-
5
- ## ### `ocrd__raise`
6
- ##
7
- ## Raise an error and exit.
8
- ocrd__raise () {
9
- echo >&2 "ERROR: $1"; exit 127
10
- }
11
-
12
- ## ### `ocrd__log`
13
- ##
14
- ## Delegate logging to `ocrd log`
15
- ocrd__log () {
16
- local log_level="${ocrd__argv[log_level]:-}"
17
- if [[ -n "$log_level" ]];then
18
- ocrd -l "$log_level" log "$@"
19
- else
20
- ocrd log "$@"
21
- fi
22
- }
23
-
24
-
25
- ## ### `ocrd__minversion`
26
- ##
27
- ## Ensure minimum version
28
- # ht https://stackoverflow.com/posts/4025065
29
- ocrd__minversion () {
30
- set -e
31
- local minversion_raw="$1"
32
- local version_raw=$(ocrd --version|sed 's/ocrd, version //')
33
- local version_mmp=$(echo "$version_raw" | grep -Eo '([0-9]+\.?){3}')
34
- local version_prerelease_suffix="${version_raw#$version_mmp}"
35
- if [[ -z $version_prerelease_suffix ]];then
36
- version_prerelease_suffix=0
37
- fi
38
- local minversion_mmp=$(echo "$minversion_raw" | grep -Eo '([0-9]+\.?){3}')
39
- local minversion_prerelease_suffix="${minversion_raw#$minversion_mmp}"
40
- if [[ -z $minversion_prerelease_suffix ]];then
41
- minversion_prerelease_suffix=0
42
- fi
43
- local IFS='.'
44
- version=($version_mmp)
45
- minversion=($minversion_mmp)
46
- # MAJOR > MAJOR
47
- if (( ${version[0]} > ${minversion[0]} ));then
48
- return
49
- # MAJOR == MAJOR
50
- elif (( ${version[0]} == ${minversion[0]} ));then
51
- # MINOR > MINOR
52
- if (( ${version[1]} > ${minversion[1]} ));then
53
- return
54
- # MINOR == MINOR
55
- elif (( ${version[1]} == ${minversion[1]} ));then
56
- # PATCH > PATCH
57
- if (( ${version[2]} > ${minversion[2]} ));then
58
- return
59
- elif (( ${version[2]} == ${minversion[2]}));then
60
- # Match prerelease suffix like a1, b1 alphabetically
61
- if [ "$version_prerelease_suffix" = "$minversion_prerelease_suffix" -o "$version_prerelease_suffix" \> "$minversion_prerelease_suffix" ]; then
62
- return
63
- fi
64
- fi
65
- fi
66
- fi
67
- ocrd__raise "ocrd/core is too old ($version_raw < $minversion_raw). Please update OCR-D/core"
68
- }
69
-
70
- ## ### `ocrd__dumpjson`
71
- ##
72
- ## Output ocrd-tool.json.
73
- ##
74
- ## Requires `$OCRD_TOOL_JSON` and `$OCRD_TOOL_NAME` to be set:
75
- ##
76
- ## ```sh
77
- ## export OCRD_TOOL_JSON=/path/to/ocrd-tool.json
78
- ## export OCRD_TOOL_NAME=ocrd-foo-bar
79
- ## ```
80
- ##
81
- ocrd__dumpjson () {
82
- ocrd ocrd-tool "$OCRD_TOOL_JSON" tool "$OCRD_TOOL_NAME" dump
83
- }
84
-
85
- ##
86
- ## Output file resource path.
87
- ##
88
- ocrd__resolve_resource () {
89
- ocrd ocrd-tool "$OCRD_TOOL_JSON" tool "$OCRD_TOOL_NAME" resolve-resource "$1"
90
- }
91
-
92
- ##
93
- ## Output file resource content.
94
- ##
95
- ocrd__show_resource () {
96
- ocrd ocrd-tool "$OCRD_TOOL_JSON" tool "$OCRD_TOOL_NAME" show-resource "$1"
97
- }
98
-
99
- ##
100
- ## Output file resources names.
101
- ##
102
- ocrd__list_resources () {
103
- ocrd ocrd-tool "$OCRD_TOOL_JSON" tool "$OCRD_TOOL_NAME" list-resources
104
- }
105
-
106
- ## ### `ocrd__usage`
107
- ##
108
- ## Print usage
109
- ##
110
- ocrd__usage () {
111
- declare -a _args=(ocrd-tool "$OCRD_TOOL_JSON" tool "$OCRD_TOOL_NAME" help)
112
- if [ -v ocrd__subcommand ];then
113
- _args+=($ocrd__subcommand)
114
- fi
115
- ocrd ${_args[@]}
116
- }
117
-
118
- ## ### `ocrd__parse_argv`
119
- ##
120
- ## Expects an associative array ("hash"/"dict") `ocrd__argv` to be defined:
121
- ##
122
- ## ```sh
123
- ## declare -A ocrd__argv=()
124
- ## ```
125
- ocrd__parse_argv () {
126
- set -e
127
-
128
- # if [[ -n "$ZSH_VERSION" ]];then
129
- # print -r -- ${+ocrd__argv} ${(t)ocrd__argv}
130
- # fi
131
- if ! declare -p "ocrd__argv" >/dev/null 2>/dev/null ;then
132
- ocrd__raise "Must set \$ocrd__argv (declare -A ocrd__argv)"
133
- fi
134
-
135
- if ! declare -p "params" >/dev/null 2>/dev/null ;then
136
- ocrd__raise "Must set \$params (declare -A params)"
137
- fi
138
-
139
- if ! declare -p "params_json" >/dev/null 2>/dev/null ;then
140
- ocrd__raise "Must set \$params_json (declare params_json)"
141
- fi
142
-
143
- if [[ $# = 0 ]];then
144
- ocrd__usage
145
- exit 1
146
- fi
147
-
148
- ocrd__argv[debug]=false
149
- ocrd__argv[overwrite]=false
150
- ocrd__argv[profile]=false
151
- ocrd__argv[profile_file]=
152
- ocrd__argv[mets_server_url]=
153
- ocrd__argv[mets_file]="$PWD/mets.xml"
154
-
155
- local __parameters=()
156
- local __parameter_overrides=()
157
-
158
- if [[ $1 == 'worker' || $1 == 'server' ]];then
159
- ocrd__subcommand="$1" ; shift ;
160
- fi
161
-
162
- while [[ "${1:-}" = -* ]];do
163
- case "$1" in
164
- -l|--log-level) ocrd__argv[log_level]=$2 ; shift ;;
165
- --log-filename) exec 2> "$2" ; shift ;;
166
- -h|--help|--usage) ocrd__usage; exit ;;
167
- -J|--dump-json) ocrd__dumpjson; exit ;;
168
- -D|--dump-module-dir) echo $(dirname "$OCRD_TOOL_JSON"); exit ;;
169
- -C|--show-resource) ocrd__show_resource "$2"; exit ;;
170
- -L|--list-resources) ocrd__list_resources; exit ;;
171
- -p|--parameter) __parameters+=(-p "$(ocrd__resolve_resource "$2" 2>/dev/null || echo "$2")") ; shift ;;
172
- -P|--parameter-override) __parameter_overrides+=(-P "$2" "$3") ; shift ; shift ;;
173
- -g|--page-id) ocrd__argv[page_id]=$2 ; shift ;;
174
- -O|--output-file-grp) ocrd__argv[output_file_grp]=$2 ; shift ;;
175
- -I|--input-file-grp) ocrd__argv[input_file_grp]=$2 ; shift ;;
176
- -w|--working-dir) ocrd__argv[working_dir]=$(realpath "$2") ; shift ;;
177
- -m|--mets) ocrd__argv[mets_file]=$(realpath "$2") ; shift ;;
178
- -U|--mets-server-url) ocrd__argv[mets_server_url]="$2" ; shift ;;
179
- --debug) ocrd__argv[debug]=true ;;
180
- --overwrite) ocrd__argv[overwrite]=true ;;
181
- --profile) ocrd__argv[profile]=true ;;
182
- --profile-file) ocrd__argv[profile_file]=$(realpath "$2") ; shift ;;
183
- -V|--version) ocrd ocrd-tool "$OCRD_TOOL_JSON" version; exit ;;
184
- --queue) ocrd__worker_queue="$2" ; shift ;;
185
- --database) ocrd__worker_database="$2" ; shift ;;
186
- --address) ocrd__worker_address="$2" ; shift ;;
187
- *) ocrd__raise "Unknown option '$1'" ;;
188
- esac
189
- shift
190
- done
191
-
192
- if [ -v ocrd__worker_queue -o -v ocrd__worker_database -o -v ocrd__subcommand -o -v ocrd__worker_address ]; then
193
- if ! [ -v ocrd__subcommand ] ; then
194
- ocrd__raise "Provide subcommand 'worker' or 'server' for Processing Worker / Processor Server"
195
- elif ! [ -v ocrd__worker_database ]; then
196
- ocrd__raise "For the Processing Worker / Processor Server --database is required"
197
- fi
198
- if [ ${ocrd__subcommand} = "worker" ]; then
199
- if ! [ -v ocrd__worker_queue ]; then
200
- ocrd__raise "For the Processing Worker --queue is required"
201
- fi
202
- ocrd network processing-worker $OCRD_TOOL_NAME --queue "${ocrd__worker_queue}" --database "${ocrd__worker_database}"
203
- elif [ ${ocrd__subcommand} = "server" ]; then
204
- if ! [ -v ocrd__worker_address ]; then
205
- ocrd__raise "For the Processor Server --address is required"
206
- fi
207
- ocrd network processor-server $OCRD_TOOL_NAME --database "${ocrd__worker_database}" --address "${ocrd__worker_address}"
208
- else
209
- ocrd__raise "subcommand must be either 'worker' or 'server' not '${ocrd__subcommand}'"
210
- fi
211
- exit
212
- fi
213
-
214
- if [[ ! -e "${ocrd__argv[mets_file]}" ]]; then
215
- ocrd__raise "METS file '${ocrd__argv[mets_file]}' not found"
216
- fi
217
-
218
- if [[ ! -d "${ocrd__argv[working_dir]:=$(dirname "${ocrd__argv[mets_file]}")}" ]]; then
219
- ocrd__raise "workdir '${ocrd__argv[working_dir]}' not a directory. Use -w/--working-dir to set correctly"
220
- fi
221
-
222
- if [[ ! "${ocrd__argv[log_level]:=INFO}" =~ OFF|ERROR|WARN|INFO|DEBUG|TRACE ]]; then
223
- ocrd__raise "log level '${ocrd__argv[log_level]}' is invalid"
224
- fi
225
-
226
- if [[ -z "${ocrd__argv[input_file_grp]:=}" ]]; then
227
- ocrd__raise "Provide --input-file-grp/-I explicitly!"
228
- fi
229
-
230
- if [[ -z "${ocrd__argv[output_file_grp]:=}" ]]; then
231
- ocrd__raise "Provide --output-file-grp/-O explicitly!"
232
- fi
233
-
234
- # enable profiling (to be extended/acted upon by caller)
235
- if [[ ${ocrd__argv[profile]} = true ]]; then
236
- if [[ -n "${ocrd__argv[profile_file]}" ]]; then
237
- exec 3> "${ocrd__argv[profile_file]}"
238
- else
239
- exec 3>&2
240
- fi
241
- BASH_XTRACEFD=3
242
- # just the builtin tracer (without timing):
243
- #set -x
244
- # our own (including timing):
245
- DEPTH=+++++++++++
246
- shopt -s extdebug
247
- showtime() { date "+${DEPTH:0:$BASH_SUBSHELL+1} %H:%M:%S $BASH_COMMAND" >&3; }
248
- declare +t showtime # no trace here
249
- trap showtime DEBUG
250
- fi
251
-
252
- # check parameters
253
- local params_parsed retval
254
- params_parsed="$(ocrd ocrd-tool "$OCRD_TOOL_JSON" tool $OCRD_TOOL_NAME parse-params "${__parameters[@]}" "${__parameter_overrides[@]}")" || {
255
- retval=$?
256
- ocrd__raise "Failed to parse parameters (retval $retval):
257
- $params_parsed"
258
- }
259
- eval "$params_parsed"
260
- params_json="$(ocrd ocrd-tool "$OCRD_TOOL_JSON" tool $OCRD_TOOL_NAME parse-params --json "${__parameters[@]}" "${__parameter_overrides[@]}")"
261
-
262
- }
263
-
264
- ocrd__wrap () {
265
- set -e
266
-
267
- declare -gx OCRD_TOOL_JSON="$1"
268
- declare -gx OCRD_TOOL_NAME="$2"
269
- shift
270
- shift
271
- declare -Agx params
272
- params=()
273
- declare -g params_json
274
- declare -Agx ocrd__argv
275
- ocrd__argv=()
276
-
277
- if ! which "ocrd" >/dev/null 2>/dev/null;then
278
- ocrd__raise "ocrd not in \$PATH"
279
- fi
280
-
281
- if ! declare -p "OCRD_TOOL_JSON" >/dev/null 2>/dev/null;then
282
- ocrd__raise "Must set \$OCRD_TOOL_JSON"
283
- elif [[ ! -r "$OCRD_TOOL_JSON" ]];then
284
- ocrd__raise "Cannot read \$OCRD_TOOL_JSON: '$OCRD_TOOL_JSON'"
285
- fi
286
-
287
- if [[ -z "$OCRD_TOOL_NAME" ]];then
288
- ocrd__raise "Must set \$OCRD_TOOL_NAME"
289
- elif ! ocrd ocrd-tool "$OCRD_TOOL_JSON" list-tools|grep -q "$OCRD_TOOL_NAME";then
290
- ocrd__raise "No such command \$OCRD_TOOL_NAME: $OCRD_TOOL_NAME"
291
- fi
292
-
293
- ocrd__parse_argv "$@"
294
-
295
- declare -ag ocrd__files
296
- IFS=$'\n'
297
- ocrd__files=( $(ocrd bashlib input-files \
298
- --ocrd-tool $OCRD_TOOL_JSON \
299
- --executable $OCRD_TOOL_NAME \
300
- $(if [[ ${ocrd__argv[debug]} = true ]]; then echo --debug; fi) \
301
- $(if [[ ${ocrd__argv[overwrite]} = true ]]; then echo --overwrite; fi) \
302
- -m "${ocrd__argv[mets_file]}" \
303
- -d "${ocrd__argv[working_dir]}" \
304
- ${ocrd__argv[mets_server_url]:+-U} ${ocrd__argv[mets_server_url]:-} \
305
- -p "$params_json" \
306
- -I "${ocrd__argv[input_file_grp]}" \
307
- -O "${ocrd__argv[output_file_grp]}" \
308
- ${ocrd__argv[page_id]:+-g} ${ocrd__argv[page_id]:-}) )
309
- IFS=$' \t\n'
310
- }
311
-
312
- ## usage: pageId=$(ocrd__input_file 3 pageId)
313
- ocrd__input_file() {
314
- declare -A input_file
315
- eval input_file=( "${ocrd__files[$1]}" )
316
- eval echo "${input_file[$2]}"
317
- }
@@ -1,128 +0,0 @@
1
- ocrd/__init__.py,sha256=ZswMVmlqFhAEIzMR3my6IKPq9XLH21aDPC_m_8Jh4dA,1076
2
- ocrd/constants.py,sha256=6dn3mG54WqHsKInmLZp4kJjNqqPtBoFoSuLUuRbOps0,740
3
- ocrd/lib.bash,sha256=le6XqAOEacdjP3JNSlPkxwRH1y0oVjNQM2tX5d6QFO4,10901
4
- ocrd/mets_server.py,sha256=o01N5vAdPeu-xCgngcMRQm0bzBOhn_IFMV0AbeXDu9g,22491
5
- ocrd/ocrd-all-tool.json,sha256=EYXmMzP68p3KzL8nUZ16TCX2chQzKkAeISvuXqI_yIw,2094
6
- ocrd/resolver.py,sha256=A7BrZlUGrfJye-etaEuT-fdJFgvQcCxWovjufT-WmRY,15119
7
- ocrd/resource_list.yml,sha256=82-PiqkZnka1kTj3MQqNn4wXWKHHtoFchsQuetWuqFs,2633
8
- ocrd/resource_manager.py,sha256=kIWDoKxWH4IJE1gcoTcCRQjYjieCqiQclyuyF6Y9b8A,16813
9
- ocrd/task_sequence.py,sha256=spiaUQaMM7M8WdBDoQGmLuTPm7tOugYXD6rcJ2UXzxw,6991
10
- ocrd/workspace.py,sha256=eLuGSJtOh3y2miKgcF8219YH1RkAaEi-qwXHarz8O8k,64916
11
- ocrd/workspace_backup.py,sha256=iab_JjZ_mMP-G8NIUk4PZmfpNlQuGRoqc3NbTSSew1w,3621
12
- ocrd/workspace_bagger.py,sha256=yU8H3xR5WmQKvgQewac71ie-DUWcfLnMS01D55zsEHQ,11971
13
- ocrd/cli/__init__.py,sha256=LpQb8ne1nzAq2j52lGWDTZlBCmrLwUsz17PTwJkWNcU,2884
14
- ocrd/cli/bashlib.py,sha256=ypFBM3-IULz_IEBx0Y04eGt9VbQWwEWm4ujm9g_hPWY,6009
15
- ocrd/cli/log.py,sha256=6_FrVmTKIIVNUaNLkuOJx8pvPhensHMuayJ0PA7T-XA,1562
16
- ocrd/cli/network.py,sha256=oWBHFEURxfUdb_t-F4svP_ri7o5mqBoNQnLZLbsZLTA,602
17
- ocrd/cli/ocrd_tool.py,sha256=MLTqbtBCw8wBSScv2S4_xp5Jyz5fwD7BzUJxI9R4TBw,7653
18
- ocrd/cli/process.py,sha256=8KD0i7LT01H9u5CC1vktYMEVpS67da_rp_09_EOECmw,1233
19
- ocrd/cli/resmgr.py,sha256=mk8KZweC_7ENAFnC6FvFf7Zv_W1wqJTmk0EMd9XSvf4,10132
20
- ocrd/cli/validate.py,sha256=nvageDaHCETcE71X5lu7i_4JKpgo9MrvJKinVPLYUTI,5727
21
- ocrd/cli/workspace.py,sha256=t40r3tnzz0VivhmT0HSeA5-2xdvUleRYvniqLIBGoWs,40501
22
- ocrd/cli/zip.py,sha256=MMJLw3OXWiJVfVtrdJcBkbB8vA1IzSautluazZRuCQ0,5910
23
- ocrd/decorators/__init__.py,sha256=n2Lb1WLXGlvPrhNTSGZYRqugpa__MZSWV546EmQnTtc,7678
24
- ocrd/decorators/loglevel_option.py,sha256=tgipROEu3t4hkwWvFssd80k2SbTBwBIC4WNE6Gc-XAg,798
25
- ocrd/decorators/mets_find_options.py,sha256=d4oATKMP6bFQHNqOK6nLqgUiWF2FYdkPvzkTVRMYpKo,635
26
- ocrd/decorators/ocrd_cli_options.py,sha256=psS7u42mXTOWIXQd9kcrgW7kDnFURHbmZ0946aqBz3A,2659
27
- ocrd/decorators/parameter_option.py,sha256=n8hYw7XVTd3i3tvpK8F1Jx_CqRp6EGF9qJVH95yj92Q,1076
28
- ocrd/processor/__init__.py,sha256=39ymNwYRdc-b_OJzzKmWCvo2ga3KdsGSYDHE1Hzkn_w,274
29
- ocrd/processor/base.py,sha256=_h0V5FevEPLb1q0zGtShuKXRj_tOWhD0M7_ufn34MPc,60476
30
- ocrd/processor/helpers.py,sha256=WFdC5zeB8F7T0FkpJwfTqWsSPNRtBCBUmFLgixw-rYs,10999
31
- ocrd/processor/ocrd_page_result.py,sha256=eDkpyVHcpaBzTHXiGrcNk9PP9Xr-XZru2w_uoX_ZeNA,510
32
- ocrd/processor/builtin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- ocrd/processor/builtin/dummy_processor.py,sha256=a-4kKJ1JeXQuBIyyN8w2R3s7ov-wAfyEdEz3nxrf0sU,3479
34
- ocrd/processor/builtin/filter_processor.py,sha256=nDnXjo2tDCjodURb8VlB4VJtRwWGx261jH7AG91edSk,4317
35
- ocrd/processor/builtin/dummy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- ocrd/processor/builtin/dummy/ocrd-tool.json,sha256=NgMAXN1AQpGk4Ss73ThDY4QyFPKhj54qcrdeCGwTb10,2339
37
- ocrd_modelfactory/__init__.py,sha256=NyJT1uSvmeEwibRFOkh0AEoVnYfP0mzxU--pP23B-TQ,4404
38
- ocrd_models/__init__.py,sha256=A0aj0mOraNb-xfiUueACdoaqISnp0qH-F49nTJg2vCs,380
39
- ocrd_models/constants.py,sha256=z5XAFMgz3pttMJOHVzTWNZr3ZqMjonVIDmXk3GQTJ30,6954
40
- ocrd_models/mets-empty.xml,sha256=dFixfbxSXrgjZx9BfdIKWHX-khNmp7dNYaFe2qQSwCY,1203
41
- ocrd_models/ocrd_agent.py,sha256=E9OtDhz9UfKb6ou2qvsuCL9NlO1V6zMb0s8nVq8dVos,5609
42
- ocrd_models/ocrd_exif.py,sha256=wRSprHxCy9LCXw41Fi9kp-CbFc5NFX9ZFIFNszB41qk,4585
43
- ocrd_models/ocrd_file.py,sha256=7lyHezuNnl2FEYV1lV35-QTCrgYAL-3wO2ulFUNq2Ak,9717
44
- ocrd_models/ocrd_mets.py,sha256=FHZnztf1cfWim_sAtTVFXt2ZuQx2HVDTQ1xIobIVIeQ,50540
45
- ocrd_models/ocrd_page.py,sha256=TTCnvpKGyZx1dqH8LnDiVVVPjU6emWGVLO_4o9rQHtw,6233
46
- ocrd_models/ocrd_page_generateds.py,sha256=IWoN3V-v3C4JgyPaFh9OQC87ob__wUP1Q6ELBxhLA1w,841794
47
- ocrd_models/ocrd_xml_base.py,sha256=OW57mXLlwm1nH8CNefvXmwLRws9KL9zSrb-3vH--mX8,1641
48
- ocrd_models/report.py,sha256=luZxvzAAQyGYOlRNSJQUIUIANG81iGmBW5ag-uXxKCA,2026
49
- ocrd_models/utils.py,sha256=0_WHf5NEn1WC8MKJc6X_RK8gW-70Z09_mslkKOj7uF8,2369
50
- ocrd_models/xpath_functions.py,sha256=AwR8tHf56-mmIksnw_GeOQ760sxNHqK92T7z9OfsEEs,1437
51
- ocrd_network/__init__.py,sha256=gMejC614J5PPGgXDKBiQS0jt-Jx8qOrLbWH7zt8x8Gs,374
52
- ocrd_network/client.py,sha256=rzqtamZ8krRRy-QTO-AeWH8Lr3HhRiQe2R1-Lovd40g,3020
53
- ocrd_network/client_utils.py,sha256=VVZMNBgGznh41exZ78S48X3DDwHcWTuOq-LNdxjRvak,5002
54
- ocrd_network/constants.py,sha256=AAcE6zZQNcNp2oqPD6oIgoVLSs4IHTkg8AS92WCQ6Xo,1968
55
- ocrd_network/database.py,sha256=fcft7vdRDoR7vmPL1xNYTIeOg5DwRPcggwYDYxLy5ik,10706
56
- ocrd_network/logging_utils.py,sha256=ijWpM8B943Jx6F0NeK3ggni0198UYjM5NCkYpARLk_E,2472
57
- ocrd_network/param_validators.py,sha256=Jl1VwiPPKJ50k-xEHLdvW-1QDOkJHCiMz4k9Ipqm-Uc,1489
58
- ocrd_network/process_helpers.py,sha256=KpkInXsa5bgrxvTOouyMJ0NgJhaz0J9Gjs5sZHBcH64,2373
59
- ocrd_network/processing_server.py,sha256=qBiYk4wgTLqhHvbmDWu_F626BfSfyvkoCD-i0ZwsBSE,42109
60
- ocrd_network/processing_worker.py,sha256=fhIvmDQAYOkHYtUs5IB8Jk2lOKUTIBk3DskAsFloijA,12591
61
- ocrd_network/processor_server.py,sha256=2CD9TlinXk6x1jFjP5VWOXgJe8lAQdxc9zjZuVy3EOw,9931
62
- ocrd_network/server_cache.py,sha256=LpvJ-_Lbaeo4M3t8rZDdm9DAErZr8lDlma6pYc0m7aQ,13149
63
- ocrd_network/server_utils.py,sha256=Uge5F2VagPAEpcyU_Qf8AiecObIGXE0ilD8DaK7bTdE,12222
64
- ocrd_network/tcp_to_uds_mets_proxy.py,sha256=yRW-O6ihd31gf7xqQBIBb_ZQQgqisMyOdRI216ehq_A,3160
65
- ocrd_network/utils.py,sha256=XzPXeSPCVjWLQM540PCpxfJ5hqjJ85_OQBjnf9HlDtE,6759
66
- ocrd_network/cli/__init__.py,sha256=F7YVqxw-9glz6-ghG0Kp5XXeV1-rL1emVSXLCWxdTF0,306
67
- ocrd_network/cli/client.py,sha256=gFEXjz-d074CpvimqaM4kJRbJVNYRAOK-jsUl2EAUVs,8424
68
- ocrd_network/cli/processing_server.py,sha256=rAci6RsHlZ0c87GuLdfdCQCiGNcDEu4NEEQiwKJqVUo,796
69
- ocrd_network/cli/processing_worker.py,sha256=ZuaCkbKV_WKJV7cGOjZ6RLrjjppymnwNCiznFMlclAg,1897
70
- ocrd_network/cli/processor_server.py,sha256=Vto7UekFo_g83aHqwDmhge9bhPzk0b7O-L46dSfIpJc,1259
71
- ocrd_network/models/__init__.py,sha256=AcpZrenygOudMi47Wfr1UCrpbghq2gP8aMAKodgEIFM,527
72
- ocrd_network/models/job.py,sha256=2-E1cKfdTC3Y5AUemCLz1a_t7BlT8BNF6teAC0f8J5o,4442
73
- ocrd_network/models/messages.py,sha256=XnyLMX77NchgmtKJRtqtBFsk_sCR4OGEuWm_d3uDkj8,657
74
- ocrd_network/models/ocrd_tool.py,sha256=WhxSwDyEXtF03Cu8u2tLZcYM0tCacL4PX1GveAxnWEc,293
75
- ocrd_network/models/workflow.py,sha256=GL8q7RX9fGdXG3iVyJpCeLXbWa-2qI_SIxqhzxs9VK8,189
76
- ocrd_network/models/workspace.py,sha256=42G8RoS0wJ902LHyM09NIaqHoRdmP-Oib3d5I07sTBQ,1579
77
- ocrd_network/rabbitmq_utils/__init__.py,sha256=8MRawAiSpZ9IQUBcLAS7sYOzNC9sI11eZOLk7k92_ZQ,691
78
- ocrd_network/rabbitmq_utils/connector.py,sha256=N6mzjIf5FkVIno3FI1AksZY4F5jMUAm8baay0nXZx8w,11343
79
- ocrd_network/rabbitmq_utils/constants.py,sha256=Zu_dKJASfrgnIvEZZlFX9uDR9y6w7zy0KhW7gP7wHDE,1063
80
- ocrd_network/rabbitmq_utils/consumer.py,sha256=3WeryDmo0dSD9U0eLODbDElscvhEYjNeCBIewQHYfws,2488
81
- ocrd_network/rabbitmq_utils/helpers.py,sha256=y8FTC1ml_IBNcFo14GgCNtNRxYDotQn7U14HmTkv6h0,4874
82
- ocrd_network/rabbitmq_utils/ocrd_messages.py,sha256=wwzfMWbXmOFo_nd32_XySCso91_Ul-aGm_GhGncNxD4,4419
83
- ocrd_network/rabbitmq_utils/publisher.py,sha256=mw4XQQhRE1xUQVgEUseyG845iIgVO-9GdGwNH6nUFms,2433
84
- ocrd_network/runtime_data/__init__.py,sha256=3jYkmT4mxMUcpbDaSw7Ld0KTedGEx_5vUQPDjwUyJZc,367
85
- ocrd_network/runtime_data/config_parser.py,sha256=Vr0FbsqmsoiuhDgZ7KFdeFZj9JvUulcOS2PCRFQQNHY,2364
86
- ocrd_network/runtime_data/connection_clients.py,sha256=DZyAvkNyMaIddGJs56s2pMP_fK-XWAtICxk1cjvkWYM,4207
87
- ocrd_network/runtime_data/deployer.py,sha256=LkDUG0uJf_V4SteiOM3EWwhKtdANCjmAOEAJJDshN30,9111
88
- ocrd_network/runtime_data/hosts.py,sha256=ml19ptzH4TFofyJR-Qp_Mn3sZUFbWoNe__rRXZSj_WE,12185
89
- ocrd_network/runtime_data/network_agents.py,sha256=5p_zKLqECBIHLw-Ya6eKcKSZcUM4ESiipEIphVxHBEA,5192
90
- ocrd_network/runtime_data/network_services.py,sha256=xrPpFUU_Pa-XzGe2FEt5RmO17xqykIUmTr_9g6S7XSs,7892
91
- ocrd_utils/__init__.py,sha256=U_zAQJwxg_aJ4CR84CKMNAUP6Cob8Er8Ikj42JmnUKo,5977
92
- ocrd_utils/config.py,sha256=PGRnqrDT7lWJCd9ezoAEBJ5CyVJfFnvCEPTLjtKduOQ,12143
93
- ocrd_utils/constants.py,sha256=ImbG1d8t2MW3uuFi-mN6aY90Zn74liAKZBKlfuKN86w,3278
94
- ocrd_utils/deprecate.py,sha256=4i50sZsA3Eevqn5D-SL5yGf9KEZfGCV4A5Anzn1GRMs,1026
95
- ocrd_utils/image.py,sha256=zNNX1cnRy6yvrxx8mnYQiqWraAh5-i4a1AOfCCg4SmI,24781
96
- ocrd_utils/introspect.py,sha256=gfBlmeEFuRmRUSgdSK0jOxRpYqDRXl2IAE6gv2MZ6as,1977
97
- ocrd_utils/logging.py,sha256=XYTL7DxUvdX4V56jhAYH6PkhjMFOmaa0kf_XkhSTTe0,7816
98
- ocrd_utils/ocrd_logging.conf,sha256=JlWmA_5vg6HnjPGjTC4mA5vFHqmnEinwllSTiOw5CCo,3473
99
- ocrd_utils/os.py,sha256=tMjikpVXJ8sCgYBOrgjgT3vlR2Pok39nSKysYc6mUQ4,9863
100
- ocrd_utils/str.py,sha256=cRgqYILDGOAqWr0qrCrV52I3y4wvpwDVtnBGEUjXNS4,10116
101
- ocrd_validators/__init__.py,sha256=ZFc-UqRVBk9o1YesZFmr9lOepttNJ_NKx1Zdb7g_YsU,972
102
- ocrd_validators/bagit-profile.yml,sha256=sdQJlSi7TOn1E9WYMOZ1shewJ-i_nPaKmsAFkh28TGY,1011
103
- ocrd_validators/constants.py,sha256=FLP57T3F39weka_XovG40RgVMW1GunnbK04QRQ9tmlE,1802
104
- ocrd_validators/json_validator.py,sha256=jkVYwBtXwoubcNbLFWy8kC-DRqdf-9ryoqEf5HHi3Ds,2651
105
- ocrd_validators/message_processing.schema.yml,sha256=HL7o96-7ejslVMXcp16sbo5IjfUcW0wH8rPXHXdTyyA,1947
106
- ocrd_validators/message_result.schema.yml,sha256=G6vt_JgIU7OGSaHj-2Jna6KWQ3bFWol5tnBArWEiVjM,681
107
- ocrd_validators/mets.xsd,sha256=0Wrs9bObn0n-yEEIWyguIcUUuuP6KMEjD4I_p1_UlwY,138290
108
- ocrd_validators/ocrd_network_message_validator.py,sha256=oafNWOjieBmTHFfYeCtyFFpW1gI0lDT6ycRr5Kvmfq0,561
109
- ocrd_validators/ocrd_tool.schema.yml,sha256=BQkRIRDbn9B8gFeVxz_EpNdleh_x2dCtIpJEC4HqFHw,10125
110
- ocrd_validators/ocrd_tool_validator.py,sha256=CvfUHC0vJsPnmFBNf4ndQMXX6pcERCjJMAWk2L-T_ww,747
111
- ocrd_validators/ocrd_zip_validator.py,sha256=udAImFFliJY3y1FcKwZ52rhpjYB2Iv491hWDxdet8w0,3685
112
- ocrd_validators/page.xsd,sha256=abQ8C3gRLPMFm8lH62aTCfvTIWI23TpgEDcaW9YCt7I,85770
113
- ocrd_validators/page_validator.py,sha256=0fI278TLTsrw6htcwk7d9WkTFcbHNip87VMS2uw4Bzc,21765
114
- ocrd_validators/parameter_validator.py,sha256=_5Y3IS24Sf_xHBkB3TE3jB9VTCbbjWO8bSwcQDP0ewI,1365
115
- ocrd_validators/processing_server_config.schema.yml,sha256=8NQbhSshm1exTvbdYiu694rZZ-Xe70_vQtsJ0nd7ZCM,5432
116
- ocrd_validators/processing_server_config_validator.py,sha256=lQ2-ZxsvbFki_SvE_N4_1ptBnBHcwOTJ5grtL2G9F8A,810
117
- ocrd_validators/resource_list_validator.py,sha256=cFMj0n_x-tjhuNUpjgEvPP8iPVm7lme9TWAaqATasV0,776
118
- ocrd_validators/workspace_validator.py,sha256=JNPsRVPgQI0vsaxcs_c3qj22GagdZcgO3v9u3sbBbBI,20340
119
- ocrd_validators/xlink.xsd,sha256=8fW7YAMWXN2PbB_MMvj9H5ZeFoEBDzuYBtlGC8_6ijw,3180
120
- ocrd_validators/xsd_mets_validator.py,sha256=4GWfLyqkmca0x7osDuXuExYuM0HWVrKoqn0S35sFhHU,467
121
- ocrd_validators/xsd_page_validator.py,sha256=BNz_9u-Ek4UCeyZu3KxSQoolfW9lvuaSR9nIu1XXxeE,467
122
- ocrd_validators/xsd_validator.py,sha256=6HrVAf6SzCvfUIuQdIzz9bOq4V-zhyii9yrUPoK2Uvo,2094
123
- ocrd-3.5.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
124
- ocrd-3.5.1.dist-info/METADATA,sha256=C1ZDvXXY6GXMDEhQlxejMBUdG0rXAmupfX2cTMs9Mp0,10523
125
- ocrd-3.5.1.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
126
- ocrd-3.5.1.dist-info/entry_points.txt,sha256=4hcJ2LkK_OlIabHnKgFit35Ap7b5Lz1Gb4hzkxV0Kiw,152
127
- ocrd-3.5.1.dist-info/top_level.txt,sha256=pUgiN42t4KXC5rvpi6V8atza31XP4SCznXpXlVlvomM,75
128
- ocrd-3.5.1.dist-info/RECORD,,
@@ -1,31 +0,0 @@
1
- import click
2
- from ocrd_network import DatabaseParamType, ProcessorServer, ServerAddressParamType
3
-
4
-
5
- @click.command('processor-server')
6
- @click.argument('processor_name', required=True, type=click.STRING)
7
- @click.option('-a', '--address',
8
- help='The URL of the processor server, format: host:port',
9
- type=ServerAddressParamType(),
10
- required=True)
11
- @click.option('-d', '--database',
12
- default="mongodb://localhost:27018",
13
- help='The URL of the MongoDB, format: mongodb://host:port',
14
- type=DatabaseParamType(),
15
- required=True)
16
- def processor_server_cli(processor_name: str, address: str, database: str):
17
- """
18
- Start Processor Server
19
- (standalone REST API OCR-D processor)
20
- """
21
- try:
22
- # Note, the address is already validated with the type field
23
- host, port = address.split(':')
24
- processor_server = ProcessorServer(
25
- mongodb_addr=database,
26
- processor_name=processor_name,
27
- processor_class=None # For readability purposes assigned here
28
- )
29
- processor_server.run_server(host=host, port=int(port))
30
- except Exception as e:
31
- raise Exception("Processor server has failed with error") from e
@@ -1,12 +0,0 @@
1
- from pydantic import BaseModel
2
- from typing import List, Optional
3
-
4
-
5
- class PYOcrdTool(BaseModel):
6
- executable: str
7
- categories: List[str]
8
- description: str
9
- input_file_grp: List[str]
10
- output_file_grp: Optional[List[str]]
11
- steps: List[str]
12
- parameters: Optional[dict] = None