Exemplo n.º 1
0
def readfile(infile):
    lines = 0
    with open(infile, "r") as file:
        #print(F"file: {infile}")
        #line = file.readline().strip()
        for line in file:
            line = line.strip()
            if not line:
                continue
            lines += 1
            #print(F"Line: {line}")
            if "?" in line:
                base = line.split("?")[0]
                # add base url
                if base not in unique:
                    unique[base] = []

                # Parse new url
                parsed_url = urlparse.urlparse(line)
                params = pq(parsed_url.query)

                # If no values in the array
                if not unique[base]:
                    unique[base].append(line)
                    #print("Valid and first entry")
                else:
                    # if found once, do not add. if never found, add
                    not_found = True
                    # Loop through old results
                    for url in unique[base]:
                        old_params = pq(urlparse.urlparse(url).query)
                        # If found, continue without adding
                        old_list = list(old_params.keys())
                        old_list.sort()
                        new_list = list(params.keys())
                        new_list.sort()
                        #print(F"Old params: {old_params} list: {list(old_params.keys())} sorted: {old_list}")
                        #print(F"Old: {old_list} New: {new_list} Equal: {old_list == new_list}")
                        # Good debug
                        #print(F"Difference: {set(old_list).symmetric_difference(set(new_list))}")
                        if old_list == new_list:
                            #print(F"[-] Exists!")
                            not_found = False
                            break
                    # Not found in whole dict, add!
                    if not_found:
                        #print(F"[+] Add line: {line}")
                        unique[base].append(line)
            # Continue reading
            line = file.readline().strip()
    return lines
Exemplo n.º 2
0
def real(environ, start_response, netId):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        crn = query["crn"][0]
        sql = "DELETE FROM Enrollments WHERE CRN = %s and NetId=%s"
        val = (crn, netId)  #TODO CHANGE TO LOGGED IN USER
        mydb = None
        try:
            mydb, mycursor = db.connect()
            #db.mydb.start_transaction(isolation_level=SERIALIZABLE, readonly=False)
            mycursor.execute(sql, val)
            if mycursor.rowcount > 0:
                start_response('200 OK', [('Content-Type', 'json')])
                mydb.commit()
                message = json.dumps({STATUS: SUCCESS})
            else:
                start_response('400 Bad Request', [('Content-Type', 'json')])
                mydb.commit()
                message = json.dumps({
                    STATUS: FAILED,
                    MESSAGE: "User is not enrolled in class"
                })
        except Exception as e:
            mydb.rollback()
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({STATUS: FAILED, MESSAGE: str(e)})
        finally:
            if mydb:
                mydb.close()
    print(message)
    return [message.encode()]
Exemplo n.º 3
0
def real(environ, start_response, netId):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        crn = query["crn"][0]
        sql = "INSERT INTO Enrollments (CRN, NetId) VALUES (%s, %s)"
        val = (crn, netId)  #TODO CHANGE TO LOGIN USER
        try:
            mydb, mycursor = db.connect()
            #mydb.start_transaction(isolation_level=SERIALIZABLE, readonly=False)
            mycursor.execute(sql, val)
            start_response('200 OK', [('Content-Type', 'json')])
            mydb.commit()
            message = json.dumps({STATUS: SUCCESS})
        except Exception as e:
            mydb.rollback()
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({STATUS: FAILED, MESSAGE: str(e)})
        finally:
            if mydb:
                mydb.close()
    print(message)
    return [message.encode()]
Exemplo n.º 4
0
def dummy(environ, start_response):
	message = check_request(environ,start_response)
	query = pq(environ[QUERY])
	if message == "":
		start_response('200 OK', [('Content-Type', 'json')])
		message = json.dumps({
			STATUS: SUCCESS,
			MESSAGE: {
				"results": [
					{
						"crn": "1",
						"class": "cs241",
						"department": "cs"
					},
					{
						"crn": "2",
						"class": "ece319",
						"department": "ece"
					},
					{
						"crn": "3",
						"class": "cs233",
						"department": "cs"
					}
				]
			}
		})
	print("Message:", message)
	return [message.encode()]
Exemplo n.º 5
0
def dummy(environ, start_response):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        start_response('200 OK', [('Content-Type', 'json')])
        message = json.dumps({STATUS: SUCCESS, MESSAGE: {"id": 1}})
    return [message.encode()]
