class EtherpadSectionEngine(BaseEngine): def __init__(self, apikey, padID, targetFile, base_url='http://localhost:9001/api', marker=None): self._con = EtherpadLiteClient(base_params={'apikey': apikey}, base_url=base_url) self._padID = padID self._file = targetFile if marker==None: marker = id_generator(10) self._lineMarker = '===== ' + marker + ' =============' # Insert line markers at the end of pad pad = self._con.getText(padID=self._padID) newText = pad['text'] + self._lineMarker + '\n' + self._lineMarker self._con.setText(padID=self._padID, text=newText) def timedAction(self): with open(self._file, 'r') as fin: fileText = fin.read() fileText = sanitize(fileText) pad = self._con.getText(padID=self._padID) text = pad['text'] parts = text.split(self._lineMarker) newText = parts[0] + \ self._lineMarker + '\n' + \ fileText + '\n' + \ self._lineMarker + \ parts[2] self._con.setText(padID=self._padID, text=newText) def exitAction(self): pass
def main(): try: pw = open("/usr/share/httpd/.ssh/ep_api_key", "r").read().strip() ep = EtherpadLiteClient(base_params={"apikey": pw}, api_version="1.2.10") except: e = sys.exc_info()[0] print "Problem logging into Etherpad via API: {0}".format(e) sys.exit(1) all_pads = ep.listAllPads() ver_pads = [x for x in all_pads["padIDs"] if "ulb" in x or "udb" in x] ver_pads.sort() redirects = [] for bk in books.iterkeys(): bk_pads = [x for x in ver_pads if bk.lower() in x and contains_digits(x)] bk_pads.sort() for p in bk_pads: # Skips pad that WA uses for communication (e.g. 'en-ulb-1ti') if len(p.split("-")) < 4: continue chapter = p.split("-")[3] content = ep.getText(padID=p)["text"] if "Welcome to Etherpad!" in content: continue redirects.append(u"rewrite /p/{0} /p/{1} permanent;".format(p, ep.getReadOnlyID(padID=p)["readOnlyID"])) print u"\n".join(sorted(redirects))
def main(): try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) all_pads = ep.listAllPads() ver_pads = [x for x in all_pads['padIDs'] if 'ulb' in x or 'udb' in x] ver_pads.sort() redirects = [] for bk in books.iterkeys(): bk_pads = [ x for x in ver_pads if bk.lower() in x and contains_digits(x) ] bk_pads.sort() for p in bk_pads: # Skips pad that WA uses for communication (e.g. 'en-ulb-1ti') if len(p.split('-')) < 4: continue chapter = p.split('-')[3] content = ep.getText(padID=p)['text'] if 'Welcome to Etherpad!' in content: continue redirects.append(u'rewrite /p/{0} /p/{1} permanent;'.format( p, ep.getReadOnlyID(padID=p)['readOnlyID'])) print u'\n'.join(sorted(redirects))
class EtherpadSectionEngine(BaseEngine): def __init__(self, apikey, padID, targetFile, base_url='http://localhost:9001/api', marker=None): self._con = EtherpadLiteClient(base_params={'apikey': apikey}, base_url=base_url) self._padID = padID self._file = targetFile if marker == None: marker = id_generator(10) self._lineMarker = '===== ' + marker + ' =============' # Insert line markers at the end of pad pad = self._con.getText(padID=self._padID) newText = pad['text'] + self._lineMarker + '\n' + self._lineMarker self._con.setText(padID=self._padID, text=newText) def timedAction(self): with open(self._file, 'r') as fin: fileText = fin.read() fileText = sanitize(fileText) pad = self._con.getText(padID=self._padID) text = pad['text'] parts = text.split(self._lineMarker) newText = parts[0] + \ self._lineMarker + '\n' + \ fileText + '\n' + \ self._lineMarker + \ parts[2] self._con.setText(padID=self._padID, text=newText) def exitAction(self): pass
def main(): try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) all_pads = ep.listAllPads()['padIDs'] for p in all_pads: # Skips pad that WA uses for communication (e.g. 'en-ulb-1ti') if len(p.split('-')) < 4: continue content = u'' + ep.getText(padID=p)['text'] if 'Welcome to Etherpad!' in content or 'ATTENTION' in content: continue print p parts = p.split('-') lang = parts[0] resource = parts[1] bk = parts[2] chp = parts[3] bk = bk.upper() if not bk in books: continue booknum = books[bk][1] content = u'''—————————————————————————————————————— !!!! !!!! ATTENTION!! !!!! *** THESE FILE ARE NO LONGER EDITED ON ETHERPAD! *** !!!! !!!! PLEASE CREATE AN ACCOUNT AT http://github.com AND LET US KNOW YOUR USERNAME !!!! ON SLACK IN THE #resources CHANNEL OR EMAIL [email protected] !!!! !!!! ONCE YOU HAVE ACCESS, YOU CAN EDIT THIS FILE AT !!!! https://github.com/Door43/{0}-{1}/blob/master/{2}-{3}/{4}.usfm !!!! —————————————————————————————————————— {5} '''.format(resource, lang, booknum, bk, chp, content) print p ep.setText(padID=p, text=content.encode('utf-8'))
def main(): try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) all_pads = ep.listAllPads()['padIDs'] for p in all_pads: # Skips pad that WA uses for communication (e.g. 'en-ulb-1ti') if len(p.split('-')) < 4: continue content = u''+ep.getText(padID=p)['text'] if 'Welcome to Etherpad!' in content or 'ATTENTION' in content: continue print p parts = p.split('-') lang = parts[0] resource = parts[1] bk = parts[2] chp = parts[3] bk = bk.upper() if not bk in books: continue booknum = books[bk][1] content = u'''—————————————————————————————————————— !!!! !!!! ATTENTION!! !!!! *** THESE FILE ARE NO LONGER EDITED ON ETHERPAD! *** !!!! !!!! PLEASE CREATE AN ACCOUNT AT http://github.com AND LET US KNOW YOUR USERNAME !!!! ON SLACK IN THE #resources CHANNEL OR EMAIL [email protected] !!!! !!!! ONCE YOU HAVE ACCESS, YOU CAN EDIT THIS FILE AT !!!! https://github.com/Door43/{0}-{1}/blob/master/{2}-{3}/{4}.usfm !!!! —————————————————————————————————————— {5} '''.format(resource, lang, booknum, bk, chp, content) print p ep.setText(padID=p, text=content.encode('utf-8'))
def main(slug, outdir): try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) all_pads = ep.listAllPads() ver_pads = [x for x in all_pads['padIDs'] if slug.lower() in x] ver_pads.sort() outdir = outdir.format(slug.lower(), 'en') for bk in books.iterkeys(): bk_pads = [ x for x in ver_pads if bk.lower() in x and contains_digits(x) ] bk_pads.sort() content = [] for p in bk_pads: # Skips pad that WA uses for communication (e.g. 'en-ulb-1ti') if len(p.split('-')) < 4: continue chapter = p.split('-')[3] content = ep.getText(padID=p)['text'] if 'Welcome to Etherpad!' in content: continue content = httpsre.sub(u'', content) content = srre.sub(u'', content) content = s1re.sub(u'', content) content = s_re.sub(u'', content) bookdir = u'{0}/{1}-{2}'.format(outdir, books[bk][1], bk) if not os.path.exists(bookdir): os.makedirs(bookdir) outfile = u'{0}/{1}.usfm'.format(bookdir, chapter) writeFile(outfile, u''.join(content)) print u"\nGenerated files in {0}. Done.".format(outdir)
def main(): try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) all_pads = ep.listAllPads() ver_pads = [x for x in all_pads['padIDs'] if x.startswith(u'ta-')] ver_pads.sort() redirects = [] for p in ver_pads: content = ep.getText(padID=p)['text'] if 'Welcome to Etherpad!' in content: continue redirects.append(u'rewrite /p/{0} /p/{1} permanent;'.format(p, ep.getReadOnlyID(padID=p)['readOnlyID'])) print u'\n'.join(sorted(redirects))
def main(slug, outdir): try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) all_pads = ep.listAllPads() ver_pads = [x for x in all_pads['padIDs'] if slug.lower() in x] ver_pads.sort() outdir = outdir.format(slug.lower(), 'en') for bk in books.iterkeys(): bk_pads = [x for x in ver_pads if bk.lower() in x and contains_digits(x)] bk_pads.sort() content = [] for p in bk_pads: # Skips pad that WA uses for communication (e.g. 'en-ulb-1ti') if len(p.split('-')) < 4: continue chapter = p.split('-')[3] content = ep.getText(padID=p)['text'] if 'Welcome to Etherpad!' in content: continue content = httpsre.sub(u'', content) content = srre.sub(u'', content) content = s1re.sub(u'', content) content = s_re.sub(u'', content) bookdir = u'{0}/{1}-{2}'.format(outdir, books[bk][1], bk) if not os.path.exists(bookdir): os.makedirs(bookdir) outfile = u'{0}/{1}.usfm'.format(bookdir, chapter) writeFile(outfile, u''.join(content)) print u"\nGenerated files in {0}. Done.".format(outdir)
def main(args): try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) all_pads = ep.listAllPads() ver_pads = [x for x in all_pads['padIDs'] if args.slug.lower() in x] ver_pads.sort() bk_pads = [x for x in ver_pads if contains_digits(x)] for p in bk_pads: if p != 'en-en-ulb-gen-01': continue # Get text p_orig = ep.getText(padID=p)['text'] p_content = p_orig # Run transformations if args.hyphenfix: p_content = hyphenfixre.sub(u'—', p_content) p_content = p_content.replace(u' — ', u'—') #if args.versefix: #p_content = verseFix(p_content) #if args.smartquotes: #p_content = smartquotes(p_content) # save text if p_orig != p_content: print 'Updating {0}'.format(p) try: ep.setText(padID=p, text=p_content.encode('utf-8')) except EtherpadException as e: print '{0}: {1}'.format(e, p) break
def main(): try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) all_pads = ep.listAllPads() ver_pads = [x for x in all_pads['padIDs'] if x.startswith(u'ta-')] ver_pads.sort() redirects = [] for p in ver_pads: content = ep.getText(padID=p)['text'] if 'Welcome to Etherpad!' in content: continue redirects.append(u'rewrite /p/{0} /p/{1} permanent;'.format( p, ep.getReadOnlyID(padID=p)['readOnlyID'])) print u'\n'.join(sorted(redirects))
def main(): try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) namespace = u'ta-' all_pads = ep.listAllPads() ver_pads = [x for x in all_pads['padIDs'] if x.startswith(namespace)] ver_pads.sort() for p in ver_pads: content = [] # Skips pad that WA uses for communication (e.g. 'en-ulb-1ti') content = ep.getText(padID=p)['text'] if 'Welcome to Etherpad!' in content: continue print u"rewrite /p/" + p + ""
def main(): try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}, api_version='1.2.10') except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) namespace = u'ta-' all_pads = ep.listAllPads() ver_pads = [x for x in all_pads['padIDs'] if x.startswith(namespace)] ver_pads.sort() for p in ver_pads: content = [] # Skips pad that WA uses for communication (e.g. 'en-ulb-1ti') content = ep.getText(padID=p)['text'] if 'Welcome to Etherpad!' in content: continue print u"rewrite /p/"+p+""
except: print " => ERROR retrieving %s\nCheck the URL" % url sys.exit(1) return request if __name__ == '__main__': if len(sys.argv) > 1: pad_name = str(sys.argv[1]).strip() if 'ulb' not in pad_name: print 'Please specify ULB pad to chunk.' sys.exit(1) else: print 'Please specify the pad to chunk.' sys.exit(1) try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}) except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) lang,ver,bk,chp = pad_name.split('-') ulb = ep.getText(padID=pad_name) udb = ep.getText(padID=pad_name.replace('ulb', 'udb')) tft = getURL(TFTURL.format(bk, chp.zfill(3))) chunked = splice(ulb['text'], udb['text'], tft, bk, chp) writeChunks(chunked)
fixed_text = fixed_text.replace(u' — ', u'—') return fixed_text if __name__ == '__main__': if len(sys.argv) > 1: pad_name = str(sys.argv[1]).strip() if 'ulb' not in pad_name: print 'Please specify ULB pad to chunk.' sys.exit(1) else: print 'Please specify the pad to chunk.' sys.exit(1) try: pw = open('/usr/share/httpd/.ssh/ep_api_key', 'r').read().strip() ep = EtherpadLiteClient(base_params={'apikey': pw}) except: e = sys.exc_info()[0] print 'Problem logging into Etherpad via API: {0}'.format(e) sys.exit(1) lang, ver, bk, chp = pad_name.split('-') ulb = ep.getText(padID=pad_name) udb = ep.getText(padID=pad_name.replace('ulb', 'udb')) tft = getURL(TFTURL.format(bk, chp.zfill(3))) chunked = splice(fix_text(ulb['text']), fix_text(udb['text']), tft, bk, chp) writeChunks(chunked)
class EtherpadEditor(AbstractEditor): def __init__(self, config): AbstractEditor.__init__(self, config) self.client = EtherpadLiteClient(base_params={'apikey': self.secret}, base_url=self.apiurl, api_version="1.2.12") def _get_authorid_for_user(self, user): name = user.username color = user.color if color is not None and len(color) > 0: color = '#' + color return self.client.createAuthorIfNotExistsFor(authorMapper=name, name=name, color=color)["authorID"] def _get_groupid_for_document(self, document): if isinstance(document, str): docname = document else: docname = document.name return self.client.createGroupIfNotExistsFor( groupMapper=docname)["groupID"] def _get_padid_for_document(self, document): group = self._get_groupid_for_document(document) return group + "$" + document.name def get_urlname_for_document(self, document): return self._get_padid_for_document(document) def generate_session(self, document, user): tomorrow = datetime.today() + timedelta(days=1) author = self._get_authorid_for_user(user) group = self._get_groupid_for_document(document) session = self.client.createSession( groupID=group, authorID=author, validUntil=tomorrow.timestamp())["sessionID"] return session def delete_session(self, sid): self.client.deleteSession(sessionID=sid) def delete_sessions(self, user): author = self._get_authorid_for_user(user) sessions = self.client.listSessionsOfAuthor(authorID=author) for sid in sessions: self.delete_session(sid) def create_document(self, document): group = self._get_groupid_for_document(document) try: self.client.createGroupPad(groupID=group, padName=document.name) except EtherpadException as e: if str(e) == 'padName does already exist': self.set_document_text(document, '') else: raise def delete_document(self, document): pad_id = self._get_padid_for_document(document) self.client.deletePad(padID=pad_id) def set_document_text(self, document, text): pad_id = self._get_padid_for_document(document) self.client.setText(padID=pad_id, text=text) def get_document_text(self, document): pad_id = self._get_padid_for_document(document) return self.client.getText(padID=pad_id)["text"]
def etherpad(**kwargs): # for key, value in kwargs.items(): # print ("%s == %s" %(key, value)) if (len(kwargs) == 0): args = parse_args(sys.argv) else: args = Namespace(**kwargs) if (args.host and args.port and args.user and args.apikey): # print("launch etherpad with %s:%s for user %s and key %s" % (str(args.host), args.port, args.user, str(args.apikey))) print("launch etherpad") else: return 1 URL = "http://" + str(args.host).replace("'", "") + ":" + args.port + "/api" #print("URL ="+URL) sys.stdout.flush() #time.sleep(2) try: client = EtherpadLiteClient( base_url=URL, base_params={"apikey": str(args.apikey).replace("'", "")}, api_version="1", timeout=7000) except Exception as err: traceback.print_exc(file=sys.stderr) print("Error client : %s" % (err)) sys.exit(1) #time.sleep(1) padID = passrandom(20) DATEcourse = re.sub( r'\..*', '', datetime.datetime.isoformat(datetime.datetime.now(), sep='_').replace(":", "-")) try: if (args.etherpadurl): PadURL = args.etherpadurl + padID.decode('utf-8') else: PadURL = padID.decode('utf-8') except: PadURL = padID.decode('utf-8') MESSAGE = "Subject: [Course " + DATEcourse + "] new padID : " + PadURL + " \nHello \nFor your course at " + DATEcourse + ",please use this PadID to put your (machine, login) :\n" + PadURL tf = tempfile.NamedTemporaryFile(mode="w+b", dir="/tmp", prefix="", delete=False) tf.write(MESSAGE.encode('utf-8')) tf.close() print(MESSAGE) sys.stdout.flush() try: if (args.mail): COMMAND = '/sbin/sendmail -F "' + args.user + '" -f ' + args.mail + ' -t ' + args.mail + ' < ' + tf.name os.system(COMMAND) except: pass try: if (args.filestud): import csv with open(args.filestud, newline='') as csvfile: spamreader = csv.reader(csvfile, delimiter=';', quotechar='|') for row in spamreader: destination = row[1] COMMAND = '/sbin/sendmail -F "' + args.user + '" -f ' + args.mail + ' -t ' + destination + ' < ' + tf.name os.system(COMMAND) except: pass try: myauth = client.createAuthor(name=args.user) pad = client.createPad(padID=padID, text=initText) except Exception as err: traceback.print_exc(file=sys.stderr) print("Error create_pad : %s" % (err)) sys.exit(2) # help(pad) # COMMAND=URL+"/1/setText?apikey="+str(APIKEY)+"&padID="+str(padID)+"&text='"+initText+"'" # os.system("curl "+COMMAND) # Wait for students print( "Wait 60s (or more) for students and teacher must finish by 'END' string." ) time.sleep(60) while True: try: Out = client.getText(padID=padID) except Exception as err: traceback.print_exc(file=sys.stderr) print("Error get_text : %s" % (err)) sys.exit(2) # COMMAND=URL+"/1/getText?apikey="+str(APIKEY)+"&padID="+str(padID)+"&jsonp=?" # os.system("curl "+COMMAND) # Build node file. #print(Out) print(Out["text"]) List = Out["text"].replace(initText, "").split("\n") print(List) sys.stdout.flush() if ("END" in List): iEnd = List.index("END") List = List[:iEnd] break else: time.sleep(2) # Créé le tableau des élèves connectés en direct. studfile = "./directconnection.csv" with open(studfile, 'w+') as f: for stud in List: f.write(stud + "\n") f.close() os.system("ls -la " + studfile)
class EtherpadEditor(AbstractEditor): def __init__(self, config): AbstractEditor.__init__(self, config) self.client = EtherpadLiteClient( base_params={'apikey':self.secret}, base_url=self.apiurl, api_version="1.2.12" ) def _get_authorid_for_user(self, user): name = user.username color = user.color if color is not None and len(color) > 0: color = '#' + color return self.client.createAuthorIfNotExistsFor(authorMapper=name, name=name, color=color)["authorID"] def _get_groupid_for_document(self, document): if isinstance(document, str): docname = document else: docname = document.name return self.client.createGroupIfNotExistsFor(groupMapper=docname)["groupID"] def _get_padid_for_document(self, document): group = self._get_groupid_for_document(document) return group + "$" + document.name def get_urlname_for_document(self, document): return self._get_padid_for_document(document) def generate_session(self, document, user): tomorrow = datetime.today() + timedelta(days=1) author = self._get_authorid_for_user(user) group = self._get_groupid_for_document(document) session = self.client.createSession(groupID=group, authorID=author, validUntil=tomorrow.timestamp())["sessionID"] return session def delete_session(self, sid): self.client.deleteSession(sessionID=sid) def delete_sessions(self, user): author = self._get_authorid_for_user(user) sessions = self.client.listSessionsOfAuthor(authorID=author) for sid in sessions: self.delete_session(sid) def create_document(self, document): group = self._get_groupid_for_document(document) try: self.client.createGroupPad(groupID=group, padName=document.name) except EtherpadException as e: if str(e) == 'padName does already exist': self.set_document_text(document, '') else: raise def delete_document(self, document): pad_id = self._get_padid_for_document(document) self.client.deletePad(padID=pad_id) def set_document_text(self, document, text): pad_id = self._get_padid_for_document(document) self.client.setText(padID=pad_id, text=text) def get_document_text(self, document): pad_id = self._get_padid_for_document(document) return self.client.getText(padID=pad_id)["text"]