From 369a05273d92abb106ac405e4a7ce1168a5e75da Mon Sep 17 00:00:00 2001 From: Sourcery AI <> Date: Wed, 30 Aug 2023 02:39:13 +0000 Subject: [PATCH] 'Refactored by Sourcery' --- days/009-012-modern-apis-starred/demo/app.py | 6 +-- .../demo/test_app.py | 2 +- .../code/program/routes.py | 11 ++-- .../async_cityscape_api/app.py | 2 +- .../services/location_service.py | 2 +- days/021-024-quart-async/cityscape_api/app.py | 2 +- .../services/location_service.py | 2 +- .../python_async/async_program.py | 4 +- .../python_async/sync_program.py | 4 +- .../your_turn/day_2/web_crawl/program.py | 11 ++-- .../your_turn/day_4/cityscape_api/app.py | 2 +- .../services/location_service.py | 2 +- .../data/session_factory.py | 2 +- .../infrastructure/switchlang.py | 9 ++-- .../demo/hovershare_app_final/program.py | 2 +- .../services/data_service.py | 2 +- .../infrastructure/switchlang.py | 9 ++-- .../demo/hovershare_app_starter/program.py | 5 +- .../billtracker/data/db_session.py | 4 +- .../billtracker/billtracker/views/default.py | 2 +- days/050-responder/demo/movie_svc/data/db.py | 47 +++++------------ .../demo/movie_svc/views/api_views.py | 4 +- .../code/project_awesome/models.py | 2 +- .../code/project_awesome/routes.py | 7 ++- .../billtracker/data/db_session.py | 4 +- .../billtracker/billtracker/views/default.py | 2 +- .../hovershare/data/session_factory.py | 2 +- .../hovershare/infrastructure/switchlang.py | 9 ++-- .../hovershare_project/hovershare/program.py | 2 +- .../hovershare/services/data_service.py | 2 +- .../billtracker/data/db_session.py | 4 +- .../tests/default/default_viewmodel_tests.py | 8 +-- .../billtracker/tests/site_tests.py | 4 +- .../default/bill_details_viewmodel.py | 4 +- .../viewmodels/default/index_viewmodel.py | 2 +- .../billtracker/billtracker/views/default.py | 7 +-- .../billtracker/data/db_session.py | 4 +- .../viewmodels/default/index_viewmodel.py | 2 +- .../billtracker/billtracker/views/default.py | 7 +-- .../billtracker/data/db_session.py | 4 +- .../tests/default/default_viewmodel_tests.py | 8 +-- .../billtracker/tests/site_tests.py | 4 +- .../default/bill_details_viewmodel.py | 4 +- .../viewmodels/default/index_viewmodel.py | 2 +- .../billtracker/billtracker/views/default.py | 7 +-- days/093-096-vuejs/movie_svc/data/db.py | 51 ++++++------------- .../movie_svc/views/api_views.py | 12 +++-- .../demo/services/movie_svc/data/db.py | 51 ++++++------------- .../services/movie_svc/views/api_views.py | 12 +++-- 49 files changed, 140 insertions(+), 223 deletions(-) diff --git a/days/009-012-modern-apis-starred/demo/app.py b/days/009-012-modern-apis-starred/demo/app.py index 78a00228..5753cf4c 100644 --- a/days/009-012-modern-apis-starred/demo/app.py +++ b/days/009-012-modern-apis-starred/demo/app.py @@ -14,13 +14,9 @@ def _load_cars_data(): cars = _load_cars_data() -VALID_MANUFACTURERS = set([car["manufacturer"] - for car in cars.values()]) +VALID_MANUFACTURERS = {car["manufacturer"] for car in cars.values()} CAR_NOT_FOUND = 'Car not found' -# definition - - class Car(types.Type): id = validators.Integer(allow_null=True) # assign in POST manufacturer = validators.String(enum=list(VALID_MANUFACTURERS)) diff --git a/days/009-012-modern-apis-starred/demo/test_app.py b/days/009-012-modern-apis-starred/demo/test_app.py index 7bc37a43..356b528e 100644 --- a/days/009-012-modern-apis-starred/demo/test_app.py +++ b/days/009-012-modern-apis-starred/demo/test_app.py @@ -52,7 +52,7 @@ def test_create_car(): def test_create_car_after_delete(): """Test to fail create_car's len(cars)+1 (fix max(cars.keys())+1)""" car_count = len(cars) - response = client.delete(f'/99/') + response = client.delete('/99/') assert response.status_code == 204 assert len(cars) == car_count - 1 data = {'manufacturer': 'Honda', diff --git a/days/017-020-flask-call-apis/code/program/routes.py b/days/017-020-flask-call-apis/code/program/routes.py index b47004c2..479eb6bd 100644 --- a/days/017-020-flask-call-apis/code/program/routes.py +++ b/days/017-020-flask-call-apis/code/program/routes.py @@ -5,7 +5,7 @@ from program import app -time_now = str(datetime.today()) +time_now = str(datetime.now()) @app.route('/') @@ -43,11 +43,6 @@ def get_chuck_joke(): def get_poke_colours(colour): - r = requests.get('https://pokeapi.co/api/v2/pokemon-color/' + colour.lower()) + r = requests.get(f'https://pokeapi.co/api/v2/pokemon-color/{colour.lower()}') pokedata = r.json() - pokemon = [] - - for i in pokedata['pokemon_species']: - pokemon.append(i['name']) - - return pokemon + return [i['name'] for i in pokedata['pokemon_species']] diff --git a/days/021-024-quart-async/async_cityscape_api/app.py b/days/021-024-quart-async/async_cityscape_api/app.py index 90cb1c36..a7e4da08 100644 --- a/days/021-024-quart-async/async_cityscape_api/app.py +++ b/days/021-024-quart-async/async_cityscape_api/app.py @@ -21,7 +21,7 @@ def configure_app(): services.sun_service.use_cached_data = data.get('use_cached_data', False) services.location_service.use_cached_data = True - print("Using cached data? {}".format(data.get('use_cached_data', False))) + print(f"Using cached data? {data.get('use_cached_data', False)}") def run_web_app(): diff --git a/days/021-024-quart-async/async_cityscape_api/services/location_service.py b/days/021-024-quart-async/async_cityscape_api/services/location_service.py index 692c8a13..90ff81bd 100644 --- a/days/021-024-quart-async/async_cityscape_api/services/location_service.py +++ b/days/021-024-quart-async/async_cityscape_api/services/location_service.py @@ -30,5 +30,5 @@ async def get_lat_long(zip_code: str, country: str) -> Tuple[float, float]: resp.raise_for_status() data = await resp.json() - city_data = data.get(f'{zip_code}, {country}', dict()) + city_data = data.get(f'{zip_code}, {country}', {}) return city_data.get('latitude', 0.00), city_data.get('longitude', 0.00) diff --git a/days/021-024-quart-async/cityscape_api/app.py b/days/021-024-quart-async/cityscape_api/app.py index be4706a7..f6d646b2 100644 --- a/days/021-024-quart-async/cityscape_api/app.py +++ b/days/021-024-quart-async/cityscape_api/app.py @@ -23,7 +23,7 @@ def configure_app(): # Sadly, datasciencetoolkit.org seems to have gone out of existence. services.location_service.use_cached_data = True - print("Using cached data? {}".format(data.get('use_cached_data', False))) + print(f"Using cached data? {data.get('use_cached_data', False)}") def run_web_app(): diff --git a/days/021-024-quart-async/cityscape_api/services/location_service.py b/days/021-024-quart-async/cityscape_api/services/location_service.py index 3797bb1b..31977503 100644 --- a/days/021-024-quart-async/cityscape_api/services/location_service.py +++ b/days/021-024-quart-async/cityscape_api/services/location_service.py @@ -23,5 +23,5 @@ def get_lat_long(zip_code: str, country: str) -> Tuple[float, float]: data = resp.json() - city_data = data.get(f'{zip_code}, {country}', dict()) + city_data = data.get(f'{zip_code}, {country}', {}) return city_data.get('latitude', 0.00), city_data.get('longitude', 0.00) diff --git a/days/021-024-quart-async/python_async/async_program.py b/days/021-024-quart-async/python_async/async_program.py index 5709719a..46016b03 100644 --- a/days/021-024-quart-async/python_async/async_program.py +++ b/days/021-024-quart-async/python_async/async_program.py @@ -6,7 +6,7 @@ def main(): t0 = datetime.datetime.now() - print(colorama.Fore.WHITE + "App started.", flush=True) + print(f"{colorama.Fore.WHITE}App started.", flush=True) # Changed from asyncio.get_event_loop() => asyncio.new_event_loop() # There has been a deprecation: @@ -31,7 +31,7 @@ async def generate_data(num: int, data: asyncio.Queue): item = idx*idx await data.put((item, datetime.datetime.now())) - print(colorama.Fore.YELLOW + f" -- generated item {idx}", flush=True) + print(f"{colorama.Fore.YELLOW} -- generated item {idx}", flush=True) await asyncio.sleep(random.random() + .5) diff --git a/days/021-024-quart-async/python_async/sync_program.py b/days/021-024-quart-async/python_async/sync_program.py index d9614751..c8eb0a0b 100644 --- a/days/021-024-quart-async/python_async/sync_program.py +++ b/days/021-024-quart-async/python_async/sync_program.py @@ -6,7 +6,7 @@ def main(): t0 = datetime.datetime.now() - print(colorama.Fore.WHITE + "App started.", flush=True) + print(f"{colorama.Fore.WHITE}App started.", flush=True) data = [] generate_data(20, data) process_data(20, data) @@ -20,7 +20,7 @@ def generate_data(num: int, data: list): item = idx*idx data.append((item, datetime.datetime.now())) - print(colorama.Fore.YELLOW + f" -- generated item {idx}", flush=True) + print(f"{colorama.Fore.YELLOW} -- generated item {idx}", flush=True) time.sleep(random.random() + .5) diff --git a/days/021-024-quart-async/your_turn/day_2/web_crawl/program.py b/days/021-024-quart-async/your_turn/day_2/web_crawl/program.py index ac733a90..6bc1fb28 100644 --- a/days/021-024-quart-async/your_turn/day_2/web_crawl/program.py +++ b/days/021-024-quart-async/your_turn/day_2/web_crawl/program.py @@ -4,7 +4,7 @@ def get_html(episode_number: int) -> str: - print(Fore.YELLOW + f"Getting HTML for episode {episode_number}", flush=True) + print(f"{Fore.YELLOW}Getting HTML for episode {episode_number}", flush=True) url = f'https://talkpython.fm/{episode_number}' resp = requests.get(url) @@ -14,13 +14,10 @@ def get_html(episode_number: int) -> str: def get_title(html: str, episode_number: int) -> str: - print(Fore.CYAN + f"Getting TITLE for episode {episode_number}", flush=True) + print(f"{Fore.CYAN}Getting TITLE for episode {episode_number}", flush=True) soup = bs4.BeautifulSoup(html, 'html.parser') header = soup.select_one('h1') - if not header: - return "MISSING" - - return header.text.strip() + return "MISSING" if not header else header.text.strip() def main(): @@ -33,7 +30,7 @@ def get_title_range(): for n in range(150, 170): html = get_html(n) title = get_title(html, n) - print(Fore.WHITE + f"Title found: {title}", flush=True) + print(f"{Fore.WHITE}Title found: {title}", flush=True) if __name__ == '__main__': diff --git a/days/021-024-quart-async/your_turn/day_4/cityscape_api/app.py b/days/021-024-quart-async/your_turn/day_4/cityscape_api/app.py index 4f88e501..172c77ab 100644 --- a/days/021-024-quart-async/your_turn/day_4/cityscape_api/app.py +++ b/days/021-024-quart-async/your_turn/day_4/cityscape_api/app.py @@ -23,7 +23,7 @@ def configure_app(): # Sadly, datasciencetoolkit.org seems to have gone out of existence. services.location_service.use_cached_data = True - print("Using cached data? {}".format(data.get('use_cached_data', False))) + print(f"Using cached data? {data.get('use_cached_data', False)}") def run_web_app(): diff --git a/days/021-024-quart-async/your_turn/day_4/cityscape_api/services/location_service.py b/days/021-024-quart-async/your_turn/day_4/cityscape_api/services/location_service.py index 6a6bc918..52e4cd29 100644 --- a/days/021-024-quart-async/your_turn/day_4/cityscape_api/services/location_service.py +++ b/days/021-024-quart-async/your_turn/day_4/cityscape_api/services/location_service.py @@ -28,5 +28,5 @@ def get_lat_long(zip_code: str, country: str) -> Tuple[float, float]: data = resp.json() - city_data = data.get(f'{zip_code}, {country}', dict()) + city_data = data.get(f'{zip_code}, {country}', {}) return city_data.get('latitude', 0.00), city_data.get('longitude', 0.00) diff --git a/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/data/session_factory.py b/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/data/session_factory.py index 7c2c5f37..2d7ea985 100644 --- a/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/data/session_factory.py +++ b/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/data/session_factory.py @@ -14,7 +14,7 @@ def global_init(db_name: str): if __factory: return - conn_str = 'sqlite:///' + db_folder.get_full_path(db_name) + conn_str = f'sqlite:///{db_folder.get_full_path(db_name)}' __engine = sqlalchemy.create_engine(conn_str, echo=False) __factory = sqlalchemy.orm.sessionmaker(bind=__engine) diff --git a/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/infrastructure/switchlang.py b/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/infrastructure/switchlang.py index 0dffc4bf..4768c5b6 100644 --- a/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/infrastructure/switchlang.py +++ b/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/infrastructure/switchlang.py @@ -53,7 +53,7 @@ def case(self, key, func: Callable[[], Any], fallthrough=False): if not fallthrough: self._falling_through = False - if isinstance(key, list) or isinstance(key, range): + if isinstance(key, (list, range)): found = False for i in key: if self.case(i, func, fallthrough=None): @@ -63,7 +63,7 @@ def case(self, key, func: Callable[[], Any], fallthrough=False): return found if key in self.cases: - raise ValueError("Duplicate case: {}".format(key)) + raise ValueError(f"Duplicate case: {key}") if not func: raise ValueError("Action for case cannot be None.") if not callable(func): @@ -85,8 +85,9 @@ def __exit__(self, exc_type, exc_val, exc_tb): raise exc_val if not self._func_stack: - raise Exception("Value does not match any case and there " - "is no default case: value {}".format(self.value)) + raise Exception( + f"Value does not match any case and there is no default case: value {self.value}" + ) for func in self._func_stack: # noinspection PyCallingNonCallable diff --git a/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/program.py b/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/program.py index 55efc677..94c08a44 100644 --- a/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/program.py +++ b/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/program.py @@ -41,7 +41,7 @@ def rent_a_scooter(): scooters = find_available_scooters(True) chose_it = try_int(input('Which one do you want? ')) - 1 - if not (0 <= chose_it or chose_it < len(scooters)): + if chose_it < 0 and chose_it >= len(scooters): print("Error: Pick another number.") return diff --git a/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/services/data_service.py b/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/services/data_service.py index 24a760d4..db6d362b 100644 --- a/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/services/data_service.py +++ b/days/033-036-sqlalchemy-orm/demo/hovershare_app_final/services/data_service.py @@ -60,7 +60,7 @@ def rented_scooters() -> List[Scooter]: session = session_factory.create_session() # noinspection PyComparisonWithNone - scooters = session.query(Scooter).filter(Scooter.location_id == None).all() + scooters = session.query(Scooter).filter(Scooter.location_id is None).all() return list(scooters) diff --git a/days/033-036-sqlalchemy-orm/demo/hovershare_app_starter/infrastructure/switchlang.py b/days/033-036-sqlalchemy-orm/demo/hovershare_app_starter/infrastructure/switchlang.py index 0dffc4bf..4768c5b6 100644 --- a/days/033-036-sqlalchemy-orm/demo/hovershare_app_starter/infrastructure/switchlang.py +++ b/days/033-036-sqlalchemy-orm/demo/hovershare_app_starter/infrastructure/switchlang.py @@ -53,7 +53,7 @@ def case(self, key, func: Callable[[], Any], fallthrough=False): if not fallthrough: self._falling_through = False - if isinstance(key, list) or isinstance(key, range): + if isinstance(key, (list, range)): found = False for i in key: if self.case(i, func, fallthrough=None): @@ -63,7 +63,7 @@ def case(self, key, func: Callable[[], Any], fallthrough=False): return found if key in self.cases: - raise ValueError("Duplicate case: {}".format(key)) + raise ValueError(f"Duplicate case: {key}") if not func: raise ValueError("Action for case cannot be None.") if not callable(func): @@ -85,8 +85,9 @@ def __exit__(self, exc_type, exc_val, exc_tb): raise exc_val if not self._func_stack: - raise Exception("Value does not match any case and there " - "is no default case: value {}".format(self.value)) + raise Exception( + f"Value does not match any case and there is no default case: value {self.value}" + ) for func in self._func_stack: # noinspection PyCallingNonCallable diff --git a/days/033-036-sqlalchemy-orm/demo/hovershare_app_starter/program.py b/days/033-036-sqlalchemy-orm/demo/hovershare_app_starter/program.py index dbd26720..90aae681 100644 --- a/days/033-036-sqlalchemy-orm/demo/hovershare_app_starter/program.py +++ b/days/033-036-sqlalchemy-orm/demo/hovershare_app_starter/program.py @@ -39,7 +39,7 @@ def rent_a_scooter(): scooters = find_available_scooters(True) chose_it = try_int(input('Which one do you want? ')) - 1 - if not (0 <= chose_it or chose_it < len(scooters)): + if chose_it < 0 and chose_it >= len(scooters): print("Error: Pick another number.") return @@ -51,10 +51,9 @@ def find_available_scooters(suppress_header=False): if not suppress_header: print("********* Available scooters: ********* ") - parked_scooters = [] # todo show parked scooters print() - return parked_scooters + return [] def locate_our_scooters(): diff --git a/days/037-40-pyramid-intro/demo/billtracker/billtracker/data/db_session.py b/days/037-40-pyramid-intro/demo/billtracker/billtracker/data/db_session.py index 96c55aaa..73a227d5 100644 --- a/days/037-40-pyramid-intro/demo/billtracker/billtracker/data/db_session.py +++ b/days/037-40-pyramid-intro/demo/billtracker/billtracker/data/db_session.py @@ -25,8 +25,8 @@ def global_init(db_file: str): DbSession.db_folder = os.path.dirname(db_file) - conn_str = 'sqlite:///' + db_file - print("Connecting to DB at: {}".format(conn_str)) + conn_str = f'sqlite:///{db_file}' + print(f"Connecting to DB at: {conn_str}") engine = sqlalchemy.create_engine(conn_str, echo=False) DbSession.engine = engine diff --git a/days/037-40-pyramid-intro/demo/billtracker/billtracker/views/default.py b/days/037-40-pyramid-intro/demo/billtracker/billtracker/views/default.py index 1cb6463d..955e85bb 100644 --- a/days/037-40-pyramid-intro/demo/billtracker/billtracker/views/default.py +++ b/days/037-40-pyramid-intro/demo/billtracker/billtracker/views/default.py @@ -60,4 +60,4 @@ def details_post(request: Request): repository.add_payment(amount, bill_id) - return HTTPFound(location='/bill/{}'.format(bill_id)) + return HTTPFound(location=f'/bill/{bill_id}') diff --git a/days/050-responder/demo/movie_svc/data/db.py b/days/050-responder/demo/movie_svc/data/db.py index c5f64ed9..f68fa443 100644 --- a/days/050-responder/demo/movie_svc/data/db.py +++ b/days/050-responder/demo/movie_svc/data/db.py @@ -3,7 +3,7 @@ import collections from typing import List -__movie_data = dict() +__movie_data = {} Movie = collections.namedtuple( 'Movie', @@ -15,7 +15,7 @@ def movie_to_dict(m: Movie): if not m: return {} - d = dict( + return dict( imdb_code=m.imdb_code, title=m.title, director=m.director, @@ -24,16 +24,13 @@ def movie_to_dict(m: Movie): genres=list(m.genres), rating=m.rating, year=m.year, - imdb_score=m.imdb_score + imdb_score=m.imdb_score, ) - return d - def find_by_imdb(imdb_code: str) -> Movie: global __movie_data - movie = __movie_data.get(imdb_code) - return movie + return __movie_data.get(imdb_code) def search_keyword(keyword: str) -> List[Movie]: @@ -62,12 +59,7 @@ def search_title(keyword: str) -> List[Movie]: keyword = keyword.lower().strip() - hits = [] - for m in __movie_data.values(): - if m.lower_title.find(keyword) >= 0: - hits.append(m) - - return hits + return [m for m in __movie_data.values() if m.lower_title.find(keyword) >= 0] def search_director(director: str) -> List[Movie]: @@ -78,12 +70,11 @@ def search_director(director: str) -> List[Movie]: director = director.lower().strip() - hits = [] - for m in __movie_data.values(): - if m.director.lower().find(director) >= 0: - hits.append(m) - - return hits + return [ + m + for m in __movie_data.values() + if m.director.lower().find(director) >= 0 + ] def global_init(): @@ -113,10 +104,7 @@ def global_init(): def __make_numerical(text): - if not text or not text.strip(): - return 0 - - return int(text) + return 0 if not text or not text.strip() else int(text) def __build_imdb_code(link): @@ -126,10 +114,7 @@ def __build_imdb_code(link): # tt0449088 parts = link.split('/') - if len(parts) < 5: - return None - - return parts[4] + return None if len(parts) < 5 else parts[4] def __split_separated_text(text): @@ -137,10 +122,4 @@ def __split_separated_text(text): return text text = text.strip() - parts = [ - p.strip() - for p in text.split('|') - if p and p.strip() - ] - - return parts + return [p.strip() for p in text.split('|') if p and p.strip()] diff --git a/days/050-responder/demo/movie_svc/views/api_views.py b/days/050-responder/demo/movie_svc/views/api_views.py index 01afe1a9..8fc13403 100644 --- a/days/050-responder/demo/movie_svc/views/api_views.py +++ b/days/050-responder/demo/movie_svc/views/api_views.py @@ -9,7 +9,7 @@ @api.route('/api/search/{keyword}') def search_by_keyword(_, resp: responder.Response, keyword: str): movies = db.search_keyword(keyword) - print("Searching for movie by keyword: {}".format(keyword)) + print(f"Searching for movie by keyword: {keyword}") limited = len(movies) > response_count_max if limited: @@ -26,7 +26,7 @@ def search_by_keyword(_, resp: responder.Response, keyword: str): @api.route('/api/director/{director_name}') def search_by_director(_, resp: responder.Response, director_name: str): movies = db.search_director(director_name) - print("Searching for movie by director: {}".format(director_name)) + print(f"Searching for movie by director: {director_name}") limited = len(movies) > response_count_max if limited: diff --git a/days/057-060-flask-login/code/project_awesome/models.py b/days/057-060-flask-login/code/project_awesome/models.py index ba12489b..32741276 100644 --- a/days/057-060-flask-login/code/project_awesome/models.py +++ b/days/057-060-flask-login/code/project_awesome/models.py @@ -8,4 +8,4 @@ class User(UserMixin, db.Model): password = db.Column(db.String(120), unique=False, nullable=False) def __repr__(self): - return 'User {}'.format(self.username) + return f'User {self.username}' diff --git a/days/057-060-flask-login/code/project_awesome/routes.py b/days/057-060-flask-login/code/project_awesome/routes.py index 554ee2b6..4c02ab0f 100644 --- a/days/057-060-flask-login/code/project_awesome/routes.py +++ b/days/057-060-flask-login/code/project_awesome/routes.py @@ -20,8 +20,9 @@ def pybitesdashboard(): @app.route('/loginpage', methods=['GET', 'POST']) def loginpage(): if request.method == 'POST' and 'username' in request.form: - user = User.query.filter_by(username=request.form.get('username')).first() - if user: + if user := User.query.filter_by( + username=request.form.get('username') + ).first(): if user.password == request.form.get('password'): login_user(user) return redirect(url_for('pybitesdashboard')) @@ -54,5 +55,3 @@ def add_user(username, password): def load_user(user_id): return User.query.get(int(user_id)) -if __name__ == '__main__': - pass diff --git a/days/061-064-db-migrations/demo/billtracker/billtracker/data/db_session.py b/days/061-064-db-migrations/demo/billtracker/billtracker/data/db_session.py index 96c55aaa..73a227d5 100644 --- a/days/061-064-db-migrations/demo/billtracker/billtracker/data/db_session.py +++ b/days/061-064-db-migrations/demo/billtracker/billtracker/data/db_session.py @@ -25,8 +25,8 @@ def global_init(db_file: str): DbSession.db_folder = os.path.dirname(db_file) - conn_str = 'sqlite:///' + db_file - print("Connecting to DB at: {}".format(conn_str)) + conn_str = f'sqlite:///{db_file}' + print(f"Connecting to DB at: {conn_str}") engine = sqlalchemy.create_engine(conn_str, echo=False) DbSession.engine = engine diff --git a/days/061-064-db-migrations/demo/billtracker/billtracker/views/default.py b/days/061-064-db-migrations/demo/billtracker/billtracker/views/default.py index 1cb6463d..955e85bb 100644 --- a/days/061-064-db-migrations/demo/billtracker/billtracker/views/default.py +++ b/days/061-064-db-migrations/demo/billtracker/billtracker/views/default.py @@ -60,4 +60,4 @@ def details_post(request: Request): repository.add_payment(amount, bill_id) - return HTTPFound(location='/bill/{}'.format(bill_id)) + return HTTPFound(location=f'/bill/{bill_id}') diff --git a/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/data/session_factory.py b/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/data/session_factory.py index 7c2c5f37..2d7ea985 100644 --- a/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/data/session_factory.py +++ b/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/data/session_factory.py @@ -14,7 +14,7 @@ def global_init(db_name: str): if __factory: return - conn_str = 'sqlite:///' + db_folder.get_full_path(db_name) + conn_str = f'sqlite:///{db_folder.get_full_path(db_name)}' __engine = sqlalchemy.create_engine(conn_str, echo=False) __factory = sqlalchemy.orm.sessionmaker(bind=__engine) diff --git a/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/infrastructure/switchlang.py b/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/infrastructure/switchlang.py index 0dffc4bf..4768c5b6 100644 --- a/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/infrastructure/switchlang.py +++ b/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/infrastructure/switchlang.py @@ -53,7 +53,7 @@ def case(self, key, func: Callable[[], Any], fallthrough=False): if not fallthrough: self._falling_through = False - if isinstance(key, list) or isinstance(key, range): + if isinstance(key, (list, range)): found = False for i in key: if self.case(i, func, fallthrough=None): @@ -63,7 +63,7 @@ def case(self, key, func: Callable[[], Any], fallthrough=False): return found if key in self.cases: - raise ValueError("Duplicate case: {}".format(key)) + raise ValueError(f"Duplicate case: {key}") if not func: raise ValueError("Action for case cannot be None.") if not callable(func): @@ -85,8 +85,9 @@ def __exit__(self, exc_type, exc_val, exc_tb): raise exc_val if not self._func_stack: - raise Exception("Value does not match any case and there " - "is no default case: value {}".format(self.value)) + raise Exception( + f"Value does not match any case and there is no default case: value {self.value}" + ) for func in self._func_stack: # noinspection PyCallingNonCallable diff --git a/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/program.py b/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/program.py index 55efc677..94c08a44 100644 --- a/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/program.py +++ b/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/program.py @@ -41,7 +41,7 @@ def rent_a_scooter(): scooters = find_available_scooters(True) chose_it = try_int(input('Which one do you want? ')) - 1 - if not (0 <= chose_it or chose_it < len(scooters)): + if chose_it < 0 and chose_it >= len(scooters): print("Error: Pick another number.") return diff --git a/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/services/data_service.py b/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/services/data_service.py index 24a760d4..db6d362b 100644 --- a/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/services/data_service.py +++ b/days/061-064-db-migrations/your-turn/hovershare_project/hovershare/services/data_service.py @@ -60,7 +60,7 @@ def rented_scooters() -> List[Scooter]: session = session_factory.create_session() # noinspection PyComparisonWithNone - scooters = session.query(Scooter).filter(Scooter.location_id == None).all() + scooters = session.query(Scooter).filter(Scooter.location_id is None).all() return list(scooters) diff --git a/days/081-084-unit-testing/demo/billtracker/billtracker/data/db_session.py b/days/081-084-unit-testing/demo/billtracker/billtracker/data/db_session.py index 96c55aaa..73a227d5 100644 --- a/days/081-084-unit-testing/demo/billtracker/billtracker/data/db_session.py +++ b/days/081-084-unit-testing/demo/billtracker/billtracker/data/db_session.py @@ -25,8 +25,8 @@ def global_init(db_file: str): DbSession.db_folder = os.path.dirname(db_file) - conn_str = 'sqlite:///' + db_file - print("Connecting to DB at: {}".format(conn_str)) + conn_str = f'sqlite:///{db_file}' + print(f"Connecting to DB at: {conn_str}") engine = sqlalchemy.create_engine(conn_str, echo=False) DbSession.engine = engine diff --git a/days/081-084-unit-testing/demo/billtracker/billtracker/tests/default/default_viewmodel_tests.py b/days/081-084-unit-testing/demo/billtracker/billtracker/tests/default/default_viewmodel_tests.py index 25ee7806..a871debd 100644 --- a/days/081-084-unit-testing/demo/billtracker/billtracker/tests/default/default_viewmodel_tests.py +++ b/days/081-084-unit-testing/demo/billtracker/billtracker/tests/default/default_viewmodel_tests.py @@ -70,10 +70,10 @@ def test_details_vm_no_bill(self): p1 = unittest.mock.patch('billtracker.data.repository.get_user_by_id', return_value=mock_user) p2 = unittest.mock.patch('billtracker.data.repository.get_bill_by_id', return_value=None) - with p1, p2: + with (p1, p2): vm = BillDetailsViewModel(request, mock_user.id) self.assertIsNotNone(vm.error) - self.assertIn('The bill with ID {} was not found'.format(200), vm.error) + self.assertIn('The bill with ID 200 was not found', vm.error) def test_details_vm_no_user(self): request: Request = testing.DummyRequest() @@ -81,11 +81,11 @@ def test_details_vm_no_user(self): p1 = unittest.mock.patch('billtracker.data.repository.get_user_by_id', return_value=None) p2 = unittest.mock.patch('billtracker.data.repository.get_bill_by_id', return_value=None) - with p1, p2: + with (p1, p2): user_id = 10 vm = BillDetailsViewModel(request, user_id) self.assertIsNotNone(vm.error) - self.assertIn('No user with ID {}'.format(user_id), vm.error) + self.assertIn(f'No user with ID {user_id}', vm.error) def test_details_vm_bill_not_from_user(self): request: Request = testing.DummyRequest() diff --git a/days/081-084-unit-testing/demo/billtracker/billtracker/tests/site_tests.py b/days/081-084-unit-testing/demo/billtracker/billtracker/tests/site_tests.py index cbd8cc90..c3bdbbd3 100644 --- a/days/081-084-unit-testing/demo/billtracker/billtracker/tests/site_tests.py +++ b/days/081-084-unit-testing/demo/billtracker/billtracker/tests/site_tests.py @@ -26,9 +26,7 @@ def test_sitemap(self): ] user = repository.get_user_by_id(1) bills: List[Bill] = user.bills - for b in bills: - urls.append('/bill/{}'.format(b.id)) - + urls.extend(f'/bill/{b.id}' for b in bills) for url in urls: self.app.get(url, status=200) diff --git a/days/081-084-unit-testing/demo/billtracker/billtracker/viewmodels/default/bill_details_viewmodel.py b/days/081-084-unit-testing/demo/billtracker/billtracker/viewmodels/default/bill_details_viewmodel.py index e77f2c27..fb63682f 100644 --- a/days/081-084-unit-testing/demo/billtracker/billtracker/viewmodels/default/bill_details_viewmodel.py +++ b/days/081-084-unit-testing/demo/billtracker/billtracker/viewmodels/default/bill_details_viewmodel.py @@ -17,9 +17,9 @@ def __init__(self, request: Request, user_id: int): self.amount = None if not self.user: - self.error = "No user with ID {}".format(user_id) + self.error = f"No user with ID {user_id}" elif not self.bill: - self.error = "The bill with ID {} was not found".format(self.bill_id) + self.error = f"The bill with ID {self.bill_id} was not found" elif self.user.id != self.bill.user_id: self.error = "The bill does not belong to user" self.bill = None diff --git a/days/081-084-unit-testing/demo/billtracker/billtracker/viewmodels/default/index_viewmodel.py b/days/081-084-unit-testing/demo/billtracker/billtracker/viewmodels/default/index_viewmodel.py index a0d0baf1..d0f4e73e 100644 --- a/days/081-084-unit-testing/demo/billtracker/billtracker/viewmodels/default/index_viewmodel.py +++ b/days/081-084-unit-testing/demo/billtracker/billtracker/viewmodels/default/index_viewmodel.py @@ -13,4 +13,4 @@ def __init__(self, request: Request, user_id: int): self.user = repository.get_user_by_id(user_id) if not self.user: - self.error = "No user with ID {}.".format(user_id) + self.error = f"No user with ID {user_id}." diff --git a/days/081-084-unit-testing/demo/billtracker/billtracker/views/default.py b/days/081-084-unit-testing/demo/billtracker/billtracker/views/default.py index 3f33c6ea..dc6751eb 100644 --- a/days/081-084-unit-testing/demo/billtracker/billtracker/views/default.py +++ b/days/081-084-unit-testing/demo/billtracker/billtracker/views/default.py @@ -20,10 +20,7 @@ def home(request: Request): def details_get(request: Request): vm = BillDetailsViewModel(request, user_id=1) - if not vm.bill: - return Response(status=404) - - return vm.to_dict() + return Response(status=404) if not vm.bill else vm.to_dict() @view_config(route_name='details', @@ -42,4 +39,4 @@ def details_post(request: Request): repository.add_payment(vm.amount, vm.bill_id) - return HTTPFound(location='/bill/{}'.format(vm.bill_id)) + return HTTPFound(location=f'/bill/{vm.bill_id}') diff --git a/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/data/db_session.py b/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/data/db_session.py index 96c55aaa..73a227d5 100644 --- a/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/data/db_session.py +++ b/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/data/db_session.py @@ -25,8 +25,8 @@ def global_init(db_file: str): DbSession.db_folder = os.path.dirname(db_file) - conn_str = 'sqlite:///' + db_file - print("Connecting to DB at: {}".format(conn_str)) + conn_str = f'sqlite:///{db_file}' + print(f"Connecting to DB at: {conn_str}") engine = sqlalchemy.create_engine(conn_str, echo=False) DbSession.engine = engine diff --git a/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/viewmodels/default/index_viewmodel.py b/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/viewmodels/default/index_viewmodel.py index a0d0baf1..d0f4e73e 100644 --- a/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/viewmodels/default/index_viewmodel.py +++ b/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/viewmodels/default/index_viewmodel.py @@ -13,4 +13,4 @@ def __init__(self, request: Request, user_id: int): self.user = repository.get_user_by_id(user_id) if not self.user: - self.error = "No user with ID {}.".format(user_id) + self.error = f"No user with ID {user_id}." diff --git a/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/views/default.py b/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/views/default.py index 3f33c6ea..dc6751eb 100644 --- a/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/views/default.py +++ b/days/081-084-unit-testing/your-turn/billtracker_with_viewmodels/billtracker/billtracker/views/default.py @@ -20,10 +20,7 @@ def home(request: Request): def details_get(request: Request): vm = BillDetailsViewModel(request, user_id=1) - if not vm.bill: - return Response(status=404) - - return vm.to_dict() + return Response(status=404) if not vm.bill else vm.to_dict() @view_config(route_name='details', @@ -42,4 +39,4 @@ def details_post(request: Request): repository.add_payment(vm.amount, vm.bill_id) - return HTTPFound(location='/bill/{}'.format(vm.bill_id)) + return HTTPFound(location=f'/bill/{vm.bill_id}') diff --git a/days/089-092-deployment/demo/billtracker/billtracker/data/db_session.py b/days/089-092-deployment/demo/billtracker/billtracker/data/db_session.py index 96c55aaa..73a227d5 100644 --- a/days/089-092-deployment/demo/billtracker/billtracker/data/db_session.py +++ b/days/089-092-deployment/demo/billtracker/billtracker/data/db_session.py @@ -25,8 +25,8 @@ def global_init(db_file: str): DbSession.db_folder = os.path.dirname(db_file) - conn_str = 'sqlite:///' + db_file - print("Connecting to DB at: {}".format(conn_str)) + conn_str = f'sqlite:///{db_file}' + print(f"Connecting to DB at: {conn_str}") engine = sqlalchemy.create_engine(conn_str, echo=False) DbSession.engine = engine diff --git a/days/089-092-deployment/demo/billtracker/billtracker/tests/default/default_viewmodel_tests.py b/days/089-092-deployment/demo/billtracker/billtracker/tests/default/default_viewmodel_tests.py index 25ee7806..a871debd 100644 --- a/days/089-092-deployment/demo/billtracker/billtracker/tests/default/default_viewmodel_tests.py +++ b/days/089-092-deployment/demo/billtracker/billtracker/tests/default/default_viewmodel_tests.py @@ -70,10 +70,10 @@ def test_details_vm_no_bill(self): p1 = unittest.mock.patch('billtracker.data.repository.get_user_by_id', return_value=mock_user) p2 = unittest.mock.patch('billtracker.data.repository.get_bill_by_id', return_value=None) - with p1, p2: + with (p1, p2): vm = BillDetailsViewModel(request, mock_user.id) self.assertIsNotNone(vm.error) - self.assertIn('The bill with ID {} was not found'.format(200), vm.error) + self.assertIn('The bill with ID 200 was not found', vm.error) def test_details_vm_no_user(self): request: Request = testing.DummyRequest() @@ -81,11 +81,11 @@ def test_details_vm_no_user(self): p1 = unittest.mock.patch('billtracker.data.repository.get_user_by_id', return_value=None) p2 = unittest.mock.patch('billtracker.data.repository.get_bill_by_id', return_value=None) - with p1, p2: + with (p1, p2): user_id = 10 vm = BillDetailsViewModel(request, user_id) self.assertIsNotNone(vm.error) - self.assertIn('No user with ID {}'.format(user_id), vm.error) + self.assertIn(f'No user with ID {user_id}', vm.error) def test_details_vm_bill_not_from_user(self): request: Request = testing.DummyRequest() diff --git a/days/089-092-deployment/demo/billtracker/billtracker/tests/site_tests.py b/days/089-092-deployment/demo/billtracker/billtracker/tests/site_tests.py index cbd8cc90..c3bdbbd3 100644 --- a/days/089-092-deployment/demo/billtracker/billtracker/tests/site_tests.py +++ b/days/089-092-deployment/demo/billtracker/billtracker/tests/site_tests.py @@ -26,9 +26,7 @@ def test_sitemap(self): ] user = repository.get_user_by_id(1) bills: List[Bill] = user.bills - for b in bills: - urls.append('/bill/{}'.format(b.id)) - + urls.extend(f'/bill/{b.id}' for b in bills) for url in urls: self.app.get(url, status=200) diff --git a/days/089-092-deployment/demo/billtracker/billtracker/viewmodels/default/bill_details_viewmodel.py b/days/089-092-deployment/demo/billtracker/billtracker/viewmodels/default/bill_details_viewmodel.py index e77f2c27..fb63682f 100644 --- a/days/089-092-deployment/demo/billtracker/billtracker/viewmodels/default/bill_details_viewmodel.py +++ b/days/089-092-deployment/demo/billtracker/billtracker/viewmodels/default/bill_details_viewmodel.py @@ -17,9 +17,9 @@ def __init__(self, request: Request, user_id: int): self.amount = None if not self.user: - self.error = "No user with ID {}".format(user_id) + self.error = f"No user with ID {user_id}" elif not self.bill: - self.error = "The bill with ID {} was not found".format(self.bill_id) + self.error = f"The bill with ID {self.bill_id} was not found" elif self.user.id != self.bill.user_id: self.error = "The bill does not belong to user" self.bill = None diff --git a/days/089-092-deployment/demo/billtracker/billtracker/viewmodels/default/index_viewmodel.py b/days/089-092-deployment/demo/billtracker/billtracker/viewmodels/default/index_viewmodel.py index a0d0baf1..d0f4e73e 100644 --- a/days/089-092-deployment/demo/billtracker/billtracker/viewmodels/default/index_viewmodel.py +++ b/days/089-092-deployment/demo/billtracker/billtracker/viewmodels/default/index_viewmodel.py @@ -13,4 +13,4 @@ def __init__(self, request: Request, user_id: int): self.user = repository.get_user_by_id(user_id) if not self.user: - self.error = "No user with ID {}.".format(user_id) + self.error = f"No user with ID {user_id}." diff --git a/days/089-092-deployment/demo/billtracker/billtracker/views/default.py b/days/089-092-deployment/demo/billtracker/billtracker/views/default.py index 3f33c6ea..dc6751eb 100644 --- a/days/089-092-deployment/demo/billtracker/billtracker/views/default.py +++ b/days/089-092-deployment/demo/billtracker/billtracker/views/default.py @@ -20,10 +20,7 @@ def home(request: Request): def details_get(request: Request): vm = BillDetailsViewModel(request, user_id=1) - if not vm.bill: - return Response(status=404) - - return vm.to_dict() + return Response(status=404) if not vm.bill else vm.to_dict() @view_config(route_name='details', @@ -42,4 +39,4 @@ def details_post(request: Request): repository.add_payment(vm.amount, vm.bill_id) - return HTTPFound(location='/bill/{}'.format(vm.bill_id)) + return HTTPFound(location=f'/bill/{vm.bill_id}') diff --git a/days/093-096-vuejs/movie_svc/data/db.py b/days/093-096-vuejs/movie_svc/data/db.py index 09978d6f..c88a246f 100644 --- a/days/093-096-vuejs/movie_svc/data/db.py +++ b/days/093-096-vuejs/movie_svc/data/db.py @@ -3,9 +3,9 @@ import collections from typing import List -__movie_data = dict() +__movie_data = {} __genres = collections.defaultdict(list) -__top_movies = list() +__top_movies = [] Movie = collections.namedtuple( 'Movie', @@ -17,7 +17,7 @@ def movie_to_dict(m: Movie): if not m: return {} - d = dict( + return dict( imdb_code=m.imdb_code, title=m.title, director=m.director, @@ -26,16 +26,13 @@ def movie_to_dict(m: Movie): genres=list(m.genres), rating=m.rating, year=m.year, - imdb_score=m.imdb_score + imdb_score=m.imdb_score, ) - return d - def find_by_imdb(imdb_code: str) -> List[Movie]: global __movie_data - movie = __movie_data.get(imdb_code) - return movie + return __movie_data.get(imdb_code) def search_keyword(keyword: str) -> List[Movie]: @@ -64,12 +61,7 @@ def search_title(keyword: str) -> List[Movie]: keyword = keyword.lower().strip() - hits = [] - for m in __movie_data.values(): - if m.lower_title.find(keyword) >= 0: - hits.append(m) - - return hits + return [m for m in __movie_data.values() if m.lower_title.find(keyword) >= 0] def search_director(director: str) -> List[Movie]: @@ -80,18 +72,17 @@ def search_director(director: str) -> List[Movie]: director = director.lower().strip() - hits = [] - for m in __movie_data.values(): - if m.director.lower().find(director) >= 0: - hits.append(m) - - return hits + return [ + m + for m in __movie_data.values() + if m.director.lower().find(director) >= 0 + ] def all_genres() -> List[str]: global __genres - genre_names = [key for key in __genres] + genre_names = list(__genres) genre_names.sort(key=lambda n: n) return genre_names @@ -171,10 +162,7 @@ def __build_genres(): def __make_numerical(text): - if not text or not text.strip(): - return 0 - - return int(text) + return 0 if not text or not text.strip() else int(text) def __build_imdb_code(link): @@ -184,10 +172,7 @@ def __build_imdb_code(link): # tt0449088 parts = link.split('/') - if len(parts) < 5: - return None - - return parts[4] + return None if len(parts) < 5 else parts[4] def __split_separated_text(text): @@ -195,10 +180,4 @@ def __split_separated_text(text): return text text = text.strip() - parts = [ - p.strip() - for p in text.split('|') - if p and p.strip() - ] - - return parts + return [p.strip() for p in text.split('|') if p and p.strip()] diff --git a/days/093-096-vuejs/movie_svc/views/api_views.py b/days/093-096-vuejs/movie_svc/views/api_views.py index 3d6186f5..8acfcc61 100644 --- a/days/093-096-vuejs/movie_svc/views/api_views.py +++ b/days/093-096-vuejs/movie_svc/views/api_views.py @@ -9,7 +9,7 @@ @api.route("/api/search/{keyword}") def search_keyword(req, resp, keyword: str): movies = db.search_keyword(keyword) - print("Searching for {}, {} results".format(keyword, len(movies))) + print(f"Searching for {keyword}, {len(movies)} results") limited = len(movies) > response_count_max if limited: @@ -26,7 +26,7 @@ def search_keyword(req, resp, keyword: str): @api.route("/api/director/{director_name}") def search_director(_, resp, director_name: str): movies = db.search_director(director_name) - print("Searching for director {}, {} results".format(director_name, len(movies))) + print(f"Searching for director {director_name}, {len(movies)} results") limited = len(movies) > response_count_max if limited: @@ -48,7 +48,7 @@ def all_genres(_, resp: Response): @api.route("/api/movie/genre/{genre}") def movies_by_genre(_, resp: Response, genre: str): hits = db.movies_by_genre(genre) - print("Searching for movies by genre {}, {} results".format(genre, len(hits))) + print(f"Searching for movies by genre {genre}, {len(hits)} results") limited = len(hits) > response_count_max if limited: @@ -75,7 +75,7 @@ def top_movies(_, resp: Response): for m in hits ] - keyword = "top_{}".format(response_count_max) + keyword = f"top_{response_count_max}" resp.media = {'keyword': keyword, 'hits': hits_dicts, 'truncated_results': limited} @@ -83,6 +83,8 @@ def top_movies(_, resp: Response): @api.route("/api/movie/{imdb_number}") def search_imdb(_, resp, imdb_number: str): movie = db.find_by_imdb(imdb_number) - print("Looking up movie by code: {}, found? {}".format(imdb_number, 'Yes' if movie else 'NO')) + print( + f"Looking up movie by code: {imdb_number}, found? {'Yes' if movie else 'NO'}" + ) resp.media = db.movie_to_dict(movie) diff --git a/days/097-100-docker/demo/services/movie_svc/data/db.py b/days/097-100-docker/demo/services/movie_svc/data/db.py index 09978d6f..c88a246f 100644 --- a/days/097-100-docker/demo/services/movie_svc/data/db.py +++ b/days/097-100-docker/demo/services/movie_svc/data/db.py @@ -3,9 +3,9 @@ import collections from typing import List -__movie_data = dict() +__movie_data = {} __genres = collections.defaultdict(list) -__top_movies = list() +__top_movies = [] Movie = collections.namedtuple( 'Movie', @@ -17,7 +17,7 @@ def movie_to_dict(m: Movie): if not m: return {} - d = dict( + return dict( imdb_code=m.imdb_code, title=m.title, director=m.director, @@ -26,16 +26,13 @@ def movie_to_dict(m: Movie): genres=list(m.genres), rating=m.rating, year=m.year, - imdb_score=m.imdb_score + imdb_score=m.imdb_score, ) - return d - def find_by_imdb(imdb_code: str) -> List[Movie]: global __movie_data - movie = __movie_data.get(imdb_code) - return movie + return __movie_data.get(imdb_code) def search_keyword(keyword: str) -> List[Movie]: @@ -64,12 +61,7 @@ def search_title(keyword: str) -> List[Movie]: keyword = keyword.lower().strip() - hits = [] - for m in __movie_data.values(): - if m.lower_title.find(keyword) >= 0: - hits.append(m) - - return hits + return [m for m in __movie_data.values() if m.lower_title.find(keyword) >= 0] def search_director(director: str) -> List[Movie]: @@ -80,18 +72,17 @@ def search_director(director: str) -> List[Movie]: director = director.lower().strip() - hits = [] - for m in __movie_data.values(): - if m.director.lower().find(director) >= 0: - hits.append(m) - - return hits + return [ + m + for m in __movie_data.values() + if m.director.lower().find(director) >= 0 + ] def all_genres() -> List[str]: global __genres - genre_names = [key for key in __genres] + genre_names = list(__genres) genre_names.sort(key=lambda n: n) return genre_names @@ -171,10 +162,7 @@ def __build_genres(): def __make_numerical(text): - if not text or not text.strip(): - return 0 - - return int(text) + return 0 if not text or not text.strip() else int(text) def __build_imdb_code(link): @@ -184,10 +172,7 @@ def __build_imdb_code(link): # tt0449088 parts = link.split('/') - if len(parts) < 5: - return None - - return parts[4] + return None if len(parts) < 5 else parts[4] def __split_separated_text(text): @@ -195,10 +180,4 @@ def __split_separated_text(text): return text text = text.strip() - parts = [ - p.strip() - for p in text.split('|') - if p and p.strip() - ] - - return parts + return [p.strip() for p in text.split('|') if p and p.strip()] diff --git a/days/097-100-docker/demo/services/movie_svc/views/api_views.py b/days/097-100-docker/demo/services/movie_svc/views/api_views.py index babae6ea..876f2902 100644 --- a/days/097-100-docker/demo/services/movie_svc/views/api_views.py +++ b/days/097-100-docker/demo/services/movie_svc/views/api_views.py @@ -9,7 +9,7 @@ @api.route("/api/search/{keyword}") def search_keyword(req, resp, keyword: str): movies = db.search_keyword(keyword) - print("Searching for {}, {} results".format(keyword, len(movies))) + print(f"Searching for {keyword}, {len(movies)} results") limited = len(movies) > response_count_max if limited: @@ -26,7 +26,7 @@ def search_keyword(req, resp, keyword: str): @api.route("/api/director/{director_name}") def search_director(_, resp, director_name: str): movies = db.search_director(director_name) - print("Searching for director {}, {} results".format(director_name, len(movies))) + print(f"Searching for director {director_name}, {len(movies)} results") limited = len(movies) > response_count_max if limited: @@ -53,7 +53,7 @@ def top_movies(_, resp: Response): for m in hits ] - keyword = "top_{}".format(response_count_max) + keyword = f"top_{response_count_max}" resp.media = {'keyword': keyword, 'hits': hits_dicts, 'truncated_results': limited} @@ -61,7 +61,9 @@ def top_movies(_, resp: Response): @api.route("/api/movie/{imdb_number}") def search_imdb(_, resp, imdb_number: str): movie = db.find_by_imdb(imdb_number) - print("Looking up movie by code: {}, found? {}".format(imdb_number, 'Yes' if movie else 'NO')) + print( + f"Looking up movie by code: {imdb_number}, found? {'Yes' if movie else 'NO'}" + ) resp.media = db.movie_to_dict(movie) @@ -74,7 +76,7 @@ def all_genres(_, resp: Response): @api.route("/api/movie/genre/{genre}") def movies_by_genre(_, resp: Response, genre: str): hits = db.movies_by_genre(genre) - print("Searching for movies by genre {}, {} results".format(genre, len(hits))) + print(f"Searching for movies by genre {genre}, {len(hits)} results") limited = len(hits) > response_count_max if limited: