# for more information from mrAdam Marsden please visit:# https://gist.github.com/AdamMarsden/7b85e8d5bdb5bef969a0frompathlibimportPathclassStructureBuilder:def__init__(self,project_name,structure,main_file_name):self.project_path=Path(__file__).parent.absolute()self.project_name=project_nameself.structure=structureself.main_file_name=main_file_nameself.main_directories_generator=(Path(self.project_path/self.project_name/m_dir)form_dirinself.structure.keys())self.files_generator=(Path(self.project_path/self.project_name/mdir/sass_file)formdirinself.structureforsass_fileinself.structure[mdir])definitialize_project(self):# create main directoryPath(self.project_path/self.project_name).mkdir(parents=True,exist_ok=True)# create main sass filePath(self.project_path/self.project_name/self.main_file_name).touch(exist_ok=True)defwrite_files(self):fordirecinself.main_directories_generator:Path(direc).mkdir(parents=True,exist_ok=True)forfinself.files_generator:f.touch(exist_ok=True)defremove_prefix(self,text,prefix):returntext[text.startswith(prefix)andlen(prefix):]defwrite_main_file_contents(self):# generate imports from files if it's begin with _main_file=Path(self.project_path/self.project_name/self.main_file_name)withmain_file.open("w")asf:formdirinself.structure:f.write("\n")# write import commentf.write(f"// import '{mdir}' styles\n")forsass_fileinself.structure[mdir]:ifsass_file.startswith("_"):# remove _ from file nameclean_name=self.remove_prefix(sass_file,"_")# remove .scss extensionclean_name=Path(clean_name).stemf.write(f"@use '{mdir}/{clean_name}';\n")if__name__=='__main__':folders_structure={"base":["_reset.scss","_typography.scss"],"components":["_buttons.scss","_carousel.scss","_cover.scss","_dropdown.scss",],"layout":["_navigation.scss","_grid.scss","_header.scss","_footer.scss","_sidebar.scss","_forms.scss",],"pages":["_home.scss","_contact.scss",],"sassutils":["_variables.scss","_functions.scss","_mixins.scss","_helpers.scss",],"vendors":["_bootstrap.scss","_jqueryui.scss",]}builder=StructureBuilder(project_name="sass",structure=folders_structure,main_file_name="main.scss")builder.initialize_project()builder.write_files()builder.write_main_file_contents()
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.