Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
douban-api-proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
douban-api-proxy
Commits
2be7b648
Commit
2be7b648
authored
Mar 17, 2021
by
Ozzie Isaacs
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'pdf/XMP_Metadata3' into master
parents
12ad7a63
8abfaf0f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
75 additions
and
12 deletions
+75
-12
uploader.py
cps/uploader.py
+75
-12
No files found.
cps/uploader.py
View file @
2be7b648
...
@@ -22,11 +22,10 @@ import hashlib
...
@@ -22,11 +22,10 @@ import hashlib
from
tempfile
import
gettempdir
from
tempfile
import
gettempdir
from
flask_babel
import
gettext
as
_
from
flask_babel
import
gettext
as
_
from
.
import
logger
,
comic
from
.
import
logger
,
comic
,
isoLanguages
,
get_locale
from
.constants
import
BookMeta
from
.constants
import
BookMeta
from
.helper
import
split_authors
from
.helper
import
split_authors
log
=
logger
.
create
()
log
=
logger
.
create
()
...
@@ -82,7 +81,7 @@ def process(tmp_file_path, original_file_name, original_file_extension, rarExecu
...
@@ -82,7 +81,7 @@ def process(tmp_file_path, original_file_name, original_file_extension, rarExecu
original_file_name
,
original_file_name
,
original_file_extension
,
original_file_extension
,
rarExecutable
)
rarExecutable
)
except
Exception
as
ex
:
except
Exception
as
ex
:
log
.
warning
(
'cannot parse metadata, using default:
%
s'
,
ex
)
log
.
warning
(
'cannot parse metadata, using default:
%
s'
,
ex
)
if
meta
and
meta
.
title
.
strip
()
and
meta
.
author
.
strip
():
if
meta
and
meta
.
title
.
strip
()
and
meta
.
author
.
strip
():
...
@@ -98,7 +97,7 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension):
...
@@ -98,7 +97,7 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension):
extension
=
original_file_extension
,
extension
=
original_file_extension
,
title
=
original_file_name
,
title
=
original_file_name
,
author
=
_
(
u'Unknown'
),
author
=
_
(
u'Unknown'
),
cover
=
None
,
cover
=
pdf_preview
(
tmp_file_path
,
original_file_name
)
,
description
=
""
,
description
=
""
,
tags
=
""
,
tags
=
""
,
series
=
""
,
series
=
""
,
...
@@ -106,31 +105,95 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension):
...
@@ -106,31 +105,95 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension):
languages
=
""
)
languages
=
""
)
def
parse_xmp
(
pdf_file
):
"""
Parse XMP Metadata and prepare for BookMeta object
"""
try
:
xmp_info
=
pdf_file
.
getXmpMetadata
()
except
Exception
as
e
:
log
.
debug
(
'Can not read XMP metadata'
,
e
)
return
None
if
xmp_info
:
try
:
xmp_author
=
xmp_info
.
dc_creator
# list
except
:
xmp_author
=
[
'Unknown'
]
if
xmp_info
.
dc_title
:
xmp_title
=
xmp_info
.
dc_title
[
'x-default'
]
else
:
xmp_title
=
''
if
xmp_info
.
dc_description
:
xmp_description
=
xmp_info
.
dc_description
[
'x-default'
]
else
:
xmp_description
=
''
languages
=
[]
for
i
in
xmp_info
.
dc_language
:
#calibre-web currently only takes one language.
languages
.
append
(
isoLanguages
.
get_lang3
(
i
))
xmp_tags
=
', '
.
join
(
xmp_info
.
dc_subject
)
xmp_publisher
=
', '
.
join
(
xmp_info
.
dc_publisher
)
xmp_languages
=
xmp_info
.
dc_language
return
{
'author'
:
xmp_author
,
'title'
:
xmp_title
,
'subject'
:
xmp_description
,
'tags'
:
xmp_tags
,
'languages'
:
languages
,
'publisher'
:
xmp_publisher
}
def
pdf_meta
(
tmp_file_path
,
original_file_name
,
original_file_extension
):
def
pdf_meta
(
tmp_file_path
,
original_file_name
,
original_file_extension
):
doc_info
=
None
doc_info
=
None
xmp_info
=
None
if
use_pdf_meta
:
if
use_pdf_meta
:
with
open
(
tmp_file_path
,
'rb'
)
as
f
:
with
open
(
tmp_file_path
,
'rb'
)
as
f
:
doc_info
=
PdfFileReader
(
f
)
.
getDocumentInfo
()
pdf_file
=
PdfFileReader
(
f
)
if
doc_info
:
doc_info
=
pdf_file
.
getDocumentInfo
()
author
=
doc_info
.
author
if
doc_info
.
author
else
u'Unknown'
xmp_info
=
parse_xmp
(
pdf_file
)
title
=
doc_info
.
title
if
doc_info
.
title
else
original_file_name
if
xmp_info
:
author
=
' & '
.
join
(
split_authors
(
xmp_info
[
'author'
]))
title
=
xmp_info
[
'title'
]
subject
=
xmp_info
[
'subject'
]
tags
=
xmp_info
[
'tags'
]
languages
=
xmp_info
[
'languages'
]
publisher
=
xmp_info
[
'publisher'
]
elif
doc_info
:
author
=
' & '
.
join
(
split_authors
([
doc_info
.
author
]))
title
=
doc_info
.
title
subject
=
doc_info
.
subject
subject
=
doc_info
.
subject
tags
=
doc_info
[
'/Keywords'
]
languages
=
""
publisher
=
""
else
:
else
:
author
=
u'Unknown'
author
=
u'Unknown'
title
=
original_file_name
title
=
original_file_name
subject
=
""
subject
=
""
tags
=
""
languages
=
""
publisher
=
""
return
BookMeta
(
return
BookMeta
(
file_path
=
tmp_file_path
,
file_path
=
tmp_file_path
,
extension
=
original_file_extension
,
extension
=
original_file_extension
,
title
=
title
,
title
=
title
,
author
=
' & '
.
join
(
split_authors
([
author
]))
,
author
=
author
,
cover
=
pdf_preview
(
tmp_file_path
,
original_file_name
),
cover
=
pdf_preview
(
tmp_file_path
,
original_file_name
),
description
=
subject
,
description
=
subject
,
tags
=
""
,
tags
=
tags
,
series
=
""
,
series
=
""
,
series_id
=
""
,
series_id
=
""
,
languages
=
""
)
languages
=
', '
.
join
(
languages
)
)
def
pdf_preview
(
tmp_file_path
,
tmp_dir
):
def
pdf_preview
(
tmp_file_path
,
tmp_dir
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment