ocrd 3.0.0b7__py3-none-any.whl → 3.0.2__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 (35) hide show
  1. ocrd/cli/__init__.py +3 -1
  2. ocrd/decorators/__init__.py +3 -2
  3. ocrd/decorators/ocrd_cli_options.py +5 -5
  4. ocrd/mets_server.py +62 -42
  5. ocrd/processor/base.py +8 -7
  6. ocrd/processor/builtin/dummy/ocrd-tool.json +20 -0
  7. ocrd/processor/builtin/dummy_processor.py +0 -3
  8. ocrd/processor/builtin/filter_processor.py +108 -0
  9. ocrd/resource_manager.py +4 -0
  10. ocrd/workspace.py +0 -2
  11. {ocrd-3.0.0b7.dist-info → ocrd-3.0.2.dist-info}/METADATA +7 -6
  12. {ocrd-3.0.0b7.dist-info → ocrd-3.0.2.dist-info}/RECORD +34 -33
  13. {ocrd-3.0.0b7.dist-info → ocrd-3.0.2.dist-info}/WHEEL +1 -1
  14. {ocrd-3.0.0b7.dist-info → ocrd-3.0.2.dist-info}/entry_points.txt +1 -0
  15. ocrd_modelfactory/__init__.py +7 -1
  16. ocrd_models/ocrd_exif.py +2 -2
  17. ocrd_models/ocrd_page.py +22 -3
  18. ocrd_models/ocrd_page_generateds.py +2813 -1438
  19. ocrd_models/xpath_functions.py +51 -0
  20. ocrd_network/cli/client.py +28 -9
  21. ocrd_network/client.py +9 -6
  22. ocrd_network/client_utils.py +25 -14
  23. ocrd_network/processing_server.py +27 -15
  24. ocrd_network/processing_worker.py +7 -4
  25. ocrd_network/processor_server.py +2 -1
  26. ocrd_network/rabbitmq_utils/connector.py +2 -2
  27. ocrd_network/runtime_data/deployer.py +28 -18
  28. ocrd_network/server_cache.py +26 -23
  29. ocrd_network/server_utils.py +40 -4
  30. ocrd_network/tcp_to_uds_mets_proxy.py +8 -5
  31. ocrd_network/utils.py +19 -15
  32. ocrd_utils/config.py +39 -17
  33. ocrd/processor/concurrent.py +0 -909
  34. {ocrd-3.0.0b7.dist-info → ocrd-3.0.2.dist-info}/LICENSE +0 -0
  35. {ocrd-3.0.0b7.dist-info → ocrd-3.0.2.dist-info}/top_level.txt +0 -0
@@ -1,16 +1,16 @@
1
1
  ocrd/__init__.py,sha256=ZswMVmlqFhAEIzMR3my6IKPq9XLH21aDPC_m_8Jh4dA,1076
2
2
  ocrd/constants.py,sha256=6dn3mG54WqHsKInmLZp4kJjNqqPtBoFoSuLUuRbOps0,740
3
3
  ocrd/lib.bash,sha256=le6XqAOEacdjP3JNSlPkxwRH1y0oVjNQM2tX5d6QFO4,10901
4
- ocrd/mets_server.py,sha256=U62eih1_O_N0StunVFkEustFs2PlrcMzccraj6_QRk4,21295
4
+ ocrd/mets_server.py,sha256=wiOvSSYZMicjQC958dD2i7uHMwfZCaDZQd7E5l50ayU,22436
5
5
  ocrd/ocrd-all-tool.json,sha256=9bX2VYnUwhTAzAvKaoT77BFzbgBGgyIt7qBqARpwWNc,586
6
6
  ocrd/resolver.py,sha256=Ba9ALQbTXz6_mla4VqN9tAfHoj6aKuNJAU4tIDnjcHE,14952
7
7
  ocrd/resource_list.yml,sha256=82-PiqkZnka1kTj3MQqNn4wXWKHHtoFchsQuetWuqFs,2633
8
- ocrd/resource_manager.py,sha256=8BMVKJq8J56hugi8vtGn9Ffuk7oRkbs197aG74aKbCY,16733
8
+ ocrd/resource_manager.py,sha256=kIWDoKxWH4IJE1gcoTcCRQjYjieCqiQclyuyF6Y9b8A,16813
9
9
  ocrd/task_sequence.py,sha256=spiaUQaMM7M8WdBDoQGmLuTPm7tOugYXD6rcJ2UXzxw,6991
10
- ocrd/workspace.py,sha256=cedqK7es2i2nwQCiUiVyWk3j4-nH7bsi6TF7v8siTio,65794
10
+ ocrd/workspace.py,sha256=-j3X83K0f4vtd5jwfu6_R53RJ2R8gt1HYpyrv8YP2bg,65661
11
11
  ocrd/workspace_backup.py,sha256=iab_JjZ_mMP-G8NIUk4PZmfpNlQuGRoqc3NbTSSew1w,3621
12
12
  ocrd/workspace_bagger.py,sha256=yU8H3xR5WmQKvgQewac71ie-DUWcfLnMS01D55zsEHQ,11971
13
- ocrd/cli/__init__.py,sha256=lNR6wMf7JhQ8Jf33tUkowJr0mB3423OMY0_6dkMRLvU,2672
13
+ ocrd/cli/__init__.py,sha256=-BiwIakeCkWx0Jd2yX9_ahfdV4VKz_5yqGEJ_2zKakQ,2734
14
14
  ocrd/cli/bashlib.py,sha256=ypFBM3-IULz_IEBx0Y04eGt9VbQWwEWm4ujm9g_hPWY,6009
15
15
  ocrd/cli/log.py,sha256=6_FrVmTKIIVNUaNLkuOJx8pvPhensHMuayJ0PA7T-XA,1562
16
16
  ocrd/cli/network.py,sha256=oWBHFEURxfUdb_t-F4svP_ri7o5mqBoNQnLZLbsZLTA,602
@@ -20,50 +20,51 @@ ocrd/cli/resmgr.py,sha256=bTE-MpF7RRCHhgAbknqZUFHgHScIK6FR3S4h4DEAets,10080
20
20
  ocrd/cli/validate.py,sha256=nvageDaHCETcE71X5lu7i_4JKpgo9MrvJKinVPLYUTI,5727
21
21
  ocrd/cli/workspace.py,sha256=KTbSzIUrba5WoYETvM9ElRZVsDUHCGVvjoFgBGZS2nU,40468
22
22
  ocrd/cli/zip.py,sha256=MMJLw3OXWiJVfVtrdJcBkbB8vA1IzSautluazZRuCQ0,5910
23
- ocrd/decorators/__init__.py,sha256=NWqZUTSBve6yIBgTN3miGmz4w1IFefLhG92qXx5ADtw,7620
23
+ ocrd/decorators/__init__.py,sha256=PyXX7vxdWkRHixas9dWUtyO3YLczcly8ZEpfZDSMVp8,7639
24
24
  ocrd/decorators/loglevel_option.py,sha256=tgipROEu3t4hkwWvFssd80k2SbTBwBIC4WNE6Gc-XAg,798
25
25
  ocrd/decorators/mets_find_options.py,sha256=d4oATKMP6bFQHNqOK6nLqgUiWF2FYdkPvzkTVRMYpKo,635
26
- ocrd/decorators/ocrd_cli_options.py,sha256=hr2EugwAY_-GJ7F7g77Od9o9eAqhfLBHSpfmCql2OCU,2665
26
+ ocrd/decorators/ocrd_cli_options.py,sha256=lIvtE8re1VmpHm45u71ltE0QJS8nyd28HhLC7zGSvlo,2691
27
27
  ocrd/decorators/parameter_option.py,sha256=n8hYw7XVTd3i3tvpK8F1Jx_CqRp6EGF9qJVH95yj92Q,1076
28
28
  ocrd/processor/__init__.py,sha256=39ymNwYRdc-b_OJzzKmWCvo2ga3KdsGSYDHE1Hzkn_w,274
29
- ocrd/processor/base.py,sha256=8kFrYLd1cSHBaBolHjXdIVHwmV8muKgBCBrAYw7kWTQ,59154
30
- ocrd/processor/concurrent.py,sha256=IMMBFGDGqfpgm7Rp6J_dnXVckyBKntwARwcKDnxadHQ,38217
29
+ ocrd/processor/base.py,sha256=L396ON0p77D8r34CESJ2SIYspTZ6mYFqaBq6DYg6ywM,59315
31
30
  ocrd/processor/helpers.py,sha256=8ngrqAJ01BSoSJNsIoK_YfA8QdryM5y0MqaqA9f7ELM,10483
32
31
  ocrd/processor/ocrd_page_result.py,sha256=eDkpyVHcpaBzTHXiGrcNk9PP9Xr-XZru2w_uoX_ZeNA,510
33
32
  ocrd/processor/builtin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- ocrd/processor/builtin/dummy_processor.py,sha256=iWiw_jJXOqwr7-hFjdkmTCCo1xGr6MLGOshx81PTu-8,3548
33
+ ocrd/processor/builtin/dummy_processor.py,sha256=a-4kKJ1JeXQuBIyyN8w2R3s7ov-wAfyEdEz3nxrf0sU,3479
34
+ ocrd/processor/builtin/filter_processor.py,sha256=nDnXjo2tDCjodURb8VlB4VJtRwWGx261jH7AG91edSk,4317
35
35
  ocrd/processor/builtin/dummy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- ocrd/processor/builtin/dummy/ocrd-tool.json,sha256=aTA2FZRsRsrkbTctkazFeRu4xsTF6yCdeY07cMzOyt4,677
37
- ocrd_modelfactory/__init__.py,sha256=0baYSJXrOCTCguHkE6hBeqpGNVUe3aZUocv64A-DMDk,4094
36
+ ocrd/processor/builtin/dummy/ocrd-tool.json,sha256=VoI37paWiUyMkTN5Qqau8R1Clmw24-HcZu4wjy1Br9Y,2311
37
+ ocrd_modelfactory/__init__.py,sha256=NyJT1uSvmeEwibRFOkh0AEoVnYfP0mzxU--pP23B-TQ,4404
38
38
  ocrd_models/__init__.py,sha256=A0aj0mOraNb-xfiUueACdoaqISnp0qH-F49nTJg2vCs,380
39
39
  ocrd_models/constants.py,sha256=fI6Qz4OPOm6UBLQ_P2dlpjcwB0XFJZ7AgxxKqgc75X0,2724
40
40
  ocrd_models/mets-empty.xml,sha256=dFixfbxSXrgjZx9BfdIKWHX-khNmp7dNYaFe2qQSwCY,1203
41
41
  ocrd_models/ocrd_agent.py,sha256=E9OtDhz9UfKb6ou2qvsuCL9NlO1V6zMb0s8nVq8dVos,5609
42
- ocrd_models/ocrd_exif.py,sha256=5BRLjvB6jg36V68i8jvVnT2SSNnpqLbhLsaMuP51Scw,4583
42
+ ocrd_models/ocrd_exif.py,sha256=wRSprHxCy9LCXw41Fi9kp-CbFc5NFX9ZFIFNszB41qk,4585
43
43
  ocrd_models/ocrd_file.py,sha256=7lyHezuNnl2FEYV1lV35-QTCrgYAL-3wO2ulFUNq2Ak,9717
44
44
  ocrd_models/ocrd_mets.py,sha256=cRBEnvRNmRUhcrKouqygTQqYA-XdgyA-FNLwt86V0vg,42878
45
- ocrd_models/ocrd_page.py,sha256=sVIvvMeBT8eZnOfW0DTjQUNyu62-llz0v_Ga5Xo-tUM,5393
46
- ocrd_models/ocrd_page_generateds.py,sha256=wfx3vESMAi08rl6-16zNVJe4E3B6APIvL6RCr1roAzg,774092
45
+ ocrd_models/ocrd_page.py,sha256=TTCnvpKGyZx1dqH8LnDiVVVPjU6emWGVLO_4o9rQHtw,6233
46
+ ocrd_models/ocrd_page_generateds.py,sha256=vjXPob5UMxYxPI6un8SYTL673Nhph0E2WEZexBgbvY4,841794
47
47
  ocrd_models/ocrd_xml_base.py,sha256=OW57mXLlwm1nH8CNefvXmwLRws9KL9zSrb-3vH--mX8,1641
