def _get_current_manager_bases(self) -> Dict[str, int]: model_sym = self.lookup_fully_qualified(helpers.MANAGER_CLASS_FULLNAME) if model_sym is not None and isinstance(model_sym.node, TypeInfo): return (helpers.get_django_metadata(model_sym.node) .setdefault('manager_bases', {helpers.MANAGER_CLASS_FULLNAME: 1})) else: return {}
def transform_form_class(ctx: ClassDefContext) -> None: sym = ctx.api.lookup_fully_qualified_or_none( helpers.BASEFORM_CLASS_FULLNAME) if sym is not None and isinstance(sym.node, TypeInfo): helpers.get_django_metadata( sym.node)['baseform_bases'][ctx.cls.fullname] = 1 make_meta_nested_class_inherit_from_any(ctx)
def extract_proper_type_for_get_form_class(ctx: MethodContext) -> Type: object_type = ctx.type if not isinstance(object_type, Instance): return ctx.default_return_type form_class_fullname = helpers.get_django_metadata(object_type.type).get('form_class', None) if not form_class_fullname: return ctx.default_return_type return TypeType(ctx.api.named_generic_type(form_class_fullname, []))
def transform_model_class(ctx: ClassDefContext, ignore_missing_model_attributes: bool) -> None: try: sym = ctx.api.lookup_fully_qualified(helpers.MODEL_CLASS_FULLNAME) except KeyError: # models.Model is not loaded, skip metadata model write pass else: if sym is not None and isinstance(sym.node, TypeInfo): helpers.get_django_metadata( sym.node)['model_bases'][ctx.cls.fullname] = 1 process_model_class(ctx, ignore_missing_model_attributes)
def get_function_hook( self, fullname: str) -> Optional[Callable[[FunctionContext], Type]]: if fullname == 'django.contrib.auth.get_user_model': return partial(return_user_model_hook, settings_modules=self. _get_settings_modules_in_order_of_priority()) manager_bases = self._get_current_manager_bases() if fullname in manager_bases: return determine_proper_manager_type info = self._get_typeinfo_or_none(fullname) if info: if info.has_base(helpers.FIELD_FULLNAME): return fields.adjust_return_type_of_field_instantiation if helpers.get_django_metadata(info).get('generated_init'): return init_create.redefine_and_typecheck_model_init
def extract_proper_type_for_get_form(ctx: MethodContext) -> Type: object_type = ctx.type if not isinstance(object_type, Instance): return ctx.default_return_type form_class_type = helpers.get_argument_type_by_name(ctx, 'form_class') if form_class_type is None or isinstance(form_class_type, NoneTyp): # extract from specified form_class in metadata form_class_fullname = helpers.get_django_metadata(object_type.type).get('form_class', None) if not form_class_fullname: return ctx.default_return_type return ctx.api.named_generic_type(form_class_fullname, []) if isinstance(form_class_type, TypeType) and isinstance(form_class_type.item, Instance): return form_class_type.item if isinstance(form_class_type, CallableType) and isinstance(form_class_type.ret_type, Instance): return form_class_type.ret_type return ctx.default_return_type
def transform_form_view(ctx: ClassDefContext) -> None: form_class_value = helpers.get_assigned_value_for_class(ctx.cls.info, 'form_class') if isinstance(form_class_value, NameExpr): helpers.get_django_metadata(ctx.cls.info)['form_class'] = form_class_value.fullname
def transform_manager_class(ctx: ClassDefContext) -> None: sym = ctx.api.lookup_fully_qualified_or_none( helpers.MANAGER_CLASS_FULLNAME) if sym is not None and isinstance(sym.node, TypeInfo): helpers.get_django_metadata( sym.node)['manager_bases'][ctx.cls.fullname] = 1