def check_files(): global reloading_exception if not reloading_exception: modules = [ m for name, m in sys.modules.items() if getattr(m, 'USE_AUTORELOAD', False) and (name.startswith('pony.examples.') or not name.startswith('pony.')) ] try: for m in modules: filename = abspath(m.__file__) if filename.endswith(".pyc") or filename.endswith(".pyo"): filename = filename[:-1] if not exists(filename): continue mtime = get_mtime(filename) if mtimes.setdefault(filename, mtime) != mtime: try: reload(modules, m, filename) except Exception: # Запоминаем traceback так что мы можем отобразить его # на веб-странице позднее, когда поступит какой-либо HTTP запрос reloading_exception = sys.exc_info() else: reloading_exception = None break except: log_exc() sys.exit()
def reg_trans_file(filename): for fname, mtime, trans in trans_files: if fname == filename: return mtime = get_mtime(filename) trans = load(filename) update(translations, trans) trans_files.append((filename, mtime, trans))
def reload(): global last_check_time now = time() if abs(now - last_check_time) <= options.RELOADING_CHECK_INTERVAL: return with lock: if abs(now - last_check_time) <= options.RELOADING_CHECK_INTERVAL: return last_check_time = now changed = {} for fname, mtime, trans in trans_files: try: new_mtime = get_mtime(fname) except: # file not found? new_mtime = None if new_mtime != mtime: changed[fname] = new_mtime if not changed: return erroneous = set() log(type='RELOAD:begin', prefix='RELOADING: ', text=shortened_filename(fname), severity=ERROR, files=[ fname for fname, mtime, trans in trans_files ], changed=changed) try: translations.clear() for i, (fname, mtime, trans) in enumerate(trans_files): if fname in changed: new_mtime = changed[fname] trans = {} if new_mtime is not None: try: trans = load(fname) except: erroneous.add(fname) log_exc() trans_files[i] = fname, new_mtime, trans update(translations, trans) finally: log(type='RELOAD:end', severity=DEBUG, success=not erroneous, erroneous=erroneous, text='Reloaded with errors' if erroneous else 'Reloaded successfully')
def markup_from_file(str_cls, filename, encoding=None): key = filename, str_cls, encoding mtime = get_mtime(filename) old_mtime, markup = template_file_cache.get(key, (None, None)) if markup and mtime == old_mtime: return markup s = read_text_file(filename, encoding) if s.startswith(redirect_prefix): new_filename = s[len(redirect_prefix):].strip() return markup_from_file(str_cls, new_filename, encoding) if s.startswith(translation_prefix): lang = s[len(redirect_prefix):].strip().lower() root, ext = os.path.splitext(filename) root, _ = root.split('-', 1) new_filename = '%s-%s%s' % (root, lang, ext) return markup_from_file(str_cls, new_filename, encoding) markup = markup_from_string(str_cls, s, encoding, True, False, filename) template_file_cache[filename] = mtime, markup return markup