Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
H
hub
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Package registry
Operate
Terraform modules
Analyze
Contributor analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
thomasDOTwtf
hub
Commits
d1830bdf
Commit
d1830bdf
authored
Dec 26, 2020
by
HeJ
Browse files
Options
Downloads
Patches
Plain Diff
API Event import: support room_id, most other fields optional
parent
f1eb6d0e
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/api/tests/schedule.py
+6
-0
6 additions, 0 deletions
src/api/tests/schedule.py
src/api/views/schedule.py
+45
-18
45 additions, 18 deletions
src/api/views/schedule.py
with
51 additions
and
18 deletions
src/api/tests/schedule.py
+
6
−
0
View file @
d1830bdf
...
@@ -65,6 +65,9 @@ class ScheduleTest(TestCase):
...
@@ -65,6 +65,9 @@ class ScheduleTest(TestCase):
self
.
assertIsNotNone
(
event
.
schedule_end
)
self
.
assertIsNotNone
(
event
.
schedule_end
)
def
test_push_new_event
(
self
):
def
test_push_new_event
(
self
):
another_room
=
Room
(
conference
=
self
.
conf
,
assembly
=
self
.
assembly
,
room_type
=
Room
.
RoomType
.
STAGE
)
another_room
.
save
()
update
=
{
update
=
{
"
url
"
:
"
https://fahrplan.events.ccc.de/rc3/2020/Fahrplan/events/11583.html
"
,
"
url
"
:
"
https://fahrplan.events.ccc.de/rc3/2020/Fahrplan/events/11583.html
"
,
"
id
"
:
11583
,
"
id
"
:
11583
,
...
@@ -74,6 +77,7 @@ class ScheduleTest(TestCase):
...
@@ -74,6 +77,7 @@ class ScheduleTest(TestCase):
"
start
"
:
"
12:20
"
,
"
start
"
:
"
12:20
"
,
"
duration
"
:
"
01:30
"
,
"
duration
"
:
"
01:30
"
,
"
room
"
:
"
foo room
"
,
"
room
"
:
"
foo room
"
,
"
room_id
"
:
str
(
another_room
.
pk
),
"
slug
"
:
"
rc3-11583-rc3_eroffnung
"
,
"
slug
"
:
"
rc3-11583-rc3_eroffnung
"
,
"
title
"
:
"
#rC3 Er
\u00f6
ffnung
"
,
"
title
"
:
"
#rC3 Er
\u00f6
ffnung
"
,
"
subtitle
"
:
""
,
"
subtitle
"
:
""
,
...
@@ -103,3 +107,5 @@ class ScheduleTest(TestCase):
...
@@ -103,3 +107,5 @@ class ScheduleTest(TestCase):
self
.
assertTrue
(
'
rC3
'
in
event
.
name
,
f
'
Expected
"
rC3
"
in event name
"
{
event
.
name
}
"
.
'
)
self
.
assertTrue
(
'
rC3
'
in
event
.
name
,
f
'
Expected
"
rC3
"
in event name
"
{
event
.
name
}
"
.
'
)
self
.
assertEqual
(
timedelta
(
minutes
=
90
),
event
.
schedule_duration
)
self
.
assertEqual
(
timedelta
(
minutes
=
90
),
event
.
schedule_duration
)
self
.
assertIsNotNone
(
event
.
schedule_end
)
self
.
assertIsNotNone
(
event
.
schedule_end
)
self
.
assertEqual
(
another_room
.
pk
,
event
.
room_id
,
'
Expected import to prefer
"
room_id
"
over
"
room
"
.
'
)
This diff is collapsed.
Click to expand it.
src/api/views/schedule.py
+
45
−
18
View file @
d1830bdf
...
@@ -10,6 +10,7 @@ from rest_framework.response import Response
...
@@ -10,6 +10,7 @@ from rest_framework.response import Response
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
import
pytz
import
pytz
from
core.models.assemblies
import
Assembly
from
core.models.events
import
Event
from
core.models.events
import
Event
from
core.models.rooms
import
Room
from
core.models.rooms
import
Room
from
core.models.conference
import
ConferenceTrack
from
core.models.conference
import
ConferenceTrack
...
@@ -97,39 +98,65 @@ class EventSchedule(ConferenceSlugMixin, APIView):
...
@@ -97,39 +98,65 @@ class EventSchedule(ConferenceSlugMixin, APIView):
logger
.
warning
(
'
Event schedule POST: id %s did not exist yet, creating.
'
,
pk
)
logger
.
warning
(
'
Event schedule POST: id %s did not exist yet, creating.
'
,
pk
)
try
:
try
:
if
'
guid
'
in
event
:
if
(
event_guid
:
=
event
.
get
(
'
guid
'
))
is
not
None
:
if
event
[
'
guid
'
]
!=
str
(
obj
.
pk
):
if
event
_
guid
!=
str
(
obj
.
pk
):
logger
.
warning
(
'
Attempted update of event %s with guid
"
%s
"
.
'
,
obj
.
pk
,
event
[
"
guid
"
]
)
logger
.
warning
(
'
Attempted update of event %s with guid
"
%s
"
.
'
,
obj
.
pk
,
event
_
guid
)
return
JsonResponse
({
'
error
'
:
'
GUID mismatch.
'
})
return
JsonResponse
({
'
error
'
:
'
GUID mismatch.
'
}
,
status
=
400
)
if
'
slug
'
in
event
:
if
(
event_slug
:
=
event
.
get
(
'
slug
'
))
is
not
None
:
obj
.
slug
=
event
[
'
slug
'
]
obj
.
slug
=
event
_
slug
obj
.
room
=
Room
.
objects
.
get
(
conference
=
self
.
conference
,
name__iexact
=
event
[
'
room
'
])
if
(
event_roomid
:
=
event
.
get
(
'
room_id
'
))
is
not
None
:
obj
.
room
=
Room
.
objects
.
get
(
conference
=
self
.
conference
,
pk
=
event_roomid
)
elif
(
event_room
:
=
event
.
get
(
'
room
'
))
is
not
None
:
try
:
obj
.
room
=
Room
.
objects
.
get
(
conference
=
self
.
conference
,
name__iexact
=
event_room
)
except
Room
.
MultipleObjectsReturned
:
return
JsonResponse
({
'
error
'
:
'
Room name is not unique, please provide room_id!
'
},
status
=
400
)
if
(
event_assemblyid
:
=
event
.
get
(
'
assembly_id
'
))
is
not
None
:
obj
.
assembly
=
Assembly
.
objects
.
get
(
conference
=
self
.
conference
,
pk
=
event_assemblyid
)
elif
(
event_assemblyslug
:
=
event
.
get
(
'
assembly_slug
'
))
is
not
None
:
obj
.
assembly
=
Assembly
.
objects
.
get
(
conference
=
self
.
conference
,
slug__iexact
=
event_assemblyslug
)
if
obj
.
assembly_id
is
None
:
if
obj
.
room_id
is
not
None
:
obj
.
assembly
=
obj
.
room
.
assembly
obj
.
assembly
=
obj
.
room
.
assembly
else
:
return
JsonResponse
({
'
error
'
:
'
Assembly association missing, please provide assembly_id or a valid room.
'
},
status
=
400
)
obj
.
kind
=
'
assembly
'
if
not
obj
.
room
.
assembly
.
is_official
else
'
official
'
obj
.
kind
=
'
assembly
'
if
not
obj
.
room
.
assembly
.
is_official
else
'
official
'
obj
.
is_public
=
True
obj
.
is_public
=
True
if
'
title
'
in
event
:
if
(
event_title
:
=
event
.
get
(
'
title
'
))
is
not
None
:
obj
.
name
=
event
[
'
title
'
]
obj
.
name
=
event
_
title
if
'
language
'
in
event
:
if
(
event_
language
:
=
event
.
get
(
'
language
'
))
is
not
None
:
obj
.
language
=
event
[
'
language
'
]
obj
.
language
=
event
_
language
obj
.
description
=
str
(
event
[
'
abstract
'
])
+
"
\n\n
"
+
str
(
event
[
'
description
'
])
if
(
event_abstract
:
=
event
.
get
(
'
abstract
'
))
is
not
None
and
(
event_description
:
=
event
.
get
(
'
description
'
))
is
not
None
:
obj
.
description
=
str
(
event_abstract
)
+
'
\n\n
'
+
str
(
event_description
)
obj
.
schedule_start
=
parse_datetime
(
event
[
'
date
'
])
if
(
event_date
:
=
event
.
get
(
'
date
'
))
is
not
None
:
obj
.
schedule_duration
=
schedulexml_time_to_timedelta
(
event
[
'
duration
'
])
obj
.
schedule_start
=
parse_datetime
(
event_date
)
if
(
event_duration
:
=
event
.
get
(
'
duration
'
))
is
not
None
:
obj
.
schedule_duration
=
schedulexml_time_to_timedelta
(
event_duration
)
obj
.
track
=
ConferenceTrack
.
objects
.
get
(
conference
=
self
.
conference
,
name__iexact
=
event
[
'
track
'
])
if
(
event_track
:
=
event
.
get
(
'
track
'
))
is
not
None
:
obj
.
track
=
ConferenceTrack
.
objects
.
get
(
conference
=
self
.
conference
,
name__iexact
=
event_track
)
obj
.
additional_data
=
filter_additional_data
(
event
)
obj
.
additional_data
=
filter_additional_data
(
event
)
except
Assembly
.
DoesNotExist
:
return
Response
({
'
error
'
:
f
'
Assembly
{
event
.
get
(
"
assembly_id
"
)
}
/
{
event
.
get
(
"
assembly_slug
"
)
}
does not exist.
'
},
status
=
400
)
except
Room
.
DoesNotExist
:
except
Room
.
DoesNotExist
:
return
Response
({
'
error
'
:
'
Room {
} does not exist
'
.
format
(
event
[
'
room
'
])
},
status
=
400
)
return
Response
({
'
error
'
:
f
'
Room
{
event
.
get
(
"
room_id
"
)
}
/
{
event
.
get
(
"
room
"
)
}
does not exist.
'
},
status
=
400
)
except
ConferenceTrack
.
DoesNotExist
:
except
ConferenceTrack
.
DoesNotExist
:
return
Response
({
'
error
'
:
'
Track {
} does not exist
'
.
format
(
event
[
'
track
'
])
},
status
=
400
)
return
Response
({
'
error
'
:
f
'
Track
{
event
.
get
(
"
track_id
"
)
}
/
{
event
.
get
(
"
track
"
)
}
does not exist.
'
},
status
=
400
)
obj
.
save
()
obj
.
save
()
logger
.
info
(
'
Event %s updated via POST by %s
'
,
obj
,
request
.
user
)
logger
.
info
(
'
Event %s updated via POST by %s
'
,
obj
,
request
.
user
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment