Source code for pywf_internal_proprietary.define_10_cloudflare
# -*- coding: utf-8 -*-"""Setup automation for Cloudflare."""importtypingasTimportosimportsubprocessimportdataclassesfromfunctoolsimportcached_propertytry:importboto3importbotocore.exceptionsimportrequestsfromgithubimportGithubexceptImportError:# pragma: no coverpassfrom.vendor.emojiimportEmojifrom.vendor.better_pathlibimporttemp_cwdfrom.loggerimportloggerfrom.runtimeimportIS_CIifT.TYPE_CHECKING:# pragma: no coverfrom.defineimportPyWf
[docs]@dataclasses.dataclassclassPyWfCloudflare:# pragma: no cover""" Namespace class for Cloudflare setup automation. """@cached_propertydefcloudflare_token(self:"PyWf")->str:ifIS_CI:returnos.environ["CLOUDFLARE_API_TOKEN"]else:ifself.path_cloudflare_token_file.exists():returnself.path_cloudflare_token_file.read_text(encoding="utf-8").strip()else:# pragma: no covermessage=(f"{Emoji.error} Cannot find Cloudflare token file at "f"{self.path_cloudflare_token_file}!\n"f"{self.__class__.path_cloudflare_token_file.__doc__}")raiseFileNotFoundError(message)@logger.emoji_block(msg="Create Cloudflare Pages project",emoji=Emoji.doc,)defcreate_cloudflare_pages_project(self:"PyWf",real_run:bool=True,verbose:bool=False,):os.environ["CLOUDFLARE_API_TOKEN"]=self.cloudflare_tokenargs=[f"{self.path_bin_wrangler}","pages","project","create",self.package_name_slug,"--production-branch","main",]ifreal_run:withtemp_cwd(self.dir_project_root):subprocess.run(args,check=True)@logger.emoji_block(msg="Create Cloudflare Pages project",emoji=Emoji.doc,)defdeploy_cloudflare_pages(self:"PyWf",real_run:bool=True,verbose:bool=False,):os.environ["CLOUDFLARE_API_TOKEN"]=self.cloudflare_tokenargs=[f"{self.path_bin_wrangler}","pages","deploy",f"{self.dir_sphinx_doc_build_html}",f"--project-name={self.package_name_slug}",]ifreal_run:withtemp_cwd(self.dir_project_root):subprocess.run(args,check=True)@logger.emoji_block(msg="Setup Cloudflare Pages Upload Token on GitHub",emoji=Emoji.test,)def_setup_cloudflare_pages_upload_token_on_github(self:"PyWf",real_run:bool=True,):""" Apply the cloudflare pages upload token to GitHub Action secrets in your GitHub repository. Ref: - https://docs.codecov.com/reference/repos_retrieve - https://docs.codecov.com/reference/repos_config_retrieve - https://pygithub.readthedocs.io/en/latest/examples/Repository.html :returns: a boolean flag to indicate whether the operation is performed. """logger.info("Setting up Cloudflare pages upload token on GitHub...")withlogger.indent():logger.info(f"preview at {self.github_actions_secrets_settings_url}")gh=Github(self.github_token)repo=gh.get_repo(self.github_repo_fullname)ifreal_run:repo.create_secret(secret_name="CLOUDFLARE_API_TOKEN",unencrypted_value=self.cloudflare_token,secret_type="actions",)returnreal_run