add support for Apps.get_model for migrations

This commit is contained in:
Maxim Kurnikov
2018-12-21 01:17:47 +03:00
parent c22e86377d
commit 3c3e9305f4
6 changed files with 97 additions and 11 deletions

View File

@@ -27,10 +27,8 @@ def get_models_file(app_name: str, all_modules: typing.Dict[str, MypyFile]) -> O
return all_modules.get(models_module)
def get_model_fullname_from_string(expr: StrExpr,
all_modules: Dict[str, MypyFile]) -> Optional[str]:
app_name, model_name = expr.value.split('.')
def get_model_fullname(app_name: str, model_name: str,
all_modules: Dict[str, MypyFile]) -> Optional[str]:
models_file = get_models_file(app_name, all_modules)
if models_file is None:
# not imported so far, not supported
@@ -47,6 +45,21 @@ def get_model_fullname_from_string(expr: StrExpr,
return None
class InvalidModelString(ValueError):
def __init__(self, model_string: str):
self.model_string = model_string
def get_model_fullname_from_string(expr: StrExpr,
all_modules: Dict[str, MypyFile]) -> Optional[str]:
model_string = expr.value
if '.' not in model_string:
raise InvalidModelString(model_string)
app_name, model_name = model_string.split('.')
return get_model_fullname(app_name, model_name, all_modules)
def lookup_fully_qualified_generic(name: str, all_modules: Dict[str, MypyFile]) -> Optional[SymbolNode]:
if '.' not in name:
return None