Articles

kevincianfarini / pyvt

täckning Statusbygga StatusPyPI version

en Virginia Tech tidtabell klasser Python API

installation

pip install py-vt

användning

importera tidtabellen

from pyvt import Timetable

API ger tillgång till tidtabellen genom en tidtabell objekt.

timetable = Timetable()

tidtabellsobjektet ger några användbara metoder för att dra data från VT-tidtabellen.

timetable.crn_lookup('17583', term_year='201701', open_only=False)

returnerar klassavsnittsobjektet från tidtabellen med CRN 17583 i termen år201701, oavsett om klassen är full till kapacitet eller inte. Alternativt om du bara vill hitta avsnitt som är öppna:

timetable.crn_lookup('17583', term_year='201701')

alla metoder i tidtabellen ger ett standardargument av open_only=True och term_year=None när du gör tidtabellsförfrågningar. Vid en sökning, om terminsåret är inget kommer det att vara standard till det senaste terminsåret. Det finns mer om detta i avsnittet Term Year.

några av de andra vanligaste uppslagsmetoderna är följande:

def crn_lookup(self, crn_code, term_year=None, open_only=True): ...

crn_lookup(...) returnerar antingen ett enda Section(...) objekt eller None beroende på framgången för frågan. Ingen returneras om det inte fanns några tillgängliga klassavsnitt baserat på argumenten.

följande metoder returnerar antingen en lista medSection(...) objekt ellerNone beroende på framgången för frågan.

def class_lookup(self, subject_code, class_number, term_year=None, open_only=True): ...def cle_lookup(self, cle_code, term_year=None, open_only=True): ...def subject_lookup(self, subject_code, term_year=None, open_only=True): ...

mer förfinade sökningar kan utföras med hjälp av refined_lookup(...) metod

def refined_lookup(self, crn_code=None, subject_code=None, class_number=None, cle_code=None, term_year=None, open_only=True):

Användningskoder

några av de koder som behöver användas med detta API är enbart för att tillgodose behoven hos VT tidtabell inlägg. Några användbara koder är följande.

len(crn_code) >= 3subj_codes = len(class_number) == 4cle_codes = { 'AR%': 'All Curriculums', 'AR01': 'Area 1 Classes', 'AR02': 'Area 2 Classes', ... 'AR07': 'Area 7 Classes'}

termen år

Virginia Tech tidtabell erbjuder klassavsnitt uppslag för specifika terminsår. Om du vill arbeta med det aktuella terminsåret kan du lämna term_year=None orörd i tidtabellsmetoden. Vid begäran kommer terminsåret att vara det senaste terminsåret.Terminsår händer varje år under månaderna augusti, januari, juni och juli. Ett standardårsanrop i mars skulle resultera i att klassavsnitt returneras för det sista aktiva terminsåret, vilket är i Januari. vårtermin. Detta för att undvika att ringa till VT-tidtabellen med terminsår som ännu inte är tillgängliga.

alternativt, om du vet att ett visst terminsår är tillgängligt men inte standard, kan du skicka ett terminsår till uppslagsmetoderna. Termår följer ett enkelt yyyymm-mönster som visas:

term_years = { 'Spring 2017': '201701', 'Summer I 2017': '201706', 'Summer II 2017': '201707', 'Fall 2017': '201709', ...}

Sektionsobjektet

klassavsnitt som returneras från tidtabellen kommer i form av ett Section() objekt. Alla Sektionsobjekt har följande egenskaper:

section_attrs = 

antingen ett enda sektionsobjekt eller en lista med sektionsobjekt kommer att returneras till dig vid en lyckad fråga till VT-tidtabellen. Du kan komma åt information om klassavsnitt från ovanstående attribut.

TimetableError

ett Tidtabellsfel kastas när antingen en dålig begäran görs eller VT-tidtabellen är nere. I själva verket, när statuskoden för begäran inte är 200. Det kastade felet kan användas för att försöka och graciöst misslyckas i en utsträckning. Den TimetableError ger ensleep_time attribut för att möjliggöra en runtime paus.

from pyvt import TimetableErrortry: timetable.crn_lookup(...)except TimetableError as e: time.sleep(e.sleep_time)

tanken bakom detta är att om begäran var dålig kommer ditt program att sova under en kort tid. Men om VT-tidtabellen är nere och flera på varandra följande TimetableErrors höjs, växer sleep_time exponentiellt för att undvika överväldigande servern.