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
622a2fc4
Commit
622a2fc4
authored
Mar 04, 2017
by
林檎
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into travis
parents
6caf132f
8c7ba2cc
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
63 additions
and
15 deletions
+63
-15
book_formats.py
cps/book_formats.py
+6
-2
db.py
cps/db.py
+1
-1
epub.py
cps/epub.py
+28
-8
fb2.py
cps/fb2.py
+2
-1
uploader.py
cps/uploader.py
+1
-1
web.py
cps/web.py
+25
-2
No files found.
cps/book_formats.py
View file @
622a2fc4
...
...
@@ -63,7 +63,9 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension):
description
=
""
,
tags
=
""
,
series
=
""
,
series_id
=
""
)
series_id
=
""
,
comments
=
""
,
languages
=
""
)
def
pdf_meta
(
tmp_file_path
,
original_file_name
,
original_file_extension
):
...
...
@@ -91,7 +93,9 @@ def pdf_meta(tmp_file_path, original_file_name, original_file_extension):
description
=
subject
,
tags
=
""
,
series
=
""
,
series_id
=
""
)
series_id
=
""
,
comments
=
""
,
languages
=
""
)
def
pdf_preview
(
tmp_file_path
,
tmp_dir
):
...
...
cps/db.py
View file @
622a2fc4
...
...
@@ -247,7 +247,7 @@ class Books(Base):
identifiers
=
relationship
(
'Identifiers'
,
backref
=
'books'
)
def
__init__
(
self
,
title
,
sort
,
author_sort
,
timestamp
,
pubdate
,
series_index
,
last_modified
,
path
,
has_cover
,
authors
,
tags
):
authors
,
tags
,
languages
=
None
):
self
.
title
=
title
self
.
sort
=
sort
self
.
author_sort
=
author_sort
...
...
cps/epub.py
View file @
622a2fc4
...
...
@@ -5,7 +5,7 @@ import zipfile
from
lxml
import
etree
import
os
import
uploader
from
iso639
import
languages
as
isoLanguages
def
extractCover
(
zip
,
coverFile
,
coverpath
,
tmp_file_name
):
if
coverFile
is
None
:
...
...
@@ -41,14 +41,34 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
p
=
tree
.
xpath
(
'/pkg:package/pkg:metadata'
,
namespaces
=
ns
)[
0
]
epub_metadata
=
{}
try
:
#maybe description isn't present
comments
=
tree
.
xpath
(
"//*[local-name() = 'description']/text()"
)[
0
]
epub_metadata
[
'comments'
]
=
comments
except
:
epub_metadata
[
'comments'
]
=
""
for
s
in
[
'title'
,
'description'
,
'creator'
]:
tmp
=
p
.
xpath
(
'dc:
%
s/text()'
%
s
,
namespaces
=
ns
)
if
len
(
tmp
)
>
0
:
epub_metadata
[
s
]
=
p
.
xpath
(
'dc:
%
s/text()'
%
s
,
namespaces
=
ns
)[
0
]
else
:
epub_metadata
[
s
]
=
"Unknown"
#detect lang need futher modification in web.py /upload
try
:
#maybe dc:language isn't present, less possible but possible
lang
=
p
.
xpath
(
'dc:language/text()'
,
namespaces
=
ns
)[
0
]
lang
=
lang
.
split
(
'-'
,
1
)[
0
]
lang
.
lower
()
if
len
(
lang
)
==
2
:
epub_metadata
[
'languages'
]
=
isoLanguages
.
get
(
part1
=
lang
)
.
name
elif
len
(
lang
)
==
3
:
epub_metadata
[
'languages'
]
=
isoLanguages
.
get
(
part3
=
lang
)
.
name
else
:
epub_metadata
[
'languages'
]
=
""
except
:
epub_metadata
[
'languages'
]
=
""
coversection
=
tree
.
xpath
(
"/pkg:package/pkg:manifest/pkg:item[@id='cover-image']/@href"
,
namespaces
=
ns
)
coverfile
=
None
if
len
(
coversection
)
>
0
:
coverfile
=
extractCover
(
zip
,
coversection
[
0
],
coverpath
,
tmp_file_path
)
else
:
...
...
@@ -59,20 +79,18 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
markup
=
zip
.
read
(
os
.
path
.
join
(
coverpath
,
coversection
[
0
]))
markupTree
=
etree
.
fromstring
(
markup
)
#no matter xhtml or html with no namespace
imgsrc
=
markupTree
.
xpath
(
"//*[local-name() = 'img']/@src"
)
imgsrc
=
markupTree
.
xpath
(
"//*[local-name() = 'img']/@src"
)
#imgsrc maybe startwith "../"" so fullpath join then relpath to cwd
filename
=
os
.
path
.
relpath
(
os
.
path
.
join
(
os
.
path
.
dirname
(
os
.
path
.
join
(
coverpath
,
coversection
[
0
])),
imgsrc
[
0
]))
coverfile
=
extractCover
(
zip
,
filename
,
""
,
tmp_file_path
)
filename
=
os
.
path
.
relpath
(
os
.
path
.
join
(
os
.
path
.
dirname
(
os
.
path
.
join
(
coverpath
,
coversection
[
0
])),
imgsrc
[
0
]))
coverfile
=
extractCover
(
zip
,
filename
,
""
,
tmp_file_path
)
else
:
coverfile
=
extractCover
(
zip
,
coversection
[
0
],
coverpath
,
tmp_file_path
)
else
:
meta_cover
=
tree
.
xpath
(
"/pkg:package/pkg:metadata/pkg:meta[@name='cover']/@content"
,
namespaces
=
ns
)
if
len
(
meta_cover
)
>
0
:
meta_cover_content
=
tree
.
xpath
(
"/pkg:package/pkg:manifest/pkg:item[@id='"
+
meta_cover
[
0
]
+
"']/@href"
,
namespaces
=
ns
)
meta_cover_content
=
tree
.
xpath
(
"/pkg:package/pkg:manifest/pkg:item[@id='"
+
meta_cover
[
0
]
+
"']/@href"
,
namespaces
=
ns
)
if
len
(
meta_cover_content
)
>
0
:
coverfile
=
extractCover
(
zip
,
meta_cover_content
[
0
],
coverpath
,
tmp_file_path
)
else
:
coverfile
=
None
if
epub_metadata
[
'title'
]
is
None
:
title
=
original_file_name
...
...
@@ -88,4 +106,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
description
=
epub_metadata
[
'description'
],
tags
=
""
,
series
=
""
,
series_id
=
""
)
series_id
=
""
,
comments
=
epub_metadata
[
'comments'
],
languages
=
epub_metadata
[
'languages'
])
cps/fb2.py
View file @
622a2fc4
...
...
@@ -59,4 +59,5 @@ def get_fb2_info(tmp_file_path, original_file_extension):
description
=
description
,
tags
=
""
,
series
=
""
,
series_id
=
""
)
series_id
=
""
,
languages
=
""
)
cps/uploader.py
View file @
622a2fc4
...
...
@@ -7,7 +7,7 @@ import hashlib
from
collections
import
namedtuple
import
book_formats
BookMeta
=
namedtuple
(
'BookMeta'
,
'file_path, extension, title, author, cover, description, tags, series, series_id'
)
BookMeta
=
namedtuple
(
'BookMeta'
,
'file_path, extension, title, author, cover, description, tags, series, series_id
, comments, languages
'
)
"""
:rtype: BookMeta
...
...
cps/web.py
View file @
622a2fc4
...
...
@@ -5,7 +5,7 @@ import logging
from
logging.handlers
import
RotatingFileHandler
import
textwrap
from
flask
import
Flask
,
render_template
,
request
,
Response
,
redirect
,
url_for
,
send_from_directory
,
\
make_response
,
g
,
flash
,
abort
make_response
,
g
,
flash
,
abort
,
Markup
from
flask
import
__version__
as
flaskVersion
import
ub
from
ub
import
config
...
...
@@ -2209,16 +2209,39 @@ def upload():
else
:
db_author
=
db
.
Authors
(
author
,
helper
.
get_sorted_author
(
author
),
""
)
db
.
session
.
add
(
db_author
)
#add language actually one value in list
input_language
=
meta
.
languages
db_language
=
None
if
input_language
!=
""
:
input_language
=
isoLanguages
.
get
(
name
=
input_language
)
.
part3
hasLanguage
=
db
.
session
.
query
(
db
.
Languages
)
.
filter
(
db
.
Languages
.
lang_code
==
input_language
)
.
first
()
if
hasLanguage
:
db_language
=
hasLanguage
else
:
db_language
=
db
.
Languages
(
input_language
)
db
.
session
.
add
(
db_language
)
# combine path and normalize path from windows systems
path
=
os
.
path
.
join
(
author_dir
,
title_dir
)
.
replace
(
'
\\
'
,
'/'
)
db_book
=
db
.
Books
(
title
,
""
,
db_author
.
sort
,
datetime
.
datetime
.
now
(),
datetime
.
datetime
(
101
,
01
,
01
),
1
,
datetime
.
datetime
.
now
(),
path
,
has_cover
,
db_author
,
[])
datetime
.
datetime
.
now
(),
path
,
has_cover
,
db_author
,
[]
,
db_language
)
db_book
.
authors
.
append
(
db_author
)
if
db_language
is
not
None
:
db_book
.
languages
.
append
(
db_language
)
db_data
=
db
.
Data
(
db_book
,
meta
.
extension
.
upper
()[
1
:],
file_size
,
data_name
)
db_book
.
data
.
append
(
db_data
)
db
.
session
.
add
(
db_book
)
db
.
session
.
flush
()
# flush content get db_book.id avalible
#add comment
upload_comment
=
Markup
(
meta
.
comments
)
.
unescape
()
db_comment
=
None
if
upload_comment
!=
""
:
db_comment
=
db
.
Comments
(
upload_comment
,
db_book
.
id
)
db
.
session
.
add
(
db_comment
)
db
.
session
.
commit
()
if
db_language
is
not
None
:
#display Full name instead of iso639.part3
db_book
.
languages
[
0
]
.
language_name
=
_
(
meta
.
languages
)
author_names
=
[]
for
author
in
db_book
.
authors
:
author_names
.
append
(
author
.
name
)
...
...
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