48
48
  ocrd_models/report.py,sha256=luZxvzAAQyGYOlRNSJQUIUIANG81iGmBW5ag-uXxKCA,2026
49
49
  ocrd_models/utils.py,sha256=0_WHf5NEn1WC8MKJc6X_RK8gW-70Z09_mslkKOj7uF8,2369
50
+ ocrd_models/xpath_functions.py,sha256=AwR8tHf56-mmIksnw_GeOQ760sxNHqK92T7z9OfsEEs,1437
50
51
  ocrd_network/__init__.py,sha256=gMejC614J5PPGgXDKBiQS0jt-Jx8qOrLbWH7zt8x8Gs,374
51
- ocrd_network/client.py,sha256=j9PJ9QHI6qJ_qAxVlpTk5mLfq0Xemj_Br-0SX-09U5M,2834
52
- ocrd_network/client_utils.py,sha256=JDBzDOGY2G_bgS8fQ677CMHG9DWSvIuWTlEFzdsXr_Q,4527
52
+ ocrd_network/client.py,sha256=rzqtamZ8krRRy-QTO-AeWH8Lr3HhRiQe2R1-Lovd40g,3020
53
+ ocrd_network/client_utils.py,sha256=VVZMNBgGznh41exZ78S48X3DDwHcWTuOq-LNdxjRvak,5002
53
54
  ocrd_network/constants.py,sha256=IeNtcU6dqonDE3Zw83_61auhS8X2b8wsjAxYg1zvK-M,1902
54
55
  ocrd_network/database.py,sha256=fcft7vdRDoR7vmPL1xNYTIeOg5DwRPcggwYDYxLy5ik,10706
55
56
  ocrd_network/logging_utils.py,sha256=bO9TQqBXw9CIZEKp8tHXbeE2NuJWMiaQDHzS05b4ajo,2153
56
57
  ocrd_network/param_validators.py,sha256=Jl1VwiPPKJ50k-xEHLdvW-1QDOkJHCiMz4k9Ipqm-Uc,1489
57
58
  ocrd_network/process_helpers.py,sha256=KpkInXsa5bgrxvTOouyMJ0NgJhaz0J9Gjs5sZHBcH64,2373
58
- ocrd_network/processing_server.py,sha256=8EFQIcjiQ-AEc4goaggxa-hYWhJW9fMzR768ZIX8vZE,41139
59
- ocrd_network/processing_worker.py,sha256=VV_pC5ljtjPpMY89MElAMZ-YUJdKk7IPugxFfDy8viA,12396
60
- ocrd_network/processor_server.py,sha256=RVX0MSzzayDdqHg7Kga7L4vOsjmQcoRYObh6Naxz-U4,9858
61
- ocrd_network/server_cache.py,sha256=GKX91SkVahgAk0nGWT0S-0qWp7a9ubxncjwwLTKs7JY,12829
62
- ocrd_network/server_utils.py,sha256=NBSZvLD7o43fMtSkqR70ougW-IWCW9J71GHqZIBeD0Q,10982
63
- ocrd_network/tcp_to_uds_mets_proxy.py,sha256=pNEl5jH09M-zuUIx25nog7IZ-fkXabi3724kQ_3iMTs,2894
64
- ocrd_network/utils.py,sha256=Vm8EiBBSKv5fAlkcb6nB8-duFN633ZIRAcPKfk7iyZY,6366
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
65
66
  ocrd_network/cli/__init__.py,sha256=F7YVqxw-9glz6-ghG0Kp5XXeV1-rL1emVSXLCWxdTF0,306
66
- ocrd_network/cli/client.py,sha256=4bpsDRwm3WVFHA6ITM-VKAFx-JQ6ldbBKFVYleWhiW8,7515
67
+ ocrd_network/cli/client.py,sha256=gFEXjz-d074CpvimqaM4kJRbJVNYRAOK-jsUl2EAUVs,8424
67
68
  ocrd_network/cli/processing_server.py,sha256=rAci6RsHlZ0c87GuLdfdCQCiGNcDEu4NEEQiwKJqVUo,796
