<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _connect_model(self, model):
 """ Used internally to connect the property into the model, and register self as a value observer for that property"""


        parts = self._prop_name.split(".")
        if len(parts) > 1:
            # identifies the model
            models = parts[:-1]
            Intermediate(model, models, self)
            for name in models:
                model = getattr(model, name)
                if not isinstance(model, Model):
                    raise TypeError("Attribute '" + name +
                                    "' was expected to be a Model, but found: " +
                                    str(model))
            prop = parts[-1]
        else: prop = parts[0]

        # prop is inside model?
        if not hasattr(model, prop):
            raise ValueError("Attribute '" + prop +
                             "' not found in model " + str(model))

        # is it observable?
        if model.has_property(prop):
            # we need to create an observing method before registering
            meth = types.MethodType(self._get_observer_fun(prop), self)
            setattr(self, meth.__name__, meth)

        self._prop = getattr(model, prop)
        self._prop_name = prop

        # registration of model:
        self._model = model
        self.observe_model(model)