Exemplo n.º 6
0
def real(environ, start_response, netId):
	message = check_request(environ,start_response)
	query = pq(environ[QUERY])
	if message == "":
		q = db.escapeString(query["q"][0])
		sql = """SELECT Title, Classes.CRN, Department, Instructor, (x.netId IS NOT NULL) FROM
		 Classes LEFT JOIN (SELECT * FROM Enrollments WHERE NetID = %s) AS x
		 ON Classes.CRN = x.CRN WHERE Title LIKE '""" + q + "%'"
		val1 = (netId, )
		try:
			mydb, mycursor = db.connect()
			mycursor.execute(sql, val1)
			results = [{"class":row[0],"crn":row[1], "department":row[2], "instructor":row[3], "currentlyEnrolled": row[4] == 1} for row in mycursor.fetchall()]
			start_response('200 OK', [('Content-Type', 'json')])
			message = json.dumps({
				STATUS: SUCCESS,
				MESSAGE: {"results": results}
			})
			mydb.close()
		except:
			print_exc()
			start_response('500 INTERNAL SERVER ERROR', [('Content-Type', 'json')])
			message = json.dumps({
				STATUS: FAILED,
				MESSAGE: "oopsie I made a poopsie"
			})
	return [message.encode()]
Exemplo n.º 7
0
def check_request(environ, start_response):
    query = pq(environ[QUERY])
    print(environ)
    if environ[REQUEST_METHOD] != METHOD_POST:
        start_response('400 Bad Request', [('Content-Type', 'json')])
        return json.dumps({
            STATUS: FAILED,
            MESSAGE: "Bad request method: expecting POST"
        })
    elif "crn" not in query or len(query["crn"]) == 0:
        start_response('400 Bad Request', [('Content-Type', 'json')])
        return json.dumps({
            STATUS: FAILED,
            MESSAGE: "Missing query parameter ?crn=%"
        })
    elif "CONTENT_LENGTH" not in environ:
        start_response('400 Bad Request', [('Content-Type', 'json')])
        return json.dumps({
            STATUS:
            FAILED,
            MESSAGE:
            "Missing post body in form: {'note':'xxxxxx'}"
        })
    else:
        return ""
Exemplo n.º 8
0
def real(environ, start_response):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        crn = query["crn"][0]
        body = environ[BODY].read().decode("utf-8")
        body = json.loads(body)
        sql = "UPDATE Classes SET Note = %s WHERE CRN = %s"
        if 'note' not in body or str(type(
                body['note'])) != "<class 'str'>" or len(body['note']) > 280:
            start_response('400 Bad Request', [('Content-Type', 'json')])
            message = json.dumps({STATUS: FAILED, MESSAGE: "Improper request"})
        else:
            val = (body['note'], crn)
            try:
                mydb, mycursor = db.connect()
                mycursor.execute(sql, val)
                start_response('200 OK', [('Content-Type', 'json')])
                mydb.commit()
                message = json.dumps({STATUS: SUCCESS})
            except Exception as e:
                mydb.rollback()
                print_exc()
                start_response('500 INTERNAL SERVER ERROR',
                               [('Content-Type', 'json')])
                message = json.dumps({STATUS: FAILED, MESSAGE: str(e)})
            finally:
                if mydb:
                    mydb.close()
    return [message.encode()]
Exemplo n.º 9
0
 def do_POST(self):
     length = int(self.headers.get('Content-length', 0))
     data = self.rfile.read(length).decode()
     message = pq(data)["message"][0]
     self.send_response(200)
     self.send_header('Content-type', 'text/plain; charset=utf-8')
     self.end_headers()
     self.wfile.write(message.encode())
Exemplo n.º 10
0
	def do_POST(self):
		length = int(self.headers.get('Content-length', 0))
		data = self.rfile.read(length).decode()
		message = pq(data)["message"][0]
		message = message.replace("<","&It;")
		memory.append(message)
		self.send_response(303)
		self.send_header('Location','/')
		self.end_headers()
