[go: up one dir, main page]

File: create_plugin.py

package info (click to toggle)
uranium 3.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 5,876 kB
  • sloc: python: 22,349; sh: 111; makefile: 11
file content (50 lines) | stat: -rw-r--r-- 1,964 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import argparse
import os.path
import zipfile

def checkValidPlugin(path):
    # A plugin must be a folder
    if not os.path.isdir(path):
        return False

    # A plugin must contain an __init__.py
    if not os.path.isfile(os.path.join(path, "__init__.py")):
        return False
    
    # .. and a plugin must contain an plugin.json!
    if not os.path.isfile(os.path.join(path, "plugin.json")):
        return False

    return True

def zipDirectory(path, zip_handle):
    # zip_handle is zipfile handle
    for root, dirs, files in os.walk(path):
        for file in files:
            filename = os.path.join(root, file)
            if os.path.isfile(filename) and not file.startswith(".git") and ".git" not in root:
                _, extension = os.path.splitext(filename)
                if extension not in excluded_extentions:
                    zip_handle.write(os.path.join(root, file), os.path.relpath(os.path.join(root, file), os.path.join(path, '..')))

excluded_extentions = [".pyc"]

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("plugin_location", type = str, help = "Location of plugin folder")
    args = parser.parse_args()

    full_plugin_path = os.path.join(os.getcwd(), args.plugin_location)

    if not checkValidPlugin(full_plugin_path):
        print("Provided plug-in location is not a valid plug-in folder.")
        exit()

    plugin_name = os.path.basename(os.path.normpath(full_plugin_path))
    plugin_file_location = plugin_name + ".umplugin"
    with zipfile.ZipFile(plugin_file_location, "w") as plugin_zip:
        # Ensure that the root folder is created correctly. We need to tell zip to not compress the folder!
        subdirectory = zipfile.ZipInfo(plugin_name + "/")
        plugin_zip.writestr(subdirectory, "", compress_type = zipfile.ZIP_STORED) #Writing an empty string creates the directory.
        zipDirectory(full_plugin_path, plugin_zip)
    print("Done!")