Skip to content

Commit 209a24c

Browse files
authored
Merge pull request #95 from FreeTAKTeam/fix-and-extend-filmology
Fix and extend filmology example
2 parents f671592 + 0becb41 commit 209a24c

File tree

12 files changed

+220
-24
lines changed

12 files changed

+220
-24
lines changed

digitalpy/core/digipy_configuration/impl/inifile_configuration.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,11 @@ def parse_ini_stream(self, config_array: dict, stream: TextIOBase):
191191
if value.startswith("[") and not value.endswith("]"):
192192
while True:
193193
line = next(lines).strip()
194+
195+
# ignore comments and empty lines
196+
if line == "" or line[0] == ";":
197+
continue
198+
194199
if line.endswith("]"):
195200
value+=line
196201
break

examples/filmology_app/components/FilmologyManagement/configuration/model_definitions/Actor.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"CompositionPosterPrimary":
4646
{
4747
"$ref": "#/definitions/Poster"
48-
},,,
48+
},
4949
"Date":
5050
{
5151
"$ref": "#/definitions/Date"

examples/filmology_app/components/FilmologyManagement/configuration/model_definitions/Date.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
"CompositionPosterPrimary":
5757
{
5858
"$ref": "#/definitions/Poster"
59-
},,,
59+
},
6060
"Date":
6161
{
6262
"$ref": "#/definitions/Date"

examples/filmology_app/components/FilmologyManagement/configuration/model_definitions/Director.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"CompositionPosterPrimary":
4646
{
4747
"$ref": "#/definitions/Poster"
48-
},,,
48+
},
4949
"Date":
5050
{
5151
"$ref": "#/definitions/Date"

examples/filmology_app/components/FilmologyManagement/configuration/model_definitions/Movie.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"CompositionPosterPrimary":
4040
{
4141
"$ref": "#/definitions/Poster"
42-
},,,
42+
},
4343
"Date":
4444
{
4545
"$ref": "#/definitions/Date"

examples/filmology_app/components/FilmologyManagement/configuration/model_definitions/Poster.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"CompositionPosterPrimary":
4646
{
4747
"$ref": "#/definitions/Poster"
48-
},,,
48+
},
4949
"Date":
5050
{
5151
"$ref": "#/definitions/Date"

examples/filmology_app/components/FilmologyManagement/controllers/directors/date_director.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def construct_from_db(self, Date: 'DBDate', config_loader, base_object: 'Date' =
5050
self.Movie_builder.build_empty_object(config_loader=config_loader)
5151
self.Movie_builder.add_object_data(mapped_object=DateAggregationMovie, protocol=None)
5252
DateAggregationMovie_completed = self.Movie_builder.get_result()
53-
Date_completed.DateAggregationMovie.append(Movie_completed.oid)
53+
Date_completed.DateAggregationMovie.append(DateAggregationMovie_completed.oid)
5454

5555
return Date_completed
5656

examples/filmology_app/components/FilmologyManagement/persistence/date.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Date(FilmologyManagementBase):
1616
year: Mapped[str]
1717
name: Mapped[str]
1818

19-
DateAggregationMovie: Mapped[List["Movie"]] = relationship("Movie")
19+
DateAggregationMovie: Mapped[List["Movie"]] = relationship("Movie", lazy="joined")
2020

2121
@validates('DateAggregationMovie_oid')
2222
def validate_DateAggregationMovie_oid(self, key, DateAggregationMovie_oid):

examples/filmology_app/components/FilmologyManagement/persistence/movie.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ class Movie(FilmologyManagementBase):
3131
modified: Mapped[str]
3232

3333
CompositionPosterPrimary_oid: Mapped[str] = mapped_column(ForeignKey("Poster.oid"))
34-
CompositionPosterPrimary: Mapped["Poster"] = relationship("Poster")
34+
CompositionPosterPrimary: Mapped["Poster"] = relationship("Poster", lazy="joined")
3535
Date_oid: Mapped[str] = mapped_column(ForeignKey("Date.oid"))
36-
Date: Mapped["Date"] = relationship("Date")
36+
Date: Mapped["Date"] = relationship("Date", lazy="joined")
3737
CompositionActor_oid: Mapped[Optional[str]] = mapped_column(ForeignKey("Actor.oid"))
3838
Director_oid: Mapped[Optional[str]] = mapped_column(ForeignKey("Director.oid"))
3939

examples/filmology_app/tests/test_filmology_facade.py

Lines changed: 189 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,34 +24,209 @@ def filmology_management_db_mock():
2424
yield db_mock
2525

2626
db_mock.stop()
27-
if os.path.exists("filmology_management.db"):
28-
os.remove("filmology_management.db")
27+
28+
os.remove("filmology_management.db")
29+
30+
def seed_database(url):
31+
from sqlite3 import connect
32+
connect(url).executescript("""INSERT INTO Director (oid,creator,nationality,surname,created,last_editor,name,birth,description,modified) VALUES
33+
('Director:8721cddb-efe4-11ef-b8e9-60dd8ec76433','Michael Thompson','American','Thompson','2025-02-20','Sarah Lee','Michael','1985-08-30','A data scientist with expertise in machine learning and AI.','2025-02-22T14:45:00Z');
34+
INSERT INTO Actor (oid,creator,nationality,surname,created,last_editor,name,birth,description,modified,Movie_oid) VALUES
35+
('Actor:0393e0e8-efe4-11ef-875b-60dd8ec76433','Alice Johnson','Canadian','Johnson','2025-02-20','Bob Smith','Alice','1990-05-15','A software engineer specializing in backend development.','2025-02-21T10:15:30Z',NULL);
36+
INSERT INTO Date (oid,"year",name) VALUES
37+
('Date:c2aa3824-efdc-11ef-a8ca-60dd8ec76433','2004','bday'),
38+
('Date:faa3b1b4-efdb-11ef-8b1b-60dd8ec76433','2005','new day');
39+
INSERT INTO Genre (oid,name) VALUES
40+
('Genre:3b053d2a-ae98-11ef-bd08-60dd8ec76433','horror'),
41+
('Genre:8304ae3b-efdd-11ef-bd39-60dd8ec76433','tragedy');
42+
INSERT INTO Movie (oid,date,country,creator,color,created,last_editor,runtime,description,URL,plot,name,alias,modified,CompositionPosterPrimary_oid,Date_oid) VALUES
43+
('Movie:efba28d6-efe0-11ef-b7f9-60dd8ec76433','2025-02-22','Canada','Jane Doe','#FF5733','2025-02-20','John Smith','120 minutes','This is a sample project demonstrating JSON schema usage.','https://www.example.com/sample_project','A brief overview of the project''s objectives and scope.','Sample Project','sample_project','2025-02-21T15:30:00Z','Poster:f5698d56-efdb-11ef-a458-60dd8ec76433','Date:c2aa3824-efdc-11ef-a8ca-60dd8ec76433');
44+
INSERT INTO Poster (oid,name) VALUES
45+
('Poster:f5698d56-efdb-11ef-a458-60dd8ec76433','a poster'),
46+
('Poster:faa3b1b4-efdb-11ef-8b1b-60dd8ec76433','another poster');
47+
""").close()
2948

3049
@pytest.mark.usefixtures("filmology_management_db_mock")
31-
def test_post_director(client_mock, test_environment):
50+
def test_post_director_lifecycle(client_mock, test_environment):
3251
request, response, _ = test_environment
3352

3453
filmology_management_facade = initialize_facade(
35-
"filmology_app.components.FilmologyManagement.FilmologyManagement",
54+
"filmology_app.components.FilmologyManagement.FilmologyManagement_facade.FilmologyManagement",
3655
request,
3756
response,
3857
)
3958

59+
seed_database("filmology_management.db")
60+
4061
request.set_value("client", client_mock)
4162

4263
request.set_value("body", json.dumps({
43-
"creator": "John Doe",
64+
"created": "2025-02-20",
65+
"creator": "Michael Thompson",
66+
"last_editor": "Sarah Lee",
67+
"modified": "2025-02-22T14:45:00Z",
68+
"name": "Michael",
69+
"description": "A data scientist with expertise in machine learning and AI.",
70+
"surname": "Thompson",
71+
"birth": "1985-08-30",
4472
"nationality": "American",
45-
"surname": "Doe",
46-
"created": "2023-01-01",
47-
"last_editor": "Jane Smith",
48-
"name": "John",
49-
"birth": "1970-01-01",
50-
"description": "A well-known director",
51-
"modified": "2023-01-02"
52-
}))
73+
}).encode())
5374

