def _initial_load(): if len(_duties) == 0 and len(_dutyStrategies) == 0: sesh = makeSession() for duty in sesh.query(Duty).all(): _duties[duty.id] = { "name": duty.name, "description": duty.description, "imageLocation": duty.imageLocation, "receivedFromQuest": duty.receivedFromQuest, "isMainStory": duty.isMainStory, "expansion": duty.expansion, "levelMin": duty.levelMin, "levelMax": duty.levelMax, "iLevelMin": duty.iLevelMin, "iLevelSync": duty.iLevelSync, "roulette": duty.roulette, "tomestoneType": duty.tomestoneType, "tomestonesRewarded": duty.tomestonesRewarded, "xpRewarded": duty.xpRewarded, "gilRewarded": duty.gilRewarded, "partySize": duty.partySize } _dutyStrategies[duty.id] = {} for strat in sesh.query(DutyStrategy).all(): _dutyStrategies[strat.dutyId][strat.role] = strat.strategy sesh.close()
def SetDutyStrategy(request, magicHash, dutyCode, role, strategy): """If you know the magicHash, allows you to set strategy information for a given duty and job.""" # Check to see if initial load is required global _initial_load _initial_load() # Verification of the data if not dutyCode in _duties: raise Fault(faultcode = "Client.DutyCodeDoesNotExist", faultstring = "The given duty code does not exist.") if not role in ["tank", "healer", "dps", "misc"]: raise Fault(faultcode = "Client.RoleNameInvalid", faultstring = "The given role name is invalid.") # Verification of the hash if sha256(magicHash).hexdigest() == 'feb3de6cf791db25e757b1b89b99a990ee218b29da5e09afe2ae60dea869e84f': # Try to connect to the database try: sesh = makeSession() except: raise Fault(faultcode = "Server.SessionError", faultstring = "Database session creation failed.") # Try to add the duty strategy try: existingStrategy = sesh.query(DutyStrategy).get((dutyCode, role)) if not existingStrategy: newStrategy = sesh.add(DutyStrategy(dutyId = dutyCode, role = role, strategy = strategy)) else: setattr(existingStrategy, role, strategy) except: sesh.close() raise Fault(faultcode = "Server.DataError", faultstring = "Database was unable to create the new strategy info.") # Try to commit the data try: sesh.commit() except: sesh.rollback() sesh.close() raise Fault(faultcode = "Server.CommitError", faultstring = "Database was unable to commit the new strategy info.") # Add the duty to the master dict global _dutyStrategies if not dutyCode in _dutyStrategies: _dutyStrategies[dutyCode] = {} _dutyStrategies[dutyCode][role] = strategy sesh.close() return "OK" else: raise Fault(faultcode = "Client.BadHash", faultstring = "Access denied due to incorrect magicHash.")
def AddDuty(request, magicHash, dutyCode, dutyType): """If you know the magicHash, allows you to add a duty to the database.""" # Check to see if initial load is required global _initial_load _initial_load() # Verification of the data if len(dutyCode) > 16: raise Fault(faultcode = "Client.DutyCode", faultstring = "Code is too long (must be <16 chars).") if not dutyType in ["dungeon", "trial", "raid", "guildhest", "roulette"]: raise Fault(faultcode = "Client.DutyType", faultstring = "Only the following values are allowed: 'dungeon', 'trial', 'raid', 'guildhest', 'roulette'.") # Verification of the hash if sha256(magicHash).hexdigest() == 'f43e52381d33c58a4362ebc646a4924b81448e4383dff916ebce8b4c1a4627bc': # Try to connect to the database try: sesh = makeSession() except: raise Fault(faultcode = "Server.SessionError", faultstring = "Database session creation failed.") # Try to add the duty try: newDuty = Duty(id = dutyCode, type = dutyType) sesh.add(newDuty) except: sesh.close() raise Fault(faultcode = "Server.DataError", faultstring = "Database was unable to create the new duty.") # Try to commit the data try: sesh.commit() except: sesh.rollback() sesh.close() raise Fault(faultcode = "Server.CommitError", faultstring = "Database was unable to commit the new duty.") # Add the duty to the master dict global _duties, _dutyStrategies _duties[dutyCode] = {} _dutyStrategies[dutyCode] = {} sesh.close() return "OK" else: raise Fault(faultcode = "Client.BadHash", faultstring = "Access denied due to incorrect magicHash.")
def SetDutyProperty(request, magicHash, dutyCode, propertyName, propertyValue): """If you know the magicHash, allows you to set a duty's property (any of the miscellaneous fields, not strategy information).""" # Check to see if initial load is required global _initial_load _initial_load() # Verification of the data if not dutyCode in _duties: raise Fault(faultcode = "Client.DutyCodeDoesNotExist", faultstring = "The given duty code does not exist.") if not propertyName in ["name", "description", "imageLocation", "receivedFromQuest", "isMainStory", "expansion", "levelMin", "levelMax", "iLevelMin", "iLevelSync", "roulette", "tomestoneType", "tomestonesRewarded", "xpRewarded", "gilRewarded", "partySize"]: raise Fault(faultcode = "Client.PropertyNameInvalid", faultstring = "The given property name is invalid.") # Verification of the hash if sha256(magicHash).hexdigest() == '17f7bd1bcd476d65105fd7cf4695a9bb608eaa37f2a213c34963b8d6511457af': # Try to connect to the database try: sesh = makeSession() except: raise Fault(faultcode = "Server.SessionError", faultstring = "Database session creation failed.") # Try to get the duty and change the property try: thisDuty = sesh.query(Duty).get(dutyCode) setattr(thisDuty, propertyName, propertyValue) except: sesh.close() raise Fault(faultcode = "Server.DataError", faultstring = "Database was unable to retrieve or update the duty.") # Try to commit the data try: sesh.commit() except: sesh.rollback() sesh.close() raise Fault(faultcode = "Server.CommitError", faultstring = "Database was unable to commit the new duty information.") # Change the property data in the local dict global _duties _duties[dutyCode][propertyName] = propertyValue sesh.close() return "OK" else: raise Fault(faultcode = "Client.BadHash", faultstring = "Access denied due to incorrect magicHash.")