|  |  |  | @ -2,18 +2,28 @@ | 
		
	
		
			
				|  |  |  |  | import pathlib | 
		
	
		
			
				|  |  |  |  | from typing import List | 
		
	
		
			
				|  |  |  |  | import argparse | 
		
	
		
			
				|  |  |  |  | import requests | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | def download_file(url: str, path: pathlib.Path): | 
		
	
		
			
				|  |  |  |  |     response = requests.get(url) | 
		
	
		
			
				|  |  |  |  |     path.write_bytes(response.content) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | # create a new pyscript project | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | def create_project(root_folder: pathlib.Path, | 
		
	
		
			
				|  |  |  |  |                    title: str, | 
		
	
		
			
				|  |  |  |  |                    packages: List[str], | 
		
	
		
			
				|  |  |  |  |                    paths: List[str] = None, | 
		
	
		
			
				|  |  |  |  |                    pyscript_css_url: str = "https://pyscript.net/alpha/pyscript.css", | 
		
	
		
			
				|  |  |  |  |                    pyscript_js_url: str = "https://pyscript.net/alpha/pyscript.js"): | 
		
	
		
			
				|  |  |  |  |                    pyscript_js_url: str = "https://pyscript.net/alpha/pyscript.min.js", | 
		
	
		
			
				|  |  |  |  |                    pyscript_py_url: str = "https://pyscript.net/alpha/pyscript.py", | 
		
	
		
			
				|  |  |  |  |                    bootstrap_css_url: str = "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css", | 
		
	
		
			
				|  |  |  |  |                    bootstrap_js_url: str = "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js", | 
		
	
		
			
				|  |  |  |  |                    pyscript_bootstrap_templates_wheel_url: str = "https://the-cake-is-a-lie.net/gogs/jonas/pyscript-bootstrap-templates/raw/branch/main/dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl"): | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     pyenv = "- git+https://the-cake-is-a-lie.net/gogs/jonas/pyscript-bootstrap-templates.git" | 
		
	
		
			
				|  |  |  |  |     pyenv = f"- ./resources/{pyscript_bootstrap_templates_wheel_url.split('/')[-1]}" | 
		
	
		
			
				|  |  |  |  |     for package in packages: | 
		
	
		
			
				|  |  |  |  |         pyenv += f"\n            - {package}" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -33,36 +43,60 @@ def create_project(root_folder: pathlib.Path, | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         <!-- Bootstrap CSS --> | 
		
	
		
			
				|  |  |  |  |         <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> | 
		
	
		
			
				|  |  |  |  |         <link href="./resources/bootstrap.css"> | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         <link rel="stylesheet" href="{pyscript_css_url}" /> | 
		
	
		
			
				|  |  |  |  |         <script defer src="{pyscript_js_url}"></script> | 
		
	
		
			
				|  |  |  |  |         <link rel="stylesheet" href="./resources/pyscript.css" /> | 
		
	
		
			
				|  |  |  |  |         <script defer src="./resources/pyscript.js"></script> | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         <title>{title}</title> | 
		
	
		
			
				|  |  |  |  |          | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         <py-env> | 
		
	
		
			
				|  |  |  |  |             {pyenv} | 
		
	
		
			
				|  |  |  |  |         </py-env> | 
		
	
		
			
				|  |  |  |  |     </head> | 
		
	
		
			
				|  |  |  |  |     <body style="width: 100%; height: 100%"> | 
		
	
		
			
				|  |  |  |  |         <div id="simple_app" style="height: 100%; min-height: 100%"></div> | 
		
	
		
			
				|  |  |  |  |         <div id="pyscript_app" style="height: 100%; min-height: 100%"></div> | 
		
	
		
			
				|  |  |  |  |         <py-script src="./main.py"></py-script> | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script> | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         <script src="./resources/bootstrap.js"></script> | 
		
	
		
			
				|  |  |  |  |     </body> | 
		
	
		
			
				|  |  |  |  | </html> | 
		
	
		
			
				|  |  |  |  |     """ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     py = f""" | 
		
	
		
			
				|  |  |  |  | from pyscript_bootstrap_templates import bootstrap_templates | 
		
	
		
			
				|  |  |  |  | from pyscript_bootstrap_templates import bootstrap_HTML as bHTML | 
		
	
		
			
				|  |  |  |  | from pyscript_bootstrap_templates import HTML as HTML | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | app = bootstrap_templates.PyScriptBootstrapDashboard( | 
		
	
		
			
				|  |  |  |  |     parent_element="pyscript_app", brand_name="{title}") | 
		
	
		
			
				|  |  |  |  | div = bHTML.BootstrapContainer("This is a sidebar", parent=app.sidebar) | 
		
	
		
			
				|  |  |  |  | div.font_size = 4 | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | btn = bHTML.ButtonPrimary("Click me", parent=app.sidebar) | 
		
	
		
			
				|  |  |  |  | btn.w = 100 | 
		
	
		
			
				|  |  |  |  | btn.onclick = lambda _: bHTML.AlertSuccess( | 
		
	
		
			
				|  |  |  |  |     "You clicked me!", parent=app.main_area) | 
		
	
		
			
				|  |  |  |  |     """ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     if not root_folder.exists(): | 
		
	
		
			
				|  |  |  |  |         root_folder.mkdir(parents=True) | 
		
	
		
			
				|  |  |  |  |     if root_folder.exists(): | 
		
	
		
			
				|  |  |  |  |         raise("Value Error: root_folder already exists. Please choose a different name.") | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     root_folder.mkdir(parents=True) | 
		
	
		
			
				|  |  |  |  |     (root_folder / "resources").mkdir(parents=True) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     # Download files: | 
		
	
		
			
				|  |  |  |  |     download_file(pyscript_css_url, root_folder / "resources" / "pyscript.css") | 
		
	
		
			
				|  |  |  |  |     download_file(pyscript_js_url, root_folder / "resources" / "pyscript.js") | 
		
	
		
			
				|  |  |  |  |     download_file(pyscript_py_url, root_folder / "resources" / "pyscript.py") | 
		
	
		
			
				|  |  |  |  |     download_file(bootstrap_css_url, root_folder / | 
		
	
		
			
				|  |  |  |  |                   "resources" / "bootstrap.css") | 
		
	
		
			
				|  |  |  |  |     download_file(bootstrap_js_url, root_folder / "resources" / "bootstrap.js") | 
		
	
		
			
				|  |  |  |  |     download_file(pyscript_bootstrap_templates_wheel_url, | 
		
	
		
			
				|  |  |  |  |                   root_folder / "resources" / pyscript_bootstrap_templates_wheel_url.split("/")[-1]) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     (root_folder / "index.html").write_text(html, encoding="utf-8") | 
		
	
		
			
				|  |  |  |  |     (root_folder / "main.py").write_text("", encoding="utf-8") | 
		
	
		
			
				|  |  |  |  |     (root_folder / "main.py").write_text(py, encoding="utf-8") | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | def main(): | 
		
	
	
		
			
				
					
					|  |  |  | @ -80,16 +114,20 @@ def main(): | 
		
	
		
			
				|  |  |  |  |     argument_parser.add_argument("--pyscript_css_url", type=str, | 
		
	
		
			
				|  |  |  |  |                                  help="the url of the pyscript css file", default="https://pyscript.net/alpha/pyscript.css") | 
		
	
		
			
				|  |  |  |  |     argument_parser.add_argument("--pyscript_js_url", type=str, | 
		
	
		
			
				|  |  |  |  |                                  help="the url of the pyscript js file", default="https://pyscript.net/alpha/pyscript.js") | 
		
	
		
			
				|  |  |  |  |     arguments = argument_parser.parse_args() | 
		
	
		
			
				|  |  |  |  |                                  help="the url of the pyscript js file", default="https://pyscript.net/alpha/pyscript.min.js") | 
		
	
		
			
				|  |  |  |  |     argument_parser.add_argument("--pyscript_py_url", type=str, | 
		
	
		
			
				|  |  |  |  |                                     help="the url of the pyscript py file", default="https://pyscript.net/alpha/pyscript.py") | 
		
	
		
			
				|  |  |  |  |     argument_parser.add_argument("--bootstrap_css_url", type=str, | 
		
	
		
			
				|  |  |  |  |                                     help="the url of the bootstrap css file", default="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css") | 
		
	
		
			
				|  |  |  |  |     argument_parser.add_argument("--bootstrap_js_url", type=str, | 
		
	
		
			
				|  |  |  |  |                                     help="the url of the bootstrap js file", default="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js") | 
		
	
		
			
				|  |  |  |  |     argument_parser.add_argument("--pyscript_bootstrap_templates_wheel_url", type=str, | 
		
	
		
			
				|  |  |  |  |                                     help="the url of the pyscript bootstrap templates wheel file", default="https://the-cake-is-a-lie.net/gogs/jonas/pyscript-bootstrap-templates/raw/branch/main/dist/pyscript_bootstrap_templates-0.1.0-py3-none-any.whl") | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     create_project(arguments.root_folder, | 
		
	
		
			
				|  |  |  |  |                    arguments.title, | 
		
	
		
			
				|  |  |  |  |                    arguments.packages, | 
		
	
		
			
				|  |  |  |  |                    arguments.paths, | 
		
	
		
			
				|  |  |  |  |                    arguments.pyscript_css_url, | 
		
	
		
			
				|  |  |  |  |                    arguments.pyscript_js_url) | 
		
	
		
			
				|  |  |  |  |     args = argument_parser.parse_args() | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     create_project(args.root_folder, args.title, args.packages, args.paths, args.pyscript_css_url, args.pyscript_js_url, args.pyscript_py_url, args.bootstrap_css_url, args.bootstrap_js_url, args.pyscript_bootstrap_templates_wheel_url) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | if __name__ == "__main__": | 
		
	
		
			
				|  |  |  |  |     main() | 
		
	
		
			
				|  |  |  |  |     exit(0) | 
		
	
		
			
				|  |  |  |  |     exit(0) | 
		
	
	
		
			
				
					
					| 
							
							
							
						 |  |  | 
 |