code: def getAttrWithFallback(info, attr):
      
      if hasattr(info, attr) and getattr(info, attr) is not None:
          value = getattr(info, attr)
      else:
          if attr in specialFallbacks:
              value = specialFallbacks[attr](info)
          else:
              value = staticFallbackData[attr]
      return value
docs: Get the value for *attr* from the *info* object.
      If the object does not have the attribute or the value
      for the atribute is None, this will either get a
      value from a predefined set of attributes or it
      will synthesize a value from the available data.