Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
94
Merge Requests
10
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
132cf07d
authored
Jul 09, 2014
by
Kálmán Viktor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dashboard: add toplist
parent
e5d326ea
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
100 additions
and
38 deletions
+100
-38
circle/dashboard/store_api.py
+29
-4
circle/dashboard/templates/dashboard/index.html
+1
-3
circle/dashboard/templates/dashboard/store/index-files.html
+45
-0
circle/dashboard/urls.py
+3
-1
circle/dashboard/views.py
+22
-30
No files found.
circle/dashboard/store_api.py
View file @
132cf07d
from
django.http
import
Http404
import
json
import
requests
import
time
import
django.conf
from
datetime
import
datetime
from
sizefield.utils
import
filesizeformat
from
common.models
import
method_cache
settings
=
django
.
conf
.
settings
.
STORE_SETTINGS
...
...
@@ -93,9 +97,7 @@ def toplist(neptun):
r
=
post_request
(
url
,
payload
)
if
r
.
status_code
==
requests
.
codes
.
ok
:
tupplelist
=
json
.
loads
(
r
.
content
)
for
item
in
tupplelist
:
item
[
'MTIME'
]
=
time
.
ctime
(
item
[
'MTIME'
])
return
tupplelist
return
tupplelist
else
:
raise
Http404
...
...
@@ -197,3 +199,26 @@ def updateauthorizationinfo(neptun, password, key_list):
return
True
else
:
return
False
def
process_list
(
content
):
for
d
in
content
:
d
[
'human_readable_date'
]
=
datetime
.
utcfromtimestamp
(
float
(
d
[
'MTIME'
]))
delta
=
(
datetime
.
utcnow
()
-
d
[
'human_readable_date'
])
.
total_seconds
()
d
[
'is_new'
]
=
delta
<
5
and
delta
>
0
d
[
'human_readable_size'
]
=
(
"directory"
if
d
[
'TYPE'
]
==
"D"
else
filesizeformat
(
float
(
d
[
'SIZE'
])))
d
[
'path'
]
=
d
[
'DIR'
]
if
len
(
d
[
'path'
])
==
1
and
d
[
'path'
][
0
]
==
"."
:
d
[
'path'
]
=
"/"
else
:
d
[
'path'
]
=
"/"
+
d
[
'path'
]
+
"/"
d
[
'path'
]
+=
d
[
'NAME'
]
if
d
[
'TYPE'
]
==
"D"
:
d
[
'path'
]
+=
"/"
return
sorted
(
content
,
key
=
lambda
k
:
k
[
'TYPE'
])
circle/dashboard/templates/dashboard/index.html
View file @
132cf07d
...
...
@@ -23,11 +23,9 @@
</div>
{% endif %}
{% comment %}
<div
class=
"col-lg-4 col-sm-6"
>
{% include "dashboard/index-files.html" %}
{% include "dashboard/
store/
index-files.html" %}
</div>
{% endcomment %}
{% if perms.vm.create_template %}
<div
class=
"col-lg-4 col-sm-6"
>
...
...
circle/dashboard/templates/dashboard/store/index-files.html
0 → 100644
View file @
132cf07d
{% load i18n %}
<div
class=
"panel panel-default"
>
<div
class=
"panel-heading"
>
<span
class=
"btn btn-default btn-xs infobtn pull-right"
title=
"itten van valami"
>
<i
class=
"icon-info-sign"
></i>
</span>
<h3
class=
"no-margin"
><i
class=
"icon-briefcase"
></i>
Files
</h3>
</div>
<div
class=
"list-group"
id=
"vm-list-view"
>
{% for t in toplist %}
{% if t.TYPE == "F" %}
<div
class=
"list-group-item"
>
<i
class=
"icon-file"
></i>
{{ t.NAME }}
<a
href=
"{% url "
dashboard
.
views
.
store-download
"
%}?
path=
{{
t
.
path
}}"
class=
"pull-right btn btn-xs"
style=
"color: black;"
>
<i
class=
"icon-cloud-download"
title=
"{% trans "
Download
"
%}"
></i>
</a>
</div>
{% else %}
<a
href=
"{% url "
dashboard
.
views
.
store-list
"
%}?
directory=
{{
t
.
path
}}"
class=
"list-group-item"
>
<i
class=
"icon-folder-open"
></i>
{{ t.NAME }}
</a>
{% endif %}
{% endfor %}
<div
class=
"list-group-item list-group-footer text-right"
>
<p>
<form
class=
"pull-left"
method=
"POST"
action=
"{% url "
dashboard
.
views
.
store-refresh-toplist
"
%}"
>
{% csrf_token %}
<button
class=
"btn btn-success btn-xs"
type=
"submit"
title=
"{% trans "
Refresh
"
%}"
/>
<i
class=
"icon-refresh"
></i>
</button>
</form>
<a
href=
"{% url "
dashboard
.
views
.
store-list
"
%}"
class=
"btn btn-primary btn-xs"
>
<i
class=
"icon-chevron-sign-right"
></i>
{% trans "show my files" %}
</a>
<a
href=
"{% url "
dashboard
.
views
.
store-upload
"
%}"
class=
"btn btn-success btn-xs"
>
<i
class=
"icon-upload-alt"
></i>
{% trans "upload" %}
</a>
</p>
</div>
</div>
</div>
circle/dashboard/urls.py
View file @
132cf07d
...
...
@@ -38,7 +38,7 @@ from .views import (
ProfileView
,
toggle_use_gravatar
,
UnsubscribeFormView
,
UserKeyDelete
,
UserKeyDetail
,
UserKeyCreate
,
StoreList
,
store_download
,
store_upload
,
store_get_upload_url
,
StoreRemove
,
store_new_directory
,
store_new_directory
,
store_refresh_toplist
)
urlpatterns
=
patterns
(
...
...
@@ -184,4 +184,6 @@ urlpatterns = patterns(
name
=
"dashboard.views.store-remove"
),
url
(
r"^store/new_directory/$"
,
store_new_directory
,
name
=
"dashboard.views.store-new-directory"
),
url
(
r"^store/refresh_toplist$"
,
store_refresh_toplist
,
name
=
"dashboard.views.store-refresh-toplist"
),
)
circle/dashboard/views.py
View file @
132cf07d
...
...
@@ -35,6 +35,7 @@ from django.contrib.messages.views import SuccessMessageMixin
from
django.core.exceptions
import
(
PermissionDenied
,
SuspiciousOperation
,
)
from
django.core.cache
import
get_cache
from
django.core
import
signing
from
django.core.urlresolvers
import
reverse
,
reverse_lazy
from
django.db.models
import
Count
...
...
@@ -204,6 +205,15 @@ class IndexView(LoginRequiredMixin, TemplateView):
context
[
'templates'
]
=
InstanceTemplate
.
get_objects_with_level
(
'operator'
,
user
)
.
all
()[:
5
]
# toplist
cache
=
get_cache
(
"default"
)
toplist
=
cache
.
get
(
"toplist-test"
)
if
not
toplist
:
toplist
=
store_api
.
process_list
(
store_api
.
toplist
(
"test"
))
cache
.
set
(
"toplist-test"
,
toplist
,
300
)
context
[
'toplist'
]
=
toplist
return
context
...
...
@@ -2948,7 +2958,8 @@ class StoreList(LoginRequiredMixin, TemplateView):
directory
=
self
.
request
.
GET
.
get
(
"directory"
,
"/"
)
directory
=
"/"
if
not
len
(
directory
)
else
directory
context
[
'root'
]
=
self
.
clean_directory_list
(
directory
)
content
=
store_api
.
listfolder
(
"test"
,
directory
)
context
[
'root'
]
=
store_api
.
process_list
(
content
)
context
[
'up_url'
]
=
self
.
create_up_directory
(
directory
)
context
[
'current'
]
=
directory
context
[
'next_url'
]
=
"
%
s
%
s?directory=
%
s"
%
(
...
...
@@ -2970,34 +2981,6 @@ class StoreList(LoginRequiredMixin, TemplateView):
cut
=
-
2
if
directory
.
endswith
(
"/"
)
else
-
1
return
"/"
.
join
(
directory
.
split
(
"/"
)[:
cut
])
+
"/"
def
clean_directory_list
(
self
,
directory
):
from
datetime
import
datetime
from
sizefield.utils
import
filesizeformat
content
=
store_api
.
listfolder
(
"test"
,
directory
)
for
d
in
content
:
d
[
'human_readable_date'
]
=
datetime
.
utcfromtimestamp
(
float
(
d
[
'MTIME'
]))
delta
=
(
datetime
.
utcnow
()
-
d
[
'human_readable_date'
]
)
.
total_seconds
()
d
[
'is_new'
]
=
delta
<
5
and
delta
>
0
d
[
'human_readable_size'
]
=
(
"directory"
if
d
[
'TYPE'
]
==
"D"
else
filesizeformat
(
float
(
d
[
'SIZE'
])))
d
[
'path'
]
=
d
[
'DIR'
]
if
len
(
d
[
'path'
])
==
1
and
d
[
'path'
][
0
]
==
"."
:
d
[
'path'
]
=
"/"
else
:
d
[
'path'
]
=
"/"
+
d
[
'path'
]
+
"/"
d
[
'path'
]
+=
d
[
'NAME'
]
if
d
[
'TYPE'
]
==
"D"
:
d
[
'path'
]
+=
"/"
return
sorted
(
content
,
key
=
lambda
k
:
k
[
'TYPE'
])
@require_GET
@login_required
...
...
@@ -3010,7 +2993,7 @@ def store_download(request):
@require_GET
@login_required
def
store_upload
(
request
):
directory
=
request
.
GET
.
get
(
"directory"
)
directory
=
request
.
GET
.
get
(
"directory"
,
"/"
)
action
=
store_api
.
requestupload
(
"test"
,
directory
)
next_url
=
"
%
s
%
s?directory=
%
s"
%
(
settings
.
DJANGO_URL
[:
-
1
],
reverse
(
"dashboard.views.store-list"
),
...
...
@@ -3074,3 +3057,12 @@ def store_new_directory(request):
store_api
.
requestnewfolder
(
"test"
,
path
+
name
)
return
redirect
(
"
%
s?directory=
%
s"
%
(
reverse
(
"dashboard.views.store-list"
),
path
))
@require_POST
@login_required
def
store_refresh_toplist
(
request
):
cache
=
get_cache
(
"default"
)
toplist
=
store_api
.
process_list
(
store_api
.
toplist
(
"test"
))
cache
.
set
(
"toplist-test"
,
toplist
,
300
)
return
redirect
(
reverse
(
"dashboard.index"
))
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