diff --git a/.efrocachemap b/.efrocachemap index bfa7d835..96de863e 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -420,25 +420,25 @@ "assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/75/1d/868bb04cf691736035c917d02762", "assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/44/2a/8535b446284235cb503947ece074", "assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/f5/d3/8e941851c4310465646c4167afc1", - "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/0a/fc/b242cbc98bbe2a5f5475ef5bc177", + "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/1d/dc/d529c3d37b5765384fab6d17275b", "assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/1e/40/fe46af4877b3de1fbc89db3bedb1", "assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/49/5f/b29bb65369040892fe6601801637", - "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/53/71/24b48e14424a7a06ee37a4a8f6f1", + "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/0c/cd/798753aa6c55f3a4cdccda0b23ab", "assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/aa/91/2411c0728bae33619c21237a2689", "assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/bb/9c/360fc084e6254a087096993af219", "assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/f2/90/62968ad28a2499a8d182a5740a85", "assets/build/ba_data/data/languages/danish.json": "https://files.ballistica.net/cache/ba1/3f/46/e4da3c1d2b0ebf916df55c608b28", "assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/86/33/8400929a710ae4a90f3f7cb57518", - "assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/a2/ef/1c2207471cb58efc805115b31468", + "assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/94/bb/79fd4608f4a3e22526442ba77090", "assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/6e/fd/685a4e1da031474d47a1d9eb2731", "assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/b4/35/4860ac0f2f30881221b5545560ce", "assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/9d/00/a8c4ef9f0a25e789c046bd741203", - "assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/8f/6a/32ef6c0141abace80b812c0b334b", + "assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/d7/54/541b617f3c00e3914ee5faef9d10", "assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/17/78/3fd0dca40e632ce53d03a944e7fa", "assets/build/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/7a/64/04464dc6ee8a45632857fa436bff", "assets/build/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/4d/4b/0790110201c9adb1b521e9a55e63", "assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/4f/1e/334843131d672fa6b5f6f1056e56", - "assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/5b/8a/9aa3a1fc24c8429d438aece0edc8", + "assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/a5/05/fbdf4d90b85609e4fa258e1ce814", "assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/0a/84/bbb6ed2abf66509406f534cbbb52", "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/68/c1/7bdfe775a89273d30f67c98689bf", "assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/db/eb/324f86a4b714240ae50ffeeed2f8", @@ -447,9 +447,9 @@ "assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/5e/97/5e3a1d4de8a7c2b062c8cd84c99a", "assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/e7/d8/ace32888249fc8b8cca0e2edb48b", "assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/b7/0a/fab820b96e7aa587ee56427ecdc2", - "assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/1a/cc/3d7a3c13d5efd49bf97b49118857", + "assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/1c/0f/ff64ff97ee5244a6d6c1a24fb4e3", "assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/50/9f/be006ba19be6a69a57837eb6dca0", - "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/41/97/9dd78e1d59383f9aee3d502518cb", + "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/b6/c9/999c95ff8d917126352a306d89a3", "assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/e0/f7/f6daa488dc29e303dea69aae864b", "assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/51/5f/ffc90e2af17e3715389bb4ab9a02", "assets/build/ba_data/data/maps/big_g.json": "https://files.ballistica.net/cache/ba1/47/0a/a617cc85d927b576c4e6fc1091ed", @@ -4132,16 +4132,16 @@ "assets/build/windows/x64/python.exe": "https://files.ballistica.net/cache/ba1/25/a7/dc87c1be41605eb6fefd0145144c", "assets/build/windows/x64/python37.dll": "https://files.ballistica.net/cache/ba1/b9/e4/d912f56e42e9991bcbb4c804cfcb", "assets/build/windows/x64/pythonw.exe": "https://files.ballistica.net/cache/ba1/6c/bb/b6f52c306aa4e88061510e96cefe", - "build/prefab/linux-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/59/62/0e5ac2b46a5438c44b71cbd481f3", - "build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d5/a0/24450aa3a109f46b8de530f3542c", - "build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/6b/c6/87e18650e0d915940872a4f0ebc5", - "build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/1e/4a/1d0da8d0daaa310d6c720e13b7f3", - "build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/85/1d/53dd5b11be195af10836418f88ba", - "build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ff/0d/6a44988894b902e945404cad30a3", - "build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/76/39/00257d02256b64d5fcea94c990a6", - "build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/11/8a/0dba7e2767e2e46a794d2292c22b", - "build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/2b/c6/ac4ab426f624f1c9be3adb9142de", - "build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/f9/24/6d644b6ba0f4805f973a93ba2306", - "build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/8b/ef/3f67c6eaa74ffae34c2b00fa9a2f", - "build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/c3/82/945ef147612716d416ba2c132462" + "build/prefab/linux-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e8/57/25003809feababaf68dbce0b557e", + "build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/55/ff/4cb4edbaf7f4d673c0eca16c693e", + "build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/00/27/0c269f03c72eda0edf22be780e08", + "build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/f9/31/fd6296daa0335da3fc9fcbf7fa0b", + "build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/86/24/0cedfbf41d6a26e4750d1ce0b341", + "build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/10/b4/6defb064f1540382822711783db5", + "build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/38/61/efc862fd604b9ad99449626c2752", + "build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9d/f6/fd220a57ce5a96917cff4e78129d", + "build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/68/c6/452bd7da7990b827f62a0cd42a08", + "build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/8c/06/eca90ff516b0534cbef48f00d792", + "build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/84/c8/73f7e64e8fa407d7f4f777a5a36b", + "build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/8c/9c/ff12fc5ae802a776d3ae74038a8a" } \ No newline at end of file diff --git a/Makefile b/Makefile index 0fec9ed1..99a72509 100644 --- a/Makefile +++ b/Makefile @@ -596,9 +596,9 @@ test-assetmanager: @tools/snippets pytest -o log_cli=true -o log_cli_level=debug -s -v \ tests/test_ba/test_assetmanager.py::test_assetmanager -test-dataclassutils: +test-dataclasses: @tools/snippets pytest -o log_cli=true -o log_cli_level=debug -s -v \ - tests/test_efro/test_dataclassutils.py + tests/test_efro/test_dataclasses.py # Tell make which of these targets don't represent files. .PHONY: test test-full test-assetmanager diff --git a/assets/.asset_manifest_public.json b/assets/.asset_manifest_public.json index c89807a6..f90691dc 100644 --- a/assets/.asset_manifest_public.json +++ b/assets/.asset_manifest_public.json @@ -453,13 +453,14 @@ "ba_data/python/bastd/ui/watch.py", "ba_data/python/efro/__init__.py", "ba_data/python/efro/__pycache__/__init__.cpython-37.opt-1.pyc", - "ba_data/python/efro/__pycache__/dataclassutils.cpython-37.opt-1.pyc", + "ba_data/python/efro/__pycache__/call.cpython-37.opt-1.pyc", + "ba_data/python/efro/__pycache__/dataclasses.cpython-37.opt-1.pyc", "ba_data/python/efro/__pycache__/error.cpython-37.opt-1.pyc", - "ba_data/python/efro/__pycache__/executils.cpython-37.opt-1.pyc", - "ba_data/python/efro/__pycache__/jsonutils.cpython-37.opt-1.pyc", + "ba_data/python/efro/__pycache__/json.cpython-37.opt-1.pyc", "ba_data/python/efro/__pycache__/terminal.cpython-37.opt-1.pyc", "ba_data/python/efro/__pycache__/util.cpython-37.opt-1.pyc", - "ba_data/python/efro/dataclassutils.py", + "ba_data/python/efro/call.py", + "ba_data/python/efro/dataclasses.py", "ba_data/python/efro/entity/__init__.py", "ba_data/python/efro/entity/__pycache__/__init__.cpython-37.opt-1.pyc", "ba_data/python/efro/entity/__pycache__/_base.cpython-37.opt-1.pyc", @@ -475,8 +476,7 @@ "ba_data/python/efro/entity/_value.py", "ba_data/python/efro/entity/util.py", "ba_data/python/efro/error.py", - "ba_data/python/efro/executils.py", - "ba_data/python/efro/jsonutils.py", + "ba_data/python/efro/json.py", "ba_data/python/efro/terminal.py", "ba_data/python/efro/util.py", "server/__pycache__/ballisticacore_server.cpython-37.opt-1.pyc", diff --git a/assets/Makefile b/assets/Makefile index 9a60dc2c..0aeb2198 100644 --- a/assets/Makefile +++ b/assets/Makefile @@ -1721,13 +1721,13 @@ build/ba_data/python/bastd/session/__pycache__/__init__.cpython-37.opt-1.pyc: \ SCRIPT_TARGETS_PY_PUBLIC_TOOLS = \ - build/ba_data/python/efro/executils.py \ build/ba_data/python/efro/error.py \ - build/ba_data/python/efro/dataclassutils.py \ build/ba_data/python/efro/terminal.py \ build/ba_data/python/efro/util.py \ build/ba_data/python/efro/__init__.py \ - build/ba_data/python/efro/jsonutils.py \ + build/ba_data/python/efro/dataclasses.py \ + build/ba_data/python/efro/call.py \ + build/ba_data/python/efro/json.py \ build/ba_data/python/efro/entity/_base.py \ build/ba_data/python/efro/entity/_support.py \ build/ba_data/python/efro/entity/util.py \ @@ -1741,13 +1741,13 @@ SCRIPT_TARGETS_PY_PUBLIC_TOOLS = \ build/ba_data/python/bacommon/err.py SCRIPT_TARGETS_PYC_PUBLIC_TOOLS = \ - build/ba_data/python/efro/__pycache__/executils.cpython-37.opt-1.pyc \ build/ba_data/python/efro/__pycache__/error.cpython-37.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/dataclassutils.cpython-37.opt-1.pyc \ build/ba_data/python/efro/__pycache__/terminal.cpython-37.opt-1.pyc \ build/ba_data/python/efro/__pycache__/util.cpython-37.opt-1.pyc \ build/ba_data/python/efro/__pycache__/__init__.cpython-37.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/jsonutils.cpython-37.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/dataclasses.cpython-37.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/call.cpython-37.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/json.cpython-37.opt-1.pyc \ build/ba_data/python/efro/entity/__pycache__/_base.cpython-37.opt-1.pyc \ build/ba_data/python/efro/entity/__pycache__/_support.cpython-37.opt-1.pyc \ build/ba_data/python/efro/entity/__pycache__/util.cpython-37.opt-1.pyc \ @@ -1773,21 +1773,11 @@ $(SCRIPT_TARGETS_PY_PUBLIC_TOOLS) : build/ba_data/python/%.py : ../tools/%.py # just generating explicit targets for each. Could perhaps look into using a # fancy for-loop instead, but perhaps listing these explicitly isn't so bad. -build/ba_data/python/efro/__pycache__/executils.cpython-37.opt-1.pyc: \ - build/ba_data/python/efro/executils.py - @echo Compiling script: $^ - @rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@ - build/ba_data/python/efro/__pycache__/error.cpython-37.opt-1.pyc: \ build/ba_data/python/efro/error.py @echo Compiling script: $^ @rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@ -build/ba_data/python/efro/__pycache__/dataclassutils.cpython-37.opt-1.pyc: \ - build/ba_data/python/efro/dataclassutils.py - @echo Compiling script: $^ - @rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@ - build/ba_data/python/efro/__pycache__/terminal.cpython-37.opt-1.pyc: \ build/ba_data/python/efro/terminal.py @echo Compiling script: $^ @@ -1803,8 +1793,18 @@ build/ba_data/python/efro/__pycache__/__init__.cpython-37.opt-1.pyc: \ @echo Compiling script: $^ @rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@ -build/ba_data/python/efro/__pycache__/jsonutils.cpython-37.opt-1.pyc: \ - build/ba_data/python/efro/jsonutils.py +build/ba_data/python/efro/__pycache__/dataclasses.cpython-37.opt-1.pyc: \ + build/ba_data/python/efro/dataclasses.py + @echo Compiling script: $^ + @rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@ + +build/ba_data/python/efro/__pycache__/call.cpython-37.opt-1.pyc: \ + build/ba_data/python/efro/call.py + @echo Compiling script: $^ + @rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@ + +build/ba_data/python/efro/__pycache__/json.cpython-37.opt-1.pyc: \ + build/ba_data/python/efro/json.py @echo Compiling script: $^ @rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@ diff --git a/assets/src/ba_data/python/ba/_general.py b/assets/src/ba_data/python/ba/_general.py index e948c4f6..73945d5d 100644 --- a/assets/src/ba_data/python/ba/_general.py +++ b/assets/src/ba_data/python/ba/_general.py @@ -29,7 +29,7 @@ import _ba if TYPE_CHECKING: from typing import Any, Type - from efro import executils + from efro.call import Call T = TypeVar('T') @@ -230,8 +230,8 @@ class _Call: if TYPE_CHECKING: - WeakCall = executils.Call - Call = executils.Call + WeakCall = Call + Call = Call else: WeakCall = _WeakCall WeakCall.__name__ = 'WeakCall' diff --git a/assets/src/server/ballisticacore_server.py b/assets/src/server/ballisticacore_server.py index 7ba69eb4..8ce43e83 100755 --- a/assets/src/server/ballisticacore_server.py +++ b/assets/src/server/ballisticacore_server.py @@ -40,7 +40,7 @@ sys.path += [ from efro.terminal import Clr from efro.error import CleanError -from efro.dataclassutils import dataclass_assign, dataclass_validate +from efro.dataclasses import dataclass_assign, dataclass_validate from bacommon.servermanager import (ServerConfig, StartServerModeCommand) if TYPE_CHECKING: diff --git a/config/toolconfigsrc/dir-locals.el b/config/toolconfigsrc/dir-locals.el index 7a6b9f48..2ff903f0 100644 --- a/config/toolconfigsrc/dir-locals.el +++ b/config/toolconfigsrc/dir-locals.el @@ -4,4 +4,7 @@ ;;; Turn flycheck mode on for our c++ stuff and tell jedi where to look for our python stuff. ((c++-mode (eval . (flycheck-mode))) (python-mode (jedi:server-args . ("--sys-path" "__EFRO_PROJECT_ROOT__/tools" - "--sys-path" "__EFRO_PROJECT_ROOT__/assets/src/ba_data/python")))) + "--sys-path" "__EFRO_PROJECT_ROOT__/assets/src/ba_data/python"))) + ;; Shorter name in projectile status bar to save valuable space. + (nil . ((projectile-project-name . "__EFRO_PROJECT_SHORTNAME__"))) + ) diff --git a/docs/ba_module.md b/docs/ba_module.md index 85139707..9b72c92b 100644 --- a/docs/ba_module.md +++ b/docs/ba_module.md @@ -1,5 +1,5 @@ -

