def handle_file_single(self, file_elem): orig_name = file_elem.find('.//NAME').text if orig_name is None: return #nikoloup #Get actual filename for filename in self.zipfile.namelist(): if filename.find(orig_name[1:])!=-1 and filename.find('.xml')==-1: moodle_fname = filename break try: moodle_fname except NameError: moodle_fname = orig_name parts = moodle_fname.split('/') moodle_fname = parts[len(parts)-1] parts1 = moodle_fname.split('__') parts2 = moodle_fname.split('.') moodle_fname = parts1[0] + '.' + parts2[len(parts2)-1] fixed_name = utils.fix_filename(moodle_fname, '') fname = fixed_name #.encode('utf-8') #fixed_name = moodle_fname #if utils.only_roman_chars(fixed_name): self.reference = fname
def handle_file(self, file_elem): orig_name = file_elem.find('.//NAME').text if orig_name is None: return #nikoloup #Get actual filename for filename in self.zipfile.namelist(): if filename.find(orig_name[1:])!=-1 and filename.find('.xml')==-1: moodle_fname = filename break try: moodle_fname except NameError: moodle_fname = orig_name parts = moodle_fname.split('/') moodle_fname = parts[len(parts)-1] parts1 = moodle_fname.split('__') parts2 = moodle_fname.split('.') moodle_fname = parts1[0] + '.' + parts2[len(parts2)-1] fixed_name = utils.fix_filename(moodle_fname, '') #end fname = urllib2.quote(fixed_name.encode('utf-8')) link_name = file_elem.find('.//LINKNAME').attrib['value'] f_link = '<a href = "$@FILEPHP@$/%s" title = %s>' % ((fname,) * 2) f_link = 'Attached File: ' + f_link + '%s</a>' % link_name self.alltext = '<br /><br />'.join([self.alltext, f_link])
def create_moodle_zip(blackboard_zip_fname, out_name): try: shutil.rmtree('elixer_tmp') shutil.rmtree('course_files') except OSError: pass course = Course(blackboard_zip_fname) moodle_zip = zipfile.ZipFile(out_name, 'w') moodle_xml_str = utils.convert(course).encode('utf-8') moodle_zip.writestr('moodle.xml', moodle_xml_str) err_fh = open(os.path.devnull, 'w') command = ('unzip %s -d elixer_tmp' % blackboard_zip_fname).split(' ') subprocess.Popen(command, stdout=err_fh, stderr=err_fh).communicate() skip_parent = False for root, dirs, files in os.walk('elixer_tmp'): if not skip_parent: skip_parent = True continue for bb_fname in files: moodle_fname = bb_fname if moodle_fname.endswith('.xml'): continue if bb_fname.startswith('!'): if '.' in bb_fname: ext, fname = [ s[::-1] for s in bb_fname[1:][::-1].split('.', 1) ] moodle_fname = (base64.b16decode(fname.upper()) + '.' + ext) else: ext, fname = '', bb_fname[1:] moodle_fname = (base64.b16decode(fname.upper())) moodle_fname = urllib2.unquote(moodle_fname) res_num = root.split(os.sep, 1)[1].split(os.sep)[0].replace('res', '') fixed_filename = utils.fix_filename(moodle_fname, res_num) bb_fname = os.path.join(root, bb_fname) moodle_fname = os.path.join('course_files', fixed_filename) moodle_zip.write(bb_fname, moodle_fname) shutil.rmtree('elixer_tmp') moodle_zip.close()
def _load(self): parts = ('FORMALTITLE', 'GIVEN', 'FAMILY') data_parts = [ self.xml.find('.//%s' % p).attrib['value'] for p in parts ] self.name = ' '.join([p for p in data_parts if p]) email = self.xml.find('.//EMAIL').attrib['value'] phone = self.xml.find('.//PHONE').attrib['value'] hours = self.xml.find('.//HOURS').attrib['value'] address = self.xml.find('.//ADDRESS').attrib['value'] homepage = self.xml.find('.//HOMEPAGE').attrib['value'] image = self.xml.find('.//IMAGE').attrib['value'] notes = self.xml.find('.//TEXT').text or '' if image: image = utils.fix_filename(image, self.res_num) self.res_type = 'html' self.alltext = ''' <table border = "0" width = "50%%"> <tr> <td colspan = "2"><h3>%s</h3></td> </tr> <tr> <td> <ul> <li><b>Email</b>: %s</li> <li><b>Work Phone</b>: %s</li> <li><b>Office Location</b>: %s</li> <li><b>Office Hours</b>: %s</li> <li><b>Personal Link</b>: %s</li> </ul> </td> ''' % (self.name, email, phone, hours, address, homepage) if image: self.alltext += ''' <td> <img src = "$@FILEPHP@$/%s" alt="" width="150" height="150"/> </td> ''' % image self.alltext += ''' </tr> <tr> <td colspan = "2">%s</td> </tr> </table> ''' % notes formal_title = self.xml.find('.//FORMALTITLE') self.type = 'resource'
def handle_embedded_file(self, text): before, rest = text.split('@[email protected]@X@', 1) filename, after = rest.split('"', 1) after = '"' + after filename = utils.fix_filename(filename, self.res_num) return before + '$@FILEPHP@$/' + filename + after
def _load(self): parts = ('FORMALTITLE', 'GIVEN', 'FAMILY') data_parts = [self.xml.find('.//%s' % p).attrib['value'] for p in parts] self.name = ' '.join([p for p in data_parts if p]) email = self.xml.find('.//EMAIL').attrib['value'] phone = self.xml.find('.//PHONE').attrib['value'] hours = self.xml.find('.//HOURS').attrib['value'] address = self.xml.find('.//ADDRESS').attrib['value'] homepage = self.xml.find('.//HOMEPAGE').attrib['value'] image = self.xml.find('.//IMAGE').attrib['value'] notes = self.xml.find('.//TEXT').text or '' if image: image = utils.fix_filename(image, self.res_num) self.res_type = 'html' self.alltext = ''' <table border = "0" width = "50%%"> <tr> <td colspan = "2"><h3>%s</h3></td> </tr> <tr> <td> <ul> <li><b>Email</b>: %s</li> <li><b>Work Phone</b>: %s</li> <li><b>Office Location</b>: %s</li> <li><b>Office Hours</b>: %s</li> <li><b>Personal Link</b>: %s</li> </ul> </td> ''' % (self.name, email, phone, hours, address, homepage) if image: self.alltext += ''' <td> <img src = "$@FILEPHP@$/%s" alt="" width="150" height="150"/> </td> ''' % image self.alltext += ''' </tr> <tr> <td colspan = "2">%s</td> </tr> </table> ''' % notes formal_title = self.xml.find('.//FORMALTITLE') self.type = 'resource'
def handle_file(self, file_elem): orig_name = file_elem.find('.//NAME').text fixed_name = utils.fix_filename(orig_name, self.res_num) fname = urllib2.quote(fixed_name.encode('utf-8')) link_name = file_elem.find('.//LINKNAME').attrib['value'] f_link = '<a href = "$@FILEPHP@$/%s" title = %s>' % ((fname, ) * 2) f_link = 'Attached File: ' + f_link + '%s</a>' % link_name self.alltext = '<br /><br />'.join([self.alltext, f_link])
def handle_embedded_stubfile(self, text): try: before, rest = text.split( '@[email protected]@X@bbcswebdav', 1) filename, after = rest.split('"', 1) after = '"' + after filename = utils.fix_filename(filename, self.res_num) except Exception as e: print "exception " return before + '$@FILEPHP@$/' + filename + after
def handle_embedded_stubfile(self, text): if text.find('@[email protected]@X@bbcswebdav') is -1: return text try: before, rest = text.split( '@[email protected]@X@bbcswebdav', 1) filename, after = rest.split('"', 1) after = '"' + after filename = utils.fix_filename(filename, self.res_num) filename = filename.strip("/") return before + '$@FILEPHP@$/' + filename + after except Exception as e: return text
def __init__(self, xml, res_num): if self.__class__ == 'Question': raise NotImplementedError('Do not instantiate base class') self.res_num = res_num ContentItem.__init__(self, xml) if not self.name: self.name = '________' self.name = re.sub(r'<.*?>', '', self.name).strip() query = './/flow[@class="FILE_BLOCK"]//matapplication' for elem in self.xml.findall(query): self.image = utils.fix_filename(elem.attrib['label'], res_num) self.stamp = utils.generate_stamp() self.id = utils.m_hash(self)
def __init__(self, xml, res_num): if self.__class__ == 'Question': raise NotImplementedError('Do not instantiate base class') ContentItem.__init__(self, xml) if not self.name: self.name = '________' self.name = re.sub(r'<.*?>', '', self.name).strip() self.res_num = res_num query = './/flow[@class="FILE_BLOCK"]//matapplication' for elem in self.xml.findall(query): self.image = utils.fix_filename(elem.attrib['label'], res_num) self.stamp = utils.generate_stamp() self.id = utils.m_hash(self)
def create_moodle_zip(blackboard_zip_fname, out_name, course_id, parameters): try: shutil.rmtree('elixer_tmp') shutil.rmtree('course_files') except OSError: pass course = Course(blackboard_zip_fname, course_id, parameters) moodle_zip = zipfile.ZipFile(out_name, 'w') moodle_xml_str = utils.convert(course).encode('utf-8') moodle_zip.writestr('moodle.xml', moodle_xml_str) err_fh = open(os.path.devnull, 'w') #nikoloup #fix unzip encoding issues #command = ('unzip %s -d elixer_tmp' % blackboard_zip_fname).split(' ') #subprocess.Popen(command, stdout=err_fh, stderr=err_fh).communicate() bbzip = zipfile.ZipFile(blackboard_zip_fname, 'r') bbzip.extractall('elixer_tmp') #end skip_parent = False for root, dirs, files in os.walk('elixer_tmp'): if not skip_parent: skip_parent = True continue for bb_fname in files: moodle_fname = bb_fname #nikoloup #exclude xml files if moodle_fname.find('.xml')!=-1: continue #nikoloup #filename cleanup parts1 = moodle_fname.split('__') parts2 = moodle_fname.split('.') moodle_fname = parts1[0] + '.' + parts2[len(parts2)-1] #end if bb_fname.startswith('!'): if '.' in bb_fname: ext, fname = [s[::-1] for s in bb_fname[1:][::-1].split('.', 1)] moodle_fname = (base64.b16decode(fname.upper()) + '.' + ext) else: ext, fname = '', bb_fname[1:] moodle_fname = (base64.b16decode(fname.upper())) moodle_fname = urllib2.unquote(moodle_fname) #nikoloup #filename cleanup #res_num = root.split(os.sep, 1)[1].split(os.sep)[0].replace('res', '') res_num = '' #end fixed_filename = utils.fix_filename(moodle_fname, res_num) bb_fname = os.path.join(root, bb_fname) moodle_fname = os.path.join('course_files', fixed_filename) moodle_zip.write(bb_fname, moodle_fname) shutil.rmtree('elixer_tmp') moodle_zip.close()