def output_cohorts_info(obj, format_string, path): from psmdlsyncer.sql import MoodleDBSession from psmdlsyncer.php import ModUserEnrollments from psmdlsyncer.sql import MoodleDBSession from psmdlsyncer.models.datastores.moodle import MoodleTree moodle = MoodleTree() moodle.process() m = MoodleDBSession() mod = ModUserEnrollments() if path is None: import sys output_func = sys.stdout.write else: output_func = path.write format_string += '\n' for idnumber, username, cohort in m.get_cohorts_with_username(): if cohort: if moodle.teachers.get_from_attribute('username', username): output_func(format_string.format(idnumber=idnumber, cohort=cohort, username=username))
def portfolios_by_class(obj, file_): output_list = [] from psmdlsyncer.models.datastores.autosend import AutoSendTree from psmdlsyncer.models.datastores.moodle import MoodleTree import re autosend = AutoSendTree() moodle = MoodleTree() autosend.process() moodle.process() for student_key in autosend.students.get_keys(): student = autosend.students.get_key(student_key) m_student = moodle.students.get_key(student_key) if student.homeroom == "1DB" or student.grade in [4, 5]: item = type("Student", (), {}) f = re.sub('[^a-z]', '', student.first.lower()) item.firstname = student.first item.lastname = student.last item.student_id = student.idnumber item.name = student.first + ' ' + student.last item.homeroom = student.homeroom item.teacher_email = student.homeroom_teacher.email item.student_email = student.email item.slug = f + item.student_id item.blog_url = 'http://portfolios.ssis-suzhou.net/' + item.slug output_list.append([item.name, item.homeroom, item.blog_url]) output_list.sort(key=lambda x: x[1]) for line in output_list: file_.write("\t".join(line) + '\n')
def output_portfolios(obj, file_): from psmdlsyncer.models.datastores.autosend import AutoSendTree from psmdlsyncer.models.datastores.moodle import MoodleTree import re from cli.portfolio_commands import portfolio_commands autosend = AutoSendTree() moodle = MoodleTree() autosend.process() moodle.process() # firstname student_id homeroom email #import_list = [ ('Adam', '99999', '5UK', '*****@*****.**') ] for student_key in autosend.students.get_keys(): # Use moodle's info student = moodle.students.get_key(student_key) if not student: continue #if student.grade in [4, 5]: if student.homeroom == "1DB": item = type("Student", (), {}) f = re.sub('[^a-z]', '', student.first.lower()) item.firstname = student.first item.student_id = student.idnumber item.homeroom = student.homeroom item.teacher_email = '*****@*****.**' item.student_email = student.email item.slug = f + item.student_id file_.write('# {}:\n'.format(item.slug)) for command in portfolio_commands.split('\n'): file_.write(command.format(item) + '\n')
def dragonnet_user(which, subbranch=None, attribute=None, value=None, **kwargs): """ Check out the information that is provided by PowerSchool and compare that to Moodle """ click.echo("Hi there, starting up our syncing software (patience is a virtue).") if which.lower() == 'autosend': from psmdlsyncer.models.datastores.autosend import AutoSendTree autosend = AutoSendTree() moodle = None elif which.lower() == 'moodle': from psmdlsyncer.models.datastores.moodle import MoodleTree moodle = MoodleTree() autosend = None elif which.lower() == 'both': from psmdlsyncer.models.datastores.autosend import AutoSendTree from psmdlsyncer.models.datastores.moodle import MoodleTree moodle = MoodleTree() autosend = AutoSendTree() click.echo('Begin processing...') autosend.process() if autosend else None moodle.process() if moodle else None click.echo('...done processing.') if not subbranch: subbranch = click.prompt("Enter subbranch are looking for: ", default='students') if not attribute: attribute = click.prompt("Enter the attribute you are looking for: ", default="idnumber") if not value: value = click.prompt("Enter the value you are looking for: ") autosend_item = getattr(autosend, subbranch).get_from_attribute(attribute, value) if autosend else None moodle_item = getattr(moodle, subbranch).get_from_attribute(attribute, value) if moodle else None click.echo(autosend_item.output(indent=4, add={'branch':'autosend'})) if autosend_item else None click.echo(moodle_item.output(indent=4, add={'branch':'moodle'})) if moodle_item else None
def launch(obj, inspect=False, output=None, analyze=False, teachersonly=False, studentsonly=False): """ Launch syncer stuff """ import socket hostname = socket.gethostname() if 'dragonnet' in hostname: from psmdlsyncer.models.datastores.moodle import MoodleTree from psmdlsyncer.models.datastores.autosend import AutoSendTree from psmdlsyncer.syncing.templates import MoodleTemplate from psmdlsyncer.syncing.differences import DetermineChanges # To get the groups right we need to process AutosendTree first and send it over to Moodle right = AutoSendTree() right.process() left = MoodleTree() #left.groups.section_maps = {v:k for k, v in right.groups.section_maps.items()} # items become the keys left.process() d = DetermineChanges(left, right, MoodleTemplate, teachersonly, studentsonly) if output: for item in d.subtract(): output.write(str(item)) output.write('\n') exit() if inspect: from IPython import embed embed() exit() if analyze: keys = list(left.groups.section_maps.keys) print(keys) from IPython import embed;embed() ss = [k for k in keys if left.groups.get_key(k).idnumber.endswith('S')] for s in ss: swa = s + 'WA1' swas1 = [k for k in keys if swa in keys[k]] print(swas1) swa = s + 'WA2' swas2 = [k for k in keys if swa in keys[k]] print(swas2) exit() d.go() elif 'student' in hostname: from psmdlsyncer.models.datastores.autosend import AutoSendTree autosend = AutoSendTree() autosend.process() autosend.build_automagic_emails(make_new_students=True) autosend.output_all_aliases() autosend.run_newaliases() else: print("Can't run, is the hostname wrong?")
def update_portfolios(obj, file_): from psmdlsyncer.models.datastores.autosend import AutoSendTree from psmdlsyncer.models.datastores.moodle import MoodleTree import re from cli.portfolio_commands import portfolio_commands autosend = AutoSendTree() moodle = MoodleTree() autosend.process() moodle.process() # firstname student_id homeroom email #import_list = [ ('Adam', '99999', '5UK', '*****@*****.**') ] for student_key in autosend.students.get_keys(): student = autosend.students.get_key(student_key) m_student = moodle.students.get_key(student_key) if student.homeroom == "1DB" or student.grade in ["4", "5"]: file_.write('wp --path=/var/www/portfolios user update {0.email} --first_name=\'{0.first}\' --last_name=\'{0.last}\' --display_name=\'{0.first}\'\n'.format(student))
from psmdlsyncer.php import CallPHP from psmdlsyncer.db.MoodleDB import GroupsMember as Member import datetime from psmdlsyncer.db import DBSession from psmdlsyncer.sql import MoodleDBSession from sqlalchemy import and_ test = False really = not test if __name__ == "__main__": moodle = MoodleTree() autosend = AutoSendTree() moodle.process() autosend.process() sql = MoodleDBSession() db = MoodleDBSession() Group = db.table_string_to_class('groups') User = db.table_string_to_class('user') Enrol = db.table_string_to_class('user_enrolments') php = CallPHP() renames = defaultdict(list) for student in moodle.students.get_objects(): other = autosend.students.get_key(student.idnumber) if not other: