(self, build=None)
| 108 | |
| 109 | @job("copy and generate the bundles") |
| 110 | def bundles(self, build=None): # pylint:disable=too-many-locals |
| 111 | if not os.path.exists(self.deps_folder): |
| 112 | try: |
| 113 | os.makedirs(self.deps_folder) |
| 114 | except OSError: |
| 115 | logger.exception("🚨 having issues manipulating %s", self.deps_folder) |
| 116 | sys.exit(1) |
| 117 | |
| 118 | self._parse_package(self.package_lock) |
| 119 | |
| 120 | getattr(self, "_bundles_extra", lambda: None)() |
| 121 | |
| 122 | versions = { |
| 123 | "version": self.version, |
| 124 | "package": self.name.replace(" ", "_").replace("-", "_"), |
| 125 | } |
| 126 | |
| 127 | for scope, name, subfolder, filename, extras in self.deps_info: |
| 128 | version = self.deps["/".join(filter(None, [scope, name]))]["version"] |
| 129 | name_squashed = name.replace("-", "").replace(".", "") |
| 130 | versions[name_squashed] = version |
| 131 | |
| 132 | logger.info("copy npm dependency => %s", filename) |
| 133 | ext = "min.js" if "min" in filename.split(".") else "js" |
| 134 | target = f"{name}@{version}.{ext}" |
| 135 | |
| 136 | shutil.copyfile( |
| 137 | self._concat(self.npm_modules, scope, name, subfolder, filename), |
| 138 | self._concat(self.deps_folder, target), |
| 139 | ) |
| 140 | |
| 141 | if extras: |
| 142 | extras_str = '", "'.join(extras) |
| 143 | versions[f"extra_{name_squashed}_versions"] = f'"{extras_str}"' |
| 144 | |
| 145 | for extra_version in extras: |
| 146 | url = f"https://unpkg.com/{name}@{extra_version}/umd/{filename}" |
| 147 | res = requests.get(url) |
| 148 | extra_target = f"{name}@{extra_version}.{ext}" |
| 149 | extra_path = self._concat(self.deps_folder, extra_target) |
| 150 | with open(extra_path, "wb") as fp: |
| 151 | fp.write(res.content) |
| 152 | |
| 153 | _script = "build:dev" if build == "local" else "build:js" |
| 154 | logger.info("run `npm run %s`", _script) |
| 155 | os.chdir(self.main) |
| 156 | run_command_with_process(f"npm run {_script}") |
| 157 | |
| 158 | logger.info("generate the `__init__.py` from template and versions") |
| 159 | with open(self._concat(self.main, "init.template"), encoding="utf-8") as fp: |
| 160 | t = string.Template(fp.read()) |
| 161 | |
| 162 | renderer_init = self._concat(self.deps_folder, os.pardir, "_dash_renderer.py") |
| 163 | with open(renderer_init, "w", encoding="utf-8") as fp: |
| 164 | fp.write(t.safe_substitute(versions)) |
| 165 | |
| 166 | |
| 167 | class Renderer(BuildProcess): |
no test coverage detected