Articles

kevincianfarini / pyvt

AbdeckungsstatusBuild-StatusPyPI-Version

Ein Tech Stundenplan der Klassen Python API

Installation

pip install py-vt

Verwendung

Importieren Sie den Stundenplan

from pyvt import Timetable

Die API ermöglicht den Zugriff auf den Stundenplan über ein Stundenplanobjekt.

timetable = Timetable()

Das timetable-Objekt bietet einige nützliche Methoden zum Abrufen von Daten aus dem VT-Timetable.

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

gibt das Klassenabschnittsobjekt aus dem Stundenplan mit der CRN 17583 im Term year 201701 zurück, unabhängig davon, ob die Klasse ausgelastet ist oder nicht. Alternativ, wenn Sie nur Abschnitte finden möchten, die geöffnet sind:

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

Alle Methoden des Fahrplans bieten ein Standardargument von open_only=True und term_year=None, wenn Fahrplananfragen gestellt werden. Wenn bei einer Suche das term year None ist, wird standardmäßig das letzte term year verwendet. Mehr dazu gibt es im Abschnitt Term Year.

Einige der anderen am häufigsten verwendeten Suchmethoden sind wie folgt:

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

crn_lookup(...) gibt je nach Erfolg der Abfrage entweder ein einzelnes Section(...) Objekt oder None zurück. None wird zurückgegeben, wenn aufgrund der Argumente keine Klassenabschnitte verfügbar waren.

Die folgenden Methoden geben je nach Erfolg der Abfrage entweder eine Liste von Section(...) Objekten oder None zurück.

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): ...

Verfeinerte Suchen können mit der refined_lookup(...) Methode

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

Verwendungscodes

Einige der Codes, die mit dieser API verwendet werden müssen, dienen ausschließlich dazu, die Anforderungen die Bedürfnisse der VT Zeitplan Beiträge. Einige hilfreiche Codes sind wie folgt.

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'}

Die Term Years

Der Virginia Tech Stundenplan bietet class section Lookups für bestimmte Term Years. Wenn Sie mit dem aktuellen Term year arbeiten möchten, können Sie term_year=None in den Stundenplan-Methodenaufrufen unberührt lassen. Bei der Anforderung wird standardmäßig das Term year als das letzte Term year festgelegt.Term Years finden jedes Jahr in den Monaten August, Januar, Juni und Juli statt. Ein Standardaufruf für das Termjahr im März würde zur Rückgabe von Klassenabschnitten für das letzte aktive Termjahr im Januar führen. Das Frühjahrssemester. Dies soll vermeiden, dass Anrufe an den VT-Zeitplan mit Laufzeitjahren getätigt werden, die noch nicht verfügbar sind.

Wenn Sie wissen, dass ein bestimmtes Termjahr verfügbar ist, aber nicht der Standardwert, können Sie alternativ ein Termjahr an die Lookup-Methoden übergeben. Termjahre folgen einem einfachen JJJJMM-Muster wie folgt:

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

Das Sektionsobjekt

Klassenabschnitte, die vom Stundenplan zurückgegeben werden, haben die Form eines Section() Objekts. Alle Abschnittsobjekte haben die folgenden Eigenschaften:

section_attrs = 

Bei erfolgreicher Abfrage des VT-Stundenplans wird Ihnen entweder ein einzelnes Abschnittsobjekt oder eine Liste von Abschnittsobjekten zurückgegeben. Sie können über die obigen Attribute auf Informationen zu Klassenabschnitten zugreifen.

Der TimetableError

Ein Timetableerror wird ausgelöst, wenn entweder eine fehlerhafte Anforderung gestellt wird oder der VT-Zeitplan nicht verfügbar ist. In der Tat, wenn der Statuscode der Anforderung nicht 200 ist. Der geworfene Fehler kann verwendet werden, um zu versuchen, bis zu einem gewissen Grad ordnungsgemäß zu scheitern. Der TimetableError stellt ein sleep_time Attribut bereit, um eine Laufzeitpause zuzulassen.

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

Die Idee dahinter ist, dass, wenn die Anfrage schlecht war, Ihr Programm für eine kurze Zeit schlafen wird. Wenn jedoch der VT-Zeitplan ausgefallen ist und mehrere aufeinanderfolgende TimetableErrors ausgelöst werden, wächst sleep_time exponentiell, um eine Überlastung des Servers zu vermeiden.