This is the script most of my future (2022.12.19+) Python projects will be based off of. Some of it is inspired by Lua.
Compatible with Python 3.4 and up. Lower may work.
The initialization works like this:
1. bootstrap(globName,modName) is ran -- It initializes the mfp module, which contains all extra functionality. It takes 2 arguments, the name the module will be in global, and the name of the module. Preferably, you do not edit this.
2. init() is ran -- This where you write you initialization code, if your script is usable as a module.
3. main() is ran, if your script is not an import -- This is where you put your program code, if it is one.
Provides the following mfpl.* (local to current script):
* s: The script's full path.
* sd: The script's full directory.
* g: The script's global as a Bunch.
Provides the following mfp.* (global to all scripts):
* s: The main script's full path.
* sd: The main script's full directory.
* p(pathList): Combines a list into a path string.
* pUp(path): Goes up (..) in the path.
* setProgramName(name): Set the name of your main program, only works on first call. You should run it before running any other mfp modules.
* programName: The name of your program. DO NOT modify this variable directly, use mfp.setProgramName().
* require(name,env): Runs a module from mfp.paths, saves its global, and returns the script's global as a Bunch. The module's global is saved in env. If env is not defined, it saves the global in the main env. If a module of the same name has already been required, it returns the already saved global.
* dorequire(name): Does the same as above, but does not save the globals, and can re-require.
* paths: The directories mfp should search for modules in with mfp.require(). "?" in all paths is replaced with the name given to mfp.require().
* dofile(path): Runs a script from a raw path. It does not use mfp.paths. Returns the script's global as a Bunch.
* docode(text): Runs string as Python code. Returns the script's global as a Bunch.
* g: A Bunch where you can store variables accessible by all mfp modules and scripts.
* Bunch(): Creates a Bunch. Read about it here: https://github.com/Infinidat/munch
* bunchify(list): Converts a list into a Bunch.
* unbunchify(Bunch): Converts a Bunch into a regular list.