last updated on 2020-05-06 for Ballistica version 1.5.0 build 20003

+

last updated on 2020-05-06 for Ballistica version 1.5.0 build 20006

This page documents the Python classes and functions in the 'ba' module, which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please let me know. Happy modding!


diff --git a/tests/test_efro/test_dataclassutils.py b/tests/test_efro/test_dataclasses.py similarity index 97% rename from tests/test_efro/test_dataclassutils.py rename to tests/test_efro/test_dataclasses.py index 680789be..4bd6a911 100644 --- a/tests/test_efro/test_dataclassutils.py +++ b/tests/test_efro/test_dataclasses.py @@ -18,7 +18,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # ----------------------------------------------------------------------------- -"""Testing dataclassutils functionality.""" +"""Testing dataclasses functionality.""" from __future__ import annotations @@ -27,7 +27,7 @@ from typing import TYPE_CHECKING import pytest -from efro.dataclassutils import dataclass_assign, dataclass_validate +from efro.dataclasses import dataclass_assign, dataclass_validate if TYPE_CHECKING: from typing import Optional diff --git a/tools/efro/executils.py b/tools/efro/call.py similarity index 99% rename from tools/efro/executils.py rename to tools/efro/call.py index d9a26046..62928c7a 100644 --- a/tools/efro/executils.py +++ b/tools/efro/call.py @@ -18,7 +18,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # ----------------------------------------------------------------------------- -"""Exec related functionality shared between all efro components.""" +"""Call related functionality shared between all efro components.""" from __future__ import annotations diff --git a/tools/efro/dataclassutils.py b/tools/efro/dataclasses.py similarity index 100% rename from tools/efro/dataclassutils.py rename to tools/efro/dataclasses.py diff --git a/tools/efro/entity/_entity.py b/tools/efro/entity/_entity.py index 3b12c2e1..144fec0f 100644 --- a/tools/efro/entity/_entity.py +++ b/tools/efro/entity/_entity.py @@ -27,7 +27,7 @@ from typing import TYPE_CHECKING, TypeVar from efro.entity._support import FieldInspector, BoundCompoundValue from efro.entity._value import CompoundValue -from efro.jsonutils import ExtendedJSONEncoder, ExtendedJSONDecoder +from efro.json import ExtendedJSONEncoder, ExtendedJSONDecoder if TYPE_CHECKING: from typing import Dict, Any, Type, Union, Optional diff --git a/tools/efro/jsonutils.py b/tools/efro/json.py similarity index 100% rename from tools/efro/jsonutils.py rename to tools/efro/json.py diff --git a/tools/efrotools/snippets.py b/tools/efrotools/snippets.py index 3198d5ee..6fd7f7d7 100644 --- a/tools/efrotools/snippets.py +++ b/tools/efrotools/snippets.py @@ -302,6 +302,11 @@ def tool_config_install() -> None: # Stick project-root wherever they want. cfg = cfg.replace('__EFRO_PROJECT_ROOT__', str(PROJROOT)) + # Short project name. + short_names = {'ballistica-internal': 'ba-int', 'ballistica': 'ba'} + shortname = short_names.get(PROJROOT.name, PROJROOT.name) + cfg = cfg.replace('__EFRO_PROJECT_SHORTNAME__', shortname) + stdsettings = textwrap.dedent(""" # We don't want all of our plain scripts complaining # about __main__ being redefined.