Skip to content

Commit 0b2682a

Browse files
authored
Merge pull request #3300 from JdeRobot/add-admin-buttons
Add admin buttons for db save
2 parents a7bd62b + bdd0de2 commit 0b2682a

File tree

11 files changed

+137
-10
lines changed

11 files changed

+137
-10
lines changed

compose_cfg/dev_humble_cpu.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ services:
22
my-postgres:
33
image: jderobot/robotics-database:latest
44
container_name: universe_db
5+
networks:
6+
- db_network
57
environment:
68
POSTGRES_DB: academy_db
79
POSTGRES_USER: user-dev
@@ -22,6 +24,8 @@ services:
2224
robotics-academy:
2325
image: jderobot/robotics-academy:latest
2426
container_name: developer-container
27+
networks:
28+
- db_network
2529
command: "-s"
2630
ports:
2731
- "7164:7164"
@@ -34,8 +38,12 @@ services:
3438
- type: bind
3539
source: ./src
3640
target: /RoboticsApplicationManager
41+
- ./RoboticsInfrastructure/database/universes.sql:/universes.sql
3742
tty: true
3843
stdin_open: true
3944
depends_on:
4045
my-postgres:
4146
condition: service_healthy
47+
48+
networks:
49+
db_network:

compose_cfg/dev_humble_gpu.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ services:
22
my-postgres:
33
image: jderobot/robotics-database:latest
44
container_name: universe_db
5+
networks:
6+
- db_network
57
environment:
68
POSTGRES_DB: academy_db
79
POSTGRES_USER: user-dev
@@ -22,6 +24,8 @@ services:
2224
robotics-academy:
2325
image: jderobot/robotics-academy:latest
2426
container_name: developer-container
27+
networks:
28+
- db_network
2529
command: "-s"
2630
devices:
2731
- /dev/dri:/dev/dri
@@ -36,8 +40,12 @@ services:
3640
- type: bind
3741
source: ./src
3842
target: /RoboticsApplicationManager
43+
- ./RoboticsInfrastructure/database/universes.sql:/universes.sql
3944
tty: true
4045
stdin_open: true
4146
depends_on:
4247
my-postgres:
4348
condition: service_healthy
49+
50+
networks:
51+
db_network:

compose_cfg/dev_humble_nvidia.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ services:
22
my-postgres:
33
image: jderobot/robotics-database:latest
44
container_name: universe_db
5+
networks:
6+
- db_network
57
environment:
68
POSTGRES_DB: academy_db
79
POSTGRES_USER: user-dev
@@ -22,6 +24,8 @@ services:
2224
robotics-academy:
2325
image: jderobot/robotics-academy:latest
2426
container_name: developer-container
27+
networks:
28+
- db_network
2529
command: "-s"
2630
deploy:
2731
resources:
@@ -46,10 +50,14 @@ services:
4650
- type: bind
4751
source: ./src
4852
target: /RoboticsApplicationManager
53+
- ./RoboticsInfrastructure/database/universes.sql:/universes.sql
4954
tty: true
5055
stdin_open: true
5156
depends_on:
5257
my-postgres:
5358
condition: service_healthy
5459
links:
5560
- my-postgres
61+
62+
networks:
63+
db_network:

compose_cfg/dev_humble_nvidia_windows.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ services:
22
my-postgres:
33
image: jderobot/robotics-database:latest
44
container_name: universe_db
5+
networks:
6+
- db_network
57
environment:
68
POSTGRES_DB: academy_db
79
POSTGRES_USER: user-dev
@@ -22,6 +24,8 @@ services:
2224
robotics-academy:
2325
image: jderobot/robotics-academy:latest
2426
container_name: developer-container
27+
networks:
28+
- db_network
2529
command: "-s"
2630
deploy:
2731
resources:
@@ -47,8 +51,12 @@ services:
4751
source: ./src
4852
target: /RoboticsApplicationManager
4953
- /usr/lib/wsl:/usr/lib/wsl
54+
- ./RoboticsInfrastructure/database/universes.sql:/universes.sql
5055
tty: true
5156
stdin_open: true
5257
depends_on:
5358
my-postgres:
5459
condition: service_healthy
60+
61+
networks:
62+
db_network:

docs/InstructionsForDevelopers.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -406,14 +406,11 @@ If there is need for additional resources such as images, you may add them insid
406406

407407
### Add the exercise to the database
408408

409-
It is also necessary to add the template for the frontend in the folder exercises/templates/exercises.
410-
411-
Then, create the entry in database/exercise/db.sql. This can be achieved in 2 ways, changing it directly on the database or using Django Web Admin:
409+
To add a exercise to the database you must use Django Web Admin:
412410
1) Launch the docker as normal.
413411
2) Access http://127.0.0.1:7164/admin/ on a browser and log in with "user" and "pass".
414412
3) Click on "add exercise" and fill the required fields specified below.
415-
4) Open a shell in the universe_db docker: ```docker exec -it universe_db bash```
416-
4) Dump the changes using ```./scripts/saveDb.sh```
413+
4) Save the exercise clicking on the "Local Save" button.
417414

418415
An exercise entry in the database must include the following data:
419416
- ```exercise id```: unique exercise identifier, must match the folder name

exercises/admin.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
from django.contrib import admin
22
from .models import Exercise, Universe, World, Tool, Robot
33

4+
from django.contrib import admin
45

56
# Register your models here.
67

7-
admin.site.register(Exercise)
8-
admin.site.register(Tool)
9-
admin.site.register(Universe)
10-
admin.site.register(World)
11-
admin.site.register(Robot)
8+
class SaveExAdmin(admin.ModelAdmin):
9+
change_list_template = './admin/change_list_ex.html'
10+
11+
class SaveUnivAdmin(admin.ModelAdmin):
12+
change_list_template = './admin/change_list_univ.html'
13+
14+
admin.site.register(Exercise, SaveExAdmin)
15+
admin.site.register(Tool, SaveUnivAdmin)
16+
admin.site.register(Universe, SaveUnivAdmin)
17+
admin.site.register(World, SaveUnivAdmin)
18+
admin.site.register(Robot, SaveUnivAdmin)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{% extends "admin/change_list.html" %}
2+
{% load i18n static %}
3+
4+
{% block object-tools-items %}
5+
{{ block.super }}
6+
<li>
7+
<style>#save-db-button{
8+
display: block;
9+
float: left;
10+
padding: 3px 12px;
11+
padding-right: 12px;
12+
background: var(--object-tools-bg);
13+
color: var(--object-tools-fg);
14+
font-weight: 400;
15+
font-size: 0.6875rem;
16+
text-transform: uppercase;
17+
letter-spacing: 0.5px;
18+
user-select: none;
19+
&:hover {
20+
background-color: var(--object-tools-hover-bg);
21+
}}</style>
22+
<a id="save-db-button" onclick="fetch('/exercises/save_exercise_db')" >Local Save</a>
23+
</li>
24+
{% endblock %}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{% extends "admin/change_list.html" %}
2+
{% load i18n static %}
3+
4+
{% block object-tools-items %}
5+
{{ block.super }}
6+
<li>
7+
<style>#save-db-button{
8+
display: block;
9+
float: left;
10+
padding: 3px 12px;
11+
padding-right: 12px;
12+
background: var(--object-tools-bg);
13+
color: var(--object-tools-fg);
14+
font-weight: 400;
15+
font-size: 0.6875rem;
16+
text-transform: uppercase;
17+
letter-spacing: 0.5px;
18+
user-select: none;
19+
&:hover {
20+
background-color: var(--object-tools-hover-bg);
21+
}}</style>
22+
<a id="save-db-button" onclick="fetch('/exercises/save_universe_db')" >Local Save</a>
23+
</li>
24+
{% endblock %}

exercises/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
urlpatterns = [
66
path("exercises/<slug:exercise_id>/", views.load_exercise, name="load_exercise"),
7+
path("save_exercise_db/", views.save_exercise_db, name="save_exercise_db"),
8+
path("save_universe_db/", views.save_universe_db, name="save_universe_db"),
79
path(
810
"user_code_zip/",
911
views.user_code_zip,

exercises/views.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import json
22
import os
3+
import subprocess
4+
import sys
35
from django.shortcuts import render
46
from django.http import HttpResponse
57
from django.conf import settings
@@ -59,6 +61,40 @@ def user_code_zip(request):
5961
)
6062

6163

64+
@csrf_exempt
65+
@api_view(["GET"])
66+
def save_exercise_db(request):
67+
68+
subprocess.Popen(
69+
[
70+
"""PGPASSWORD="robotics-academy-dev" pg_dump -U user-dev -d academy_db -h universe_db --table public.exercises --table public.exercises_universes --table public.exercises_tools > RoboticsAcademy/database/exercises/db.sql""",
71+
],
72+
shell=True,
73+
stdout=sys.stdout,
74+
stderr=subprocess.STDOUT,
75+
bufsize=1024,
76+
universal_newlines=True,
77+
)
78+
79+
return Response({"success": True})
80+
81+
@csrf_exempt
82+
@api_view(["GET"])
83+
def save_universe_db(request):
84+
85+
subprocess.Popen(
86+
[
87+
"""PGPASSWORD="robotics-academy-dev" pg_dump -U user-dev -d academy_db -h universe_db --table public.universes --table public.worlds --table public.robots --table public.tools > /universes.sql""",
88+
],
89+
shell=True,
90+
stdout=sys.stdout,
91+
stderr=subprocess.STDOUT,
92+
bufsize=1024,
93+
universal_newlines=True,
94+
)
95+
96+
return Response({"success": True})
97+
6298
@error_wrapper("GET", ["project"])
6399
def get_universes_list(request):
64100
project_name = request.GET.get("project")

0 commit comments

Comments
 (0)