11import random
2+ import gspread
23import re
34from math import floor
45import tasklists
@@ -496,7 +497,6 @@ def manual_revert_tasks(username, tier, task_id):
496497
497498
498499'''
499- DEPRECATED - No replacement
500500import_spreadsheet:
501501
502502The import_spreadsheet function, Imports a spreadsheet into the database.
@@ -516,123 +516,123 @@ def manual_revert_tasks(username, tier, task_id):
516516 list: each element is a str: of the tier import status.
517517
518518'''
519- # def import_spreadsheet(username, url):
520- # def update_current_task_from_sheet(username, tier, task_id):
521- # coll = mydb['taskAccounts']
522- # task_check = coll.find_one({'username': username, '%s._id' % tier: task_id},
523- # {'_id': 0, '%s.status' % tier: 1, '%s._id' % tier: 1})
524- # task_updated = False
525- # if task_check[tier][task_id - 1]['status'] == 'Incomplete':
526- # task_updated = True
527- # coll.update_one({'username': username, '%s._id' % tier: task_id},
528- # {'$set': {'%s.$.taskCurrent' % tier: True}})
529- # return task_updated
530-
531- # try:
532- # error = None
533- # task_import_logs = []
534- # task_current_logs = []
535- # speadsheet_key = re.search('\/d\/(.*?)(\/|$)', url)
536- # if speadsheet_key:
537- # service = gspread.service_account(filename="service_account.json")
538- # google_sheet = service.open_by_key(speadsheet_key.group(1))
539- # info_sheet = google_sheet.worksheet("Info")
540-
541- # current_sheet_tier = info_sheet.get('B13:B14')
542-
543- # tier, cell = current_sheet_tier[0][0], current_sheet_tier[1][0].replace('C', "")
544- # cell = int(cell) - 1
545- # sheet_tasks = []
546- # sheet_list = [
547- # 'Easy',
548- # 'Medium',
549- # 'Hard',
550- # 'Elite',
551- # 'Pets',
552- # 'Pets',
553- # 'Pets',
554- # 'Extra',
555- # 'Passive'
556- # ]
557-
558- # cell_range = [
559- # 'A2:C137', # Easy
560- # 'A2:C160', # Medium
561- # 'A2:C184', # Hard
562- # 'A2:C165', # Elite
563- # 'A2:C35', # Pets - Boss
564- # 'A37:C44', # Pets - Skill
565- # 'A46:C55', # Pets - Other
566- # 'A2:C119', # Extra
567- # 'A2:C44' # Passive
568- # ]
569-
570- # task_list = [
571- # tasklists.easy,
572- # tasklists.medium,
573- # tasklists.hard,
574- # tasklists.elite,
575- # tasklists.boss_pet,
576- # tasklists.skill_pet,
577- # tasklists.other_pet,
578- # tasklists.extra,
579- # tasklists.passive
580- # ]
581-
582- # taskdb_names = [
583- # 'easyTasks',
584- # 'mediumTasks',
585- # 'hardTasks',
586- # 'eliteTasks',
587- # 'bossPetTasks',
588- # 'skillPetTasks',
589- # 'otherPetTasks',
590- # 'extraTasks',
591- # 'passiveTasks'
592- # ]
593-
594- # for sheet_name, cells in zip(sheet_list, cell_range):
595- # ws = google_sheet.worksheet(sheet_name)
596- # tasks = ws.get(cells)
597- # sheet_tasks.append(tasks)
598- # if sheet_name == tier:
599- # current_list = []
600- # current_list.append(tasks)
601-
602- # coll = mydb['taskAccounts']
603- # user_tasks = coll.find_one({'username': username})
604-
605- # for sheet_task_list, tasks_lists, doc_list_names in zip(sheet_tasks, task_list, taskdb_names):
606- # if len(sheet_task_list) == len(tasks_lists):
607- # for i, (task_sheet, task_db) in enumerate(zip(sheet_task_list, tasks_lists), 1):
608- # if 'x' in task_sheet:
609- # user_tasks[doc_list_names][i - 1]['status'] = "Complete"
610- # coll.update_one({'username': username}, {'$set': {doc_list_names: user_tasks[doc_list_names]}})
611- # task_import_logs.append('Tasks for %s were updated!' % doc_list_names)
612- # else:
613- # task_import_logs.append(
614- # 'Unable to update %s! Spreadsheet data differs from database!' % doc_list_names)
615-
616- # if get_taskCurrent(username) is None:
617- # for i, (task) in enumerate(current_list[0], 1):
618- # if i == cell:
619- # sheets_db_dict = {}
620- # for i2, (key, value) in enumerate(zip(sheet_list, taskdb_names)):
621- # sheets_db_dict[key] = value
622- # if i2 == 3:
623- # update_current = update_current_task_from_sheet(username, sheets_db_dict[tier], i)
624- # if update_current is True:
625- # task_current_logs.append('Updated current task!')
626- # break
627- # else:
628- # task_current_logs.append('Current task already found!')
629- # else:
630- # error = "Spreadsheet URL is not valid!"
631- # return task_import_logs, task_current_logs, error
632- # except Exception as e:
633- # print(str(e))
634- # error = "There was a problem prcoessing the request. Contact Gerni Task on Discord."
635- # return task_import_logs, task_current_logs, error
519+ def import_spreadsheet (username , url ):
520+ def update_current_task_from_sheet (username , tier , task_id ):
521+ coll = mydb ['taskAccounts' ]
522+ task_check = coll .find_one ({'username' : username , '%s._id' % tier : task_id },
523+ {'_id' : 0 , '%s.status' % tier : 1 , '%s._id' % tier : 1 })
524+ task_updated = False
525+ if task_check [tier ][task_id - 1 ]['status' ] == 'Incomplete' :
526+ task_updated = True
527+ coll .update_one ({'username' : username , '%s._id' % tier : task_id },
528+ {'$set' : {'%s.$.taskCurrent' % tier : True }})
529+ return task_updated
530+
531+ try :
532+ error = None
533+ task_import_logs = []
534+ task_current_logs = []
535+ speadsheet_key = re .search ('\/d\/(.*?)(\/|$)' , url )
536+ if speadsheet_key :
537+ service = gspread .service_account (filename = "service_account.json" )
538+ google_sheet = service .open_by_key (speadsheet_key .group (1 ))
539+ info_sheet = google_sheet .worksheet ("Info" )
540+
541+ current_sheet_tier = info_sheet .get ('B13:B14' )
542+
543+ tier , cell = current_sheet_tier [0 ][0 ], current_sheet_tier [1 ][0 ].replace ('C' , "" )
544+ cell = int (cell ) - 1
545+ sheet_tasks = []
546+ sheet_list = [
547+ 'Easy' ,
548+ 'Medium' ,
549+ 'Hard' ,
550+ 'Elite' ,
551+ 'Pets' ,
552+ 'Pets' ,
553+ 'Pets' ,
554+ 'Extra' ,
555+ 'Passive'
556+ ]
557+
558+ cell_range = [
559+ 'A2:C137' , # Easy
560+ 'A2:C160' , # Medium
561+ 'A2:C184' , # Hard
562+ 'A2:C165' , # Elite
563+ 'A2:C35' , # Pets - Boss
564+ 'A37:C44' , # Pets - Skill
565+ 'A46:C55' , # Pets - Other
566+ 'A2:C119' , # Extra
567+ 'A2:C44' # Passive
568+ ]
569+
570+ task_list = [
571+ tasklists .easy ,
572+ tasklists .medium ,
573+ tasklists .hard ,
574+ tasklists .elite ,
575+ tasklists .boss_pet ,
576+ tasklists .skill_pet ,
577+ tasklists .other_pet ,
578+ tasklists .extra ,
579+ tasklists .passive
580+ ]
581+
582+ taskdb_names = [
583+ 'easyTasks' ,
584+ 'mediumTasks' ,
585+ 'hardTasks' ,
586+ 'eliteTasks' ,
587+ 'bossPetTasks' ,
588+ 'skillPetTasks' ,
589+ 'otherPetTasks' ,
590+ 'extraTasks' ,
591+ 'passiveTasks'
592+ ]
593+
594+ for sheet_name , cells in zip (sheet_list , cell_range ):
595+ ws = google_sheet .worksheet (sheet_name )
596+ tasks = ws .get (cells )
597+ sheet_tasks .append (tasks )
598+ if sheet_name == tier :
599+ current_list = []
600+ current_list .append (tasks )
601+
602+ coll = mydb ['taskAccounts' ]
603+ user_tasks = coll .find_one ({'username' : username })
604+
605+ for sheet_task_list , tasks_lists , doc_list_names in zip (sheet_tasks , task_list , taskdb_names ):
606+ if len (sheet_task_list ) == len (tasks_lists ):
607+ for i , (task_sheet , task_db ) in enumerate (zip (sheet_task_list , tasks_lists ), 1 ):
608+ if 'x' in task_sheet :
609+ user_tasks [doc_list_names ][i - 1 ]['status' ] = "Complete"
610+ coll .update_one ({'username' : username }, {'$set' : {doc_list_names : user_tasks [doc_list_names ]}})
611+ task_import_logs .append ('Tasks for %s were updated!' % doc_list_names )
612+ else :
613+ task_import_logs .append (
614+ 'Unable to update %s! Spreadsheet data differs from database!' % doc_list_names )
615+
616+ if get_taskCurrent (username ) is None :
617+ for i , (task ) in enumerate (current_list [0 ], 1 ):
618+ if i == cell :
619+ sheets_db_dict = {}
620+ for i2 , (key , value ) in enumerate (zip (sheet_list , taskdb_names )):
621+ sheets_db_dict [key ] = value
622+ if i2 == 3 :
623+ update_current = update_current_task_from_sheet (username , sheets_db_dict [tier ], i )
624+ if update_current is True :
625+ task_current_logs .append ('Updated current task!' )
626+ break
627+ else :
628+ task_current_logs .append ('Current task already found!' )
629+ else :
630+ error = "Spreadsheet URL is not valid!"
631+ return task_import_logs , task_current_logs , error
632+ except Exception as e :
633+ print (str (e ))
634+ error = "There was a problem prcoessing the request. Contact Gerni Task on Discord."
635+ return task_import_logs , task_current_logs , error
636636
637637
638638# NOT USED only for testing purposes.
0 commit comments