Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

METS Server #966

Merged
merged 50 commits into from
Aug 22, 2023
Merged
Changes from 1 commit
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
604dd9d
wip
kba Dec 6, 2022
f73194d
.
kba Dec 7, 2022
04eee34
getting there
kba Dec 8, 2022
3af495b
slowly but determinedly
kba Dec 8, 2022
82e2a69
remove noise from makefile
kba Dec 9, 2022
dcad68a
mets-server: bashlib should take same args
kba Dec 13, 2022
63ba8f0
ClientSideOcrdMets: fix signature of self.file_groups
MehmedGIT Dec 13, 2022
3d48af6
OcrdWorkspace.is_remote should be a bool
kba Dec 14, 2022
14db382
mets_server: only save_mets on PUT and DELETE
kba Dec 14, 2022
4f726ab
resolver: shorten mets_server_{host,port} check
MehmedGIT Dec 14, 2022
9b4a751
Merge branch 'master' into mets-server
kba Dec 14, 2022
6fdf7dd
--port must be int
kba Dec 14, 2022
bfa17c3
mets_server: replace Model constructor with static create calls
kba Dec 14, 2022
3685aeb
Merge branch 'mets-server' of https://github.com/kba/ocrd-core into m…
kba Dec 14, 2022
69dad92
mets_server: different loggers for socket/host-port
kba Dec 14, 2022
3532600
mets_server: missed mimetype kwarg
joschrew Dec 19, 2022
390682c
mets_server: use factory method not constructor
kba Dec 19, 2022
9f27a98
mets_server: file search/adding on /file not /
kba Dec 19, 2022
6baa0c1
Merge branch 'mets-server' of https://github.com/kba/ocrd-core into m…
kba Dec 19, 2022
892841c
workspace: save content to file only if not remote
kba Dec 19, 2022
821b5e8
Merge remote-tracking branch 'origin/master' into mets-server
kba Aug 17, 2023
3a6662d
finish implementation / test mets server
kba Aug 17, 2023
4f49d37
METS Server: equivalent functionality to files for agents
kba Aug 17, 2023
ae7c773
Update ocrd/ocrd/cli/workspace.py
kba Aug 17, 2023
93512db
METS server: consistently use local_filename
kba Aug 17, 2023
5827d30
ocrd workspace CLI: reference METS server option
bertsky Aug 17, 2023
22ea8e0
Update ocrd/ocrd/cli/workspace.py
kba Aug 17, 2023
54b14b8
mets server: add stop
kba Aug 17, 2023
374f1f4
mets server: improve docs
kba Aug 17, 2023
ca10f46
mets server: remove XXX HACK comments, they are not;
kba Aug 17, 2023
c3eebd5
mets server: provide fallback for non-wrapped OcrdFile methods
kba Aug 17, 2023
3a037f8
mets server: __str__ handlers
kba Aug 17, 2023
55bb692
mets server: support unique_identifier
kba Aug 17, 2023
baa52ef
mets server: clean up is_remote muddle
kba Aug 17, 2023
7bf1168
mets server: no content will pass through it
kba Aug 17, 2023
f477ae1
mets server will never pass content to workspace.add_file
kba Aug 17, 2023
46e34bc
mets server: single option --mets-server-url/-U
kba Aug 17, 2023
1b55c8f
:package: v2.53.0
kba Aug 21, 2023
f2da896
workspace server start: pass workspace context
kba Aug 21, 2023
47eb196
METS server: support -U for processor options
kba Aug 21, 2023
668a8f4
move ClientSideOcrd{Agent,File} to ocrd_models
kba Aug 21, 2023
671ca32
typo: -{,-}mets-server-url
kba Aug 21, 2023
41393b3
pass mets_server_url from run_processor
kba Aug 21, 2023
98a5690
ClientSideOcrdFile et al need url too
kba Aug 21, 2023
f6efd94
mets server: test both UDS and TCP variant
kba Aug 21, 2023
780fbbc
Merge branch 'master' into mets-server
kba Aug 21, 2023
6cf22a8
mets server: allow both local_filename and url to be None
kba Aug 22, 2023
927ea59
mets server: forbid local/remote workspace with different directories
kba Aug 22, 2023
b53938c
pin requests < 2.30, OCR-D/core#1082
kba Aug 22, 2023
5ce54a5
ci: localhost -> 127.0.0.1
kba Aug 22, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions ocrd/ocrd/mets_server.py
Original file line number Diff line number Diff line change
@@ -95,6 +95,7 @@ def __init__(self, el, mimetype=None, pageId=None, loctype='OTHER', local_filena
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``
"""
@@ -105,6 +106,13 @@ def __init__(self, el, mimetype=None, pageId=None, loctype='OTHER', local_filena
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 '<OcrdFile %s]/>' % (props)

class ClientSideOcrdAgent():
"""
Provides the same interface as :py:class:`ocrd_models.ocrd_file.OcrdAgent`
@@ -132,6 +140,14 @@ def __init__(self, el, name=None, _type=None, othertype=None, role=None, otherro
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 '<OcrdAgent [' + props + ']/>'


class ClientSideOcrdMets():
"""
Partial substitute for :py:class:`ocrd_models.ocrd_mets.OcrdMets` which provides for
@@ -153,9 +169,11 @@ def __init__(self, host, port, socket):
self.session = requests_session()

def __getattr__(self, name):
if hasattr(self, name):
return self.get(name)
raise Exception("ClientSideOcrdMets has no access to '%s' - try without METS server", name)
raise NotImplementedError(f"ClientSideOcrdMets has no access to '{name}' - try without METS server")

def __str__(self):
return f'<ClientSideOcrdMets[url={self.url}]>'

@deprecated_alias(ID="file_id")
@deprecated_alias(pageId="page_id")
@deprecated_alias(fileGrp="file_grp")
14 changes: 14 additions & 0 deletions tests/test_mets_server.py
Original file line number Diff line number Diff line change
@@ -105,3 +105,17 @@ def test_mets_server_add_agents(start_mets_server):
workspace_file.reload_mets()

assert len(workspace_file.mets.agents) == NO_AGENTS + no_agents_before

def test_mets_server_str(start_mets_server):
workspace = Workspace(Resolver(), WORKSPACE_DIR, mets_server_socket=SOCKET_PATH)
f = next(workspace.find_files())
assert str(f) == '<OcrdFile fileGrp=OCR-D-IMG, ID=INPUT_0017, mimetype=image/tiff, url=---, local_filename=OCR-D-IMG/INPUT_0017.tif]/>'
a = workspace.mets.agents[0]
assert str(a) == '<OcrdAgent [type=---, othertype=SOFTWARE, role=CREATOR, otherrole=---, name=DFG-Koordinierungsprojekt zur Weiterentwicklung von Verfahren der Optical Character Recognition (OCR-D)]/>'
assert str(workspace.mets) == '<ClientSideOcrdMets[url=http+unix://%2Ftmp%2Focrd-mets-server.sock]>'

def test_mets_test_unimplemented(start_mets_server):
workspace = Workspace(Resolver(), WORKSPACE_DIR, mets_server_socket=SOCKET_PATH)
with raises(NotImplementedError):
workspace.mets.rename_file_group('OCR-D-IMG', 'FOO')