Exemplo n.º 11
0
def check_request(environ, start_response):
    query = pq(environ[QUERY])
    if environ[REQUEST_METHOD] != METHOD_GET:
        start_response('400 Bad Request', [('Content-Type', 'json')])
        return json.dumps({
            STATUS: FAILED,
            MESSAGE: "Bad request method: expecting POST"
        })
    else:
        return ""
Exemplo n.º 12
0
def dummy(environ, start_response):
    print("Dummy")
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        start_response('200 OK', [('Content-Type', 'json')])
        payload = {"1000": "cs241", "1000": "tp103", "1000": "astr120"}
        message = json.dumps({STATUS: SUCCESS, MESSAGE: payload})
    print("Message:", message)
    return [message.encode()]
Exemplo n.º 13
0
def dummy(environ, start_response):
    print("Dummy")
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        start_response('200 OK', [('Content-Type', 'json')])
        payload = {
            "dates": ["11-28-2018"],
            "prev":
            "11-27-2018",
            "next":
            "11-29-2018",
            "titles": {
                "0": "cs241",
                "1": "tp103",
                "2": "astr120"
            },
            "events": [{
                "0": [{
                    "crn": "0",
                    "class": "cs241",
                    "title": "MP1",
                    "desc":
                    "this assignment is harder than the teacher expected",
                    "DueDate": "2018-11-29 00:22:57",
                    "EventId": 1,
                    "checked": True
                }, {
                    "crn": "0",
                    "class": "cs241",
                    "title": "QUIZ1",
                    "desc": "Wow! This quiz is easy-peasy",
                    "DueDate": "2018-11-29 00:12:57",
                    "EventId": 2,
                    "checked": False
                }],
                "1": [{
                    "crn": "1",
                    "class": "tp103",
                    "title": "MP1",
                    "desc":
                    "this assignment is harder than the teacher expected",
                    "DueDate": "2018-11-29 00:23:59",
                    "EventId": 3,
                    "checked": False
                }],
                "2": []
            }]
        }
        message = json.dumps({STATUS: SUCCESS, MESSAGE: payload})
    print("Message:", message)
    return [message.encode()]
Exemplo n.º 14
0
def real(environ, start_response):
	message = check_request(environ,start_response)
	query = pq(environ[QUERY])
	if message == "":
		body = None
		# (CRN, Title, Department, Instructor , Note VARCHAR(280))
		try:
			body = environ[BODY].read().decode("utf-8")
			body = json.loads(body)
			sql = "INSERT INTO Classes ( CRN , Title, Department, Instructor, Note) VALUES (%s, %s, %s, %s, %s)"
			num_attributes = 0
			vals = []
			vals.append(body["CRN"])
			vals.append(body["title"])
			# Extract updated values
			vals.append(body["department"])
			vals.append(body["instructor"])
			vals.append(body["note"] if "note" in body else "Nothing here.")
		except:
			print_exc()
			start_response('500 INTERNAL SERVER ERROR', [('Content-Type', 'json')])
			message = json.dumps({
				STATUS: FAILED,
				MESSAGE: "Please provide valid json"
			})
			return [message.encode()]
		mydb = None
		try:
			print(vals)
			mydb, mycursor = db.connect()
			mycursor.execute(sql, vals)
			mydb.commit()
			print("done")
			start_response('200 OK', [('Content-Type', 'json')])
			message = json.dumps({
				STATUS: SUCCESS,
				"CRN" : body["CRN"]
			})
		except Exception as e:
			if mydb is not None:
				mydb.rollback()
			print_exc()
			start_response('500 INTERNAL SERVER ERROR', [('Content-Type', 'json')])
			message = json.dumps({
				STATUS: FAILED,
				MESSAGE: str(e)
			})
		finally:
			if mydb:
				mydb.close()
	print(message)
	return [message.encode()]
Exemplo n.º 15
0
def check_request(environ, start_response):
    query = pq(environ[QUERY])
    if environ[REQUEST_METHOD] != METHOD_GET:
        start_response('400 Bad Request', [('Content-Type', 'json')])
        return json.dumps({
            STATUS: FAILED,
            MESSAGE: "Bad request method: expecting GET"
        })
    elif "eventId" not in query or len(query["eventId"]) == 0:
        start_response('400 Bad Request', [('Content-Type', 'json')])
        return json.dumps({
            STATUS: FAILED,
            MESSAGE: "Missing query parameter ?eventId=#"
        })
    else:
        return ""