5475
filmology_management_facade.execute("POSTDirector")
5576

5677
assert len(response.get_value("message")) == 1
57-
#assert response.get_value("message")[0] == "Director added successfully"
78+
assert response.get_value("message")[0].name == "Michael"
79+
assert response.get_value("message")[0].surname == "Thompson"
80+
assert response.get_value("message")[0].birth == "1985-08-30"
81+
assert response.get_value("message")[0].nationality == "American"
82+
assert response.get_value("message")[0].created == "2025-02-20"
83+
assert response.get_value("message")[0].creator == "Michael Thompson"
84+
assert response.get_value("message")[0].last_editor == "Sarah Lee"
85+
assert response.get_value("message")[0].description == "A data scientist with expertise in machine learning and AI."
86+
assert response.get_value("message")[0].modified == "2025-02-22T14:45:00Z"
87+
88+
@pytest.mark.usefixtures("filmology_management_db_mock")
89+
def test_get_director(client_mock, test_environment):
90+
request, response, _ = test_environment
91+
92+
filmology_management_facade = initialize_facade(
93+
"filmology_app.components.FilmologyManagement.FilmologyManagement_facade.FilmologyManagement",
94+
request,
95+
response,
96+
)
97+
98+
seed_database("filmology_management.db")
99+
100+
request.set_value("client", client_mock)
101+
102+
filmology_management_facade.execute("GETDirector")
103+
104+
assert len(response.get_value("message")) == 1
105+
assert response.get_value("message")[0].name == "Michael"
106+
assert response.get_value("message")[0].surname == "Thompson"
107+
assert response.get_value("message")[0].birth == "1985-08-30"
108+
assert response.get_value("message")[0].nationality == "American"
109+
assert response.get_value("message")[0].created == "2025-02-20"
110+
assert response.get_value("message")[0].creator == "Michael Thompson"
111+
112+
@pytest.mark.usefixtures("filmology_management_db_mock")
113+
def test_post_movie(client_mock, test_environment):
114+
request, response, _ = test_environment
115+
116+
filmology_management_facade = initialize_facade(
117+
"filmology_app.components.FilmologyManagement.FilmologyManagement_facade.FilmologyManagement",
118+
request,
119+
response,
120+
)
121+
122+
seed_database("filmology_management.db")
123+
124+
request.set_value("client", client_mock)
125+
126+
request.set_value("body", json.dumps({
127+
"created": "2025-02-20",
128+
"creator": "Jane Doe",
129+
"last_editor": "John Smith",
130+
"modified": "2025-02-21T15:30:00Z",
131+
"name": "Sample Project",
132+
"description": "This is a sample project demonstrating JSON schema usage.",
133+
"alias": "sample_project",
134+
"plot": "A brief overview of the project's objectives and scope.",
135+
"color": "#FF5733",
136+
"runtime": "120 minutes",
137+
"country": "Canada",
138+
"date": "2025-02-22",
139+
"URL": "https://www.example.com/sample_project",
140+
"CompositionPosterPrimary": "Poster:faa3b1b4-efdb-11ef-8b1b-60dd8ec76433",
141+
"Date": "Date:faa3b1b4-efdb-11ef-8b1b-60dd8ec76433",
142+
}).encode())
143+
144+
filmology_management_facade.execute("POSTMovie")
145+
146+
assert len(response.get_value("message")) == 1
147+
assert response.get_value("message")[0].name == "Sample Project"
148+
assert response.get_value("message")[0].alias == "sample_project"
149+
assert response.get_value("message")[0].plot == "A brief overview of the project's objectives and scope."
150+
assert response.get_value("message")[0].color == "#FF5733"
151+
assert response.get_value("message")[0].runtime == "120 minutes"
152+
assert response.get_value("message")[0].country == "Canada"
153+
assert response.get_value("message")[0].date == "2025-02-22"
154+
assert response.get_value("message")[0].URL == "https://www.example.com/sample_project"
155+
assert response.get_value("message")[0].created == "2025-02-20"
156+
assert response.get_value("message")[0].creator == "Jane Doe"
157+
assert response.get_value("message")[0].last_editor == "John Smith"
158+
assert response.get_value("message")[0].modified == "2025-02-21T15:30:00Z"
159+
160+
@pytest.mark.usefixtures("filmology_management_db_mock")
161+
def test_get_movies(client_mock, test_environment):
162+
request, response, _ = test_environment
163+
164+
filmology_management_facade = initialize_facade(
165+
"filmology_app.components.FilmologyManagement.FilmologyManagement_facade.FilmologyManagement",
166+
request,
167+
response,
168+
)
169+
170+
seed_database("filmology_management.db")
171+
172+
request.set_value("client", client_mock)
173+
174+
filmology_management_facade.execute("GETMovie")
175+
176+
assert len(response.get_value("message")) == 1
177+
assert response.get_value("message")[0].name == "Sample Project"
178+
assert response.get_value("message")[0].alias == "sample_project"
179+
assert response.get_value("message")[0].plot == "A brief overview of the project's objectives and scope."
180+
assert response.get_value("message")[0].color == "#FF5733"
181+
assert response.get_value("message")[0].runtime == "120 minutes"
182+
assert response.get_value("message")[0].country == "Canada"
183+
assert response.get_value("message")[0].date == "2025-02-22"
184+
assert response.get_value("message")[0].URL == "https://www.example.com/sample_project"
185+
assert response.get_value("message")[0].created == "2025-02-20"
186+
assert response.get_value("message")[0].creator == "Jane Doe"
187+
assert response.get_value("message")[0].last_editor == "John Smith"
188+
189+
@pytest.mark.usefixtures("filmology_management_db_mock")
190+
def test_post_date(client_mock, test_environment):
191+
request, response, _ = test_environment
192+
193+
filmology_management_facade = initialize_facade(
194+
"filmology_app.components.FilmologyManagement.FilmologyManagement_facade.FilmologyManagement",
195+
request,
196+
response,
197+
)
198+
199+
seed_database("filmology_management.db")
200+
201+
request.set_value("client", client_mock)
202+
203+
request.set_value("body", json.dumps({
204+
"year": "2005",
205+
"name": "new day",
206+
}).encode())
207+
208+
filmology_management_facade.execute("POSTDate")
209+
210+
assert len(response.get_value("message")) == 1
211+
assert response.get_value("message")[0].year == "2005"
212+
assert response.get_value("message")[0].name == "new day"
213+
214+
@pytest.mark.usefixtures("filmology_management_db_mock")
215+
def test_get_date(client_mock, test_environment):
216+
request, response, _ = test_environment
217+
218+
filmology_management_facade = initialize_facade(
219+
"filmology_app.components.FilmologyManagement.FilmologyManagement_facade.FilmologyManagement",
220+
request,
221+
response,
222+
)
223+
224+
seed_database("filmology_management.db")
225+
226+
request.set_value("client", client_mock)
227+
228+
filmology_management_facade.execute("GETDate")
229+
230+
assert len(response.get_value("message")) == 2
231+
assert response.get_value("message")[1].year == "2005"
232+
assert response.get_value("message")[1].name == "new day"

0 commit comments

Comments
 (0)