random cleanups

This commit is contained in:
Coding with Peter 2024-03-22 19:25:48 -07:00
parent 73bb2281a4
commit 498b90ddcc
10 changed files with 415 additions and 1109 deletions

View File

@ -1675,11 +1675,11 @@ def instructor_list_to_activate_evals():
def add_evals(section=0): def add_evals(section=0):
# show or hide? # show or hide?
TERM = 180 TERM = 181
SEM = "fa23" SEM = "sp24"
hidden = True hidden = False
s = [ x.strip() for x in codecs.open(f'cache/{SEM}_eval_sections.csv','r').readlines()] s = [ x.strip() for x in codecs.open(f'cache/{SEM}_eval_sections.txt','r').readlines()]
s = list(funcy.flatten(s)) s = list(funcy.flatten(s))
s.sort() s.sort()
print(s) print(s)

View File

@ -191,6 +191,109 @@ def stats():
######### from tasks.py ######### from tasks.py
def strip(x): return x.strip()
def esc_comma(x): return re.sub(',','[CMA]',x)
def by_sem(x): return x['sem']
def parse_schedule():
# "Course Code","Start Date","End Date",Term,Delivery,CRN,Status,"Course Name",
# 8 "Course Description","Units/Credit hours","Instructor Last Name",
# 11 "Instructor First Name",Campus/College,"Meeting Days and Times",
# 14 "Pass/No Pass available?","Class Capacity","Available Seats","Waitlist Capacity",
# 18 "Current Waitlist Length","Meeting Locations","Course Notes",ZTC 21
oo = codecs.open('cache/fa20_section_notes.txt','w','utf-8')
pp = codecs.open('cache/fa20_section_summary.txt','w','utf-8')
u0 = "https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=get/sections"
existing_sections = json.loads( requests.get(u0).text )
existing_sections = funcy.group_by(by_sem,existing_sections)
by_sem_crn = {}
for sem,sects in existing_sections.items():
for s in sects:
new_key = sem + '_' + s['crn']
by_sem_crn[new_key] = s
#print(json.dumps(by_sem_crn,indent=2))
mt = open('cache/missed_instructors.txt','w')
teacher_cache = {}
count = 0
stopat = 20000
u1 = "https://www.gavilan.edu/_files/php/current_schedule.csv"
with requests.Session() as s:
download = s.get(u1)
decoded_content = download.content.decode('utf-8')
cr = csv.reader(decoded_content.splitlines(), delimiter=',')
my_list = list(cr)
#for row in my_list:
# print(row)
for row in my_list:
row = list(map(strip,row))
row = list(map(esc_comma,row))
if row[3] in sem_to_short:
row[3] = sem_to_short[row[3]]
if row[20]:
oo.write("%s - %s \n" % (row[0], row[20]))
summary = "%s %s %s %s \t %s %s\t %s" % (row[4], row[11],row[10],row[6], row[5], row[0], row[7])
pp.write(summary + "\n")
# cancelled?
status = row[6]
if status != "Active": continue
# ignore if exists? TODO check if i need to update it
this_sem_crn = row[3] + '_' + row[5]
if this_sem_crn in by_sem_crn:
print("\t...already uploaded...skipping %s" % this_sem_crn)
continue
if count >0 and count<stopat:
t_name = "%s %s" % (row[11],row[10])
if t_name in teacher_cache:
r = {'sched_alias':1, 'id': teacher_cache[t_name]}
else:
u2 = "https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=get/instructor/name"
p2 = {'inst': t_name }
print("\tSearching for teacher: %s" % t_name )
r2 = requests.post(u2, data=p2)
r = json.loads(r2.text)
if r and 'id' in r: teacher_cache[t_name] = r['id']
if not r:
print("\tCouldn't locate teacher: %s %s" % (row[11],row[10]))
u2 = "https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=get/instructor/fuzzyname"
p2 = {'inst': row[11] + " % " + row[10] }
print("\tFuzzy search for teacher: " + row[11] + " % " + row[10])
r2 = requests.post(u2, data=p2)
r = json.loads(r2.text)
if r and 'id' in r: teacher_cache[t_name] = r['id']
if r and 'sched_alias' in r:
row[10] = r['id']
#print("\tfound teacher: " + str(r))
payload = { 'cols':'code,start_date,end_date,sem,delivery,crn,status,name,descr,units,teacher_id,days,pnp,location,note,ztc',
'vals': u','.join( [ row[j] for j in [0,1,2,3,4,5,6,7,8,9,10,13,14,19,20,21] ] ) }
#print(json.dumps(payload,indent=2))
#print()
r3 = requests.post("https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=add/section", params=payload)
result = json.loads(r3.text)
if result and 'err' in result and result['err']:
print("\n*** Problem? --> %s" % result['err'] )
mt.write("*** Problem? --> %s\n" % result['err'] )
else:
print("*** Still Couldn't locate teacher: %s %s" % (row[11],row[10]))
mt.write("Couldn't locate teacher: %s %s\n" % (row[11],row[10]))
print()
count += 1
def certificates_gott_build_2020(): def certificates_gott_build_2020():
#send_email("Peter Howell", "Peter", "phowell@gavilan.edu", "test", "this is a test") #send_email("Peter Howell", "Peter", "phowell@gavilan.edu", "test", "this is a test")
@ -408,6 +511,62 @@ def serve():
### interactive.py ### interactive.py
from textual.app import App, ComposeResult
from textual.containers import ScrollableContainer, Container, Horizontal
from textual.widgets import Button, Footer, Header, Static, Label
from textual.widgets import Welcome
from textual import events
from textual.app import App, ComposeResult
from textual.widgets import RichLog
class CanvasApp(App):
"""A Textual app to manage canvas."""
BINDINGS = [("d", "toggle_dark", "Toggle dark mode"), ("q", "quit_app", "Quit")]
CSS_PATH = "interactive.tcss"
current_label = ""
# RHS side panel: Status & Saved Preferences
current_term = ""
last_db_pull = ""
orientation_shell_id = ""
stem_shell_id = ""
def compose(self) -> ComposeResult:
"""Create child widgets for the app."""
yield Header()
#yield Welcome()
yield Label(self.current_label, classes="box", id="feedback")
yield RichLog()
yield Footer()
def action_toggle_dark(self) -> None:
"""An action to toggle dark mode."""
self.dark = not self.dark
def action_quit_app(self) -> None:
self.exit()
def on_button_pressed(self) -> None:
self.exit()
def on_key(self, event: events.Key) -> None:
self.query_one(RichLog).write(event)
self.current_label += event.character
fb = self.query_one("#feedback")
fb.update(self.current_label)
def text_app():
app = CanvasApp()
app.run()
@ -2196,7 +2355,7 @@ def categorize():
'''
# Deprecated. call perl. # Deprecated. call perl.
@ -2206,8 +2365,7 @@ def constructSchedule():
cmd = 'perl make.pl ' + term cmd = 'perl make.pl ' + term
print "command: " + cmd print "command: " + cmd
os.system(cmd) os.system(cmd)
'''
""" """
def fetch_dict(target,params={}): def fetch_dict(target,params={}):

View File