Exemplo n.º 16
0
def check_request(environ,start_response):
	query = pq(environ[QUERY])
	if environ[REQUEST_METHOD] != METHOD_POST:
		start_response('400 Bad Request', [('Content-Type', 'json')])
		return json.dumps({
			STATUS: FAILED,
			MESSAGE: "Bad request method: expecting POST"
		})
	elif "CONTENT_LENGTH" not in environ:
		start_response('400 Bad Request', [('Content-Type', 'json')])
		return json.dumps({
			STATUS: FAILED,
			MESSAGE: "Missing post body in form: {'desc':'xxxxxx', 'duedate': 'xxxx-xx-xx'...}"
		})
	else:
		return ""
Exemplo n.º 17
0
def dummy(environ, start_response):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        start_response('200 OK', [('Content-Type', 'json')])
        message = json.dumps({
            STATUS: SUCCESS,
            MESSAGE: {
                "eventId": str(query["eventId"][0]),
                "crn": "1002",
                "Title": "mp2",
                "DueDate": "11-29-2018 10:12",
                "description": "Just another annoying event"
            }
        })
    print("Message:", message)
    return [message.encode()]
Exemplo n.º 18
0
def real(environ, start_response):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        eventId = query["eventId"][0]
        sql = "SELECT CRN, Title, DueDate, Event_Des FROM Events WHERE EventId = %s"
        mydb = None
        try:
            mydb, mycursor = db.connect()
            val = (eventId, )
            mycursor.execute(sql, val)
            results = mycursor.fetchall()
            if len(results) == 1:
                start_response('200 OK', [('Content-Type', 'json')])
                row = results[0]
                message = json.dumps({
                    STATUS: SUCCESS,
                    MESSAGE: {
                        "eventId": str(query["eventId"][0]),
                        "crn": row[0],
                        "title": row[1],
                        "duedate": row[2],
                        "desc": row[3]
                    }
                })
            else:
                start_response('400 Bad Request', [('Content-Type', 'json')])
                message = json.dumps({
                    STATUS: FAILED,
                    MESSAGE: "class does not exist"
                })
        except:
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({
                STATUS: FAILED,
                MESSAGE: "oopsie I made a poopsie"
            })
        finally:
            if mydb:
                mydb.close()

    print(message)
    return [message.encode()]
Exemplo n.º 19
0
def real(environ, start_response):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        crn = query["crn"][0]
        sql = "SELECT Title, CRN, Department, Instructor, Note FROM Classes WHERE CRN = %s"
        mydb = None
        try:
            mydb, mycursor = db.connect()
            val = (crn, )
            mycursor.execute(sql, val)
            results = mycursor.fetchall()
            if len(results) == 1:
                start_response('200 OK', [('Content-Type', 'json')])
                row = results[0]
                message = json.dumps({
                    STATUS: SUCCESS,
                    MESSAGE: {
                        "class": row[0],
                        "crn": row[1],
                        "department": row[2],
                        "instructor": row[3],
                        "note": row[4]
                    }
                })
            else:
                start_response('400 Bad Request', [('Content-Type', 'json')])
                message = json.dumps({
                    STATUS: FAILED,
                    MESSAGE: "class does not exist"
                })
        except:
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({
                STATUS: FAILED,
                MESSAGE: "oopsie I made a poopsie"
            })
        finally:
            if mydb:
                mydb.close()

    print(message)
    return [message.encode()]
Exemplo n.º 20
0
def dummy(environ, start_response):
    print("Dummy")
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        start_response('200 OK', [('Content-Type', 'json')])
        payload = [{
            "id": 1,
            "format": "png",
            "author": "alb2",
        }, {
            "id": 5,
            "format": "jpg",
            "author": "mac_is_kewl",
        }]
        message = json.dumps({STATUS: SUCCESS, MESSAGE: payload})
    print("Message:", message)
    return [message.encode()]
