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
45ff9394
Commit
45ff9394
authored
Aug 23, 2020
by
OzzieIsaacs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix comma separated author names during for upload
parent
282859bc
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
23 deletions
+38
-23
epub.py
cps/epub.py
+3
-2
helper.py
cps/helper.py
+35
-21
No files found.
cps/epub.py
View file @
45ff9394
...
@@ -22,6 +22,7 @@ import zipfile
...
@@ -22,6 +22,7 @@ import zipfile
from
lxml
import
etree
from
lxml
import
etree
from
.
import
isoLanguages
from
.
import
isoLanguages
from
.helper
import
split_authors
from
.constants
import
BookMeta
from
.constants
import
BookMeta
...
@@ -64,9 +65,9 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
...
@@ -64,9 +65,9 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
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
:
if
s
==
'creator'
:
if
s
==
'creator'
:
epub_metadata
[
s
]
=
' & '
.
join
(
p
.
xpath
(
'dc:
%
s/text()'
%
s
,
namespaces
=
ns
))
epub_metadata
[
s
]
=
' & '
.
join
(
split_authors
(
p
.
xpath
(
'dc:
%
s/text()'
%
s
,
namespaces
=
ns
)
))
elif
s
==
'subject'
:
elif
s
==
'subject'
:
epub_metadata
[
s
]
=
', '
.
join
(
p
.
xpath
(
'dc:
%
s/text()'
%
s
,
namespaces
=
ns
))
epub_metadata
[
s
]
=
', '
.
join
(
p
.
xpath
(
'dc:
%
s/text()'
%
s
,
namespaces
=
ns
))
else
:
else
:
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
:
...
...
cps/helper.py
View file @
45ff9394
...
@@ -21,7 +21,6 @@ from __future__ import division, print_function, unicode_literals
...
@@ -21,7 +21,6 @@ from __future__ import division, print_function, unicode_literals
import
sys
import
sys
import
os
import
os
import
io
import
io
import
json
import
mimetypes
import
mimetypes
import
re
import
re
import
shutil
import
shutil
...
@@ -36,7 +35,7 @@ from babel.units import format_unit
...
@@ -36,7 +35,7 @@ from babel.units import format_unit
from
flask
import
send_from_directory
,
make_response
,
redirect
,
abort
from
flask
import
send_from_directory
,
make_response
,
redirect
,
abort
from
flask_babel
import
gettext
as
_
from
flask_babel
import
gettext
as
_
from
flask_login
import
current_user
from
flask_login
import
current_user
from
sqlalchemy.sql.expression
import
true
,
false
,
and_
,
or_
,
text
,
func
from
sqlalchemy.sql.expression
import
true
,
false
,
and_
,
text
,
func
from
werkzeug.datastructures
import
Headers
from
werkzeug.datastructures
import
Headers
from
werkzeug.security
import
generate_password_hash
from
werkzeug.security
import
generate_password_hash
from
.
import
calibre_db
from
.
import
calibre_db
...
@@ -59,10 +58,9 @@ try:
...
@@ -59,10 +58,9 @@ try:
except
ImportError
:
except
ImportError
:
use_PIL
=
False
use_PIL
=
False
from
.
import
logger
,
config
,
get_locale
,
db
,
ub
,
isoLanguages
,
worker
from
.
import
logger
,
config
,
get_locale
,
db
,
ub
,
worker
from
.
import
gdriveutils
as
gd
from
.
import
gdriveutils
as
gd
from
.constants
import
STATIC_DIR
as
_STATIC_DIR
from
.constants
import
STATIC_DIR
as
_STATIC_DIR
from
.pagination
import
Pagination
from
.subproc_wrapper
import
process_wait
from
.subproc_wrapper
import
process_wait
from
.worker
import
STAT_WAITING
,
STAT_FAIL
,
STAT_STARTED
,
STAT_FINISH_SUCCESS
from
.worker
import
STAT_WAITING
,
STAT_FAIL
,
STAT_STARTED
,
STAT_FINISH_SUCCESS
from
.worker
import
TASK_EMAIL
,
TASK_CONVERT
,
TASK_UPLOAD
,
TASK_CONVERT_ANY
from
.worker
import
TASK_EMAIL
,
TASK_CONVERT
,
TASK_UPLOAD
,
TASK_CONVERT_ANY
...
@@ -100,10 +98,10 @@ def convert_book_format(book_id, calibrepath, old_book_format, new_book_format,
...
@@ -100,10 +98,10 @@ def convert_book_format(book_id, calibrepath, old_book_format, new_book_format,
# text = _(u"%(format)s: %(book)s", format=new_book_format, book=book.title)
# text = _(u"%(format)s: %(book)s", format=new_book_format, book=book.title)
else
:
else
:
settings
=
dict
()
settings
=
dict
()
t
e
xt
=
(
u"
%
s ->
%
s:
%
s"
%
(
old_book_format
,
new_book_format
,
book
.
title
))
txt
=
(
u"
%
s ->
%
s:
%
s"
%
(
old_book_format
,
new_book_format
,
book
.
title
))
settings
[
'old_book_format'
]
=
old_book_format
settings
[
'old_book_format'
]
=
old_book_format
settings
[
'new_book_format'
]
=
new_book_format
settings
[
'new_book_format'
]
=
new_book_format
worker
.
add_convert
(
file_path
,
book
.
id
,
user_id
,
t
e
xt
,
settings
,
kindle_mail
)
worker
.
add_convert
(
file_path
,
book
.
id
,
user_id
,
txt
,
settings
,
kindle_mail
)
return
None
return
None
else
:
else
:
error_message
=
_
(
u"
%(format)
s not found:
%(fn)
s"
,
error_message
=
_
(
u"
%(format)
s not found:
%(fn)
s"
,
...
@@ -263,6 +261,22 @@ def get_valid_filename(value, replace_whitespace=True):
...
@@ -263,6 +261,22 @@ def get_valid_filename(value, replace_whitespace=True):
return
value
.
decode
(
'utf-8'
)
return
value
.
decode
(
'utf-8'
)
def
split_authors
(
values
):
authors_list
=
[]
for
value
in
values
:
authors
=
re
.
split
(
'[&;]'
,
value
)
for
author
in
authors
:
commas
=
author
.
count
(
','
)
if
commas
==
1
:
author_split
=
author
.
split
(
','
)
authors_list
.
append
(
author_split
[
1
]
+
' '
+
author_split
[
0
])
elif
commas
>
1
:
authors_list
.
append
(
author
.
split
(
','
))
else
:
authors_list
.
append
(
author
)
return
authors_list
def
get_sorted_author
(
value
):
def
get_sorted_author
(
value
):
try
:
try
:
if
','
not
in
value
:
if
','
not
in
value
:
...
@@ -303,8 +317,8 @@ def delete_book_file(book, calibrepath, book_format=None):
...
@@ -303,8 +317,8 @@ def delete_book_file(book, calibrepath, book_format=None):
log
.
warning
(
"Deleting book {} failed, path {} has subfolders: {}"
.
format
(
book
.
id
,
log
.
warning
(
"Deleting book {} failed, path {} has subfolders: {}"
.
format
(
book
.
id
,
book
.
path
,
folders
))
book
.
path
,
folders
))
return
True
,
_
(
"Deleting bookfolder for book
%(id)
s failed, path has subfolders:
%(path)
s"
,
return
True
,
_
(
"Deleting bookfolder for book
%(id)
s failed, path has subfolders:
%(path)
s"
,
id
=
book
.
id
,
id
=
book
.
id
,
path
=
book
.
path
)
path
=
book
.
path
)
shutil
.
rmtree
(
path
)
shutil
.
rmtree
(
path
)
except
(
IOError
,
OSError
)
as
e
:
except
(
IOError
,
OSError
)
as
e
:
log
.
error
(
"Deleting book
%
s failed:
%
s"
,
book
.
id
,
e
)
log
.
error
(
"Deleting book
%
s failed:
%
s"
,
book
.
id
,
e
)
...
@@ -319,8 +333,8 @@ def delete_book_file(book, calibrepath, book_format=None):
...
@@ -319,8 +333,8 @@ def delete_book_file(book, calibrepath, book_format=None):
else
:
else
:
log
.
error
(
"Deleting book
%
s failed, book path not valid:
%
s"
,
book
.
id
,
book
.
path
)
log
.
error
(
"Deleting book
%
s failed, book path not valid:
%
s"
,
book
.
id
,
book
.
path
)
return
True
,
_
(
"Deleting book
%(id)
s, book path not valid:
%(path)
s"
,
return
True
,
_
(
"Deleting book
%(id)
s, book path not valid:
%(path)
s"
,
id
=
book
.
id
,
id
=
book
.
id
,
path
=
book
.
path
)
path
=
book
.
path
)
def
update_dir_structure_file
(
book_id
,
calibrepath
,
first_author
):
def
update_dir_structure_file
(
book_id
,
calibrepath
,
first_author
):
...
@@ -366,6 +380,7 @@ def update_dir_structure_file(book_id, calibrepath, first_author):
...
@@ -366,6 +380,7 @@ def update_dir_structure_file(book_id, calibrepath, first_author):
src
=
path
,
dest
=
new_author_path
,
error
=
str
(
ex
))
src
=
path
,
dest
=
new_author_path
,
error
=
str
(
ex
))
# Rename all files from old names to new names
# Rename all files from old names to new names
if
authordir
!=
new_authordir
or
titledir
!=
new_titledir
:
if
authordir
!=
new_authordir
or
titledir
!=
new_titledir
:
new_name
=
""
try
:
try
:
new_name
=
get_valid_filename
(
localbook
.
title
)
+
' - '
+
get_valid_filename
(
new_authordir
)
new_name
=
get_valid_filename
(
localbook
.
title
)
+
' - '
+
get_valid_filename
(
new_authordir
)
path_name
=
os
.
path
.
join
(
calibrepath
,
new_authordir
,
os
.
path
.
basename
(
path
))
path_name
=
os
.
path
.
join
(
calibrepath
,
new_authordir
,
os
.
path
.
basename
(
path
))
...
@@ -474,14 +489,14 @@ def generate_random_password():
...
@@ -474,14 +489,14 @@ def generate_random_password():
return
""
.
join
(
s
[
c
%
len
(
s
)]
for
c
in
os
.
urandom
(
passlen
))
return
""
.
join
(
s
[
c
%
len
(
s
)]
for
c
in
os
.
urandom
(
passlen
))
def
uniq
(
inp
u
t
):
def
uniq
(
inpt
):
output
=
[]
output
=
[]
for
x
in
inpu
t
:
for
x
in
inp
t
:
if
x
not
in
output
:
if
x
not
in
output
:
output
.
append
(
x
)
output
.
append
(
x
)
return
output
return
output
#
################################# External interface
#
################################# External interface #################################
def
update_dir_stucture
(
book_id
,
calibrepath
,
first_author
=
None
):
def
update_dir_stucture
(
book_id
,
calibrepath
,
first_author
=
None
):
...
@@ -558,7 +573,6 @@ def save_cover_from_url(url, book_path):
...
@@ -558,7 +573,6 @@ def save_cover_from_url(url, book_path):
return
False
,
_
(
"Cover Format Error"
)
return
False
,
_
(
"Cover Format Error"
)
def
save_cover_from_filestorage
(
filepath
,
saved_filename
,
img
):
def
save_cover_from_filestorage
(
filepath
,
saved_filename
,
img
):
if
hasattr
(
img
,
'_content'
):
if
hasattr
(
img
,
'_content'
):
f
=
open
(
os
.
path
.
join
(
filepath
,
saved_filename
),
"wb"
)
f
=
open
(
os
.
path
.
join
(
filepath
,
saved_filename
),
"wb"
)
...
@@ -617,7 +631,6 @@ def save_cover(img, book_path):
...
@@ -617,7 +631,6 @@ def save_cover(img, book_path):
return
save_cover_from_filestorage
(
os
.
path
.
join
(
config
.
config_calibre_dir
,
book_path
),
"cover.jpg"
,
img
)
return
save_cover_from_filestorage
(
os
.
path
.
join
(
config
.
config_calibre_dir
,
book_path
),
"cover.jpg"
,
img
)
def
do_download_file
(
book
,
book_format
,
client
,
data
,
headers
):
def
do_download_file
(
book
,
book_format
,
client
,
data
,
headers
):
if
config
.
config_use_google_drive
:
if
config
.
config_use_google_drive
:
startTime
=
time
.
time
()
startTime
=
time
.
time
()
...
@@ -718,7 +731,7 @@ def render_task_status(tasklist):
...
@@ -718,7 +731,7 @@ def render_task_status(tasklist):
task
[
'runtime'
]
=
format_runtime
(
task
[
'formRuntime'
])
task
[
'runtime'
]
=
format_runtime
(
task
[
'formRuntime'
])
# localize the task status
# localize the task status
if
isinstance
(
task
[
'stat'
],
int
):
if
isinstance
(
task
[
'stat'
],
int
):
if
task
[
'stat'
]
==
STAT_WAITING
:
if
task
[
'stat'
]
==
STAT_WAITING
:
task
[
'status'
]
=
_
(
u'Waiting'
)
task
[
'status'
]
=
_
(
u'Waiting'
)
elif
task
[
'stat'
]
==
STAT_FAIL
:
elif
task
[
'stat'
]
==
STAT_FAIL
:
...
@@ -731,7 +744,7 @@ def render_task_status(tasklist):
...
@@ -731,7 +744,7 @@ def render_task_status(tasklist):
task
[
'status'
]
=
_
(
u'Unknown Status'
)
task
[
'status'
]
=
_
(
u'Unknown Status'
)
# localize the task type
# localize the task type
if
isinstance
(
task
[
'taskType'
],
int
):
if
isinstance
(
task
[
'taskType'
],
int
):
if
task
[
'taskType'
]
==
TASK_EMAIL
:
if
task
[
'taskType'
]
==
TASK_EMAIL
:
task
[
'taskMessage'
]
=
_
(
u'E-mail: '
)
+
task
[
'taskMess'
]
task
[
'taskMessage'
]
=
_
(
u'E-mail: '
)
+
task
[
'taskMess'
]
elif
task
[
'taskType'
]
==
TASK_CONVERT
:
elif
task
[
'taskType'
]
==
TASK_CONVERT
:
...
@@ -787,6 +800,7 @@ def get_cc_columns(filter_config_custom_read=False):
...
@@ -787,6 +800,7 @@ def get_cc_columns(filter_config_custom_read=False):
return
cc
return
cc
def
get_download_link
(
book_id
,
book_format
,
client
):
def
get_download_link
(
book_id
,
book_format
,
client
):
book_format
=
book_format
.
split
(
"."
)[
0
]
book_format
=
book_format
.
split
(
"."
)[
0
]
book
=
calibre_db
.
get_filtered_book
(
book_id
)
book
=
calibre_db
.
get_filtered_book
(
book_id
)
...
...
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