Skip to content

Commit 1b00a0d

Browse files
committed
work on write size limit #188
1 parent dac15bc commit 1b00a0d

File tree

3 files changed

+53
-6
lines changed

3 files changed

+53
-6
lines changed

mapswipe_workers/mapswipe_workers/base/base_project.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,16 +167,41 @@ def save_to_firebase(self, fb_db, project, groups, groupsOfTasks):
167167

168168

169169
ref = fb_db.reference('')
170+
# save project
170171
ref.update({
171-
f'v2/projects/{self.projectId}': project,
172-
f'v2/groups/{self.projectId}': groups,
173-
f'v2/tasks/{self.projectId}': groupsOfTasks,
172+
f'v2/projects/{self.projectId}': project
174173
})
175174
logger.info(
176175
f'{self.projectId} -'
177-
f' uploaded project, groups and'
178-
f' tasks to firebase realtime database'
176+
f' uploaded project to firebase realtime database'
179177
)
178+
# save groups
179+
ref.update({
180+
f'v2/groups/{self.projectId}': groups
181+
})
182+
logger.info(
183+
f'{self.projectId} -'
184+
f' uploaded groups to firebase realtime database'
185+
)
186+
# save tasks, to avoid firebase write size limit we write chunks of task
187+
# we write the tasks for 250 groups at once
188+
task_upload_dict = {}
189+
190+
logger.info(f'there are {len(groupsOfTasks)} groups for this project')
191+
for group_id, tasks_list in groupsOfTasks.items():
192+
task_upload_dict[f'v2/projects/{self.projectId}/{group_id}'] = tasks_list
193+
194+
if len(task_upload_dict) % 150 == 0:
195+
logger.info(task_upload_dict)
196+
197+
ref.update(task_upload_dict)
198+
logger.info(
199+
f'{self.projectId} -'
200+
f' uploaded 150 groups with tasks to firebase realtime database'
201+
)
202+
task_upload_dict = {}
203+
204+
180205
ref = fb_db.reference(f'v2/projectDrafts/{self.projectId}')
181206
ref.set({})
182207

mapswipe_workers/sample_data/build_area_project_drafts.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,27 @@
3232
"wmtsLayerName": "FALSE_COLOR"
3333
},
3434
"zoomLevel": 14
35+
},
36+
"build_area_big": {
37+
"createdBy": "Sample Manager",
38+
"geometry": {
39+
"type": "FeatureCollection",
40+
"name": "Bukindon_South",
41+
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
42+
"features": [
43+
{ "type": "Feature", "properties": { }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 124.552337022305508, 8.013183564718995 ], [ 125.377278964821471, 8.029047832844302 ], [ 125.37539673, 8.02042961000001 ], [ 125.38337708, 8.00566959 ], [ 125.38165283, 7.98554993 ], [ 125.40270996, 7.96005011 ], [ 125.40054321, 7.93393993 ], [ 125.42089081, 7.91193008 ], [ 125.41744232, 7.81731987000001 ], [ 125.44413757, 7.75562 ], [ 125.44290924, 7.71647978 ], [ 125.42626953, 7.68472004 ], [ 125.43073273, 7.65559006 ], [ 125.42360687, 7.64100981 ], [ 125.39592743, 7.62140989 ], [ 125.37480164, 7.63410997 ], [ 125.35057831, 7.63816023 ], [ 125.32256317, 7.62744999 ], [ 125.30198669, 7.63472986 ], [ 125.30090332, 7.64885998 ], [ 125.28074646, 7.64744997 ], [ 125.28038025, 7.64074993 ], [ 125.25241089, 7.64373016000002 ], [ 125.25203705, 7.57984018000001 ], [ 125.21894073, 7.59195995 ], [ 125.21656799, 7.57053995 ], [ 125.19329834, 7.57212019 ], [ 125.16586304, 7.5229702 ], [ 125.15531921, 7.46537018 ], [ 125.13262939, 7.46412992 ], [ 125.11971283, 7.45313978000001 ], [ 125.06778717, 7.45175982000001 ], [ 125.05996704, 7.41956997 ], [ 125.04620361, 7.40458012000001 ], [ 124.97190857, 7.40071011000001 ], [ 124.94645691, 7.41130018 ], [ 124.92875671, 7.43205023 ], [ 124.89972687, 7.41360998 ], [ 124.88018036, 7.41554022 ], [ 124.87835693, 7.43260002 ], [ 124.86456299, 7.4320302 ], [ 124.84023285, 7.45099020000001 ], [ 124.84063721, 7.47724009 ], [ 124.82692719, 7.48998022000001 ], [ 124.81472015, 7.49597979000001 ], [ 124.7882309, 7.48022985 ], [ 124.79981232, 7.51733017 ], [ 124.82507324, 7.54148006 ], [ 124.82501221, 7.55834007 ], [ 124.81430054, 7.56812 ], [ 124.82051086, 7.57296991 ], [ 124.81165314, 7.57566977 ], [ 124.81788635, 7.59229994 ], [ 124.80444336, 7.5985198 ], [ 124.8025589, 7.62318993 ], [ 124.75379944, 7.65322018000001 ], [ 124.75311279, 7.67986012 ], [ 124.74120331, 7.68281984 ], [ 124.74056244, 7.69629002000001 ], [ 124.72891235, 7.70124006 ], [ 124.72543335, 7.7186799 ], [ 124.73486328, 7.73115015 ], [ 124.70761108, 7.75507021 ], [ 124.70349884, 7.77635002 ], [ 124.68052673, 7.79621983 ], [ 124.66120911, 7.83530998000002 ], [ 124.63118744, 7.84638977 ], [ 124.62483215, 7.87036991 ], [ 124.61730957, 7.87075996 ], [ 124.62412262, 7.89082003 ], [ 124.59819794, 7.90516996000001 ], [ 124.60048676, 7.9162302 ], [ 124.55732727, 7.9840498 ], [ 124.56124115, 7.99703979000002 ], [ 124.552337022305508, 8.013183564718995 ] ] ] ] } }
44+
]
45+
},
46+
"image": "http://www.redcrosseth.org/media/k2/items/cache/5a05a447acfdf6fcc40548cc4c1cea8d_L.jpg",
47+
"lookFor": "BUILDINGS",
48+
"name": "BuildArea Big",
49+
"projectDetails": "This project uses Bing as the tile server and zoom level 18. This is the setup most MapSwipe projects used so far.",
50+
"verificationNumber": 3,
51+
"groupSize": 120,
52+
"tileServer": {
53+
"name": "bing",
54+
"credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO"
55+
},
56+
"projectType": 1
3557
}
3658
}

mapswipe_workers/tests/test_01_create_projects.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def create_project_manager(email, username, password):
1818
def load_sample_project_drafts():
1919
sample_data = {}
2020
test_dir = os.path.dirname(os.path.abspath(__file__))
21-
sample_data_dir = os.path.join(test_dir, 'sample_data/')
21+
sample_data_dir = os.path.join(test_dir, '../sample_data/')
2222
for sample_project_drafts_json in glob.glob(sample_data_dir + '*_drafts.json'):
2323
if sample_project_drafts_json == 'build_area_to_big_project_drafts_test.json':
2424
continue

0 commit comments

Comments
 (0)