68
69
  ocrd_network/cli/processing_worker.py,sha256=ZuaCkbKV_WKJV7cGOjZ6RLrjjppymnwNCiznFMlclAg,1897
69
70
  ocrd_network/cli/processor_server.py,sha256=Vto7UekFo_g83aHqwDmhge9bhPzk0b7O-L46dSfIpJc,1259
@@ -74,7 +75,7 @@ ocrd_network/models/ocrd_tool.py,sha256=WhxSwDyEXtF03Cu8u2tLZcYM0tCacL4PX1GveAxn
74
75
  ocrd_network/models/workflow.py,sha256=GL8q7RX9fGdXG3iVyJpCeLXbWa-2qI_SIxqhzxs9VK8,189
75
76
  ocrd_network/models/workspace.py,sha256=42G8RoS0wJ902LHyM09NIaqHoRdmP-Oib3d5I07sTBQ,1579
76
77
  ocrd_network/rabbitmq_utils/__init__.py,sha256=8MRawAiSpZ9IQUBcLAS7sYOzNC9sI11eZOLk7k92_ZQ,691
77
- ocrd_network/rabbitmq_utils/connector.py,sha256=tLYayGlGRrqLkQChhL5FyUyF0MQTi4w-nWKxz_IuX-0,11342
78
+ ocrd_network/rabbitmq_utils/connector.py,sha256=N6mzjIf5FkVIno3FI1AksZY4F5jMUAm8baay0nXZx8w,11343
78
79
  ocrd_network/rabbitmq_utils/constants.py,sha256=Zu_dKJASfrgnIvEZZlFX9uDR9y6w7zy0KhW7gP7wHDE,1063
79
80
  ocrd_network/rabbitmq_utils/consumer.py,sha256=3WeryDmo0dSD9U0eLODbDElscvhEYjNeCBIewQHYfws,2488
80
81
  ocrd_network/rabbitmq_utils/helpers.py,sha256=y8FTC1ml_IBNcFo14GgCNtNRxYDotQn7U14HmTkv6h0,4874
@@ -83,12 +84,12 @@ ocrd_network/rabbitmq_utils/publisher.py,sha256=mw4XQQhRE1xUQVgEUseyG845iIgVO-9G
83
84
  ocrd_network/runtime_data/__init__.py,sha256=3jYkmT4mxMUcpbDaSw7Ld0KTedGEx_5vUQPDjwUyJZc,367
84
85
  ocrd_network/runtime_data/config_parser.py,sha256=Vr0FbsqmsoiuhDgZ7KFdeFZj9JvUulcOS2PCRFQQNHY,2364
85
86
  ocrd_network/runtime_data/connection_clients.py,sha256=DZyAvkNyMaIddGJs56s2pMP_fK-XWAtICxk1cjvkWYM,4207
86
- ocrd_network/runtime_data/deployer.py,sha256=W7SHn6XBC5fIaTJIMnHOMxEyp7dVqvHY4_cepaloMhQ,8315
87
+ ocrd_network/runtime_data/deployer.py,sha256=LkDUG0uJf_V4SteiOM3EWwhKtdANCjmAOEAJJDshN30,9111
87
88
  ocrd_network/runtime_data/hosts.py,sha256=ml19ptzH4TFofyJR-Qp_Mn3sZUFbWoNe__rRXZSj_WE,12185
88
89
  ocrd_network/runtime_data/network_agents.py,sha256=5p_zKLqECBIHLw-Ya6eKcKSZcUM4ESiipEIphVxHBEA,5192
89
90
  ocrd_network/runtime_data/network_services.py,sha256=xrPpFUU_Pa-XzGe2FEt5RmO17xqykIUmTr_9g6S7XSs,7892
90
91
  ocrd_utils/__init__.py,sha256=U_zAQJwxg_aJ4CR84CKMNAUP6Cob8Er8Ikj42JmnUKo,5977