Exemplo n.º 21
0
def real(environ, start_response, netId):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        content = None
        try:
            content = environ[BODY].read()
            if 'binary' not in query or query['binary'][0].lower() == "false":
                print("Not binary")
                content = base64.decodebytes(content)
            if len(content) == 0:
                raise Exception("Please provide a non empty document")
        except:
            print_exc()
            start_response('400 Bad Request', [('Content-Type', 'json')])
            message = json.dumps({
                STATUS: FAILED,
                MESSAGE: "Error uploading document"
            })
            return [message.encode()]
        eventId = query["eventId"][0]
        form = query["format"][0].lower()
        sql = "INSERT INTO Documents (format, content, EventId, author) VALUES (%s, %s, %s, %s)"
        val = (form, content, eventId, netId)  #TODO CHANGE TO LOGIN USER
        mydb = None
        try:
            mydb, mycursor = db.connect()
            mycursor.execute(sql, val)
            _id = mycursor.lastrowid
            mydb.commit()
            start_response('200 OK', [('Content-Type', 'json')])
            message = json.dumps({STATUS: SUCCESS, "id": _id})
        except Exception as e:
            mydb.rollback()
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({STATUS: FAILED, MESSAGE: str(e)})
        finally:
            if mydb:
                mydb.close()
    return [message.encode()]
Exemplo n.º 22
0
def real(environ, start_response):
	message = check_request(environ,start_response)
	query = pq(environ[QUERY])
	if message == "":
		body = environ[BODY].read().decode("utf-8")
		body = json.loads(body)
		if 'google_token' not in body:
			start_response('400 Bad Request', [('Content-Type', 'json')])
			message = json.dumps({
				STATUS: FAILED,
				MESSAGE: "Improper request no google_token in body"
			})
		else:
			token = body['google_token']
			idinfo = google_auth(token)
			if idinfo is None:
				start_response('400 Bad Request', [('Content-Type', 'json')])
				message = json.dumps({
					STATUS: FAILED,
					MESSAGE: "Not valid google token"
				})
			else:
				try:
					netId = idinfo['email'].split("@")[0]
					add_user(netId)
					session = start_session(netId)
					start_response('200 OK', [('Content-Type', 'json')])
					message = json.dumps( {
						STATUS: SUCCESS,
						MESSAGE: session
					})
				except:
					print_exc()
					start_response('400 Bad Request', [('Content-Type', 'json')])
					message = json.dumps({
						STATUS: FAILED,
						MESSAGE: "Error in Database, check your code"
					})
	print(message)
	return [message.encode()]
Exemplo n.º 23
0
def dummy(environ, start_response):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        start_response('200 OK', [('Content-Type', 'json')])
        message = json.dumps({
            STATUS: SUCCESS,
            MESSAGE: {
                "crn":
                str(query["crn"][0]),
                "class":
                "cs241",
                "department":
                "cs",
                "instructor":
                "John Doe",
                "note":
                "So... I find that this class has been a great use of my time!"
            }
        })
    print("Message:", message)
    return [message.encode()]
Exemplo n.º 24
0
def real(environ, start_response, netId):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        EventId = query["EventId"][0]
        check = query["check"][0].lower() == "true"
        sql = ""
        val = (EventId, netId)
        if check:
            sql = "INSERT INTO EventDone (EventId, NetId) VALUES (%s, %s)"
        else:
            sql = "DELETE FROM EventDone WHERE EventId = %s and NetId=%s"
        try:
            mydb, mycursor = db.connect()
            #mydb.start_transaction(isolation_level=SERIALIZABLE, readonly=False)
            mycursor.execute(sql, val)
            count = mycursor.rowcount
            start_response('200 OK', [('Content-Type', 'json')])
            mydb.commit()
            message = json.dumps({STATUS: SUCCESS if count == 1 else FAILED})
        except Exception as e:
            mydb.rollback()
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({
                STATUS:
                FAILED,
                MESSAGE:
                "Already checked done on event"
                if check else "Event is already unchecked"
            })
        finally:
            if mydb:
                mydb.close()
    print(message)
    return [message.encode()]
