예제 #1
0
 def _process_namespace(self, src_zip):
     if self.options.get("namespace_tokenize"):
         src_zip = process_text_in_zipfile(
             src_zip,
             functools.partial(
                 tokenize_namespace,
                 namespace=self.options["namespace_tokenize"],
                 logger=self.logger,
             ),
         )
     if self.options.get("namespace_inject"):
         src_zip = process_text_in_zipfile(
             src_zip,
             functools.partial(
                 inject_namespace,
                 namespace=self.options["namespace_inject"],
                 managed=not process_bool_arg(
                     self.options.get("unmanaged", True)),
                 namespaced_org=process_bool_arg(
                     self.options.get("namespaced_org", False)),
                 logger=self.logger,
             ),
         )
     if self.options.get("namespace_strip"):
         src_zip = process_text_in_zipfile(
             src_zip,
             functools.partial(
                 strip_namespace,
                 namespace=self.options["namespace_strip"],
                 logger=self.logger,
             ),
         )
     return src_zip
예제 #2
0
 def _process_namespace(self, zipf):
     if self.options.get("namespace_inject"):
         managed = not process_bool_arg(self.options.get("unmanaged", True))
         if managed:
             self.logger.info(
                 "Replacing namespace tokens from metadata with namespace prefix {}__".format(
                     self.options["namespace_inject"]
                 )
             )
         else:
             self.logger.info(
                 "Stripping namespace tokens from metadata for unmanaged deployment"
             )
         zipf = process_text_in_zipfile(
             zipf,
             functools.partial(
                 inject_namespace,
                 namespace=self.options["namespace_inject"],
                 managed=managed,
                 namespaced_org=process_bool_arg(
                     self.options.get("namespaced_org", False)
                 ),
                 logger=self.logger,
             ),
         )
     if self.options.get("namespace_strip"):
         zipf = process_text_in_zipfile(
             zipf,
             functools.partial(
                 strip_namespace,
                 namespace=self.options["namespace_strip"],
                 logger=self.logger,
             ),
         )
     return zipf
예제 #3
0
 def _process_namespace_tokens(self):
     zipf = self.zf
     if self.options.get("namespace_tokenize"):
         self.logger.info(
             f"Tokenizing namespace prefix {self.options['namespace_tokenize']}__"
         )
         zipf = process_text_in_zipfile(
             zipf,
             functools.partial(
                 tokenize_namespace,
                 namespace=self.options["namespace_tokenize"],
                 logger=self.logger,
             ),
         )
     if self.options.get("namespace_inject"):
         managed = not self.options.get("unmanaged", True)
         if managed:
             self.logger.info(
                 "Replacing namespace tokens from metadata with namespace prefix  "
                 f"{self.options['namespace_inject']}__"
             )
         else:
             self.logger.info(
                 "Stripping namespace tokens from metadata for unmanaged deployment"
             )
         zipf = process_text_in_zipfile(
             zipf,
             functools.partial(
                 inject_namespace,
                 namespace=self.options["namespace_inject"],
                 managed=managed,
                 namespaced_org=self.options.get("namespaced_org", False),
                 logger=self.logger,
             ),
         )
     if self.options.get("namespace_strip"):
         self.logger.info("Stripping namespace tokens from metadata")
         zipf = process_text_in_zipfile(
             zipf,
             functools.partial(
                 strip_namespace,
                 namespace=self.options["namespace_strip"],
                 logger=self.logger,
             ),
         )
     self.zf = zipf
예제 #4
0
 def _process_namespace(self, src_zip):
     if self.options.get("namespace_tokenize"):
         src_zip = process_text_in_zipfile(
             src_zip,
             functools.partial(
                 tokenize_namespace,
                 namespace=self.options["namespace_tokenize"],
                 logger=self.logger,
             ),
         )
     if self.options.get("namespace_strip"):
         src_zip = process_text_in_zipfile(
             src_zip,
             functools.partial(
                 strip_namespace,
                 namespace=self.options["namespace_strip"],
                 logger=self.logger,
             ),
         )
     return src_zip
예제 #5
0
    def test_process_text_in_zipfile__skips_binary(self):
        contents = b"\x9c%%%NAMESPACE%%%"
        zf = zipfile.ZipFile(io.BytesIO(), "w")
        zf.writestr("test", contents)

        def process(name, content):
            return name, ""

        zf = utils.process_text_in_zipfile(zf, process)
        result = zf.read("test")
        # assert contents were untouched
        assert contents == result
    def _install_dependency(self, dependency):
        if "zip_url" or "repo_name" in dependency:
            package_zip = None
            if "zip_url" in dependency:
                self.logger.info(
                    "Deploying unmanaged metadata from /{} of {}".format(
                        dependency["subfolder"], dependency["zip_url"]))
                package_zip = self._download_extract_zip(
                    dependency["zip_url"],
                    subfolder=dependency.get("subfolder"))
            elif "repo_name" in dependency:
                self.logger.info(
                    "Deploying unmanaged metadata from /{} of {}/{}".format(
                        dependency["subfolder"],
                        dependency["repo_owner"],
                        dependency["repo_name"],
                    ))
                gh_for_repo = self.project_config.get_github_api(
                    dependency["repo_owner"], dependency["repo_name"])
                package_zip = self._download_extract_github(
                    gh_for_repo,
                    dependency["repo_owner"],
                    dependency["repo_name"],
                    dependency["subfolder"],
                    ref=dependency.get("ref"),
                )

            if package_zip:
                if dependency.get("namespace_tokenize"):
                    self.logger.info(
                        "Replacing namespace prefix {}__ in files and filenames with namespace token strings"
                        .format("{}__".format(
                            dependency["namespace_tokenize"])))
                    package_zip = process_text_in_zipfile(
                        package_zip,
                        functools.partial(
                            tokenize_namespace,
                            namespace=dependency["namespace_tokenize"],
                            logger=self.logger,
                        ),
                    )

                if dependency.get("namespace_inject"):
                    self.logger.info(
                        "Replacing namespace tokens with {}".format(
                            "{}__".format(dependency["namespace_inject"])))
                    package_zip = process_text_in_zipfile(
                        package_zip,
                        functools.partial(
                            inject_namespace,
                            namespace=dependency["namespace_inject"],
                            managed=not dependency.get("unmanaged"),
                            namespaced_org=self.options["namespaced_org"],
                            logger=self.logger,
                        ),
                    )

                if dependency.get("namespace_strip"):
                    self.logger.info(
                        "Removing namespace prefix {}__ from all files and filenames"
                        .format("{}__".format(dependency["namespace_strip"])))
                    package_zip = process_text_in_zipfile(
                        package_zip,
                        functools.partial(
                            strip_namespace,
                            namespace=dependency["namespace_strip"],
                            logger=self.logger,
                        ),
                    )

                package_zip = ZipfilePackageZipBuilder(package_zip)()

            elif "namespace" in dependency:
                self.logger.info("Installing {} version {}".format(
                    dependency["namespace"], dependency["version"]))
                package_zip = InstallPackageZipBuilder(
                    dependency["namespace"],
                    dependency["version"],
                    securityType=self.options["security_type"],
                )()

        api = self.api_class(self,
                             package_zip,
                             purge_on_delete=self.options["purge_on_delete"])
        return api()