91
- ocrd_utils/config.py,sha256=Rkqv5wWEmlDDD0l1IWo9TPgn5ppPnHPRH9FfkMST29E,11117
92
+ ocrd_utils/config.py,sha256=1_8j4kpKK5gxhFKObbBEzmq4JazTtKEkGe14Ch_tpw0,11796
92
93
  ocrd_utils/constants.py,sha256=ImbG1d8t2MW3uuFi-mN6aY90Zn74liAKZBKlfuKN86w,3278
93
94
  ocrd_utils/deprecate.py,sha256=4i50sZsA3Eevqn5D-SL5yGf9KEZfGCV4A5Anzn1GRMs,1026
94
95
  ocrd_utils/image.py,sha256=zNNX1cnRy6yvrxx8mnYQiqWraAh5-i4a1AOfCCg4SmI,24781
@@ -119,9 +120,9 @@ ocrd_validators/xlink.xsd,sha256=8fW7YAMWXN2PbB_MMvj9H5ZeFoEBDzuYBtlGC8_6ijw,318
119
120
  ocrd_validators/xsd_mets_validator.py,sha256=4GWfLyqkmca0x7osDuXuExYuM0HWVrKoqn0S35sFhHU,467
120
121
  ocrd_validators/xsd_page_validator.py,sha256=BNz_9u-Ek4UCeyZu3KxSQoolfW9lvuaSR9nIu1XXxeE,467
121
122
  ocrd_validators/xsd_validator.py,sha256=6HrVAf6SzCvfUIuQdIzz9bOq4V-zhyii9yrUPoK2Uvo,2094
122
- ocrd-3.0.0b7.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
123
- ocrd-3.0.0b7.dist-info/METADATA,sha256=lc6oZVb9SPl97qvspPigal4yb_1DBBRZwE3GQUTAK_o,10417
124
- ocrd-3.0.0b7.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
125
- ocrd-3.0.0b7.dist-info/entry_points.txt,sha256=tV_gAdO8cbnOjS0GmKfJKbN60xBAV2DQRX6hEjleSjE,94
126
- ocrd-3.0.0b7.dist-info/top_level.txt,sha256=pUgiN42t4KXC5rvpi6V8atza31XP4SCznXpXlVlvomM,75
127
- ocrd-3.0.0b7.dist-info/RECORD,,
123
+ ocrd-3.0.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
124
+ ocrd-3.0.2.dist-info/METADATA,sha256=e6sO3z4kPE8qe8Ne-aPLX5Tl03M_NcrORBnlAQodLDE,10442
125
+ ocrd-3.0.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
126
+ ocrd-3.0.2.dist-info/entry_points.txt,sha256=4hcJ2LkK_OlIabHnKgFit35Ap7b5Lz1Gb4hzkxV0Kiw,152
127
+ ocrd-3.0.2.dist-info/top_level.txt,sha256=pUgiN42t4KXC5rvpi6V8atza31XP4SCznXpXlVlvomM,75
128
+ ocrd-3.0.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
2
  ocrd = ocrd.cli:cli
3
3
  ocrd-dummy = ocrd.processor.builtin.dummy_processor:cli
4
+ ocrd-filter = ocrd.processor.builtin.filter_processor:cli
@@ -101,5 +101,11 @@ def page_from_file(input_file, **kwargs) -> OcrdPage:
101
101
  if input_file.mimetype.startswith('image'):
102
102
  return page_from_image(input_file)
103
103
  if input_file.mimetype == MIMETYPE_PAGE:
104
- return OcrdPage(*parseEtree(input_file.local_filename, silence=True))
104
+ revmap = {}
105
+ # the old/default gds.reverse_node_mapping is useless
106
+ # since 2.39.4, we can actually get the exact reverse mapping for perfect round-trip
107
+ # but awkwardly, we have to pass the dict in for that
108
+ page = OcrdPage(*parseEtree(input_file.local_filename, reverse_mapping=revmap, silence=True))
109
+ page.revmap = revmap
110
+ return page
105
111
  raise ValueError("Unsupported mimetype '%s'" % input_file.mimetype)
