inderpartap/Bunk-O-Meter

View on GitHub
parse.py

Summary

Maintainability
C
7 hrs
Test Coverage
# import urllib2
from bs4 import BeautifulSoup
import requests
from array import *
from operator import truediv
import math
import numpy as np


def parseatt(user):
    page = open(user)
    soup =  BeautifulSoup(page, "html.parser")
    page.close()
    #print(soup.prettify())
    #print soup('table')[4].prettify() 
    c=0
    for row in soup('table')[4].findAll('tr'):
        tds = row('td')
        c = c+1

    result =[[] for i in range(8)]

    #Course Code
    i=1
    ccode=[]
    for i in range(1,c):
        ccode.append(soup('table')[4].findAll('tr')[i].findAll('td')[1].string)
    result[0] = ccode

    #Course Name
    i=1
    cname=[]
    for i in range(1,c):
        cname.append(soup('table')[4].findAll('tr')[i].findAll('td')[2].string)
    result[1] = cname

    #Course Type
    i=1
    ctype=[]
    for i in range(1,c):
        ctype.append(soup('table')[4].findAll('tr')[i].findAll('td')[3].string)
    result[2] = ctype

    #Class Attended
    i=1
    attend=[]
    for i in range(1,c):
        attend.append(float(int(soup('table')[4].findAll('tr')[i].findAll('td')[6].string)))
    attend = np.array(attend)

    #Total Classes
    i=1
    total=[]
    for i in range(1,c):
        total.append(float(int(soup('table')[4].findAll('tr')[i].findAll('td')[7].string)))
    total = np.array(total)

    #Calculating Attendance
    attendance= (attend/total)*100
    attendance = np.ceil(np.array(attendance)).astype(int)
    for i in range(0,c-1):
        if (attendance[i] < 0):
            attendance[i]=0
    result[3] = attendance
    # print attendance

    #Attendance if you go today
    att_going = ((attend+1)/(total+1))*100
    att_going = np.ceil(np.array(att_going)).astype(int)
    result[4] = att_going
    # print att_going

    #Attendance if you miss today
    att_miss = ((attend)/(total+1))*100
    i=0
    for i in range(0,c-1):
        if (ctype[i] == "Embedded Lab"):
            att_miss[i] = ((attend[i])/(total[i]+2))*100
    att_miss = np.ceil(np.array(att_miss)).astype(int)
    result[5] = att_miss
    # print att_miss


    #How many classes you can miss
    no_miss = ((attend/0.75)-total)
    i=0
    for i in range(0,c-1):
        if (ctype[i] == "Embedded Lab"):
            no_miss[i] = ((attend[i]/0.75)-total[i])/2
        if (no_miss[i]<0):
            no_miss[i]=0

    no_miss = np.floor(np.array(no_miss)).astype(int)
    result[6] = no_miss
    # print no_miss

    #If debarred, no. of classes you need to attend
    no_bar = (((0.75*total)-attend)/0.25)
    no_bar = np.ceil(np.array(no_bar)).astype(int)
    i=0
    for i in range(0,c-1):
        if (no_bar[i]<0):
            no_bar[i]=0
    result[7] = no_bar
    # print no_bar

    return result


def parsetimetable():
    return 0
def parsemarks():
    return 0
def parsehistory(user):
    page = open(user)
    soup =  BeautifulSoup(page, "html.parser")
    page.close()
    c=0
    for row in soup('table')[2].findAll('tr'):
        tds = row('td')
        c = c+1

    result =[[] for i in range(7)]

    #Sl. No.
    i=1
    slno=[]
    for i in range(1,c):
        slno.append(soup('table')[2].findAll('tr')[i].findAll('td')[0].string)
    result[0] = slno

    #Course Code
    i=1
    ccode=[]
    for i in range(1,c):
        ccode.append(soup('table')[2].findAll('tr')[i].findAll('td')[1].string)
    result[1] = ccode

    #Course Name
    i=1
    cname=[]
    for i in range(1,c):
        cname.append(soup('table')[2].findAll('tr')[i].findAll('td')[2].string)
    result[2] = cname

    #Course Type
    i=1
    ctype=[]
    for i in range(1,c):
        ctype.append(soup('table')[2].findAll('tr')[i].findAll('td')[3].string)
    result[3] = ctype

    #Credits
    i=1
    credit=[]
    for i in range(1,c):
        credit.append(soup('table')[2].findAll('tr')[i].findAll('td')[4].string)
    result[4] = credit

    #Grade
    i=1
    grade=[]
    for i in range(1,c):
        grade.append(soup('table')[2].findAll('tr')[i].findAll('td')[5].string)
    result[5] = grade

    #Course Exam date
    i=1
    exdate=[]
    for i in range(1,c):
        exdate.append(soup('table')[2].findAll('tr')[i].findAll('td')[6].string)
    result[6] = exdate


    #credit detials
    c=4
    credits =[[] for i in range(1)]
    i=1
    creditregis=[]
    for i in range(0,c):
        creditregis.append(soup('table')[3].findAll('tr')[1].findAll('td')[i].string)
    credits[0] = creditregis

    return result,credits
if __name__ == '__main__':
    parseatt()