-
-
Save aahnik/2c18af0ee937bb2947873774f069adc4 to your computer and use it in GitHub Desktop.
# MIT License | |
# Aahnik 2021 | |
# a script to organize the files in loconotion output | |
# also updates html and css files | |
# unix (linux / mac) style file paths are used in the program, | |
# will fail inevitably if run on windows | |
# ditch windows | |
import logging | |
import os | |
structure = {'assets/images': ['png', 'jpg', 'jpeg','bmp','gif','ico'], | |
'assets/fonts': ['woff','ttf'], | |
'assets/css': ['css'], | |
'assets/js': ['js']} | |
# !! changing this structure, may break other stuff. | |
logging.info(structure) | |
mapping = {} | |
for folder, extensions in structure.items(): | |
for ext in extensions: | |
mapping[ext] = folder | |
logging.info(mapping) | |
all_files = [file for file in os.listdir() if os.path.isfile(file)] | |
logging.info(all_files) | |
old_to_new = {} | |
def rename(): | |
for file in all_files: | |
ext = file.split('.')[-1] | |
new_parent_dir = mapping.get(ext) | |
if new_parent_dir: | |
new_file = os.path.join(new_parent_dir, file) | |
if not os.path.isdir(new_parent_dir): | |
os.makedirs(new_parent_dir) | |
os.rename(file, new_file) | |
old_to_new[file] = new_file | |
logging.info('%s renamed to %s', file, new_file) | |
def update_code(file_name, old_to_new): | |
with open(file_name, 'r') as file: | |
content = file.read() | |
for old, new in old_to_new.items(): | |
if file_name.endswith('.css'): | |
new = new.replace('assets', '..') | |
# relative position of files related to css files | |
content = content.replace(old, new) | |
with open(file_name, 'w') as file: | |
file.write(content) | |
def main(): | |
rename() | |
print(old_to_new) | |
for file in os.listdir(): | |
if file.endswith('.html'): | |
logging.info(file) | |
update_code(file, old_to_new) | |
for file in os.listdir('assets/css'): | |
if file.endswith('.css'): | |
logging.info(file) | |
update_code(f'assets/css/{file}', old_to_new) | |
if __name__ == '__main__': | |
print('loconotion organizer') | |
input( | |
'This thing will run in your current directory. Are you sure you are in a correct directory ? \n Press [ENTER] to confirm or Ctrl + C to quit') | |
main() |
Hi, @jamesdeluk, have you not read the warning on top? read it. Go to the top of the page, and please read it.
windows is not supported in my script
Hi, @jamesdeluk, have you not read the warning on top? read it. Go to the top of the page, and please read it.
windows is not supported in my script
Sorry mate, I'd just woken up when I saw this and I was too excited to try it!
Please ignore my stupidity 😆
@jamesdeluk, will add windows support in future, but currently loconotion is not being actively developed.
it would be great if the author of loconotion integrates my script with loconotion in future.
❤️
Agreed!
Ran it on Linux and it works ;)
I found it doesn't currently work for:
Images: .bmp .gif .ico
Fonts: .ttf
Is this on purpose?
Is this on purpose?
nope. actually I never encountered those files.
you need to edit
structure = {'assets/images': ['png', 'jpg', 'jpeg'],
'assets/fonts': ['woff'],
'assets/css': ['css'],
'assets/js': ['js']}
this portion.
and I updated the script.
structure = {'assets/images': ['png', 'jpg', 'jpeg','bmp','gif','ico'],
'assets/fonts': ['woff','ttf'],
'assets/css': ['css'],
'assets/js': ['js']}
I read your # !! changing this structure, may break other stuff.
comment this time so didn't try that myself ;)
Fully working, including Ubuntu WSL on Windows. Sadly I've just found Loconotion itself doesn't work fully, hence having to raise an issue on their Git. Hope they reply soon!
I read your
# !! changing this structure, may break other stuff.
comment this time so didn't try that myself ;)
actually that's true, if you change the folder names.
actually, I made this script in a hurry, so things are not that robust.
Sadly I've just found Loconotion itself doesn't work fully,
loconotion needs a lot of improvements.
but the author is no more interacting, I may submit more PRs if he accepts my first one. or at least responds
Got an error and it broke my site :(