11"""
22Delete projects.
33"""
4-
4+ import re
55from typing import Iterable
66
77from firebase_admin import exceptions
88
99from mapswipe_workers import auth
10- from mapswipe_workers .definitions import logger
10+ from mapswipe_workers .definitions import logger , CustomError
1111
1212
1313def chunks (data : list , size : int = 250 ) -> Iterable [list ]:
1414 """Yield successive n-sized chunks from list."""
1515 for i in range (0 , len (data ), size ):
16- yield data [i : i + size ]
16+ yield data [i : i + size ] # noqa E203
1717
1818
1919def delete_project (project_ids : list ) -> None :
@@ -26,8 +26,12 @@ def delete_project(project_ids: list) -> None:
2626 )
2727
2828 fb_db = auth .firebaseDB ()
29-
3029 ref = fb_db .reference (f"v2/results/{ project_id } " )
30+ if not re .match (r"/v2/\w+/[-a-zA-Z0-9]+" , ref .path ):
31+ raise CustomError (
32+ f"""Given argument resulted in invalid Firebase Realtime Database reference.
33+ { ref .path } """
34+ )
3135 try :
3236 ref .delete ()
3337 except exceptions .InvalidArgumentError :
@@ -39,6 +43,11 @@ def delete_project(project_ids: list) -> None:
3943 ref .delete ()
4044
4145 ref = fb_db .reference (f"v2/tasks/{ project_id } " )
46+ if not re .match (r"/v2/\w+/[-a-zA-Z0-9]+" , ref .path ):
47+ raise CustomError (
48+ f"""Given argument resulted in invalid Firebase Realtime Database reference.
49+ { ref .path } """
50+ )
4251 try :
4352 ref .delete ()
4453 except exceptions .InvalidArgumentError :
@@ -49,17 +58,29 @@ def delete_project(project_ids: list) -> None:
4958 ref .update ({key : None for key in chunk })
5059 ref .delete ()
5160
52- fb_db .reference (f"v2/groups/{ project_id } " ).delete ()
53- fb_db .reference (f"v2/projects/{ project_id } " ).delete ()
61+ ref = fb_db .reference (f"v2/groups/{ project_id } " )
62+ if not re .match (r"/v2/\w+/[-a-zA-Z0-9]+" , ref .path ):
63+ raise CustomError (
64+ f"""Given argument resulted in invalid Firebase Realtime Database reference.
65+ { ref .path } """
66+ )
67+ ref .delete ()
68+ ref = fb_db .reference (f"v2/projects/{ project_id } " )
69+ if not re .match (r"/v2/\w+/[-a-zA-Z0-9]+" , ref .path ):
70+ raise CustomError (
71+ f"""Given argument resulted in invalid Firebase Realtime Database reference.
72+ { ref .path } """
73+ )
74+ ref .delete ()
5475
5576 pg_db = auth .postgresDB ()
56- sql_query = "DELETE FROM results WHERE project_id = {};" . format (project_id )
57- pg_db .query (sql_query , project_id )
58- sql_query = "DELETE FROM tasks WHERE project_id = {};" . format (project_id )
59- pg_db .query (sql_query , project_id )
60- sql_query = "DELETE FROM groups WHERE project_id = {};" . format (project_id )
61- pg_db .query (sql_query , project_id )
62- sql_query = "DELETE FROM projects WHERE project_id = {};" . format (project_id )
63- pg_db .query (sql_query , project_id )
77+ sql_query = "DELETE FROM results WHERE project_id = % (project_id)s;"
78+ pg_db .query (sql_query , { " project_id" : project_id } )
79+ sql_query = "DELETE FROM tasks WHERE project_id = % (project_id)s;"
80+ pg_db .query (sql_query , { " project_id" : project_id } )
81+ sql_query = "DELETE FROM groups WHERE project_id = % (project_id)s;"
82+ pg_db .query (sql_query , { " project_id" : project_id } )
83+ sql_query = "DELETE FROM projects WHERE project_id = % (project_id)s;"
84+ pg_db .query (sql_query , { " project_id" : project_id } )
6485
6586 return True
0 commit comments