@ -1,6 +1,10 @@
import heapq, re, csv, os, shutil, datetime, urllib, sys import re, datetime, urllib, sys
import itertools, time, markdown, csv, json, os.path, webbrowser, threading import markdown, json, threading
from functools import wraps
#import heapq, csv, os, shutil, itertools, time, os.path, webbrowser
#from functools import wraps
# from content import my_site
from flask import Flask, request, send_from_directory, Response, render_template from flask import Flask, request, send_from_directory, Response, render_template
from flask import send_file from flask import send_file
from flask_socketio import SocketIO, emit from flask_socketio import SocketIO, emit
@ -13,7 +17,6 @@ import localcache
from server import * from server import *
from canvas_secrets import flask_secretkey from canvas_secrets import flask_secretkey
from content import my_site
@ -355,29 +358,122 @@ def serve():
from random import randint
import asciimatics
from asciimatics.scene import Scene
from asciimatics.widgets import Frame, Layout, Button, ListBox, TextBox, Widget, Divider
from asciimatics.exceptions import StopApplication, ResizeScreenError
from asciimatics.event import MouseEvent, KeyboardEvent
from asciimatics.screen import Screen
import traceback
from textual.app import App, ComposeResult def update():
from textual.containers import ScrollableContainer, Container, Horizontal pass
from textual.widgets import Button, Footer, Header, Static, Label def enroll_ori():
from textual.widgets import Welcome pass
from textual import events
from textual.app import App, ComposeResult class OutputView(Frame):
from textual.widgets import RichLog def __init__(self, screen):
super(OutputView, self).__init__(screen,
screen.height,
(screen.width * 2 // 3),
on_load=self.nothing,
hover_focus=True,
has_border=True,
title="Output")
class CanvasApp(App): class MenuView(Frame):
"""A Textual app to manage canvas.""" def __init__(self, screen):
super(MenuView, self).__init__(screen,
screen.height,
screen.width,
on_load=self.nothing,
hover_focus=False,
has_border=False,
title="Actions")
# Save off the model that accesses the contacts database.
self.model = [["Update database","update"], ["Enroll Orientation Shell","enroll_ori"]]
BINDINGS = [("d", "toggle_dark", "Toggle dark mode"), ("q", "quit_app", "Quit")] # Main UI: Actions and their output
CSS_PATH = "interactive.tcss" self._list_view = ListBox(
height=screen.height - 5,
options=self.model, name="actions", on_select=self.nothing)
self._output_view = TextBox(height=screen.height - 5, name="output", readonly=False)
self._output_view.value = ['default']
self._edit_button = Button("Edit", self.nothing)
self._delete_button = Button("Delete", self.a)
layout = Layout([1,2], fill_frame=False)
self.add_layout(layout)
layout.add_widget(self._list_view)
layout.add_widget(self._output_view,1)
#layout.add_widget(Divider())
current_label = "" layout2 = Layout([1, 1, 1, 1])
self.add_layout(layout2)
layout2.add_widget(Button("Add", self.nothing), 0)
layout2.add_widget(self._edit_button, 1)
layout2.add_widget(self._delete_button, 2)
layout2.add_widget(Button("Quit", self._quit), 3)
self.fix()
def nothing(self):
pass
def a(self):
self.update_output('delete button pressed')
def update_output(self,value):
li = self._output_view.value.copy()
li.append(value)
self._output_view.value = li
def _quit(self):
raise StopApplication("User pressed quit")
def text_app():
while True:
Screen.wrapper(demo, catch_interrupt=False)
sys.exit(0)
'''try:
Screen.wrapper(demo, catch_interrupt=False)
sys.exit(0)
except ResizeScreenError as e:
pass
except Exception as e:
print(traceback.format_exc())
sys.exit(0)'''
#mv = MenuView(demo)
#Screen.wrapper()
#Screen.wrapper(demo)
def demo(screen):
scene1 = Scene([MenuView(screen)],-1)
screen.play([scene1], stop_on_resize=True, start_scene=scene1, allow_int=True )
def demo2(screen):
last_event = KeyboardEvent(0)
while True:
screen.print_at('Hello world!',
randint(0, screen.width), randint(1, screen.height),
colour=randint(0, screen.colours - 1),
bg=randint(0, screen.colours - 1))
ev = screen.get_event()
if type(ev) == KeyboardEvent:
last_event = ev
screen.print_at(ev,
0, 0,
colour=randint(0, screen.colours - 1),
bg=randint(0, screen.colours - 1))
if last_event.key_code in (ord('Q'), ord('q')):
return
screen.refresh()
# RHS side panel: Status & Saved Preferences
current_term = ""
last_db_pull = ""
orientation_shell_id = ""
stem_shell_id = ""
# Most common actions # Most common actions
@ -432,36 +528,6 @@ class CanvasApp(App):
# update database every 5 hours # update database every 5 hours
def compose(self) -> ComposeResult:
"""Create child widgets for the app."""
yield Header()
#yield Welcome()
yield Label(self.current_label, classes="box", id="feedback")
yield RichLog()
yield Footer()
def action_toggle_dark(self) -> None:
"""An action to toggle dark mode."""
self.dark = not self.dark
def action_quit_app(self) -> None:
self.exit()
def on_button_pressed(self) -> None:
self.exit()
def on_key(self, event: events.Key) -> None:
self.query_one(RichLog).write(event)
self.current_label += event.character
fb = self.query_one("#feedback")
fb.update(self.current_label)
def text_app():
app = CanvasApp()
app.run()
if __name__ == "__main__": if __name__ == "__main__":
options = { 1: ['start web server',serve] , options = { 1: ['start web server',serve] ,
2: ['start text app', text_app], 2: ['start text app', text_app],

View File

@ -1,9 +0,0 @@
Screen {
layout: vertical;
}
.box {
height: 1fr;
border: solid green;
width: 100%;
}

View File

@ -9,6 +9,8 @@ from datetime import timedelta
from dateutil.parser import parse from dateutil.parser import parse
from os.path import exists, getmtime from os.path import exists, getmtime
from pipelines import sync_non_interactive, url, header, gp, dean from pipelines import sync_non_interactive, url, header, gp, dean
from semesters import to_sis_sem
#from courses import getCoursesInTerm #from courses import getCoursesInTerm
#from courses import user_in_depts_live #from courses import user_in_depts_live
@ -1697,12 +1699,6 @@ ORDER BY u.sortablename;"""
return courses return courses
def to_sis_sem(s):
season = s[0:2]
year = "20" + s[2:5]
a = {'sp':'30','su':'50','fa':'70'}
season = a[season]
return year+season
def build_db_schedule(): def build_db_schedule():
# from the schedule json files # from the schedule json files

778
out.txt
View File

@ -1,778 +0,0 @@
Performing: load all programs
A.A.-T Degree Theatre Arts
- take_all from THEA1, THEA12A, THEA13A, THEA14,
- take at least n courses from THEA27, THEA25, THEA26, THEA12B, THEA15,
- take at least n courses from THEA13A, THEA14,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.A. Degree Theater Arts-Television Performance
- take_all from THEA1, THEA2A, THEA12A, THEA13A, THEA14,
- take_all from THEA17B, MCTV17B, THEA16, MCTV16, THEA19, MCTV 19, MCTV 17A, THEA17A, THEA20, HUM25,
- take at least n courses from
A.A. Degree Theatre Arts: Technical Production
- take_all from THEA1, THEA2A, THEA12A, THEA13A, THEA14,
- take_all from THEA19, MCTV 19, THEA4, CMUN2, THEA15, THEA2B, THEA12B, ART2A, THEA7, ART8A, ART10A, ART12A, ART12B, ART13, THEA14,
- take at least n courses from
A.A. Degree Theatre Arts: Acting
- take_all from THEA1, THEA2A, THEA12A, THEA13A, THEA14,
- take_all from THEA19, MCTV 19, THEA4, CMUN2, THEA13B, THEA13C, THEA13D, THEA2B, THEA12B, MUS8A, MUS8B, MUS8C, MUS8D, THEA7, THEA11,
- take at least n courses from
Certificate of Achievement Spanish Native Speakers Option 4
- take at least n courses from HIST12, HUM12, SPAN 12A, SPAN12B, SPAN23, ART14A, THEA3,
Certificate of Achievement Spanish Non-Native Speakers Option 3
- take at least n courses from SPAN2A, SPAN2B, SPAN 12A, SPAN12B, SPAN23,
Certificate of Achievement Spanish Non-Native Speakers Option 2
- take at least n courses from SPAN1B, SPAN2A, SPAN2B, SPAN 12A, SPAN12B, SPAN23,
Certificate of Achievement Spanish Non-Native Speakers Option 1
- take at least n courses from SPAN1A, SPAN1B, SPAN2A, SPAN2B,
Certificate of Achievement Music Composition and Production
- take_all from MUS3A, MUS3B, MUS4A, MUS7, MUS16A, MUS21, MUS1A, MUS1B, MUS2, MUS6,
A.A.-T Degree Music
- take_all from MUS3A, MUS3B, MUS3C, MUS3D, MUS11A, MUS11B, MUS14,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.A. Degree Music
- take_all from MUS3A, MUS3B, MUS4A, MUS4B, MUS1A, MUS1B, MUS6, MUS7, MUS16A, MUS21, MUS5A, MUS5B, MUS5C, MUS5D, MUS8A, MUS8B, MUS9B, MUS12,
- take at least n courses from
A.S.-T Degree Mathematics
- take_all from MATH1A, MATH 1B, MATH1C, MATH2, MATH2C,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.S. Degree Mathematics
- take_all from ENGR5, MATH1A, MATH 1B, MATH1C, MATH2, MATH2C,
- take at least n courses from MATH5, PHYS 4A, PHYS 4B, PHYS 4C,
- take at least n courses from
A.A. Degree Liberal Arts: Social Science Emphasis- Behavioral and Organizational Social Sciences
- take_all from PSYC2, CD2, JOUR10, SOC10, CD3, PSYC3, POLS6, CMUN6, PSYC6, PSYC7, CD7, BIO15, AH15, AJ10, AJ18, AH3, ECON1, ECON2, MATH5, MATH6, POLS1, POLS3, POLS4, PSYC10, PSYC11, SOC1A, SOC1B, SOC3, SOC 4, SOC21,
- take at least n courses from
A.A. Degree Liberal Arts: Social Science Emphasis- Cultural and Historical Sciences
- take_all from HIST12, HUM12, POLS6, CMUN6, PSYC6, ART21, HIST21, KIN6, CD6, ANTH1, ANTH2, ANTH3, ANTH5, ART10A, CD5, ECON1, ECON2, GEOG2, HIST1, HIST2, HIST3, HIST4A, HIST4B, HIST5, HIST 6, HIST7A, HIST7B, POLS1, SOC1A, SOC1B, SOC3, SOC 4,
- take at least n courses from
A.A. Degree Liberal Arts: Natural Science Emphasis
- take_all from BIO9, AH9, BIO8, AH8, BIO15, AH15, BIO 1, BIO4, BIO5, BIO7, BIO21, CHEM1A, CHEM1B, CHEM12A, CHEM12B, ECOL1, GEOL1, MATH1A, MATH 1B, MATH1C, MATH2, MATH2C, MATH5, MATH7, MATH8A, MATH8B, PHYS2A, PHYS2B, PHYS 4A, PHYS 4B, PHYS 4C,
- take at least n courses from
A.A. Degree Liberal Arts: Language Arts &amp; Humanities Emphasis
- take_all from SOC10, POLS6, CMUN6, PSYC6, CMUN129, CSIS129, THEA4, CMUN2, CMUN1A, CMUN4, CMUN5, CMUN8, CMUN10, PHIL1, PHIL2, PHIL3A, PHIL3B, PHIL4, PHIL6, PHIL9, ENGL1B, ENGL2B, ENGL2C, ENGL2E, ENGL2F, ENGL2J, ENGL4A, ENGL4B, ENGL5A, ENGL5B, ENGL9A, FRNH1A, FRNH1B, JPN1A, JPN1B, SPAN1A, SPAN1B, SPAN 12A, SPAN12B, JOUR16A, JOUR10,
- take at least n courses from
A.A. Degree Liberal Arts: Expressive Arts Emphasis
- take_all from ART25A, CD25A, ART25B, CD25B, THEA17B, MCTV17B, ART21, HIST21, DM74, CSIS74, DM76, CSIS76, DM 77, CSIS 77, DM80, CSIS80, DM 85, CSIS 85, DM110, CSIS110, DM114, CSIS114, DM117, CSIS117, THEA19, MCTV 19, MCTV 17A, THEA17A, ART1A, ART1B, ART6, MUS1A, MUS1B, THEA1, THEA3, THEA7, ART2A, ART3A, ART3B, ART8A, ART10A, ART12A, ART12B, ART13, ART14A, ART15A, ART15B, ART34A, ART34B, MUS4A, MUS4B, MUS5A, MUS5B, MUS5C, MUS5D, MUS8A, MUS8B, MUS8C, MUS8D, MUS9A, MUS9B, MUS12, THEA2A, THEA2B, THEA12A, THEA12B, THEA13A, THEA13B, THEA13C, THEA13C, THEA21, ART11,
- take at least n courses from
A.A. Degree Liberal Arts: Computer Science &amp; Information Systems Emphasis
- take_all from CSIS6, DM6, CSIS7, DM7, CSIS73, DM73, CSIS75, DM75, DM74, CSIS74, DM76, CSIS76, DM 77, CSIS 77, DM80, CSIS80, DM 85, CSIS 85, CD12, CSIS9, CSIS5, CSIS8, CSIS10, CSIS12, CSIS12L, CSIS18, CSIS18L, CSIS24, CSIS26, CSIS43, CSIS44, CSIS45, CSIS46, CSIS47, CSIS49, CSIS51, CSIS54, CSIS54L, CSIS84, DM113, DM114,
- take at least n courses from
A.A. Degree Liberal Arts: Business Emphasis
- take_all from CSIS2L, CSIS2, BUS11, ECON11, BUS1, ECON1, ECON2, ACCT20, ACCT21, BUS14, BUS80, CSIS 1, ECON1, ECON2,
- take at least n courses from
A.A. Degree Liberal Arts: Administration of Justice Emphasis
- take_all from POLS6, CMUN6, PSYC6, AJ10, AJ12, AJ14, AJ16, AJ18, AJ19, AJ20, AJ21, AJ32, AJ173, AJ176,
- take at least n courses from
A.A.-T Degree Journalism
- take_all from JOUR10, JOUR16A, JOUR18A, JOUR18B, ART8A, PHIL2, PHIL4, ENGL1C,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.S. Degree Health Science
- take_all from BIO9, AH9, BIO8, AH8, BIO15, AH15, AH 11, BIO11, AH3, CHEM1A, CHEM1B, CHEM30A, CHEM30B, BIO 1, BIO10, BIO7, MATH233, ECOL1, PSYC10,
- take at least n courses from
A.S.-T Degree Administration of Justice
- take at least n courses from AJ10, AJ14,
- take at least n courses from AJ12, AJ16, AJ18, AJ19, AJ20,
- take at least n courses from SOC1A, PSYC10, MATH5,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.A. Degree Law Enforcement, Option 1
- take_all from AJ10, AJ12, AJ14, AJ16, AJ18,
- take at least n courses from AJ5, AJ19, AJ20, AJ21, AJ32, AJ173, AJ176, AJ184,
- take at least n courses from
Certificate of Achievement Law Enforcement, Option 1
- take_all from AJ10, AJ12, AJ14, AJ16, AJ18,
- take at least n courses from AJ5, AJ19, AJ20, AJ21, AJ32, AJ173, AJ176, AJ184,
A.A. Degree Law Enforcement, Option 2
- take_all from JLE100, JLE142, JLE143, JLE 144, AJ100A,
- take at least n courses from AJ5, AJ20, AJ19, AJ21, AJ32, AJ173, AJ176, AJ184,
- take at least n courses from
A.S. Degree Registered Nursing
- take at least n courses from ENGL 1A, MATH240, AH8, BIO8, AH9, BIO9, MATH235, MATH 242, CMUN1A, SOC1A, AH51, AH52, AH53, AH54, AH16,
- take at least n courses from AH55, AH56,
- take at least n courses from
Certificate of Achievement Registered Nursing
- take at least n courses from AH8, BIO8, AH9, BIO9, ENGL 1A, CMUN1A, SOC1A, MATH235, MATH240, MATH 242, AH51, AH52, AH54, AH53, AH16,
- take at least n courses from AH55, AH56,
- take at least n courses from
Certificate of Achievement Registered Nursing 30 Unit Option
- take at least n courses from BIO9, AH9, BIO8, AH8, AH55, AH56,
Certificate of Proficiency Nursing Assistant
- take_all from AH 280,
Certificate of Proficiency Clinical Medical Assisting
- take_all from AH170, AH171,
A.A.-T Degree Studio Art
- take_all from ART2A, ART13, ART3A, ART1B,
- take at least n courses from ART1A,
- take at least n courses from ART15A, ART34A, ART10A, ART12A, ART8A,
- take_all from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.A.-T Degree Art History
- take at least n courses from ART3A, ART1A, ART1B,
- take at least n courses from ART21, HIST21,
- take at least n courses from ART13, ART2A, ART34A, ART10A, ART12A, ART8A,
- take at least n courses from ART2A, ART8A, ART10A, ART12A, ART13, ART34A,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.S. Degree Biological Science
- take_all from CHEM1A, CHEM1B, BIO 1, BIO4, BIO5, PHYS2A, PHYS2B,
- take at least n courses from BIO9, AH9, BIO8, AH8, BIO15, AH15, BIO7, BIO13, BIO21, ECOL1, MATH1A, MATH 1B,
- take at least n courses from
Certificate of Achievement Biotechnology
- take_all from BIOT103, BIOT104, BIO10, CHEM30A, CHEM30B,
A.A. Degree Accounting
- take at least n courses from CSIS12L, CSIS2, BOT 100, BUS 100, CSIS8, MATH402, MATH411, ACCT20, ACCT 103, CSIS 1, ECON1, BUS1, BOT 291A, BOT 291B, BOT 291C, ENGL250,
- take_all from CSIS 120, ACCT 120, CSIS121, ACCT121, ACCT20, BOT 212, CSIS128, ACCT105,
- take at least n courses from ACCT21, ACCT190, BUS80, CSIS122,
- take at least n courses from
Certificate of Achievement General Business
- take at least n courses from CSIS2L, CSIS2, BUS11, ECON11, ACCT20, ACCT21, ECON1, ECON2, MATH5,
- take at least n courses from BUS1, BUS80, MATH1A, MATH 1B, MATH1C, MATH2, MATH2C, MATH6, MATH7, MATH8A, MATH8B, ANTH3, HIST7A, HIST7B, PHIL2, PSYC10, SOC1A,
Certificate of Achievement School Age Child Care
- take_all from CD1, CD2, CD5, CD7, CD9, CD19,
- take_all from CD3, CD8A, CD 14A, CD 14B, CD31, CD97,
Certificate of Achievement Early Intervention Assistant
- take at least n courses from CD1, CD2, CD5, CD9, CD10, CD 13, CD19, CD35, CD36, CD160, CD190, CD 30A, CD 30B,
Certificate of Proficiency Child Development: Spanish Early Childhood Education
- take at least n courses from CD1, CD2, CD5, CD9, CD 13, CD160, CD 219,
Certificate of Proficiency Computer Hardware
- take at least n courses from CSIS181, CSIS182,
- take at least n courses from CSIS2L, CSIS2, CSIS122,
Certificate of Proficiency Introduction to Computer Networking
- take at least n courses from CSIS178, CSIS 179, CSIS183,
- take at least n courses from CSIS2L, CSIS48, CSIS181, MATH205,
A.S. Degree CSIS: Programming for the Internet
- take_all from CSIS6, DM6, CSIS7, DM7, CSIS75, DM75, DM 85, CSIS 85, CSIS51, CSIS54, CSIS54L, CSIS84, CSIS5, CSIS45, CSIS78,
- take at least n courses from MATH233,
- take at least n courses from
Certificate of Achievement CSIS: Programming for the Internet
- take_all from CSIS6, DM6, CSIS7, DM7, CSIS75, DM75, DM 85, CSIS 85, CSIS51, CSIS54, CSIS54L, CSIS84, CSIS5, CSIS45, CSIS78,
- take at least n courses from MATH233,
A.S. Degree Computer Networking
- take_all from CSIS48, CSIS178, CSIS 179, CSIS181, CSIS182, CSIS183,
- take at least n courses from
Certificate of Achievement Computer Networking
- take_all from CSIS48, CSIS178, CSIS 179, CSIS181, CSIS182, CSIS183,
A.S. Degree UNIX Operating System
- take_all from CSIS48, CSIS49, CSIS18, CSIS18L, CSIS45, CSIS5, CSIS24, CSIS46, CSIS54, CSIS54L,
- take at least n courses from
Certificate of Achievement UNIX Operating System
- take_all from CSIS48, CSIS49, CSIS18, CSIS18L, CSIS45, CSIS5, CSIS24, CSIS46, CSIS54, CSIS54L,
Certificate of Proficiency Esthetician
- take_all from COS220, COS221,
Certificate of Achievement Digital Design and Imaging
- take_all from CSIS75, DM75, DM 77, CSIS 77, DM107, CSIS107, DM76, CSIS76,
- take at least n courses from CSIS 85, DM 85, DM74, CSIS74, DM80, CSIS80,
Certificate of Achievement Interactive Media
- take_all from CSIS75, DM 75, DM 77, CSIS 77, DM107, CSIS107, DM76, CSIS76,
- take_all from DM6, CSIS6, CSIS42, CSIS45, CSIS84, DM160, CSIS160,
A.S.-T Degree Business Administration
- take_all from ACCT20, ACCT21, ECON1, ECON2, BUS80,
- take at least n courses from BUS11, ECON11, MATH5, MATH6, MATH7,
- take at least n courses from CSIS2, BUS1, BUS 100,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
Certificate of Achievement Child Development and Educational Studies
- take_all from CD1, CD2, CD 40, CD5, CD7, CD9, CD19,
- take at least n courses from CD4, CD5, CD7, CD10, CD12, CD 13, CD 15, CD16, CD17, CD18, CD 20, CD22, CD23, CD32, CD97, CD98,
A.S.-T Degree Physics
- take_all from PHYS 4A, PHYS 4B, PHYS 4C, MATH1A, MATH 1B, MATH1C,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.A.-T Degree Psychology
- take_all from MATH5, PSYC10, PSYC32,
- take at least n courses from BIO10, BIO12,
- take at least n courses from PSYC11,
- take at least n courses from PSYC 40, PSYC3,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.S.-T Degree Early Childhood Education
- take_all from CD 40, CD5, CD1, CD32, CD4, CD 30A, CD9, CD7,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.S.-T Degree Economics
- take_all from BUS11, ECON11, ECON1, ECON2, MATH5, MATH6, MATH1A,
- take at least n courses from MATH7, MATH 1B, ACCT20, ACCT21, CSIS2, BUS 100, CSIS51,
- take at least n courses from ECON14, MATH1C, MATH2, BUS14,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
Certificate of Achievement Law Enforcement, Option 2
- take_all from JLE100, JLE142, JLE143, JLE 144, AJ100A,
A.A.-T Degree Anthropology
- take_all from ANTH1, ANTH2, ANTH3,
- take at least n courses from MATH5,
- take at least n courses from BIO7, ANTH32, PSYC32,
- take at least n courses from ANTH1L, ANTH5, ANTH6, HIST4A, HIST4B, HIST12, MUS6, POLS3, POLS4, SOC1A, SOC1B, SOC3, SOC 4,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.S.-T Degree Biology
BIO 1, BIO4, BIO 2, BIO 1, BIO5, CHEM1A, CHEM1B, MATH1A, PHYS2A, PHYS2B, PHYS 4A, PHYS 4B,
- take at least n courses from
A.A.-T Degree History
- take_all from HIST1, HIST2,
- take at least n courses from HIST4A, HIST7A, HIST4B, HIST7B,
- take at least n courses from HIST3, HIST5, HIST 6, HIST12, HIST21, ART21,
- take at least n courses from ANTH3, ANTH5, ANTH6, ART1A, ART1B, MUS1A, MUS1B, POLS6, PSYC6, POLS9, SOC9, SOC1B, SOC3, SOC 4, THEA1,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
Certificate of Achievement Fire Science
- take_all from JFT17, JFT 8,
A.S. Degree Aviation Maintenance Technology
- take_all from AMT100, AMT101, AMT110, AMT111, AMT120, AMT121,
- take at least n courses from CSIS 1,
- take at least n courses from
A.S.-T Degree Computer Science
- take_all from CSIS5, CSIS45, CSIS24, CSIS46, CSIS27, CSIS28, CSIS26, MATH1A, MATH 1B, PHYS 4A, PHYS 4B,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.A. Degree Digital Media (with options)
- take_all from DM75, CSIS75, DM76, CSIS76, DM 77, CSIS 77, DM107, CSIS107,
- take at least n courses from DM 85, CSIS 85, DM74, CSIS74, DM80, CSIS80,
- take at least n courses from
- take at least n courses from DM60, DM61, DM113,
- take at least n courses from DM6, CSIS6, CSIS42, CSIS45, CSIS84, DM160, CSIS160,
- take at least n courses from
- take at least n courses from
A.S.-T Degree Chemistry
- take_all from CHEM1A, CHEM1B, CHEM12A, CHEM12B, PHYS 4A, PHYS 4B, MATH1A, MATH 1B,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.S. Degree Licensed Vocational Nursing
- take at least n courses from AH 11, BIO11, AH3, ENGL 1A, PSYC10, MATH240, BIO7, BIO9, BIO8, AH8, AH9, MATH 242, MATH235, AH 280, CMUN1A, SOC1A,
- take at least n courses from AH 51, AH 52, AH 53, AH 54,
- take at least n courses from
Certificate of Proficiency Home Health Aide
- take_all from AH 280, AH182,
Certificate of Achievement Aviation Maintenance Technology: Airframe
- take_all from AMT100, AMT101, AMT110, AMT111,
- take at least n courses from AMT190,
Certificate of Achievement Aviation Maintenance Technology
- take_all from AMT100, AMT101, AMT110, AMT111, AMT120, AMT121,
- take at least n courses from CSIS 1,
Certificate of Achievement Aviation Maintenance Technology: Powerplant
- take_all from AMT100, AMT101, AMT120, AMT121,
- take at least n courses from AMT190,
A.A.-T Degree Spanish
- take_all from SPAN1A, SPAN1B, SPAN2A, SPAN2B,
- take at least n courses from SPAN8A, ANTH3, SOC1A, CMUN4, SPAN8B,
- take at least n courses from SPAN 12A, SPAN12B, FRNH1A, FRNH1B,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.A. Degree Child Development
- take at least n courses from CD1, CD2, CD4, CD9, CD19, CD 20, CD32, CD5, CD7, CD 30A, CD 30B, CD 40,
- take at least n courses from
A.A. Degree Studio Art
- take_all from ART2A, ART3A, ART79, ART13,
- take at least n courses from ART21, HIST21, ART1A, ART1B,
- take at least n courses from ART3B, ART14A, ART15A, ART15B, ART34A, ART8A,
- take at least n courses from ART10A, ART12A, ART7A,
- take at least n courses from
Certificate of Achievement Communication Studies
- take at least n courses from CMUN129, CSIS129, THEA4, CMUN2, CMUN1A, CMUN4, CMUN5, CMUN8, CMUN10, CMUN 12, CMUN6,
Certificate of Proficiency Classical and Contemporary World Philosophies and Religions
- take at least n courses from PHIL1, PHIL3A, PHIL3B, PHIL6, PHIL9, PHIL23,
A.A.-T Degree Communication Studies
- take at least n courses from CMUN1A,
- take at least n courses from CMUN8, CMUN10,
- take at least n courses from THEA4, CMUN2, CMUN4, JOUR10, CMUN5,
- take at least n courses from ANTH3, ENGL1B, ENGL1C, PSYC10, SOC1A,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.A. Degree Liberal Arts: Elementary Education Emphasis
- take_all from PSYC2, CD2, ART25A, CD25A, CD3, PSYC3, PSYC7, CD7, KIN6, CD6, CD8A, CD8B, CD 14A, CD 14B, CD31, CD97, AJ20, AH3, ENGL2F, HIST3, MATH12, THEA2A, CD8C, CD 40, PSYC 40,
- take at least n courses from
A.A. Degree Wastewater Collection Technology Education
- take_all from WTRM 201, WTRM 202, WTRM 203, WTRM 204, WTRM 207, WTRM 213, WTRM 216,
- take at least n courses from WTRM 205, WTRM 206, WTRM 209, WTRM 210, WTRM 211, WTRM 212, WTRM 214, WTRM 215,
- take at least n courses from WTRM 218, WTRM 221, WTRM 232, WTRM 233, WTRM 234, WTRM235, WTRM 290, WTRM 217,
- take at least n courses from
A.A. Degree Wastewater Technology Education
- take_all from WTRM 201, WTRM 202, WTRM 203, WTRM 204, WTRM 207, WTRM 211, WTRM 213,
- take at least n courses from WTRM 209, WTRM 210, WTRM 212, WTRM 214, WTRM 215, WTRM 232,
- take at least n courses from WTRM 216, WTRM 218, WTRM 221, WTRM 233, WTRM 234, WTRM235, WTRM 290, WTRM 217,
- take at least n courses from
A.A. Degree Water Distribution Technology Education
- take_all from WTRM 201, WTRM 202, WTRM 203, WTRM 204, WTRM 205, WTRM 206, WTRM 232,
- take at least n courses from WTRM 207, WTRM 209, WTRM 210, WTRM 211, WTRM 212, WTRM 213, WTRM 214, WTRM 215,
- take at least n courses from WTRM 216, WTRM 218, WTRM 221, WTRM 233, WTRM 234, WTRM235, WTRM 290, WTRM 217,
- take at least n courses from
A.A. Degree Water Resource Management
- take_all from WTRM 201, WTRM 202, WTRM 203, WTRM 205, WTRM 206, WTRM 207,
- take at least n courses from WTRM 208, WTRM 209, WTRM 210, WTRM 211, WTRM 212, WTRM 213, WTRM 214, WTRM 215,
- take at least n courses from WTRM 204, WTRM 216, WTRM 217, WTRM 218, WTRM 219, WTRM 220, WTRM 221, WTRM 290, WTRM 233,
- take at least n courses from
A.A. Degree Water Technology Education
- take_all from WTRM 201, WTRM 202, WTRM 203, WTRM 204, WTRM 205, WTRM 206, WTRM 209,
- take at least n courses from WTRM 207, WTRM 210, WTRM 211, WTRM 212, WTRM 213, WTRM 214, WTRM 215, WTRM 232,
- take at least n courses from WTRM 216, WTRM 218, WTRM 221, WTRM 233, WTRM 234, WTRM235, WTRM 290, WTRM 217,
- take at least n courses from
A.A.-T Degree English
- take_all from ENGL1B, ENGL1C,
- take at least n courses from
- take at least n courses from ENGL5A, ENGL5B, ENGL4A, ENGL4B,
- take at least n courses from ENGL9A,
- take at least n courses from ENGL2C, ENGL2F, ENGL2J, HUM3, HUM4, JOUR16A, THEA4, ENGL2E, CMUN2,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
Certificate of Achievement HVAC - Heating, Ventilation and Air Conditioning
- take at least n courses from HVAC 201, HVAC 202, HVAC 203, HVAC 204, HVAC 205, HVAC 206,
A.S. Degree HVAC - Heating, Ventilation and Air Conditioning
- take at least n courses from HVAC 201, HVAC 202, HVAC 203, HVAC 204, HVAC 205, HVAC 206,
- take at least n courses from
A.A. Degree Liberal Arts: Multiple Subjects
- take_all from
- take at least n courses from ENGL1B, ENGL2B, ENGL2C, ENGL2E, ENGL2J, ENGL4A, ENGL4B, ENGL5A, ENGL5B, CMUN1A, CMUN2, CMUN8, CMUN10, CMUN5,
- take at least n courses from BIO9, AH9, BIO8, AH8, BIO15, AH15, AH 11, BIO11, ANTH1, BIO 1, BIO4, BIO5, BIO7, BIO10, ECOL1, ASTR1, CHEM1A, CHEM1B, CHEM12A, CHEM12B, CHEM30A, CHEM30B, GEOL1, GEOG1, PHYS 1, PHYS2A, PHYS2B, PHYS 4A, PHYS 4B, PHYS 4C, PSCI1, BIO13, BIO12,
- take at least n courses from PSYC2, CD2, JOUR10, SOC10, CD3, PSYC3, HIST12, HUM12, PSYC7, CD7, ANTH2, ANTH3, ANTH5, CMUN4, ECON1, ECON2, GEOG2, HIST1, HIST2, HIST3, HIST5, HIST 6, POLS1, POLS3, POLS4, PSYC10, SOC1A, SOC1B, SOC3, SOC 4, SOC21, PSYC 40, SJS 5,
- take at least n courses from ART21, HIST21, ART1B, ART11, PHIL1, PHIL2, PHIL3A, PHIL3B, PHIL4, PHIL6, PHIL9, HIST7A, HIST7B, HUM3, HUM4, HUM10, THEA1, SPAN1A, SPAN1B, SPAN2A, SPAN2B, SPAN 12A, SPAN12B, HIST4A, MUS6, MUS2, MUS4A, ART6, ART25A, ART3A,
- take at least n courses from CSIS 1, CSIS2, CSIS26,
- take at least n courses from
- take at least n courses from
A.A.-T Degree Elementary Teacher Education
- take_all from CD 40, BIO12, CHEM30A, PHYS 1, GEOL1, MATH12, CMUN1A, ENGL 1A, ENGL1B, GEOG1, HIST4A, HIST1, POLS1, CD8C, PSYC 40, BIO10, BIO15, GEOG2,
- take at least n courses from ENGL1C, PHIL4,
- take at least n courses from ART6, MUS15,
- take at least n courses from CD25A, ART25A, CD8A, MATH14,
NC-Cmptncy: NC Certificate of Competency ESL for Child Care
- take at least n courses from ESL 712, ESL 713,
Certificate of Achievement Digital Video and Animation
- take_all from CSIS75, DM75, DM 77, CSIS 77, DM107, CSIS107, DM76, CSIS76,
- take_all from DM60, DM61, DM113,
A.S. Degree Computer Programming
- take at least n courses from CSIS45, CSIS24, CSIS46, CSIS 27, CSIS26, CSIS42, CSIS48,
- take at least n courses from CSIS12, CSIS12L, CSIS28, CSIS24, CSIS45, CSIS51, CSIS49, CSIS44, CSIS5, CSIS42, CSIS54, CSIS54L, CSIS6, DM6, CSIS160, DM160, CSIS78, CSIS84,
- take at least n courses from
Certificate of Achievement Computer Programming
- take at least n courses from CSIS48, CSIS45, CSIS24, CSIS46, CSIS 27, CSIS26, CSIS42,
- take at least n courses from CSIS28, CSIS12, CSIS12L, CSIS24, CSIS45, CSIS51, CSIS49, CSIS44, CSIS5, CSIS42, CSIS54, CSIS54L, CSIS6, DM6, CSIS160, DM160, CSIS78, CSIS84,
NC-Cmptncy: NC Certificate of Competency ESL Citizenship
ESL702A, ESL702B,
A.A.-T Degree Kinesiology
- take_all from KIN2, BIO7, BIO9, KIN39, KIN83, KIN16A, KIN61A, KIN71A, KIN88A, KIN88B, KIN24A, KIN 44A, KIN66A, KIN66B, KIN24B, KIN 44B, KIN62A, KIN62B, KIN64A, KIN64B, KIN68A, KIN68B, KIN70A, KIN70B, KIN73A, KIN73B, KIN74A, KIN74B, KIN81A, KIN81B, KIN82A, KIN82B, KIN89A, KIN89B, KIN17A, KIN17B, KIN18A, KIN18B, KIN19A, KIN19B, KIN20A, KIN20B, KIN31A, KIN31B, KIN79A, KIN79B, KIN80A, KIN87, KIN121A, KIN121B, KIN125A, KIN125B, KIN127A, KIN127B, KIN137A, KIN137B, KIN165A, KIN165B, ATH77, ATH27, ATH25, ATH37, ATH21, MATH5, CHEM1A, CHEM30A, PHYS2A, PHYS 4A, AH 30,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
Certificate of Achievement Kinesiology and Athletics: Personal Fitness Training
- take at least n courses from
- take at least n courses from BIO15, AH15, KIN3, KIN 85, KIN84,
- take at least n courses from AH 11, HE1,
Certificate of Proficiency Welding Technology
- take at least n courses from WELD 201, WELD 202, WELD 203,
NC-Complet: NC Certificate of Completion Welding Technology
- take at least n courses from WELD 701, WELD 702, WELD 703,
NC-Cmptncy: NC Certificate of Competency ESL Lifeskills
- take at least n courses from ESL786, ESL787, ESL 789, ESL 788,
- take at least n courses from ESL775, ESL776, ESL784, ESL785,
NC-Complet: NC Certificate of Completion Vocational ESL
- take at least n courses from ESL704A, ESL704B,
Certificate of Proficiency ESL Advanced Level
- take at least n courses from ESL562, ESL563, ESL 564, ESL 569, ESL 564,
Certificate of Proficiency ESL Intermediate Level
- take at least n courses from ESL 541, ESL 542, ESL543, ESL547, ESL548, ESL 549, ESL 541,
NC-Complet: NC Certificate of Completion GED Preparation
- take at least n courses from ENGL 756, GUID700,
A.S.-T Degree Film, Television, and Electronic Media
- take_all from THEA20, HUM3, MCTV16, JOUR10,
- take at least n courses from MCTV6, THEA6,
- take at least n courses from HUM25, MCTV18, THEA18, MCTV 17A, THEA 17A,
- take at least n courses from
- take at least n courses from HUM4, HUM6, HUM10, MCTV 43, MCTV 19, THEA 19,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
A.A.-T Degree Philosophy
- take at least n courses from PHIL2, PHIL1, PHIL3A,
- take at least n courses from PHIL7A, PHIL7B, PHIL4,
- take at least n courses from HIST7A, HIST7B, PHIL3A, PHIL3B,
- take at least n courses from PHIL9, PHIL6, PHIL15, PHIL12,
- take at least n courses from
- take at least n courses from
- take at least n courses from
Certificate of Achievement Business: Accounting Option
- take at least n courses from CSIS 1, CSIS2,
- take at least n courses from ACCT 103, ACCT20, ACCT 120,
- take at least n courses from ACCT21, ACCT105, BUS1, BUS11, ECON11, MATH5, BUS14, ECON14, BUS80, BOT 100, BUS 100, CSIS128, CMUN 12, ECON1, ECON2, ACCT 120, CSIS 120, ACCT121, CSIS121, BOT 212, BOT 291A, BOT 291B, BOT 291C, CSIS 129, CMUN 129, CSIS 212, CSIS 126, CSIS122, CSIS75, DM 75, CSIS8, CSIS6, DM6, ACCT20,
Certificate of Achievement Business: Management Option
- take at least n courses from CSIS 1, CSIS2,
- take at least n courses from MKTG100, MGMT104, MGMT120, MGMT101,
- take at least n courses from BOT 291A, BOT 291B, BOT 291C, BUS1, BUS11, ECON11, MATH5, BUS80, BUS14, ECON14, BOT 100, BUS 100, CSIS8, CSIS128, CMUN 12, ECON1, ECON2, ACCT21, ACCT105, ACCT 120, CSIS 120, ACCT121, CSIS121, BOT 212, CSIS6, DM6, CSIS75, DM 75, CSIS122, CSIS 212, CSIS 126, CSIS 129, CMUN 129, ACCT20,
Certificate of Achievement Business: Medical Office Option
- take at least n courses from CSIS2, CSIS 1,
- take at least n courses from BOT180, BOT 281, BOT182, CSIS 126, BOT 283,
- take at least n courses from BOT 212, BOT 291A, BOT 291B, BOT 291C, CSIS122, CSIS 212, CSIS8, ACCT21, ACCT105, ACCT 120, CSIS 120, ACCT121, CSIS121, BOT 100, BUS 100, BUS1, BUS11, ECON11, MATH5, BUS14, ECON14, BUS80, CSIS6, DM6, CSIS75, DM 75, CSIS 126, CSIS128, CSIS 129, CMUN 129, CMUN 12, ECON1, ECON2, ACCT20,
Certificate of Achievement Business: Office Applications Option
- take at least n courses from CSIS 1, CSIS2,
- take at least n courses from CSIS121, CSIS122, CSIS 126, CSIS 129, CMUN 129, ACCT121,
- take at least n courses from BOT 212, BOT 291A, BOT 291B, BOT 291C, BOT 100, BUS 100, BUS80, CMUN 12, CSIS 120, ACCT 120, CSIS8, CSIS 212, DM 75, CSIS75, CSIS128, ACCT21, ACCT105, ACCT121, CSIS121, BUS1, BUS11, ECON11, MATH5, CSIS6, DM6, CSIS122, CSIS 126, CSIS 129, CMUN 129, ECON1, ECON2, BUS14, ECON14, ACCT20,
Certificate of Achievement Real Estate
- take_all from RE160, RE162,
- take at least n courses from BUS80, ACCT 103,
Certificate of Achievement Business: Technical Publishing Option
- take at least n courses from CSIS 1, CSIS2,
- take at least n courses from CSIS6, CSIS75, DM6, DM 75, CSIS 74, DM 74, CSIS76, DM76, CSIS80, DM80, CSIS 85, DM 85,
- take at least n courses from BOT 100, BUS 100, BOT 291A, BOT 291B, BOT 291C, CMUN 129, CSIS 129, CMUN 12, CSIS8, CSIS 212, CSIS122, ACCT21, ACCT105, ACCT 120, CSIS 120, ACCT121, CSIS121, BOT 212, BUS1, BUS11, ECON11, MATH5, BUS14, ECON14, BUS80, CSIS6, DM6, CSIS75, DM 75, CSIS 126, CSIS128, ECON1, ECON2, ACCT20,
A.A. Degree Business (with options)
- take at least n courses from CSIS 1, CSIS2,
- take at least n courses from
- take at least n courses from ACCT 120, CSIS 120, ACCT20, ACCT 103,
- take at least n courses from MGMT101, MGMT104, MKTG100, MGMT120,
- take at least n courses from BOT180, BOT 281, BOT182, CSIS 126, BOT 283,
- take at least n courses from CSIS121, CSIS 126, CSIS122, CSIS 129, CMUN 129, ACCT121,
- take at least n courses from CSIS6, DM6, CSIS75, DM 75, CSIS 74, DM 74, CSIS76, DM76, CSIS80, DM80, CSIS 85, DM 85,
- take at least n courses from BUS1, BUS80, ACCT21, ACCT105, ACCT 120, CSIS 120, ACCT121, CSIS121, BOT 212, BOT 291A, BOT 291B, BOT 291C, BOT 100, BUS 100, BUS11, ECON11, MATH5, BUS14, ECON14, CSIS6, DM6, CSIS8, CSIS75, DM 75, CSIS122, CSIS 212, CSIS 126, CSIS128, CSIS 129, CMUN 129, CMUN 12, ECON1, ECON2, ACCT20, CSIS 212,
- take at least n courses from
A.S.-T Degree Public Health Science
HE1, HE 5, MATH5, BIO10, CHEM1A, CHEM30A, PSYC10, BIO7, BIO9, ECON1, ECON2, BIO11, HE2, SOC1A,
- take at least n courses from
A.A. Degree Kinesiology
- take_all from KIN2, BIO15,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from HE1, KIN5, KIN 6, KIN8,
- take at least n courses from KIN7, KIN15, KIN7,
- take at least n courses from KIN3, KIN4A,
- take at least n courses from KIN84, KIN 85,
- take at least n courses from KIN3, KIN4A, KIN4B, KIN4C, KIN5, KIN6, KIN7, KIN8, KIN15, KIN84, KIN 85, HE1, BIO7, BIO9, BIO11, BUS80, KIN 92,
- take at least n courses from
A.S. Degree Engineering
- take at least n courses from ENGR 10, MATH1A, MATH 1B, MATH1C, PHYS 4A, PHYS 4B,
- take at least n courses from
- take at least n courses from ENGR5, CSIS45,
- take at least n courses from ENGR1, ENGR2, ENGR3, ENGR4,
- take at least n courses from CHEM1A, ENGR5, ENGR2, ENGR3, PHYS 4C, MATH2, MATH2C, CHEM1A, CSIS45, CHEM1B, ENGR3, PHYS 4C, MATH2, MATH2C, CHEM1A, ENGR5, ENGR2, PHYS 4C, CHEM1B, MATH2, MATH2C, CSIS45, CSIS46, MATH 16, ENGR3, PHYS 4C, MATH2, MATH2C, CHEM1A, ENGR5, ENGR2, ENGR3, CHEM1B, MATH2, MATH2C,
- take at least n courses from
A.A.-T Degree Sociology
- take_all from SOC1A, SOC1B, MATH5, SOC21, SOC3, SOC 4, SOC10,
- take at least n courses from
- take at least n courses from
NC-Complet: NC Certificate of Completion Computer Applications for ESL Students
- take at least n courses from ESL 707, ESL 709, ESL 710, ESL 705, ESL 706,
A.A.-T Degree Social Justice Studies
- take_all from SOC3, SJS 5, CMUN4, SOC1B,
- take at least n courses from
- take at least n courses from HIST12, HIST5, HIST 6, HUM12,
- take at least n courses from ENGL2B, ENGL2E, HIST4A, HIST4B, PHIL3B,
- take at least n courses from CMUN6, ANTH3, POLS6, PSYC6, SOC1B,
- take at least n courses from BUS11, MATH5, PSYC32,
- take at least n courses from SPAN2B, SPAN 12A,
- take at least n courses from
- take at least n courses from
NC-Cmptncy: NC Certificate of Competency ESL Intermediate II Level
- take at least n courses from ESL 741, ESL 742, ESL 743, ESL748, ESL747, ESL 749,
Certificate of Achievement Wastewater Collection Technology Education
- take_all from WTRM 202, WTRM 203, WTRM 204, WTRM 207, WTRM 213, WTRM 216, WTRM 201,
- take at least n courses from WTRM 205, WTRM 206, WTRM 209, WTRM 210, WTRM 211, WTRM 212, WTRM 214, WTRM 215,
- take at least n courses from WTRM 217, WTRM 218, WTRM 221, WTRM 232, WTRM 233, WTRM 234, WTRM235, WTRM 290,
Certificate of Achievement Wastewater Technology Education
- take_all from WTRM 201, WTRM 202, WTRM 203, WTRM 204, WTRM 207, WTRM 211, WTRM 213,
- take at least n courses from WTRM 209, WTRM 210, WTRM 212, WTRM 214, WTRM 215, WTRM 232,
- take at least n courses from WTRM 216, WTRM 217, WTRM 218, WTRM 221, WTRM 233, WTRM 234, WTRM235, WTRM 290,
Certificate of Achievement Water Distribution Technology Education
- take_all from WTRM 201, WTRM 202, WTRM 203, WTRM 204, WTRM 205, WTRM 206, WTRM 232,
- take at least n courses from WTRM 207, WTRM 209, WTRM 210, WTRM 211, WTRM 212, WTRM 213, WTRM 214, WTRM 215,
- take at least n courses from WTRM 216, WTRM 217, WTRM 218, WTRM 221, WTRM 233, WTRM 234, WTRM235, WTRM 290,
Certificate of Achievement Water Resource Management
- take_all from WTRM 201, WTRM 202, WTRM 203, WTRM 205, WTRM 206, WTRM 207,
- take at least n courses from WTRM 208, WTRM 209, WTRM 210, WTRM 211, WTRM 212, WTRM 213, WTRM 214, WTRM 215,
- take at least n courses from WTRM 204, WTRM 216, WTRM 217, WTRM 218, WTRM 219, WTRM 220, WTRM 221, WTRM 233, WTRM 290,
Certificate of Achievement Water Technology Education
- take_all from WTRM 201, WTRM 202, WTRM 203, WTRM 204, WTRM 205, WTRM 206, WTRM 209,
- take at least n courses from WTRM 207, WTRM 210, WTRM 211, WTRM 212, WTRM 213, WTRM 214, WTRM 215, WTRM 232,
- take at least n courses from WTRM 216, WTRM 218, WTRM 217, WTRM 221, WTRM 233, WTRM 234, WTRM235, WTRM 290,
A.A.-T Degree Political Science
- take_all from POLS1,
- take at least n courses from PSYC32, POLS32, POLS3, POLS4, POLS10, MATH5,
- take at least n courses from POLS5, POLS7, POLS 12,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
NC-Complet: NC Certificate of Completion Job Coaching
GUID 600, GUID 601,
NC-Complet: NC Certificate of Completion Workforce Preparation and Success
LIFE 700, LIFE 701,
Certificate of Achievement Construction Management
- take at least n courses from CMGT 101, CMGT 102, CMGT 103, CMGT 104, CMGT 105,
NC-Cmptncy: NC Certificate of Competency ESL Beginning Level
- take at least n courses from ESL 727, ESL 728,
NC-Cmptncy: NC Certificate of Competency ESL Intermediate I Level
- take at least n courses from ESL737, ESL738, ESL 731, ESL 739,
Certificate of Achievement Licensed Vocational Nursing
- take at least n courses from AH 71, AH 72, AH 73,
Certificate of Achievement Television Performance Option
- take at least n courses from THEA18, MCTV18, THEA16, MCTV16, THEA 17A, THEA6, THEA20, HUM25, MCTV6, THEA 19, THEA12A, THEA13A, MCTV 43,
Certificate of Achievement Film and Television Production
MCTV6, MCTV18, THEA20, MCTV 43, HUM25, MCTV16, MCTV 17A, MCTV 19, HUM3, HUM4, HUM6, HUM10,
Certificate of Achievement Cybersecurity
- take at least n courses from CSIS 179, CSIS 184, AJ184, CSIS 186, CSIS 187,
A.S.-T Degree Business Administration 2.0
- take at least n courses from ACCT20, ACCT21, ECON1, ECON2, BUS80,
- take at least n courses from MATH6, MATH7,
- take at least n courses from BUS11, ECON11, MATH5,
- take at least n courses from BUS1, BUS 100, BOT 100,
- take at least n courses from
- take at least n courses from
- take at least n courses from
- take at least n courses from
NC-Complet: NC Certificate of Completion Small Business Development
- take_all from BUS 700, BUS 701,
NC-Cmptncy: NC Certificate of Competency ESL Advanced Level
- take at least n courses from ESL 763, ESL 762, ESL 764, ESL 769,
Certificate of Achievement California State University (CSU) General Education Pattern
- take at least n courses from CMUN1A, CMUN5, CMUN8, CMUN10, ENGL 1A, PHIL2, PHIL4, ENGL1C, CMUN 3,
- take at least n courses from BIO9, BIO8, BIO15, AH15, BUS11, ECON11, ASTR1, CHEM1A, CHEM1B, CHEM12A, CHEM12B, CHEM30A, CHEM30B, GEOG1, GEOL1, PHYS 1, PHYS2A, PHYS2B, PHYS 4A, PHYS 4B, PHYS 4C, PSCI1, PSCI2, ANTH1, BIO 1, BIO4, BIO5, BIO7, BIO10, BIO12, BIO13, ECOL1, BUS14, MATH1A, MATH 1B, MATH1C, MATH2, MATH2C, MATH5, MATH6, MATH7, MATH8A, MATH8B, MATH12, MATH14, ANTH1L, ENVS1, MATH 11, BIO 2, MATH 16, ECON14,
- take at least n courses from JOUR10, SOC10, ART25A, CD25A, HIST12, ART21, HIST21, THEA4, CMUN2, ART1A, ART1B, ART2A, ART3A, ART6, ART8A, ART10A, ART13, HUM6, HUM10, MUS1A, MUS1B, MUS3A, MUS4A, MUS6, THEA1, THEA3, THEA7, THEA12A, THEA20, ART11, ENGL1B, ENGL2B, ENGL2C, ENGL2E, ENGL2F, ENGL2J, ENGL4A, ENGL4B, ENGL5A, ENGL5B, ENGL9A, ENGL9B, FRNH1A, FRNH1B, HIST1, HIST3, HIST4A, HIST4B, HIST5, HIST 6, HIST7A, HIST7B, HUM3, HUM4, HUM10, JPN1A, JPN1B, PHIL1, PHIL3A, PHIL3B, PHIL6, PHIL9, SPAN1A, SPAN1B, SPAN2A, SPAN2B, SPAN 12A, SPAN12B, ART14A, DM60, MUS2, THEA25, THEA26, MCTV16, CHN1A, CHN1B, PHIL7A, PHIL7B, PHIL12, PHIL15, FRNH 2A, FRNH 2B, ART 4,
- take at least n courses from PSYC2, CD2, JOUR10, SOC10, CD3, PSYC3, AJ5, POLS5, HIST12, POLS6, CMUN6, PSYC6, PSYC7, CD7, HIST1, HIST2, POLS1, ANTH2, ANTH3, ANTH5, ECON1, ECON2, CMUN4, SOC3, HIST5, HIST 6, SOC 4, GEOG2, HIST1, HIST2, HIST3, HIST4A, HIST4B, HIST5, HIST 6, ANTH6, CMUN4, POLS1, POLS3, POLS4, PSYC10, PSYC11, SOC1A, SOC1B, SOC3, SOC 4, AJ10, ANTH32, CD 40, POLS10, POLS12, POLS32, PHIL12, PSYC 40, PSYC32, SJS 5, HE 5, SOC 25, ETHN 3B, ECON 10, ETHN 12, HIST 10, ETHN 10B, ANTH 10, ETHN 10A, ENGL 2L, ETHN 2L, ENGL 2R, ETHN 2R, ETHN 1, ETHN 2,
- take at least n courses from AH 11, GUID1, AH3, GUID6, HE1, HE2, SOC21, KIN8, KIN1, GUID27, HE 92, KIN 92,
- take at least n courses from ETHN 3B, ETHN 10B,
Certificate of Proficiency Peer Education Leadership - Basic
- take at least n courses from GUID52, PSYC52, GUID 28, ENGL12A,
Certificate of Proficiency Peer Education Leadership - Advanced
- take at least n courses from GUID52, PSYC52, GUID 28, ENGL12A,
- take at least n courses from ENGL 12, ENGL12C, ENGL12D, CMUN1A, CMUN4, CMUN6, POLS6, PSYC6, CMUN8, CMUN10,
A.A. Degree Communication Studies
- take at least n courses from CMUN1A, CMUN4, CMUN8, CMUN10, PSYC10,
- take_all from JOUR10, SOC10, POLS6, CMUN6, PSYC6, GUID27, CMUN5, PHIL4, ANTH3, SOC1A, SOC21, SOC 4,
- take at least n courses from
Certificate of Achievement Communication Studies: Interpersonal Communication
- take at least n courses from POLS6, CMUN6, PSYC6, GUID27, CMUN5, CMUN8, PSYC10, SOC1A, CMUN 12,
Certificate of Achievement Cosmetology
- take_all from COS200, COS201, COS202,
A.S. Degree Cosmetology
- take_all from COS200, COS201, COS202,
- take at least n courses from
Certificate of Achievement Intersegmental General Education Transfer Curriculum (IGETC)
- take at least n courses from ENGL 1A, ENGL1C, PHIL4, CMUN1A, CMUN5, CMUN8, CMUN10,
- take at least n courses from BUS11, ECON11, MATH1A, MATH 1B, MATH1C, MATH2, MATH2C, MATH5, MATH6, MATH7, MATH8A, MATH8B, MATH14, MATH 11, MATH 16,
- take at least n courses from ART21, HIST21, ART1A, ART1B, ART6, HUM6, MUS1A, MUS1B, MUS6, THEA1, THEA3, THEA7, ENGL1B, ENGL2B, ENGL2C, ENGL2E, ENGL2F, ENGL2J, ENGL4A, ENGL4B, ENGL5A, ENGL5B, HIST1, HIST2, HIST3, HIST4A, HIST4B, HIST5, HIST 6, HIST7A, HIST7B, HUM3, HUM4, HUM10, PHIL1, PHIL3A, PHIL3B, PHIL6, PHIL9, SPAN2A, SPAN2B, MUS2, MUS6, MCTV16, PHIL7A, PHIL7B, PHIL15, PHIL12, ART 4, FRNH 2A, FRNH 2B, MUS15, ENGL 2L, ETHN 2L,
- take at least n courses from PSYC2, CD2, JOUR10, SOC10, CD3, PSYC3, AJ5, POLS5, HIST12, ANTH2, ANTH3, ANTH5, ANTH6, CMUN4, ECON1, ECON2, GEOG2, HIST1, HIST2, HIST3, HIST4A, HIST4B, HIST5, HIST 6, POLS1, POLS3, POLS4, PSYC10, PSYC11, SOC1A, SOC1B, SOC3, SOC 4, AJ10, ANTH32, POLS7, POLS10, POLS32, PSYC32, PSYC 40, SJS 5, SOC 25, CD 40, ECON 10, ETHN 12, ANTH 10, ETHN 10A, ENGL 2L, ETHN 2, ENGL 2R, ETHN 2R, ETHN 1, ETHN 2, HIST 10, ETHN 10B, ETHN 12, ETHN 3B,
- take at least n courses from BIO9, BIO8, BIO15, AH15, ASTR1, CHEM1A, CHEM1B, CHEM12A, CHEM12B, CHEM30A, CHEM30B, GEOG1, GEOL1, PSCI1, PSCI2, PHYS 1, PHYS2A, PHYS2B, PHYS 4A, PHYS 4B, PHYS 4C, ANTH1, BIO 1, BIO4, BIO5, BIO7, BIO10, BIO12, BIO13, ECOL1, ANTH1L, ENVS1, BIO 2,
- take at least n courses from FRNH1B, JPN1B, SPAN1B, SPAN2A, SPAN2B, SPAN 12A, SPAN12B, CHN1B, FRNH 2A, FRNH 2B,
- take at least n courses from

View File

@ -6,7 +6,10 @@ aiomysql==0.2.0
aiosignal==1.3.1 aiosignal==1.3.1
annotated-types==0.6.0 annotated-types==0.6.0
annoy==1.17.3 annoy==1.17.3
anyio==4.3.0
arrow==1.3.0 arrow==1.3.0
asciimatics==1.15.0
asttokens==2.4.1
async-timeout==4.0.3 async-timeout==4.0.3
asyncpg==0.29.0 asyncpg==0.29.0
attrs==23.2.0 attrs==23.2.0
@ -34,12 +37,15 @@ cssselect==1.2.0
cycler==0.12.1 cycler==0.12.1
cymem==2.0.8 cymem==2.0.8
dateparser==1.2.0 dateparser==1.2.0
decorator==5.1.1
deepdiff==6.7.1 deepdiff==6.7.1
distro==1.9.0
dm-tree==0.1.8 dm-tree==0.1.8
docxcompose==1.4.0 docxcompose==1.4.0
docxtpl==0.16.7 docxtpl==0.16.7
durable-rules==2.0.28 durable-rules==2.0.28
et-xmlfile==1.1.0 et-xmlfile==1.1.0
executing==2.0.1
filelock==3.13.1 filelock==3.13.1
Flask==3.0.1 Flask==3.0.1
Flask-SocketIO==5.3.6 Flask-SocketIO==5.3.6
@ -60,16 +66,21 @@ h11==0.14.0
h5py==3.10.0 h5py==3.10.0
html2markdown==0.1.7 html2markdown==0.1.7
htmldate==1.7.0 htmldate==1.7.0
httpcore==1.0.4
httplib2==0.22.0 httplib2==0.22.0
httpx==0.27.0
huggingface-hub==0.20.3 huggingface-hub==0.20.3
hyperlink==21.0.0 hyperlink==21.0.0
ics==0.7.2 ics==0.7.2
idna==3.6 idna==3.6
incremental==22.10.0 incremental==22.10.0
iniconfig==2.0.0
instructure-dap-client==0.3.18 instructure-dap-client==0.3.18
ipython==8.22.1
itemadapter==0.8.0 itemadapter==0.8.0
itemloaders==1.1.0 itemloaders==1.1.0
itsdangerous==2.1.2 itsdangerous==2.1.2
jedi==0.19.1
Jinja2==3.1.3 Jinja2==3.1.3
jmespath==1.0.1 jmespath==1.0.1
joblib==1.3.2 joblib==1.3.2
@ -90,6 +101,7 @@ markdown-it-py==3.0.0
markdownify==0.11.6 markdownify==0.11.6
MarkupSafe==2.1.5 MarkupSafe==2.1.5
matplotlib==3.8.2 matplotlib==3.8.2
matplotlib-inline==0.1.6
mdit-py-plugins==0.4.0 mdit-py-plugins==0.4.0
mdurl==0.1.2 mdurl==0.1.2
minizinc==0.9.0 minizinc==0.9.0
@ -101,6 +113,7 @@ networkx==3.2.1
nltk==3.8.1 nltk==3.8.1
numpy==1.26.3 numpy==1.26.3
oauthlib==3.2.2 oauthlib==3.2.2
openai==1.12.0
openpyxl==3.1.2 openpyxl==3.1.2
ordered-set==4.1.0 ordered-set==4.1.0
orjson==3.9.12 orjson==3.9.12
@ -111,6 +124,7 @@ pampy==0.3.0
pandas==2.2.0 pandas==2.2.0
paramiko==3.4.0 paramiko==3.4.0
parsel==1.8.1 parsel==1.8.1
parso==0.8.3
path-dict==4.0.0 path-dict==4.0.0
pathlib==1.0.1 pathlib==1.0.1
patsy==0.5.6 patsy==0.5.6
@ -119,10 +133,13 @@ pdfminer.six==20231228
piexif==1.1.3 piexif==1.1.3
pillow==10.2.0 pillow==10.2.0
plotly==5.18.0 plotly==5.18.0
pluggy==1.4.0
preshed==3.0.9 preshed==3.0.9
prompt-toolkit==3.0.43
Protego==0.3.0 Protego==0.3.0
protobuf==4.25.2 protobuf==4.25.2
psycopg2==2.9.9 psycopg2==2.9.9
pure-eval==0.2.2
pyarrow==15.0.0 pyarrow==15.0.0
pyasn1==0.5.1 pyasn1==0.5.1
pyasn1-modules==0.3.0 pyasn1-modules==0.3.0
@ -131,6 +148,7 @@ pycryptodome==3.20.0
pydantic==2.6.1 pydantic==2.6.1
pydantic_core==2.16.2 pydantic_core==2.16.2
PyDispatcher==2.0.7 PyDispatcher==2.0.7
pyfiglet==1.0.2
pygame==2.5.2 pygame==2.5.2
Pygments==2.17.2 Pygments==2.17.2
PyJWT==2.8.0 PyJWT==2.8.0
@ -142,6 +160,7 @@ pyparsing==3.1.1
PyPDF2==3.0.1 PyPDF2==3.0.1
pysftp==0.2.9 pysftp==0.2.9
PySocks==1.7.1 PySocks==1.7.1
pytest==8.0.1
python-dateutil==2.8.2 python-dateutil==2.8.2
python-docx==1.1.0 python-docx==1.1.0
python-engineio==4.8.2 python-engineio==4.8.2
@ -158,6 +177,7 @@ requests-file==2.0.0
requests-oauthlib==1.3.1 requests-oauthlib==1.3.1
rich==13.7.0 rich==13.7.0
rpds-py==0.17.1 rpds-py==0.17.1
rpy2==3.5.15
rsa==4.9 rsa==4.9
safetensors==0.4.2 safetensors==0.4.2
schedule==1.2.1 schedule==1.2.1
@ -180,6 +200,7 @@ spacy-legacy==3.0.12
spacy-loggers==1.0.5 spacy-loggers==1.0.5
SQLAlchemy==2.0.25 SQLAlchemy==2.0.25
srsly==2.4.8 srsly==2.4.8
stack-data==0.6.3
statsmodels==0.14.1 statsmodels==0.14.1
striprtf==0.0.26 striprtf==0.0.26
sympy==1.12 sympy==1.12
@ -198,6 +219,7 @@ toolz==0.12.1
torch==2.2.0 torch==2.2.0
tqdm==4.66.1 tqdm==4.66.1
trafilatura==1.7.0 trafilatura==1.7.0
traitlets==5.14.1
transformers==4.37.2 transformers==4.37.2
trio==0.24.0 trio==0.24.0
trio-websocket==0.11.1 trio-websocket==0.11.1
@ -214,6 +236,7 @@ uritemplate==4.1.1
urllib3==2.2.0 urllib3==2.2.0
w3lib==2.1.2 w3lib==2.1.2
wasabi==1.1.2 wasabi==1.1.2
wcwidth==0.2.13
weasel==0.3.4 weasel==0.3.4
Werkzeug==3.0.1 Werkzeug==3.0.1
Whoosh==2.7.4 Whoosh==2.7.4

View File

@ -1,7 +1,10 @@
# Try to gather all the different formats and ways of labeling a semester, along with their associated dates.
import json import json
sem_to_short = { 'Summer 2021': 'su21', 'Fall 2021':'fa21', 'Winter 2022':'wi22', 'Spring 2022':'sp22', 'Summer 2022':'su22', 'Fall 2022':'fa22' }
standard = ['Fall 2024', 'Summer 2024', 'Spring 2024', 'Winter 2024', standard = ['Fall 2024', 'Summer 2024', 'Spring 2024', 'Winter 2024',
'Fall 2023', 'Summer 2023', 'Spring 2023', 'Winter 2023', 'Fall 2023', 'Summer 2023', 'Spring 2023', 'Winter 2023',
'Fall 2022', 'Summer 2022', 'Spring 2022', 'Winter 2022', 'Fall 2022', 'Summer 2022', 'Spring 2022', 'Winter 2022',
@ -27,6 +30,7 @@ canvas_label = []
semester_list = {} semester_list = {}
season_to_number = { 'Fall': '70', 'Summer': '50', 'Spring': '30', 'Winter': '10'} season_to_number = { 'Fall': '70', 'Summer': '50', 'Spring': '30', 'Winter': '10'}
s_to_n = {'sp':'30','su':'50','fa':'70'}
for s in list(zip(standard,code,begin)): for s in list(zip(standard,code,begin)):
season,year = s[0].split(' ') season,year = s[0].split(' ')
@ -38,13 +42,10 @@ for s in list(zip(standard,code,begin)):
semester_list[cl] = sem_record semester_list[cl] = sem_record
# TODO remove original in localcache.py # Given 'fa22' return 202270
def to_sis_sem(s): def to_sis_sem(s):
season = s[0:2] season = s[0:2]
year = "20" + s[2:5] return "20" + s[2:5] + s_to_n[season]
a = {'sp':'30','su':'50','fa':'70'}
season = a[season]
return year+season

348
tasks.py
View File

@ -14,12 +14,13 @@
""" """
import pysftp, os, datetime, requests, re, json, sqlite3, codecs, csv, sys import pysftp, os, datetime, requests, re, json, sqlite3, codecs, csv, sys
import funcy, os.path, shutil, urllib import funcy, os.path, datetime, calendar, time, shutil, urllib
from datetime import datetime from datetime import datetime
from collections import defaultdict from collections import defaultdict
#from datetime import strptime from time import gmtime, strftime
from time import mktime from time import mktime
from semesters import sem_to_short
from canvas_secrets import badgr_target, badgr_hd from canvas_secrets import badgr_target, badgr_hd
@ -1044,211 +1045,18 @@ def cmtes():
sem_to_short = { 'Summer 2021': 'su21', 'Fall 2021':'fa21', 'Winter 2022':'wi22', 'Spring 2022':'sp22', 'Summer 2022':'su22', 'Fall 2022':'fa22' }
def strip(x): return x.strip()
def esc_comma(x): return re.sub(',','[CMA]',x) ###
###
def by_sem(x): return x['sem'] ### CALENDAR RELATED FUNCTIONS
###
def parse_schedule():
# "Course Code","Start Date","End Date",Term,Delivery,CRN,Status,"Course Name",
# 8 "Course Description","Units/Credit hours","Instructor Last Name",
# 11 "Instructor First Name",Campus/College,"Meeting Days and Times",
# 14 "Pass/No Pass available?","Class Capacity","Available Seats","Waitlist Capacity",
# 18 "Current Waitlist Length","Meeting Locations","Course Notes",ZTC 21
oo = codecs.open('cache/fa20_section_notes.txt','w','utf-8')
pp = codecs.open('cache/fa20_section_summary.txt','w','utf-8')
u0 = "https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=get/sections"
existing_sections = json.loads( requests.get(u0).text )
existing_sections = funcy.group_by(by_sem,existing_sections)
by_sem_crn = {}
for sem,sects in existing_sections.items():
for s in sects:
new_key = sem + '_' + s['crn']
by_sem_crn[new_key] = s
#print(json.dumps(by_sem_crn,indent=2))
mt = open('cache/missed_instructors.txt','w')
teacher_cache = {}
count = 0
stopat = 20000
u1 = "https://www.gavilan.edu/_files/php/current_schedule.csv"
with requests.Session() as s:
download = s.get(u1)
decoded_content = download.content.decode('utf-8')
cr = csv.reader(decoded_content.splitlines(), delimiter=',')
my_list = list(cr)
#for row in my_list:
# print(row)
for row in my_list:
row = list(map(strip,row))
row = list(map(esc_comma,row))
if row[3] in sem_to_short:
row[3] = sem_to_short[row[3]]
if row[20]:
oo.write("%s - %s \n" % (row[0], row[20]))
summary = "%s %s %s %s \t %s %s\t %s" % (row[4], row[11],row[10],row[6], row[5], row[0], row[7])
pp.write(summary + "\n")
# cancelled?
status = row[6]
if status != "Active": continue
# ignore if exists? TODO check if i need to update it
this_sem_crn = row[3] + '_' + row[5]
if this_sem_crn in by_sem_crn:
print("\t...already uploaded...skipping %s" % this_sem_crn)
continue
if count >0 and count<stopat:
t_name = "%s %s" % (row[11],row[10])
if t_name in teacher_cache:
r = {'sched_alias':1, 'id': teacher_cache[t_name]}
else:
u2 = "https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=get/instructor/name"
p2 = {'inst': t_name }
print("\tSearching for teacher: %s" % t_name )
r2 = requests.post(u2, data=p2)
r = json.loads(r2.text)
if r and 'id' in r: teacher_cache[t_name] = r['id']
if not r:
print("\tCouldn't locate teacher: %s %s" % (row[11],row[10]))
u2 = "https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=get/instructor/fuzzyname"
p2 = {'inst': row[11] + " % " + row[10] }
print("\tFuzzy search for teacher: " + row[11] + " % " + row[10])
r2 = requests.post(u2, data=p2)
r = json.loads(r2.text)
if r and 'id' in r: teacher_cache[t_name] = r['id']
if r and 'sched_alias' in r:
row[10] = r['id']
#print("\tfound teacher: " + str(r))
payload = { 'cols':'code,start_date,end_date,sem,delivery,crn,status,name,descr,units,teacher_id,days,pnp,location,note,ztc',
'vals': u','.join( [ row[j] for j in [0,1,2,3,4,5,6,7,8,9,10,13,14,19,20,21] ] ) }
#print(json.dumps(payload,indent=2))
#print()
r3 = requests.post("https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=add/section", params=payload)
result = json.loads(r3.text)
if result and 'err' in result and result['err']:
print("\n*** Problem? --> %s" % result['err'] )
mt.write("*** Problem? --> %s\n" % result['err'] )
else:
print("*** Still Couldn't locate teacher: %s %s" % (row[11],row[10]))
mt.write("Couldn't locate teacher: %s %s\n" % (row[11],row[10]))
print()
count += 1
# TODO some weird hour offset issue w/ these activities
def cal():
from ics import Calendar
u1 = "https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=get/sessions"
gav_activities = json.loads( requests.get(u1).text )
g_by_uid = {}
for g in gav_activities:
print("\t" + str(g['cal_uid']))
if g['cal_uid']:
g_by_uid[ g['cal_uid'] ] = g
for g in gav_activities:
pass
#print(g)
#return
print(g_by_uid)
url = "https://calendar.google.com/calendar/ical/4aq36obt0q5jjr5p82p244qs7c%40group.calendar.google.com/public/basic.ics"
# the plwc cal
url = "https://calendar.google.com/calendar/ical/if2r74sfiitva2ko9chn2v9qso%40group.calendar.google.com/public/basic.ics"
c = Calendar(requests.get(url).text)
for e in list(c.timeline):
#print(e)
#print()
print(e.name)
#continue
if not str(e.uid) in g_by_uid.keys():
year = str(e.begin)
year = year[:4]
if not year == "2021": continue
print("Not in conf_sessions db: \n\t%s\n\t%s" % ( e.name, e.begin ))
addit = input("Do you want to add it? (y/n) ")
if addit=='y':
payload = { 'title':str(e.name) , 'length': 1, 'starttime':str(e.begin) ,
'desc': str(e.description),
'type':220, 'location':str(e.location) , 'cal_uid':str(e.uid) }
print(json.dumps(payload,indent=2))
print()
r = requests.post("https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=set/newsession", data=payload)
print("RESPONSE --> ")
print(r.text)
#print("\t%s" % e.uid)
#print("\t%s\n\t%s\n\t%s\n\t%s\n" % ( str(e.begin), e.description, e.location, str(e.last_modified)))
#c
# <Calendar with 118 events and 0 todo>
#print(c.events)
# {<Event 'Visite de "Fab Bike"' begin:2016-06-21T15:00:00+00:00 end:2016-06-21T17:00:00+00:00>,
# <Event 'Le lundi de l'embarqué: Adventure in Espressif Non OS SDK edition' begin:2018-02-19T17:00:00+00:00 end:2018-02-19T22:00:00+00:00>,
# ...}
#e = list(c.timeline)[0]
#print("Event '{}' started {}".format(e.name, e.begin.humanize()))
def file_renamer():
where = 'cache/picsStaffdir/cropped/'
ff = os.listdir(where)
for F in ff:
nn = re.sub("\.jpg$","",F)
print("Old name: %s. New name: %s" % (F, nn))
os.rename( where+F, where+nn )
print("ok")
def list_auth():
r = fetch( url + '/api/v1/accounts/1/authentication_providers')
print(json.dumps(r,indent=2))
def update_auth():
#r = fetch( url + '/api/v1/accounts/1/authentication_providers')
u = url + '/api/v1/accounts/1/authentication_providers/104'
opt = {"metadata_uri": r'https://eis-prod.ec.gavilan.edu/saml/idp-metadataxxx.xml'}
r2 = requests.put(u, headers=header, data=opt)
print ( r2.text )
#print(json.dumps(r,indent=2))
def print_a_calendar(): def print_a_calendar():
import datetime year = 2024
cur_week = datetime.date.today().isocalendar()[1] cur_week = datetime.date.today().isocalendar()[1]
print(f"Current week number: {cur_week}") print(f"Current week number: {cur_week}")
import time
from time import gmtime, strftime
#d = time.strptime("3 Jul 2023", "%d %b %Y")
#print(strftime(d, '%U'))
import calendar
# Specify the year
year = 2023
if 0: if 0:
# Create a calendar for the entire year # Create a calendar for the entire year
@ -1361,6 +1169,92 @@ def word_calendar():
doc.save('cache/tasks_schedule.docx') doc.save('cache/tasks_schedule.docx')
# TODO some weird hour offset issue w/ these activities
def cal():
from ics import Calendar
u1 = "https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=get/sessions"
gav_activities = json.loads( requests.get(u1).text )
g_by_uid = {}
for g in gav_activities:
print("\t" + str(g['cal_uid']))
if g['cal_uid']:
g_by_uid[ g['cal_uid'] ] = g
for g in gav_activities:
pass
#print(g)
#return
print(g_by_uid)
url = "https://calendar.google.com/calendar/ical/4aq36obt0q5jjr5p82p244qs7c%40group.calendar.google.com/public/basic.ics"
# the plwc cal
url = "https://calendar.google.com/calendar/ical/if2r74sfiitva2ko9chn2v9qso%40group.calendar.google.com/public/basic.ics"
c = Calendar(requests.get(url).text)
for e in list(c.timeline):
#print(e)
#print()
print(e.name)
#continue
if not str(e.uid) in g_by_uid.keys():
year = str(e.begin)
year = year[:4]
if not year == "2021": continue
print("Not in conf_sessions db: \n\t%s\n\t%s" % ( e.name, e.begin ))
addit = input("Do you want to add it? (y/n) ")
if addit=='y':
payload = { 'title':str(e.name) , 'length': 1, 'starttime':str(e.begin) ,
'desc': str(e.description),
'type':220, 'location':str(e.location) , 'cal_uid':str(e.uid) }
print(json.dumps(payload,indent=2))
print()
r = requests.post("https://hhh.gavilan.edu/phowell/map/dir_api_tester.php?a=set/newsession", data=payload)
print("RESPONSE --> ")
print(r.text)
#print("\t%s" % e.uid)
#print("\t%s\n\t%s\n\t%s\n\t%s\n" % ( str(e.begin), e.description, e.location, str(e.last_modified)))
#c
# <Calendar with 118 events and 0 todo>
#print(c.events)
# {<Event 'Visite de "Fab Bike"' begin:2016-06-21T15:00:00+00:00 end:2016-06-21T17:00:00+00:00>,
# <Event 'Le lundi de l'embarqué: Adventure in Espressif Non OS SDK edition' begin:2018-02-19T17:00:00+00:00 end:2018-02-19T22:00:00+00:00>,
# ...}
#e = list(c.timeline)[0]
#print("Event '{}' started {}".format(e.name, e.begin.humanize()))
def file_renamer():
where = 'cache/picsStaffdir/cropped/'
ff = os.listdir(where)
for F in ff:
nn = re.sub("\.jpg$","",F)
print("Old name: %s. New name: %s" % (F, nn))
os.rename( where+F, where+nn )
print("ok")
# Use api to fix ilearn's authentication method when we can't log in. List.
def list_auth():
r = fetch( url + '/api/v1/accounts/1/authentication_providers')
print(json.dumps(r,indent=2))
# Use api to fix ilearn's authentication method when we can't log in. Modify.
def update_auth():
#r = fetch( url + '/api/v1/accounts/1/authentication_providers')
u = url + '/api/v1/accounts/1/authentication_providers/104'
opt = {"metadata_uri": r'https://eis-prod.ec.gavilan.edu/saml/idp-metadataxxx.xml'}
r2 = requests.put(u, headers=header, data=opt)
print ( r2.text )
#print(json.dumps(r,indent=2))
if __name__ == "__main__": if __name__ == "__main__":
@ -1372,13 +1266,15 @@ if __name__ == "__main__":
6: ['fetch calendar events to conf_sessions db',cal] , 6: ['fetch calendar events to conf_sessions db',cal] ,
7: ['job titles workings....',job_titles2] , 7: ['job titles workings....',job_titles2] ,
8: ['collate all profile pics for db',index_pics] , 8: ['collate all profile pics for db',index_pics] ,
9: ['process schedule csv file from web',parse_schedule] , #9: ['process schedule csv file from web',parse_schedule] ,
10: ['dumb rename images mistake',file_renamer] , 10: ['dumb rename images mistake',file_renamer] ,
11: ['list auth', list_auth], 11: ['list auth', list_auth],
12: ['update auth', update_auth], 12: ['update auth', update_auth],
13: ['print a calendar', print_a_calendar], 13: ['print a calendar', print_a_calendar],
14: ['create a week calendar in word', word_calendar], 14: ['create a week calendar in word', word_calendar],
15: ['create GOTT certificates', certificates_gott_build], 15: ['create GOTT certificates', certificates_gott_build],
20: ['build_quiz', build_quiz],
21: ['certificates_gott_build, certificates_gott_build']
} }
if len(sys.argv) > 1 and re.search(r'^\d+',sys.argv[1]): if len(sys.argv) > 1 and re.search(r'^\d+',sys.argv[1]):
@ -1400,8 +1296,6 @@ if __name__ == "__main__":
################################ ################################
if 0:
pass
if (0): if (0):
out = open('cache/badgr.txt','w') out = open('cache/badgr.txt','w')
@ -1415,51 +1309,3 @@ if __name__ == "__main__":
auth = json.loads(open('cache/badgr.txt','r').read()) auth = json.loads(open('cache/badgr.txt','r').read())
print ( auth ) print ( auth )
if (0):
mail_test()
if (0):
build_quiz()
if (0):
certificates_gott_build()
#if (0):
# blueprint_semester()
"""
1 Default Term
6 Professional Development
7 Committees
8 Practice Courses
9 Miscellaneous
24 OEI Courses
27 Prof Dev Drafts
169 Library
170 Incompletes
172 2021 Fall
171 2021 Summer
168 2021 Spring
167 Accreditation
65 2020 Fall
64 2020 Summer
62 2020 Spring
63 2020 Winter
61 2019 Fall
60 2019 Summer
25 2019 Spring
26 2019 Winter
23 2018 Fall
22 2018 Summer
21 2018 Spring
18 2017 Fall
14 2017 Summer
15 2017 Early Start Summer
10 2017 Spring (Practice)
11 2017 Spring
"""

View File

@ -5,6 +5,9 @@
import re, csv import re, csv
from collections import defaultdict from collections import defaultdict
from bs4 import BeautifulSoup as bs from bs4 import BeautifulSoup as bs
import pytz, datetime, dateutil, json
from time import timedelta
from dateutil import tz
@ -134,12 +137,12 @@ def how_long_ago(a): # number of hours ago 'a' was...
def partition(times_list): def partition(times_list):
# get a list of times in this format: 2017-02-14T17:01:46Z # get a list of times in this format: 2017-02-14T17:01:46Z
# and break them into a list of sessions, [start, hits, minutes] # and break them into a list of sessions, [start, hits, minutes]
minutes_till_new_session = 26
global dd global dd
mm = ['x','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] mm = ['x','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
start = "" start = ""
last = "" last = ""
hits = 0 hits = 0
minutes_till_new_session = 26
delta = timedelta(minutes=26) delta = timedelta(minutes=26)
HERE = tz.tzlocal() HERE = tz.tzlocal()
sessions = [] sessions = []