def test_spawnHTML(self): # arrange spawnName = "testspawn" s = ghObjects.resourceSpawn() s.spawnID = 42 s.spawnName = spawnName s.spawnGalaxy = 1 s.resourceType = "wood_deciduous_yavin4" s.resourceTypeName = "Yavinian Deciduous Wood" s.containerType = "flora_structural" s.stats.CR = 0 s.stats.CD = 0 s.stats.DR = 780 s.stats.FL = 0 s.stats.HR = 0 s.stats.MA = 560 s.stats.PE = 0 s.stats.OQ = 656 s.stats.SR = 450 s.stats.UT = 800 s.stats.ER = 0 s.percentStats.CR = None s.percentStats.CD = None s.percentStats.DR = 780.0 / 800 s.percentStats.FL = None s.percentStats.HR = None s.percentStats.MA = 160.0 / 400 s.percentStats.PE = None s.percentStats.OQ = 656.0 / 1000 s.percentStats.SR = 150.0 / 400 s.percentStats.UT = 800.0 / 800 s.percentStats.ER = None s.entered = daysago = datetime.now() - timedelta(4) s.enteredBy = "ioscode" s.verified = daysago = datetime.now() - timedelta(3) s.verifiedBy = "tester" s.unavailable = None s.unavailableBy = None s.maxWaypointConc = None # act mobileHTML = s.getMobileHTML("", 0, 0) normalHTML = s.getHTML(0, "", "", 0, 0) rowHTML = s.getRow(False) invHTML = s.getInventoryObject() spawnJSON = s.getJSON() spawnJSON = "{ " + spawnJSON[:-2] + " }" #assert self.assertIn("ioscode", mobileHTML, "Username not in mobile HTML.") self.assertIn("ioscode", normalHTML, "Username not in normal HTML.") self.assertIn(spawnName, rowHTML, "No spawn name in row HTML.") self.assertIn(spawnName, invHTML, "No spawn name in inventory HTML.") try: jsonObject = json.loads(spawnJSON) jsonValid = True except ValueError, e: jsonValid = False
def getResourceData(conn, resSQL, userReputation, activeUser, formatType): # get resource data for given criteria resourceHTML = '' s = None cursor = conn.cursor() if (cursor): lastValue = None cursor.execute(resSQL) row = cursor.fetchone() if row == None: resourceHTML = 'No resources found!' while (row != None): if s == None: if formatType == 'json': resourceHTML = ' [\n' else: resourceHTML = '<table width="100%" class=resourceStats>' # populate this resource to object and print it s = ghObjects.resourceSpawn() s.spawnID = row[0] s.spawnName = row[1] s.spawnGalaxy = row[2] s.resourceType = row[5] s.resourceTypeName = row[6] s.containerType = row[30] s.stats.CR = row[8] s.stats.CD = row[9] s.stats.DR = row[10] s.stats.FL = row[11] s.stats.HR = row[12] s.stats.MA = row[13] s.stats.PE = row[14] s.stats.OQ = row[15] s.stats.SR = row[16] s.stats.UT = row[17] s.stats.ER = row[18] s.percentStats.CR = row[19] s.percentStats.CD = row[20] s.percentStats.DR = row[21] s.percentStats.FL = row[22] s.percentStats.HR = row[23] s.percentStats.MA = row[24] s.percentStats.PE = row[25] s.percentStats.OQ = row[26] s.percentStats.SR = row[27] s.percentStats.UT = row[28] s.percentStats.ER = row[29] s.entered = row[3] s.enteredBy = row[4] s.verified = row[31] s.verifiedBy = row[32] s.unavailable = row[33] s.unavailableBy = row[34] s.maxWaypointConc = row[39] if row[40] != None: s.favorite = 1 s.despawnAlert = row[41] if sort == "quality": s.overallScore = row[42] s.planets = dbShared.getSpawnPlanets(conn, row[0], False, row[2]) if formatType == 'json': resourceHTML += ' {' else: resourceHTML += ' <tr><td>' if formatType == 'mobile': resourceHTML += s.getMobileHTML(activeUser) elif formatType == 'compare': resourceHTML += s.getHTML(1, '', activeUser, userReputation) elif formatType == 'json': resourceHTML += s.getJSON() else: resourceHTML += s.getHTML(0, '', activeUser, userReputation) if formatType == 'json': resourceHTML += ' }' else: resourceHTML += '</td></tr>' lastValue = row[42] row = cursor.fetchone() if formatType == 'json': resourceHTML += ' ,\n' else: resourceHTML += ' </table>' if fetchSize.isdigit() and cursor.rowcount == int(fetchSize): if formatType == 'json': resourceHTML += '],\n "last_value" : ' + str(lastValue) else: resourceHTML += '<div style="display:none;">maxRowsReached' + str(lastValue) + '</div>' cursor.close() return resourceHTML
def getResource(conn, logged_state, currentUser, spawnID, galaxy, spawnName): if logged_state == 1: favJoin = ' LEFT JOIN (SELECT itemID, favGroup FROM tFavorites WHERE userID="' + currentUser + '" AND favType=1) favs ON tResources.spawnID = favs.itemID' favCols = ', favGroup' else: favJoin = '' favCols = ', NULL' if spawnID != None: criteriaStr = 'spawnID=' + str(spawnID) else: criteriaStr = 'galaxy=' + galaxy + ' AND spawnName="' + spawnName + '"' try: cursor = conn.cursor() except Exception: errorstr = "Error: could not connect to database" if (cursor): sqlStr = 'SELECT spawnID, spawnName, galaxy, entered, enteredBy, tResources.resourceType, rt1.resourceTypeName, rt1.resourceGroup,' sqlStr += ' CR, CD, DR, FL, HR, MA, PE, OQ, SR, UT, ER,' sqlStr += ' CASE WHEN rt1.CRmax > 0 THEN ((CR-rt1.CRmin) / (rt1.CRmax-rt1.CRmin))*100 ELSE NULL END AS CRperc,' sqlStr += ' CASE WHEN rt1.CDmax > 0 THEN ((CD-rt1.CDmin) / (rt1.CDmax-rt1.CDmin))*100 ELSE NULL END AS CDperc,' sqlStr += ' CASE WHEN rt1.DRmax > 0 THEN ((DR-rt1.DRmin) / (rt1.DRmax-rt1.DRmin))*100 ELSE NULL END AS DRperc,' sqlStr += ' CASE WHEN rt1.FLmax > 0 THEN ((FL-rt1.FLmin) / (rt1.FLmax-rt1.FLmin))*100 ELSE NULL END AS FLperc,' sqlStr += ' CASE WHEN rt1.HRmax > 0 THEN ((HR-rt1.HRmin) / (rt1.HRmax-rt1.HRmin))*100 ELSE NULL END AS HRperc,' sqlStr += ' CASE WHEN rt1.MAmax > 0 THEN ((MA-rt1.MAmin) / (rt1.MAmax-rt1.MAmin))*100 ELSE NULL END AS MAperc,' sqlStr += ' CASE WHEN rt1.PEmax > 0 THEN ((PE-rt1.PEmin) / (rt1.PEmax-rt1.PEmin))*100 ELSE NULL END AS PEperc,' sqlStr += ' CASE WHEN rt1.OQmax > 0 THEN ((OQ-rt1.OQmin) / (rt1.OQmax-rt1.OQmin))*100 ELSE NULL END AS OQperc,' sqlStr += ' CASE WHEN rt1.SRmax > 0 THEN ((SR-rt1.SRmin) / (rt1.SRmax-rt1.SRmin))*100 ELSE NULL END AS SRperc,' sqlStr += ' CASE WHEN rt1.UTmax > 0 THEN ((UT-rt1.UTmin) / (rt1.UTmax-rt1.UTmin))*100 ELSE NULL END AS UTperc,' sqlStr += ' CASE WHEN rt1.ERmax > 0 THEN ((ER-rt1.ERmin) / (rt1.ERmax-rt1.ERmin))*100 ELSE NULL END AS ERperc,' sqlStr += ' rt1.containerType, verified, verifiedBy, unavailable, unavailableBy, rg1.groupName, rt1.resourceCategory, rg2.groupName AS categoryName' + favCols + ', (SELECT GROUP_CONCAT(resourceGroup SEPARATOR ",") FROM tResourceTypeGroup rtg WHERE rtg.resourceType=tResources.resourceType) FROM tResources INNER JOIN tResourceType rt1 ON tResources.resourceType = rt1.resourceType INNER JOIN tResourceGroup rg1 ON rt1.resourceGroup = rg1.resourceGroup INNER JOIN tResourceGroup rg2 ON rt1.resourceCategory = rg2.resourceGroup' + favJoin + ' WHERE ' + criteriaStr + ';' cursor.execute(sqlStr) row = cursor.fetchone() # get resource box if the spawn was found if (row != None): s = ghObjects.resourceSpawn() s.spawnID = row[0] s.spawnName = row[1] s.spawnGalaxy = row[2] s.resourceType = row[5] s.resourceTypeName = row[6] s.containerType = row[30] s.stats.CR = row[8] s.stats.CD = row[9] s.stats.DR = row[10] s.stats.FL = row[11] s.stats.HR = row[12] s.stats.MA = row[13] s.stats.PE = row[14] s.stats.OQ = row[15] s.stats.SR = row[16] s.stats.UT = row[17] s.stats.ER = row[18] s.percentStats.CR = row[19] s.percentStats.CD = row[20] s.percentStats.DR = row[21] s.percentStats.FL = row[22] s.percentStats.HR = row[23] s.percentStats.MA = row[24] s.percentStats.PE = row[25] s.percentStats.OQ = row[26] s.percentStats.SR = row[27] s.percentStats.UT = row[28] s.percentStats.ER = row[29] s.entered = row[3] s.enteredBy = row[4] s.verified = row[31] s.verifiedBy = row[32] s.unavailable = row[33] s.unavailableBy = row[34] if row[38] != None: s.favorite = 1 if row[39] != None: s.groupList = ',' + row[39] + ',' s.planets = dbShared.getSpawnPlanets(conn, row[0], True, row[2]) else: s = None cursor.close() return s
def getResourceData(conn, resSQL, logged_state, galaxyState, resourceFormat, reputation): # get resource data for given criteria resourceHTML = '<table width="100%" class=resourceStats>' cursor = conn.cursor() if (cursor): cursor.execute(resSQL) row = cursor.fetchone() # check first row to see if all quality stats do not belong to resource type if (row != None): if (row[35] == 0): resourceHTML += '<tr><td>Stats do not matter</td></tr>' else: # print resource rows if stats matter while (row != None): s = ghObjects.resourceSpawn() s.spawnID = row[0] s.spawnName = row[1] s.spawnGalaxy = row[2] s.resourceType = row[5] s.resourceTypeName = row[6] s.containerType = row[30] s.stats.CR = row[8] s.stats.CD = row[9] s.stats.DR = row[10] s.stats.FL = row[11] s.stats.HR = row[12] s.stats.MA = row[13] s.stats.PE = row[14] s.stats.OQ = row[15] s.stats.SR = row[16] s.stats.UT = row[17] s.stats.ER = row[18] s.percentStats.CR = row[19] s.percentStats.CD = row[20] s.percentStats.DR = row[21] s.percentStats.FL = row[22] s.percentStats.HR = row[23] s.percentStats.MA = row[24] s.percentStats.PE = row[25] s.percentStats.OQ = row[26] s.percentStats.SR = row[27] s.percentStats.UT = row[28] s.percentStats.ER = row[29] s.entered = row[3] s.enteredBy = row[4] s.verified = row[31] s.verifiedBy = row[32] s.unavailable = row[33] s.unavailableBy = row[34] if row[36] != None: s.favorite = 1 if row[37] != None: s.overallScore = row[37] * 1000 s.planets = dbShared.getSpawnPlanets( conn, row[0], True, row[2]) resourceHTML += ' <tr><td>' if logged_state > 0 and galaxyState == 1: controlsUser = currentUser else: controlsUser = '' resourceHTML += s.getHTML( resourceFormat, "", controlsUser, reputation, dbShared.getUserAdmin(conn, currentUser, galaxy)) resourceHTML += ' </td></tr>' row = cursor.fetchone() else: resourceHTML += '<tr><td>Not Available</td></tr>' cursor.close() resourceHTML += '</table>' return resourceHTML
sqlStr1 += ' CASE WHEN CRmax > 0 THEN (((CASE WHEN CR IS NULL THEN 0 ELSE CR END)-CRmin) / (CRmax-CRmin))*100 ELSE NULL END AS CRperc,' sqlStr1 += ' CASE WHEN CDmax > 0 THEN (((CASE WHEN CD IS NULL THEN 0 ELSE CD END)-CDmin) / (CDmax-CDmin))*100 ELSE NULL END AS CDperc,' sqlStr1 += ' CASE WHEN DRmax > 0 THEN (((CASE WHEN DR IS NULL THEN 0 ELSE DR END)-DRmin) / (DRmax-DRmin))*100 ELSE NULL END AS DRperc,' sqlStr1 += ' CASE WHEN FLmax > 0 THEN (((CASE WHEN FL IS NULL THEN 0 ELSE FL END)-FLmin) / (FLmax-FLmin))*100 ELSE NULL END AS FLperc,' sqlStr1 += ' CASE WHEN HRmax > 0 THEN (((CASE WHEN HR IS NULL THEN 0 ELSE HR END)-HRmin) / (HRmax-HRmin))*100 ELSE NULL END AS HRperc,' sqlStr1 += ' CASE WHEN MAmax > 0 THEN (((CASE WHEN MA IS NULL THEN 0 ELSE MA END)-MAmin) / (MAmax-MAmin))*100 ELSE NULL END AS MAperc,' sqlStr1 += ' CASE WHEN PEmax > 0 THEN (((CASE WHEN PE IS NULL THEN 0 ELSE PE END)-PEmin) / (PEmax-PEmin))*100 ELSE NULL END AS PEperc,' sqlStr1 += ' CASE WHEN OQmax > 0 THEN (((CASE WHEN OQ IS NULL THEN 0 ELSE OQ END)-OQmin) / (CASE WHEN OQmax-OQmin < 1 THEN 1 ELSE OQmax-OQmin END))*100 ELSE NULL END AS OQperc,' sqlStr1 += ' CASE WHEN SRmax > 0 THEN (((CASE WHEN SR IS NULL THEN 0 ELSE SR END)-SRmin) / (SRmax-SRmin))*100 ELSE NULL END AS SRperc,' sqlStr1 += ' CASE WHEN UTmax > 0 THEN (((CASE WHEN UT IS NULL THEN 0 ELSE UT END)-UTmin) / (UTmax-UTmin))*100 ELSE NULL END AS UTperc,' sqlStr1 += ' CASE WHEN ERmax > 0 THEN (((CASE WHEN ER IS NULL THEN 0 ELSE ER END)-ERmin) / (ERmax-ERmin))*100 ELSE NULL END AS ERperc,' sqlStr1 += ' containerType, verified, verifiedBy, unavailable, unavailableBy' + favCols + ' FROM tResources INNER JOIN tResourceType ON tResources.resourceType = tResourceType.resourceType' + favJoin + ' WHERE galaxy=' + galaxy + ' AND unavailable IS NULL ORDER BY entered DESC LIMIT 5;' cursor.execute(sqlStr1) row = cursor.fetchone() while (row != None): s = ghObjects.resourceSpawn() s.spawnID = row[0] s.spawnName = row[1] s.spawnGalaxy = row[2] s.resourceType = row[5] s.resourceTypeName = row[6] s.containerType = row[30] s.stats.CR = row[8] s.stats.CD = row[9] s.stats.DR = row[10] s.stats.FL = row[11] s.stats.HR = row[12] s.stats.MA = row[13] s.stats.PE = row[14] s.stats.OQ = row[15] s.stats.SR = row[16]
def getResource(conn, logged_state, currentUser, spawnID, galaxy, spawnName): if logged_state == 1: favJoin = ' LEFT JOIN (SELECT itemID, favGroup FROM tFavorites WHERE userID="' + currentUser + '" AND favType=1) favs ON tResources.spawnID = favs.itemID' favCols = ', favGroup' else: favJoin = '' favCols = ', NULL' if spawnID != None: criteriaStr = 'spawnID=' + str(spawnID) else: criteriaStr = 'galaxy=' + galaxy + ' AND spawnName="' + spawnName + '"' try: cursor = conn.cursor() except Exception: errorstr = "Error: could not connect to database" if (cursor): sqlStr = 'SELECT spawnID, spawnName, galaxy, entered, enteredBy, tResources.resourceType, rt1.resourceTypeName, rt1.resourceGroup,' sqlStr += ' CR, CD, DR, FL, HR, MA, PE, OQ, SR, UT, ER,' sqlStr += ' CASE WHEN rt1.CRmax > 0 THEN ((CR-rt1.CRmin) / (rt1.CRmax-rt1.CRmin))*100 ELSE NULL END AS CRperc, CASE WHEN rt1.CDmax > 0 THEN ((CD-rt1.CDmin) / (rt1.CDmax-rt1.CDmin))*100 ELSE NULL END AS CDperc, CASE WHEN rt1.DRmax > 0 THEN ((DR-rt1.DRmin) / (rt1.DRmax-rt1.DRmin))*100 ELSE NULL END AS DRperc, CASE WHEN rt1.FLmax > 0 THEN ((FL-rt1.FLmin) / (rt1.FLmax-rt1.FLmin))*100 ELSE NULL END AS FLperc, CASE WHEN rt1.HRmax > 0 THEN ((HR-rt1.HRmin) / (rt1.HRmax-rt1.HRmin))*100 ELSE NULL END AS HRperc, CASE WHEN rt1.MAmax > 0 THEN ((MA-rt1.MAmin) / (rt1.MAmax-rt1.MAmin))*100 ELSE NULL END AS MAperc, CASE WHEN rt1.PEmax > 0 THEN ((PE-rt1.PEmin) / (rt1.PEmax-rt1.PEmin))*100 ELSE NULL END AS PEperc, CASE WHEN rt1.OQmax > 0 THEN ((OQ-rt1.OQmin) / (rt1.OQmax-rt1.OQmin))*100 ELSE NULL END AS OQperc, CASE WHEN rt1.SRmax > 0 THEN ((SR-rt1.SRmin) / (rt1.SRmax-rt1.SRmin))*100 ELSE NULL END AS SRperc, CASE WHEN rt1.UTmax > 0 THEN ((UT-rt1.UTmin) / (rt1.UTmax-rt1.UTmin))*100 ELSE NULL END AS UTperc, CASE WHEN rt1.ERmax > 0 THEN ((ER-rt1.ERmin) / (rt1.ERmax-rt1.ERmin))*100 ELSE NULL END AS ERperc,' sqlStr += ' rt1.containerType, verified, verifiedBy, unavailable, unavailableBy, rg1.groupName, rt1.resourceCategory, rg2.groupName AS categoryName' + favCols + ', (SELECT GROUP_CONCAT(resourceGroup SEPARATOR ",") FROM tResourceTypeGroup rtg WHERE rtg.resourceType=tResources.resourceType) FROM tResources INNER JOIN tResourceType rt1 ON tResources.resourceType = rt1.resourceType INNER JOIN tResourceGroup rg1 ON rt1.resourceGroup = rg1.resourceGroup INNER JOIN tResourceGroup rg2 ON rt1.resourceCategory = rg2.resourceGroup' + favJoin + ' WHERE ' + criteriaStr + ';' cursor.execute(sqlStr) row = cursor.fetchone() # get resource box if the spawn was found if (row != None): s = ghObjects.resourceSpawn() s.spawnID = row[0] s.spawnName = row[1] s.spawnGalaxy = row[2] s.resourceType = row[5] s.resourceTypeName = row[6] s.containerType = row[30] s.stats.CR = row[8] s.stats.CD = row[9] s.stats.DR = row[10] s.stats.FL = row[11] s.stats.HR = row[12] s.stats.MA = row[13] s.stats.PE = row[14] s.stats.OQ = row[15] s.stats.SR = row[16] s.stats.UT = row[17] s.stats.ER = row[18] s.percentStats.CR = row[19] s.percentStats.CD = row[20] s.percentStats.DR = row[21] s.percentStats.FL = row[22] s.percentStats.HR = row[23] s.percentStats.MA = row[24] s.percentStats.PE = row[25] s.percentStats.OQ = row[26] s.percentStats.SR = row[27] s.percentStats.UT = row[28] s.percentStats.ER = row[29] s.entered = row[3] s.enteredBy = row[4] s.verified = row[31] s.verifiedBy = row[32] s.unavailable = row[33] s.unavailableBy = row[34] if row[38] != None: s.favorite = 1 s.groupList = ',' + row[39] + ',' s.planets = dbShared.getSpawnPlanets(conn, row[0], True) else: s = None cursor.close() return s
currentLevel = i+1 if currentGroups[i] != typeGroups[i]: print '<tr><td><div class="surveyGroup" style="margin-left:' + str(i * 16) + 'px;"><a href="' + ghShared.BASE_SCRIPT_URL + 'resourceType.py/' + typeGroups[i][:typeGroups[i].find('|')] + '" title="View schematics and recent spawns of this type" class="nameLink" style="color:#999999;">' + typeGroups[i][typeGroups[i].find('|')+1:] + '</a></div></td></tr>' currentGroups = typeGroups if currentType != row[5]: print '<tr><td><div class="surveyGroup" style="margin-left:' + str(currentLevel * 16) + 'px;"><a href="' + ghShared.BASE_SCRIPT_URL + 'resourceType.py/' + row[5] + '" title="View schematics and recent spawns of this type" class="nameLink" style="color:#999999;">' + row[6] + '</a></div></td></tr>' currentType = row[5] resBoxMargin = str((currentLevel+2) * 16) + 'px' # no grouping for others else: if s == None: print '<table width="100%" class=resourceStats>' # populate this resource to object and print it s = ghObjects.resourceSpawn() s.spawnID = row[0] s.spawnName = row[1] s.spawnGalaxy = row[2] s.resourceType = row[5] s.resourceTypeName = row[6] s.containerType = row[30] s.stats.CR = row[8] s.stats.CD = row[9] s.stats.DR = row[10] s.stats.FL = row[11] s.stats.HR = row[12] s.stats.MA = row[13] s.stats.PE = row[14] s.stats.OQ = row[15] s.stats.SR = row[16]
def getResourceData(conn, resSQL, editable, galaxyState, formatType): # get resource data for given criteria resourceHTML = '' s = None sys.stderr.write(resSQL) cursor = conn.cursor() if (cursor): lastValue = None cursor.execute(resSQL) row = cursor.fetchone() if row == None: resourceHTML = 'No resources found!' while (row != None): if s == None: resourceHTML = '<table width="100%" class=resourceStats>' # populate this resource to object and print it s = ghObjects.resourceSpawn() s.spawnID = row[0] s.spawnName = row[1] s.spawnGalaxy = row[2] s.resourceType = row[5] s.resourceTypeName = row[6] s.containerType = row[30] s.stats.CR = row[8] s.stats.CD = row[9] s.stats.DR = row[10] s.stats.FL = row[11] s.stats.HR = row[12] s.stats.MA = row[13] s.stats.PE = row[14] s.stats.OQ = row[15] s.stats.SR = row[16] s.stats.UT = row[17] s.stats.ER = row[18] s.percentStats.CR = row[19] s.percentStats.CD = row[20] s.percentStats.DR = row[21] s.percentStats.FL = row[22] s.percentStats.HR = row[23] s.percentStats.MA = row[24] s.percentStats.PE = row[25] s.percentStats.OQ = row[26] s.percentStats.SR = row[27] s.percentStats.UT = row[28] s.percentStats.ER = row[29] s.entered = row[3] s.enteredBy = row[4] s.verified = row[31] s.verifiedBy = row[32] s.unavailable = row[33] s.unavailableBy = row[34] s.maxWaypointConc = row[39] if row[40] != None: s.favorite = 1 s.overallScore = row[41] s.planets = dbShared.getSpawnPlanets(conn, row[0], False) resourceHTML += ' <tr><td>' if formatType == 'mobile': resourceHTML += s.getMobileHTML(editable) elif formatType == 'compare': resourceHTML += s.getHTML(editable, 1, '') else: resourceHTML += s.getHTML(editable, 0, '') resourceHTML += '</td></tr>' lastValue = row[41] row = cursor.fetchone() resourceHTML += ' </table>' if cursor.rowcount == ROW_LIMIT: resourceHTML += '<div style="display:none;">maxRowsReached' + str(lastValue) + '</div>' cursor.close() return resourceHTML
def getResourceData(conn, resSQL, logged_state, galaxyState, resourceFormat): # get resource data for given criteria resourceHTML = '<table width="100%" class=resourceStats>' cursor = conn.cursor() if (cursor): cursor.execute(resSQL) row = cursor.fetchone() # check first row to see if all quality stats do not belong to resource type if (row != None): if (row[35] == 0): resourceHTML += '<tr><td>Stats do not matter</td></tr>' else: # print resource rows if stats matter while (row != None): s = ghObjects.resourceSpawn() s.spawnID = row[0] s.spawnName = row[1] s.spawnGalaxy = row[2] s.resourceType = row[5] s.resourceTypeName = row[6] s.containerType = row[30] s.stats.CR = row[8] s.stats.CD = row[9] s.stats.DR = row[10] s.stats.FL = row[11] s.stats.HR = row[12] s.stats.MA = row[13] s.stats.PE = row[14] s.stats.OQ = row[15] s.stats.SR = row[16] s.stats.UT = row[17] s.stats.ER = row[18] s.percentStats.CR = row[19] s.percentStats.CD = row[20] s.percentStats.DR = row[21] s.percentStats.FL = row[22] s.percentStats.HR = row[23] s.percentStats.MA = row[24] s.percentStats.PE = row[25] s.percentStats.OQ = row[26] s.percentStats.SR = row[27] s.percentStats.UT = row[28] s.percentStats.ER = row[29] s.entered = row[3] s.enteredBy = row[4] s.verified = row[31] s.verifiedBy = row[32] s.unavailable = row[33] s.unavailableBy = row[34] if row[36] != None: s.favorite = 1 s.overallScore = row[37]*1000 s.planets = dbShared.getSpawnPlanets(conn, row[0], True) resourceHTML += ' <tr><td>' if galaxyState == 1: resourceHTML += s.getHTML(logged_state, resourceFormat, "") else: rsourceHTML += s.getHTML(0, resourceFormat, "") resourceHTML += ' </td></tr>' row = cursor.fetchone() else: resourceHTML += '<tr><td>Not Available</td></tr>' cursor.close() resourceHTML += '</table>' return resourceHTML
def main(): # Get current url try: url = os.environ['SCRIPT_NAME'] except KeyError: url = '' form = cgi.FieldStorage() # Get Cookies useCookies = 1 cookies = Cookie.SimpleCookie() try: cookies.load(os.environ['HTTP_COOKIE']) except KeyError: useCookies = 0 if useCookies: try: currentUser = cookies['userID'].value except KeyError: currentUser = '' try: loginResult = cookies['loginAttempt'].value except KeyError: loginResult = 'success' try: sid = cookies['gh_sid'].value except KeyError: sid = form.getfirst('gh_sid', '') else: currentUser = '' loginResult = 'success' sid = form.getfirst('gh_sid', '') errstr = '' if not form.has_key("reportFile"): errstr = "No report file sent." else: rpt_data = form["reportFile"] if not rpt_data.file: errstr = "report data is not a file." src_url = form.getfirst('src_url', '/surveyList.py') galaxyID = form.getfirst('reportGalaxy', '') dataAction = form.getfirst('dataAction', '') # escape input to prevent sql injection sid = dbShared.dbInsertSafe(sid) galaxyID = dbShared.dbInsertSafe(galaxyID) # Get a session logged_state = 0 linkappend = '' sess = dbSession.getSession(sid) if (sess != ''): logged_state = 1 currentUser = sess if (useCookies == 0): linkappend = 'gh_sid=' + sid # Check for errors if not galaxyID.isdigit(): errstr = errstr + "Galaxy ID must be a valid number. \r\n" if errstr == '': rptName = rpt_data.filename if (logged_state == 0): errstr = errstr + "You must be logged in to post resources. \r\n" if (errstr != ''): result = "Your report could not be posted because of the following errors:\r\n" + errstr else: result = '' isNGE = False # process file thisSpawn = ghObjects.resourceSpawn() resourcesFound = [] planetID = 0 classID = '' headerMatch = None planetMatch = None classMatch = None resourceStart = None typeMatch = None nameMatch = None statMatch = None conn = dbShared.ghConn() cursor = conn.cursor() if (cursor): cursor.execute( 'SELECT galaxyNGE FROM tGalaxy WHERE galaxyID={0};'.format( str(galaxyID))) row = cursor.fetchone() if (row != None) and (row[0] > 0): isNGE = True cursor.close() # NGE version of droid report has different format with more indent and group levels if isNGE: typePattern = ' +([a-zA-Z][a-zA-Z0-9\- ]+)' namePattern = ' +\\\#pcontrast1 (\w+)\\\#' else: typePattern = '\t([a-zA-Z0-9\- ]+)' namePattern = '\t\t\\\#pcontrast1 (\w+)\\\#' while 1: line = rpt_data.file.readline() if not line: break if headerMatch == None and (planetMatch == None or classMatch == None): headerMatch = re.match("Interplanetary Survey: (\w+) - (\w+)", line) planetMatch = re.match( "\\\#pcontrast\d\sPlanet: \\\#pcontrast\d\s(.+)", line) classMatch = re.match( "\\\#pcontrast\d\sResource Class: \\\#pcontrast\d\s(.+)", line) else: if resourceStart == None: resourceStart = re.match( "\\\#pcontrast\d\sResources located.*", line) else: typeMatch = re.match(typePattern, line) nameMatch = re.match(namePattern, line) if typeMatch: thisType = dbShared.getResourceTypeID( conn, typeMatch.group(1)) thisTypeName = typeMatch.group(1) if nameMatch: if thisSpawn.spawnName != '': resourcesFound.append(thisSpawn) thisName = nameMatch.group(1) thisSpawn = ghObjects.resourceSpawn() thisSpawn.spawnName = thisName.lower() thisSpawn.resourceType = thisType thisSpawn.resourceTypeName = thisTypeName # Check for resource stats from enhanced droid reports statMatch = re.match( "\t\t\t(ER|CR|CD|DR|FL|HR|MA|PE|OQ|SR|UT): (\d+)", line) if statMatch: setattr(thisSpawn.stats, statMatch.group(1), int(statMatch.group(2))) conn.close() if thisSpawn.spawnName != '': resourcesFound.append(thisSpawn) # Update planet data if valid results if headerMatch: planetID = dbShared.getPlanetID(headerMatch.group(1)) classID = headerMatch.group(2).lower() elif planetMatch: planetID = dbShared.getPlanetID(planetMatch.group(1)) else: result = "Error: No planet found in file header." if classMatch: classID = classMatch.group(1).lower() if planetID > 0: if dataAction == 'returnJSON': result = getSpawnsJSON( planetID, resourcesFound, "{0} spawns loaded from report".format( len(resourcesFound))) else: result = updatePlanetSpawns(planetID, classID, resourcesFound, galaxyID, currentUser) else: result = "Error: Could not determine planet from file header." if dataAction == 'returnJSON': # add resources page uses json data to populate grid print "Content-Type: text/json\n" print result else: # survey list page will load result message from cookie after redirect if useCookies: cookies['surveyReportAttempt'] = result cookies['surveyReportAttempt']['max-age'] = 60 print cookies else: linkappend = linkappend + '&surveyReportAttempt=' + urllib.quote( result) print "Content-Type: text/html\n" if src_url != None: print '<html><head><script type=text/javascript>document.location.href="' + src_url + linkappend + '"</script></head><body></body></html>' else: print result if result.find("Error:") > -1: sys.exit(500) else: sys.exit(200)