Coverage for /Users/davegaeddert/Development/dropseed/plain/plain-tailwind/plain/tailwind/cli.py: 25%

64 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-10-16 22:04 -0500

1import os 

2 

3import click 

4 

5from plain.packages import packages 

6from plain.runtime import APP_PATH 

7 

8from .core import Tailwind 

9 

10 

11@click.group("tailwind") 

12def cli(): 

13 """Tailwind CSS""" 

14 pass 

15 

16 

17@cli.command() 

18def init(): 

19 """Install Tailwind, create a tailwind.config.js and app/assets/src/tailwind.css""" 

20 tailwind = Tailwind() 

21 

22 tailwind_installed = tailwind.is_installed() 

23 

24 if not tailwind_installed: 

25 # Need to do an initial download to run init 

26 tailwind.download() 

27 

28 # Config needs to exist first so we can save the version here 

29 if not tailwind.config_exists(): 

30 click.secho("Creating Tailwind config...", bold=True) 

31 tailwind.create_config() 

32 

33 if not tailwind_installed: 

34 # Mostly need to save the version to config... 

35 click.secho("Installing Tailwind standalone...", bold=True, nl=False) 

36 version = tailwind.install() 

37 click.secho(f"Tailwind {version} installed", fg="green") 

38 

39 if not tailwind.src_css_exists(): 

40 click.secho("Creating Tailwind source CSS...", bold=True) 

41 tailwind.create_src_css() 

42 

43 

44@cli.command() 

45@click.option("--watch", is_flag=True) 

46@click.option("--minify", is_flag=True) 

47def compile(watch, minify): 

48 """Compile a Tailwind CSS file""" 

49 tailwind = Tailwind() 

50 

51 if not tailwind.is_installed() or tailwind.needs_update(): 

52 version_to_install = tailwind.get_version_from_config() 

53 if version_to_install: 

54 click.secho( 

55 f"Installing Tailwind standalone {version_to_install}...", 

56 bold=True, 

57 nl=False, 

58 ) 

59 version = tailwind.install(version_to_install) 

60 else: 

61 click.secho("Installing Tailwind standalone...", bold=True, nl=False) 

62 version = tailwind.install() 

63 click.secho(f"Tailwind {version} installed", fg="green") 

64 

65 args = [] 

66 args.append("-i") 

67 print(f"Input: {tailwind.src_css_path}") 

68 args.append(tailwind.src_css_path) 

69 

70 args.append("-o") 

71 print(f"Output: {tailwind.dist_css_path}") 

72 args.append(tailwind.dist_css_path) 

73 

74 # These paths should actually work on Windows too 

75 # https://github.com/mrmlnc/fast-glob#how-to-write-patterns-on-windows 

76 args.append("--content") 

77 paths = [ 

78 os.path.relpath(APP_PATH) + "/**/*.{html,js}", 

79 ] 

80 

81 # Add paths from installed packages 

82 for package_config in packages.get_package_configs(): 

83 paths.append(os.path.relpath(package_config.path) + "/**/*.{html,js}") 

84 

85 content = ",".join(paths) 

86 print(f"Content: {content}") 

87 args.append(content) 

88 

89 if watch: 

90 args.append("--watch") 

91 

92 if minify: 

93 args.append("--minify") 

94 

95 tailwind.invoke(*args, cwd=os.path.dirname(APP_PATH)) 

96 

97 

98@cli.command() 

99def update(): 

100 """Update the Tailwind CSS version""" 

101 tailwind = Tailwind() 

102 click.secho("Installing Tailwind standalone...", bold=True, nl=True) 

103 version = tailwind.install() 

104 click.secho(f"Tailwind {version} installed", fg="green") 

105 

106 

107if __name__ == "__main__": 

108 cli()