docs: def process_value(self, value):
          """Process publication value
          """
          # UID -> SuperModel
          if api.is_uid(value):
              return self.to_super_model(value)
          # Content -> SuperModel
          elif api.is_object(value):
              return self.to_super_model(value)
          # String -> Unicode
          elif isinstance(value, basestring):
              return safe_unicode(value).encode("utf-8")
          # DateTime -> DateTime
          elif isinstance(value, DateTime):
              return value
          # Process list values
          elif isinstance(value, (LazyMap, list, tuple)):
              return map(self.process_value, value)
          # Process dict values
          elif isinstance(value, (dict)):
              return {k: self.process_value(v) for k, v in value.iteritems()}
          # Process function
          elif safe_callable(value):
              return self.process_value(value())
          # Always return the unprocessed value last
          return value