def build(self): return_data = {} for i in self.cache.boards: board = self.cache.boards[i] #return_data[board.id] = { # 'id': board.id, # 'name': safestr(board.name), # 'description': safestr(board.description), # 'modify_time': safestr(board.modify_time), # 'messages': [] #} return_data[0] = {'number': 0, 'messages': []} count = 0 messages = self.cache.messages[i] for listpos, node in enumerate(messages): message = node.CurrentOrder return_data[0]['messages'].append({ 'slot': message.slot, 'subject': safestr(message.subject), 'body': safestr(message.body), 'turn': message.turn, #'references': str(message.references) }) count = count + 1 return_data[0]['number'] = count return return_data
def get_args(self, orderdesc, order=None): args = [] # Loop through all arguments for this order description for name, subtype in orderdesc.names: name_text = name.title().replace('_', '') # Get type and if order also get current value type = None if subtype == constants.ARG_ABS_COORD: type = 'coordinate' elif subtype == constants.ARG_LIST: type = 'list' elif subtype == constants.ARG_STRING: type = 'string' elif subtype == constants.ARG_TIME: type = 'time' elif subtype == constants.ARG_OBJECT: type = 'object' value = None if order: value = list(getattr(order, name)) def recur_map(func, data): if hasattr(data, '__iter__'): return [recur_map(func, elem) for elem in data] else: return func(data) value = recur_map(safestr, value) args.append({'name': safestr(name_text), 'type': type, 'description': safestr(getattr(orderdesc, name+'__doc__')), 'value': value}) return args
def build(self): """Build json friendly structure""" return_data = {} for i in self.cache.objects: # Retrives object and orders for that object object = self.cache.objects[i] orders = self.cache.orders[i] # If we have orders for this object or the object can receive orders if object.order_number > 0 or len(object.order_types) > 0: # Build the initialize structure for this object and its orders return_data[i] = {'orders': {}, 'order_type': []} # Go through all orders currently on the object for listpos, node in enumerate(orders): order = node.CurrentOrder orderdesc = objects.OrderDescs()[order.subtype] if hasattr(orderdesc, 'doc'): desc = orderdesc.doc else: desc = orderdesc.__doc__ desc = desc.strip() args = self.get_args(orderdesc, order) return_data[i]['orders'][int(node.id)] = { 'order_id': int(node.id), 'name': safestr(order._name), 'description': safestr(desc), 'type': order.subtype, 'turns': order.turns, 'args': args} # Go through all possible orders this object can receive for type in object.order_types: # If type is not recognized, ignore it if not objects.OrderDescs().has_key(type): continue # Retrive order description orderdesc = objects.OrderDescs()[type] if hasattr(orderdesc, 'doc'): desc = orderdesc.doc else: desc = orderdesc.__doc__ desc = desc.strip() args = self.get_args(orderdesc) return_data[i]['order_type'].append({ 'name': safestr(orderdesc._name), 'description': safestr(desc), 'type': type, 'args': args}) return return_data
def propertyparselist(property, property_list): """Todo: Relative Position/Vector needs to be accounted for""" #print property_list #print "Property_list size: ",len(property_list) vardict = {} subvardict = {} if property.__dict__.has_key('structures'): #Is group sturcture subproperty_list = getattr(property_list, property.name) #Gets Position list for subproperty in property.structures: subvardict.update(propertyparselist(subproperty, subproperty_list)) if(len(subvardict) > 0): vardict[safestr(property.name)] = subvardict else: #Is not a group structure #print "====================" if type(property_list) == Structures.ListStructure.ListProxy: for key, value in enumerate(property_list): vardict[key] = value elif type(property_list) == Structures.GroupStructure.GroupProxy: vardict[safestr(property.name)] = safestr(getattr(property_list, property.name)) else: print property print type(property) print property_list print type(property_list) print "====================" #print property_list, property.name, type(property) #print vardict return vardict
def get_args(self, orderdesc, order=None): args = [] for property in orderdesc.properties: name = property.name name_text = name.title().replace('_', '') type = None if isinstance(property, parameters.OrderParamAbsSpaceCoords): type = 'coordinate' elif isinstance(property, parameters.OrderParamList): type = 'list' elif isinstance(property, parameters.OrderParamString): type = 'string' elif isinstance(property, parameters.OrderParamTime): type = 'time' elif isinstance(property, parameters.OrderParamObject): type = 'object' else: print "Unknown Type" value = None if order: value = list(getattr(order, name)) def recur_map(func, data): if hasattr(data, '__iter__'): return [recur_map(func, elem) for elem in data] else: return func(data) value = recur_map(safestr, value) args.append({'name': safestr(name_text), 'type': type, 'description': safestr(property.description), 'value': value}) """ TODO MAYBE IF NEEDED elif isinstance(property, parameters.OrderParamPlayer): args += [[0, 0]] elif isinstance(property, parameters.OrderParamRange): args += [[-1, -1, -1, -1]] elif isinstance(property, parameters.OrderParamReference): args += [[0, [0]]] elif isinstance(property, parameters.OrderParamReferenceList): args += [[[0], [0]]] OrderComponent elif isinstance(property, parameters.OrderParamResourceList): args += [[[0,0], 0, 0, [0,0]]] elif isinstance(property, parameters.OrderParamGenericReferenceQuantityList): args += [[[0, []], [0, "", 0, [], []], []]] else: print "Unknown: ", type(property) return """ return args
def build(self): ret = {} for i in self.cache.objects: obj = self.cache.objects[i] ret[obj.id] = { 'name': safestr(obj.name), 'id': obj.id, 'type': {'id': obj.subtype, 'name': object_type[obj.subtype]}, 'size': obj.size, 'contains': obj.contains } if hasattr(obj, 'pos'): ret[obj.id]['pos'] = obj.pos if hasattr(obj, 'vel'): ret[obj.id]['vel'] = obj.vel if hasattr(obj, 'parent'): ret[obj.id]['parent'] = obj.parent if hasattr(obj, 'owner'): ret[obj.id]['owner'] = obj.owner if hasattr(obj, 'resources'): ret[obj.id]['resources'] = obj.resources if hasattr(obj, 'damage'): ret[obj.id]['damage'] = obj.damage if hasattr(obj, 'ships'): ret[obj.id]['ships'] = obj.ships return ret
def get_args(self, orderdesc, order=None): args = [] # Loop through all arguments for this order description for name, subtype in orderdesc.names: name_text = name.title().replace('_', '') # Get type and if order also get current value type = None if subtype == constants.ARG_ABS_COORD: type = 'coordinate' elif subtype == constants.ARG_LIST: type = 'list' elif subtype == constants.ARG_STRING: type = 'string' elif subtype == constants.ARG_TIME: type = 'time' elif subtype == constants.ARG_OBJECT: type = 'object' value = None if order: value = list(getattr(order, name)) def recur_map(func, data): if hasattr(data, '__iter__'): return [recur_map(func, elem) for elem in data] else: return func(data) value = recur_map(safestr, value) args.append({ 'name': safestr(name_text), 'type': type, 'description': safestr(getattr(orderdesc, name + '__doc__')), 'value': value }) return args
def checkIfImageExists(objectData, mediaListName): global knownImageUrls #Construct Server Image arr if len(knownImageUrls) == 0: knownImageUrls = getImageListFromFile(mediaListName) for i in objectData: obj = objectData[i] for k in ["Media", "Icon"]: if k in obj: url = obj[k] print "CheckingifImage " + "http://" + mediaRepoURL + url if url in knownImageUrls: objectData[i][k] = safestr("http://" + mediaRepoURL + url + "." + knownImageUrls[url]) else: obj[k] = "" return objectData
def build(self): ret = {} for i in self.cache.objects: obj = self.cache.objects[i] ret[obj.id] = { 'name': safestr(obj.name), 'id': obj.id, 'type': { 'id': obj.subtype, 'name': object_type[obj.subtype] }, 'size': obj.size, 'contains': obj.contains } if hasattr(obj, 'pos'): ret[obj.id]['pos'] = obj.pos if hasattr(obj, 'vel'): ret[obj.id]['vel'] = obj.vel if hasattr(obj, 'parent'): ret[obj.id]['parent'] = obj.parent if hasattr(obj, 'owner'): ret[obj.id]['owner'] = obj.owner if hasattr(obj, 'resources'): ret[obj.id]['resources'] = obj.resources if hasattr(obj, 'damage'): ret[obj.id]['damage'] = obj.damage if hasattr(obj, 'ships'): ret[obj.id]['ships'] = obj.ships return ret
def build(self): """Build json friendly structure""" return_data = {} for i in self.cache.objects: # Retrives object and orders for that object object = self.cache.objects[i] orders = self.cache.orders[i] # If we have orders for this object or the object can receive orders if object.order_number > 0 or len(object.order_types) > 0: # Build the initialize structure for this object and its orders return_data[i] = {'orders': {}, 'order_type': []} # Go through all orders currently on the object for listpos, node in enumerate(orders): order = node.CurrentOrder orderdesc = objects.OrderDescs()[order.subtype] if hasattr(orderdesc, 'doc'): desc = orderdesc.doc else: desc = orderdesc.__doc__ desc = desc.strip() args = self.get_args(orderdesc, order) return_data[i]['orders'][int(node.id)] = { 'order_id': int(node.id), 'name': safestr(order._name), 'description': safestr(desc), 'type': order.subtype, 'turns': order.turns, 'args': args } # Go through all possible orders this object can receive for type in object.order_types: # If type is not recognized, ignore it if not objects.OrderDescs().has_key(type): continue # Retrive order description orderdesc = objects.OrderDescs()[type] if hasattr(orderdesc, 'doc'): desc = orderdesc.doc else: desc = orderdesc.__doc__ desc = desc.strip() args = self.get_args(orderdesc) return_data[i]['order_type'].append({ 'name': safestr(orderdesc._name), 'description': safestr(desc), 'type': type, 'args': args }) return return_data
def build(self): """Build json friendly structure""" return_data = {} for i in self.cache.objects: # Retrives object and orders for that object object = self.cache.objects[i] if hasattr(object, 'Orders'): orders = object.Orders orders = orders[0] orderTypes = getOrderTypes(self.cache, i) queueid = orders.queueid # Build the initialize structure for this object and its orders return_data[queueid] = {'orders': {}, 'order_type': []} orderobj = self.cache.orders[queueid] # Go through all orders currently on the object orderobj = self.cache.orders[queueid] ordersAr = {} if queueid > 0: for listpos, node in enumerate(orderobj): print "order time" order = node.CurrentOrder orderdesc = objects.OrderDescs()[order.subtype] if hasattr(orderdesc, 'doc'): desc = orderdesc.doc else: desc = orderdesc.__doc__ desc = desc.strip() args = self.get_args(orderdesc, order) ordersAr[int(node.id)] = { 'order_id': int(node.id), 'name': safestr(order._name), 'description': safestr(desc), 'type': order.subtype, 'turns': order.turns, 'args': args} if len(ordersAr) > 0: for key in sorted(ordersAr.iterkeys()): return_data[queueid]['orders'][key] = ordersAr[key] if len(orderTypes[queueid]) > 0: # Go through all possible orders this object can receive for type in orderTypes[queueid]: # If type is not recognized, ignore it if not objects.OrderDescs().has_key(type): continue # Retrive order description orderdesc = objects.OrderDescs()[type] #print orderdesc.__dict__ if hasattr(orderdesc, 'doc'): desc = orderdesc.doc else: desc = orderdesc.__doc__ desc = desc.strip() args = self.get_args(orderdesc) return_data[queueid]['order_type'].append({ 'name': safestr(orderdesc._name), 'description': safestr(desc), 'type': type, 'args': args}) print("Done Processing Orders") return return_data
def build(self): global mediaRepoURL ret = {} noExtensionURLs = {} #print("Build Object Data Structure") #cacheObjectPrintout(self.cache) minX = 0 maxX = 0 minY = 0 maxY = 0 for i in self.cache.objects: obj = self.cache.objects[i] #Get Object Type Name objdesc = objects.ObjectDescs()[obj.subtype] print obj.__dict__ #The attributes that have no nested elements ret[obj.id] = { 'name': safestr(obj.name), 'id': obj.id, 'type': {'id': obj.subtype, 'name': safestr(objdesc._name)}, #'size': obj.size, 'contains': obj.contains } ret[obj.id].update(getPropertyList(obj)) mediaRelativeURLS = getMediaURLs(self.cache, obj.id) if "Media" in ret[obj.id]: ret[obj.id]["Media"] = ret[obj.id]["Media"]["url"] ret[obj.id]["Media"] = safestr(mediaRelativeURLS["Media"]) if "Icon" in ret[obj.id]: ret[obj.id]["Icon"] = ret[obj.id]["Icon"]["url"] ret[obj.id]["Icon"] = safestr(mediaRelativeURLS["Icon"]) if "Size" in ret[obj.id]: ret[obj.id]["Size"] = ret[obj.id]["Size"]["size"] if "Year" in ret[obj.id]: ret[obj.id]["Year"] = ret[obj.id]["Year"]["value"] if "Damage" in ret[obj.id]: ret[obj.id]["Damage"] = ret[obj.id]["Damage"]["value"] if "Ship List" in ret[obj.id]: shiplist = {} for listnum in ret[obj.id]["Ship List"]['references']: ships = ret[obj.id]["Ship List"]['references'][listnum] designs = self.cache.designs[ships[1]] shiplist[listnum] = {0: safestr(designs.name), 1: ships[2] } ret[obj.id]["Ship List"] = shiplist if "Owner" in ret[obj.id]: id = int(ret[obj.id]["Owner"]["id"]) if id is 0: ret[obj.id]["Owner"] = safestr("") else: ret[obj.id]["Owner"] = safestr(self.cache.players[id].name) #ownerid = getOwner(self.cache, obj.id) """Fix for relative""" if "Position" in ret[obj.id]: ret[obj.id]["Position"] = ret[obj.id]["Position"]["vector"] if "Velocity" in ret[obj.id]: ret[obj.id]["Velocity"] = ret[obj.id]["Velocity"]["vector"] print type(ret[obj.id]["Position"]["x"]) print type(minX) print str(ret[obj.id]["Position"]["x"]) + " " + str(minX) """Find the Boundries of the Universe""" objX = int(ret[obj.id]["Position"]["x"]) objY = int(ret[obj.id]["Position"]["y"]) if objX < minX: minX = objX elif objX > maxX: maxX = objX if objY < minY: minY = objY elif objY > maxY: maxY = objY #print checkIfImageExists(safestr(mediaRepoURL + mediaRelativeURLS["Media"])) if hasattr(obj, 'parent'): ret[obj.id]['parent'] = obj.parent """fix: Convert owner to name""" ret = checkIfImageExists(ret, self.mediaListName) """Add the universe dimensions to the universe object array""" ret[0]["Size"] = {'minX': minX, 'maxX': maxX, 'minY': minY, 'maxY': maxY} #print "Done With Building Items" return ret