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
8c7ba2cc
Commit
8c7ba2cc
authored
Mar 03, 2017
by
OzzieIsaacs
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'gitignore/bookmeta-patch-20170302'
# Conflicts: # cps/epub.py
parents
19f939a4
1a10859a
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
62 additions
and
13 deletions
+62
-13
book_formats.py
cps/book_formats.py
+6
-2
db.py
cps/db.py
+1
-1
epub.py
cps/epub.py
+27
-6
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 @
8c7ba2cc
...
@@ -63,7 +63,9 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension):
...
@@ -63,7 +63,9 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension):
description
=
""
,
description
=
""
,
tags
=
""
,
tags
=
""
,
series
=
""
,
series
=
""
,
series_id
=
""
)
series_id
=
""
,
comments
=
""
,
languages
=
""
)
def
pdf_meta
(
tmp_file_path
,
original_file_name
,
original_file_extension
):
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):
...
@@ -91,7 +93,9 @@ def pdf_meta(tmp_file_path, original_file_name, original_file_extension):
description
=
subject
,
description
=
subject
,
tags
=
""
,
tags
=
""
,
series
=
""
,
series
=
""
,
series_id
=
""
)
series_id
=
""
,
comments
=
""
,
languages
=
""
)
def
pdf_preview
(
tmp_file_path
,
tmp_dir
):
def
pdf_preview
(
tmp_file_path
,
tmp_dir
):
...
...
cps/db.py
View file @
8c7ba2cc
...
@@ -247,7 +247,7 @@ class Books(Base):
...
@@ -247,7 +247,7 @@ class Books(Base):
identifiers
=
relationship
(
'Identifiers'
,
backref
=
'books'
)
identifiers
=
relationship
(
'Identifiers'
,
backref
=
'books'
)
def
__init__
(
self
,
title
,
sort
,
author_sort
,
timestamp
,
pubdate
,
series_index
,
last_modified
,
path
,
has_cover
,
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
.
title
=
title
self
.
sort
=
sort
self
.
sort
=
sort
self
.
author_sort
=
author_sort
self
.
author_sort
=
author_sort
...
...
cps/epub.py
View file @
8c7ba2cc
...
@@ -5,7 +5,7 @@ import zipfile
...
@@ -5,7 +5,7 @@ import zipfile
from
lxml
import
etree
from
lxml
import
etree
import
os
import
os
import
uploader
import
uploader
from
iso639
import
languages
as
isoLanguages
def
extractCover
(
zip
,
coverFile
,
coverpath
,
tmp_file_name
):
def
extractCover
(
zip
,
coverFile
,
coverpath
,
tmp_file_name
):
if
coverFile
is
None
:
if
coverFile
is
None
:
...
@@ -41,12 +41,31 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
...
@@ -41,12 +41,31 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
p
=
tree
.
xpath
(
'/pkg:package/pkg:metadata'
,
namespaces
=
ns
)[
0
]
p
=
tree
.
xpath
(
'/pkg:package/pkg:metadata'
,
namespaces
=
ns
)[
0
]
epub_metadata
=
{}
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'
]:
for
s
in
[
'title'
,
'description'
,
'creator'
]:
tmp
=
p
.
xpath
(
'dc:
%
s/text()'
%
s
,
namespaces
=
ns
)
tmp
=
p
.
xpath
(
'dc:
%
s/text()'
%
s
,
namespaces
=
ns
)
if
len
(
tmp
)
>
0
:
if
len
(
tmp
)
>
0
:
epub_metadata
[
s
]
=
p
.
xpath
(
'dc:
%
s/text()'
%
s
,
namespaces
=
ns
)[
0
]
epub_metadata
[
s
]
=
p
.
xpath
(
'dc:
%
s/text()'
%
s
,
namespaces
=
ns
)[
0
]
else
:
else
:
epub_metadata
[
s
]
=
"Unknown"
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
)
coversection
=
tree
.
xpath
(
"/pkg:package/pkg:manifest/pkg:item[@id='cover-image']/@href"
,
namespaces
=
ns
)
coverfile
=
None
coverfile
=
None
...
@@ -60,16 +79,16 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
...
@@ -60,16 +79,16 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
markup
=
zip
.
read
(
os
.
path
.
join
(
coverpath
,
coversection
[
0
]))
markup
=
zip
.
read
(
os
.
path
.
join
(
coverpath
,
coversection
[
0
]))
markupTree
=
etree
.
fromstring
(
markup
)
markupTree
=
etree
.
fromstring
(
markup
)
#no matter xhtml or html with no namespace
#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
#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
]))
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
)
coverfile
=
extractCover
(
zip
,
filename
,
""
,
tmp_file_path
)
else
:
else
:
coverfile
=
extractCover
(
zip
,
coversection
[
0
],
coverpath
,
tmp_file_path
)
coverfile
=
extractCover
(
zip
,
coversection
[
0
],
coverpath
,
tmp_file_path
)
else
:
else
:
meta_cover
=
tree
.
xpath
(
"/pkg:package/pkg:metadata/pkg:meta[@name='cover']/@content"
,
namespaces
=
ns
)
meta_cover
=
tree
.
xpath
(
"/pkg:package/pkg:metadata/pkg:meta[@name='cover']/@content"
,
namespaces
=
ns
)
if
len
(
meta_cover
)
>
0
:
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
:
if
len
(
meta_cover_content
)
>
0
:
coverfile
=
extractCover
(
zip
,
meta_cover_content
[
0
],
coverpath
,
tmp_file_path
)
coverfile
=
extractCover
(
zip
,
meta_cover_content
[
0
],
coverpath
,
tmp_file_path
)
...
@@ -87,4 +106,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
...
@@ -87,4 +106,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
description
=
epub_metadata
[
'description'
],
description
=
epub_metadata
[
'description'
],
tags
=
""
,
tags
=
""
,
series
=
""
,
series
=
""
,
series_id
=
""
)
series_id
=
""
,
comments
=
epub_metadata
[
'comments'
],
languages
=
epub_metadata
[
'languages'
])
cps/fb2.py
View file @
8c7ba2cc
...
@@ -59,4 +59,5 @@ def get_fb2_info(tmp_file_path, original_file_extension):
...
@@ -59,4 +59,5 @@ def get_fb2_info(tmp_file_path, original_file_extension):
description
=
description
,
description
=
description
,
tags
=
""
,
tags
=
""
,
series
=
""
,
series
=
""
,
series_id
=
""
)
series_id
=
""
,
languages
=
""
)
cps/uploader.py
View file @
8c7ba2cc
...
@@ -7,7 +7,7 @@ import hashlib
...
@@ -7,7 +7,7 @@ import hashlib
from
collections
import
namedtuple
from
collections
import
namedtuple
import
book_formats
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
:rtype: BookMeta
...
...
cps/web.py
View file @
8c7ba2cc
...
@@ -5,7 +5,7 @@ import logging
...
@@ -5,7 +5,7 @@ import logging
from
logging.handlers
import
RotatingFileHandler
from
logging.handlers
import
RotatingFileHandler
import
textwrap
import
textwrap
from
flask
import
Flask
,
render_template
,
request
,
Response
,
redirect
,
url_for
,
send_from_directory
,
\
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
from
flask
import
__version__
as
flaskVersion
import
ub
import
ub
from
ub
import
config
from
ub
import
config
...
@@ -2209,16 +2209,39 @@ def upload():
...
@@ -2209,16 +2209,39 @@ def upload():
else
:
else
:
db_author
=
db
.
Authors
(
author
,
helper
.
get_sorted_author
(
author
),
""
)
db_author
=
db
.
Authors
(
author
,
helper
.
get_sorted_author
(
author
),
""
)
db
.
session
.
add
(
db_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
# combine path and normalize path from windows systems
path
=
os
.
path
.
join
(
author_dir
,
title_dir
)
.
replace
(
'
\\
'
,
'/'
)
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
,
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
)
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_data
=
db
.
Data
(
db_book
,
meta
.
extension
.
upper
()[
1
:],
file_size
,
data_name
)
db_book
.
data
.
append
(
db_data
)
db_book
.
data
.
append
(
db_data
)
db
.
session
.
add
(
db_book
)
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
()
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
=
[]
author_names
=
[]
for
author
in
db_book
.
authors
:
for
author
in
db_book
.
authors
:
author_names
.
append
(
author
.
name
)
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