diff --git a/movies.kv b/movies.kv index 01603fe009939152e70eb4e4a00b103a1c1bbbd7..e8a7d7af912f6db57d0be24226a40ab6c5fc5f55 100644 --- a/movies.kv +++ b/movies.kv @@ -5,20 +5,20 @@ ScreenManager: orientation: 'vertical' Label: text: 'Enter a movie:' - font_size: '24sp' + font_size: sp(24) BoxLayout: orientation: 'horizontal' Widget: Label: text: 'Movie Title:' - size_hint: (1, None) + size_hint: (1.0, None) height: sp(32) Widget: TextInput: id: title multiline: False write_tab: False - size_hint: (4, None) + size_hint: (4.0, None) height: sp(32) Widget: BoxLayout: @@ -26,14 +26,14 @@ ScreenManager: Widget: Label: text: 'Budget (millions of US dollars):' - size_hint: (1, None) + size_hint: (1.0, None) height: sp(32) Widget: TextInput: id: budget multiline: False write_tab: False - size_hint: (4, None) + size_hint: (4.0, None) height: sp(32) Widget: BoxLayout: @@ -41,14 +41,14 @@ ScreenManager: Widget: Label: text: 'Gross Revenue (millions of US dollars):' - size_hint: (1, None) + size_hint: (1.0, None) height: sp(32) Widget: TextInput: id: gross_revenue multiline: False write_tab: False - size_hint: (4, None) + size_hint: (4.0, None) height: sp(32) Widget: Widget: @@ -57,7 +57,7 @@ ScreenManager: Widget: Button: text: 'Create' - size_hint: (4, 1) + size_hint: (4.0, 1.0) on_press: app.create_movie(title.text, budget.text, gross_revenue.text) Widget: BoxLayout: @@ -66,7 +66,7 @@ ScreenManager: Label: id: message text: '' - size_hint: (None, 1) + size_hint: (None, 1.0) size: self.texture_size Widget: @@ -74,22 +74,22 @@ ScreenManager: <Screen>: canvas.before: Color: - rgba: (1, 1, 1, 1) + rgba: (1.0, 1.0, 1.0, 1.0) Rectangle: pos: self.pos size: self.size # All labels are blue. <Label>: - color: (0, 0, 0.75, 1) + color: (0.0, 0.0, 0.75, 1.0) # All checkboxes are blue. <CheckBox>: canvas: Color: - rgba: (0, 0, 0.75, 1) + rgba: (0.0, 0.0, 0.75, 1.0) Rectangle: - source: 'atlas://data/images/defaulttheme/checkbox{radio}{disabled}{on}'.format(radio=('_radio' if self.group else ''), disabled=('_disabled' if self.disabled else ''), on=('_on' if self.active else '_off')) + source: f'atlas://data/images/defaulttheme/checkbox{"_radio" if self.group else ""}{"_disabled" if self.disabled else ""}{"_on" if self.active else "_off"}' size: sp(32), sp(32) pos: int(self.center_x - sp(16)), int(self.center_y - sp(16)) diff --git a/movies.py b/movies.py index 4084e69555901052793485fdd46d31680ef5fd04..2d22120cde3e8a31425c4df400a2c470bd1c9354 100644 --- a/movies.py +++ b/movies.py @@ -43,8 +43,7 @@ class MovieGenre(Persisted): class MovieDatabase(object): @staticmethod def construct_mysql_url(authority, port, database, username, password): - return 'mysql+mysqlconnector://{username}:{password}@{authority}:{port}/{database}' \ - .format(authority=authority, port=port, database=database, username=username, password=password) + return f'mysql+mysqlconnector://{username}:{password}@{authority}:{port}/{database}' @staticmethod def construct_in_memory_url(): diff --git a/movies_installer.py b/movies_installer.py index 9776e8312c2e31062a5ee84ca98f2f5f60a90493..fb3d41cef69a123319e7edbe59a71ae490763a97 100644 --- a/movies_installer.py +++ b/movies_installer.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8; -*- - from sys import stderr from datetime import date @@ -27,7 +25,7 @@ def add_starter_data(session): # 2016 October 15 # Budget: $25,000,000 # Gross Revenue: $206,000,000 - # Sample review from IMBD: + # Sample review from IMDB: # "★★★★★★★★★☆ In the opinion of this reviewer, an extraordinary achievement." hidden_figures = Movie(title='Hidden Figures', budget=25000000, gross_revenue=206000000, opening_date=date(2016, 10, 15), genres=[biography, drama, history]) @@ -36,22 +34,23 @@ def add_starter_data(session): comments='In the opinion of this reviewer, an extraordinary achievement.') session.add(extraordinary_achievement) - # Rogue One (Action, Adventure, SciFi) - # 2016 December 16 - # Budget: $200,000,000 - # Gross Revenue: $1,016,000,000 + # Avengers: Infinity War (Action, Adventure) + # 2018 April 27 + # Budget: $300,000,000 + # Gross Revenue: $2,048,000,000 # Sample reviews from IMDB: - # "★★★★★★★★★☆ I feel like the void left in my heart by Episode VII has been filled now." - # "★★★★★☆☆☆☆☆ Ultimately underwhelming." - rogue_one = Movie(title='Rogue One', budget=200000000, gross_revenue=1016000000, - opening_date=date(2016, 12, 16), genres=[action, adventure, sci_fi]) - session.add(rogue_one) - void_filled = Review(movie=rogue_one, score=9, - comments='I feel like the void left in my heart by Episode VII has been filled now.') - ultimately_underwhelming = Review(movie=rogue_one, score=5, - comments='Ultimately underwhelming.') - session.add(void_filled) - session.add(ultimately_underwhelming) + # "★★★★★★★★★★ A summer film that IS even better than the hype." + # "★★★★★★☆☆☆☆ Bordering on a comedy, "Infinity War" is overhyped, lacked direction, but at times impressed." + infinity_war = Movie(title='Avengers: Infinity War', budget=300000000, gross_revenue=2048000000, + opening_date=date(2018, 4, 27), genres=[action, adventure]) + session.add(infinity_war) + better_than_hype = Review(movie=infinity_war, score=10, + comments='A summer film that IS even better than the hype.') + bordering_on_comedy = Review(movie=infinity_war, score=6, + comments='Bordering on a comedy, "Infinity War" is overhyped, lacked direction, but ' + 'at times impressed.') + session.add(better_than_hype) + session.add(bordering_on_comedy) def main(): @@ -66,7 +65,7 @@ def main(): print('Records created.') except SQLAlchemyError as exception: print('Database setup failed!', file=stderr) - print('Cause: {exception}'.format(exception=exception), file=stderr) + print(f'Cause: {exception}', file=stderr) exit(1) diff --git a/test_create_movie.py b/test_create_movie.py index eebc9cbb654526ded249285e5407aaae22abe887..1a7483f5dc80bdd0af4e11e708dd3a0ee91144b1 100644 --- a/test_create_movie.py +++ b/test_create_movie.py @@ -5,6 +5,9 @@ from main import MoviesApp class TestCreateMovie(TestCase): + """ + Four versions of the same test case for a database-modifying method, each with a stronger oracle. + """ def test_create_movie_does_not_crash(self): url = MovieDatabase.construct_in_memory_url() @@ -21,7 +24,7 @@ class TestCreateMovie(TestCase): session = movie_database.create_session() MoviesApp._create_movie(session, 'Example', 4000000, 290000000) actual = session.query(Movie).filter(Movie.title == 'Example').one() - self.assertIsNotNone(actual) # not as weak oracle (but still weak) + self.assertIsNotNone(actual) # less-weak oracle (but still weak) def test_create_movie_inserts_one_movie(self): url = MovieDatabase.construct_in_memory_url() @@ -40,4 +43,4 @@ class TestCreateMovie(TestCase): MoviesApp._create_movie(session, 'Example', 4000000, 290000000) actual = session.query(Movie).filter(Movie.title == 'Example').one() self.assertEqual(actual.budget, 4000000) - self.assertEqual(actual.gross_revenue, 290000000) # better + self.assertEqual(actual.gross_revenue, 290000000) # strong oracle (recommended)