code: def _get_callable_full_name(self, fob, fin, uobj):
          
          # Check if object is a class property
          name = self._property_search(fob)
          if name:
              del fob, fin, uobj
              return name
          if os.path.isfile(fin):
              lineno = fob.f_lineno
              ret = self._callables_obj.get_callable_from_line(fin, lineno)
              del fob, fin, uobj, name, lineno
              return ret
          # Code executed in doctests does not have an actual callable object
          # exec-based callables do not have a valid file name
          fname = uobj and _get_func_code(uobj).co_filename
          if (not fname) or (fname and (not os.path.isfile(fname))):
              del fob, fin, uobj, name, fname
              return "dynamic"
          code_id = (
              inspect.getfile(uobj).replace(".pyc", "py"),
              inspect.getsourcelines(uobj)[1],
          )
          self._callables_obj.trace([code_id[0]])
          ret = self._callables_obj.reverse_callables_db[code_id]
          del fob, fin, uobj, name, fname, code_id
          return ret
docs: Get full path [module, class (if applicable), function name] of callable.