ocrd_models/ocrd_exif.py CHANGED
@@ -49,11 +49,11 @@ class OcrdExif():
49
49
  for prop in ['compression', 'photometric_interpretation']:
50
50
  setattr(self, prop, img.info[prop] if prop in img.info else None)
51
51
  if img.filename:
52
- ret = run(['identify', '-format', r'%[resolution.x] %[resolution.y] %U', img.filename], check=False, stderr=PIPE, stdout=PIPE)
52
+ ret = run(['identify', '-format', r'%[resolution.x] %[resolution.y] %U ', img.filename], check=False, stderr=PIPE, stdout=PIPE)
53
53
  else:
54
54
  with BytesIO() as bio:
55
55
  img.save(bio, format=img.format)
56
- ret = run(['identify', '-format', r'%[resolution.x] %[resolution.y] %U', '/dev/stdin'], check=False, stderr=PIPE, stdout=PIPE, input=bio.getvalue())
56
+ ret = run(['identify', '-format', r'%[resolution.x] %[resolution.y] %U ', '/dev/stdin'], check=False, stderr=PIPE, stdout=PIPE, input=bio.getvalue())
57
57
  if ret.returncode:
58
58
  stderr = ret.stderr.decode('utf-8')
59
59
  if 'no decode delegate for this image format' in stderr:
ocrd_models/ocrd_page.py CHANGED
@@ -2,8 +2,9 @@
2
2
  API to PAGE-XML, generated with generateDS from XML schema.
3
3
  """
4
4
  from io import StringIO
5
- from typing import Dict, Union
5
+ from typing import Dict, Union, Any
6
6
  from lxml import etree as ET
7
+ from elementpath import XPath2Parser, XPathContext
7
8
 
8
9
  __all__ = [
9
10
  'parse',
@@ -132,6 +133,7 @@ from .ocrd_page_generateds import (
132
133
  )
133
134
 
134
135
  from .constants import NAMESPACES
136
+ from .xpath_functions import pc_functions
135
137
 
136
138
  # add docstrings
137
139
  parse.__doc__ = (
@@ -189,12 +191,25 @@ class OcrdPage():
189
191
  pcgts : PcGtsType,
190
192
  etree : ET._Element,
191
193
  mapping : Dict[str, ET._Element],
192
- revmap : Dict[ET._Element, str],
194
+ revmap : Dict[ET._Element, Any],
193
195
  ):
194
196
  self._pcgts = pcgts
195
197
  self.etree = etree
196
198
  self.mapping = mapping
197
199
  self.revmap = revmap
200
+ self.xpath_parser = XPath2Parser(namespaces={
201
+ 'page': NAMESPACES['page'],
202
+ 'pc': NAMESPACES['page']})
203
+ for func in pc_functions:
204
+ name = func.__name__.replace('_', '-')
205
+ if name.startswith('pc-'):
206
+ name = name[3:]
207
+ elif name.startswith('pc'):
208
+ name = name[2:]
209
+ # register
210
+ self.xpath_parser.external_function(func, name=name, prefix='pc')
211
+ self.xpath_context = XPathContext(self.etree)
212
+ self.xpath = lambda expression: self.xpath_parser.parse(expression).get_results(self.xpath_context)
198
213
 
199
214
  def __getattr__(self, name):
200
215
  return getattr(self._pcgts, name)
@@ -208,11 +223,15 @@ def to_xml(el, skip_declaration=False) -> str:
208
223
  # XXX remove potential empty ReadingOrder
209
224
  if hasattr(el, 'prune_ReadingOrder'):
210
225
  el.prune_ReadingOrder()
226
+ if hasattr(el, 'original_tagname_'):
227
+ name = el.original_tagname_ or 'PcGts'
228
+ else:
229
+ name = 'PcGts'
211
230
  sio = StringIO()
212
231
  el.export(
213
232
  outfile=sio,
214
233
  level=0,
215
- name_='PcGts',
234
+ name_=name,
216
235
  namespaceprefix_='pc:',
217
236
  namespacedef_='xmlns:pc="%s" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="%s %s/pagecontent.xsd"' % (
218
237
  NAMESPACES['page'],