def templatize(self, path): from fs.opener import fsopendir from fs.path import splitext, split fs = fsopendir(path) text_ext = ['', '.py', '.ini', '.xml', '.html', '.txt', '.json'] bin_ext = ['.png', '.jpg', '.ico', '.gif'] def check_path(path): dirname, filename = split(path) return filename not in [".svn", ".hg"] for path in fs.walkfiles(wildcard=check_path): _, ext = splitext(path) ext = ext.lower() if ext in text_ext: print('@TEXT {}'.format(path)) for line in fs.open(path, 'rt'): print(line.rstrip()) elif ext in bin_ext: print('@BIN {}'.format(path)) with fs.open(path, 'rb') as f: chunk = f.read(64) while chunk: print(''.join('%02x' % ord(b) for b in chunk)) chunk = f.read(64)
def _decode(self, path): """ Remove the .part[0-9] extension from the given path :param path: Encoded path :returns Decoded path (added .part extension) """ return splitext(path)[0]
def wrap_filename(self, fname): fname = _unicode(fname) if not self.terminal_colors: return fname if '://' in fname: return fname if '.' in fname: name, ext = splitext(fname) fname = u'%s\x1b[36m%s\x1b[0m' % (name, ext) if isdotfile(fname): fname = u'\x1b[2m%s\x1b[0m' % fname return fname
def on_change(self, event): if self.app is None or not hasattr(self.app, 'archive'): return ext = splitext(event.path)[1].lower() if ext not in self.watch_types: return if not self.is_win: if isinstance(event, MODIFIED) and not event.closed: return if not self.app.rebuild_required: log.info("detected modification to project, rebuild will occur on next request") self.app.rebuild_required = True
def on_change(self, event): ext = splitext(event.path)[1].lower() if ext not in ['.txt']: return print('file "{}" changed, building...'.format(event.path)) try: self.rebuild() except Exception as e: _notify('moya-doc', 'Failed to build ({})'.format(e)) import traceback traceback.print_exc(e) self.last_build_failed = True else: if self.last_build_failed: _notify('moya-doc', 'Build successful', icon="dialog-information") self.last_build_failed = False
def dispatch(self, archive, context, request, breakpoint=False): """Dispatch a request to the server and return a response object.""" url = request.path_info method = request.method self._populate_context(archive, context, request) site = self.set_site(archive, context, request) if site is None: # No site match, return a 404 return self.dispatch_handler(archive, context, request, StatusCode.not_found) root = context.root root['locale'] = site.locale context.set_lazy('.tz', self._get_tz, context, user_timezone=site.user_timezone, default_timezone=site.timezone) # Request middleware response = self.run_middleware('request', archive, context, request, url, method) if response is not None: return response def response_middleware(response): context.safe_delete('._callstack', '.call') context.root['response'] = response new_response = self.run_middleware('response', archive, context, request, url, method) return new_response or response # Run main views root['urltrace'] = root['_urltrace'] = [] context.safe_delete('._callstack', '.call') status_code = StatusCode.not_found response = None try: try: for result in self._dispatch_mapper(archive, context, self.urlmapper, url, method, breakpoint=breakpoint): response = self._dispatch_result(archive, context, request, result) if response: return response_middleware(response) finally: db.commit_sessions(context) except Exception as e: db.rollback_sessions(context) return self.handle_error(archive, context, request, e, sys.exc_info()) root['_urltrace'] = [] # Append slash and redirect if url doesn't end in a slash if not url.endswith('/') and site.append_slash: # Check in advance if the url ending with / actually maps to anything if method in ('HEAD', 'GET') and self.urlmapper.has_route(url + '/', method, None): _, ext = splitext(url) # Don't redirect when the filename has an extension if not ext: response = MoyaResponse(status=StatusCode.temporary_redirect, location=url + '/') return response # No response returned, handle 404 return self.dispatch_handler(archive, context, request, status=status_code)
def ext(self, context, v): return splitext(v)[1].lstrip('.')
def filename(self): return path.splitext(path.split(self.path)[1])[0]
def find_nexts2(self, top='/', deep=0, maxdeep=2): if deep == 0: self.results = [] # print(top) if deep > maxdeep: return # if self.logger: # self.logger.emit(top, INFORMATION) dirs, nondirs = [], [] for name in self.filesystem.scandir(top): if name.is_dir: dirs.append(name) elif splitext(name.name)[1].lower() in video_formats: nondirs.append(name) # print(dirs,nondirs) for fil in nondirs: pp = parse2(fil.name) if pp.error: pp = parse(fil.name) t1 = '' t2 = 0 try: if pp.is_video: if pp.episode: t1 = transform(pp.title) fill = t1 if pp.season: fill += ' - ' + str(pp.season) + \ 'x' + str(pp.episode) else: fill += ' - ' + str(pp.episode) fill += pp.ext else: continue t2 = pp.episode else: continue except KeyError: if self.logger: self.logger.emit("Error procesando: " + fil.name, WARNING) continue bedd = 100 gap = 2 near = '' for j in self.caps_list.keys(): edd = editDistance(t1, j, True) if edd <= gap and edd < bedd: near = j bedd = edd if edd == 0: break if near != '': if isinstance(t2, str): if 'x' in t2: t2 = t2.split('x')[1] if not (int(t2) in self.caps_list[near]): best = (near, fil.name, top, fill) self.results.append(best) if self.logger: self.logger.emit('Encontrado: ' + str(best), INFORMATION) for name in sorted(dirs, key=skey): path = join(top, name.name) if not self.filesystem.islink(path): self.find_nexts2(path, deep + 1, maxdeep)
def make_temp_fs(fff): # make virtual filesystem in ram with the final # organization of the filesystem ff = cache_directory(read_only(fff)) ram = MemoryFS() # for path, dirs, files in ff.walk(): posprocsub = [] fils = set() files = ff.scandir('/') path = '/' folds = set([i.name for i in files if i.is_dir]) files = ff.scandir('/') for j in files: if not j.is_file: continue if splitext(j.name)[1] in subs_formats: posprocsub.append(j.name) continue pp = rename(j.name) if pp.error: pp = parse(j.name) try: if pp.is_video: fold = transform(pp.title) if not (fold in folds): fold = best_ed(fold, folds) folds.add(fold) pth = join('/', fold) if not ram.exists(pth): ram.makedir(fold) fils.add(pp.title) if pp.episode: if pp.season: fill = pp.title + ' - ' + \ str(pp.season) + 'X' + str(pp.episode) else: fill = pp.title + ' - ' + str(pp.episode) else: fill = pp.title if pp.episode_title: fill += ' - ' + str(pp.episode_title) fill += pp.ext ram.settext(join(pth, fill), join(path, j.name)) except KeyError: continue for j in posprocsub: pp = rename(j) if pp.error: pp = parse(j.name) fold = transform(pp.title) pth = join('/', fold) if pp.episode: if pp.season: fill = pp.title + ' - ' + \ str(pp.season) + 'X' + str(pp.episode) else: fill = fold + ' - ' + str(pp.episode) else: fill = fold if pp.episode_title: fill = fill + ' - ' + str(pp.episode_title) fill += pp.ext if ram.exists(pth): ram.settext(join(pth, fill), join(path, j)) elif len(fils) == 1: pth = join('/', list(fils)[0]) ram.settext(join(pth, fill), join(path, j)) elif len(fils) > 1: best = None gap = 3 for i in fils: n = editDistance(i, fold) if n < 3 and n < gap: best = i gap = n elif n == 0: best = i break if best: pth = join('/', best) ram.settext(join(pth, fill), join(path, j)) else: if not (ram.exists('/subs')): ram.makedir('/subs') ram.settext(join('/subs', j), join(path, j)) else: if not (ram.exists('/subs')): ram.makedir('/subs') ram.settext(join('/subs', j), join(path, j)) return ram
def __iter__(self): for f in self.fs.filterdir("/", files=self._files, exclude_dirs=["*"]): name, _ = splitext(f.name) yield name
def test_splitext(self): self.assertEqual(splitext("foo.bar"), ("foo", ".bar")) self.assertEqual(splitext("foo.bar.baz"), ("foo.bar", ".baz")) self.assertEqual(splitext("foo"), ("foo", "")) self.assertEqual(splitext(".foo"), (".foo", ""))
def extension_name(self) -> str: return fp.splitext(self.s)[1]