コード例 #1
0
    def handle(self, node):
        # type: (nodes.Node) -> None
        try:
            basename = os.path.basename(node['uri'])
            if '?' in basename:
                basename = basename.split('?')[0]
            if basename == '' or len(basename) > MAX_FILENAME_LEN:
                filename, ext = os.path.splitext(node['uri'])
                basename = sha1(filename.encode("utf-8")).hexdigest() + ext

            dirname = node['uri'].replace('://', '/').translate({
                ord("?"): u"/",
                ord("&"): u"/"
            })
            if len(dirname) > MAX_FILENAME_LEN:
                dirname = sha1(dirname.encode('utf-8')).hexdigest()
            ensuredir(os.path.join(self.imagedir, dirname))
            path = os.path.join(self.imagedir, dirname, basename)

            headers = {}
            if os.path.exists(path):
                timestamp = ceil(os.stat(path).st_mtime)  # type: float
                headers['If-Modified-Since'] = epoch_to_rfc1123(timestamp)

            r = requests.get(node['uri'], headers=headers)
            if r.status_code >= 400:
                logger.warning(
                    __('Could not fetch remote image: %s [%d]') %
                    (node['uri'], r.status_code))
            else:
                self.app.env.original_image_uri[path] = node['uri']

                if r.status_code == 200:
                    with open(path, 'wb') as f:
                        f.write(r.content)

                last_modified = r.headers.get('last-modified')
                if last_modified:
                    timestamp = rfc1123_to_epoch(last_modified)
                    os.utime(path, (timestamp, timestamp))

                mimetype = guess_mimetype(path, default='*')
                if mimetype != '*' and os.path.splitext(basename)[1] == '':
                    # append a suffix if URI does not contain suffix
                    ext = get_image_extension(mimetype)
                    newpath = os.path.join(self.imagedir, dirname,
                                           basename + ext)
                    movefile(path, newpath)
                    self.app.env.original_image_uri.pop(path)
                    self.app.env.original_image_uri[newpath] = node['uri']
                    path = newpath
                node['candidates'].pop('?')
                node['candidates'][mimetype] = path
                node['uri'] = path
                self.app.env.images.add_file(self.env.docname, path)
        except Exception as exc:
            logger.warning(
                __('Could not fetch remote image: %s [%s]') %
                (node['uri'], text_type(exc)))
コード例 #2
0
ファイル: images.py プロジェクト: mgeier/sphinx
    def handle(self, node):
        # type: (nodes.Node) -> None
        try:
            basename = os.path.basename(node['uri'])
            if '?' in basename:
                basename = basename.split('?')[0]
            if basename == '' or len(basename) > MAX_FILENAME_LEN:
                filename, ext = os.path.splitext(node['uri'])
                basename = sha1(filename.encode("utf-8")).hexdigest() + ext

            dirname = node['uri'].replace('://', '/').translate({ord("?"): u"/",
                                                                 ord("&"): u"/"})
            if len(dirname) > MAX_FILENAME_LEN:
                dirname = sha1(dirname.encode('utf-8')).hexdigest()
            ensuredir(os.path.join(self.imagedir, dirname))
            path = os.path.join(self.imagedir, dirname, basename)

            headers = {}
            if os.path.exists(path):
                timestamp = ceil(os.stat(path).st_mtime)  # type: float
                headers['If-Modified-Since'] = epoch_to_rfc1123(timestamp)

            r = requests.get(node['uri'], headers=headers)
            if r.status_code >= 400:
                logger.warning(__('Could not fetch remote image: %s [%d]') %
                               (node['uri'], r.status_code))
            else:
                self.app.env.original_image_uri[path] = node['uri']

                if r.status_code == 200:
                    with open(path, 'wb') as f:
                        f.write(r.content)

                last_modified = r.headers.get('last-modified')
                if last_modified:
                    timestamp = rfc1123_to_epoch(last_modified)
                    os.utime(path, (timestamp, timestamp))

                mimetype = guess_mimetype(path, default='*')
                if mimetype != '*' and os.path.splitext(basename)[1] == '':
                    # append a suffix if URI does not contain suffix
                    ext = get_image_extension(mimetype)
                    newpath = os.path.join(self.imagedir, dirname, basename + ext)
                    movefile(path, newpath)
                    self.app.env.original_image_uri.pop(path)
                    self.app.env.original_image_uri[newpath] = node['uri']
                    path = newpath
                node['candidates'].pop('?')
                node['candidates'][mimetype] = path
                node['uri'] = path
                self.app.env.images.add_file(self.env.docname, path)
        except Exception as exc:
            logger.warning(__('Could not fetch remote image: %s [%s]') %
                           (node['uri'], text_type(exc)))
コード例 #3
0
 def dump_search_index(self):
     self.info(bold('dumping search index... '), nonl=True)
     self.indexer.prune(self.env.all_docs)
     searchindexfn = path.join(self.outdir, self.searchindex_filename)
     # first write to a temporary file, so that if dumping fails,
     # the existing index won't be overwritten
     f = open(searchindexfn + '.tmp', 'wb')
     try:
         self.indexer.dump(f, self.indexer_format)
     finally:
         f.close()
     movefile(searchindexfn + '.tmp', searchindexfn)
     self.info('done')
