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
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
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