Пример #1
0
    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)
Пример #2
0
 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]
Пример #3
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
Пример #4
0
    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
Пример #5
0
 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
Пример #6
0
    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)
Пример #7
0
 def ext(self, context, v):
     return splitext(v)[1].lstrip('.')
Пример #8
0
 def ext(self, context, v):
     return splitext(v)[1].lstrip('.')
Пример #9
0
 def filename(self):
     return path.splitext(path.split(self.path)[1])[0]
Пример #10
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)
Пример #11
0
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
Пример #12
0
    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)
Пример #13
0
 def __iter__(self):
     for f in self.fs.filterdir("/", files=self._files, exclude_dirs=["*"]):
         name, _ = splitext(f.name)
         yield name
Пример #14
0
 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", ""))
Пример #15
0
 def filename(self):
     return path.splitext(path.split(self.path)[1])[0]
Пример #16
0
 def extension_name(self) -> str:
     return fp.splitext(self.s)[1]