Server IP : 85.214.239.14 / Your IP : 18.222.118.236 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/3/task/3/cwd/srv/modoboa/env/lib/python3.5/site-packages/webpack_loader/ |
Upload File : |
import json import time from io import open from django.conf import settings from django.contrib.staticfiles.storage import staticfiles_storage from .exceptions import ( WebpackError, WebpackLoaderBadStatsError, WebpackLoaderTimeoutError, WebpackBundleLookupError ) class WebpackLoader(object): _assets = {} def __init__(self, name, config): self.name = name self.config = config def load_assets(self): try: with open(self.config['STATS_FILE'], encoding="utf-8") as f: return json.load(f) except IOError: raise IOError( 'Error reading {0}. Are you sure webpack has generated ' 'the file and the path is correct?'.format( self.config['STATS_FILE'])) def get_assets(self): if self.config['CACHE']: if self.name not in self._assets: self._assets[self.name] = self.load_assets() return self._assets[self.name] return self.load_assets() def filter_chunks(self, chunks): for chunk in chunks: ignore = any(regex.match(chunk['name']) for regex in self.config['ignores']) if not ignore: chunk['url'] = self.get_chunk_url(chunk) yield chunk def get_chunk_url(self, chunk): public_path = chunk.get('publicPath') if public_path: return public_path relpath = '{0}{1}'.format( self.config['BUNDLE_DIR_NAME'], chunk['name'] ) return staticfiles_storage.url(relpath) def get_bundle(self, bundle_name): assets = self.get_assets() # poll when debugging and block request until bundle is compiled # or the build times out if settings.DEBUG: timeout = self.config['TIMEOUT'] or 0 timed_out = False start = time.time() while assets['status'] == 'compiling' and not timed_out: time.sleep(self.config['POLL_INTERVAL']) if timeout and (time.time() - timeout > start): timed_out = True assets = self.get_assets() if timed_out: raise WebpackLoaderTimeoutError( "Timed Out. Bundle `{0}` took more than {1} seconds " "to compile.".format(bundle_name, timeout) ) if assets.get('status') == 'done': chunks = assets['chunks'].get(bundle_name, None) if chunks is None: raise WebpackBundleLookupError('Cannot resolve bundle {0}.'.format(bundle_name)) return self.filter_chunks(chunks) elif assets.get('status') == 'error': if 'file' not in assets: assets['file'] = '' if 'error' not in assets: assets['error'] = 'Unknown Error' if 'message' not in assets: assets['message'] = '' error = u""" {error} in {file} {message} """.format(**assets) raise WebpackError(error) raise WebpackLoaderBadStatsError( "The stats file does not contain valid data. Make sure " "webpack-bundle-tracker plugin is enabled and try to run " "webpack again.")