Skip to content

Commit

Permalink
Support the new Firebase Realtime Database structure #104
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthias committed Mar 21, 2019
1 parent 026614c commit e75b8b1
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 60 deletions.
10 changes: 6 additions & 4 deletions mapswipe_workers/ProjectTypes/BuildArea/BuildAreaImport.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ class BuildAreaImport(BaseImport):

project_type = 1

def __init__(self, project_draft_id, project_draft):
def __init__(self, project_draft):
# this will create the basis attributes
super().__init__(project_draft_id, project_draft)
super().__init__(project_draft)

# set group size
self.info["groupSize"] = 50
Expand Down Expand Up @@ -92,8 +92,10 @@ def __init__(self, project_draft_id, project_draft):
self.validate_geometries()

def validate_geometries(self):
raw_input_file = f'{DATA_PATH}/input_geometries/\
raw_input_{self.project_draft_id}.kml'
raw_input_file = (
f'{DATA_PATH}/input_geometries/'
f'raw_input_{self.project_draft_id}.kml'
)
# check if a 'data' folder exists and create one if not
if not os.path.isdir('{}/input_geometries'.format(DATA_PATH)):
os.mkdir('{}/input_geometries'.format(DATA_PATH))
Expand Down
58 changes: 29 additions & 29 deletions mapswipe_workers/basic/BaseFunctions.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,8 +322,7 @@ def project_exists_postgres(project_id, postgres):
########################################################################################################################



def get_new_project_drafts():
def get_new_project_drafts(fb_db):
"""
The function to get new project drafts from firebase
Expand All @@ -339,22 +338,20 @@ def get_new_project_drafts():
"""
# TODO: Check if deleting projectDraft after creation makes sense

fb_db = auth.firebaseDB()
ref = fb_db.reference('projectDrafts/')
project_drafts= ref.get()

# key: project_draft_id
# value: dict containing project_draft
for project_draft_id, project_draft in project_drafts.items():
project_draft['project_draft_id'] = project_draft_id

new_project_drafts = list()

if project_drafts:
for project_draft in project_drafts:
if project_draft['complete']:
continue
else:
new_project_drafts.append(project_draft)
# key: project_draft_id
# value: dict containing project_draft
for project_draft_id, project_draft in project_drafts.items():
project_draft['project_draft_id'] = project_draft_id
if 'complete' in project_draft:
continue
else:
new_project_drafts.append(project_draft)

return new_project_drafts

Expand Down Expand Up @@ -432,7 +429,7 @@ def run_create_project():

fb_db = auth.firebaseDB()

project_drafts = get_new_project_drafts(firebase)
project_drafts = get_new_project_drafts(fb_db)
created_project_ids = list()

for project_draft in project_drafts:
Expand All @@ -444,25 +441,28 @@ def run_create_project():

try:
project = project_types[project_type](project_draft)
project_id = project.create_project()
project_id = project.create_project(fb_db)
created_project_ids.append(project_id)
try:

slack.send_slack_message(f'### IMPORT SUCCESSFUL ### \n
project_name: {project_draft["name"]}\n
project_draft_id: {project_draft["project_draft_id"] \n
project_id: {project_id} \n
project-type: {project_types[project_type]}\n
Make sure to activate the project in firebase. \n
Happy Swiping. :)')
except:
logging.exception('could not send slack message.')
try:
slack.send_slack_message(
f'### IMPORT SUCCESSFUL ### '
f'project_name: {project_draft["name"]}, '
f'project_draft_id: {project_draft["project_draft_id"]}, '
f'project_id: {project_id}, '
f'project-type: {project_types[project_type]}, '
f'Make sure to activate the project in firebase. '
f'Happy Swiping. :)'
)
except:
logging.exception('could not send slack message.')

except CustomError as error:
error_handling.send_error(error, import_key)
logging.exception(f'{project_draft_id} \
- get_new_imports - \
import failed')
logging.exception(
f'{project_draft_id} '
f'- get_new_imports - '
f'import failed'
)
continue

return created_project_ids
Expand Down
52 changes: 26 additions & 26 deletions mapswipe_workers/basic/BaseImport.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class BaseImport(object):
set by specific types of projects
"""

def __init__(self, project_draft_id, project_draft):
def __init__(self, project_draft):
"""
The function to initialize a new import
Expand All @@ -55,7 +55,7 @@ def __init__(self, project_draft_id, project_draft):

logging.warning(f'{submission_key} - __init__ - start init')

self.project_draft_id = project_draft_id
self.project_draft_id = project_draft['project_draft_id']
self.project_type = project_draft['projectType'],
self.name = project_draft['name']
self.image = project_draft['image']
Expand All @@ -78,7 +78,7 @@ def __init__(self, project_draft_id, project_draft):
self.info[key] = project_draft[key]


def create_project(self):
def create_project(self, fb_db):
"""
The function to import a new project in firebase and postgres.
Expand All @@ -88,17 +88,15 @@ def create_project(self):
project_id and project_type
"""

fb_db = auth.firebaseDB()
psql_db = auth.psqlDB()

projects_ref = fb_db.reference('projects/')
groups_ref = fb_db.reference('groups/')
tasks_ref = fb_db.reference('tasks/')
# psql_db = auth.psqlDB()

try:
logging.warning(f'{self.project_draft_id}\
- import_project - start importing')
logging.warning(
f'{self.project_draft_id}'
f'- import_project - start importing'
)

projects_ref = fb_db.reference('projects/')
# create a new empty project in firebase
new_project_ref = projects_ref.push()
# get the project id of new created project
Expand All @@ -109,9 +107,9 @@ def create_project(self):
groups = self.create_groups(project_id)

# extract tasks from groups
tasks = {}
for group in groups:
tasks[group.id] = group['tasks']
tasks = dict()
for group_id, group in groups.items():
tasks[group_id] = group['tasks']
del group['tasks']

project = {
Expand All @@ -132,23 +130,24 @@ def create_project(self):
}

# upload data to postgres
self.execute_import_queries(
pg_db,
project_id,
project,
groups,
tasks,
)
# TODO: upload data to postgres! -> uncomment:
# self.execute_import_queries(
# pg_db,
# project_id,
# project,
# groups,
# tasks,
# )

# upload data to firebase
new_project_ref.set(project)
logging.warning('%s - uploaded project in firebase' % project['id'])

new_groups_ref = (f'{groups_ref}/{project_id}/')
new_groups.ref.set(groups)
new_groups_ref = fb_db.reference(f'groups/{project_id}/')
new_groups_ref.set(groups)
logging.warning('%s - uploaded groups in firebase' % project_id)

new_tasks_ref = (f'{tasks_ref}/{project_id}/')
new_tasks_ref = fb_db.reference(f'tasks/{project_id}/')
new_tasks_ref.set(tasks)
logging.warning('%s - uploaded tasks in firebase' % project_id)

Expand Down Expand Up @@ -490,6 +489,7 @@ def set_import_complete(self, firebase):
fb_db = firebase.database()
fb_db.child("imports").child(self.project_draft_id).child('complete').set(True)

logging.warning(f'{self.project_draft_id}\
- set_import_complete - set import complete')
logging.warning(
f'{self.project_draft_id} '
f'- set_import_complete - set import complete')
return True
2 changes: 1 addition & 1 deletion tests/new_test_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@


def test_import_process():
imported_projects = BaseFunctions.run_import('production')
imported_projects = BaseFunctions.run_create_project()

# save all keys to disk
filename = 'imported_project_ids.pickle'
Expand Down

0 comments on commit e75b8b1

Please sign in to comment.