Exemplo n.º 25
0
def real(environ, start_response, netId):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        mydb = None
        eventId = query["eventId"][0]
        sql = "SELECT id, format, author FROM Documents WHERE EventId = %s"
        try:
            eventId = int(eventId)
            val = (eventId, )
            mydb, mycursor = db.connect()
            mycursor.execute(sql, val)
            results = mycursor.fetchall()

            docs = []
            for row in results:
                docs.append({
                    "id": int(row[0]),
                    "format": row[1],
                    "author": row[2]
                })

            start_response('200 OK', [('Content-Type', 'json')])
            message = json.dumps({STATUS: SUCCESS, MESSAGE: docs})
        except:
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({
                STATUS: FAILED,
                MESSAGE: "Internal server error"
            })
        finally:
            if mydb:
                mydb.close()
    return [message.encode()]
Exemplo n.º 26
0
def real(environ, start_response):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        body = None
        try:
            body = environ[BODY].read().decode("utf-8")
            print(body)
            body = json.loads(body)
            sql = "INSERT INTO Events ( CRN , Title, DueDate, Event_Des) VALUES (%s, %s, %s, %s)"
            num_attributes = 0
            vals = []
            vals.append(body["CRN"])
            vals.append(body["title"])
            # Extract updated values
            try:
                time.strptime(body["duedate"], "%m-%d-%Y %H:%M")
            except:
                print_exc()
                start_response('500 INTERNAL SERVER ERROR',
                               [('Content-Type', 'json')])
                message = json.dumps({
                    STATUS:
                    FAILED,
                    MESSAGE:
                    "Incorrect Date in duedate put it in %Y-%m-%d %H:%M:%S"
                })
                return [message.encode()]

            vals.append(body["duedate"])
            vals.append(body["desc"])
        except:
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({
                STATUS: FAILED,
                MESSAGE: "Please provide valid json"
            })
            return [message.encode()]
        mydb = None
        try:
            print(vals)
            mydb, mycursor = db.connect()
            mycursor.execute(sql, vals)
            mydb.commit()
            _id = mycursor.lastrowid
            print("done")
            start_response('200 OK', [('Content-Type', 'json')])
            message = json.dumps({STATUS: SUCCESS, "EventId": _id})
        except Exception as e:
            if mydb is not None:
                mydb.rollback()
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({STATUS: FAILED, MESSAGE: str(e)})
        finally:
            if mydb:
                mydb.close()
    print(message)
    return [message.encode()]
Exemplo n.º 27
0
#网页解析

#7.parse_qs

#反序列化

from urllib.parse import parse_qs as pq
query = 'name=getmey&age=22'
print(pq(query))

#讲GET请求转化为字典类型
Exemplo n.º 28
0
def real(environ, start_response):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        body = None
        eventId = query["eventId"][0]
        try:
            body = environ[BODY].read().decode("utf-8")
            body = json.loads(body)
        except:
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({
                STATUS: FAILED,
                MESSAGE: "Please provide valid json"
            })
            return [message.encode()]
        sql = "UPDATE Events SET"
        num_attributes = 0
        vals = []
        # Extract updated values
        for key, val in body.items():
            print(key, "=", val)
            if key not in key_map:
                num_attributes = 0
                break
            if key == "duedate":
                # must validate it is a good time
                try:
                    time.strptime(val, "%m-%d-%Y %H:%M")
                except:
                    print_exc()
                    num_attributes = 0
                    break
            if type(val) != str:
                print("Improper type! expecting string but got", type(val))
                num_attributes = 0
                break
            num_attributes += 1
            sql += " " + key_map[key] + " = %s,"
            vals.append(val)

        mydb = None
        try:
            if num_attributes == 0:
                raise Exception(
                    "Invalid body provided please use one or more of the following keys with valid values: "
                    + str(list(key_map.keys())))
            # remove trailing comma
            sql = sql[:-1]
            sql += " WHERE EventId = %s"
            vals.append(eventId)

            mydb, mycursor = db.connect()
            mycursor.execute(sql, vals)
            mydb.commit()
            start_response('200 OK', [('Content-Type', 'json')])
            message = json.dumps({STATUS: SUCCESS})
        except Exception as e:
            if mydb is not None:
                mydb.rollback()
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({STATUS: FAILED, MESSAGE: str(e)})
        finally:
            if mydb:
                mydb.close()
    return [message.encode()]
