예제 #1
0
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()
예제 #2
0
	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.")
예제 #3
0
	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.")
예제 #4
0
	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.")