<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def print_info(self, buf=None, format_=FileFormat.yaml, skip_attributes=None, include_release=False):
 """Print the contents of the package. Args: buf (file-like object):
 Stream to write to. format_ (`FileFormat`):
 Format to write in. skip_attributes (list of str):
 List of attributes to not print. include_release (bool):
 If True, include release-related attributes, such as 'timestamp' and 'changelog' """

        data = self.validated_data().copy()

        # config is a special case. We only really want to show any config settings
        # that were in the package.py, not the entire Config contents that get
        # grafted onto the Package/Variant instance. However Variant has an empy
        # 'data' dict property, since it forwards data from its parent package.
        data.pop("config", None)
        if self.config:
            if isinstance(self, Package):
                config_dict = self.data.get("config")
            else:
                config_dict = self.parent.data.get("config")
            data["config"] = config_dict

        if not include_release:
            skip_attributes = list(skip_attributes or []) + list(package_release_keys)

        buf = buf or sys.stdout
        dump_package_data(data, buf=buf, format_=format_,
                          skip_attributes=skip_attributes)