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
ee5677f3
Commit
ee5677f3
authored
Mar 26, 2018
by
OzzieIsaacs
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'multiload/master'
parents
3aa692df
0afa7cba
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
136 additions
and
115 deletions
+136
-115
layout.html
cps/templates/layout.html
+28
-6
web.py
cps/web.py
+108
-109
No files found.
cps/templates/layout.html
View file @
ee5677f3
...
...
@@ -55,11 +55,20 @@
<ul
class=
"nav navbar-nav navbar-right"
id=
"main-nav"
>
{% if g.user.is_authenticated or g.user.is_anonymous %}
{% if g.user.role_upload() or g.user.role_admin()%}
{% if g.allow_upload %}
<li>
<form
id=
"form-upload-multi"
class=
"navbar-form"
action=
"{{ url_for('upload') }}"
method=
"post"
enctype=
"multipart/form-data"
>
<div
class=
"form-group"
>
<span
class=
"btn btn-default btn-file"
>
{{_('Upload')}} multiple books
<input
id=
"btn-upload-multi"
name=
"btn-upload"
type=
"file"
multiple
></span>
</div>
</form>
</li>
{% endif %}
{% if g.allow_upload %}
<li>
<form
id=
"form-upload"
class=
"navbar-form"
action=
"{{ url_for('upload') }}"
method=
"post"
enctype=
"multipart/form-data"
>
<div
class=
"form-group"
>
<span
class=
"btn btn-default btn-file"
>
{{_('Upload')}}
<input
id=
"btn-upload"
name=
"btn-upload"
type=
"file"
></span>
<span
class=
"btn btn-default btn-file"
>
{{_('Upload')}}
a single book
<input
id=
"btn-upload"
name=
"btn-upload"
type=
"file"
></span>
</div>
</form>
</li>
...
...
@@ -98,6 +107,14 @@
</div>
{%endif%}
{% endfor %}
<div
id=
"loader"
hidden=
"true"
>
<center>
<h3>
Uploading...
</h3>
<span>
please don't refresh the page
</span>
.
<br
/>
<img
src=
"{{ url_for('static', filename='img/loader.gif') }}"
>
</center>
</div>
<div
class=
"container-fluid"
>
<div
class=
"row-fluid"
>
{% if g.user.is_authenticated or g.user.is_anonymous %}
...
...
@@ -224,11 +241,16 @@
<script
src=
"{{ url_for('static', filename='js/libs/jquery.form.js') }}"
></script>
<script
src=
"{{ url_for('static', filename='js/main.js') }}"
></script>
<script
type=
"text/javascript"
>
$
(
function
()
{
$
(
"#btn-upload"
).
change
(
function
()
{
$
(
"#form-upload"
).
submit
();
});
});
$
(
function
()
{
$
(
"#btn-upload"
).
change
(
function
()
{
$
(
"#loader"
).
show
();
$
(
"#form-upload"
).
submit
();
});
$
(
"#btn-upload-multi"
).
change
(
function
()
{
$
(
"#loader"
).
show
();
$
(
"#form-upload-multi"
).
submit
();
});
});
</script>
{% block js %}{% endblock %}
...
...
cps/web.py
View file @
ee5677f3
...
...
@@ -3174,128 +3174,127 @@ def upload():
if
not
config
.
config_uploading
:
abort
(
404
)
# create the function for sorting...
db
.
session
.
connection
()
.
connection
.
connection
.
create_function
(
"title_sort"
,
1
,
db
.
title_sort
)
db
.
session
.
connection
()
.
connection
.
connection
.
create_function
(
'uuid4'
,
0
,
lambda
:
str
(
uuid4
()))
if
request
.
method
==
'POST'
and
'btn-upload'
in
request
.
files
:
requested_file
=
request
.
files
[
'btn-upload'
]
if
'.'
in
requested_file
.
filename
:
file_ext
=
requested_file
.
filename
.
rsplit
(
'.'
,
1
)[
-
1
]
.
lower
()
if
file_ext
not
in
ALLOWED_EXTENSIONS
:
flash
(
_
(
'File extension "
%
s" is not allowed to be uploaded to this server'
%
file_ext
),
category
=
"error"
)
for
requested_file
in
request
.
files
.
getlist
(
"btn-upload"
):
db
.
session
.
connection
()
.
connection
.
connection
.
create_function
(
"title_sort"
,
1
,
db
.
title_sort
)
db
.
session
.
connection
()
.
connection
.
connection
.
create_function
(
'uuid4'
,
0
,
lambda
:
str
(
uuid4
()))
if
'.'
in
requested_file
.
filename
:
file_ext
=
requested_file
.
filename
.
rsplit
(
'.'
,
1
)[
-
1
]
.
lower
()
if
file_ext
not
in
ALLOWED_EXTENSIONS
:
flash
(
_
(
'File extension "
%
s" is not allowed to be uploaded to this server'
%
file_ext
),
category
=
"error"
)
return
redirect
(
url_for
(
'index'
))
else
:
flash
(
_
(
'File to be uploaded must have an extension'
),
category
=
"error"
)
return
redirect
(
url_for
(
'index'
))
else
:
flash
(
_
(
'File to be uploaded must have an extension'
),
category
=
"error"
)
return
redirect
(
url_for
(
'index'
))
meta
=
uploader
.
upload
(
requested_file
)
title
=
meta
.
title
author
=
meta
.
author
tags
=
meta
.
tags
series
=
meta
.
series
series_index
=
meta
.
series_id
title_dir
=
helper
.
get_valid_filename
(
title
)
author_dir
=
helper
.
get_valid_filename
(
author
)
data_name
=
title_dir
filepath
=
config
.
config_calibre_dir
+
os
.
sep
+
author_dir
+
os
.
sep
+
title_dir
saved_filename
=
filepath
+
os
.
sep
+
data_name
+
meta
.
extension
.
lower
()
if
not
os
.
path
.
exists
(
filepath
):
meta
=
uploader
.
upload
(
requested_file
)
title
=
meta
.
title
author
=
meta
.
author
tags
=
meta
.
tags
series
=
meta
.
series
series_index
=
meta
.
series_id
title_dir
=
helper
.
get_valid_filename
(
title
)
author_dir
=
helper
.
get_valid_filename
(
author
)
data_name
=
title_dir
filepath
=
config
.
config_calibre_dir
+
os
.
sep
+
author_dir
+
os
.
sep
+
title_dir
saved_filename
=
filepath
+
os
.
sep
+
data_name
+
meta
.
extension
.
lower
()
if
not
os
.
path
.
exists
(
filepath
):
try
:
os
.
makedirs
(
filepath
)
except
OSError
:
flash
(
_
(
u"Failed to create path
%
s (Permission denied)."
%
filepath
),
category
=
"error"
)
return
redirect
(
url_for
(
'index'
))
try
:
os
.
makedirs
(
filepath
)
copyfile
(
meta
.
file_path
,
saved_filename
)
except
OSError
:
flash
(
_
(
u"Failed to
create path
%
s (Permission denied)."
%
filepath
),
category
=
"error"
)
flash
(
_
(
u"Failed to
store file
%
s (Permission denied)."
%
saved_filename
),
category
=
"error"
)
return
redirect
(
url_for
(
'index'
))
try
:
copyfile
(
meta
.
file_path
,
saved_filename
)
except
OSError
:
flash
(
_
(
u"Failed to store file
%
s (Permission denied)."
%
saved_filename
),
category
=
"error"
)
return
redirect
(
url_for
(
'index'
))
try
:
os
.
unlink
(
meta
.
file_path
)
except
OSError
:
flash
(
_
(
u"Failed to delete file
%
s (Permission denied)."
%
meta
.
file_path
),
category
=
"warning"
)
try
:
os
.
unlink
(
meta
.
file_path
)
except
OSError
:
flash
(
_
(
u"Failed to delete file
%
s (Permission denied)."
%
meta
.
file_path
),
category
=
"warning"
)
file_size
=
os
.
path
.
getsize
(
saved_filename
)
if
meta
.
cover
is
None
:
has_cover
=
0
basedir
=
os
.
path
.
dirname
(
__file__
)
copyfile
(
os
.
path
.
join
(
basedir
,
"static/generic_cover.jpg"
),
os
.
path
.
join
(
filepath
,
"cover.jpg"
))
else
:
has_cover
=
1
move
(
meta
.
cover
,
os
.
path
.
join
(
filepath
,
"cover.jpg"
))
file_size
=
os
.
path
.
getsize
(
saved_filename
)
if
meta
.
cover
is
None
:
has_cover
=
0
basedir
=
os
.
path
.
dirname
(
__file__
)
copyfile
(
os
.
path
.
join
(
basedir
,
"static/generic_cover.jpg"
),
os
.
path
.
join
(
filepath
,
"cover.jpg"
))
else
:
has_cover
=
1
move
(
meta
.
cover
,
os
.
path
.
join
(
filepath
,
"cover.jpg"
))
is_author
=
db
.
session
.
query
(
db
.
Authors
)
.
filter
(
db
.
Authors
.
name
==
author
)
.
first
()
if
is_author
:
db_author
=
is_author
else
:
db_author
=
db
.
Authors
(
author
,
helper
.
get_sorted_author
(
author
),
""
)
db
.
session
.
add
(
db_author
)
db_series
=
None
is_series
=
db
.
session
.
query
(
db
.
Series
)
.
filter
(
db
.
Series
.
name
==
series
)
.
first
()
if
is_series
:
db_series
=
is_series
elif
series
!=
''
:
db_series
=
db
.
Series
(
series
,
""
)
db
.
session
.
add
(
db_series
)
# 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
is_author
=
db
.
session
.
query
(
db
.
Authors
)
.
filter
(
db
.
Authors
.
name
==
author
)
.
first
()
if
is_author
:
db_author
=
is_author
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
,
1
,
1
),
series_index
,
datetime
.
datetime
.
now
(),
path
,
has_cover
,
db_author
,
[],
db_language
)
db_book
.
authors
.
append
(
db_author
)
if
db_series
:
db_book
.
series
.
append
(
db_series
)
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
.
description
)
.
unescape
()
if
upload_comment
!=
""
:
db
.
session
.
add
(
db
.
Comments
(
upload_comment
,
db_book
.
id
))
db
.
session
.
commit
()
db_author
=
db
.
Authors
(
author
,
helper
.
get_sorted_author
(
author
),
""
)
db
.
session
.
add
(
db_author
)
db_series
=
None
is_series
=
db
.
session
.
query
(
db
.
Series
)
.
filter
(
db
.
Series
.
name
==
series
)
.
first
()
if
is_series
:
db_series
=
is_series
elif
series
!=
''
:
db_series
=
db
.
Series
(
series
,
""
)
db
.
session
.
add
(
db_series
)
# 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
,
1
,
1
),
series_index
,
datetime
.
datetime
.
now
(),
path
,
has_cover
,
db_author
,
[],
db_language
)
db_book
.
authors
.
append
(
db_author
)
if
db_series
:
db_book
.
series
.
append
(
db_series
)
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
.
description
)
.
unescape
()
if
upload_comment
!=
""
:
db
.
session
.
add
(
db
.
Comments
(
upload_comment
,
db_book
.
id
))
db
.
session
.
commit
()
input_tags
=
tags
.
split
(
','
)
input_tags
=
list
(
map
(
lambda
it
:
it
.
strip
(),
input_tags
))
modify_database_object
(
input_tags
,
db_book
.
tags
,
db
.
Tags
,
db
.
session
,
'tags'
)
input_tags
=
tags
.
split
(
','
)
input_tags
=
list
(
map
(
lambda
it
:
it
.
strip
(),
input_tags
))
modify_database_object
(
input_tags
,
db_book
.
tags
,
db
.
Tags
,
db
.
session
,
'tags'
)
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
)
if
config
.
config_use_google_drive
:
updateGdriveCalibreFromLocal
()
cc
=
db
.
session
.
query
(
db
.
Custom_Columns
)
.
filter
(
db
.
Custom_Columns
.
datatype
.
notin_
(
db
.
cc_exceptions
))
.
all
()
if
current_user
.
role_edit
()
or
current_user
.
role_admin
():
return
render_title_template
(
'book_edit.html'
,
book
=
db_book
,
authors
=
author_names
,
cc
=
cc
,
title
=
_
(
u"edit metadata"
))
book_in_shelfs
=
[]
return
render_title_template
(
'detail.html'
,
entry
=
db_book
,
cc
=
cc
,
title
=
db_book
.
title
,
books_shelfs
=
book_in_shelfs
,
)
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
)
if
config
.
config_use_google_drive
:
updateGdriveCalibreFromLocal
()
if
len
(
request
.
files
.
getlist
(
"btn-upload"
))
<
2
:
cc
=
db
.
session
.
query
(
db
.
Custom_Columns
)
.
filter
(
db
.
Custom_Columns
.
datatype
.
notin_
(
db
.
cc_exceptions
))
.
all
()
if
current_user
.
role_edit
()
or
current_user
.
role_admin
():
return
render_title_template
(
'book_edit.html'
,
book
=
db_book
,
authors
=
author_names
,
cc
=
cc
,
title
=
_
(
u"edit metadata"
))
book_in_shelfs
=
[]
return
render_title_template
(
'detail.html'
,
entry
=
db_book
,
cc
=
cc
,
title
=
db_book
.
title
,
books_shelfs
=
book_in_shelfs
,
)
return
redirect
(
url_for
(
"index"
)
)
else
:
return
redirect
(
url_for
(
"index"
))
def
start_gevent
():
from
gevent.wsgi
import
WSGIServer
global
gevent_server
...
...
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