def main(): import time t = time.strftime('%X %x %Z') log_message('package_local.py started at ' + str(t)) msg = 'package local completed' ret = package_local() if ret == -1: msg = 'package local failed' log_message('package_local.py returned ' + str(ret)) print msg
def cleanup_local(course): log_message('cleanup_local enter') target_file_name = course['CourseFileName'] target_file_name = os.path.join(TARGET_BASE, target_file_name) if os.path.isfile(target_file_name): os.remove(target_file_name) else: print target_file_name, ' does not exist ' log_message('cleanup_local exit') return True
def cleanup_local(course): log_message('cleanup_local enter') target_file_name = course['CourseFileName'] target_file_name = os.path.join(TARGET_BASE, target_file_name) if os.path.isfile(target_file_name): os.remove(target_file_name) else: print target_file_name, ' does not exist ' log_message('cleanup_local exit') return True
def main(): import time t = time.strftime('%X %x %Z') log_message('package_local.py started at ' + str(t)) msg = 'package local completed' ret = package_local() if ret == -1: msg = 'package local failed' log_message('package_local.py returned ' + str(ret)) print msg
def copy_remote_to_local(): log_message('copy_remote_to_local enter') ret = -1 student_id = read_student_id() if student_id: local_paths = get_local_course_paths(student_id) remote_paths = get_remote_course_paths(student_id) if local_paths and remote_paths: ret = copy_files(remote_paths, local_paths) log_message('copy_remote_to_local exit') return ret
def find_my_dir_path(): log_message('find_my_dir_path enter') file_path = sys.argv[0] log_message('sys.argv[0] file_path ' + file_path) if os.path.islink(file_path): file_path = os.readlink(file_path) file_path = os.path.realpath(file_path) log_message('sys.argv[0] real file_path ' + file_path) dir_path = os.path.dirname(file_path) log_message('dir_path ' + dir_path) log_message('find_my_dir_path exit') return dir_path
def get_relative_file_paths_in_dir(dir_path): log_message('get_relative_file_paths_in_dir enter') relative_file_paths = [] for root, dirs, files in os.walk(dir_path): rel_root = root.replace(dir_path, '') if rel_root and len(rel_root) > 0: if rel_root[0] == '/': rel_root = rel_root[1:] if rel_root: for file_ in files: relative_file_path = os.path.join(rel_root, file_) # log_message('get_relative_file_paths_in_dir adding relative_file_path=' + str(relative_file_path)) relative_file_paths.append(relative_file_path) log_message('get_relative_file_paths_in_dir exit') return relative_file_paths
def get_relative_file_paths_in_dir(dir_path): log_message('get_relative_file_paths_in_dir enter') relative_file_paths = [] for root, dirs, files in os.walk(dir_path): rel_root = root.replace(dir_path, '') if rel_root and len(rel_root) > 0: if rel_root[0] == '/': rel_root = rel_root[1:] if rel_root: for file_ in files: relative_file_path = os.path.join(rel_root, file_) # log_message('get_relative_file_paths_in_dir adding relative_file_path=' + str(relative_file_path)) relative_file_paths.append(relative_file_path) log_message('get_relative_file_paths_in_dir exit') return relative_file_paths
def package_local(): log_message('package_local enter') # cleanup for packagename in COURSE_PACKAGES: course = COURSE_PACKAGES[packagename] cleanup_local(course) create_tmp() copy_common_tmp() for packagename in COURSE_PACKAGES: course = COURSE_PACKAGES[packagename] cleanup_local(course) copy_course_tmp(course) package_tmp(course) cleanup_course_tmp(course) cleanup_tmp() log_message('package_local exit') return 0
def package_local(): log_message('package_local enter') # cleanup for packagename in COURSE_PACKAGES: course = COURSE_PACKAGES[packagename] cleanup_local(course) create_tmp() copy_common_tmp() for packagename in COURSE_PACKAGES: course = COURSE_PACKAGES[packagename] cleanup_local(course) copy_course_tmp(course) package_tmp(course) cleanup_course_tmp(course) cleanup_tmp() log_message('package_local exit') return 0
def copy_common_tmp(): log_message('copy_common_tmp enter') files_to_copy = [] target_dirs = [] files_to_copy.append(SCRIPTS_BASE) target_dirs.append(os.path.join(TARGET_TEMP_UPDATES, TARGET_SCRIPTS_BASE)) files_to_copy.append(CONFIG_BASE) target_dirs.append(os.path.join(TARGET_TEMP_UPDATES, TARGET_CONFIG_BASE)) for i in range(len(files_to_copy)): file_to_copy = files_to_copy[i] target_dir = target_dirs[i] pdir = os.path.dirname(target_dir) mkdirs(pdir) shutil.copytree(file_to_copy, target_dir) os.chdir(TARGET_TEMP_UPDATES) os.system('ln -s scripts/update_course.py "Classroom Updates"') os.system('chmod u+x "Classroom Updates"') log_message('copy_common_tmp enter')
def copy_common_tmp(): log_message('copy_common_tmp enter') files_to_copy = [] target_dirs = [] files_to_copy.append(SCRIPTS_BASE) target_dirs.append(os.path.join(TARGET_TEMP_UPDATES, TARGET_SCRIPTS_BASE)) files_to_copy.append(CONFIG_BASE) target_dirs.append(os.path.join(TARGET_TEMP_UPDATES, TARGET_CONFIG_BASE)) for i in range(len(files_to_copy)): file_to_copy = files_to_copy[i] target_dir = target_dirs[i] pdir = os.path.dirname(target_dir) mkdirs(pdir) shutil.copytree(file_to_copy, target_dir) os.chdir(TARGET_TEMP_UPDATES) os.system('ln -s scripts/update_course.py "Classroom Updates"') os.system('chmod u+x "Classroom Updates"') log_message('copy_common_tmp enter')
def close_all_running_instances(): log_message('close_all_running_instances enter') proc = subprocess.Popen(['ps', '-ef'], stdin=subprocess.PIPE, \ stdout=subprocess.PIPE, stderr=subprocess.STDOUT) line = proc.stdout.readline() success = True while True: if not line or line == '': break if re.search("libreoffice", line): success = False request_close_libreoffice() break line = proc.stdout.readline() proc.stdin.close() proc.stdout.close() if success: do_actual_remove_odt_files() log_message('close_all_running_instances exit')
def internet_on(): log_message('internet_on enter') ret = 0 try: response = urllib2.urlopen('https://www.dropbox.com', timeout=4) log_message("internet_on response " + str(response)) except: ret = -1 log_message('internet_on failed!') log_error() log_message('internet_on exit') return ret
def close_all_running_instances(): log_message('close_all_running_instances enter') proc = subprocess.Popen(['ps', '-ef'], stdin=subprocess.PIPE, \ stdout=subprocess.PIPE, stderr=subprocess.STDOUT) line = proc.stdout.readline() success = True while True: if not line or line == '': break if re.search("libreoffice", line): success = False request_close_libreoffice() break line = proc.stdout.readline() proc.stdin.close() proc.stdout.close() if success: do_actual_remove_odt_files() log_message('close_all_running_instances exit')
def copy_course_tmp(course): log_message('copy_tmp enter') files_to_copy = [] target_dirs = [] coursename = course['CourseName'] coursecontents = course['CourseContent'] for contentkey in coursecontents: contents = coursecontents[contentkey] for content in contents: content_path = os.path.join(COURSES_BASE, coursename, contentkey, content) files_to_copy.append(content_path) target_dirs.append(os.path.join(TARGET_TEMP_UPDATES, TARGET_COURSES_BASE, coursename, contentkey, content)) for i in range(len(files_to_copy)): file_to_copy = files_to_copy[i] target_dir = target_dirs[i] pdir = os.path.dirname(target_dir) mkdirs(pdir) shutil.copytree(file_to_copy, target_dir) log_message('copy_tmp exit') return True
def main(): import time t = time.strftime('%X %x %Z') log_message('submit_course.py started at ' + str(t)) msg = 'submit course completed successfully' ret = 0 # ret = internet_on() if ret == -1: msg = 'submit course failed (no internet connection)' else: ret = 0 # ret = restart_dropbox() if ret == -1: msg = 'submit course failed (cannot sync)' else: ret = copy_local_to_remote() if ret == -1: msg = 'submit course failed (cannot copy)' log_message('submit_course.py returned ' + str(ret)) gui = TinkerAcademyMessage(msg) gui.show()
def get_local_course_paths(student_id): log_message('get_local_course_paths enter') log_message('get_local_course_paths student_id='+str(student_id)) local_base_file_path = BASE_LOCAL local_course_paths = get_course_paths(local_base_file_path, student_id) log_message('get_local_course_paths exit') return local_course_paths
def get_remote_course_paths(student_id): log_message('get_remote_course_paths enter') log_message('get_remote_course_paths student_id='+str(student_id)) remote_base_file_path = BASE_REMOTE remote_course_paths = get_course_paths(remote_base_file_path, student_id) log_message('get_remote_course_paths exit') return remote_course_paths
def main(): import time t = time.strftime('%X %x %Z') log_message('update_course.py started at ' + str(t)) msg = 'update course completed' ret = 0 # ret = internet_on() if ret == -1: msg = 'update course failed (no internet connection)' else: ret = 0 # ret = restart_dropbox() if ret == -1: msg = 'update course failed (cannot sync)' else: ret = copy_remote_to_local() if ret == -1: msg = 'update course failed (cannot copy)' log_message('update_course.py returned ' + str(ret)) gui = TinkerAcademyMessage(msg) gui.show() run_post_update_hook()
def do_actual_remove_odt_files(): student_id = read_student_id() local_path = BASE_LOCAL relative_file_paths = get_relative_file_paths_in_dir(local_path) rm_file_list = [] for relative_file_path in relative_file_paths: if os.path.splitext(relative_file_path)[1].lower() == '.odt': file_path = os.path.join(local_path, relative_file_path) dir_path = os.path.dirname(file_path) file_paths = os.listdir(dir_path) for file_path in file_paths: if re.search("\.\~lock\..*\.odt\#", file_path): full_file_path = os.path.join(dir_path, file_path) rm_file_list.append(full_file_path) for rm_file in rm_file_list: log_message(' removing file ' + rm_file) subprocess.call(['rm', '-rf', rm_file]) msg = 'No files had to be fixed! You can restart LibreOffice now.' if len(rm_file_list) > 0: msg = str(len(rm_file_list)) + ' files had to be fixed!. You can restart LibreOffice now.' gui = TinkerAcademyMessage(msg) gui.show()
def copy_course_tmp(course): log_message('copy_tmp enter') files_to_copy = [] target_dirs = [] coursename = course['CourseName'] coursecontents = course['CourseContent'] for contentkey in coursecontents: contents = coursecontents[contentkey] for content in contents: content_path = os.path.join(COURSES_BASE, coursename, contentkey, content) files_to_copy.append(content_path) target_dirs.append( os.path.join(TARGET_TEMP_UPDATES, TARGET_COURSES_BASE, coursename, contentkey, content)) for i in range(len(files_to_copy)): file_to_copy = files_to_copy[i] target_dir = target_dirs[i] pdir = os.path.dirname(target_dir) mkdirs(pdir) shutil.copytree(file_to_copy, target_dir) log_message('copy_tmp exit') return True
def do_actual_remove_odt_files(): student_id = read_student_id() local_path = BASE_LOCAL relative_file_paths = get_relative_file_paths_in_dir(local_path) rm_file_list = [] for relative_file_path in relative_file_paths: if os.path.splitext(relative_file_path)[1].lower() == '.odt': file_path = os.path.join(local_path, relative_file_path) dir_path = os.path.dirname(file_path) file_paths = os.listdir(dir_path) for file_path in file_paths: if re.search("\.\~lock\..*\.odt\#", file_path): full_file_path = os.path.join(dir_path, file_path) rm_file_list.append(full_file_path) for rm_file in rm_file_list: log_message(' removing file ' + rm_file) subprocess.call(['rm', '-rf', rm_file]) msg = 'No files had to be fixed! You can restart LibreOffice now.' if len(rm_file_list) > 0: msg = str( len(rm_file_list) ) + ' files had to be fixed!. You can restart LibreOffice now.' gui = TinkerAcademyMessage(msg) gui.show()
def reset_minecraft(): log_message('reset_minecraft enter') try: subprocess.call(['rm', '-rf', '/home/student/.minecraft']) msg = 'Minecraft reset successfully' gui = TinkerAcademyMessage(msg) gui.show() except: log_message('reset_minecraft failed!') log_error() log_message('reset_minecraft exit')
def reset_minecraft(): log_message('reset_minecraft enter') try: subprocess.call(['rm', '-rf', '/home/tinkeracademystudent/.minecraft']) msg = 'Minecraft reset successfully' gui = TinkerAcademyMessage(msg) gui.show() except: log_message('reset_minecraft failed!') log_error() log_message('reset_minecraft exit')
def copy_local_to_remote(): log_message('copy_local_to_remote enter') ret = -1 student_id = read_student_id() log_message('copy_local_to_remote student_id=' + str(student_id)) if student_id: local_paths = get_local_course_paths(student_id) remote_paths = get_remote_course_paths(student_id) if local_paths and remote_paths: ret = copy_files(local_paths, remote_paths) log_message('copy_local_to_remote exit') return ret
def restart_dropbox(): log_message('restart_dropbox enter') ret = 0 try: subprocess.call(['dropbox', 'stop']) subprocess.call(['dropbox', 'start']) except: ret = -1 log_message('restart_dropbox failed!') log_error() log_message('restart_dropbox exit') return ret
def reset_submit(): log_message('reset_submit enter') try: remote_student_path = get_remote_student_path() subprocess.call(['rm', '-rf', remote_student_path]) msg = 'Run Course Submit Again after a few minutes!' gui = TinkerAcademyMessage(msg) gui.show() except: log_message('reset_submit failed!') log_error() log_message('reset_submit exit')
def reset_submit(): log_message('reset_submit enter') try: student_id = read_student_id() remote_student_path = get_remote_student_path(student_id) subprocess.call(['rm', '-rf', remote_student_path]) msg = 'Run Course Submit Again after a few minutes!' gui = TinkerAcademyMessage(msg) gui.show() except: log_message('reset_submit failed!') log_error() log_message('reset_submit exit')
def main(): import time t = time.strftime('%X %x %Z') log_message('reset_submit.py started at ' + str(t)) msg = 'Are you sure you want to reset Course Submit?' check_reset_submit(msg)
def check_reset_submit(msg): log_message('check_reset_submit enter') gui = TinkerAcademyConfirmDialog(msg, confirm_files_saved_and_closed) gui.show()
def confirm_files_saved_and_closed(): log_message('confirm_files_saved_and_closed enter') msg = 'Have you saved all files and closed all applications?' gui = TinkerAcademyConfirmDialog(msg, reset_submit) gui.show()
def create_tmp(): log_message('create_tmp enter') mkdirs(TARGET_TEMP_BASE) log_message('create_tmp exit')
def main(): import time t = time.strftime('%X %x %Z') log_message('reset_minecraft.py started at ' + str(t)) msg = 'Are you sure you want to reset Minecraft?' check_reset_minecraft(msg)
def main(): import time t = time.strftime('%X %x %Z') log_message('reset_submit.py started at ' + str(t)) msg = 'Are you sure you want to reset Course Submit?' check_reset_submit(msg)
def main(): for file_ in FIX_IT_FILES: log_message('fix_it ' + str(file_)) subprocess.call(['python', file_])
def create_tmp(): log_message('create_tmp enter') mkdirs(TARGET_TEMP_BASE) log_message('create_tmp exit')
def confirm_fix_odt_files(): log_message('confirm_fix_odt_files enter') msg = 'Do you need to fix any of the quiz files?' gui = TinkerAcademyConfirmDialog(msg, remove_locks_on_odt_files) gui.show() log_message('confirm_fix_odt_files exit')
def confirm_fix_odt_files(): log_message('confirm_fix_odt_files enter') msg = 'Do you need to fix any of the quiz files?' gui = TinkerAcademyConfirmDialog(msg, remove_locks_on_odt_files) gui.show() log_message('confirm_fix_odt_files exit')
def check_reset_minecraft(msg): log_message('check_reset_minecraft enter') gui = TinkerAcademyConfirmDialog(msg, reset_minecraft) gui.show()
def confirm_files_saved_and_closed(): log_message('confirm_files_saved_and_closed enter') msg = 'Have you saved all files and closed all applications?' gui = TinkerAcademyConfirmDialog(msg, reset_submit) gui.show()
def check_reset_minecraft(msg): log_message('check_reset_minecraft enter') gui = TinkerAcademyConfirmDialog(msg, reset_minecraft) gui.show()
def check_reset_submit(msg): log_message('check_reset_submit enter') gui = TinkerAcademyConfirmDialog(msg, confirm_files_saved_and_closed) gui.show()
def main(): import time t = time.strftime('%X %x %Z') log_message('reset_minecraft.py started at ' + str(t)) msg = 'Are you sure you want to reset Minecraft?' check_reset_minecraft(msg)
def update_submit(): log_message('update_submit enter') try: student_id = read_student_id() log_message('update_submit student_id='+str(student_id)) if student_id: log_message('update_submit processing, student_id='+str(student_id)) other_remote_student_paths = get_other_remote_student_paths(student_id) remote_student_path = get_remote_student_path(student_id) subprocess.call(['dropbox', 'exclude', 'remove', remote_student_path]) for other_remote_student_path in other_remote_student_paths: subprocess.call(['dropbox', 'exclude', 'add', other_remote_student_path]) else: log_message('update_submit skipping, invalid student_id='+str(student_id)) except: log_message('update_submit failed!') log_error() log_message('update_submit exit')
def main(): for file_ in FIX_IT_FILES: log_message('fix_it ' + str(file_)) subprocess.call(['python', file_])