Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Odevzdávací Systém MO
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Model registry
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Martin Mareš
Odevzdávací Systém MO
Commits
52278277
Commit
52278277
authored
3 years ago
by
Martin Mareš
Browse files
Options
Downloads
Patches
Plain Diff
Skeny: Alespoň částečné ošetření chyb
Viz
#258
.
parent
f20f2f0f
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
mo/jobs/protocols.py
+21
-7
21 additions, 7 deletions
mo/jobs/protocols.py
with
21 additions
and
7 deletions
mo/jobs/protocols.py
+
21
−
7
View file @
52278277
# Implementace jobů na práci s protokoly
# Implementace jobů na práci s protokoly
from
PIL
import
Image
from
PIL
import
Image
from
dataclasses
import
dataclass
from
dataclasses
import
dataclass
,
field
import
multiprocessing
import
multiprocessing
import
os
import
os
import
poppler
import
poppler
...
@@ -218,6 +218,12 @@ class ScanJobPage:
...
@@ -218,6 +218,12 @@ class ScanJobPage:
code
:
Optional
[
str
]
code
:
Optional
[
str
]
@dataclass
class
ScanJobResult
:
pages
:
List
[
ScanJobPage
]
=
field
(
default_factory
=
list
)
error
:
Optional
[
str
]
=
None
@job_handler
(
db
.
JobType
.
process_scans
)
@job_handler
(
db
.
JobType
.
process_scans
)
def
handle_process_scans
(
the_job
:
TheJob
):
def
handle_process_scans
(
the_job
:
TheJob
):
job
=
the_job
.
job
job
=
the_job
.
job
...
@@ -291,7 +297,11 @@ def handle_process_scans(the_job: TheJob):
...
@@ -291,7 +297,11 @@ def handle_process_scans(the_job: TheJob):
num_pages
=
0
num_pages
=
0
for
fi
,
fn
in
enumerate
(
in_files
):
for
fi
,
fn
in
enumerate
(
in_files
):
prev_page
:
Optional
[
db
.
ScanPage
]
=
None
prev_page
:
Optional
[
db
.
ScanPage
]
=
None
for
pi
,
pr
in
enumerate
(
results
[
fi
]):
res
=
results
[
fi
]
if
res
.
error
:
the_job
.
error
(
f
'
{
fn
}
:
{
res
.
error
}
'
)
return
for
pi
,
pr
in
enumerate
(
res
.
pages
):
sp
=
db
.
ScanPage
(
sp
=
db
.
ScanPage
(
job_id
=
job
.
job_id
,
job_id
=
job
.
job_id
,
file_nr
=
fi
,
file_nr
=
fi
,
...
@@ -321,19 +331,23 @@ def handle_process_scans(the_job: TheJob):
...
@@ -321,19 +331,23 @@ def handle_process_scans(the_job: TheJob):
the_job
.
expires_in_minutes
=
config
.
JOB_EXPIRATION_LONG
the_job
.
expires_in_minutes
=
config
.
JOB_EXPIRATION_LONG
def
_process_scan_file
(
args
:
ScanJobArgs
)
->
List
[
ScanJob
Page
]
:
def
_process_scan_file
(
args
:
ScanJobArgs
)
->
ScanJob
Result
:
# Zpracuje jeden soubor se skeny. Běží v odděleném procesu.
# Zpracuje jeden soubor se skeny. Běží v odděleném procesu.
# FIXME: Ošetření chyb
res
=
ScanJobResult
()
logger
.
debug
(
f
'
Scan: Analyzuji soubor
{
args
.
in_path
}
'
)
logger
.
debug
(
f
'
Scan: Analyzuji soubor
{
args
.
in_path
}
'
)
pdf
=
poppler
.
load_from_file
(
args
.
in_path
)
pdf
=
poppler
.
load_from_file
(
args
.
in_path
)
if
not
pdf
.
_document
:
# XXX: Poppler neumí hlásit chybu při otevírání dokumentu (https://github.com/cbrunet/python-poppler/issues/48)
# Tak zatím saháme dovnitř a detekujeme si ji sami.
res
.
error
=
'
Soubor není ve formátu PDF
'
return
res
renderer
=
poppler
.
PageRenderer
()
renderer
=
poppler
.
PageRenderer
()
renderer
.
set_render_hint
(
poppler
.
RenderHint
.
antialiasing
,
True
)
renderer
.
set_render_hint
(
poppler
.
RenderHint
.
antialiasing
,
True
)
renderer
.
set_render_hint
(
poppler
.
RenderHint
.
text_antialiasing
,
True
)
renderer
.
set_render_hint
(
poppler
.
RenderHint
.
text_antialiasing
,
True
)
dpi
=
300
dpi
=
300
output
=
[]
for
page_nr
in
range
(
pdf
.
pages
):
for
page_nr
in
range
(
pdf
.
pages
):
page
=
pdf
.
create_page
(
page_nr
)
page
=
pdf
.
create_page
(
page_nr
)
page_img
=
renderer
.
render_page
(
page
,
xres
=
dpi
,
yres
=
dpi
)
page_img
=
renderer
.
render_page
(
page
,
xres
=
dpi
,
yres
=
dpi
)
...
@@ -360,7 +374,7 @@ def _process_scan_file(args: ScanJobArgs) -> List[ScanJobPage]:
...
@@ -360,7 +374,7 @@ def _process_scan_file(args: ScanJobArgs) -> List[ScanJobPage]:
qr
=
code
.
data
.
decode
(
'
US-ASCII
'
)
qr
=
code
.
data
.
decode
(
'
US-ASCII
'
)
# FIXME: Tady by se dala podle kódu otočit stránka
# FIXME: Tady by se dala podle kódu otočit stránka
output
.
append
(
ScanJobPage
(
code
=
qr
))
res
.
pages
.
append
(
ScanJobPage
(
code
=
qr
))
full_img
.
save
(
f
'
{
args
.
out_prefix
}
-
{
page_nr
:
04
d
}
-full.png
'
)
full_img
.
save
(
f
'
{
args
.
out_prefix
}
-
{
page_nr
:
04
d
}
-full.png
'
)
...
@@ -369,7 +383,7 @@ def _process_scan_file(args: ScanJobArgs) -> List[ScanJobPage]:
...
@@ -369,7 +383,7 @@ def _process_scan_file(args: ScanJobArgs) -> List[ScanJobPage]:
logger
.
debug
(
f
'
Scan: Strana #
{
page_nr
}
:
{
qr
}
'
)
logger
.
debug
(
f
'
Scan: Strana #
{
page_nr
}
:
{
qr
}
'
)
return
output
return
res
#
#
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment