Select Git revision
Forked from an inaccessible project.
majors.py 4.90 KiB
from typing import Dict, Set, Any, Optional
from common_functions import finger
class Major:
majors: Set["Major"] = set()
def __init__(self, name: str, alternate_names: Set[str] = None,
abbreviations: Optional[Set[str]] = None, is_computing_major: bool = True):
self._name: str = name
self.alternate_names: Set[str] = alternate_names if alternate_names is not None else set()
self.abbreviations: Set[str] = abbreviations if abbreviations is not None else set()
self._is_computing_major: bool = is_computing_major
Major.majors.add(self)
@classmethod
def get_major(cls, name: str) -> "Major":
candidate = [major for major in cls.majors if name == major.name or name in major.alternate_names]
if candidate:
return candidate[0]
else:
return Major(name, is_computing_major=False)
@staticmethod
def get_student_majors(login: str) -> Set["Major"]:
student_data: Dict[str, Any] = finger(login)
if student_data['unlSISClassLevel'] == 'GR':
return {Major.get_major('Graduate Student')}
else:
majors: Optional[Set[str]] = student_data['unlSISMajor']
return {Major.get_major(major) for major in majors} if majors is not None else Major.get_major('None')
@property
def name(self) -> str:
return self._name
@property
def is_computing_major(self) -> bool:
return self._is_computing_major
def __str__(self) -> str:
return self.name
def __repr__(self) -> str:
return f'Name: "{self.name}";\tAlternate Names: {self.alternate_names if self.alternate_names else "{}"};\t' \
f'CSE Major: {self._is_computing_major};\t' \
f'Abbreviations: {self.abbreviations if self.abbreviations else "{}"}'
def __eq__(self, other: "Major") -> bool:
return self.name == other.name
def __ne__(self, other: "Major") -> bool:
return not self.__eq__(other)
def __hash__(self) -> int:
return hash(self.name)
# Computing Majors
Major('Computer Science', alternate_names={'Computer Science (Raikes)'},
abbreviations={'COMP-BS', 'COMP-BA', 'COMP-MAJ', 'CMPS-BSCS',
'JECS-BS', 'JECS-BA', 'JECS-MAJ', 'JECS-BSCS'}) # double-check Raikes BSCS
Major('Computer Engineering', alternate_names={'Computer Engineering (Raikes)'},
abbreviations={'CENG-BSCP', 'JECE-BSCP'})
Major('Software Engineering', alternate_names={'Software Engineering (Raikes)'},
abbreviations={'SOFT-BSSE', 'JESE-BSSE'})
# Raikes Non-Computing Majors (to capture their alternate names)
Major('Accounting', alternate_names={'Accounting (Raikes)'},
is_computing_major=False,
abbreviations={'ACCG-BSBA', 'ACCG-MAJ', 'JEAC-BSBA', 'JEAC-MAJ'})
Major('Actuarial Science', alternate_names={'Actuarial Science (Raikes)'}, is_computing_major=False,
abbreviations={'AACTS-BA', 'AACTS-BS', 'AACTS-MAJ', 'ACTS-BSBA', 'ACTS-MAJ', 'JEAS-BSBA', 'JEAS-MAJ'})
Major('Business Administration', is_computing_major=False,
alternate_names={'Business Administration with Accounting Emphasis', 'Business Administration (Raikes)'},
abbreviations={'BAAC-BSBA', 'BAAC-MAJ', 'BLNK-BSBA', 'BSAD-BSBA', 'BSAD-MAJ', 'JEBA-BSBA', 'JEBA-MAJ'})
Major('Economics', alternate_names={'Economics (Raikes)'}, is_computing_major=False,
abbreviations={'ECON-BSBA', 'ECON-MAJ', 'JEEC-BSBA', 'JEEC-MAJ'})
Major('Finance', is_computing_major=False,
alternate_names={'Finance (Raikes)',
'Finance (Banking & Financial Institutions)',
'Finance (Banking & Financial Institutions) (Raikes)',
'Finance (CFA-Investments)', 'Finance (CFA-Investments) (Raikes)',
'Finance (Risk Management & Insurance)', 'Finance (Risk Management & Insurance) (Raikes)'},
abbreviations={'FINA-BSBA', 'FINA-MAJ', 'JEFN-BSBA', 'JEFN-MAJ',
'FINB-BSBA', 'FINB-MAJ', 'FINI-BSBA', 'FINI-MAJ', 'FINR-BSBA', 'FINR-MAJ',
'JEFB-BSBA', 'JEFB-MAJ', 'JEFI-BSBA', 'JEFI-MAJ', 'JEFR-BSBA', 'JEFR-MAJ'})
Major('International Business', alternate_names={'International Business (Raikes)'}, is_computing_major=False,
abbreviations={'IBUS-BSBA', 'IBUS-MAJ', 'JEIB-BSBA', 'JEIB-MAJ'})
Major('Marketing', alternate_names={'Marketing (Raikes)'}, is_computing_major=False,
abbreviations={'MRKT-BSBA', 'MRKT-MAJ', 'JEMK-BSBA', 'JEMK-MAJ'})
Major('Management', alternate_names={'Management (Raikes)'}, is_computing_major=False,
abbreviations={'MNGT-BSBA', 'MNGT-MAJ', 'JEMN-BSBA', 'JEMN-MAJ'})
# Thanks to being able to access directory.unl.edu, I think the abbreviations are now unnecessary
# But if that ever changes, see these "Data Dictionary" pages for the (almost) comprehensive list of abbreviations:
# https://registrar.unl.edu/epm/dd/ep_wf_cpp_v1.shtml/
# https://registrar.unl.edu/data-dictionary-academic-plan/