Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Sith
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
59
Issues
59
List
Boards
Labels
Service Desk
Milestones
Merge Requests
9
Merge Requests
9
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
AE
Sith
Commits
eeb791c4
Commit
eeb791c4
authored
Oct 18, 2019
by
tleb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial autofill on UV
parent
6d0eba6b
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
167 additions
and
2 deletions
+167
-2
api/urls.py
api/urls.py
+1
-0
api/views/api.py
api/views/api.py
+97
-1
pedagogy/templates/pedagogy/uv_create.jinja
pedagogy/templates/pedagogy/uv_create.jinja
+68
-0
pedagogy/views.py
pedagogy/views.py
+1
-1
No files found.
api/urls.py
View file @
eeb791c4
...
...
@@ -53,4 +53,5 @@ urlpatterns = [
re_path
(
r
"^login/"
,
include
(
"rest_framework.urls"
,
namespace
=
"rest_framework"
)),
re_path
(
r
"^markdown$"
,
RenderMarkdown
,
name
=
"api_markdown"
),
re_path
(
r
"^mailings$"
,
FetchMailingLists
,
name
=
"mailings_fetch"
),
re_path
(
r
"^uv$"
,
uv_endpoint
,
name
=
"uv_endpoint"
),
]
api/views/api.py
View file @
eeb791c4
...
...
@@ -24,10 +24,15 @@
from
rest_framework.response
import
Response
from
rest_framework.decorators
import
api_view
,
renderer_classes
from
rest_framework.renderers
import
StaticHTMLRenderer
from
rest_framework.renderers
import
StaticHTMLRenderer
,
JSONRenderer
from
rest_framework.views
import
APIView
from
django.core.exceptions
import
PermissionDenied
from
rest_framework
import
serializers
import
urllib.request
import
json
from
core.templatetags.renderer
import
markdown
from
pedagogy.views
import
CanCreateUVFunctionMixin
@
api_view
([
"POST"
])
...
...
@@ -41,3 +46,94 @@ def RenderMarkdown(request):
except
:
data
=
"Error"
return
Response
(
data
)
@
api_view
([
"GET"
])
@
renderer_classes
((
JSONRenderer
,))
def
uv_endpoint
(
request
):
if
not
request
.
user
.
is_authenticated
or
not
CanCreateUVFunctionMixin
.
can_create_uv
(
request
.
user
):
raise
PermissionDenied
lang
=
"fr"
params
=
request
.
query_params
if
"year"
not
in
params
or
"code"
not
in
params
:
raise
serializers
.
ValidationError
(
"Missing query parameter"
)
uvs_url
=
"https://extranet1.utbm.fr/gpedago/api/guide/uvs/{lang}/{year}"
response
=
urllib
.
request
.
urlopen
(
uvs_url
.
format
(
lang
=
lang
,
year
=
params
[
"year"
]))
uvs
=
json
.
loads
(
response
.
read
().
decode
(
"utf-8"
))
try
:
found
=
next
(
uv
for
uv
in
uvs
if
uv
[
"code"
]
==
params
[
"code"
])
except
StopIteration
:
# shouldn't be 404, rather something like 204
return
Response
(
status
=
404
)
uv_url
=
"https://extranet1.utbm.fr/gpedago/api/guide/uv/{lang}/{year}/{code}/{formation}"
response
=
urllib
.
request
.
urlopen
(
uv_url
.
format
(
lang
=
lang
,
year
=
params
[
"year"
],
code
=
params
[
"code"
],
formation
=
found
[
"codeFormation"
],
)
)
uv
=
json
.
loads
(
response
.
read
().
decode
(
"utf-8"
))
res
=
{}
res
[
"credit_type"
]
=
found
[
"codeCategorie"
]
semesters
=
{
(
True
,
True
):
"AUTUMN_AND_SPRING"
,
(
True
,
False
):
"AUTOMN"
,
(
False
,
True
):
"SPRING"
,
}
res
[
"semester"
]
=
semesters
.
get
(
(
found
[
"ouvertAutomne"
],
found
[
"ouvertPrintemps"
]),
"CLOSED"
)
langs
=
{
"es"
:
"SP"
,
"en"
:
"EN"
,
"de"
:
"DE"
}
res
[
"language"
]
=
langs
.
get
(
uv
[
"codeLangue"
],
"FR"
)
if
uv
[
"departement"
]
==
"Pôle Humanités"
:
res
[
"department"
]
=
"HUMA"
else
:
departments
=
{
"AL"
:
"IMSI"
,
"AE"
:
"EE"
,
"GI"
:
"GI"
,
"GC"
:
"EE"
,
"GM"
:
"MC"
,
"TC"
:
"TC"
,
"GP"
:
"IMSI"
,
"ED"
:
"EDIM"
,
"AI"
:
"GI"
,
"AM"
:
"MC"
,
}
res
[
"department"
]
=
departments
.
get
(
uv
[
"codeFormation"
],
"NA"
)
res
[
"credits"
]
=
uv
[
"creditsEcts"
]
activities
=
(
"CM"
,
"TD"
,
"TP"
,
"THE"
,
"TE"
)
for
activity
in
activities
:
res
[
"hours_{}"
.
format
(
activity
)]
=
0
for
activity
in
uv
[
"activites"
]:
if
activity
[
"code"
]
in
activities
:
res
[
"hours_{}"
.
format
(
activity
[
"code"
])]
+=
activity
[
"nbh"
]
res
[
"manager"
]
=
uv
[
"automne"
][
"responsable"
]
res
[
"title"
]
=
uv
[
"libelle"
]
res
[
"objectives"
]
=
uv
[
"objectifs"
]
res
[
"program"
]
=
uv
[
"programme"
]
res
[
"skills"
]
=
uv
[
"acquisitionCompetences"
]
res
[
"key_concepts"
]
=
uv
[
"acquisitionNotions"
]
return
Response
(
res
)
pedagogy/templates/pedagogy/uv_create.jinja
0 → 100644
View file @
eeb791c4
{%
extends
"core/base.jinja"
%}
{%
block
title
%}
{%
trans
%}
Edit UV
{%
endtrans
%}
{%
endblock
%}
{%
block
content
%}
<h2>
{%
trans
%}
Edit UV
{%
endtrans
%}
</h2>
<form
action=
""
method=
"post"
enctype=
"multipart/form-data"
id=
"uv_edit"
>
{%
csrf_token
%}
{{
form.non_field_errors
()
}}
{%
for
field
in
form
%}
{%
if
not
field.is_hidden
%}
<p>
{{
field.errors
}}
<label
for=
"
{{
field.name
}}
"
>
{{
field.label
}}
</label>
{{
field
}}
{%
if
field.name
==
'code'
%}
<a
href=
"javascript:void(0)"
id=
"autofill"
>
Fill
</a>
{%
endif
%}
</p>
{%
endif
%}
{%
endfor
%}
<p><input
type=
"submit"
value=
"
{%
trans
%}
Update
{%
endtrans
%}
"
/></p>
</form>
{%
endblock
%}
{%
block
script
%}
{{
super
()
}}
<script
type=
"text/javascript"
>
document
.
addEventListener
(
'
DOMContentLoaded
'
,
function
()
{
const
autofillBtn
=
document
.
getElementById
(
'
autofill
'
)
const
codeInput
=
document
.
querySelector
(
'
input[name="code"]
'
)
autofillBtn
.
addEventListener
(
'
click
'
,
()
=>
{
const
today
=
new
Date
()
let
year
=
today
.
getFullYear
()
if
(
today
.
getMonth
()
<
7
)
{
// student year, starts in september
year
--
}
const
url
=
"
{{
url
(
'api:uv_endpoint'
)
}}
?year=
"
+
year
+
"
&code=
"
+
codeInput
.
value
$
.
getJSON
(
url
,
function
(
data
)
{
for
(
let
key
in
data
)
{
if
(
data
.
hasOwnProperty
(
key
))
{
const
el
=
document
.
querySelector
(
'
[name="
'
+
key
+
'
"]
'
)
if
(
el
.
tagName
==
'
TEXTAREA
'
)
{
el
.
parentNode
.
querySelector
(
'
.CodeMirror
'
).
CodeMirror
.
setValue
(
data
[
key
])
}
else
{
el
.
value
=
data
[
key
]
}
}
}
})
})
})
</script>
{%
endblock
%}
pedagogy/views.py
View file @
eeb791c4
...
...
@@ -294,7 +294,7 @@ class UVCreateView(CanCreateMixin, CreateView):
model
=
UV
form_class
=
UVForm
template_name
=
"
core/edit
.jinja"
template_name
=
"
pedagogy/uv_create
.jinja"
def
get_form_kwargs
(
self
):
kwargs
=
super
(
UVCreateView
,
self
).
get_form_kwargs
()
...
...
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