コード例 #4
0
ファイル: html.py プロジェクト: zhengphou/sphinx
 def dump_search_index(self) -> None:
     with progress_message(__('dumping search index in %s') % self.indexer.label()):
         self.indexer.prune(self.env.all_docs)
         searchindexfn = path.join(self.outdir, self.searchindex_filename)
         # first write to a temporary file, so that if dumping fails,
         # the existing index won't be overwritten
         if self.indexer_dumps_unicode:
             with open(searchindexfn + '.tmp', 'w', encoding='utf-8') as ft:
                 self.indexer.dump(ft, self.indexer_format)
         else:
             with open(searchindexfn + '.tmp', 'wb') as fb:
                 self.indexer.dump(fb, self.indexer_format)
         movefile(searchindexfn + '.tmp', searchindexfn)
コード例 #5
0
ファイル: highlevel_conf.py プロジェクト: ngopina/cdap
def dump_search_index(builder, index):
    builder.info(bold('dumping combined search index... '), nonl=True)
    searchindexfn = os.path.join(builder.outdir, builder.searchindex_filename)
    # first write to a temporary file, so that if dumping fails,
    # the existing index won't be overwritten
    if builder.indexer_dumps_unicode:
        f = codecs.open(searchindexfn + '.tmp', 'w', encoding='utf-8')
    else:
        f = open(searchindexfn + '.tmp', 'wb')
    try:
        js_index.dump(index, f)
    finally:
        f.close()
    movefile(searchindexfn + '.tmp', searchindexfn)
    builder.info('done')
コード例 #6
0
ファイル: highlevel_conf.py プロジェクト: robertgeiger/cdap
def dump_search_index(builder, index):
    builder.info(bold('dumping combined search index... '), nonl=True)
    searchindexfn = os.path.join(builder.outdir, builder.searchindex_filename)
    # first write to a temporary file, so that if dumping fails,
    # the existing index won't be overwritten
    if builder.indexer_dumps_unicode:
        f = codecs.open(searchindexfn + '.tmp', 'w', encoding='utf-8')
    else:
        f = open(searchindexfn + '.tmp', 'wb')
    try:
        js_index.dump(index, f)
    finally:
        f.close()
    movefile(searchindexfn + '.tmp', searchindexfn)
    builder.info('done')
コード例 #7
0
ファイル: html.py プロジェクト: ymarfoq/outilACVDesagregation
 def dump_search_index(self):
     self.info(bold("dumping search index... "), nonl=True)
     self.indexer.prune(self.env.all_docs)
     searchindexfn = path.join(self.outdir, self.searchindex_filename)
     # first write to a temporary file, so that if dumping fails,
     # the existing index won't be overwritten
     if self.indexer_dumps_unicode:
         f = codecs.open(searchindexfn + ".tmp", "w", encoding="utf-8")
     else:
         f = open(searchindexfn + ".tmp", "wb")
     try:
         self.indexer.dump(f, self.indexer_format)
     finally:
         f.close()
     movefile(searchindexfn + ".tmp", searchindexfn)
     self.info("done")
コード例 #8
0
ファイル: html.py プロジェクト: Veterun/sphinx-1
 def dump_search_index(self):
     self.info(
         bold('dumping search index in %s ... ' % self.indexer.label()),
         nonl=True)
     self.indexer.prune(self.env.all_docs)
     searchindexfn = path.join(self.outdir, self.searchindex_filename)
     # first write to a temporary file, so that if dumping fails,
     # the existing index won't be overwritten
     if self.indexer_dumps_unicode:
         f = codecs.open(searchindexfn + '.tmp', 'w', encoding='utf-8')
     else:
         f = open(searchindexfn + '.tmp', 'wb')
     with f:
         self.indexer.dump(f, self.indexer_format)
     movefile(searchindexfn + '.tmp', searchindexfn)
     self.info('done')
コード例 #9
0
ファイル: html.py プロジェクト: hu19891110/sphinx-doc
 def dump_search_index(self):
     self.info(bold('dumping search index in %s ... ' %
                    self.indexer.label()),
               nonl=True)
     self.indexer.prune(self.env.all_docs)
     searchindexfn = path.join(self.outdir, self.searchindex_filename)
     # first write to a temporary file, so that if dumping fails,
     # the existing index won't be overwritten
     if self.indexer_dumps_unicode:
         f = codecs.open(searchindexfn + '.tmp', 'w', encoding='utf-8')
     else:
         f = open(searchindexfn + '.tmp', 'wb')
     with f:
         self.indexer.dump(f, self.indexer_format)
     movefile(searchindexfn + '.tmp', searchindexfn)
     self.info('done')
コード例 #10
0
 def dump_search_index(self):
     # type: () -> None
     logger.info(
         bold(__('dumping search index in %s ... ') % self.indexer.label()),
         nonl=True)
     self.indexer.prune(self.env.all_docs)
     searchindexfn = path.join(self.outdir, self.searchindex_filename)
     # first write to a temporary file, so that if dumping fails,
     # the existing index won't be overwritten
     if self.indexer_dumps_unicode:
         with open(searchindexfn + '.tmp', 'w', encoding='utf-8') as ft:
             self.indexer.dump(ft, self.indexer_format)
     else:
         with open(searchindexfn + '.tmp', 'wb') as fb:
             self.indexer.dump(fb, self.indexer_format)
     movefile(searchindexfn + '.tmp', searchindexfn)
     logger.info(__('done'))