diff --git a/.gitignore b/.gitignore index 135d8ec85..86d52b9cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ __pycache__ +*.swp .vscode .history .coverage diff --git a/brownie/exceptions.py b/brownie/exceptions.py index fc8d953e6..aa7452b55 100644 --- a/brownie/exceptions.py +++ b/brownie/exceptions.py @@ -169,6 +169,10 @@ class ProjectNotFound(Exception): pass +class BadProjectName(Exception): + pass + + class CompilerError(Exception): def __init__(self, e: Type[psutil.Popen], compiler: str = "Compiler") -> None: self.compiler = compiler diff --git a/brownie/project/main.py b/brownie/project/main.py index cf9f6b3ed..377ff6941 100644 --- a/brownie/project/main.py +++ b/brownie/project/main.py @@ -34,6 +34,7 @@ ) from brownie._expansion import expand_posix_vars from brownie.exceptions import ( + BadProjectName, BrownieEnvironmentWarning, InvalidPackage, PragmaError, @@ -735,7 +736,9 @@ def load(project_path: Union[Path, str, None] = None, name: Optional[str] = None name = project_path.name if not name.lower().endswith("project"): name += " project" - name = "".join(i for i in name.title() if i.isalpha()) + if not name[0].isalpha(): + raise BadProjectName("Project must start with an alphabetic character") + name = "".join(i for i in name.title() if i.isalnum()) if next((True for i in _loaded_projects if i._name == name), False): raise ProjectAlreadyLoaded("There is already a project loaded with this name")