def edit(filename): from ita import Loader l = Loader("sablony") allowed = (path for path, content in l.getPathsOnly()) if not filename in allowed: msg("Integrita narušena", "error") redirect("/templates") content = request.forms.get("content") if content: try: save = l.save except AttributeError: msg("Současný Loader nepodporuje ukládání", "error") redirect(request.path) save(filename, content) msg("Změny uloženy", "success") redirect(request.path) with open(filename, "rb") as f: content = b"".join(f.readlines()) return template("templates_edit", content=content)
def run(nonterminal, interval, path, toAscii = True): import ita from ita import Loader, Parser, Generator ita.VERBOSE = False print("Stistknutim ENTER se provede pregenerovani") print("Pro ukonceni programu pouzijte CTRL+C") if toAscii: print("Vystup bude preved do cisteho ASCII") # event pro synchronizaci změny changed = threading.Event() # vlakno pro odchytavani zmacknuti enter inputing = None # vlakno pro timeout waiting = None while True: try: l = Loader(path) try: p = Parser( l ) g = Generator( p ) text = g.run(nonterminal) print( consoleFriendly(text) if toAscii else text ) except SyntaxError as e: # chyba při parsování šablony print("Syntax error: ", e) except NameError as e: # neexistující nonterminál při run print("Nonterminal not found: ", e) except UnicodeDecodeError as e: # chybne kodovani sablony print("Unicode error in %s : "% (e.filename) , e) except ita.GeneratorException as e: print(e) # seznam souborů , které budou hlídány filesToBeWatched = { fileName : os.path.getmtime(fileName) for fileName, data in l.getPathsOnly() } if not inputing: # vlákno inputing muže existovat, # input nelze spustit 2x (jde ale bude se čekat na ukončeni prvniho) # pokud dojde k reload z duvodu změny souboru puvodni input porad bezi # to je take duvod proc se pouziva stejny event inputing = InputThread(changed) inputing.start() if not waiting: # timeout vlakno, startujeme jen když je není z dřívějška waiting = WaitingThread(changed, interval) waiting.start() immortal = True while immortal: #čekáme na změnu changed.wait() # zjistíme kdo změnil stav if waiting.fired: # čekací vlákno vyvolalo vyjímku => timeout for fileName, mtime in filesToBeWatched.items(): if os.path.getmtime(fileName) != mtime: immortal = False break # force smazani del waiting # nutno zachovat existenci promenne waiting = None if immortal: # pokud doslo k timeoutu ale ne ke zmene souboru, musime nastartovat vlakno znovu waiting = WaitingThread(changed, interval) waiting.start() elif inputing.fired: # vlákno vstupu => keypress immortal = False # force smazani del inputing # nutno zachovat existenci promenne inputing = None changed.clear() print("-"*20) except KeyboardInterrupt: print("-"*20) break
def run(nonterminal, interval, path, toAscii=True): import ita from ita import Loader, Parser, Generator ita.VERBOSE = False print("Stistknutim ENTER se provede pregenerovani") print("Pro ukonceni programu pouzijte CTRL+C") if toAscii: print("Vystup bude preved do cisteho ASCII") # event pro synchronizaci změny changed = threading.Event() # vlakno pro odchytavani zmacknuti enter inputing = None # vlakno pro timeout waiting = None while True: try: l = Loader(path) try: p = Parser(l) g = Generator(p) text = g.run(nonterminal) print(consoleFriendly(text) if toAscii else text) except SyntaxError as e: # chyba při parsování šablony print("Syntax error: ", e) except NameError as e: # neexistující nonterminál při run print("Nonterminal not found: ", e) except UnicodeDecodeError as e: # chybne kodovani sablony print("Unicode error in %s : " % (e.filename), e) except ita.GeneratorException as e: print(e) # seznam souborů , které budou hlídány filesToBeWatched = { fileName: os.path.getmtime(fileName) for fileName, data in l.getPathsOnly() } if not inputing: # vlákno inputing muže existovat, # input nelze spustit 2x (jde ale bude se čekat na ukončeni prvniho) # pokud dojde k reload z duvodu změny souboru puvodni input porad bezi # to je take duvod proc se pouziva stejny event inputing = InputThread(changed) inputing.start() if not waiting: # timeout vlakno, startujeme jen když je není z dřívějška waiting = WaitingThread(changed, interval) waiting.start() immortal = True while immortal: #čekáme na změnu changed.wait() # zjistíme kdo změnil stav if waiting.fired: # čekací vlákno vyvolalo vyjímku => timeout for fileName, mtime in filesToBeWatched.items(): if os.path.getmtime(fileName) != mtime: immortal = False break # force smazani del waiting # nutno zachovat existenci promenne waiting = None if immortal: # pokud doslo k timeoutu ale ne ke zmene souboru, musime nastartovat vlakno znovu waiting = WaitingThread(changed, interval) waiting.start() elif inputing.fired: # vlákno vstupu => keypress immortal = False # force smazani del inputing # nutno zachovat existenci promenne inputing = None changed.clear() print("-" * 20) except KeyboardInterrupt: print("-" * 20) break