Exemplo n.º 29
0
def real(environ, start_response, netId):
    message = check_request(environ, start_response)
    query = pq(environ[QUERY])
    if message == "":
        q = db.escapeString(query["date"][0])
        numDays = int(db.escapeString(query["numDays"][0]))
        dates = []

        start = time.time()
        current = start
        if q == "today":
            dates += [time.strftime('%m-%d-%Y', time.localtime(current))]
        elif q == "tomorrow":
            dates += [
                time.strftime('%m-%d-%Y', time.localtime(current + 86400))
            ]
            current = start + 86400
        elif q == "yesterday":
            dates += [
                time.strftime('%m-%d-%Y', time.localtime(current - 86400))
            ]
            current = start - 86400
        else:
            try:
                print(q)
                format = time.strptime(q, "%m-%d-%Y")
                start = time.mktime(format)
                current = start
                print("start is {}".format(
                    time.strftime('%m-%d-%Y',
                                  time.localtime(current -
                                                 (numDays) * 86400))))
                dates += [q]
            except:
                print_exc()
                start_response('500 INTERNAL SERVER ERROR',
                               [('Content-Type', 'json')])
                message = json.dumps({
                    STATUS: FAILED,
                    MESSAGE: "Date query has wrong format"
                })
                return [message.encode()]
        previous = time.strftime('%m-%d-%Y',
                                 time.localtime(current - (numDays) * 86400))
        for x in range(numDays - 1):
            dates += [
                time.strftime('%m-%d-%Y', time.localtime(current + 86400))
            ]
            current += 86400
        nextDay = time.strftime('%m-%d-%Y', time.localtime(current + 86400))
        mydb = None
        sql1 = "SELECT Enrollments.CRN, Classes.Title FROM Classes INNER JOIN Enrollments ON Classes.CRN = Enrollments.CRN WHERE Enrollments.NetId = %s"
        val1 = (netId, )
        sql2 = """
		SELECT * FROM ((SELECT Classes.CRN, `Events`.`Title`, `Events`.`DueDate`, `Events`.`Event_Des`,
		`Classes`.`Title` AS CTitle, `Events`.EventId as EventId FROM Classes LEFT JOIN `Events` ON Classes.crn = `Events`.crn) As Y
		LEFT JOIN ( SELECT * FROM EventDone WHERE EventDone.NetId = %s) as ED ON ED.EventId = Y.EventId),
		`Enrollments` WHERE `Enrollments`.crn = Y.CRN AND `Enrollments`.NetId = %s
		"""
        # Dates is not USER generated, I made it bitch thats right. I can bring down this whole system by changing motherfucking date
        sql2 += "AND (Y.DueDate LIKE '" + dates[0] + "%'"
        for x in range(1, len(dates)):
            sql2 += "OR Y.DueDate LIKE '" + dates[x] + "%'"
        sql2 += ")"
        val2 = (netId, netId)
        try:
            if len(dates) == "0":
                raise Exception('Date is not anything')
            mydb, mycursor = db.connect()
            mycursor.execute(sql1, val1)
            resultsClasses = mycursor.fetchall()
            mycursor.execute(sql2, val2)
            resultsCalendar = mycursor.fetchall()
            titles = {}
            events = {}
            for elem in dates:
                events[elem] = {}
            print("NETID:", netId)
            for row in resultsClasses:
                if row[0] not in titles:
                    titles[row[0]] = row[1]
                    for elem in dates:
                        events[elem][row[0]] = []
            for row in resultsCalendar:
                events[row[2].split(' ')[0]][row[0]].append({
                    "crn":
                    row[0],
                    "class":
                    row[4],
                    "title":
                    row[1],
                    "desc":
                    row[3],
                    "DueDate":
                    row[2],
                    "EventId":
                    row[5],
                    "checked":
                    row[6] != None
                })

            start_response('200 OK', [('Content-Type', 'json')])
            message = json.dumps({
                STATUS: SUCCESS,
                MESSAGE: {
                    "dates": dates,
                    "prev": previous,
                    "next": nextDay,
                    "titles": titles,
                    "events": events
                }
            })
        except:
            print_exc()
            start_response('500 INTERNAL SERVER ERROR',
                           [('Content-Type', 'json')])
            message = json.dumps({
                STATUS: FAILED,
                MESSAGE: "oopsie I made a poopsie"
            })
        finally:
            if mydb:
                mydb.close()
    return [message.encode()]